Research: Close #2160 Coord-Shadows Read/Gate Arm

Brownfield remediation mission — the design decisions were made by a 3-lens code squad (reviewer-renata / paula-patterns / randy-reducer) and hardened by a 2-lens post-spec squad. This file records the decisions rather than re-deriving them.

Decision: one canonical subtask-row walk, guard-semantic wins

semantic is canonical; correct the uncheck writer's re-enter behavior to match.

blocks on; the dashboard and rollback must agree with it. The two aggregate walks already diverge, so "byte-identical to the aggregate" is impossible — a canonical choice is required.

writer canonical (rejected — the guard is the gate authority).

  • Decision: Extract _walk_wp_section in core/subtask_rows.py; the counter's break-on-exit
  • Rationale: the guard (tasks_shared._check_unchecked_subtasks) is the authority the lane gate
  • Alternatives: keep both walks (rejected — three parallel copies of the semantic); make the

Decision: close the fail-open at the shared emit layer, not per-door

four production callers; retire #2511's per-door pre-derivation.

after #2511's orchestrator-only fix. A shared-layer fix closes the class on every path and reduces code (the per-door patch collapses).

  • Decision: fix _infer_subtasks_complete (row semantics + primary-surface resolution) at all
  • Rationale: randy proved the native agent status path still fails open via aggregate.py:717
  • Alternatives: keep per-door patches (rejected — leaves the class half-open + duplicates logic).

Decision: reuse sync/daemon._is_process_alive, do not add os.kill

allocator consume it.

parallel primitive (C-002 violation) and would need to re-solve NFR-004's platform safety.

  • Decision: promote/centralize the existing psutil liveness helper; both the indicator and the
  • Rationale: a cross-platform, edge-hardened helper already exists; adding os.kill would be a
  • Alternatives: os.kill(pid, 0) (rejected — parallel impl, weaker platform handling).

Verified-already-done: #1862 analysis-freshness checkbox-insensitivity

both write_analysis_report and check_analysis_report_current. #1862 is closed verified-already-fixed; the mission keeps only a regression guard (FR-009), no new logic.

  • analysis_report._normalize_tasks_md (#1764) already strips [ ]/[x] before hashing, wired to

Verified-current: the vulnerable vs already-correct surfaces

agent status --to for_review and the orchestrator door.

(tasks_shared._check_unchecked_subtasks) — resolves TASKS_INDEX + uses the canonical iterator.

  • Vulnerable: the emit-layer _infer_subtasks_complete (fail-open + divergent regex) reached by
  • Already correct (do not touch): the native move-task guard