Files
agentic-dev/.sandcastle
Danijel Martinek fd8265cd29 docs(sandcastle): decomposer + reviewer enforce vertical-slice tasks
The user surfaced that the binder-wrap-helper epic's stories
decomposed into horizontal sub-steps (read 3 files → write helper
→ write test → export → typecheck → coverage), not vertical
slices. Per the glossary's slice = task = PR = commit rule, every
checkbox should land as one green commit.

.sandcastle/decomposer.prompt.md:
  - New "The slice rule (non-negotiable)" section near the top
    defining the three constraints every task must satisfy: one
    green commit; exercises a layer; independently meaningful.
  - New "Tasks that are FORBIDDEN" list naming the anti-patterns
    the previous output exhibited (read a file as a task; write
    test without impl; standalone gate runs; standalone export;
    sub-step decomposition of a single slice).
  - New "Tasks that are CORRECT" list with examples drawn from
    this codebase (gen invocation, full use-case slice, per-feature
    binder migration, audit emission, bindAll wiring).
  - New paragraph on "Manifest-first ordering INSIDE a task" —
    the 4-step ordering (manifest → contracts → red test → green
    impl) is what the implementer does within one task, not a
    multi-checkbox decomposition.
  - Constraints section gains two new bullets:
      * Prefer FEWER but FATTER tasks (one per vertical slice)
        over MANY thinner sub-steps
      * Self-check: imagine the commit each checkbox produces;
        do all gates pass on that commit alone?

.sandcastle/reviewer.prompt.md:
  - New check #8 "Slice discipline" rejecting:
      * Multi-commit diffs where any intermediate commit has red
        gates
      * Sub-step shape that should have been separate tasks
      * Incomplete slices (use case w/o DI binding, manifest
        publish w/o publish site, controller w/o router wiring)

.gitignore: adds `.pnpm-store/` so a misconfigured pnpm install
that places the store inside the project doesn't stage thousands
of cache files.

The existing binder-wrap-helper stories were decomposed under the
old (unconstrained) prompt and need re-decomposing under the new
rule. That's a separate action — this commit fixes the prompts;
the existing epic stays as-is until you re-decompose.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 18:33:34 +02:00
..

.sandcastle/

This directory holds prompt templates that the future orchestrator (pnpm work dispatch in the sandcastle-dispatch-v1 epic) feeds to sandcastle when dispatching agents.

Prompt templates

File Role Variables
prd-eliciter.prompt.md Interview a human to produce a PRD draft {{INITIAL_BRIEF}}
adr-eliciter.prompt.md Interview a human to produce an ADR draft {{INITIAL_PROPOSAL}}
decomposer.prompt.md Turn a PRD into epic + story files {{PRD_FILE_CONTENT}}
implementer.prompt.md Execute a single task {{TASK_FILE_CONTENT}}
reviewer.prompt.md Review the implementer's diff {{TASK_FILE_CONTENT}}, {{DIFF}}

Convention: every prompt enforces "generators first"

Each prompt template starts with the same non-negotiable rule: the agent must prefer pnpm turbo gen <kind> over hand-rolled scaffolding. This applies to feature packages, events, jobs, realtime channels, optional core packages, and atomic-design components. Hand-rolled code is only acceptable when the generator's output doesn't cover the case — and even then, the agent runs the generator first and modifies its output rather than starting from scratch.

Environment

Configure runtime tokens via .env (gitignored). Copy .env.example and fill values for the providers you use.

Build the sandbox image (one-time)

Sandcastle dispatches into a Docker image tagged sandcastle:<root-package-name>. Build it once per clone before pnpm work dispatch --execute or pnpm work decompose <id> --execute will work:

pnpm exec sandcastle docker build-image
# Tags: sandcastle:template-vertical

Rebuild after editing this Dockerfile:

pnpm exec sandcastle docker remove-image
pnpm exec sandcastle docker build-image

See docs/guides/runbook.md → Using Sandcastle → Prerequisites for the full setup.

Manual usage

Until the orchestrator ships, these templates are usable manually: copy the relevant .prompt.md content into a Claude / Codex / other agent session, fill the {{VARIABLE}} placeholders by hand, and run.