WORK-612
ID:WORK-612Status:ready

Migrate storytelling's entity and bond registration onto registers

The motivating case for SPEC-144. plugins/storytelling/src/pipeline.ts registers character, realm, faction, lore and plot through a generic walk and two field-list switch statements (extractEntityName, extractEntityData), expands character aliases in aggregate, and registers bond as an edge. All of that becomes a registers block on each rune.

postProcess stays exactly as it is. Declaring sentinel resolution is out of scope for this milestone (see WORK-611).

Priority:mediumComplexity:moderateMilestone:v0.39.0Source:SPEC-144
changeset-release/main View source

Criteria completion

Criteria completion: 0 of 6 (0%) checked; tracking started on Oct 7, no incremental history yet0%25%50%75%100%Oct 7Oct 11

Tracking started Oct 7 — check back for trends.

Branches 4
History 5
  1. 49df934
    Content editedby Claude
    docs(plan): close WORK-611/612/613 with resolutions and PR
  2. 39aa947
    Content editedby Claude
    docs(plan): WORK-611/612/613 criteria checked
  3. 4867d2c
    Content editedby Claude
    test(storytelling,design): capture the registry snapshot before the regi
  4. c9b8c9c
    Created (ready)by github-actions[bot]
  5. 1046f41
    Content editedby Claude
    docs(plan): add v0.39.0 milestone, Declarations part two

The gate (SPEC-144 D4)

The registry must be byte-identical before and after: same types, ids, scopes, sourceUrls, data bags, and registration order, because order decides last-write-wins on a site-scoped collision. Capture a snapshot of the registry over the storytelling fixtures before touching anything, and assert against it.

Sequencing note

WORK-617 removes the transforms of character, realm and faction in the same plugin. The two are independent, but land them one after the other rather than on parallel branches.

Acceptance Criteria

  • A registry snapshot over the storytelling fixtures is captured before the migration and asserted after it — types, ids, scopes, sourceUrls, data bags and registration order
  • character, realm, faction, lore and plot register through registers.entity
  • bond registers through registers.edge, and bond edges resolve through getRelated identically to today
  • character alias lookup resolves identically, including "first registration wins" for a duplicate alias
  • The plugin's register and aggregate hooks are deleted, not merely unused, and extractEntityName / extractEntityData go with them
  • The plugin's postProcess is untouched

Blocked by

  • WORK-611

References

  • SPEC-144 — problem statement, D4
  • SPEC-147 — the storytelling replacement this feeds