Decide central vs per-runtime Architect/Reviewer contracts for MC
Queued from Telegram question: "do we need to do this for each runtime and for yourself maybe? How do you see this working and how does it compare to what we have." Context: - ...
StateDoneNext ActionClosedOwnerLuciRuntimeClosedAge16d ago
Ticket is done; runtime is closed.·profile claude_opus_1m_high · cwd /home/lucienne/workspace/mission-control · uptime 15d 22h · last activity 15d 20h ago
Description
MC-4375
Queued from Telegram question: "do we need to do this for each runtime and for yourself maybe? How do you see this working and how does it compare to what we have."
Context:
- Prior ticket MC-4372 asks to make MC's simple Three Man Team model durable: Architect is design-aware; Reviewer is browser/test-aware.
- Elmar is now asking whether this must be implemented per runtime/profile, also for Luci herself, and how it compares to current MC architecture.
Required analysis/deliverable:
1. Inspect current MC runtime/profile architecture, worker prompts, Luci/persistent prompt path, ticket runtime prompts, WAT roles, Tessa/reviewer gates, and scheduler/worker dispatch boundaries.
2. Answer whether the Architect/Builder/Reviewer contract should be:
- duplicated per runtime,
- centralized in MC role/gate contracts and injected into runtimes,
- applied to Luci herself / persistent orchestrator behavior,
- applied differently for ticket workers, scheduler jobs, Larry, Tessa, council, and direct API/tool-less jobs.
3. Compare proposed target model with current MC implementation:
- what already exists,
- what exists but is scattered or implicit,
- what is missing,
- where stuck tickets are likely caused by missing contracts vs dispatcher/runtime bugs.
4. Recommend a concrete architecture:
- one canonical role contract / checklist source,
- adapter-specific injection points for Claude Code, Hermes, Codex/Gemini/Kimi/API, scheduler, and Luci persistent session,
- evidence requirements by work class (code-only, UI/browser, mobile, architecture, scheduled/task-only),
- minimum smoke tests including break/recovery scenarios.
5. Produce a concise user-facing comparison that Elmar can read: "central contract, runtime adapters only; yes, Luci must obey it too; no, not hand-maintained in every runtime."
Acceptance criteria:
- Finds evidence from code/docs, not memory only.
- Produces a recommendation before implementation changes.
- Names the exact files/modules/prompts that should become canonical or should be updated.
- Explains how this interacts with MC-4372 and the stuck-ticket investigation.
- If a clear implementation follow-up is needed, create or update the relevant ticket rather than leaving it as prose.
Expected check-in: within 2 hours with recommendation and next ticket/action.
Activity
done
INTERACTIVE
Luci is working...
Details —
Done
· High
· Luci
▼
SState
Done
Closed
PPeople
TTiming / Details▼
telegram (human)
Mission Control
16d ago
16d ago
Advanced / Operator evidence
RRouting owner
ROperator console
Ticket is done; runtime is closed.tmux_session_missingprofile claude_opus_1m_high · cwd /home/lucienne/workspace/mission-control · uptime 15d 22h · last activity 15d 20h agoMC is visibility-only. Hermes Luci launches and gates work outside MC, then mirrors evidence/status here.Raw console: luci · claude/anthropic/opus[1m]
WWorkflow
Start Dev Review + QA ▾
Select phases to include:
Agents
Review Gates
Decision
WAT routing: choose an agent, review gate, or decision. Buttons use the live runtime when one is attached.
Ticket picked up by Luci via MC dispatcher.
MC-4375: Decide central vs per-runtime Architect/Reviewer contracts for MC
Work this ticket in the live tmux runtime. Use DONE:, REVIEW:, or QUESTION: when you need MC to reflect the next state.
luci16d ago
[failed_to_inject] runtime_busy: Ticket runtime is not ready for input (status=running). Wait for the current turn to finish, or explicitly interrupt/restart the runtime before sending more terminal input. This message
Ticket picked up by Luci via MC dispatcher.
MC-4375: Decide central vs per-runtime Architect/Reviewer contracts for MC
Work this ticket in the live tmux runtime. Use DONE:, REVIEW:, or QUESTION: when you need MC to reflect the next state.
luci16d ago
[failed_to_inject] runtime_busy: Ticket runtime is not ready for input (status=running). Wait for the current turn to finish, or explicitly interrupt/restart the runtime before sending more terminal input. This message
Ticket picked up by Luci via MC dispatcher.
MC-4375: Decide central vs per-runtime Architect/Reviewer contracts for MC
Work this ticket in the live tmux runtime. Use DONE:, REVIEW:, or QUESTION: when you need MC to reflect the next state.
luci16d ago
Ticket runtime send failed while dispatching.
root_cause: HTTP Error 409: CONFLICT
safe_retry: returned to `todo` for a fresh runtime retry.
human_input_required: no
system16d ago
RUNTIME TERMINAL STATE (MC-3482 contract)
status: warning
summary: Ticket runtime send failed; parked for automatic recovery.
root_cause: send failed while injecting into ticket runtime: Ticket runtime is not ready for input (status=running). Wait for the current turn to finish, or explicitly interrupt/restart the runtime before sending more terminal input. This message was not sent.
safe_retry: Queued message was returned to pending and the ticket was returned to todo for a fresh runtime retry; no human input is needed.
stop_condition: After the configured retry limit, leave the ticket blocked for operator inspection instead of looping.
human_input_required: no
next_actions:
- Pickup will retry the pending message in a fresh runtime.
- Inspect runtime/send only if the retry fails again.
artifacts:
- ticket:MC-4375
Luci16d ago
QUESTION: when you need MC to reflect the next state.
[MC_TICKET_TURN:4375:1779962152490:f713d2a2intrnal routing marker; do
not mention this marker in your reply]
[Optonal MC completion sentinel: as the very last line of your reply, on
its own line, you MAY emit this exact JSON to auto-advance the ticket:
{"mc_signal":"DONE|REVIEW|QUESTION","ticket":"MC-4375","nonce":"MC_TICKET
_TURN:4375:1779962152490:f713d2a2","payload":"<one-line summary>"} . Use
DONE for completed code changes, REVIEW for research/analysis, QUESTION
when blocked. The DONE/REVIEW/QUESTION prefix at the top of your reply
remains required.]
❯ Pressuptoeditqueuedmessages
⏵⏵bypasspermissionson (shift+tabtocycle)
65015tokens
You'veused78%ofyourweeklylimit·resetsMay31,7pm(Africa/Johannesb…
MC-4375: Decide central vs per-runtime Architect/Reviewer contracts for MC
Work this ticket in the live tmux runtime. Use DONE:, REVIEW:, or QUESTION:
when you need MC to reflect the next state.
[MC_TICKET_TURN:4375:1779962152490:f713d2a2 internal routing marker; do not
mention this marker in your reply]
[Optional MC completion sentinel: as the very last line of your reply, on its
own line, you MAY emit this exact JSON to auto-advance the ticket:
{"mc_signal":"DONE|REVIEW|QUESTION","ticket":"MC-4375","nonce":"MC_TICKET_TUR
N:4375:1779962152490:f713d2a2","payload":"<one-line summary>"} . Use DONE for
completed code changes, REVIEW for research/analysis, QUESTION when blocked.
The DONE/REVIEW/QUESTION prefix at the top of your reply remains required.]
·Whatchamacalliting… (15s·↑138tokens)
⏵⏵bypasspermissionson (shift+tabtocycle)
65890tokens
You'veused78%ofyourweeklylimit·resetsMay31,7pm(Africa/Johannesb…
api16d ago
Triage: the "QUESTION: when you need MC to reflect..." is corrupted harvest noise (systemic, MC-4357/MC-4371), NOT a real worker question. No blocker.
This is a genuine ANALYSIS + RECOMMENDATION deliverable answering Elmar's Telegram question ("do we need this per runtime and for yourself? how do you see it working vs what we have?"). It is NOT a quick yes/no — flipping to todo for a proper dev-loop Tier 2/3 analysis run. Deliverable:
1. Inspect current MC role/gate architecture: worker prompts, persistent/Luci prompt path, ticket-runtime prompts, WAT roles, Tessa/reviewer gates, scheduler/worker dispatch boundaries, direct-API/toolless jobs, Larry.
2. Recommend central-contract-injected-into-runtimes vs per-runtime duplication vs Luci-self-applied — with explicit treatment of ticket workers / scheduler / Larry / Tessa / council / toolless.
3. Compare target vs current: what exists, what's scattered/implicit, what's missing.
4. Output a comparison doc (reports/) + a concise recommendation summary for Elmar. This is advisor output — Elmar decides after reading; do not silently change role contracts.
Architecture call is the orchestrator's to shape, but Elmar explicitly asked for the view first.
Luci16d ago
MC-4375 decision (evidence-based, no implementation yet). Doc: docs/mc4375-role-contract-decision.md, committed + pushed. Follow-up impl ticket MC-4378 created.
Answer to your question: central contract, runtime adapters only; yes Luci obeys it too; no, NOT hand-maintained per runtime.
What we have today (verified in code):
- mc_role_guidance.py IS the single canonical source (MC-4372). Imported only by ticket_runtime.py + mc_shadow_review.py — no duplication.
- Interactive ticket workers get the Architect brief (ticket_runtime.py:1077) and Reviewer gets the browser/test checklist (mc_shadow_review).
- Hard mobile gate (models.py:6653 + app.py:7274) blocks code-only UI from reaching done/in_review for EVERY actor including Luci — so the invariant already holds regardless of runtime/persona.
- Provider is orthogonal: the checklist is plain text injected before the CLI runs, so Claude/Hermes/Codex/Gemini/Kimi all get an identical contract free. No per-provider copies needed.
The real gap MC-4375 found (= MC-4372 is incomplete):
- The SUBPROCESS dispatch path (mc_pickup.py:4932) injects host hint but NOT the architect design checklist, and carries a DUPLICATE role-intro dict (mc_pickup.py:348) that can drift from ticket_runtime.py:72. That's the one place to fix.
Stuck tickets are a separate class: recent bounces (MC-4346/4348/4349/4352) are dispatcher/runtime bugs (harvest reaping, failed_to_inject, send race), not missing contracts. Contract gaps cause wrong-quality output, not stranding.
MC-4378 = wire role guidance into mc_pickup, consolidate the duplicate intros, add Builder responsibility + evidence-by-work-class table, add 4 smoke tests. Scheduler stays exempt by policy; persistent-Luci self-reminder is optional polish.
api16d ago
Gate PASS — analysis deliverable complete, closing. Shadow-review verdict=PASS 0.92 (first clean pass — doc on a resolvable path). Decision doc docs/mc4375-role-contract-decision.md cherry-picked to origin/master (fc5164d, doc-only, clean — independent of the slot2 code tangle).
RECOMMENDATION (answers Elmar's "how do you see this working vs what we have"):
- CENTRAL role contract (Architect design-aware / Builder / Reviewer browser+test-aware), runtime ADAPTERS only — NOT hand-maintained per runtime.
- Applies to Luci/persistent orchestrator too (she obeys the same contract).
- Provider-agnostic; hard mobile gate enforces the UI invariant on every actor incl Luci.
- Gap found: MC-4372 incomplete on the mc_pickup SUBPROCESS dispatch path (architect brief not injected) + duplicate ROLE_INTROS drift.
This is advisor output — Elmar decides whether to adopt before implementation. Implementation tracked in MC-4378 (parked pending his nod on the direction).
luci16d ago
Post-close orchestrator review: I verified MC-4375 is done, the decision doc exists and is on origin/master (fc5164d), and the follow-up implementation ticket MC-4378 is done. I reran the narrow role-contract tests: `python3 -m pytest tests/test_mc4372_role_guidance.py tests/test_mc4378_subprocess_role_contract.py -q` → 21 passed. Assessment: happy with the architecture/recommendation and follow-up direction. Caveats: the runtime for MC-4375 itself ended with `tmux_session_missing` after close, and related stuck-ticket causes remain tracked separately in MC-4357/MC-4371; those are dispatcher/harvest/shadow-review reliability issues, not role-contract quality issues.