Data Model: Close #2160 Coord-Shadows Read/Gate Arm
No new persistent entities — this mission operates on existing runtime/artifact structures. The relevant entities and their invariants:
Subtask row
WPnn token in the heading), and it is not inside a fenced code block.
re-appearing ## WPnn heading does NOT re-enter a closed section (guard semantic).
core.subtask_rows._walk_wp_section.
- Shape:
- [ ] T### <desc>/- [x] T### <desc>line in a WP'stasks.mdsection. - Invariant: a row counts iff its id matches
T\d{3,}, it is under the WP's section (first - Section boundary (canonical): bounded by the heading whose first
WPnntoken is the WP; a - Consumers: lane-transition guard (block), dashboard (done/total), rollback (uncheck) — all via
Primary planning surface
resolve_planning_read_dir(..., kind=MissionArtifactKind.TASKS_INDEX).
coord-side tasks.md must NOT be interpreted as "no subtasks" (no fail-open).
- Definition: the partition holding
tasks.md; resolved by - Invariant: planning-artifact reads resolve here, never the coordination status husk; a missing
Claim markers
(allocator); a rollback-to-planned clears both markers.
- Fields:
agent,shell_pidin WP frontmatter (read viatask_utilsfrontmatter readers). - Liveness:
shell_pidliveness is decided bysync/daemon._is_process_alive(one helper). - Invariant: a live claim is never treated as stale (indicator) nor as a blocking stale claim
Lane worktree (coord topology)
(status.events.jsonl, status.json); a recovered lane must apply the same sparse-checkout as a freshly-created one (mirror coordination_branch is not None AND resolvable short_id).
- Invariant: its sparse-checkout excludes coordination status artifacts
State transition touched
the emit layer; WP → for_review is blocked when any T### row in the WP section is unchecked and neither --subtasks-complete nor --force is asserted, on every code path.
for_reviewgate:subtasks_completemust be truthfully derived from the primarytasks.mdat