ultra-builder-pro-cli 0.15.0 → 0.17.0
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/.ultra-template/specs/research-distillate.md +4 -3
- package/CHANGELOG.md +120 -1
- package/README.md +67 -30
- package/adapters/_shared/codex-assets.cjs +10 -5
- package/adapters/_shared/handbook.cjs +3 -2
- package/adapters/_shared/interaction-contract.cjs +61 -0
- package/adapters/claude.js +1 -1
- package/adapters/opencode.js +1 -1
- package/bin/orchestrator.js +175 -19
- package/commands/ultra-change.md +1 -1
- package/commands/ultra-deliver.md +3 -3
- package/commands/ultra-init.md +1 -1
- package/commands/ultra-plan.md +1 -1
- package/commands/ultra-research.md +2 -2
- package/commands/ultra-review.md +10 -0
- package/commands/ultra-status.md +1 -1
- package/commands/ultra-test.md +1 -1
- package/commands/ultra-think.md +2 -2
- package/docs/AGENT-CONTEXT.md +38 -18
- package/docs/ARCHITECTURE.md +91 -13
- package/docs/LEGACY-CLI-CROSSWALK.md +163 -0
- package/docs/PLAN.zh-CN.md +19 -12
- package/docs/ROADMAP.md +5 -3
- package/docs/RUNTIME-COMPAT-MATRIX.md +4 -4
- package/docs/STATE-DB-ACCESS-POLICY.md +8 -6
- package/docs/USER-HANDBOOK-CONTRACT.md +8 -2
- package/docs/WORKFLOW-LIFECYCLE.md +179 -39
- package/hooks/pre_stop_check.py +3 -2
- package/mcp-server/lib/baseline-workflow.cjs +84 -16
- package/mcp-server/lib/change-workflow.cjs +107 -39
- package/mcp-server/lib/context-spine.cjs +215 -87
- package/mcp-server/lib/decision-dialogue.cjs +713 -0
- package/mcp-server/lib/doctor.cjs +9 -0
- package/mcp-server/lib/git-bootstrap.cjs +240 -0
- package/mcp-server/lib/init-project.cjs +178 -41
- package/mcp-server/lib/project-breadcrumb.cjs +23 -14
- package/mcp-server/lib/state-db.cjs +279 -9
- package/mcp-server/lib/state-ops.cjs +64 -1
- package/mcp-server/lib/workflow-state.cjs +313 -205
- package/mcp-server/server.cjs +112 -34
- package/orchestrator/auto-merge.cjs +19 -0
- package/orchestrator/daemon.cjs +104 -0
- package/orchestrator/parallel-orchestrator.cjs +371 -49
- package/orchestrator/session-runner.cjs +354 -25
- package/package.json +2 -1
- package/skills/ultra-change/SKILL.md +69 -65
- package/skills/ultra-deliver/SKILL.md +37 -58
- package/skills/ultra-dev/SKILL.md +55 -49
- package/skills/ultra-doctor/SKILL.md +44 -49
- package/skills/ultra-init/SKILL.md +78 -100
- package/skills/ultra-plan/SKILL.md +78 -79
- package/skills/ultra-research/SKILL.md +99 -98
- package/skills/ultra-review/SKILL.md +38 -47
- package/skills/ultra-review/references/review-modes.md +5 -3
- package/skills/ultra-review/references/unified-schema.md +26 -6
- package/skills/ultra-review/scripts/review_wait.py +12 -0
- package/skills/ultra-status/SKILL.md +34 -40
- package/skills/ultra-test/SKILL.md +61 -48
- package/skills/ultra-think/SKILL.md +47 -47
- package/skills/ultra-think/references/decision-dialogue.md +106 -0
- package/spec/cli-protocol.md +46 -2
- package/spec/mcp-tools.yaml +444 -29
- package/spec/schemas/delivery-report.v1.schema.json +1 -46
- package/spec/schemas/mcp-tools.schema.json +1 -1
- package/spec/schemas/state-db.sql +66 -2
- package/spec/schemas/test-report.v1.schema.json +45 -14
- package/ultra-tools/cli.cjs +1 -1
- package/ultra-tools/commands/session.cjs +10 -3
- package/ultra-tools/commands/status.cjs +34 -14
- package/ultra-tools/commands/system.cjs +2 -2
- package/ultra-tools/commands/task.cjs +3 -0
|
@@ -1,83 +1,82 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ultra-plan
|
|
3
|
-
description:
|
|
3
|
+
description: Turn an accepted Ultra Change Contract into dependency-valid, DB-backed vertical task contracts. Use when research obligations are resolved and implementation needs an executable plan.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
3.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
approval evidence, plan workflow id, and one `ultra-dev` route.
|
|
6
|
+
# Build an executable plan
|
|
7
|
+
|
|
8
|
+
The model owns decomposition and technical design. MCP owns plan state, task contracts,
|
|
9
|
+
dependency integrity, output digests, and recovery. Planning must stay inside the
|
|
10
|
+
accepted Change Contract without adding ceremonial approval.
|
|
11
|
+
|
|
12
|
+
## Bind current authority
|
|
13
|
+
|
|
14
|
+
1. Read doctor, baseline, change, decisions, existing plan runs, tasks, and current
|
|
15
|
+
checkout.
|
|
16
|
+
2. Require one mutable change with a healthy baseline or recorded incident bypass.
|
|
17
|
+
3. Complete the exact change-bound research disposition before planning.
|
|
18
|
+
4. Resume the matching plan run or start one bound to the change and baseline.
|
|
19
|
+
|
|
20
|
+
Read `references/semantic-preflight.md` and inspect requirements, real consumers,
|
|
21
|
+
state, tests, deployment, and recovery paths.
|
|
22
|
+
|
|
23
|
+
## Design with model autonomy
|
|
24
|
+
|
|
25
|
+
Build a candidate plan privately. Ask the user only if the plan would change accepted
|
|
26
|
+
scope, public behavior, compatibility, security, material cost, external effects, or
|
|
27
|
+
recovery. Use the host's native question UI when available and the interaction protocol
|
|
28
|
+
in `../ultra-think/references/decision-dialogue.md`.
|
|
29
|
+
|
|
30
|
+
When the candidate remains inside the accepted Change Contract, proceed without a
|
|
31
|
+
second approval. A user may still request a plan review before persistence; that is an
|
|
32
|
+
interaction preference, not a runtime invariant.
|
|
33
|
+
|
|
34
|
+
Record:
|
|
35
|
+
|
|
36
|
+
1. `validate-baseline`
|
|
37
|
+
2. `analyze-requirements`
|
|
38
|
+
3. `analyze-codebase`
|
|
39
|
+
4. `design-slices`
|
|
40
|
+
5. `validate-dependencies`
|
|
41
|
+
6. `persist-task-contracts`
|
|
42
|
+
7. `verify-plan`
|
|
43
|
+
|
|
44
|
+
Design a walking skeleton and subsequent vertical slices. Every slice reaches a real
|
|
45
|
+
consumer and owns its validation, side effects, errors, documentation, migration,
|
|
46
|
+
observability, and recovery obligations. Avoid unconsumed horizontal scaffolding.
|
|
47
|
+
|
|
48
|
+
## Persist task contracts
|
|
49
|
+
|
|
50
|
+
Create each task with:
|
|
51
|
+
|
|
52
|
+
- observable outcome and stable trace;
|
|
53
|
+
- `slice_kind`, public seam, and exact verification command;
|
|
54
|
+
- structured acceptance mapped to Change acceptance ids;
|
|
55
|
+
- bounded context refs and reasons;
|
|
56
|
+
- documentation impact, ownership, dependencies, and affected files when known.
|
|
57
|
+
|
|
58
|
+
Use estimates only when evidence supports them. A quick change has exactly one task.
|
|
59
|
+
Read every task back from DB. Never read or write `.ultra/tasks/tasks.json` directly;
|
|
60
|
+
it is a generated projection, not authority.
|
|
61
|
+
|
|
62
|
+
If a semantic `change.update` invalidated existing tasks, reconcile every affected
|
|
63
|
+
task contract against the current intent, acceptance, decisions, and research
|
|
64
|
+
evidence. Rebind the complete execution contract while clearing `stale` through
|
|
65
|
+
`task.update`; MCP rejects a marker-only clear, validates the read-back, and records
|
|
66
|
+
the current Change authority digest. Never clear staleness merely to pass a gate.
|
|
67
|
+
|
|
68
|
+
Validate the change-scoped graph with `task.dependency_topo`. Export
|
|
69
|
+
`.ultra/execution-plan.json` with `plan.export`, read it through `plan.get`, and record
|
|
70
|
+
it as the `verify-plan` output.
|
|
71
|
+
|
|
72
|
+
Call `workflow.complete`. `approval` is optional: include it only when a material plan
|
|
73
|
+
decision actually required and received user approval. MCP derives task coverage and
|
|
74
|
+
topology from DB and must reject incomplete contracts, uncovered acceptance, cycles,
|
|
75
|
+
cross-change tasks, stale research, or a mismatched export.
|
|
76
|
+
|
|
77
|
+
Do not advance or complete the Change workflow; change capture is already complete.
|
|
78
|
+
Compile task context later for the consumer that needs it.
|
|
79
|
+
|
|
80
|
+
Return topology, first executable slices, public seams, verification commands, plan
|
|
81
|
+
workflow id, and allowed transitions. The host may recommend parallel or sequential
|
|
82
|
+
execution based on dependency and conflict evidence.
|
|
@@ -1,102 +1,103 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ultra-research
|
|
3
|
-
description:
|
|
3
|
+
description: Build or refresh an evidence-backed product and architecture baseline with model-selected semantic coverage and low-load user alignment. Use when initialization, brownfield adoption, or an active change has a real evidence gap.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
|
40
|
-
|
|
41
|
-
| `
|
|
42
|
-
| `
|
|
43
|
-
| `
|
|
44
|
-
| `
|
|
45
|
-
| `
|
|
46
|
-
| `
|
|
47
|
-
| `32-building-blocks` | `references/32-building-blocks.md` |
|
|
48
|
-
| `40-deployment` | `references/40-deployment.md` |
|
|
49
|
-
| `
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
sources
|
|
57
|
-
2.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
payloads
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
6
|
+
# Research with adaptive coverage
|
|
7
|
+
|
|
8
|
+
The host model owns investigation, synthesis, and coverage judgment. Ultra MCP owns the
|
|
9
|
+
run, evidence references, semantic records, artifact digests, freshness, and
|
|
10
|
+
convergence. The seventeen areas are a coverage catalog, not a mandatory questionnaire
|
|
11
|
+
or a fixed sequence of user conversations.
|
|
12
|
+
|
|
13
|
+
Read `../ultra-think/references/decision-dialogue.md` before asking a material question.
|
|
14
|
+
|
|
15
|
+
## Bind authority
|
|
16
|
+
|
|
17
|
+
1. Read `system.doctor`, `baseline.get`, active decisions, and existing research runs.
|
|
18
|
+
2. Resume the matching active, blocked, or ready run. Do not create parallel authority.
|
|
19
|
+
3. If none exists, select:
|
|
20
|
+
- `full` for a greenfield baseline;
|
|
21
|
+
- `adoption` for a brownfield baseline;
|
|
22
|
+
- a bounded mode only for a recorded active-change research disposition.
|
|
23
|
+
4. Before `workflow.start`, inspect current code, docs, tests, runtime, and prior
|
|
24
|
+
artifacts. Provide one disposition for every catalog area in `full` or `adoption`:
|
|
25
|
+
- `execute`: produce fresh evidence;
|
|
26
|
+
- `verify_existing`: verify a current artifact against its source;
|
|
27
|
+
- `reuse`: reuse evidence that is still current;
|
|
28
|
+
- `not_applicable`: exclude with an evidence reference and rationale;
|
|
29
|
+
- `deferred`: record the consequence and owner acceptance when deferral changes the
|
|
30
|
+
accepted scope or leaves material risk.
|
|
31
|
+
|
|
32
|
+
`99-synthesis` must execute, verify, or reuse. A missing disposition is a coverage
|
|
33
|
+
error; a non-executed area with evidence is not an incomplete workflow.
|
|
34
|
+
|
|
35
|
+
## Coverage catalog
|
|
36
|
+
|
|
37
|
+
Load only the reference for a step that must execute, verify, or reuse:
|
|
38
|
+
|
|
39
|
+
| Area | Reference | Area | Reference |
|
|
40
|
+
|---|---|---|---|
|
|
41
|
+
| `00-problem-validation` | `references/00-problem-validation.md` | `01-opportunity-discovery` | `references/01-opportunity-discovery.md` |
|
|
42
|
+
| `02-market-assessment` | `references/02-market-assessment.md` | `03-competitive-landscape` | `references/03-competitive-landscape.md` |
|
|
43
|
+
| `04-product-strategy` | `references/04-product-strategy.md` | `05-assumptions-validation` | `references/05-assumptions-validation.md` |
|
|
44
|
+
| `10-user-personas` | `references/10-user-personas.md` | `11-user-scenarios` | `references/11-user-scenarios.md` |
|
|
45
|
+
| `20-user-stories` | `references/20-user-stories.md` | `21-features-scope` | `references/21-features-scope.md` |
|
|
46
|
+
| `22-success-metrics` | `references/22-success-metrics.md` | `30-architecture-context` | `references/30-architecture-context.md` |
|
|
47
|
+
| `31-solution-strategy` | `references/31-solution-strategy.md` | `32-building-blocks` | `references/32-building-blocks.md` |
|
|
48
|
+
| `40-deployment` | `references/40-deployment.md` | `41-quality-risks` | `references/41-quality-risks.md` |
|
|
49
|
+
| `99-synthesis` | `references/99-synthesis.md` | | |
|
|
50
|
+
|
|
51
|
+
## Investigate and interact
|
|
52
|
+
|
|
53
|
+
For each active area:
|
|
54
|
+
|
|
55
|
+
1. Resolve observable facts from the checkout, runtime, tests, existing specifications,
|
|
56
|
+
and primary sources. Separate `Observed`, `Verified`, `Decided`, and `Unknown`.
|
|
57
|
+
2. Ask the user only for a material intent, scope, compatibility, risk, or recovery
|
|
58
|
+
decision that evidence cannot answer. Use the host's native question UI when
|
|
59
|
+
available. Present the recommendation and effect; avoid a questionnaire or a dump
|
|
60
|
+
of the hidden research queue.
|
|
61
|
+
3. Process dependent decisions one at a time. A small group of independent,
|
|
62
|
+
low-cognitive-load facts may be asked together when the host UI supports it.
|
|
63
|
+
4. Normalize explicit user intent without redundant confirmation. Create durable
|
|
64
|
+
decision state only when a project-bound decision must survive interruption.
|
|
65
|
+
5. Update the smallest relevant baseline specification or active-change research
|
|
66
|
+
artifact. Do not copy prompts, transcripts, provider payloads, or internal chain of
|
|
67
|
+
thought.
|
|
68
|
+
|
|
69
|
+
For every required workflow step, write
|
|
70
|
+
`.ultra/docs/research/<workflow-id>/<step-id>.md` with `Evidence`,
|
|
71
|
+
`Specification updates`, and `Decisions and unknowns`. Call `workflow.step` with
|
|
72
|
+
bounded evidence, the report output, and typed semantic records. Reused or verified
|
|
73
|
+
evidence must still produce a current report and digest. Block the same step when
|
|
74
|
+
required evidence or owner authority is missing.
|
|
75
|
+
|
|
76
|
+
At synthesis, bind the current `discovery.md`, `product.md`, `architecture.md`, and
|
|
77
|
+
`research-distillate.md` for initial/adoption research.
|
|
78
|
+
|
|
79
|
+
## Baseline convergence
|
|
80
|
+
|
|
81
|
+
After `workflow.complete`, initial or adoption research calls `baseline.record` with
|
|
82
|
+
the current repository scope and revision, specification refs, evidence, real
|
|
83
|
+
verification results, unknowns, gap ledger, classification, and external provider
|
|
84
|
+
metadata references.
|
|
85
|
+
|
|
86
|
+
If Git is initialized but unborn, present the exact local checkpoint paths and purpose
|
|
87
|
+
for user authorization, then create only that local commit. Never create a remote,
|
|
88
|
+
tag, or push through research. If authorization or identity is missing, preserve the
|
|
89
|
+
run as blocked with `BASELINE_GIT_HEAD_REQUIRED`.
|
|
90
|
+
|
|
91
|
+
Call `baseline.converge` only when the user has accepted the exact baseline snapshot,
|
|
92
|
+
known failures, blocking gaps, and scope. Reuse an unambiguous current approval; do not
|
|
93
|
+
ask twice. MCP must reject stale research, drift, missing evidence, and unaccepted
|
|
94
|
+
failures.
|
|
95
|
+
|
|
96
|
+
Reuse the final research checkpoint approval during baseline convergence; do not ask
|
|
97
|
+
for an equivalent approval again. After initial or adoption convergence,
|
|
98
|
+
`ultra-change` becomes an available transition. Bounded change research returns to
|
|
99
|
+
its owning Change authority.
|
|
100
|
+
|
|
101
|
+
Return a compact coverage summary by disposition, current evidence or decision
|
|
102
|
+
blocker, baseline state, gaps, and allowed transitions. The host chooses the semantic
|
|
103
|
+
recommendation; MCP supplies only valid and required transitions.
|
|
@@ -1,65 +1,56 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ultra-review
|
|
3
|
-
description:
|
|
3
|
+
description: Independently review one current Ultra plan, task diff, or aggregate change on specification fidelity and engineering standards. Use when current evidence needs a review gate or focused risk analysis.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Review one
|
|
6
|
+
# Review one bounded scope
|
|
7
7
|
|
|
8
|
-
Keep two verdict axes
|
|
8
|
+
Keep two independent verdict axes:
|
|
9
9
|
|
|
10
|
-
- `spec_fidelity`: accepted intent,
|
|
11
|
-
- `engineering_standards`: correctness, safety, tests,
|
|
12
|
-
|
|
10
|
+
- `spec_fidelity`: accepted intent, behavior, documentation impact, and public seams;
|
|
11
|
+
- `engineering_standards`: correctness, safety, tests, integration, maintainability,
|
|
12
|
+
observability, and recovery.
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
Neither axis can compensate for the other.
|
|
15
15
|
|
|
16
|
-
## Bind
|
|
16
|
+
## Bind evidence
|
|
17
17
|
|
|
18
|
-
1. Read `references/review-modes.md
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
4. Compile `change.context` for `review` using only accepted intent, delta, task
|
|
26
|
-
contracts, tests, public seams, and diff paths. Record `compile-context` only when
|
|
27
|
-
ready, with the immutable context manifest as the step output.
|
|
28
|
-
5. Create `.ultra/reviews/<session-id>/` with mode, change id, exact task ids, full HEAD,
|
|
29
|
-
worktree digest, diff range, scope metadata, and pending verdicts.
|
|
18
|
+
1. Read `references/review-modes.md` and select `plan`, `task`, or `change` from the
|
|
19
|
+
actual review request.
|
|
20
|
+
2. Bind one explicit diff or plan artifact, full HEAD, worktree digest, task set,
|
|
21
|
+
acceptance, and current decision state.
|
|
22
|
+
3. Resume or start the review workflow and record `bind-diff`.
|
|
23
|
+
4. Compile `change.context` for `review` and record the immutable manifest under
|
|
24
|
+
`compile-context`.
|
|
30
25
|
|
|
31
|
-
|
|
26
|
+
An empty, ambiguous, or stale scope cannot pass.
|
|
32
27
|
|
|
33
|
-
|
|
34
|
-
smallest necessary engineering workers using the mode and risk matrix; a change review
|
|
35
|
-
for delivery runs every applicable role. Record every selected and skipped role with a
|
|
36
|
-
scope-specific rationale. Invoke them through the current host's native bounded-worker
|
|
37
|
-
mechanism. Keep workers independent and pass only the current diff plus their role
|
|
38
|
-
context.
|
|
28
|
+
## Select workers by risk
|
|
39
29
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
30
|
+
Always run `review-spec`. Select the smallest engineering worker set that covers the
|
|
31
|
+
actual diff and risk. Record every selected and excluded worker with a specific
|
|
32
|
+
rationale; do not run every specialist ceremonially.
|
|
43
33
|
|
|
44
|
-
|
|
34
|
+
Invoke workers through the current host's native bounded-worker mechanism and pass
|
|
35
|
+
only their role, current scope, and relevant evidence. Workers are read-only and may
|
|
36
|
+
not decide owner choices or edit source.
|
|
45
37
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
38
|
+
Resolve `references/unified-schema.md` from this Skill directory and pass its absolute
|
|
39
|
+
path as `SCHEMA_PATH`. Validate specialist artifacts with
|
|
40
|
+
`scripts/review_wait.py`. Record outputs under `review-specification`,
|
|
41
|
+
`review-engineering`, and `coordinate-findings`.
|
|
49
42
|
|
|
50
|
-
The coordinator preserves every
|
|
51
|
-
|
|
52
|
-
|
|
43
|
+
The coordinator preserves every finding unchanged in `SUMMARY.json`; it may group
|
|
44
|
+
duplicate root causes only in the human summary. A new material owner choice remains a
|
|
45
|
+
finding and routes to the interaction protocol.
|
|
53
46
|
|
|
54
|
-
##
|
|
47
|
+
## Complete
|
|
55
48
|
|
|
56
|
-
Recheck
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
`SUMMARY.json` to match their complete finding set. Prompt claims and a lossy
|
|
61
|
-
coordinator summary cannot replace either axis. Any code, test, spec, or contract edit
|
|
62
|
-
invalidates affected review evidence and requires a new or resumed run.
|
|
49
|
+
Recheck HEAD, worktree, context digest, diff, task set, acceptance, artifact schemas,
|
|
50
|
+
and both axes. Record `verify-review-gate`, then call `workflow.complete`. MCP derives
|
|
51
|
+
the durable verdict and rejects missing specialists, lossy coordination, stale
|
|
52
|
+
artifacts, or prompt-supplied conclusions.
|
|
63
53
|
|
|
64
|
-
|
|
65
|
-
|
|
54
|
+
Any relevant code, test, specification, or contract edit invalidates the affected
|
|
55
|
+
review evidence. Return both verdict axes, blocking findings, reviewed scope, worker
|
|
56
|
+
selection rationale, artifact digests, and allowed transitions.
|
|
@@ -22,6 +22,8 @@ may be skipped with a concrete rationale.
|
|
|
22
22
|
|
|
23
23
|
## Selection record
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
Disposition the complete specialist roster: `review-spec`, `review-code`,
|
|
26
|
+
`review-tests`, `review-errors`, `review-design`, and `review-comments`. Record each as
|
|
27
|
+
`selected` or `skipped` with a rationale tied to the mode, changed paths, public seam,
|
|
28
|
+
and risk flags. A role is applicable when its evidence could change either verdict
|
|
29
|
+
axis. Tool availability alone is not a selection reason.
|
|
@@ -87,9 +87,9 @@ preference as a defect. Preserve the source specialist's severity during coordin
|
|
|
87
87
|
}
|
|
88
88
|
},
|
|
89
89
|
"workers": {
|
|
90
|
-
"completed": ["review-code", "review-tests"],
|
|
90
|
+
"completed": ["review-spec", "review-code", "review-tests"],
|
|
91
91
|
"failed": [],
|
|
92
|
-
"skipped": []
|
|
92
|
+
"skipped": ["review-errors", "review-design", "review-comments"]
|
|
93
93
|
},
|
|
94
94
|
"worker_selection": [
|
|
95
95
|
{
|
|
@@ -97,6 +97,26 @@ preference as a defect. Preserve the source specialist's severity during coordin
|
|
|
97
97
|
"status": "selected",
|
|
98
98
|
"rationale": "The specification axis is required for every review mode."
|
|
99
99
|
},
|
|
100
|
+
{
|
|
101
|
+
"worker": "review-code",
|
|
102
|
+
"status": "selected",
|
|
103
|
+
"rationale": "The runtime diff changes executable behavior."
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"worker": "review-tests",
|
|
107
|
+
"status": "selected",
|
|
108
|
+
"rationale": "The accepted behavior depends on changed test evidence."
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"worker": "review-errors",
|
|
112
|
+
"status": "skipped",
|
|
113
|
+
"rationale": "The diff does not change an error, fallback, or recovery path."
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"worker": "review-design",
|
|
117
|
+
"status": "skipped",
|
|
118
|
+
"rationale": "The bounded change does not alter module or data-flow boundaries."
|
|
119
|
+
},
|
|
100
120
|
{
|
|
101
121
|
"worker": "review-comments",
|
|
102
122
|
"status": "skipped",
|
|
@@ -112,10 +132,10 @@ preference as a defect. Preserve the source specialist's severity during coordin
|
|
|
112
132
|
`findings` must contain every specialist finding unchanged. Group duplicates only in
|
|
113
133
|
the human-readable summary; never delete or merge machine-readable records.
|
|
114
134
|
|
|
115
|
-
`mode` is `task`, `change`, or `plan`. `worker_selection` contains
|
|
116
|
-
|
|
117
|
-
`workers.completed` plus `workers.failed`; its skipped set
|
|
118
|
-
`review-spec` is always selected and completed.
|
|
135
|
+
`mode` is `task`, `change`, or `plan`. `worker_selection` contains each member of the
|
|
136
|
+
six-worker roster exactly once with a scope-specific selected or skipped rationale.
|
|
137
|
+
Its selected set equals `workers.completed` plus `workers.failed`; its skipped set
|
|
138
|
+
equals `workers.skipped`. `review-spec` is always selected and completed.
|
|
119
139
|
|
|
120
140
|
The overall verdict is `APPROVE` only when both axes pass, artifacts are complete and
|
|
121
141
|
current, and no P0 or P1 finding remains. Use `REQUEST_CHANGES` for a failed axis or
|
|
@@ -25,6 +25,14 @@ AXIS_VERDICTS = {"PASS", "FAIL", "INCOMPLETE"}
|
|
|
25
25
|
OVERALL_VERDICTS = {"APPROVE", "REQUEST_CHANGES", "INCOMPLETE"}
|
|
26
26
|
REVIEW_MODES = {"task", "change", "plan"}
|
|
27
27
|
SELECTION_STATUSES = {"selected", "skipped"}
|
|
28
|
+
REVIEW_WORKERS = {
|
|
29
|
+
"review-spec",
|
|
30
|
+
"review-code",
|
|
31
|
+
"review-tests",
|
|
32
|
+
"review-errors",
|
|
33
|
+
"review-design",
|
|
34
|
+
"review-comments",
|
|
35
|
+
}
|
|
28
36
|
ARTIFACT_STEM = re.compile(r"^[a-z][a-z0-9-]*$")
|
|
29
37
|
FINDING_FIELDS = {
|
|
30
38
|
"id", "axis", "severity", "category", "title", "file", "line", "trigger",
|
|
@@ -240,6 +248,10 @@ def validate_summary(data):
|
|
|
240
248
|
return "selected workers must equal completed and failed workers"
|
|
241
249
|
if skipped != set(workers["skipped"]):
|
|
242
250
|
return "skipped worker selection must match workers.skipped"
|
|
251
|
+
if seen_workers != REVIEW_WORKERS:
|
|
252
|
+
missing = sorted(REVIEW_WORKERS - seen_workers)
|
|
253
|
+
extra = sorted(seen_workers - REVIEW_WORKERS)
|
|
254
|
+
return f"worker_selection must disposition the complete roster; missing={missing}, extra={extra}"
|
|
243
255
|
if "review-spec" not in selected or "review-spec" not in set(workers["completed"]):
|
|
244
256
|
return "review-spec must be selected and completed"
|
|
245
257
|
findings = data.get("findings")
|