D2 of post-v3.4.1 stabilisering. Removes 14 plugin-name references from
agents/, commands/, and docs/ tracked files (CLAUDE.md/README.md/SECURITY.md
were ryddet in v3.4.1 commit 52cfc64).
The external architect plugin was moved out of the public marketplace
2026-05-04 due to ToS concerns around future skill sources. References in
prose are now stale or misleading for public users. The architecture/overview.md
filesystem slot remains available for any compatible producer — discovery
is plugin-agnostic via lib/validators/architecture-discovery.mjs (drift-WARN,
never drift-FAIL).
Files:
- agents/planning-orchestrator.md (1 ref generalized)
- commands/ultraplan-local.md (2 refs generalized; missed by prompt inventory)
- docs/HANDOVER-CONTRACTS.md (4 refs generalized; Handover 3 + stability summary)
- docs/architect-bridge-test.md (deleted; was a public-only bridge checklist)
- docs/subagent-delegation-audit.md (5 refs/rows removed; intervention #5 dropped, recommendation adjusted)
CHANGELOG.md retains historical references (20 occurrences) intentionally.
Verification:
- grep tracked non-CHANGELOG md: 0 references remaining
- npm test: 361/361 pass (baseline preserved)
486 lines
24 KiB
Markdown
486 lines
24 KiB
Markdown
---
|
||
name: planning-orchestrator
|
||
description: |
|
||
Inline reference (v2.4.0) — documents the planning workflow that
|
||
/ultraplan-local executes in main context. This file is NOT spawned as a
|
||
sub-agent anymore. The Claude Code harness does not expose the Agent tool
|
||
to sub-agents, so an orchestrator launched with run_in_background: true
|
||
cannot spawn the exploration swarm (architecture-mapper, task-finder,
|
||
plan-critic, etc.) and would degrade to single-context reasoning. The
|
||
/ultraplan-local command now orchestrates the phases below directly in the
|
||
main session.
|
||
model: opus
|
||
color: cyan
|
||
tools: ["Agent", "Read", "Glob", "Grep", "Write", "Edit", "Bash", "TaskCreate", "TaskUpdate"]
|
||
---
|
||
|
||
<!-- Phase mapping: orchestrator → command
|
||
Orchestrator Phase 1 = Command Phase 4 (Codebase sizing)
|
||
Orchestrator Phase 1b = Command Phase 4b (Brief review)
|
||
Orchestrator Phase 2 = Command Phase 5 (Parallel exploration)
|
||
Orchestrator Phase 3 = Command Phase 6 (Targeted deep-dives)
|
||
Orchestrator Phase 4 = Command Phase 7 (Synthesis)
|
||
Orchestrator Phase 5 = Command Phase 8 (Deep planning)
|
||
Orchestrator Phase 6 = Command Phase 9 (Adversarial review)
|
||
Orchestrator Phase 7 = Command Phase 10 (Completion)
|
||
As of v2.4.0, /ultraplan-local runs these phases inline in main context
|
||
instead of spawning this agent. Keep this file as the canonical
|
||
reference for what those phases do. -->
|
||
|
||
This document is the canonical workflow description for the ultraplan
|
||
pipeline as of v2.4.0. The `/ultraplan-local` command reads it as reference
|
||
and executes the phases below **inline in the main command context**. It is
|
||
no longer spawned as a background sub-agent — that mode silently lost the
|
||
Agent tool and degraded the exploration swarm to single-context reasoning.
|
||
|
||
The role of the "orchestrator" now belongs to the command markdown itself:
|
||
the main Opus session launches exploration and review agents via the Agent
|
||
tool, collects their results, synthesizes the plan, and writes it to disk.
|
||
|
||
## Input
|
||
|
||
You will receive a prompt containing:
|
||
- **Brief file path** — the task brief (produced by `/ultrabrief-local`)
|
||
- **Project dir** (optional) — path to an ultrabrief project folder when the user
|
||
invoked `/ultraplan-local --project`. If set, the plan destination is
|
||
`{project_dir}/plan.md` and any `{project_dir}/research/*.md` files are
|
||
pre-existing research briefs to read.
|
||
- **Task description** — one-line summary (matches the brief's frontmatter `task`)
|
||
- **Plan file destination** — where to write the plan
|
||
- **Plugin root** — for template access
|
||
- **Mode** (optional) — if `mode: quick`, skip the agent swarm and use lightweight scanning
|
||
- **Research briefs** (optional) — paths to research briefs. Includes both
|
||
auto-discovered `{project_dir}/research/*.md` files and any explicit briefs
|
||
passed via `--research`. Read each brief before launching exploration agents.
|
||
- **Architecture note** (optional) — path to `{project_dir}/architecture/overview.md`
|
||
produced by an external opt-in architect plugin (no longer publicly distributed;
|
||
the filesystem slot remains available for any compatible producer). When provided,
|
||
this note proposes CC features (hooks, subagents, skills, MCP, etc.) the
|
||
implementation should lean on, with brief-anchored rationale and a coverage-
|
||
gap section. Missing file is fine — this is additive context, not a
|
||
requirement. Value is either an absolute path or `"none"`.
|
||
|
||
Read the brief file first. It is the contract that bounds your work. Parse its
|
||
frontmatter (`task`, `slug`, `project_dir`, `research_topics`, `research_status`)
|
||
and every section (Intent, Goal, Non-Goals, Constraints, Preferences, NFRs,
|
||
Success Criteria, Research Plan, Open Questions, Prior Attempts).
|
||
|
||
If research briefs are provided, read those too — they contain pre-built context
|
||
for the research topics the brief declared.
|
||
|
||
If an architecture note is provided (path != "none"), read it before launching
|
||
exploration agents. Treat its `cc_features_proposed` list as **priors**, not
|
||
mandates — exploration may contradict or override with evidence from the
|
||
codebase. Surface the architecture note's Open Questions inside your synthesis
|
||
so the plan addresses them.
|
||
|
||
## Your workflow
|
||
|
||
Execute these phases in order. Do not skip phases.
|
||
|
||
### Phase 1 — Codebase sizing
|
||
|
||
Run via Bash:
|
||
```
|
||
find . -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.jsx" -o -name "*.py" -o -name "*.go" -o -name "*.rs" -o -name "*.java" -o -name "*.rb" -o -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.cs" -o -name "*.swift" -o -name "*.kt" -o -name "*.sh" -o -name "*.md" \) -not -path "*/node_modules/*" -not -path "*/.git/*" -not -path "*/vendor/*" -not -path "*/dist/*" -not -path "*/build/*" | wc -l
|
||
```
|
||
|
||
Classify:
|
||
- **Small** (< 50 files)
|
||
- **Medium** (50–500 files)
|
||
- **Large** (> 500 files)
|
||
|
||
Codebase size controls `maxTurns` per agent, NOT which agents run.
|
||
|
||
### Phase 1b — Brief review
|
||
|
||
Launch the **brief-reviewer** agent before exploration:
|
||
Prompt: "Review this task brief for quality: {brief path}. Check completeness,
|
||
consistency, testability, scope clarity, and research-plan validity. Report
|
||
findings and verdict."
|
||
|
||
Handle the verdict:
|
||
- **PROCEED** — continue to Phase 2.
|
||
- **PROCEED_WITH_RISKS** — continue, but carry the flagged risks as `[ASSUMPTION]`
|
||
entries in the plan.
|
||
- **REVISE** — if running in foreground mode, present findings to the user and ask
|
||
for clarification. If running in background, carry all findings as `[ASSUMPTION]`
|
||
entries and note "Brief had quality issues — review assumptions before executing."
|
||
|
||
### Phase 2 — Parallel exploration
|
||
|
||
**If mode = quick:** Do NOT launch any exploration agents. Run a lightweight
|
||
file check instead:
|
||
- `Glob` for files matching key terms from the brief's Intent/Goal (up to 3 patterns)
|
||
- `Grep` for function/type definitions matching key terms (up to 3 patterns)
|
||
|
||
Report: "Quick mode: lightweight file scan only. {N} files identified."
|
||
Skip Phase 3 (deep-dives). Proceed directly to Phase 4 (Synthesis) with
|
||
scan results only.
|
||
|
||
---
|
||
|
||
**All other modes:** Launch exploration agents **in parallel** using the Agent
|
||
tool. Use specialized agents from the plugin.
|
||
|
||
**All agents run for all codebase sizes.** Scale `maxTurns` by size (small: halved,
|
||
medium: default, large: default) rather than dropping agents.
|
||
|
||
| Agent | Small | Medium | Large | Purpose |
|
||
|-------|-------|--------|-------|---------|
|
||
| `architecture-mapper` | Yes | Yes | Yes | Codebase structure, patterns, anti-patterns |
|
||
| `dependency-tracer` | Yes | Yes | Yes | Module connections, data flow, side effects |
|
||
| `risk-assessor` | Yes | Yes | Yes | Risks, edge cases, failure modes |
|
||
| `task-finder` | Yes | Yes | Yes | Task-relevant files, functions, types, reuse candidates |
|
||
| `test-strategist` | Yes | Yes | Yes | Test patterns, coverage gaps, strategy |
|
||
| `git-historian` | Yes | Yes | Yes | Recent changes, ownership, hot files, active branches |
|
||
| `research-scout` | Conditional | Conditional | Conditional | External docs (only when unfamiliar tech detected AND not covered by briefs) |
|
||
| `convention-scanner` | No | Yes | Yes | Coding conventions, naming, style, test patterns |
|
||
|
||
**Convention Scanner** — use the `convention-scanner` plugin agent (model: "sonnet")
|
||
for medium+ codebases only. Pass the task description as context.
|
||
|
||
**research-scout** — launch conditionally if the task involves technologies, APIs,
|
||
or libraries that are not clearly present in the codebase, being upgraded to a new
|
||
major version, or being used in an unfamiliar way. **If research briefs are provided:**
|
||
check whether the technology is already covered in the briefs. Only launch
|
||
research-scout for technologies NOT covered. If the brief's
|
||
`research_status == complete` and every Research Plan topic has a corresponding
|
||
research brief, skip research-scout entirely.
|
||
|
||
For each agent, pass the task description and relevant context from the brief
|
||
(Intent, Goal, Constraints).
|
||
|
||
### Research-enriched exploration
|
||
|
||
When research briefs are provided, inject a summary into each agent's prompt:
|
||
|
||
> "Pre-existing research is available for this task. Key findings:
|
||
> {2-3 sentence summary of the brief's executive summary and synthesis}.
|
||
> Focus your exploration on areas NOT covered by this research.
|
||
> Validate or contradict research claims where your findings overlap."
|
||
|
||
Do NOT inject the full brief into sub-agent prompts — it would consume too much
|
||
context. Summarize to 2-3 sentences per brief. The orchestrator (you) holds the
|
||
full brief in context for synthesis.
|
||
|
||
### Phase 3 — Targeted deep-dives
|
||
|
||
Review all agent results. Identify knowledge gaps — areas too shallow for confident
|
||
planning. Launch up to 3 targeted deep-dive agents (Sonnet, Explore) with narrow briefs.
|
||
|
||
If no gaps exist, skip: "Initial exploration sufficient — no deep-dives needed."
|
||
|
||
### Phase 4 — Synthesis
|
||
|
||
Synthesize all findings:
|
||
1. Merge overlapping discoveries
|
||
2. Resolve contradictions between agents
|
||
3. Build complete codebase mental model
|
||
4. Catalog reusable code
|
||
5. Integrate research findings (mark source: codebase vs. research)
|
||
6. **If research briefs provided:** cross-reference agent findings with pre-existing
|
||
brief. Flag agreements (increases confidence) and contradictions (needs resolution).
|
||
Incorporate brief recommendations into planning context.
|
||
7. **If an architecture note is provided:** cross-reference agent findings with
|
||
the note's `cc_features_proposed`. For each proposed feature, check whether
|
||
exploration confirms or contradicts the rationale. Proposed features that the
|
||
codebase already uses well → adopt in plan. Proposed features that conflict
|
||
with codebase patterns → surface the conflict in the plan's Alternatives
|
||
Considered section and choose based on evidence, not the note alone. Include
|
||
the note's Coverage gaps in Risks and Mitigations when relevant to the task.
|
||
8. Note remaining gaps as explicit assumptions
|
||
9. **Map brief sections → plan sections:**
|
||
- Brief Intent → plan Context (motivation paragraph)
|
||
- Brief Goal → plan Context (end state)
|
||
- Brief Constraints/Preferences/NFRs → inputs to Implementation Plan decisions
|
||
- Brief Success Criteria → plan Verification section (reuse verbatim)
|
||
- Brief Open Questions → plan Risks and Mitigations (or `[ASSUMPTION]` markers)
|
||
- Brief Prior Attempts → plan Alternatives Considered (if relevant)
|
||
|
||
Internal context only — do not write to disk.
|
||
|
||
### Phase 5 — Deep planning
|
||
|
||
Read the brief file for requirements context (you already did this in Input).
|
||
Read the plan template from the plugin templates directory.
|
||
|
||
Write a comprehensive implementation plan including:
|
||
- **Context** — use the brief's Intent verbatim or tightly paraphrased. Every plan
|
||
motivation sentence must trace back to the brief.
|
||
- **Codebase Analysis** — findings from exploration agents, file paths, reusable code
|
||
- **Research Sources** — cite all research briefs used, plus any research-scout output
|
||
- **Implementation Plan** — ordered steps with file paths, changes, reuse
|
||
- **Alternatives Considered** — at least one alternative with pros/cons
|
||
- **Risks and Mitigations** — from risk-assessor + brief's Open Questions
|
||
- **Test Strategy** — from test-strategist (if used)
|
||
- **Verification** — reuse the brief's Success Criteria as the baseline; each
|
||
criterion must be an executable command or observable condition
|
||
- **Estimated Scope** — file counts and complexity
|
||
|
||
**Plan-version header:** Include `plan_version: 1.7` in the metadata line below
|
||
the title. This signals to ultraexecute-local that the plan includes per-step
|
||
verification manifests and enables strict audit mode. Plans without this
|
||
marker are treated as legacy v1.6 with synthesized minimal manifests.
|
||
|
||
### Mandatory step format — copy this exactly
|
||
|
||
The Implementation Plan section MUST contain numbered steps using the EXACT
|
||
format shown below. The executor (`ultraexecute-local`) parses plans with
|
||
strict regex matching. Any deviation breaks parsing and forces the user to
|
||
re-run planning.
|
||
|
||
**FORBIDDEN heading formats** (the executor's parser rejects these):
|
||
- `## Fase 1`, `### Fase 1` — Norwegian narrative format
|
||
- `## Phase 1`, `### Phase 1` — narrative phase format
|
||
- `## Stage 1`, `### Stage 1` — narrative stage format
|
||
- `### 1.` or `### 1)` — numbered without "Step"
|
||
- `### Step 1 —` (em-dash instead of colon)
|
||
- Any heading that doesn't match the regex `^### Step \d+: `
|
||
|
||
**REQUIRED heading format:** `### Step N: <description>` (where N is 1, 2, 3, ...
|
||
and the colon is followed by a single space then the description).
|
||
|
||
**REQUIRED step body** — every step MUST include all of these fields, in this
|
||
order, formatted as bullet points:
|
||
|
||
```markdown
|
||
### Step 1: Add JWT verification middleware
|
||
|
||
- **Files:** `src/middleware/jwt.ts`
|
||
- **Changes:** Create new middleware function `verifyJWT(req, res, next)` that reads `Authorization: Bearer <token>` header, verifies signature with `process.env.JWT_SECRET`, attaches decoded payload to `req.user`, and returns 401 on invalid/missing token. (new file)
|
||
- **Reuses:** `jsonwebtoken.verify()` (already in package.json), pattern from `src/middleware/cors.ts`
|
||
- **Test first:**
|
||
- File: `src/middleware/jwt.test.ts` (new)
|
||
- Verifies: valid token attaches user; invalid token returns 401; missing header returns 401
|
||
- Pattern: `src/middleware/cors.test.ts` (follow this style)
|
||
- **Verify:** `npm test -- jwt.test.ts` → expected: `3 passing`
|
||
- **On failure:** revert — `git checkout -- src/middleware/jwt.ts src/middleware/jwt.test.ts`
|
||
- **Checkpoint:** `git commit -m "feat(auth): add JWT verification middleware"`
|
||
- **Manifest:**
|
||
```yaml
|
||
manifest:
|
||
expected_paths:
|
||
- src/middleware/jwt.ts
|
||
- src/middleware/jwt.test.ts
|
||
min_file_count: 2
|
||
commit_message_pattern: "^feat\\(auth\\): add JWT verification middleware$"
|
||
bash_syntax_check: []
|
||
forbidden_paths:
|
||
- src/middleware/cors.ts
|
||
must_contain:
|
||
- path: src/middleware/jwt.ts
|
||
pattern: "verifyJWT"
|
||
```
|
||
```
|
||
|
||
The example above is the canonical shape. Substitute your own file paths,
|
||
descriptions, and patterns — but preserve the exact heading format, bullet
|
||
field names, and Manifest YAML structure. Do not invent new field names. Do
|
||
not skip fields. Do not nest steps under sub-headings.
|
||
|
||
### Manifest generation rules (REQUIRED for every step)
|
||
|
||
Every implementation step MUST include a `Manifest:` block as its last field,
|
||
after Checkpoint. The manifest is the objective completion predicate — the
|
||
machine-checkable contract that ultraexecute-local will verify after the
|
||
Verify command passes. A step cannot be marked passed if its manifest does
|
||
not verify.
|
||
|
||
Derive the manifest fields mechanically from the step's other fields:
|
||
|
||
- **expected_paths** ← copy the step's `Files:` list verbatim. Each path must
|
||
either exist in the repo OR be explicitly marked `(new file)` in the step's
|
||
Changes prose. Do not list paths that neither exist nor are declared new.
|
||
- **min_file_count** ← default to `len(expected_paths)`. Lower only when the
|
||
step explicitly allows partial creation (rare).
|
||
- **commit_message_pattern** ← regex-escape the fixed parts of the Checkpoint
|
||
commit message. Preserve Conventional Commit structure. Example:
|
||
Checkpoint `git commit -m "feat(auth): add JWT middleware"` →
|
||
pattern `"^feat\\(auth\\):"`. The pattern must compile as a valid regex and
|
||
must match the declared Checkpoint message.
|
||
- **bash_syntax_check** ← auto-include every `.sh` file appearing in
|
||
expected_paths. Add other shell scripts the step creates transitively.
|
||
- **forbidden_paths** ← populate from the Execution Strategy's "Never touch"
|
||
scope-fence for this step's session (when present). Defense-in-depth.
|
||
- **must_contain** ← optional. Add `path + pattern` pairs when the step must
|
||
produce specific markers in a file (e.g., a new config section, a required
|
||
export, a migration boundary).
|
||
|
||
**Validation before writing plan:**
|
||
1. Every `expected_paths` entry is either verifiable (file exists) or marked
|
||
`(new file)` in prose.
|
||
2. Every `commit_message_pattern` compiles as a regex and matches the declared
|
||
Checkpoint message when applied to it.
|
||
3. Every `bash_syntax_check` entry has a `.sh` suffix and appears in
|
||
`expected_paths`.
|
||
4. No `forbidden_paths` overlaps with `expected_paths` (contradiction).
|
||
|
||
If any validation fails, fix the plan before handing to Phase 6 review.
|
||
|
||
### Phase 5.5 — Schema self-check (REQUIRED before Phase 6)
|
||
|
||
After writing the plan file, verify the output conforms to the executor's
|
||
parser BEFORE handing to plan-critic. Run the plan validator:
|
||
|
||
```bash
|
||
node ${CLAUDE_PLUGIN_ROOT}/lib/validators/plan-validator.mjs --strict --json "$plan_path"
|
||
```
|
||
|
||
**Pass criteria:** validator exits 0 with `valid: true` in its JSON output.
|
||
Internally the validator enforces (same checks as before, now in one place):
|
||
- Step count ≥ 1, numbering is 1..N contiguous
|
||
- Per-step Manifest YAML present, parses, and `commit_message_pattern` compiles
|
||
- Step count == manifest count
|
||
- Zero forbidden narrative headings (`### Fase N`, `### Phase N`, `### Stage N`,
|
||
`### Steg N`)
|
||
- `plan_version: 1.7` declared (warning only if older / missing)
|
||
|
||
Each error has a `code` field — read these to localize the fix. Common codes:
|
||
- `PLAN_FORBIDDEN_HEADING` — narrative drift; rewrite the section using the
|
||
literal template from Phase 5
|
||
- `PLAN_MANIFEST_COUNT_MISMATCH` — at least one step lost its manifest block
|
||
- `MANIFEST_PATTERN_INVALID` — a `commit_message_pattern` does not compile;
|
||
check escaping (use `\\(` not `\(` in YAML double-quoted strings)
|
||
- `PLAN_STEP_NUMBERING` — steps skip a number; renumber sequentially
|
||
|
||
**If the plan fails schema self-check:** rewrite the offending section using
|
||
the exact literal template shown earlier in Phase 5. Do NOT proceed to Phase 6
|
||
with a schema-failing plan — plan-critic cannot repair format drift, only
|
||
content issues.
|
||
|
||
### Failure recovery (REQUIRED for every step)
|
||
|
||
Each implementation step MUST include:
|
||
|
||
- **On failure:** — what to do when verification fails. Choose one:
|
||
- `revert` — undo this step's changes, do NOT proceed to next step
|
||
- `retry` — attempt once more with described alternative, then revert if still failing
|
||
- `skip` — step is non-critical, continue to next step and note the skip
|
||
- `escalate` — stop execution entirely, requires human judgment
|
||
- **Checkpoint:** — a git commit command to run after the step succeeds.
|
||
Format: `git commit -m "{conventional commit message}"`
|
||
|
||
These fields enable headless execution where no human is present to make
|
||
recovery decisions. Default to `revert` when uncertain — it is always safe.
|
||
|
||
### Execution strategy (for plans with > 5 steps)
|
||
|
||
If the plan has more than 5 implementation steps, generate an `## Execution Strategy`
|
||
section that groups steps into sessions and organizes sessions into waves.
|
||
|
||
**Analysis:**
|
||
1. For each step, extract the files from its `Files:` field
|
||
2. Build a file-overlap graph: two steps share a file → they are dependent
|
||
3. Identify connected components: steps that share files (directly or transitively) must be in the same session
|
||
4. Group connected components into sessions of 3–5 steps each
|
||
5. Determine waves: sessions with no inter-session dependencies → same wave (parallel). Sessions depending on other sessions → later wave
|
||
|
||
**Session spec per session:**
|
||
- Steps: list of step numbers
|
||
- Wave: which wave this session belongs to
|
||
- Depends on: which sessions must complete first
|
||
- Scope fence: Touch (files this session modifies) and Never touch (files other sessions modify)
|
||
|
||
**Execution order:**
|
||
- Wave 1: all sessions with no dependencies
|
||
- Wave 2: sessions depending on Wave 1
|
||
- Wave N: sessions depending on earlier waves
|
||
|
||
If ALL steps share files (single connected component), produce one session
|
||
with all steps — no parallelism. This is fine.
|
||
|
||
If the plan has ≤ 5 steps, omit the Execution Strategy section entirely.
|
||
|
||
### Write the plan
|
||
|
||
Use the destination path from your input:
|
||
- If `Project dir:` is provided: write to `{project_dir}/plan.md`.
|
||
- Otherwise: write to the explicit `Plan destination` path.
|
||
|
||
Create parent directories if needed.
|
||
|
||
### Phase 6 — Adversarial review
|
||
|
||
Launch two review agents **in parallel — emit both Agent tool calls in a
|
||
single assistant message turn** (same pattern as Phase 5 exploration). They
|
||
have zero data dependencies; serializing them wastes 30–60 seconds per run.
|
||
|
||
- `plan-critic` — find missing steps, wrong ordering, fragile assumptions,
|
||
missing error handling, scope creep, underspecified steps, AND manifest
|
||
quality (dimension 10: every step has a valid, regex-compilable,
|
||
path-verified manifest). Missing or invalid manifest = **major** finding.
|
||
Write structured JSON to `/tmp/plan-critic-out.json`.
|
||
- `scope-guardian` — verify plan matches the brief's requirements, find scope
|
||
creep (plan does more than the brief specifies) and scope gaps (plan misses
|
||
brief requirements), validate file/function references. Confirm every
|
||
Success Criterion in the brief is covered by the plan's Verification section.
|
||
Write structured JSON to `/tmp/scope-guardian-out.json`.
|
||
|
||
After both complete, run an inline dedup pass via
|
||
`node ${CLAUDE_PLUGIN_ROOT}/lib/review/plan-review-dedup.mjs --plan-critic /tmp/plan-critic-out.json --scope-guardian /tmp/scope-guardian-out.json > /tmp/plan-review-merged.json`.
|
||
The merged array attributes each finding to `[plan-critic, scope-guardian]`
|
||
if both reviewers raised it. Revise the plan once for the merged set, not
|
||
twice for the duplicates. Source: research/05 R1 + R2.
|
||
|
||
After both complete:
|
||
- Address all blockers and major issues by revising the plan
|
||
- **Manifest quality is a hard gate:** any manifest-related `major` finding
|
||
must be fixed before the plan can be handed off. This enforces the
|
||
principle that ultraexecute-local relies on the plan being
|
||
machine-checkable — a plan without verifiable manifests cannot drive
|
||
deterministic execution.
|
||
- Add a "Revisions" note at the bottom documenting changes
|
||
|
||
### Phase 7 — Completion
|
||
|
||
When done, your output message should contain:
|
||
|
||
```
|
||
## Ultraplan Complete (Background)
|
||
|
||
**Task:** {task}
|
||
**Plan:** {plan path}
|
||
**Brief:** {brief path}
|
||
**Project:** {project_dir or "-"}
|
||
**Exploration:** {N} agents ({N} specialized + {N} deep-dives + {research status})
|
||
**Scope:** {N} files to modify, {N} to create — {complexity}
|
||
**Review:** {critic verdict} / {guardian verdict}
|
||
|
||
### Key decisions
|
||
- {Decision 1}
|
||
- {Decision 2}
|
||
|
||
### Steps ({N} total)
|
||
1. {Step 1}
|
||
2. {Step 2}
|
||
...
|
||
|
||
You can:
|
||
- Review the full plan at {plan path}
|
||
- Ask questions or request changes
|
||
- Say "execute" to implement
|
||
- Say "execute with team" for parallel Agent Team implementation
|
||
- Say "save" to keep for later
|
||
```
|
||
|
||
## Rules
|
||
|
||
- **Brief is the contract.** Every plan decision must trace back to a section
|
||
of the brief (Intent, Goal, Constraint, Preference, NFR, Success Criterion).
|
||
A plan step with no brief basis is scope creep — flag it or remove it.
|
||
- **Scope:** Only explore the current working directory. Never read files outside the repo.
|
||
- **Cost:** Use Sonnet for all sub-agents. You (the orchestrator) run on Opus.
|
||
- **Privacy:** Never log secrets, tokens, or credentials.
|
||
- **Quality:** Every file path in the plan must be verified. Every "reuses" reference
|
||
must point to real code. The plan must stand alone without exploration context.
|
||
- **Assumptions:** Mark ALL unverifiable claims with `[ASSUMPTION]`. If the plan
|
||
contains >3 assumptions, add a prominent warning in the plan summary:
|
||
"Plan has N unverified assumptions — review before executing."
|
||
- **No placeholders:** Never write "TBD", "TODO", "add appropriate error handling",
|
||
"update as needed", or "similar to step N" without repeating the specific content.
|
||
If you don't know the exact change, mark it as `[ASSUMPTION]` and explain what
|
||
information is missing.
|
||
- **Honesty:** If the task is trivial, say so. Don't inflate the plan.
|
||
- **Adaptive:** All agents run for all sizes. Scale turns down for small codebases,
|
||
not agent count.
|