mixdog 0.9.37 → 0.9.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/package.json +9 -4
  2. package/scripts/abort-recovery-test.mjs +43 -2
  3. package/scripts/agent-tag-reuse-smoke.mjs +146 -6
  4. package/scripts/agent-terminal-reap-test.mjs +127 -0
  5. package/scripts/agent-trace-io-test.mjs +69 -0
  6. package/scripts/code-graph-disk-hit-test.mjs +224 -0
  7. package/scripts/dispatch-persist-recovery-test.mjs +141 -0
  8. package/scripts/execution-completion-dedup-test.mjs +157 -0
  9. package/scripts/execution-pending-resume-kick-test.mjs +57 -2
  10. package/scripts/execution-resume-esc-integration-test.mjs +174 -0
  11. package/scripts/explore-bench.mjs +101 -8
  12. package/scripts/explore-prompt-policy-test.mjs +156 -11
  13. package/scripts/find-fuzzy-hidden-test.mjs +122 -0
  14. package/scripts/internal-comms-bench-test.mjs +226 -0
  15. package/scripts/internal-comms-bench.mjs +185 -58
  16. package/scripts/internal-comms-smoke.mjs +171 -23
  17. package/scripts/live-worker-smoke.mjs +38 -2
  18. package/scripts/memory-cycle-routing-test.mjs +111 -0
  19. package/scripts/memory-rule-contract-test.mjs +93 -0
  20. package/scripts/notify-completion-mirror-test.mjs +73 -0
  21. package/scripts/output-style-smoke.mjs +2 -2
  22. package/scripts/rg-runner-test.mjs +240 -0
  23. package/scripts/routing-corpus-test.mjs +349 -0
  24. package/scripts/routing-corpus.mjs +211 -32
  25. package/scripts/session-orphan-sweep-test.mjs +83 -0
  26. package/scripts/session-sweep.mjs +266 -0
  27. package/scripts/steering-drain-buckets-test.mjs +179 -0
  28. package/scripts/tool-smoke.mjs +21 -13
  29. package/scripts/tool-tui-presentation-test.mjs +202 -0
  30. package/src/agents/heavy-worker/AGENT.md +10 -7
  31. package/src/agents/reviewer/AGENT.md +6 -4
  32. package/src/agents/worker/AGENT.md +7 -5
  33. package/src/rules/agent/00-common.md +4 -4
  34. package/src/rules/agent/00-core.md +11 -14
  35. package/src/rules/agent/20-skip-protocol.md +3 -3
  36. package/src/rules/agent/30-explorer.md +56 -48
  37. package/src/rules/agent/40-cycle1-agent.md +15 -24
  38. package/src/rules/agent/41-cycle2-agent.md +33 -57
  39. package/src/rules/agent/42-cycle3-agent.md +28 -42
  40. package/src/rules/lead/01-general.md +7 -10
  41. package/src/rules/lead/lead-brief.md +11 -14
  42. package/src/rules/lead/lead-tool.md +6 -5
  43. package/src/rules/shared/01-tool.md +44 -41
  44. package/src/runtime/agent/orchestrator/agent-trace-format.mjs +37 -1
  45. package/src/runtime/agent/orchestrator/agent-trace-io.mjs +20 -5
  46. package/src/runtime/agent/orchestrator/dispatch-persist.mjs +31 -8
  47. package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +13 -7
  48. package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +21 -1
  49. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +6 -6
  50. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +17 -38
  51. package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +5 -4
  52. package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +119 -3
  53. package/src/runtime/agent/orchestrator/session/agent-loop.mjs +17 -8
  54. package/src/runtime/agent/orchestrator/session/context-utils.mjs +270 -78
  55. package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +2 -1
  56. package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +18 -52
  57. package/src/runtime/agent/orchestrator/session/manager/delivered-completions.mjs +123 -0
  58. package/src/runtime/agent/orchestrator/session/manager/idle-cleanup.mjs +15 -2
  59. package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +41 -2
  60. package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +1 -1
  61. package/src/runtime/agent/orchestrator/session/store.mjs +339 -63
  62. package/src/runtime/agent/orchestrator/stall-policy.mjs +37 -0
  63. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +12 -1
  64. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +25 -20
  65. package/src/runtime/agent/orchestrator/tools/builtin/fs-reachability.mjs +6 -2
  66. package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +118 -53
  67. package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +106 -29
  68. package/src/runtime/agent/orchestrator/tools/builtin/path-utils.mjs +8 -1
  69. package/src/runtime/agent/orchestrator/tools/builtin/read-batch.mjs +4 -2
  70. package/src/runtime/agent/orchestrator/tools/builtin/read-range-index.mjs +3 -1
  71. package/src/runtime/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +4 -1
  72. package/src/runtime/agent/orchestrator/tools/builtin/read-tool.mjs +33 -2
  73. package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +151 -64
  74. package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +37 -13
  75. package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +84 -49
  76. package/src/runtime/agent/orchestrator/tools/code-graph/build.mjs +172 -23
  77. package/src/runtime/agent/orchestrator/tools/code-graph/constants.mjs +3 -0
  78. package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +68 -5
  79. package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +17 -3
  80. package/src/runtime/agent/orchestrator/tools/code-graph/graph-binary.mjs +24 -10
  81. package/src/runtime/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +6 -3
  82. package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +4 -7
  83. package/src/runtime/agent/orchestrator/tools/code-graph.mjs +1 -0
  84. package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +1 -1
  85. package/src/runtime/memory/lib/memory-cycle2-gate.mjs +4 -4
  86. package/src/runtime/memory/lib/memory-cycle2-mutations.mjs +4 -3
  87. package/src/runtime/memory/lib/memory-cycle3.mjs +12 -2
  88. package/src/runtime/shared/tool-primitives.mjs +4 -1
  89. package/src/runtime/shared/tool-status.mjs +27 -0
  90. package/src/runtime/shared/tool-surface.mjs +6 -3
  91. package/src/session-runtime/config-helpers.mjs +14 -0
  92. package/src/session-runtime/context-status.mjs +1 -0
  93. package/src/session-runtime/effort.mjs +6 -2
  94. package/src/session-runtime/model-recency.mjs +5 -2
  95. package/src/session-runtime/provider-models.mjs +3 -3
  96. package/src/session-runtime/runtime-core.mjs +78 -10
  97. package/src/session-runtime/tool-catalog.mjs +34 -0
  98. package/src/session-runtime/warmup-schedulers.mjs +7 -1
  99. package/src/standalone/agent-tool/notify.mjs +13 -0
  100. package/src/standalone/agent-tool.mjs +45 -69
  101. package/src/standalone/explore-tool.mjs +6 -7
  102. package/src/tui/App.jsx +31 -0
  103. package/src/tui/app/model-options.mjs +5 -3
  104. package/src/tui/app/model-picker.mjs +12 -24
  105. package/src/tui/app/transcript-window.mjs +1 -0
  106. package/src/tui/components/ToolExecution.jsx +11 -6
  107. package/src/tui/components/TranscriptItem.jsx +1 -1
  108. package/src/tui/components/tool-execution/surface-detail.mjs +24 -10
  109. package/src/tui/components/tool-execution/text-format.mjs +10 -19
  110. package/src/tui/dist/index.mjs +533 -143
  111. package/src/tui/engine/agent-job-feed.mjs +153 -16
  112. package/src/tui/engine/agent-response-tail.mjs +68 -0
  113. package/src/tui/engine/notification-plan.mjs +16 -0
  114. package/src/tui/engine/queue-helpers.mjs +8 -0
  115. package/src/tui/engine/session-api.mjs +8 -2
  116. package/src/tui/engine/session-flow.mjs +34 -2
  117. package/src/tui/engine/tool-card-results.mjs +54 -32
  118. package/src/tui/engine/tool-result-status.mjs +75 -21
  119. package/src/tui/engine/turn.mjs +83 -43
  120. package/src/tui/engine.mjs +63 -2
  121. package/src/workflows/bench/WORKFLOW.md +25 -35
  122. package/src/workflows/default/WORKFLOW.md +38 -32
  123. package/src/workflows/solo/WORKFLOW.md +19 -22
  124. package/scripts/_jitter-fuzz.mjs +0 -44410
  125. package/scripts/_jitter-fuzz2.mjs +0 -44400
  126. package/scripts/_jitter-probe.mjs +0 -44397
  127. package/scripts/_jp2.mjs +0 -45614
@@ -81,6 +81,7 @@ import {
81
81
  import { createToolApproval } from './engine/tool-approval.mjs';
82
82
  import { createToolCardResults } from './engine/tool-card-results.mjs';
83
83
  import { createAgentJobFeed } from './engine/agent-job-feed.mjs';
84
+ import { appendAgentResponseTail } from './engine/agent-response-tail.mjs';
84
85
  import {
85
86
  appendTuiSteeringPersist,
86
87
  dropTuiSteeringPersist,
@@ -424,6 +425,64 @@ export async function createEngineSession({
424
425
  if (origin === 'user') appendPromptHistory(state.cwd, text);
425
426
  pushItem({ kind: 'user', id, text });
426
427
  };
428
+ const pushAsyncAgentResponse = (text, id = nextId(), origin = 'injected', metadata = {}) => {
429
+ const synthetic = parseSyntheticAgentMessage(text);
430
+ const isAgent = synthetic?.name === 'agent';
431
+ if (!isAgent) return pushUserOrSyntheticItem(text, id, origin);
432
+ const responseHasBody = /\n\s*\n[\s\S]*\S/.test(String(text || ''));
433
+ const rawResult = synthetic.rawResult ?? text;
434
+ const args = {
435
+ ...(synthetic.args && typeof synthetic.args === 'object' ? synthetic.args : {}),
436
+ type: 'result',
437
+ };
438
+ const responseKey = String(metadata.responseKey || metadata.executionId || args.task_id || '').trim();
439
+ const previous = state.items.at(-1);
440
+ // Tail-only aggregation prevents a later completion from mutating a card
441
+ // above any outbound tool, assistant, user, or preview/body boundary.
442
+ if (
443
+ previous?.kind === 'tool'
444
+ && previous.agentDirection === 'inbound'
445
+ ) {
446
+ const patch = appendAgentResponseTail(previous, {
447
+ key: responseKey,
448
+ args,
449
+ result: synthetic.result,
450
+ rawResult,
451
+ hasBody: responseHasBody,
452
+ isError: synthetic.isError === true,
453
+ });
454
+ if (patch) {
455
+ patchItem(previous.id, patch);
456
+ return true;
457
+ }
458
+ }
459
+ pushItem({
460
+ kind: 'tool',
461
+ id,
462
+ name: 'agent',
463
+ args,
464
+ result: synthetic.result,
465
+ rawResult,
466
+ isError: synthetic.isError === true,
467
+ expanded: false,
468
+ count: 1,
469
+ completedCount: 1,
470
+ startedAt: Date.now(),
471
+ completedAt: Date.now(),
472
+ agentDirection: 'inbound',
473
+ agentResponseKey: responseKey,
474
+ agentResponseHasBody: responseHasBody,
475
+ agentResponseAggregate: false,
476
+ agentResponseEntries: [{
477
+ key: responseKey,
478
+ raw: String(rawResult ?? '').trim(),
479
+ result: synthetic.result,
480
+ hasBody: responseHasBody,
481
+ isError: synthetic.isError === true,
482
+ }],
483
+ });
484
+ return true;
485
+ };
427
486
  const pushToast = (text, tone = 'info', ttlMs = 3000) => {
428
487
  const id = nextId();
429
488
  const value = String(text ?? '').trim();
@@ -524,6 +583,7 @@ export async function createEngineSession({
524
583
  kickExecutionPendingResume,
525
584
  flushDeferredExecutionPendingResumeKick,
526
585
  scheduleExecutionPendingResumeKick,
586
+ discardExecutionPendingResume,
527
587
  updateAgentJobCard,
528
588
  buildAgentJobCardPatch,
529
589
  subscribeRuntimeNotifications,
@@ -537,6 +597,7 @@ export async function createEngineSession({
537
597
  enqueue: (...args) => bag.enqueue(...args),
538
598
  drain: (...args) => bag.drain(...args),
539
599
  pushUserOrSyntheticItem,
600
+ pushAsyncAgentResponse,
540
601
  makeQueueEntry: (...args) => bag.makeQueueEntry(...args),
541
602
  getPending: () => pending,
542
603
  agentStatusState,
@@ -574,12 +635,12 @@ export async function createEngineSession({
574
635
  flags, lifecycle, pending, pendingNotificationKeys, displayedExecutionNotificationKeys, listeners, itemIndexById,
575
636
  getState: () => state, set,
576
637
  pushItem, patchItem, replaceItems, pushToast, pushNotice, removeNotice, setProgressHint,
577
- pushUserOrSyntheticItem, upsertSyntheticToolItem,
638
+ pushUserOrSyntheticItem, pushAsyncAgentResponse, upsertSyntheticToolItem,
578
639
  markToolCallActive, markToolCallDone, clearActiveToolSummary, clearToastTimers,
579
640
  autoClearState, agentStatusState, baseRouteState, routeState, syncContextStats,
580
641
  presentNextToolApproval, finishToolApproval, denyAllToolApprovals, requestToolApproval,
581
642
  patchToolCardResult, flushToolResults,
582
- kickExecutionPendingResume, flushDeferredExecutionPendingResumeKick, scheduleExecutionPendingResumeKick, updateAgentJobCard, subscribeRuntimeNotifications,
643
+ kickExecutionPendingResume, flushDeferredExecutionPendingResumeKick, scheduleExecutionPendingResumeKick, discardExecutionPendingResume, updateAgentJobCard, subscribeRuntimeNotifications,
583
644
  });
584
645
  Object.assign(bag, createSessionFlow(bag));
585
646
  bag.runTurn = createRunTurn(bag);
@@ -6,41 +6,31 @@ hidden: true
6
6
  agents: worker, heavy-worker, reviewer, debugger, maintainer
7
7
  ---
8
8
 
9
- # Bench Workflow
9
+ # Bench
10
10
 
11
- Autonomous run: no user is present. Never wait for approval or ask
12
- questions — decide and proceed immediately. Loop until the task is verified
13
- complete or provably blocked.
11
+ Autonomous: no user. Never wait for approval or ask questions; decide/proceed.
12
+ Loop until verified complete or provably blocked.
14
13
 
15
- Lead supervises: delegates, coordinates, judges, decides. Route by complexity:
16
- - Lead directly: simple 1–2 step work, plus coordination, pre-planning, config
17
- changes, and final git deployment.
18
- - Worker: implementation that takes several steps. Heavy Worker:
19
- high-complexity, multi-step implementation.
20
- - Reviewer: verify implementation scopes (diff, regressions, missing checks).
21
- - Debugger: very high complexity, or when root-causing has already failed at
22
- least once.
14
+ Lead supervises, delegates, coordinates, judges, decides. Lead directly handles
15
+ simple 1–2-step work, coordination, pre-planning, config, final git deployment.
16
+ Worker: several-step implementation; Heavy Worker: high-complexity multi-step
17
+ implementation; Reviewer: implementation diff/regression/missing-check review;
18
+ Debugger: very high complexity or root cause already failed once.
23
19
 
24
- 1. Plan form the plan yourself and start executing immediately; no approval
25
- step exists.
26
- 2. Delegate split into the maximum number of independent scopes.
27
- - PARALLEL across independent scopes by default (implementation, analysis,
28
- review, debugging alike); spawn every scope in the SAME turn. Shared or
29
- cross-cutting code does NOT justify merging split per path and verify
30
- the shared parts yourself. The only single scope is a genuinely
31
- inseparable dependency; then state it.
32
- - SEQUENTIAL within a single complex scope: ordered steps with a
33
- build/test-green gate between them, not one shot.
34
- - Write briefs per the Lead brief contract.
35
- - After spawning async agents, END THE TURN — no polling, guessing, or
36
- dependent work until the completion notification resumes you.
37
- 3. Review pair one reviewer 1:1 with each implementation scope, spawned in the
38
- same turn, never deferred or batched; wait for its result. Fact-check agent
39
- responses and cross-check implementation and review results yourself before
40
- acting. Send fixes back to the original scope and loop verify -> fix ->
41
- re-verify until clean. Skip review only for simple, low-risk tasks. If a bug
42
- survives 2+ fix cycles, have the debugger investigate first instead of
43
- another fix round.
44
- 4. Finish — verify the final state yourself; only stop when the task is
45
- complete and verified, or a hard blocker makes progress impossible. State
46
- the outcome and evidence in the final message.
20
+ 1. Plan: form it and execute immediately; no approval step.
21
+ 2. Delegate: split to the maximum independent scopes. Parallelize independent
22
+ implementation/analysis/review/debugging, spawning every scope in one turn.
23
+ Shared/cross-cutting code does not justify merging: split by path and verify
24
+ shared parts yourself. A single scope needs a genuinely inseparable
25
+ dependency; state it. Within one complex scope, sequence steps with a
26
+ build/test-green gate between them. Briefs follow the Lead brief contract.
27
+ After async spawn, end turn: no polling, guessing, or dependent work until
28
+ completion notification.
29
+ 3. Review: one Reviewer per implementation scope, spawned 1:1 in the same turn,
30
+ never deferred/batched; wait. Fact-check agent responses and cross-check
31
+ implementation/review yourself before acting. Return fixes to the original
32
+ scope; loop verify -> fix -> re-verify until clean. Skip only simple,
33
+ low-risk review. If a bug survives 2+ fix cycles, Debugger investigates
34
+ before another fix round.
35
+ 4. Finish: verify final state yourself; stop only verified complete or hard
36
+ blocked. Final states outcome and evidence.
@@ -5,39 +5,45 @@ description: "Default agent workflow — fan-out parallel delegation across inde
5
5
  agents: worker, heavy-worker, reviewer, debugger, maintainer
6
6
  ---
7
7
 
8
- # Default Workflow
8
+ # Default
9
9
 
10
- HARD APPROVAL GATE investigation/planning may proceed only as read-only
11
- exploration while consulting with the user. After user consultation produces a
12
- conclusion and plan, execution is still forbidden until explicit go-ahead
13
- ("do it", "proceed", "go ahead"). Diagnosis agreement, problem-pointing, or plan
14
- agreement is NOT execution approval. No changes, state mutations, or delegation
15
- before explicit go-ahead.
10
+ GATE: Before approval, only read-only investigation/planning while consulting.
11
+ Approval is a later explicit user message after the latest plan ("do it",
12
+ "proceed", "go ahead"). Initial/additional/changed requests reset planning;
13
+ approval with a scope change needs a revised plan and fresh approval. Before
14
+ approval: no edits, state mutation, or delegation.
16
15
 
17
- Lead supervises/delegates/coordinates/judges/decides. After approval route by
18
- complexity: Lead directly only one-step single-turn fixes plus coordination,
19
- config, and git deployment; everything else delegates. Worker = multi-step or
20
- multi-file implementation; Heavy Worker = high-complexity scopes; Reviewer =
21
- implementation verification; Debugger = very high complexity or root-cause
22
- after a failed fix.
16
+ Lead supervises, delegates, coordinates, judges, decides. After approval,
17
+ delegate by default; Lead only coordinates, does git, or an obvious 1-edit/
18
+ 1-check change. Route other implementation/research/debugging to its matching
19
+ agent. Worker: bounded established path, low local risk/coupling/verification,
20
+ clear local check. Heavy Worker: high risk/coupling/verification (including any
21
+ high-risk scope), or coupled staged work needing coordinated verification.
22
+ Architecture, contracts, storage, concurrency, security, lifecycle are
23
+ indicators, not automatic categories. Reviewer verifies an implementation;
24
+ Debugger handles requested debugging or root cause after a failed fix.
23
25
 
24
- 1. Plan — present a draft before ANY implementation; revise/re-present until
25
- user consultation is complete and a conclusion/plan is agreed. Then wait for
26
- explicit go-ahead before executing. If ambiguous, restate the plan and ask.
27
- 2. Delegate maximize parallel distribution: split independent implementation
28
- scopes to separate worker/heavy-worker agents, all spawned in the SAME turn.
29
- Sequential steps only inside one inseparable complex scope, gated
30
- build/test-green; say when a scope is inseparable. Briefs follow Lead brief
31
- contract. After spawning async agents, END THE TURN.
32
- 3. Review once scopes land, spawn one reviewer per implementation scope, all
33
- in the same turn. Cross-check results yourself; send fixes to the original
34
- scope and loop fix -> re-verify until clean. Skip only simple low-risk work.
35
- Use Debugger first when asked for debugging or a bug survives 2+ fix cycles.
36
- On each agent report, relay scope+verdict and next work as in-progress,
37
- never as a conclusion.
38
- 4. Report final report covers work vs approved plan and verified result,
39
- separate from interim updates. Never forward raw agent output. Ask about
40
- ship/deploy when relevant; deploy/build/commit only on explicit user request
41
- after feedback with no issues.
26
+ 1. Plan: draft before any implementation; settle scope/plan, ask if ambiguous,
27
+ then await the gate.
28
+ 2. Delegate: maximize useful fan-out—one suitable Worker/Heavy Worker per ready
29
+ independent scope whose parallel gain exceeds coordination/merge cost; spawn
30
+ all in one turn, with no count cap. Serialize only a real dependency,
31
+ overlapping write, or inseparable coupling. Briefs follow the Lead brief
32
+ contract. After async spawn, end the turn.
33
+ 3. Review: after approval, complete delegation, review, self-verification, and
34
+ in-scope fixes without reapproval. Every delegated implementation gets one
35
+ Reviewer (all ready reviewers in one turn) and Lead integration/cross-scope
36
+ verification in parallel. Reviewer independently judges risk, intent,
37
+ boundaries; Lead checks acceptance/interactions, not duplicate same-scope
38
+ work. High-risk scopes add distinct lenses. Synthesize one verdict; send
39
+ merged fixes to the original live session; loop fix -> re-verify (same
40
+ Reviewer + Lead re-check) until clean. Debugger first for requested debugging
41
+ or a bug surviving 2+ fix cycles. Agent reports relay scope, verdict, next
42
+ work as in-progress, never conclusions.
43
+ 4. Report: final (not interim) report compares work to approved plan and gives
44
+ verified result; never forward raw agent output. Ask about ship/deploy when
45
+ relevant. Build/deploy/commit/push require an explicit user request after
46
+ issue-free feedback; implementation approval alone is insufficient.
42
47
 
43
- On major direction shifts mid-work, pause and re-consult the user.
48
+ On outcome/direction change, pause and re-consult; otherwise continue approved
49
+ work without reapproval.
@@ -1,31 +1,28 @@
1
1
  ---
2
2
  id: solo
3
3
  name: Solo
4
- description: "Solo workflow — Lead handles everything directly; delegation forbidden."
4
+ description: "Solo workflow — Lead handles everything directly."
5
5
  agents:
6
6
  ---
7
7
 
8
- # Solo Workflow
8
+ # Solo
9
9
 
10
- HARD APPROVAL GATE investigation/planning may proceed only as read-only
11
- exploration while consulting with the user. After user consultation produces a
12
- conclusion and plan, execution is still forbidden until explicit go-ahead
13
- ("do it", "proceed", "go ahead"). Diagnosis agreement, problem-pointing, or plan
14
- agreement is NOT execution approval. No changes or state mutations before
15
- explicit go-ahead.
10
+ GATE: Before approval, only read-only investigation/planning while consulting.
11
+ Approval is a later explicit user message after the latest plan ("do it",
12
+ "proceed", "go ahead"). Initial/additional/changed requests reset planning;
13
+ approval with a scope change needs a revised plan and fresh approval. Before
14
+ approval: no edits or state mutation.
16
15
 
17
- 1. Plan — present a draft before ANY implementation; revise/re-present until
18
- user consultation is complete and a conclusion/plan is agreed. Then wait for
19
- explicit go-ahead before executing. If ambiguous, restate the plan and ask.
20
- 2. Execute Lead does all work directly; delegation forbidden. Interim updates
21
- are in-progress, never conclusions.
22
- 3. Verify check and fix directly until clean or a blocker is reported.
23
- 4. Report final report covers work vs approved plan, verification result, and
24
- remaining risk/next step, distinct from interim updates. Deploy/build/commit
25
- only after user feedback with no issues.
16
+ 1. Plan: draft before any implementation; settle scope/plan, ask if ambiguous,
17
+ then await the gate.
18
+ 2. Execute: after approval, Lead does all work. Never spawn, send, delegate, or
19
+ ask agents to work. Complete execution/in-scope fixes without reapproval;
20
+ interim updates are in-progress, never conclusions.
21
+ 3. Verify: Lead checks/fixes directly until clean or reports a blocker.
22
+ 4. Report: final (not interim) report compares work to approved plan and gives
23
+ verification, remaining risk/next step. Build/deploy/commit/push require an
24
+ explicit user request after issue-free feedback; implementation approval
25
+ alone is insufficient.
26
26
 
27
- On major direction shifts mid-work, pause and re-consult the user.
28
-
29
- Delegation rule:
30
- - Never delegate/spawn/send or ask agents to work; ignore available-agent
31
- sections while this workflow is active.
27
+ On outcome/direction change, pause and re-consult; otherwise continue approved
28
+ work without reapproval.