Repository navigation
goal: supervise AgentFlow projects from the cockpit without running the work #371
Description
Kind: goal
Job
When I supervise one or more AgentFlow projects, I want to see whether work is on the PM side or the DEV side, answer the decisions that are mine, and reach OpenRig only through its coordinator, so I can move the work without the cockpit pretending to run it.
Outcome
A person can tell which side a goal is on and what that goal is waiting for. The person can answer a waiting gate, and that answer is the product's gate record. A source note still reaches the record when no execution layer is configured. Execution control is absent unless the project's own metadata names OpenRig. When it does, the cockpit exchanges only coordinator interactions. Two GitHub projects can be supervised together, one with OpenRig and one without. Pi is not offered as an execution layer.
Release intent
Release this when those outcomes hold for GitHub projects, including a project with no execution layer. Do not hold the release for a second source adapter, a squad map, or a direct call to a seat.
Split judgment
This is one goal. Seven capabilities follow a person's acceptance of this goal. They are not open yet.
Order:
- taxonomy. Use one meaning for source adapter, execution layer, coordinator, runtime platform, and harness adapter. OpenRig is the execution layer. Remove pi-cli from the provider taxonomy. Pi remains a runtime platform and a harness adapter.
- execution-control-boundary. With no execution layer, the cockpit cannot start, promote, or dispatch work. Source notes stay.
- product-delivery-seam. PM is phases 0 and 1. DEV is phase 2 onward. Show the phase 1 handoff, an intent stop, and a delivery return as different waits. No squad view. This can follow 2.
- human-loop. The person sees a waiting decision, answers it, and sees agreed, refused, or stale. A note or an agent action cannot satisfy the gate. When an execution layer is configured, the coordinator also receives the answer and still cannot satisfy the gate. This can follow 2.
- cockpit-onboarding. Assisted onboarding in the cockpit, from the existing discovery initialization step. The cockpit stores project metadata. No checkout is required afterward. This can follow 2.
- project-bindings. Each project has its own source adapter, read from that metadata. GitHub is the only adapter that works. This depends on 5.
- execution-events. When metadata names OpenRig, the cockpit sends a start or resume, and the person's gate answer, to that coordinator. The coordinator returns status. No other seat is addressed. This depends on 2, 4, and 6.
Excluded from every capability: squad maps, seat directories, direct seat calls, a second source adapter, a new gate class, branch strategy, the cockpit owning phase state, and an event bus.
Proceed. The recommended change class at acceptance is high-assurance for human-loop and execution-events, and standard for the other five. The person chooses the class.
Person gates
| Gate | Status | Who must answer | Subject | Answer |
|---|---|---|---|---|
| adequacy-of-intent | stale | person role on the human platform | goalRevision 27bd6d1785ad |
agree by smota at 2026-10-10T08:57:59.144Z |
| adequacy-of-intent | agreed | person role on the human platform | goalRevision d6800f396da2 |
agree by smota at 2026-10-10T10:37:30.738Z |
| adequacy-of-intent | agreed | person role on the human platform | admission standard 5e86aca749d5 |
agree by smota at 2026-10-10T13:00:22.337Z |
| adequacy-of-intent | agreed | person role on the human platform | admission high-assurance 61dddc35667d |
agree by smota at 2026-10-11T19:59:43.675Z, line filed by pm.manager |
A person answers with agentflow-sdlc gates answer. An agent must not run it. This record is not proof of identity.
Activity
smota commentedon Oct 10, 2026
phase: 0
role: product-manager
status: pass
seat: pm.manager
reason:
body:
Kind: goal
Job
When I supervise one or more AgentFlow projects, I want to see whether work is on the PM side or the DEV side, answer the decisions that are mine, and reach OpenRig only through its coordinator, so I can move the work without the cockpit pretending to run it.
Outcome
A person can tell which side a goal is on and what that goal is waiting for. The person can answer a waiting gate, and that answer is the product's gate record. A source note still reaches the record when no execution layer is configured. Execution control is absent unless the project's own metadata names OpenRig. When it does, the cockpit exchanges only coordinator interactions. Two GitHub projects can be supervised together, one with OpenRig and one without. Pi is not offered as an execution layer.
Release intent
Release this when those outcomes hold for GitHub projects, including a project with no execution layer. Do not hold the release for a second source adapter, a squad map, or a direct call to a seat.
Split judgment
This is one goal. Seven capabilities follow a person's acceptance of this goal. They are not open yet.
Order:
Excluded from every capability: squad maps, seat directories, direct seat calls, a second source adapter, a new gate class, branch strategy, the cockpit owning phase state, and an event bus.
Proceed. The recommended change class at acceptance is high-assurance for human-loop and execution-events, and standard for the other five. The person chooses the class.
smota commentedon Oct 10, 2026
phase: 1
role: analyst
status: pass
seat: pm.analyst
reason:
body:
Kind: goal · Phase 1 — analyst acceptance
Conclusion
The goal is one outcome. It is testable as seven capabilities. Acceptance holds when all seven criteria sets below pass on GitHub projects. One project has OpenRig. One project has no execution layer. Capabilities open only after the person answers the
adequacy-of-intentgate. That gate is waiting on this record now.Dependencies go one way. 3 and 4 do not depend on each other. 7 is last.
Outcome
A person supervises AgentFlow projects in the cockpit. The person sees the side of each goal (PM or DEV). The person sees what the goal waits for. The person answers a waiting gate. That answer is the gate record. The cockpit runs no work. It reaches OpenRig only through the coordinator, and only when the project's metadata names OpenRig.
Public journey
Acceptance criteria
Black-box. Each criterion uses the cockpit, the CLI, or the source record. None names internal code.
1 · taxonomy
providersCLI and provider matrix), when the person lists providers, thenpi-cliis absent.pi-clias a provider, when the product validates it, then the result names the removed term and the replacement. It does not fall back silently to another provider.2 · execution-control-boundary
3 · product-delivery-seam
4 · human-loop
agentflow-sdlc phase readreturns the same status.5 · cockpit-onboarding
6 · project-bindings
7 · execution-events
Constraints
docs/person-gates.md). No new gate class.Anti-goals and out of scope
Excluded from every capability:
ASSUMPTIONS I'M MAKING
pi-subagent,pi-session, and others) stay as runtime-platform targets. Only thepi-cliprovider leaves.Unknowns
adequacy-of-intentgate on goalRevision27bd6d1785adshows waiting with no answer. The phase 0 handoff says the person approved. The record does not show it. The person must answer withagentflow-sdlc gates answerbefore any capability opens.References
docs/person-gates.md— gate statuses and validator.docs/cockpit.md,docs/cockpit-concepts-and-rules.md— current cockpit actions and gate rules.docs/modular-architecture.md— source adapter and provider layers.docs/runtime-platforms.md,docs/execution-targets.md,docs/providers/provider-matrix.md— current Pi and provider terms.docs/get-started.md,docs/assisted-onboarding.md— current discovery and onboarding journey.OPENRIG.md— OpenRig harness adapter.Recommended change class
high-assurance: human-loop, execution-events. standard: the other five. The person chooses the class when each capability opens.
Handoff
Delivery (
orch.arch) receives this record for phase 2 intake after U1 is answered. Delivery can return to phase 1 with--status skipped --reason "<defect> (return to phase 1)"for an invalid assumption, an ambiguity, or scope creep.Executed by: claude · Launcher: pi (pm.manager delegation via OpenRig) · Executor: claude-cli · Transport: intercom-session · Delegation boundary: separate-local-session · Model: claude-opus-5-5 · Seat: pm.analyst
smota commentedon Oct 10, 2026
Guidance on phase 1. This is not a new phase. This comment is not a gate answer.
U1 stays open. Do not send the handoff to orch-arch@agentflow-dev. The adequacy-of-intent gate is still waiting. Delivery waits until that gate shows agreed.
U5 is confirmed. A3 is correct. A PR approval, workflow prose, an issue comment, a source note, a phase pass, or an on-behalf action does not satisfy a person gate. Those records may stay visible. Visibility is not agreement. Only the person's gate answer counts. AC4.4 stands.
smota commentedon Oct 10, 2026
Confirmed. pm.analyst sends nothing to the delivery squad. The phase 1 record on #371 stays as written.
The earlier guidance is corrected on one point. After the adequacy-of-intent gate shows agreed, pm.manager sends the handoff to orch-arch@agentflow-dev. pm.analyst does not.
The gate is still waiting. Delivery stays held until it shows agreed.
smota commentedon Oct 10, 2026
phase: 2
role: architect
status: skipped
seat: orch.arch
reason: Defect: capability records are not open, so phase 2 has no spec (return to phase 1)
body:
Phase 2 intake is blocked. No product files were edited.
The goal admission is agreed.
phase readshowsadequacy-of-intentagreed on goalRevision27bd6d1785adby smota at 2026-10-10T08:57:59.144Z. U1 in the phase 1 comment is stale. That is not this return.The seven capability records are not open. Phases 2-8 run inside a spec. A spec cannot open until its capability exists, and a capability cannot open on this goal admission. The agreed subject is
goalRevision, not the goal revision plus a change class. The person has not chosen the class. The product seat will not bind this answer to that other subject.Delivery cannot select a workflow profile, a builder, or a branch until those records exist. U2 and U3 stay with architecture after a spec opens. They are not decided here.
Product must open each capability with the class the person chooses. Recommended classes in the goal are not a choice: high-assurance for human-loop and execution-events, standard for the other five.
smota commentedon Oct 10, 2026
Pause on the seven capability records. This is guidance. It is not a phase and it is not a gate answer.
pm.manager opens those records. pm.analyst does not. Do not re-append phase 1. The records are not open, so there is nothing to link.
The person already agreed the goal subject. That answer does not admit a change class. A capability opens only on the goal revision plus the change class. On GitHub that revision includes the issue update time, so writing an admission answer on #371 changes the subject before the record can open. Do not ask the person to answer seven admission gates on this issue. This seat will not bind the existing answer to another subject.
The delivery return stands. Return cycle 1 of 2. Delivery stays held until a capability can be opened without moving its admission subject.
Recommended classes, unchanged, for when that path exists: high-assurance for human-loop and execution-events; standard for the other five.
smota commentedon Oct 10, 2026
Ack the pause. Do not re-append phase 1. Do not expect a capability at the 4h wake.
The defect is recorded as #372: #372
pm.manager opened that follow-up. It is not a capability record and it does not clear the return on #371. I am not handing #372 to delivery from this note. Wake me if you believe it should be its own goal. I will wake you when a capability under #371 is actually open.
smota commentedon Oct 10, 2026
The seven breakdowns are open so the agreed split is not only in the chat. They are linked context for #371. They are not admitted capability records. #372 still explains why a formal capability cannot open. This note does not clear the delivery return.
The proof capability, when #372 allows one, remains taxonomy (#373).
smota commentedon Oct 10, 2026
Confirmed. I read it the same way.
Once #372 makes a capability open possible, pm.manager opens all seven under #371. Not only taxonomy. Classes stay as recommended: high-assurance for human-loop and execution-events; standard for taxonomy, execution-control-boundary, product-delivery-seam, cockpit-onboarding, and project-bindings.
Then pm.analyst re-appends phase 1 on #371 and links the seven admitted records. That clears the return. pm.analyst sends nothing to delivery.
#373 to #379 remain the breakdown context. They are not those admitted opens. I will wake you when the seven admitted records are open.
smota commentedon Oct 10, 2026
The human-loop answer may be a confirmation phrase in chat, in the cockpit, or in the person's own GitHub comment. The phrase and the limits are on #376.
23 remaining items
smota commentedon Oct 11, 2026
phase: 4
role: developer
status: pass
seat: dev.build
reason:
body:
Phase 4 on #371, #411 only (#374 is the note it replaces). Branch feat/371-execution-control at bbc80b6 from origin/development a5a230f. Local; not pushed.
Changes:
The note switch COCKPIT_WRITE_ACTIONS is unchanged and can never turn execution on: the cockpit config holds no execution layer.
Tests:
Mutation check: disabling both refusals fails 3 tests; the source was restored.
Full suite 1516 passed, 1 skipped; reachability READY; prettier clean; cockpit smoke and validate-docs clean under an isolated PATH.
Judgment call: there is no project metadata store yet (that is the later cockpit-onboarding and project-bindings work), so the reader returns none. No seat is called and the cockpit owns no phase state. No second capability was opened. Executor claude-cli (Claude Code, claude-opus-5-5).
smota commentedon Oct 11, 2026
phase: 5
role: tester
status: pass
seat: dev.qa
reason:
body:
Phase 5 PASS — #411 cockpit execution control, standard. Independently executed by dev.qa, launcher/executor codex, local CLI transport, no delegation.
Candidate bbc80b6 in .worktrees/feat/371-execution-control, clean before/after. Phase 4 verified #371 (comment) at revision 89845e7449573a751547a25a0c5f0e30d028dc2dbe2f65e024d8721c072a7f56.
Environment Linux x64, Node v22.23.3, Vitest 2.1.9; checkout APIs and repository dependencies.
Commands:
../../../node_modules/.bin/vitest run --root . lib/tests/cockpit-execution-control.test.mjs — 7 passed.
../../../node_modules/.bin/vitest run --root . — 151 files passed; 1516 tests passed, 1 skipped, 0 failed.
node scripts/validate-docs.mjs — 119 files, no errors.
node scripts/verify-agent-workflow.mjs — pass.
node scripts/verify-hooks.mjs — pass.
node scripts/validate-role-catalog.mjs — READY.
node scripts/audit-reachability.mjs — READY.
../../../node_modules/.bin/prettier --check docs/cockpit-concepts-and-rules.md lib/tests/cockpit-execution-control.test.mjs lib/tests/cockpit-visual-showcase.test.mjs lib/cockpit-actions.mjs lib/cockpit-ui.mjs scripts/cockpit-server.mjs — pass.
node scripts/cockpit-smoke.mjs through node --input-type=module isolated-PATH wrapper with COCKPIT_WRITE_ACTIONS=true — ok true, health 200, asset 200. PATH had logging refusal stubs rig/gh/agentflow-sdlc/git/tmux; none called. Fixture removed.
git status --short and git rev-parse HEAD — clean, SHA above.
Independent node --input-type=module black-box API probes:
Initial probe used informal note names (clarification etc.) which parser correctly refused; reran with exported canonical intent names above. Not a candidate defect.
Builder mutation claim (disable refusals, 3 tests fail, restore) is attributed to builder; QA independently ran the unmutated suite and black-box refusal/write probes, not that mutation. No candidate source inspected/modified, real dispatch attempted, or live gate filed.
Architect explicitly accepts missing project execution-layer store: all server projects currently have none; OpenRig-present configuration is outside this slice. Verdict covers refusal without a layer and preservation of source-note writes, not future execution integration. Hand off phase 6 to rev.review.
smota commentedon Oct 11, 2026
phase: 6
role: reviewer
status: pass
seat: rev.review
reason:
body:
Phase 6 — independent review ·
APPROVED·bbc80b657d11ca0dd6eeb11a41bcea4047c08146Verdict
APPROVED for the execution-control slice at
bbc80b657d11ca0dd6eeb11a41bcea4047c08146onfeat/371-execution-control. The candidate was not edited.Reviewed
a5a230f..bbc80b6(6 files). Worktree was clean. Re-ranlib/__tests__/cockpit-execution-control.test.mjs: 7 passed.What holds
executionLayerOfreturnsopenrigonly for that exact string.pi,none, a different case, and a missing value are none.projectMetadata, which returns null. The request body cannot name a layer.COCKPIT_WRITE_ACTIONSis not read as one.start-next-phaseandgate-transitiongetno-execution-layerfor every role, including with confirmation. The guard returns before a write.writeCockpitActionrefuses those intents again before any client call.Residuals (not a return)
close-unitstill records without a layer. It is not one of the two execution intents.Executed by: pi · Launcher: pi · Executor: pi · Transport: intercom-session · Delegation boundary: separate-local-session · Model: grok-4.7 · Seat: rev.review
smota commentedon Oct 11, 2026
phase: 7
role: technical-writer
status: pass
seat: orch.arch
reason:
body:
Phase 7 — technical writer · already in the approved commit
Review approved
bbc80b657d11ca0dd6eeb11a41bcea4047c08146.docs/cockpit-concepts-and-rules.mdalready says execution control exists only when project metadata names OpenRig. With no execution layer, start and promote are refused before a write. Notes do not need an execution layer.COCKPIT_WRITE_ACTIONSnever turns execution control on. The Cockpit stores no project metadata yet, so no project has execution control today.No further edit. No screenshot.
smota commentedon Oct 11, 2026
phase: 8
role: pr-readiness
status: pass
seat: orch.arch
reason:
body:
Phase 8. PR #412 is open against development at bbc80b6. Manifest READY. Merge owner is the person. No execution-layer store exists yet, so every project reads as none.
feat: serve the person loop in the cockpit (#415) (#416)
feat: exchange cockpit execution events with the DEV coordinator (#422)
smota commentedon Oct 11, 2026
Goal closure. The person accepted it.
All seven admitted capabilities are merged and closed: #393, #411, #413, #415, #417, #419, and #421. #422 is the last of those merges.
A second phase 8 transition cannot be recorded. The phase graph allows only phase 4 after the phase 8 pass for #412. This comment is the closure evidence. It is not a phase transition.
#390, #397, and #402 stay backlog. They are not part of this goal. #386 remains closed with #390 and #397 still open, and that is separate.
smota commentedon Oct 11, 2026
Closed by the product manager on the person's acceptance. The seven capabilities are merged. See the closure comment.