diff --git a/.claude/skills/shepherd/SKILL.md b/.claude/skills/shepherd/SKILL.md index 493a8b2..1ccaed2 100644 --- a/.claude/skills/shepherd/SKILL.md +++ b/.claude/skills/shepherd/SKILL.md @@ -477,6 +477,9 @@ from step 5 (Inner loop). - Verify runs on every run; the claim ledger is never empty. - Never report a dispatched stage as still running, and never end a turn waiting on one, without first checking its output file on disk — present and complete means done: read it and proceed. + An absent output file tells you only that the stage isn't done — not whether it's still + working or has died: report `status unknown; output not present` and offer to wait or + re-dispatch. Never infer "still running" or "stalled" from turn count or a human check-in. - Blindness per the role table's "do NOT read" column; judgment files are pasted, never granted; the repository itself is never blinded. - shepherd never commits `.shepherd/` paths. Run data stays ignored via the run's diff --git a/tests/test_orchestrator_contract.py b/tests/test_orchestrator_contract.py index 664cbfe..9d0b636 100644 --- a/tests/test_orchestrator_contract.py +++ b/tests/test_orchestrator_contract.py @@ -201,10 +201,13 @@ def test_orchestrator_dispatches_reviewers_in_parallel(): def test_dispatched_stage_completion_is_disk_based(): # A dispatched stage's output file on disk is the completion signal, independent of # dispatch mode (background vs blocking) and dispatch site (single or parallel fan-out) — - # the orchestrator must never claim it's still waiting without checking disk first. + # the orchestrator must never claim it's still waiting without checking disk first. When the + # file is absent it reports the unknown honestly and never fabricates a status from turn count. assert "completion signal" in ORCH assert "output file on disk" in ORCH assert "Never report a dispatched stage as still running" in ORCH + assert "status unknown; output not present" in ORCH + assert 'Never infer "still running" or "stalled" from turn count or a human check-in' in ORCH def test_dispatched_stages_run_non_interactively():