Coder gate — feature-flag ticket comments to notify Controller
Coder gate for MC-4494 / Control Room v2 second behavior-changing slice. Objective: Under the existing default-off `MC_CONTROL_ROOM_V2_CONTROLLER_NOTIFY` flag, make human ticke...
StateDoneNext ActionWaiting: doneOwnerLuciRuntimeClosedAge13d ago
Ticket is done; runtime is closed.·profile claude_opus_1m_high · cwd /home/lucienne/workspace/mission-control · uptime 12d 18h · last activity 12d 12h ago
Description
MC-4500
Coder gate for MC-4494 / Control Room v2 second behavior-changing slice.
Objective:
Under the existing default-off `MC_CONTROL_ROOM_V2_CONTROLLER_NOTIFY` flag, make human ticket comments notify the Controller instead of auto-routing/reopening/requeueing/dispatching runtimes. This is the MC API comment route slice only.
Preceding landed work:
- MC-4496: inert role registry/audit schema landed.
- MC-4499: WAT/workflow dispatch actions under the same flag now notify Controller instead of auto-dispatching.
Target anchors from preflight:
- app.py `api_add_comment()`
- app.py `_route_human_comment()`
- app.py `_queue_and_pickup()` should not be called by human comments under flag.
- comment persistence through `models.add_comment()` must remain.
Required behavior when flag is ON:
- Human comment is persisted normally.
- A durable Controller notification/audit comment or event is created, clearly saying Controller must decide next action.
- API response clearly indicates Controller notification, e.g. `controller_notify: true` / `queued_for_controller: true`.
- Do NOT call `_route_human_comment()` for ordinary human comments.
- Do NOT call `_queue_and_pickup()`.
- Do NOT auto-assign mentions like @luci/@larry/@tessa/@atlas in this slice.
- Do NOT reopen terminal tickets, flip `in_review` to `todo`, resume/send to runtime, or create queued_messages from a human comment.
- System/controller/internal explicit actions can remain outside this if needed; keep scope narrow and safe.
Required behavior when flag is OFF:
- Existing comment route behavior remains unchanged.
Tests:
- Flag-on human comment on in_review/in_progress/needs_input/done persists comment + controller notification and does not call route/pickup/status mutation.
- Flag-on @mention does not auto-assign/auto-pickup.
- Flag-off preserves existing routing path (mock/assert `_route_human_comment` is called where current behavior expects it).
- Existing relevant tests remain green: comment/telegram bridge tests if cheap, workflow idempotency if affected.
Constraints:
- Do not change Telegram bridge direct send path in this slice; later slice.
- Do not change board grouping/statuses in this slice.
- Runtime/model guidance remains advisory and Controller-owned.
- Use project hooks/dev-loop as required.
Expected check-in: 2026-05-31 18:08:45 UTC.
Activity
done
INTERACTIVE
Luci is working...
Details —
Done
· High
· Luci
▼
SState
Done
Waiting: done
PPeople
TTiming / Details▼
telegram (human)
Mission Control
13d ago
13d ago
Advanced / Operator evidence
RRouting owner
ROperator console
Ticket is done; runtime is closed.ticket_marked_doneprofile claude_opus_1m_high · cwd /home/lucienne/workspace/mission-control · uptime 12d 18h · last activity 12d 12h agoMC is visibility-only. Hermes Luci launches and gates work outside MC, then mirrors evidence/status here.
b4495112-5652-4c64-9833-202d26552031 · luci · claude/anthropic/opus[1m]
Coder slice opened from Control Room v2 rollout. Scope is MC API ticket comment route only, behind the default-off controller-notify flag.
controller13d ago
Coder dispatched.
Role: Coder
Runtime/capability: Claude Code print mode via Hermes background process
Runtime session: hermes-bg-proc_28facb2f59e4
PID: 3095382
Worktree: /home/lucienne/workspace/state/control-room-worktrees/mc-4500-comment-controller-notify
Branch: cr/mc-4500-comment-controller-notify
Scope: second behavior-changing slice: feature-flag ordinary human ticket comments to notify Controller instead of auto-routing/reopening/requeueing/spawning. No Telegram bridge direct-send or board-status changes in this slice.
Expected check-in: 2026-05-31 18:09:39 UTC.
Next gate: Reviewer/Council after Coder completion.
Controller decision
controller13d ago
Controller directive applied from Elmar.
- For the remaining Control Room v2 rollout, prefer `claude_opus_1m_high` / Opus 1M high effort unless budget or availability blocks it.
- Codex direct CLI must not use `codex-mini` on this ChatGPT OAuth setup; `gpt-5.5` smoke-tested OK and the Codex skill was patched accordingly.
- MC-4500 Sonnet commit 96c2ea3 passed tests, but Opus/high review found should-fixes before enabling the flag: durable audit failure must not be swallowed, audit comment must SSE-broadcast, and HTMX primary UI path must visibly render the Controller audit.
- Sending MC-4500 back through Opus/high Coder now.
Runtime: hermes-bg-proc_302a98255823
PID: 3106634
Expected check-in: 2026-05-31 18:21:17 UTC
Controller decision
controller13d ago
Codex/gpt-5.5 reviewer gate found MC-4500 not ready: system audit comments can dedupe because the audit body was identical per ticket, weakening the durable audit guarantee on rapid repeated human comments/retries.
Action: sent back through Opus/high Coder for narrow dedupe/retry hardening.
Runtime: hermes-bg-proc_6409c09d439c
PID: 3113275
Expected check-in: 2026-05-31 17:27:34 UTC
controller13d ago
Runtime policy update from Elmar for future 7-role Control Room work:
- Real coding work should use the strong pair: Codex `gpt-5.5` with reasoning effort `xhigh` and Claude `opus[1m]` / Opus high effort.
- Use them as implementation/review peers where practical: one writes, the other reviews, then Controller verifies.
- Controller discretion remains for exceptions (budget, availability, tiny Tier-1 work, deterministic scripts), but this is the preferred default for important coding slices.
- Do not use Codex `codex-mini` on this ChatGPT OAuth setup; `gpt-5.5` is the smoke-tested Codex model here.
Controller decision
controller13d ago
Codex/gpt-5.5 xhigh reviewer gate kept MC-4500 not ready: human comment was persisted/broadcast before Controller audit, so audit failure could orphan an unaudited visible human comment.
Action: sent back through Opus/high Coder for atomic human-comment + Controller-audit persistence.
Runtime: hermes-bg-proc_a65c6b95d16b
PID: 3119864
Expected check-in: 2026-05-31 18:33:40 UTC
Controller decision
lucienne13d ago
Controller verification: Opus/high worker completed MC-4500 with DONE sentinel. Atomic Controller-audit transaction implemented. 46 tests passed (20 MC-4500 + 12 MC-4499 + 14 new atomic/dedupe/hardening tests). Branch merged to origin/master at commit 7a102cd. Moving to in_review for Codex/gpt-5.5 reviewer gate.
controller13d ago
Codex/gpt-5.5 xhigh final review kept MC-4500 blocked: live-event write failures were swallowed inside the atomic helper, so comments could commit without durable comment_added events.
Action: launched Codex/gpt-5.5 xhigh Coder for narrow live-event atomicity fix while Claude is at daily throttle.
Runtime: hermes-bg-proc_1a80d0ab299b
PID: 3129570
Expected check-in: 2026-05-31 17:44:33 UTC
controller13d ago
Runtime budget policy update from Elmar:
- Ignore current Claude usage tracker throttle/limits for this Control Room rollout.
- Claude limits only come into effect on 2026-06-15, and only for `claude -p` usage.
- Until then, continue using the preferred real-coding pair: Codex gpt-5.5 xhigh + Claude Opus/Opus 1M high, subject to actual provider/runtime availability.
validator13d ago
Validator complete — MC-4500 landed.
Final commit: 594c30ceae57ba7def9413e0035fe380d7a1ff67
Merged: fast-forwarded to master and pushed to origin/master.
Verification:
- `python3 -m pytest tests/test_mc4500_comment_controller_notify.py tests/test_mc4499_controller_notify.py -q` → 51 passed
- `python3 -m py_compile app.py models.py tests/test_mc4500_comment_controller_notify.py` → passed
- `graphify update .` → rebuilt successfully in worker
Review gates:
- Codex/gpt-5.5 xhigh final fix: live-event atomicity
- Claude Opus/1M high final review: SHIP, no must-fix
Residual follow-up opened separately for legacy omitted `author_type` default asymmetry.
controller13d ago
Ledger hygiene: cleared stale failure_reason='tmux_session_missing' after controller recovery/validator completion.