Phase 8: Emit Council Checkpoint (auto)
Purpose. When this skill runs inside an Aura Companion Council pair, this phase tells the observer half "the orchestrator just finished reviewing — here is the review file, cross-check it." The observer wakes within ~1 second of the checkpoint POST and emits its independent review to <workspace>/.council/reviews/council-review-<provider>-observer.md. Without this step the council loop never closes — the observer remains in "Awaiting first checkpoint" forever.
The value: the orchestrator-run council review and the observer-run independent review come from different model contexts. Disagreement between them is itself signal.
Skip this phase entirely if any of these are true:
http://localhost:3456/api/sessionsdoes not respond (you are not inside the Aura Companion UI).- No session in the response matches the current workspace + orchestrator role.
- The
POST .../council/checkpointreturns 409 — that response IS the silent-skip signal.
Steps
Probe the API. Run
curl -fsS http://localhost:3456/api/sessions. Non-zero exit or empty → skip the entire phase.Discover the orchestrator session id. Filter the response array for the entry matching ALL of:
state == "connected"cwd == <current workspace cwd>(the cwd you reviewed under)sessionGroupRole == "orchestrator"- newest
createdAtif more than one match
Zero matches → silent skip. One match → capture
sessionId(=ORCH_SID) andsessionGroupId(=GROUP_ID).Compute next sequence. List
<workspace>/.council/checkpoints/*.json. Read each file'ssequencefield.next_sequence = max(...) + 1, or0if the directory is empty or absent.Build CheckpointPayload.
{ "schema_version": 1, "checkpoint_id": "council-review-<seq>-<8-hex-random>", "phase": "council-review", "sequence": <next_sequence>, "session_group_id": "<GROUP_ID>", "emitted_at": "<UTC ISO 8601 T-form, no fractional seconds>", "artifact_paths": [".council/review-output/<TIMESTAMP>/FINAL-REVIEW.md"] }artifact_pathsshould be the single FINAL-REVIEW.md path from Phase 5, workspace-relative. The observer's job here is meta-review — does the orchestrator's review hold up?POST. Use the Bash tool:
curl -fsS -X POST \ "http://localhost:3456/api/sessions/$ORCH_SID/council/checkpoint" \ -H "Content-Type: application/json" \ -d "$PAYLOAD"Expected 200 with
{"ok": true, "written": "...", ...}.On non-200:
- 409 ("Session is not part of an active council group"): silent skip, not an error.
- 400 / 403 / 500: surface the raw response body to the user, do not retry.
Do not wait for the observer's review. The 200 response IS the success signal for this phase; the observer's review lands asynchronously in the Aura UI's ObserverPanel.