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.
- package/package.json +9 -4
- package/scripts/abort-recovery-test.mjs +43 -2
- package/scripts/agent-tag-reuse-smoke.mjs +146 -6
- package/scripts/agent-terminal-reap-test.mjs +127 -0
- package/scripts/agent-trace-io-test.mjs +69 -0
- package/scripts/code-graph-disk-hit-test.mjs +224 -0
- package/scripts/dispatch-persist-recovery-test.mjs +141 -0
- package/scripts/execution-completion-dedup-test.mjs +157 -0
- package/scripts/execution-pending-resume-kick-test.mjs +57 -2
- package/scripts/execution-resume-esc-integration-test.mjs +174 -0
- package/scripts/explore-bench.mjs +101 -8
- package/scripts/explore-prompt-policy-test.mjs +156 -11
- package/scripts/find-fuzzy-hidden-test.mjs +122 -0
- package/scripts/internal-comms-bench-test.mjs +226 -0
- package/scripts/internal-comms-bench.mjs +185 -58
- package/scripts/internal-comms-smoke.mjs +171 -23
- package/scripts/live-worker-smoke.mjs +38 -2
- package/scripts/memory-cycle-routing-test.mjs +111 -0
- package/scripts/memory-rule-contract-test.mjs +93 -0
- package/scripts/notify-completion-mirror-test.mjs +73 -0
- package/scripts/output-style-smoke.mjs +2 -2
- package/scripts/rg-runner-test.mjs +240 -0
- package/scripts/routing-corpus-test.mjs +349 -0
- package/scripts/routing-corpus.mjs +211 -32
- package/scripts/session-orphan-sweep-test.mjs +83 -0
- package/scripts/session-sweep.mjs +266 -0
- package/scripts/steering-drain-buckets-test.mjs +179 -0
- package/scripts/tool-smoke.mjs +21 -13
- package/scripts/tool-tui-presentation-test.mjs +202 -0
- package/src/agents/heavy-worker/AGENT.md +10 -7
- package/src/agents/reviewer/AGENT.md +6 -4
- package/src/agents/worker/AGENT.md +7 -5
- package/src/rules/agent/00-common.md +4 -4
- package/src/rules/agent/00-core.md +11 -14
- package/src/rules/agent/20-skip-protocol.md +3 -3
- package/src/rules/agent/30-explorer.md +56 -48
- package/src/rules/agent/40-cycle1-agent.md +15 -24
- package/src/rules/agent/41-cycle2-agent.md +33 -57
- package/src/rules/agent/42-cycle3-agent.md +28 -42
- package/src/rules/lead/01-general.md +7 -10
- package/src/rules/lead/lead-brief.md +11 -14
- package/src/rules/lead/lead-tool.md +6 -5
- package/src/rules/shared/01-tool.md +44 -41
- package/src/runtime/agent/orchestrator/agent-trace-format.mjs +37 -1
- package/src/runtime/agent/orchestrator/agent-trace-io.mjs +20 -5
- package/src/runtime/agent/orchestrator/dispatch-persist.mjs +31 -8
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +13 -7
- package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +21 -1
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +6 -6
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +17 -38
- package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +5 -4
- package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +119 -3
- package/src/runtime/agent/orchestrator/session/agent-loop.mjs +17 -8
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +270 -78
- package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +18 -52
- package/src/runtime/agent/orchestrator/session/manager/delivered-completions.mjs +123 -0
- package/src/runtime/agent/orchestrator/session/manager/idle-cleanup.mjs +15 -2
- package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +41 -2
- package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store.mjs +339 -63
- package/src/runtime/agent/orchestrator/stall-policy.mjs +37 -0
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +12 -1
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +25 -20
- package/src/runtime/agent/orchestrator/tools/builtin/fs-reachability.mjs +6 -2
- package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +118 -53
- package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +106 -29
- package/src/runtime/agent/orchestrator/tools/builtin/path-utils.mjs +8 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-batch.mjs +4 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-range-index.mjs +3 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +4 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool.mjs +33 -2
- package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +151 -64
- package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +37 -13
- package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +84 -49
- package/src/runtime/agent/orchestrator/tools/code-graph/build.mjs +172 -23
- package/src/runtime/agent/orchestrator/tools/code-graph/constants.mjs +3 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/disk-cache.mjs +68 -5
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +17 -3
- package/src/runtime/agent/orchestrator/tools/code-graph/graph-binary.mjs +24 -10
- package/src/runtime/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +6 -3
- package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +4 -7
- package/src/runtime/agent/orchestrator/tools/code-graph.mjs +1 -0
- package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +1 -1
- package/src/runtime/memory/lib/memory-cycle2-gate.mjs +4 -4
- package/src/runtime/memory/lib/memory-cycle2-mutations.mjs +4 -3
- package/src/runtime/memory/lib/memory-cycle3.mjs +12 -2
- package/src/runtime/shared/tool-primitives.mjs +4 -1
- package/src/runtime/shared/tool-status.mjs +27 -0
- package/src/runtime/shared/tool-surface.mjs +6 -3
- package/src/session-runtime/config-helpers.mjs +14 -0
- package/src/session-runtime/context-status.mjs +1 -0
- package/src/session-runtime/effort.mjs +6 -2
- package/src/session-runtime/model-recency.mjs +5 -2
- package/src/session-runtime/provider-models.mjs +3 -3
- package/src/session-runtime/runtime-core.mjs +78 -10
- package/src/session-runtime/tool-catalog.mjs +34 -0
- package/src/session-runtime/warmup-schedulers.mjs +7 -1
- package/src/standalone/agent-tool/notify.mjs +13 -0
- package/src/standalone/agent-tool.mjs +45 -69
- package/src/standalone/explore-tool.mjs +6 -7
- package/src/tui/App.jsx +31 -0
- package/src/tui/app/model-options.mjs +5 -3
- package/src/tui/app/model-picker.mjs +12 -24
- package/src/tui/app/transcript-window.mjs +1 -0
- package/src/tui/components/ToolExecution.jsx +11 -6
- package/src/tui/components/TranscriptItem.jsx +1 -1
- package/src/tui/components/tool-execution/surface-detail.mjs +24 -10
- package/src/tui/components/tool-execution/text-format.mjs +10 -19
- package/src/tui/dist/index.mjs +533 -143
- package/src/tui/engine/agent-job-feed.mjs +153 -16
- package/src/tui/engine/agent-response-tail.mjs +68 -0
- package/src/tui/engine/notification-plan.mjs +16 -0
- package/src/tui/engine/queue-helpers.mjs +8 -0
- package/src/tui/engine/session-api.mjs +8 -2
- package/src/tui/engine/session-flow.mjs +34 -2
- package/src/tui/engine/tool-card-results.mjs +54 -32
- package/src/tui/engine/tool-result-status.mjs +75 -21
- package/src/tui/engine/turn.mjs +83 -43
- package/src/tui/engine.mjs +63 -2
- package/src/workflows/bench/WORKFLOW.md +25 -35
- package/src/workflows/default/WORKFLOW.md +38 -32
- package/src/workflows/solo/WORKFLOW.md +19 -22
- package/scripts/_jitter-fuzz.mjs +0 -44410
- package/scripts/_jitter-fuzz2.mjs +0 -44400
- package/scripts/_jitter-probe.mjs +0 -44397
- package/scripts/_jp2.mjs +0 -45614
package/src/tui/engine.mjs
CHANGED
|
@@ -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
|
|
9
|
+
# Bench
|
|
10
10
|
|
|
11
|
-
Autonomous
|
|
12
|
-
|
|
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
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
|
8
|
+
# Default
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
|
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
|
|
4
|
+
description: "Solo workflow — Lead handles everything directly."
|
|
5
5
|
agents:
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# Solo
|
|
8
|
+
# Solo
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
are in-progress, never conclusions.
|
|
22
|
-
3. Verify
|
|
23
|
-
4. Report
|
|
24
|
-
remaining risk/next step
|
|
25
|
-
|
|
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
|
|
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.
|