| name | design-slice |
| description | Design ONE vertical slice from a slice map in isolation — its architecture decisions, file map, key interfaces, integration points, and success criteria — and write a per-slice design doc to .rpiv/artifacts/designs/. Single-pass, no research subagents, no self-review; asks the user only when a genuine design fork blocks the slice. Dispatched once per slice by a design fanout; the per-slice designs are later merged by synthesize. Use as a fanout unit, not standalone. |
| argument-hint | <slices-path> Slice N: <title> [--upstream <design-path>]... |
| allowed-tools | Read, Grep, Glob, Write |
| shell-timeout | 10 |
| disable-model-invocation | true |
| contract | {"produces":{"kind":"produces","meta":{"artifactKind":"design"},"data":{"type":"object","properties":"[Truncated]"}},"consumes":{"meta":{"artifactKind":"[Truncated]"}}} |
Design Slice
You design one vertical slice from a slice map, in isolation, and write its design doc. One pass. You do not decompose (the slice is already cut), implement, or self-review — the workflow's grade panel judges your output. You may ask the user only when a genuine design fork blocks this slice.
Input
$ARGUMENTS — <slices-path> Slice N: <title>:
- The first token is the path to a slice map under
.rpiv/artifacts/slices/.
- The remainder (
Slice N: <title>) names the single slice to design. Parse N from Slice (\d+).
--upstream <path> (repeats, optional) — a direct dependency's per-slice design doc,
injected by the design fanout once that dependency completes. Read each one's
## Key Interfaces (the decided contract this slice builds on) and ## Notes / Deferred
(to detect an undecided fork). Absent ⇒ this slice is a root (no upstream dependency).
Design only that slice. Respect its Out of scope — anything there belongs to another slice's design.
If the slices path is missing or Slice N can't be parsed, print an error and stop — it's a dispatch error.
Metadata
node "${SKILL_DIR}/../_shared/now.mjs"
echo
node "${SKILL_DIR}/../_shared/git-context.mjs"
Copy values verbatim. <iso> is the first tab-separated field; <slug> is the second.
Steps
- Read the slice map fully and locate the
## Slice N: section — its Scope, Draws on, Depends on, Out of scope.
- Read the slice's footing: the
Draws on references (research sections + the source file:lines it rests on). Read those files fully. This is targeted — read what the slice names, do not run discovery/analysis subagents.
- Read each
--upstream dependency design (if any were passed): from each, read its ## Key Interfaces (the decided contract this slice depends on — build against it, do not redesign it) and its ## Notes / Deferred. If a contract this slice depends on is still an undecided fork there (the dependency parked options rather than deciding), escalate — see Step 5. Read the direct upstreams you were handed; do not chase their transitive dependencies (synthesize reconciles the rest).