|
|
|
@@ -133,6 +133,15 @@ a ledger file, not only in todos.
|
|
|
|
plan's progress: leave it in place and start your own, fresh.
|
|
|
|
plan's progress: leave it in place and start your own, fresh.
|
|
|
|
- Create the ledger with its identity as the first line:
|
|
|
|
- Create the ledger with its identity as the first line:
|
|
|
|
`# SDD ledger — plan: <plan file path>`.
|
|
|
|
`# SDD ledger — plan: <plan file path>`.
|
|
|
|
|
|
|
|
- During that same Setup read, copy the plan's Global Constraints section
|
|
|
|
|
|
|
|
verbatim into `<workspace>/constraints.md`. Every dispatch's binding
|
|
|
|
|
|
|
|
constraint values paste from that file — the plan itself stays closed
|
|
|
|
|
|
|
|
after Setup, even across compaction.
|
|
|
|
|
|
|
|
- The workspace is never committed to the project repo. Do not `git add`
|
|
|
|
|
|
|
|
anything under it, and never write a commit whose purpose is to record,
|
|
|
|
|
|
|
|
correct, or tidy a workspace artifact — reports and ledgers are session
|
|
|
|
|
|
|
|
records, not deliverables. If the repo lacks a `.gitignore` entry for
|
|
|
|
|
|
|
|
`.superpowers/`, leave the directory untracked rather than committing it.
|
|
|
|
- The ledger is your recovery map: the commits it names exist in git even
|
|
|
|
- The ledger is your recovery map: the commits it names exist in git even
|
|
|
|
when your context no longer remembers creating them. After compaction,
|
|
|
|
when your context no longer remembers creating them. After compaction,
|
|
|
|
trust the ledger and `git log` over your own recollection.
|
|
|
|
trust the ledger and `git log` over your own recollection.
|
|
|
|
@@ -140,7 +149,11 @@ a ledger file, not only in todos.
|
|
|
|
that happens, recover from `git log`.
|
|
|
|
that happens, recover from `git log`.
|
|
|
|
|
|
|
|
|
|
|
|
Read the plan once, note its context and Global Constraints, and create a
|
|
|
|
Read the plan once, note its context and Global Constraints, and create a
|
|
|
|
todo per task.
|
|
|
|
todo per task. That is the plan's one full read for the whole session:
|
|
|
|
|
|
|
|
after Setup, the ledger and `scripts/task-brief` extracts are your working
|
|
|
|
|
|
|
|
memory — re-reading the plan or spec late in the run (to "double-check"
|
|
|
|
|
|
|
|
completion, to rebuild the final-review dispatch) re-buys context you
|
|
|
|
|
|
|
|
already paid for and is forbidden.
|
|
|
|
|
|
|
|
|
|
|
|
Before dispatching Task 1, scan the plan once for conflicts:
|
|
|
|
Before dispatching Task 1, scan the plan once for conflicts:
|
|
|
|
|
|
|
|
|
|
|
|
@@ -195,7 +208,10 @@ that implementer. Single-file mechanical fixes also take the cheapest tier.
|
|
|
|
|
|
|
|
|
|
|
|
Everything you paste into a dispatch prompt — and everything a subagent
|
|
|
|
Everything you paste into a dispatch prompt — and everything a subagent
|
|
|
|
prints back — stays resident in your context for the rest of the session
|
|
|
|
prints back — stays resident in your context for the rest of the session
|
|
|
|
and is re-read on every later turn. Hand artifacts over as files.
|
|
|
|
and is re-read on every later turn. Hand artifacts over as files. The same
|
|
|
|
|
|
|
|
tax applies to your own words: checkpoint in one short line, keep
|
|
|
|
|
|
|
|
bookkeeping in the ledger file, and never paste back into the conversation
|
|
|
|
|
|
|
|
what a file already holds.
|
|
|
|
|
|
|
|
|
|
|
|
### 1. Dispatch the implementer
|
|
|
|
### 1. Dispatch the implementer
|
|
|
|
|
|
|
|
|
|
|
|
@@ -211,9 +227,15 @@ and fix-round diffs need it.
|
|
|
|
first — it is your requirements, with the exact values to use verbatim";
|
|
|
|
first — it is your requirements, with the exact values to use verbatim";
|
|
|
|
(3) interfaces and decisions from earlier tasks that the brief cannot
|
|
|
|
(3) interfaces and decisions from earlier tasks that the brief cannot
|
|
|
|
know; (4) your resolution of any ambiguity you noticed in the brief;
|
|
|
|
know; (4) your resolution of any ambiguity you noticed in the brief;
|
|
|
|
(5) the report-file path and report contract. Exact values (numbers,
|
|
|
|
(5) the report-file path and report contract; (6) the plan's binding
|
|
|
|
magic strings, signatures, test cases) appear only in the brief. Never
|
|
|
|
constraint values — any Global Constraint that mandates an exact
|
|
|
|
make a subagent read the whole plan file.
|
|
|
|
mechanical form (commit-message rules, naming rules, fixed literals) —
|
|
|
|
|
|
|
|
pasted verbatim. Task-specific exact values (numbers, magic strings,
|
|
|
|
|
|
|
|
signatures, test cases) appear only in the brief; binding constraint
|
|
|
|
|
|
|
|
values are the one exception — they ride in EVERY dispatch, because a
|
|
|
|
|
|
|
|
subagent that must recall a constraint from memory will reconstruct it
|
|
|
|
|
|
|
|
from its own priors instead. Never make a subagent read the whole plan
|
|
|
|
|
|
|
|
file.
|
|
|
|
- **Report file:** name the implementer's report file after the brief
|
|
|
|
- **Report file:** name the implementer's report file after the brief
|
|
|
|
(brief `…/task-N-brief.md` → report `…/task-N-report.md`) and put it in
|
|
|
|
(brief `…/task-N-brief.md` → report `…/task-N-report.md`) and put it in
|
|
|
|
the dispatch prompt. The implementer writes the full report there and
|
|
|
|
the dispatch prompt. The implementer writes the full report there and
|
|
|
|
@@ -273,6 +295,10 @@ needed.
|
|
|
|
- **Reviewer inputs:** the task reviewer gets three paths — the same brief
|
|
|
|
- **Reviewer inputs:** the task reviewer gets three paths — the same brief
|
|
|
|
file, the report file, and the review package — plus the global
|
|
|
|
file, the report file, and the review package — plus the global
|
|
|
|
constraints that bind the task.
|
|
|
|
constraints that bind the task.
|
|
|
|
|
|
|
|
- **Persist the verdict:** when the review returns, write its full text to
|
|
|
|
|
|
|
|
`<workspace>/task-<N>-review.md` before acting on it. The file is the
|
|
|
|
|
|
|
|
gate: completion checks for the artifact, not for your memory of a
|
|
|
|
|
|
|
|
verdict.
|
|
|
|
- The global-constraints block you hand the reviewer is its attention
|
|
|
|
- The global-constraints block you hand the reviewer is its attention
|
|
|
|
lens. Copy the binding requirements verbatim from the plan's Global
|
|
|
|
lens. Copy the binding requirements verbatim from the plan's Global
|
|
|
|
Constraints section or the spec: exact values, exact formats, and the
|
|
|
|
Constraints section or the spec: exact values, exact formats, and the
|
|
|
|
@@ -323,22 +349,26 @@ scoped re-review. Five rounds maximum per task:
|
|
|
|
verbatim. Its context is intact: it knows the task, the code, and its own
|
|
|
|
verbatim. Its context is intact: it knows the task, the code, and its own
|
|
|
|
choices. If your harness cannot send another message to a live subagent,
|
|
|
|
choices. If your harness cannot send another message to a live subagent,
|
|
|
|
dispatch a fresh implementer carrying the brief path, the report-file path,
|
|
|
|
dispatch a fresh implementer carrying the brief path, the report-file path,
|
|
|
|
and the findings — the report file is the persistent memory either way.
|
|
|
|
the findings, and the binding constraint values verbatim — the report file
|
|
|
|
|
|
|
|
is the persistent memory either way.
|
|
|
|
|
|
|
|
|
|
|
|
**Rounds 4-5 — dispatch a fresh implementer on a more capable model** (per
|
|
|
|
**Rounds 4-5 — dispatch a fresh implementer on a more capable model** (per
|
|
|
|
Model Selection), with the brief path, the report-file path, the open
|
|
|
|
Model Selection), with the brief path, the report-file path, the open
|
|
|
|
findings, and this framing: "A prior implementer attempted this task
|
|
|
|
findings, the binding constraint values verbatim, and this framing: "A
|
|
|
|
[N] times; you own it now. Read the report file for what was tried." A loop
|
|
|
|
prior implementer attempted this task [N] times; you own it now. Read the
|
|
|
|
that survives three resumes usually means the implementer cannot see its
|
|
|
|
report file for what was tried." A loop that survives three resumes usually
|
|
|
|
own problem — fresh eyes and a capability bump in one move.
|
|
|
|
means the implementer cannot see its own problem — fresh eyes and a
|
|
|
|
|
|
|
|
capability bump in one move.
|
|
|
|
|
|
|
|
|
|
|
|
**Every round, either way:** the implementer fixes, re-runs the tests
|
|
|
|
**Every round, either way:** the implementer fixes, re-runs the tests
|
|
|
|
covering the amended code, appends its fix report to the same report file,
|
|
|
|
covering the amended code, appends its fix report to the same report file,
|
|
|
|
and returns the short contract. Before re-dispatching the reviewer, confirm
|
|
|
|
and returns the short contract. Before re-dispatching the reviewer, confirm
|
|
|
|
the fix report contains the covering tests, the command run, and the
|
|
|
|
the fix report contains the covering tests, the command run, and the output;
|
|
|
|
output; dispatch the re-review once all three are present. Name the
|
|
|
|
dispatch the re-review once all three are present. Name the covering test
|
|
|
|
covering test files in the fix message — a one-line fix does not need the
|
|
|
|
files in the fix message — a one-line fix does not need the whole suite.
|
|
|
|
whole suite.
|
|
|
|
Append the re-review's returned text to `<workspace>/task-<N>-review.md` as
|
|
|
|
|
|
|
|
well — the artifact accumulates every verdict, and the file's last entry is
|
|
|
|
|
|
|
|
the one completion relies on.
|
|
|
|
|
|
|
|
|
|
|
|
**The re-review is scoped.** Run `scripts/review-package PLAN_FILE FIX_BASE HEAD`
|
|
|
|
**The re-review is scoped.** Run `scripts/review-package PLAN_FILE FIX_BASE HEAD`
|
|
|
|
where FIX_BASE is the head the previous review saw, and dispatch
|
|
|
|
where FIX_BASE is the head the previous review saw, and dispatch
|
|
|
|
@@ -383,10 +413,20 @@ message as your other bookkeeping:
|
|
|
|
- `Task <N>: complete (commits <base7>..<head7>, review clean)`
|
|
|
|
- `Task <N>: complete (commits <base7>..<head7>, review clean)`
|
|
|
|
- `Task <N>: complete (commits <base7>..<head7>, <K> parked)` after a
|
|
|
|
- `Task <N>: complete (commits <base7>..<head7>, <K> parked)` after a
|
|
|
|
tripped breaker
|
|
|
|
tripped breaker
|
|
|
|
|
|
|
|
- `Task <N>: complete (commits <base7>..<head7>, deviation parked: <rule>)`
|
|
|
|
|
|
|
|
when a landed commit violates a mechanical constraint that nothing
|
|
|
|
|
|
|
|
downstream builds on. Record the ruling in the ledger. A green build with
|
|
|
|
|
|
|
|
a parked, recorded deviation is complete — do not fail the task, and do
|
|
|
|
|
|
|
|
not rewrite landed history to chase cosmetics. A load-bearing violation
|
|
|
|
|
|
|
|
is different: that is a BLOCKED, not a deviation. This valve is not the
|
|
|
|
|
|
|
|
breaker: it needs no exhausted fix rounds — a mechanical deviation
|
|
|
|
|
|
|
|
discovered at completion parks here directly, with its ruling in the ledger.
|
|
|
|
|
|
|
|
|
|
|
|
Then mark the todo complete and move on. Never move to the next task while
|
|
|
|
Then mark the todo complete and move on — but only once
|
|
|
|
the review has open Critical/Important issues that are neither fixed nor
|
|
|
|
`<workspace>/task-<N>-review.md` exists; a completion line without its review
|
|
|
|
parked-with-ruling at the cap.
|
|
|
|
artifact is invalid, whatever you remember about the review. Never move to
|
|
|
|
|
|
|
|
the next task while the review has open Critical/Important issues that are
|
|
|
|
|
|
|
|
neither fixed nor parked-with-ruling at the cap.
|
|
|
|
|
|
|
|
|
|
|
|
## Final Review
|
|
|
|
## Final Review
|
|
|
|
|
|
|
|
|
|
|
|
@@ -399,17 +439,25 @@ on the most capable available model (see Model Selection), using
|
|
|
|
superpowers:requesting-code-review's
|
|
|
|
superpowers:requesting-code-review's
|
|
|
|
[code-reviewer.md](../requesting-code-review/code-reviewer.md). Point it at
|
|
|
|
[code-reviewer.md](../requesting-code-review/code-reviewer.md). Point it at
|
|
|
|
the ledger's deferred-minor and parked lines so it can triage which must be
|
|
|
|
the ledger's deferred-minor and parked lines so it can triage which must be
|
|
|
|
fixed before merge.
|
|
|
|
fixed before merge. Build that dispatch from the ledger alone — the
|
|
|
|
|
|
|
|
completion lines, parked rulings, and deferred minors are the whole-run
|
|
|
|
|
|
|
|
summary; do not re-read the plan, the spec, or per-task reports to
|
|
|
|
|
|
|
|
reconstruct what the ledger already states. Write the returned review to
|
|
|
|
|
|
|
|
`<workspace>/final-review.md` before dispatching any fix wave — the merge
|
|
|
|
|
|
|
|
decision cites the artifact, not a recollection.
|
|
|
|
|
|
|
|
|
|
|
|
If the final whole-branch review returns findings, dispatch ONE fix subagent
|
|
|
|
If the final whole-branch review returns findings, dispatch ONE fix subagent
|
|
|
|
with the complete findings list — not one fixer per finding.
|
|
|
|
with the complete findings list and the binding constraint values
|
|
|
|
|
|
|
|
verbatim — not one fixer per finding.
|
|
|
|
Per-finding fixers each rebuild context and re-run suites; a real
|
|
|
|
Per-finding fixers each rebuild context and re-run suites; a real
|
|
|
|
session's final-review fix wave cost more than all its tasks combined.
|
|
|
|
session's final-review fix wave cost more than all its tasks combined.
|
|
|
|
Then run exactly one scoped re-review of the fix wave
|
|
|
|
Then run exactly one scoped re-review of the fix wave
|
|
|
|
(`scripts/review-package PLAN_FILE FIX_BASE HEAD` over the fix range,
|
|
|
|
(`scripts/review-package PLAN_FILE FIX_BASE HEAD` over the fix range,
|
|
|
|
[re-review-prompt.md](re-review-prompt.md)).
|
|
|
|
[re-review-prompt.md](re-review-prompt.md)).
|
|
|
|
Adjudicate any residual findings as in the task loop's breaker: park with
|
|
|
|
Adjudicate any residual findings as in the task loop's breaker: park with
|
|
|
|
rulings, or stop on load-bearing ones. There is no second fix wave —
|
|
|
|
rulings, or stop on load-bearing ones. The same valve applies to
|
|
|
|
|
|
|
|
mechanical-constraint misses discovered at the end: non-load-bearing means
|
|
|
|
|
|
|
|
parked with a ruling, not a failed branch. There is no second fix wave —
|
|
|
|
residual load-bearing findings surface to your human partner when
|
|
|
|
residual load-bearing findings surface to your human partner when
|
|
|
|
finishing-a-development-branch presents the options.
|
|
|
|
finishing-a-development-branch presents the options.
|
|
|
|
|
|
|
|
|
|
|
|
|