Skip to content

Mirror the simulation-kind lifecycles once GameOfLife S7 lands — and do not write them here first #364

Description

@The-Running-Dev

What this is. A blocked follow-up and, more importantly, a guard against duplicating work already scoped in the companion repository. Nothing is broken; the risk is that this repository writes something SubZeroDev.GameOfLife's S7 is already committed to writing, and creates a sixth entry in the envelope-duplication ledger by doing it twice in two documents.

The gap

20-contract.md's 10-simulation-kind block carries exactly two lifecycles:

  • #### Opportunity Lifecycledesign/20-contract.md:2646
  • #### Scheduled Event Lifecycledesign/20-contract.md:2692

Both were ported from upstream §5.4.1 and §5.4.2 by the W32–W34 programme. They are the only two upstream had.

SimulationKindState names other state-bearing concepts that have no lifecycle written in either repository — nothing says what creates them and what retires them. From the companion's own derivation over GameState's 17 fields, the named set includes StatusEffect, GoalState and PlayerState; the full membership is what their S6 exists to establish, and it is not this repository's to guess at.

Why this is not ours to write

§15 of 10-simulation-kind says "nothing remains upstream as a gap in this contract's shape", and that is still true — every field has a type. Lifecycles are not shape; they are semantics, and they are exactly the class of thing §15's narrow reading carves out.

SubZeroDev.GameOfLife has two open slices on precisely this, at main @ 6d257d4:

Writing these here first would pre-empt S7, put the authored copy in the wrong repository, and give us two divergent sources for the same semantics. The dependency direction is upstream-writes, we-mirror — the same direction W32–W34 already used.

Done when

  • GameOfLife S7 has landed and their Test-SpecSet.ps1 reports zero concept findings.
  • Every lifecycle S7 added is mirrored into 20-contract.md's 10-simulation-kind block, in the same #### <Concept> Lifecycle form as the two already there, sited alongside them.
  • Each mirrored lifecycle states both what creates the concept and what retires it. A creation-only lifecycle is not mirrored — it is reported back as an upstream defect.
  • §15's "what remains upstream" paragraph is re-read and corrected if the mirror changes what it is true of.
  • ./build/ConvertTo-HumanDocumentation.ps1 regenerated, ./build/Test-Documentation.ps1 passes.
  • Nothing in the mirror duplicates what the GameState envelope, Campaign, or the registry already owns — check against CLAUDE.md's envelope-duplication ledger, which has five entries and has itself drifted before by being incremented from memory rather than re-counted from the list.

Blocked on

GameOfLife #14 (S7), which is blocked on their #13 (S6). No action here until both close. Do not start this by writing lifecycles.


Agent instructions

This issue is the specification.

  • Authority: the lifecycles as S7 writes them in docs/docs/games/04-engine-specification.md, in SubZeroDev.GameOfLife. This repository transcribes; it does not author them.
  • Out of scope: writing any lifecycle here. Building the stub systems behind these concepts — that is separate work with its own slice. Deciding what a concept does.
  • Stop if: S7 lands a lifecycle that contradicts built code in src/engine/src/kinds/simulation/. That is a reconciliation with a decision to make, not a transcription — state both readings and stop.
  • Stop if: the mirror would need a new public interface or a contract amendment. Ask.
  • Verify by regenerating the human docs and running the documentation gate. A mirrored block that does not regenerate cleanly was pasted into the wrong place.

Metadata

Metadata

Assignees

No one assigned

    Labels

    openOpen work tracked from the canonical design register

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions