Profiles
A profile is a convention on the standard’s types: a named extension field, or a rule for reading the fields the standard already has, that tools agree to read the same way. Each is a page in schema-dist’s profiles/ folder, beside the schema. A new profile’s field is named x_<profile>_<field>.
Three have pages of their own: Messages, Addresses and Lenses.
What every reader does
Section titled “What every reader does”Identity
Section titled “Identity”x_identity_key: the same being in several worlds. Two Characters or Creatures carrying the same UUID are one being; a value that is not a UUID means nothing, and a tool that lets people add their own fields reserves the x_identity_ prefix.
Calendar
Section titled “Calendar”atlas_calendar: a world’s own calendar, the names it gives its time line. It changes no date. Read by Atlas and by the TypeScript and Unity SDKs; it keeps its name from before the profile grammar. Version 2 (serial 68) adds a leap rule’s exceptions and offset, enough for the Gregorian calendar.
Charter
Section titled “Charter”x_charter_of (serial 82; the charter profile serial 83): marks a Law with supertype Charter, a Construct with supertype Guide or one with supertype Domain as one of the world’s reading aids, read by its presence (any value but null, a string only when something is left after trimming); the value names the world it was written for. A tool’s front door shows the aids first and its lore views leave them out; the same pair without the mark is lore (a kingdom’s charter in a novel). Only a keeper writes the mark. The TypeScript and Python SDKs read it as isCharterElement / is_charter_element (4.98.0, 0.80.0), and the front door’s selection as charterOf / charter_of (4.100.0, 0.82.0).
x_room_of (serial 45; the ninth pair serial 66): marks an element as part of a parlor’s room, the world’s or a sitting’s id; with one of nine type-and-supertype pairs it makes a room element, which a lore view leaves out unless asked, and the TypeScript and Python SDKs export ROOM_PAIRS and isRoomElement / is_room_element. The pairs, each compared trimmed and without regard to case: Narrative Message (a line in the room), Narrative Board (a board entry), Relation Work item (a packet of work), Construct Spec (a workshop’s spec), Relation Heart (one person’s heart on a spec or an item), Relation Take (one member’s take on a work item, which also carries x_room_item, the item’s id), Relation Vote (one person’s ranked picks), Event Sitting (a workshop’s sitting) and Character Member (a member’s card in the room). The mark, not the word, makes the room: a Narrative with supertype Message and no x_room_of is lore and stays in view. Since serial 83 the mark is read by its presence, as x_charter_of is: any value but null, a string only when something is left after trimming.
Message
Section titled “Message”The message (serial 72; rule 1 serial 73; serial 75: the verified sender and the mark’s last writer; serial 76: the trimmed list, the edit, Notes): no field of its own, the one definition of a message’s addressing, its sender’s proof, the read mark, the thread and the Note beside it, as Messages between members says.
Checks
Section titled “Checks”x_checks_rules (serial 47; serial 54 adds the list readings and three reader rules): a work world’s house rules as a machine can check them, on the Charter beside the text a person reads: the world’s Charter as the charter profile selects it: the newest marked Charter. Each rule is its sentence plus one check from a closed set (a field present, a text matching a pattern, a link field holding at least n ids, a value from a list), scoped by type (one, or a list) and optionally supertype or subtype; a reader reports how many elements each rule scoped and which fall short, and names by name any rule it cannot apply (a list naming a type the schema does not know, a field one listed type lacks, a pattern outside the regex subset Python and JavaScript share), never passing it silently. A known-of stub is judged by no rule: its missing fields are unknown, not short (since serial 64 the fixture holds two stub cases, a bare one and one with its fields filled, so every reader is tested on it). The Python package’s doctor reads it from 0.24.0, from the Charter only since 0.28.0.
x_names (serial 48): a world’s own words for the 22 types, on the World. In a work world a Character shows as Employee, an Institution as Team. Only what a person reads changes: the API, the folder, its directory names and every id keep the standard’s names, and a tool that never reads the map shows Character as always. A folder’s world.json carries it. The TypeScript and Python SDKs’ typeWord / type_word give the word to print.
x_spine_* (serial 55): a world that maps a software ecosystem, what is built, the contracts it speaks, where each thing lives and who keeps it. Each kind is an element type with a supertype from a closed list (Package, Repo, Profile, Charter…); ownership is a Title with supertype Seat and the elements it links; thirteen x_spine_* keys carry what no field holds (address, truth, access, status, layer, audience, depends on, probe, what the probe last read, verified, the keeping seat’s name on a public projection, the projection’s source on its World, and the row a retirement Event retires). It counts days from 2012-01-01 and ships the calendar that reads them. The Python package reads it (read_spine_element); its 44 fixture cases are the test.
Packet
Section titled “Packet”x_packet_*: a packet of work about a world, a Relation with supertype Work item listing elements with a reason each (x_packet_elements), the world they belong to (x_packet_source) and the tool that made it (x_packet_producer); the Relation’s own link fields carry the same elements, and the subtype is its state (open, taken, done). The Python doctor’s --packet prints its findings in this shape.
Review
Section titled “Review”x_review_*: two marks on any element. x_review_proposed (by, evidence, expires) on a new element written as proposed, shown apart from settled elements until a keeper acts; x_review_checked (by, at, against) records who last confirmed it true, when, and against what. A proposed change to an existing element is a proposal beside it, not this mark. The TypeScript and Python SDKs read the mark with proposedMarkOf / proposed_mark_of and handsOnAsProposed / hands_on_as_proposed.
Import map
Section titled “Import map”The import map is not a field at all, but a table a door reads when it brings a world in from another tool.
The import map (serial 67): for each source tool, the words its users write for their own categories, each mapped to one of the 22 types (city to Location, organization to Institution). LegendKeeper’s table is the first. A door offers the table and applies it only on the user’s yes; it never types anything silently. The Python package’s LegendKeeper door reads it since 0.58.0.
On onlyworlds.com
Section titled “On onlyworlds.com”x_charter_of: the front door (front_door) names the Charter the profile selects, the newest marked Charter, and serves the three aids asreading_aids.x_names: onlyworlds.com stores it on the World since 2026-10-23.
