Skip to content

W-070: demo-anno spec for the M1 features

Type: design · Size: S · Epic: E-anno-m1 · Target: docs/specs/demo-anno.md · Breaking: no Depends: W-004, W-016 Refs: demo-anno brief §4 and §5 (ANNO-F01..ANNO-F06), concept §8, W-004 (ecs-schedule spec), ecs-schedule spec (SCH-F01..SCH-F07), model W-013

Goal

Write docs/specs/demo-anno.md with spec-format requirement groups for the six M1 features ANNO-F01 to ANNO-F06. Define the tick pipeline (produce, carry, consume, economy) and the game clock once in the spec, so the features reference them instead of restating them.

Package dependency: the M1 features depend on the ecs-schedule implementation, W-027 to W-037 (SCH-F01 to SCH-F07). The spec states which SCH requirement each M1 requirement uses, so each feature item gets the matching Depends. Pause and speed (ANNO-F05) likely need W-031 (enable and disable).

Open check before writing requirements: the brief relies on koota exclusive relations (StoredIn), relation target filters, Changed queries, and observers. Confirm each is in koota's public API (koota skill). If one is missing, block the spec and create a package item, per workflow.

Once the spec is approved, Triage creates one feature item per ANNO feature (M1) and makes them ready.

Steps

  • S1 (koota check): Explorer confirms, via the koota skill, that koota's public API provides exclusive relations (StoredIn), relation target filters, Changed queries, and observers; record one finding per API in the Log. If any is missing, block this item and create a package feature item (workflow); files: none (findings go to the Log)
  • S2 (ANNO-F01..ANNO-F06, SCH-F01..SCH-F07): SpecWriter writes docs/specs/demo-anno.md with Status: draft per spec-format. It has one ### ANNO-Fnn heading per feature and [ecs]/[ux] and [test]/[manual] tags. The tick pipeline (produce, carry, consume, economy) and the game clock are defined once in the ECS model and referenced by the features. Each requirement names the SCH requirements it uses (ANNO-F05 pause and speed likely needs enable and disable, W-031). Gaps go to Open questions; files: docs/specs/demo-anno.md
  • S3 (approval): The user reviews and sets Status: approved on the spec. Then Triage creates one M1 feature item per ANNO feature with Depends taken from the SCH mapping and makes them ready; files: docs/board.md, docs/work/ (Triage)

Log

  • 2026-11-02 created, follow-up of W-016 (Triage)
  • 2026-11-02 active (Triage)
  • 2026-11-02 steps written (Planner)
  • 2026-11-02 S1 koota 0.6.6 public API check (Explorer): exclusive relations, relation target filters, Changed, observers all supported. Limitations: exclusive move emits onRemove then onAdd; updateEach/readEach drop relation filters (use entity.targetFor); Changed(relation) cannot narrow to a target and fires only on set()/changed(); observers are synchronous; world traits never appear in world.query so Stock is watched via onChange/useTrait.
  • 2026-11-02 S2 docs/specs/demo-anno.md written as draft (SpecWriter): ANNO-001..109 in groups F01..F06; 15 open questions listed in the spec.
  • 2026-11-02 spec revised after reviewer rounds (Settlement shape in F01, F01..F06 forward dependencies removed, badge/refreshStock ordering, ANNO-100 stickiness test); final Reviewer APPROVED; awaiting user approval of docs/specs/demo-anno.md (S3) (Triage)
  • 2026-11-02 S3 approved by user (spec Status: approved); done, design item has no accept gate (Triage)
  • 2026-11-02 done. Created W-076 to W-082 (ANNO-F01..F05 split into F05 parts 1 and 2, F06), all held in Later (Triage)