[{"data":1,"prerenderedAt":170},["ShallowReactive",2],{"i-lucide:layers":3,"i-lucide:git-commit-horizontal":8,"i-lucide:refresh-cw":10,"i-lucide:book-open":12,"i-lucide:image":14,"i-lucide:webhook":16,"i-lucide:home":18,"i-lucide:layout-grid":20,"i-lucide:tag":22,"i-lucide:newspaper":24,"i-lucide:map":26,"i-lucide:flask-conical":28,"i-lucide:arrow-right":30,"i-lucide:chevron-right":32,"i-lucide:search":34,"i-lucide:monitor":36,"content:\u002Finternal\u002Farchitecture\u002Fresources":38,"i-lucide:info":168,"i-lucide:layers-2":165,"i-lucide:key-round":165,"i-lucide:shield-check":165,"i-lucide:box":165,"i-lucide:share-2":165,"i-lucide:clock":165,"i-lucide:building-2":165,"i-lucide:bell":165,"i-lucide:dices":165,"i-lucide:sprout":165,"i-lucide:puzzle":165,"i-lucide:shield-alert":165,"i-lucide:activity":165,"i-lucide:blocks":165},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z\"\u002F>\u003Cpath d=\"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12\"\u002F>\u003Cpath d=\"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"3\"\u002F>\u003Cpath d=\"M3 12h6m6 0h6\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M3 12a9 9 0 0 1 9-9a9.75 9.75 0 0 1 6.74 2.74L21 8\"\u002F>\u003Cpath d=\"M21 3v5h-5m5 4a9 9 0 0 1-9 9a9.75 9.75 0 0 1-6.74-2.74L3 16\"\u002F>\u003Cpath d=\"M8 16H3v5\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":13},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 5v16m8.001-2A2 2 0 0 0 22 17V5a2 2 0 0 0-1.999-2L16 3.002A5 5 0 0 0 12 5a5 5 0 0 0-4-2H4a2 2 0 0 0-2 2v12a2 2 0 0 0 1.999 2H8a5 5 0 0 1 4 2a5 5 0 0 1 4-2z\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":15},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"\u002F>\u003Ccircle cx=\"9\" cy=\"9\" r=\"2\"\u002F>\u003Cpath d=\"m21 15l-3.086-3.086a2 2 0 0 0-2.828 0L6 21\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":17},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2\"\u002F>\u003Cpath d=\"m6 17l3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06\"\u002F>\u003Cpath d=\"m12 6l3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":19},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\"\u002F>\u003Cpath d=\"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":21},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"7\" height=\"7\" x=\"3\" y=\"3\" rx=\"1\"\u002F>\u003Crect width=\"7\" height=\"7\" x=\"14\" y=\"3\" rx=\"1\"\u002F>\u003Crect width=\"7\" height=\"7\" x=\"14\" y=\"14\" rx=\"1\"\u002F>\u003Crect width=\"7\" height=\"7\" x=\"3\" y=\"14\" rx=\"1\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":23},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\"\u002F>\u003Ccircle cx=\"7.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":25},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M15 18h-5m8-4h-8m-6 8h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-4 0v-9a2 2 0 0 1 2-2h2\"\u002F>\u003Crect width=\"8\" height=\"4\" x=\"10\" y=\"6\" rx=\"1\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":27},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0zm.894.211v15M9 3.236v15\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":29},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2M6.453 15h11.094M8.5 2h7\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":31},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 12h14m-7-7l7 7l-7 7\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":33},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m9 18l6-6l-6-6\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":35},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m21 21l-4.34-4.34\"\u002F>\u003Ccircle cx=\"11\" cy=\"11\" r=\"8\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":37},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\"\u002F>\u003Cpath d=\"M8 21h8m-4-4v4\"\u002F>\u003C\u002Fg>",{"id":39,"title":40,"body":41,"description":158,"extension":159,"eyebrow":160,"hostedOnly":6,"meta":161,"navigation":162,"path":163,"seo":164,"short":165,"stem":166,"__hash__":167},"docs\u002Finternal\u002Farchitecture\u002Fresources.md","Resources & Attributes",{"type":42,"value":43,"toc":147},"minimark",[44,48,53,61,65,80,84,91,95,102,106,109,113,116,120,134],[45,46,47],"p",{},"A resource is the thing a worldbuilder makes: a character, a place, an item, a faction. Almost every decision in this area is about one tension. Creators want the freedom to shape a resource however their world needs, and the system wants enough structure to search, validate, and reveal that resource safely. This page is how Chronicler holds both.",[49,50,52],"h2",{"id":51},"resources-come-in-families","Resources come in families",[45,54,55,56,60],{},"A character and its evil-timeline counterpart are related, but neither is more \"real\" than the other. Chronicler models this as a flat, one-hop ",[57,58,59],"strong",{},"family",". Every member is a first-class resource. Being a variant is a role a resource plays inside the family, not a lesser type it is stored as. A primary pointer, which defaults to the family root, names the current-facing member, so a list can show one canonical version while the alternatives stay reachable.",[49,62,64],{"id":63},"editing-evolving-and-splitting-are-different-acts","Editing, evolving, and splitting are different acts",[45,66,67,68,71,72,75,76,79],{},"It matters whether a change is a correction, a step forward in the story, or a fork into a new thing. So Chronicler names three intents. An in-place write is either an ordinary edit or an ",[57,69,70],{},"evolution",", a marked step in the resource's own timeline. A ",[57,73,74],{},"variant"," is not a change at all; it is a new resource minted by a split. Because everything is event-sourced, any past state can be rewound from the stream. Evolutions also materialise into listable, addressable ",[57,77,78],{},"versions",", so looking at how a resource stood three eras ago is a direct query rather than a replay, and it still obeys reveals.",[49,81,83],{"id":82},"attributes-are-structured-but-not-rigid","Attributes are structured, but not rigid",[45,85,86,87,90],{},"Custom fields, the ",[57,88,89],{},"attributes",", are driven by a schema. A value is a string or a list of strings, typed by its field, and validated against the set of values that field allows, taking inheritance down the family into account. The field carries more than a datatype. It holds how the value should look and be authored: an accent colour and icon, whether it takes multiple values, whether it pins to the sidebar, whether text is multi-line, the structured options a select offers, and any default or locked value. Putting presentation on the field means the same attribute looks the same everywhere it appears.",[49,92,94],{"id":93},"room-for-the-field-the-schema-forgot","Room for the field the schema forgot",[45,96,97,98,101],{},"A schema can never anticipate every field a creator will want mid-flow. So a resource may carry ",[57,99,100],{},"ad-hoc fields"," of its own, outside its schema. An ad-hoc field is a full, rich field, as capable as a schema field, but scoped to the one resource rather than shared. A strict schema can forbid them, for worlds that want the discipline. A resolved attribute always names its origin, whether it came from the schema, from an ad-hoc field, or is an orphan, so nothing is ambiguous. And when an ad-hoc field proves its worth, a config author can promote it into the kind's schema, or rebind the resource to a different schema of its kind. The escape hatch has a path back to structure.",[49,103,105],{"id":104},"counting-what-a-card-shows","Counting what a card shows",[45,107,108],{},"Filtering a resource list by an attribute sounds trivial until inheritance is involved: a facet count has to match what the card actually displays, inherited values included. Chronicler keeps a dedicated read model of each resource's effective, own-plus-inherited values, maintained by a one-hop projector, so a facet bucket is honest. Select and boolean fields return buckets, and text is filter-only.",[49,110,112],{"id":111},"game-mechanics-without-picking-a-system","Game mechanics without picking a system",[45,114,115],{},"Stat blocks are kept system-agnostic behind a plugin interface, with D&D 5th Edition as the first system, so a world's mechanics are not welded to one ruleset.",[49,117,119],{"id":118},"where-this-connects","Where this connects",[45,121,122,123,128,129,133],{},"Resources do not stand alone. They link to each other and to notes through ",[124,125,127],"a",{"href":126},"\u002Finternal\u002Farchitecture\u002Fgraph","The graph",", and what a player sees of a resource is governed by ",[124,130,132],{"href":131},"\u002Finternal\u002Farchitecture\u002Fplay","Play, reveals and campaigns",".",[135,136,139],"callout",{"title":137,"tone":138},"Read the record for the detail","note",[45,140,141,142,146],{},"This page is the guide. The full records under ",[143,144,145],"code",{},"docs\u002Fadrs"," carry the exact validation rules, the version storage model, and the alternatives that were weighed and rejected.",{"title":148,"searchDepth":149,"depth":149,"links":150},"",2,[151,152,153,154,155,156,157],{"id":51,"depth":149,"text":52},{"id":63,"depth":149,"text":64},{"id":82,"depth":149,"text":83},{"id":93,"depth":149,"text":94},{"id":104,"depth":149,"text":105},{"id":111,"depth":149,"text":112},{"id":118,"depth":149,"text":119},"The heart of worldbuilding - what a resource is, how a variant differs from an edit, and how custom fields stay flexible without becoming a free-for-all.","md","Architecture",{},{"title":40},"\u002Finternal\u002Farchitecture\u002Fresources",{"title":40,"description":158},null,"internal\u002Farchitecture\u002Fresources","Ajk5im9jg0OAF6P28nCEcOxAYp_aRnGFNK_5vbZNikU",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":169},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"10\"\u002F>\u003Cpath d=\"M12 16v-4m0-4h.01\"\u002F>\u003C\u002Fg>",1788784065750]