yysworld
YYBW-029·Decided·2026-04-15

World Seed and YY Voice Register: Versioned Authoring Artifacts, Introduced at Next Root

depends on YYBW-003, YYBW-005, YYBW-011, YYBW-012

  • ID: YYBW-029
  • Status: Decided
  • Date: 2026-04-15
  • Scope: YY Branching World
  • Depends on: YYBW-003, YYBW-005, YYBW-011, YYBW-012
  • Supersedes / clarifies: Extends YYBW-011 (versioned canon) and YYBW-005 (event stream) with two new authoring artifacts: the world seed and the voice register

Context

The April 2026 root was initialized without two things that significantly affect generation quality:

World seed — named, stable geography and seasonal physics that persist across all days of a root. Without it, each daily generation invents locations and conditions independently. Places introduced on Day 2 are unknown to Day 3. The world feels arbitrary rather than accumulated.

Voice register — specific, documented patterns for how YY's prose actually sounds. The baseline captures psychological profile as trait scores, but not the expressive habits that make YY recognizable as a voice. Traits are properties; voice is behavior.

Both were absent at the start of the April root. This ADR records the decisions made once that gap was recognized.


Decision

1. World seeds are versioned authoring artifacts, authored before a root begins

The world seed is a new per-root file: runs/{rootId}/world-seed.json. It is:

  • Authored once by the human author before the pipeline runs Day 1
  • Not generated by the pipeline — it is authorial input, like the inbox entry
  • Read by the pipeline to provide stable geography, seasonal context, and starting social conditions
  • Immutable during the run — it records the conditions the root began with, not the conditions the root is in

The world seed is versioned. world_version in the file declares which schema generation it uses.

v1.0 is the version that exists by implication when no formal seed was written. It is declared retroactively only as documentation. See §4 below.

v1.1 is the first version authored before a root begins. Template: docs/templates/world-seed.json.

When the pipeline reads a world seed it uses:

  • geography.named_places — keeps location names consistent across days
  • seasonal_physics — calibrates what "adequate" food means this month
  • social_field.known_presences — makes recurring animals recognizable across days
  • atmosphere — provides anchoring context for event translation choices

When no world seed is present, the pipeline generates freely as it does today.

2. The April run data does not reference world_version — intentionally

The branch files, snapshots, events, and artifacts from Days 1 and 2 contain no world_version field. This is correct and will not be changed.

The April root was generated without a world seed. The pipeline did not read one. No geography was stable across days because of a document — it was stable (where it was stable) only by coincidence of the same executor generating consecutive days.

Adding world_version: "1.0" to the April run's data files would imply the pipeline used a world seed during generation. It did not. A reference that was never true is not a correction — it is a fabrication. The immutable truth invariant (ADR-012) applies: ledger entries record what actually happened. Snapshots and events may not be retroactively given references they never carried.

The world-seed.json file committed to the run directory (runs/root_2026_04_14/world-seed.json) is a historian's document, not a source-of-truth document. It is useful as context and as a v1.0 baseline for understanding what the world is. It was not an input to generation.

3. The scar

The absence of world_version in the April run data is a scar. It tells future readers: this root ran without a world seed. That is a true statement. It should remain true.

The _provenance field on runs/root_2026_04_14/world-seed.json names this explicitly:

"V1.0 describes what the world revealed itself to be, not what was intended before generation."

Future roots that have a world seed will have branch files that declare world_version. The April run will not. That difference is the permanent record of which root introduced the practice.

4. World version history

VersionFileStatusMeaning
v1.0runs/root_2026_04_14/world-seed.jsonRetroactive declarationGeography and conditions reconstructed from events, snapshots, and narrative artifacts after Days 1–2. Not read by the pipeline. A scar of not having designed this before starting.
v1.1docs/templates/world-seed.jsonTemplate — to be filled inFirst version authored before a root begins. Introduced at the May 2026 root or later.

5. Voice register: per-YY-version, evidence-based, introduced at v1.1

The voice register (docs/yy/voice-v1.1-draft.md) documents the prose patterns that emerged from the first actual artifacts. It is separate from the trait baseline because traits are psychological properties; voice patterns are expressive habits.

At v1.1, the voice register becomes an input to the pipeline system prompt alongside the trait baseline. It documents: the three-beat sentence rhythm, sensory priority order, recurring internal figures, state-dependent register, voice failure boundaries, and reference quotes from actual artifacts.

It is marked draft until the transition. Patterns discovered during the April run should be added before it is promoted.

6. The transition sequence

At next root start, in order:

  1. Author the world seed from the template (docs/templates/world-seed.json) and commit it to the new run directory before any branch files are written
  2. Update yy_baseline.json with voice register sections (marking yy_version: "1.1")
  3. Declare world_version: "1.1" and yy_version: "1.1" in the new root's branch files
  4. Update the pipeline system prompt (generate.tssystemPrompt()) to read both new inputs
  5. ADR-011 applies: the April root continues to reference v1.0; the new root references v1.1

Why design now rather than at the transition

Voice patterns are observable now, while the first artifacts are fresh. Documenting drift that accumulates over 30 days of generation without a register is less accurate than documenting the voice while the first evidence is in hand.

The world seed schema is structural. Designing it under time pressure at the start of a new month risks cutting corners. Having the template ready means the monthly authoring session is filling in known fields, not designing a schema from scratch at initialization time.


Why not retrofit April

Retrofitting a world_version reference into the April run's data would produce a reference that was never true during generation. That violates the immutable truth invariant (ADR-012) more seriously than leaving the data unreferenced.

The retroactive world-seed.json in the run directory is the correct form of scar preservation: the information exists for inspection, clearly marked as reconstruction, without corrupting the data that records what actually happened.


What this does not do

  • Does not add world_version to any April run data files (branch files, snapshots, events, artifacts)
  • Does not require world seeds — roots without them generate freely
  • Does not freeze the voice register — it is updated as more artifacts are written
  • Does not change the character calibration process

Consequences

  • docs/templates/world-seed.json is the canonical template for all future roots
  • runs/root_2026_04_14/world-seed.json is a v1.0 reconstruction, clearly marked, not a pipeline input
  • docs/yy/voice-v1.1-draft.md is promoted to active at the v1.1 transition
  • The pipeline needs to be updated at the transition to read both new inputs
  • The absence of world_version in the April run data is the permanent record of which root introduced the practice

Freshness boundary

Revisit if a second character is introduced — their voice register and world seed may overlap with YY's or diverge. The template is designed for a single-character root. A second character may need additional schema fields or a separate world seed entirely.