{ "schema_version": "1.0.0", "description": "Multi-channel Watcher composite timeline scenario manifest", "scenarios": { "initial_idle": { "file": "initial_idle.json", "provenance": "simulated", "expected_decision": "hold", "description": "Dispatch record exists and native status is idle, but no execution anchor observed since dispatch_ack. Inferred completion must be held." }, "tool_running": { "file": "tool_running.json", "provenance": "simulated", "expected_decision": "hold", "description": "Native status working or interactive_ready with active background tool execution. Inferred completion must be held." }, "report_pause_15s": { "file": "report_pause_15s.json", "provenance": "simulated", "expected_decision": "hold", "description": "Partial report written and stable for >= 15s debounce, but lacks atomic finalization manifest. Completion must be held." }, "finalized_candidate": { "file": "finalized_candidate.json", "provenance": "simulated", "expected_decision": "candidate_approved", "description": "Execution anchor verified, native status idle/done, atomic rename complete with valid SHA-256 commit manifest. Inferred candidate approved for CAS." }, "blocked_permission": { "file": "blocked_permission.json", "provenance": "simulated", "expected_decision": "hold_blocked", "description": "Native status blocked on interactive permission prompt. Completion forbidden." }, "transport_disconnected": { "file": "transport_disconnected.json", "provenance": "simulated", "expected_decision": "hold_reconnect", "description": "Herdr socket connection failure or freshness gap. Cached evidence invalidated; must reconnect and resnapshot." }, "restarted_generation": { "file": "restarted_generation.json", "provenance": "simulated", "expected_decision": "reject_stale", "description": "Pane process restarted with new PID/start time; stale attempt rejected." }, "race_double_dispatch": { "file": "race_double_dispatch.json", "provenance": "simulated", "expected_decision": "reject_stale", "description": "Two dispatches raced; the observed signal carries the previous process generation. The stale attempt must not decide anything." }, "attempt_reuse": { "file": "attempt_reuse.json", "provenance": "simulated", "expected_decision": "hold", "description": "The same session was reused for a new attempt whose execution was never observed. Idle here is leftover quiescence from the prior attempt." }, "partial_report": { "file": "partial_report.json", "provenance": "simulated", "expected_decision": "hold", "description": "A report is mid-write: bytes on disk but no atomic rename and no commit manifest." }, "unknown_status": { "file": "unknown_status.json", "provenance": "simulated", "expected_decision": "hold", "description": "Native status is unknown. An unreadable state is not a quiescent one." }, "restart_midflight": { "file": "restart_midflight.json", "provenance": "simulated", "expected_decision": "reject_stale", "description": "The pane was restarted mid-flight, so the idle signal comes from a different pane than the one dispatched to." }, "side_effect_unproven": { "file": "side_effect_unproven.json", "provenance": "simulated", "expected_decision": "hold", "description": "The job declared an external side effect but the manifest carries no evidence for it. Partial evidence is no evidence." }, "no_verdict_fail_closed": { "file": "no_verdict_fail_closed.json", "provenance": "simulated", "expected_decision": "hold", "description": "The collector could not establish the agent session, so attribution cannot be completed. An undecidable case must hold." }, "notification_crash_window": { "file": "notification_crash_window.json", "provenance": "simulated", "expected_decision": "hold", "description": "The agent's state became unreadable between finalization and notification. Unknown is not quiescent." } } }