Design Review
You run one developer checkpoint over all the per-slice designs a carve slice-design fanout produced. You present the proposed design — across every slice — as a compact summary, and let the developer accept it or adjust a slice. On adjust you apply the change surgically in place to the cited design doc and cascade a changed contract into the slices that depend on it, then re-present. One fan-in pass; the accept↔adjust loop is internal. You do not decompose, re-design from scratch, synthesize, or touch the repo working tree — synthesize merges these designs next, and the plan gate grades the merge.
Input
$ARGUMENTS — flags the carve orchestrator wires from the designs and slices channels. Parse generically:
- Designs — every
--designs <path> flag (repeatable). Each is a per-slice design doc under .rpiv/artifacts/designs/. Its frontmatter carries slice_n, slice_title, and depends_on.
- Slices — the single
--slices <path> flag: the slice map under .rpiv/artifacts/slices/ the designs were cut from (authoritative deps, Scope, Out of scope).
If you can't identify at least one --designs flag and exactly one --slices flag, print an error and stop — it's a dispatch error.
Metadata
node "${SKILL_DIR}/../_shared/now.mjs"
The first tab-separated field is <iso> (use as last_updated when you edit a design).
Steps
Read every design doc fully (no limit/offset) and read the slice map. From each design note slice_n, slice_title, depends_on, ## Approach, ## Key Interfaces, ## File Map, ## Success Criteria. Build the dependency graph from the designs' depends_on (cross-checked against the slice map's deps): for any slice you can reach its transitive dependents (slices that list it, directly or transitively, in depends_on).
Present the consolidated design summary — the whole proposed shape in one view, dependency-ordered. Keep it scannable; the developer reviews the design shape, not every line:
Design review — {N} slices, {F} files total
Slice 1: {title} (foundation)
Approach: {1-line architecture decision}
Key interfaces: {the types/signatures/exports this slice introduces — data types named}
Files: {k} ({a} new, {b} change) | Criteria: {m}
Slice 2: {title} (depends on 1)
Approach: {1-line}
Key interfaces: {…, referencing slice-1 contracts it builds on}
Files: {k} | Criteria: {m}
...
Lead with the data types and interface surface — that is the contract the developer is signing off on.
Ask the developer to accept or adjust with the ask_user_question tool. Question: "Proposed design across {N} slices ({F} files). Accept, or adjust a slice?". Header: "Design". Options: "Accept (Recommended)" (Proceed to synthesis — merge the per-slice designs into the plan); "Adjust a slice" (Change a slice's approach, interfaces, data types, or scope before synthesis — describe which slice and what). The developer may use the automatically appended Type something. row to provide an unanticipated adjustment; do not author an Other option.
Header is capped at ≤16 characters (MAX_HEADER_LENGTH = 16 — longer values are rejected).
On Adjust — apply surgically and cascade, then re-present (loop back to Step 2). Classify the change:
- Contract-local — touches only the slice's internal approach / file map, NOT a
## Key Interfaces entry another slice depends on. Edit that one design doc in place; no cascade.
- Contract-changing — touches the slice's
## Key Interfaces (the published contract its dependents built against). Edit the cited slice's design top-down, then for each transitive dependent patch every reference to the changed symbol in its ## Key Interfaces / ## Integration Points and append a one-line note to its ## Notes / Deferred (e.g. upstream slice-1 contract changed: User.id is now UUID). This keeps the designs mutually consistent so synthesize reconciles them with the developer's choice as the authority, not a coin-flip.
Apply only what the developer asked — touch nothing else (the amend discipline). Read the cited file:line in the repo to ground an interface edit, but never edit repo source. Bump each edited design's last_updated: <iso>. Re-present the updated summary (Step 2) and re-ask (Step 3) until the developer accepts.
Escape hatch. If an adjustment is too deep to reconcile by patch — a dependent needs a fundamentally different approach, not a renamed contract — do not fake it. Say so plainly and tell the developer this needs a re-slice (carve's slice-fix → re-slice → re-design path), then stop; that structural authority lives upstream, not here.
On Accept — print every design doc path you reviewed, each on its own line (edited or not, all N of them — not just the ones you adjusted). The designs channel journals what you announce, so a path you omit vanishes from the audit trail and from synthesize's fan-in; every reviewed artifact must be journaled. Then a one-line summary: design accepted: {N} slices, {adjusted} adjusted. The carve workflow routes to subplan/synthesize next.
Hard rules
- One consolidated prompt, not one per slice. You see every design at once and ask once (re-asking only after an adjustment). Per-slice approval is exactly what the design fanout forbids — don't reintroduce it.
- Surgical, not wholesale. Apply only what the developer's adjustment cites; leave every other design and every untouched section byte-for-byte. You are a reviser, not a re-designer.
- Cascade a changed contract. When an adjustment changes a slice's
## Key Interfaces, its transitive dependents are stale — reconcile them in place in the same pass, or the developer's choice silently loses the merge.
- Re-emit in place. Edit each design at its SAME path so the
designs channel updates latest-wins for synthesize; never fork a new design path.
- Fix designs, never the repo. Reading repo source to ground an edit is fine; editing files in the codebase is out of scope —
implement owns that.
- No subagents, no decomposition, no synthesis. Read, present, apply the developer's call, re-emit.
synthesize merges next; the plan gate grades it.
1---2name: design-review3description: One consolidated developer checkpoint over EVERY per-slice design a carve fanout produced — present the proposed shape (approach, data types, key interfaces, file map, scope) as a compact cross-slice summary and let the developer accept or adjust via ask_user_question, then surgically apply any adjustment in place (cascading a changed contract to its dependent slices) before synthesis. Single fan-in pass; the accept↔adjust loop lives inside the skill. Dispatched once by the carve workflow between the design fanout and synthesize — not standalone.4---56# Design Review78You run **one** developer checkpoint over **all** the per-slice designs a carve `slice-design` fanout produced. You present the proposed design — across every slice — as a compact summary, and let the developer **accept** it or **adjust** a slice. On adjust you apply the change **surgically in place** to the cited design doc and **cascade** a changed contract into the slices that depend on it, then re-present. One fan-in pass; the accept↔adjust loop is internal. You do **not** decompose, re-design from scratch, synthesize, or touch the repo working tree — `synthesize` merges these designs next, and the plan gate grades the merge.910## Input1112`$ARGUMENTS` — flags the carve orchestrator wires from the `designs` and `slices` channels. Parse generically:1314- **Designs** — every `--designs <path>` flag (repeatable). Each is a per-slice design doc under `.rpiv/artifacts/designs/`. Its frontmatter carries `slice_n`, `slice_title`, and `depends_on`.15- **Slices** — the single `--slices <path>` flag: the slice map under `.rpiv/artifacts/slices/` the designs were cut from (authoritative `deps`, Scope, Out of scope).1617If you can't identify at least one `--designs` flag and exactly one `--slices` flag, print an error and stop — it's a dispatch error.1819## Metadata2021```!22node "${SKILL_DIR}/../_shared/now.mjs"23```2425The first tab-separated field is `<iso>` (use as `last_updated` when you edit a design).2627## Steps28291. **Read every design doc fully** (no limit/offset) and **read the slice map**. From each design note `slice_n`, `slice_title`, `depends_on`, `## Approach`, `## Key Interfaces`, `## File Map`, `## Success Criteria`. Build the dependency graph from the designs' `depends_on` (cross-checked against the slice map's `deps`): for any slice you can reach its **transitive dependents** (slices that list it, directly or transitively, in `depends_on`).30312. **Present the consolidated design summary** — the whole proposed shape in one view, dependency-ordered. Keep it scannable; the developer reviews the design shape, not every line:3233 ```34 Design review — {N} slices, {F} files total3536 Slice 1: {title} (foundation)37 Approach: {1-line architecture decision}38 Key interfaces: {the types/signatures/exports this slice introduces — data types named}39 Files: {k} ({a} new, {b} change) | Criteria: {m}4041 Slice 2: {title} (depends on 1)42 Approach: {1-line}43 Key interfaces: {…, referencing slice-1 contracts it builds on}44 Files: {k} | Criteria: {m}45 ...46 ```4748 Lead with the data types and interface surface — that is the contract the developer is signing off on.49503. **Ask the developer to accept or adjust** with the `ask_user_question` tool. Question: "Proposed design across {N} slices ({F} files). Accept, or adjust a slice?". Header: "Design". Options: "Accept (Recommended)" (Proceed to synthesis — merge the per-slice designs into the plan); "Adjust a slice" (Change a slice's approach, interfaces, data types, or scope before synthesis — describe which slice and what). The developer may use the automatically appended `Type something.` row to provide an unanticipated adjustment; do not author an `Other` option.51 - `Header` is capped at ≤16 characters (`MAX_HEADER_LENGTH = 16` — longer values are rejected).52534. **On Adjust — apply surgically and cascade, then re-present (loop back to Step 2).** Classify the change:5455 - **Contract-local** — touches only the slice's internal approach / file map, NOT a `## Key Interfaces` entry another slice depends on. Edit that one design doc in place; no cascade.56 - **Contract-changing** — touches the slice's `## Key Interfaces` (the published contract its dependents built against). Edit the cited slice's design **top-down**, then for each **transitive dependent** patch every reference to the changed symbol in its `## Key Interfaces` / `## Integration Points` and append a one-line note to its `## Notes / Deferred` (e.g. `upstream slice-1 contract changed: User.id is now UUID`). This keeps the designs mutually consistent so `synthesize` reconciles them with the developer's choice as the authority, not a coin-flip.5758 Apply **only** what the developer asked — touch nothing else (the `amend` discipline). Read the cited `file:line` in the repo to ground an interface edit, but never edit repo source. Bump each edited design's `last_updated: <iso>`. Re-present the updated summary (Step 2) and re-ask (Step 3) until the developer accepts.5960 **Escape hatch.** If an adjustment is too deep to reconcile by patch — a dependent needs a fundamentally different approach, not a renamed contract — do **not** fake it. Say so plainly and tell the developer this needs a re-slice (carve's `slice-fix` → re-slice → re-design path), then stop; that structural authority lives upstream, not here.61625. **On Accept** — print **every** design doc path you reviewed, each on its own line (edited or not, all N of them — not just the ones you adjusted). The `designs` channel journals what you announce, so a path you omit vanishes from the audit trail and from `synthesize`'s fan-in; every reviewed artifact must be journaled. Then a one-line summary: `design accepted: {N} slices, {adjusted} adjusted`. The carve workflow routes to `subplan`/`synthesize` next.6364## Hard rules6566- **One consolidated prompt, not one per slice.** You see every design at once and ask once (re-asking only after an adjustment). Per-slice approval is exactly what the design fanout forbids — don't reintroduce it.67- **Surgical, not wholesale.** Apply only what the developer's adjustment cites; leave every other design and every untouched section byte-for-byte. You are a reviser, not a re-designer.68- **Cascade a changed contract.** When an adjustment changes a slice's `## Key Interfaces`, its transitive dependents are stale — reconcile them in place in the same pass, or the developer's choice silently loses the merge.69- **Re-emit in place.** Edit each design at its SAME path so the `designs` channel updates latest-wins for `synthesize`; never fork a new design path.70- **Fix designs, never the repo.** Reading repo source to ground an edit is fine; editing files in the codebase is out of scope — `implement` owns that.71- **No subagents, no decomposition, no synthesis.** Read, present, apply the developer's call, re-emit. `synthesize` merges next; the plan gate grades it.