shapeup-sdlc 3.18.3 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.example.json +2 -3
- package/.claude-plugin/plugin.json +1 -1
- package/AGENTS.md +115 -56
- package/README.md +101 -143
- package/SECURITY.md +16 -25
- package/agents/orient.md +14 -0
- package/agents/qa-edge-hunter.md +13 -0
- package/agents/spec-evaluator.md +14 -0
- package/agents/task-executor.md +14 -0
- package/bin/init.mjs +13 -16
- package/bin/lib/grant.mjs +8 -19
- package/commands/build.md +9 -14
- package/commands/eval.md +3 -3
- package/commands/hammer.md +9 -5
- package/commands/retro.md +12 -11
- package/commands/scopes.md +1 -12
- package/commands/ship.md +45 -88
- package/commands/wire.md +1 -8
- package/hooks/dispatch-receipt.mjs +94 -8
- package/hooks/hooks.json +0 -41
- package/hooks/lib/decision.mjs +6 -9
- package/hooks/lib/tier.mjs +50 -0
- package/hooks/sandbox-guard.mjs +140 -64
- package/kernel/gate.mjs +203 -22
- package/kernel/harness.mjs +20 -67
- package/kernel/init/run.mjs +175 -523
- package/kernel/lib/contract.mjs +9 -93
- package/kernel/lib/floor.mjs +64 -0
- package/kernel/lib/paths.mjs +39 -112
- package/kernel/order.mjs +157 -0
- package/kernel/probe/digest.mjs +2 -38
- package/kernel/schemas/domain.schema.json +146 -1125
- package/kernel/schemas/work-order.schema.json +8 -4
- package/kernel/schemas/work-result.schema.json +1 -1
- package/kernel/verify/envelope.mjs +2 -2
- package/kernel/verify/skills.mjs +27 -8
- package/kernel/verify/t0.mjs +2 -2
- package/package.json +4 -2
- package/skills/building/SKILL.md +144 -0
- package/skills/building/resources/gates.md +76 -0
- package/skills/building/resources/guidance.md +23 -0
- package/skills/{translator/references/preservation-rules.md → building/resources/intake-preservation.md} +1 -1
- package/skills/building/resources/intake.md +157 -0
- package/skills/building/resources/orders.md +69 -0
- package/skills/{ba-pitch-analyzer/references → building/resources/plan-references}/doc-schemas.md +1 -1
- package/skills/{ba-pitch-analyzer/references → building/resources/plan-references}/task-generation.md +13 -13
- package/skills/{ba-pitch-analyzer/references → building/resources/plan-references}/test-surface.md +6 -7
- package/skills/building/resources/plan-scopes.md +95 -0
- package/skills/building/resources/plan-spec.md +102 -0
- package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/_index.tmpl.md +1 -1
- package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/assess-report.tmpl.md +10 -11
- package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/run-state.tmpl.md +4 -4
- package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/scope-summary.tmpl.md +2 -2
- package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/synthesis.tmpl.md +4 -4
- package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/usecase.tmpl.md +2 -2
- package/skills/building/resources/plan-wire.md +82 -0
- package/skills/building/resources/plan.md +98 -0
- package/skills/building/resources/retro-research.md +60 -0
- package/skills/building/resources/retro-scan.md +49 -0
- package/skills/building/resources/retro.md +225 -0
- package/skills/building/resources/rounds.md +78 -0
- package/skills/building/resources/stop.md +127 -0
- package/skills/orient/SKILL.md +37 -37
- package/skills/qa-edge-hunter/SKILL.md +14 -14
- package/skills/shapeup/SKILL.md +5 -5
- package/skills/shapeup/resources/breadboarding.md +1 -1
- package/skills/shapeup/resources/context-compaction.md +5 -5
- package/skills/shapeup/resources/shaping.md +1 -1
- package/skills/spec-evaluator/SKILL.md +17 -21
- package/skills/spec-evaluator/references/dimension-contract.md +1 -1
- package/skills/spec-evaluator/references/dimensions/completeness.md +3 -3
- package/skills/spec-evaluator/references/dimensions/spec-conformance.md +1 -1
- package/skills/spec-evaluator/references/dimensions/test-surface-conformance.md +5 -5
- package/skills/task-executor/SKILL.md +11 -15
- package/commands/hill.md +0 -10
- package/hooks/gate-intake.mjs +0 -109
- package/hooks/gate-zerowork.mjs +0 -349
- package/hooks/tier-guard.mjs +0 -162
- package/kernel/compile.mjs +0 -1419
- package/kernel/init/fit.mjs +0 -199
- package/kernel/init/run-args.mjs +0 -206
- package/kernel/lib/breadboard.mjs +0 -165
- package/kernel/probe/attempts.mjs +0 -161
- package/kernel/probe/concurrency.mjs +0 -535
- package/kernel/probe/eval.mjs +0 -405
- package/kernel/probe/hunt.mjs +0 -104
- package/kernel/probe/leg.mjs +0 -229
- package/kernel/probe/owner.mjs +0 -142
- package/kernel/probe/requirements.mjs +0 -328
- package/kernel/probe/resume.mjs +0 -1110
- package/kernel/probe/rounds.mjs +0 -115
- package/kernel/probe/staged.mjs +0 -83
- package/kernel/probe/stats.mjs +0 -477
- package/kernel/probe/t0.mjs +0 -115
- package/kernel/reduce/board.mjs +0 -350
- package/kernel/reduce/graph.mjs +0 -482
- package/kernel/reduce/hill.mjs +0 -322
- package/kernel/reduce/ingest.mjs +0 -767
- package/kernel/reduce/leftovers.mjs +0 -159
- package/kernel/reduce/ship.mjs +0 -529
- package/kernel/reduce/snapshot.mjs +0 -291
- package/kernel/reduce/verdict.mjs +0 -172
- package/kernel/report/export.mjs +0 -384
- package/kernel/report/facts.mjs +0 -234
- package/kernel/verify/budget.mjs +0 -153
- package/kernel/verify/build.mjs +0 -428
- package/kernel/verify/dispatch.mjs +0 -114
- package/kernel/verify/spec.mjs +0 -975
- package/kernel/verify/trace.mjs +0 -604
- package/skills/ba-pitch-analyzer/SKILL.md +0 -204
- package/skills/coach/SKILL.md +0 -397
- package/skills/hill-chart/SKILL.md +0 -154
- package/skills/hill-chart/assets/dashboard.template.html +0 -1432
- package/skills/scope-architect/SKILL.md +0 -174
- package/skills/scope-hammer/SKILL.md +0 -231
- package/skills/solution-architect/SKILL.md +0 -158
- package/skills/tech-lead/SKILL.md +0 -151
- package/skills/tech-lead/references/gates.md +0 -605
- package/skills/tech-lead/references/protocol.md +0 -889
- package/skills/tech-lead/references/tiny-lane.md +0 -53
- package/skills/tech-lead/workflows/shapeup-run.js +0 -2187
- package/skills/translator/SKILL.md +0 -258
- /package/skills/{ba-pitch-analyzer/references → building/resources/plan-references}/contract-patterns.md +0 -0
- /package/skills/{ba-pitch-analyzer/references → building/resources/plan-references}/ddd-patterns.md +0 -0
- /package/skills/{ba-pitch-analyzer/references → building/resources/plan-references}/integration-analysis.md +0 -0
- /package/skills/{ba-pitch-analyzer/references → building/resources/plan-references}/ux-behavior-patterns.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/api-feasibility.tmpl.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/contracts/be-service.contract.tmpl.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/contracts/offline-storage.contract.tmpl.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/contracts/third-party-api.contract.tmpl.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/cross-context/context-map.tmpl.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/cross-context/event-choreography.tmpl.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/cross-context/migration-plan.tmpl.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/cross-context/team-handoff.tmpl.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/domain-model.tmpl.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/feedback.tmpl.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/integration.tmpl.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/task-board.tmpl.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/task-spike.tmpl.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/task.tmpl.md +0 -0
- /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/ux-behavior.tmpl.md +0 -0
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: tech-lead
|
|
3
|
-
description: "Use this skill whenever the user wants to orchestrate a whole feature end-to-end across the harness skills — ba-pitch-analyzer (planner), task-executor (generator), spec-evaluator (judge) — acting as the tech lead that owns the run and reports to the PO at round boundaries. Trigger on: \"run the full harness\", \"act as tech lead\", \"ship this feature end to end\", \"from pitch to ship\", \"orchestrate the build\", \"plan build evaluate\". Use it even when the user describes a multi-step build flow without naming the skills."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Tech Lead (harness orchestrator)
|
|
7
|
-
|
|
8
|
-
## ▶ RUN THIS FIRST — do not summarise this file
|
|
9
|
-
|
|
10
|
-
**Your first output must be a tool call, not a plan.** Everything you emit before the first tool
|
|
11
|
-
call is narration, and a narrated run is a failed run — it reads like a clean success and leaves
|
|
12
|
-
escaped defects behind it. `hooks/gate-zerowork.mjs` (Stop) blocks a session
|
|
13
|
-
that **reached the orchestrator and left no receipt** — where "reached the orchestrator" means
|
|
14
|
-
dispatching this skill or launching a `shapeup-*` workflow by either surface, and the receipt is
|
|
15
|
-
what `harness init run` writes. Working around the harness is not an exemption: a busy session used to
|
|
16
|
-
switch this gate off and no longer does. Loading these instructions is not running them.
|
|
17
|
-
|
|
18
|
-
**Step 1 — open the run.** Write the requirement to a file first, then pass the path — a
|
|
19
|
-
multi-line requirement inlined into a shell argument is where this step goes wrong. Keep the command
|
|
20
|
-
on ONE line: a grant matches a single-line command, and a `\`-continued one comes back "requires approval":
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
node "${CLAUDE_PLUGIN_ROOT}/kernel/harness.mjs" init run --slug <slug-from-the-request> --intake-file <path/to/the/requirement.md> --auto-level <interactive|auto|unattended> [--dimensions <a,b>] [--gate-answers <ci|guarded|path.json>] [--wall-clock-budget <seconds>] [--max-rounds 3] [--breadboard <path>]
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
**After a compaction, or in a fresh session over an open run, re-derive before you act.** One
|
|
27
|
-
command answers where the run stands, from artifacts and never from memory:
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
node "${CLAUDE_PLUGIN_ROOT}/kernel/harness.mjs" reduce graph --slug <slug> --subgraph run
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
**Exit 3 means a run is ALREADY OPEN.** Resume it; do not re-open it. The refusal prints the
|
|
34
|
-
derived RESUME STATE (slug, status, round, board counts) — read it and go straight to Step 2;
|
|
35
|
-
`shapeup-run.js`'s own fast-forward will re-derive exactly where to continue from disk, never from
|
|
36
|
-
this session's memory. `--force` re-opens deliberately and discards the round history the breaker
|
|
37
|
-
counts.
|
|
38
|
-
|
|
39
|
-
**If this command comes back "requires approval", stop and say so** — the scripts need a one-time grant
|
|
40
|
-
(`npx shapeup-sdlc init`); never route around it or hand-build the feature. Know a grant by running the
|
|
41
|
-
command, never by reading `.claude/settings.json` — Preflight runs the project's probes and reports.
|
|
42
|
-
|
|
43
|
-
**Language gate (delegated to `translator`, not this skill):** before Step 1 opens the run, dispatch
|
|
44
|
-
an Agent (model: exec) calling `Skill(shapeup-sdlc-plugin:translator) --check` on the pitch *and* its
|
|
45
|
-
breadboard. English → proceed as-is. Non-English → a second Agent translates both (`--auto` under
|
|
46
|
-
auto/unattended); Step 1 then names the `.en.md` files (a run already open on the original: re-open
|
|
47
|
-
it with `--force` — nothing is dispatched yet). The tech lead detects and sequences; never translates.
|
|
48
|
-
|
|
49
|
-
**Step 2 — pin GATE L0, then launch.** Collect the L0.1–L0.10 config (spec folder, lens, stack,
|
|
50
|
-
eval dims, max_rounds, the model/budget matrix — see `references/gates.md` GATE L0 for the full
|
|
51
|
-
collect-list), write the SHARED `project-profile.md` yourself (`{schema_version:1, archetype,
|
|
52
|
-
entry_point}` — `shapeup-run.js` has no filesystem of its own), emit the `⏸ GATE L0` block, then
|
|
53
|
-
check the lane:
|
|
54
|
-
|
|
55
|
-
- **`--tiny`, or the spec has no committed `scopes/*.md` yet** (pre-v0.3.0 spec): `shapeup-run.js`
|
|
56
|
-
is out of scope for this lane by design (it targets scope-contract specs). Run the unchanged
|
|
57
|
-
legacy loop instead — `references/protocol.md` (BUILD(r)/EVAL) + `references/protocol.md`
|
|
58
|
-
carry the full step-by-step for both the tiny lane and a scope-less BUILD loop, verbatim, non-
|
|
59
|
-
regression. Stop reading this file here for that run.
|
|
60
|
-
- **Otherwise** (the common case — a scoped spec, any auto level): resolve every switch the
|
|
61
|
-
operator typed (`references/gates.md` GATE L0.9b has the flag→field table) and run the kernel's
|
|
62
|
-
sole `RunArgs` writer: `node "${CLAUDE_PLUGIN_ROOT}/kernel/harness.mjs" init run-args --slug
|
|
63
|
-
<slug> --auto-level <level> --exec-model <n> [--eval-model <n>] [--qa-model <n>] --max-rounds <N>
|
|
64
|
-
--attempts <N> --plugin-root "${CLAUDE_PLUGIN_ROOT}" [--answers <a>] [--lane <l>] [--no-eval]
|
|
65
|
-
[--no-qa] [--adversarial-verify] [--parallel-scopes <N>]`. It writes `.shapeup/<slug>/run-args.json`
|
|
66
|
-
fresh on every launch/relaunch and prints that identical object — **pass it to `Workflow`
|
|
67
|
-
verbatim, never re-type it**. Then launch with the **`Workflow` tool** — naming `init run`'s
|
|
68
|
-
staged copy, never the install path:
|
|
69
|
-
|
|
70
|
-
```
|
|
71
|
-
Workflow({
|
|
72
|
-
scriptPath: ".shapeup/workflows/shapeup-run.js",
|
|
73
|
-
args: <the RunArgs object>
|
|
74
|
-
})
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
`shapeup-run.js` (`domain.schema.json` `$defs/RunArgs`/`RunReturn`) owns everything from ORIENT
|
|
78
|
-
through GATE H and the ship report — every gate inside that range resolves via `harness gate`'s
|
|
79
|
-
exit code, in code, not by this skill's own reading of a paragraph. The `RunReturn` is the script's
|
|
80
|
-
return value, and it arrives as the workflow's result.
|
|
81
|
-
|
|
82
|
-
**Why the tool and not a Bash launcher.** The native runtime is what gives the run
|
|
83
|
-
resume-from-journal, worktree isolation, and sub-agents that share this session's prompt cache
|
|
84
|
-
instead of paying a cold start each. `npx shapeup-sdlc init` writes the `"Workflow"` grant the
|
|
85
|
-
launch needs. That grant is UNSCOPED — it authorises every dynamic workflow script in the project,
|
|
86
|
-
not only this one — so an install may decline it with `--no-native-workflow`, in which case the
|
|
87
|
-
launch prompts for approval once per session and the unattended lane is unavailable. If the launch
|
|
88
|
-
comes back "requires approval" in a headless session, stop and say so — do not hand-build the
|
|
89
|
-
feature instead.
|
|
90
|
-
|
|
91
|
-
**Why a project-local `scriptPath`.** The tool loads a script only from a directory the session may
|
|
92
|
-
already read, and the plugin installs outside your project, so the shipped path is refused before the
|
|
93
|
-
run begins — no permission rule repairs it. `init run` re-copies the scripts to `.shapeup/workflows/`
|
|
94
|
-
on every open, never on a relaunch, so a run finishes on the orchestrator it started with. If staging
|
|
95
|
-
failed, launch from the install path and have the operator `/add-dir` the plugin directory.
|
|
96
|
-
|
|
97
|
-
## Step 3 — the pause protocol: branch on `RunReturn.status`
|
|
98
|
-
|
|
99
|
-
| `status` | What the workflow is telling you | What you do |
|
|
100
|
-
|---|---|---|
|
|
101
|
-
| `paused` | A gate resolved "ask" — `paused_at` names it, `block` is composed and ready | Emit `block` **verbatim** (never re-summarise it — that is the paraphrase channel this design exists to close). Put it to the PO, get a decision. Write it to `.shapeup/<slug>/gate-answers.json` (`{"version":1,"preset":"custom","answers":{"<paused_at>":{"decision":"<answer>"}}}`, merging with any prior gate's answer already there). **Relaunch the SAME `Workflow` call, same `args`** — the fast-forward re-derives from disk and re-dispatches nothing already done (verify: `orders/` minus `results/` is empty before it proceeds) |
|
|
102
|
-
| `aborted` | A gate resolved "abort", or a hard stop (spec-lint red, scope-hammer CANNOT SHIP) | Report `aborted_at` + `reason` to the PO. Do not relaunch without a human decision. A relaunch RESUMES the closed run (it reopens, keeping the abort under `prior_closes`); `--force` discards its history and only the PO may ask for it |
|
|
103
|
-
| `gate_h` | A circuit breaker tripped (`breaker`: outer \| inner \| deadline) — `green_scopes` shipped nothing, `hammer_proposals` needs a census | Dispatch a fresh Agent (model: exec): `Skill(shapeup-sdlc-plugin:scope-hammer) --slug <slug> --breaker <breaker> [--scope <id>]` for the census + cut list, put the PO's decision to `references/gates.md` GATE H, then close out via Step 4 below |
|
|
104
|
-
| `shipped` | The board's final round passed EVAL, QA ran, GATE H accepted the cut list, `report` names the frozen `shapeup/<slug>/REPORT.md` | Go straight to Step 4 |
|
|
105
|
-
|
|
106
|
-
**Never** treat a `paused` return as a stall to work around, and never invent an answer this skill
|
|
107
|
-
did not actually receive from the PO — an unattended lane with no answer for a gate is meant to
|
|
108
|
-
`abort` (see `harness gate`'s `on_missing`), not silently proceed.
|
|
109
|
-
|
|
110
|
-
## Step 4 — GATE L4 — Ship Sign-Off
|
|
111
|
-
|
|
112
|
-
A `shipped`/`escalated` return already crossed L4 in the run and froze `REPORT.md`: never resolve it
|
|
113
|
-
again (a row after the close is a second sign-off). A return that did not reach L4 freezes the report
|
|
114
|
-
now and RESOLVES the gate (`references/gates.md` GATE L4). Either way, emit:
|
|
115
|
-
|
|
116
|
-
```
|
|
117
|
-
⏸ GATE L4 — Ship Sign-Off
|
|
118
|
-
Feature : [slug] — [SHIPPED (deployed) | BUILT & VERIFIED — deploy pending (PO)]
|
|
119
|
-
Rounds : [rounds_used]
|
|
120
|
-
Verdict : [verdict] (dims: [dims_evaluated]; not evaluated: [dims_not_evaluated])
|
|
121
|
-
QA : [qa_findings] findings | skipped
|
|
122
|
-
Ledger : harness-run.md
|
|
123
|
-
```
|
|
124
|
-
Ask (max 1): "Anything to record before I close the run?" On substantive feedback, delegate
|
|
125
|
-
`Skill(shapeup-sdlc-plugin:coach)` for RLHF (its own GATE COACH-1 — the tech lead never
|
|
126
|
-
categorizes feedback itself). Then output the final `✅ [slug] …` line.
|
|
127
|
-
|
|
128
|
-
## Scope boundary
|
|
129
|
-
|
|
130
|
-
Owns the Shape Up **Building phase (steps 7–11)** only. Shaping (1–4), Betting (5) and Kick-off
|
|
131
|
-
(6) are PO-personal and upstream: intake is a *kicked-off pitch*, never a raw idea. The tech lead
|
|
132
|
-
never orients, plans, builds, or judges itself — `shapeup-run.js` **sequences** the skills that do
|
|
133
|
-
and returns to the PO at every gate.
|
|
134
|
-
|
|
135
|
-
> **Gate collect-lists + output-block formats** → `references/gates.md`
|
|
136
|
-
> **How each sub-skill is invoked + handoff files (the envelope port)** → `references/protocol.md`
|
|
137
|
-
> **The round loop, stop conditions, three-level breaker rationale** → `references/protocol.md`
|
|
138
|
-
> **Run ledger format + Hill report** → `references/protocol.md` (Part 4 — State)
|
|
139
|
-
> **State ownership, the central domain registry, two-ledger split** → `references/protocol.md` (Part 4 — State)
|
|
140
|
-
> **Hard rules this design enforces, and why** → `references/protocol.md`
|
|
141
|
-
> **Full invocation examples + the complete flag table** →
|
|
142
|
-
> **The small-change lane (`--tiny`)** → `references/tiny-lane.md`
|
|
143
|
-
|
|
144
|
-
## Invocation
|
|
145
|
-
|
|
146
|
-
`/tech-lead --pitch <shaping.md> --spec <spec/> --lens standard` for an interactive run; `--auto`
|
|
147
|
-
(pause only at L1a/L1b/L3/L4), `--unattended` (headless/CI), `--from build` (resume), `--no-eval`/
|
|
148
|
-
`--no-qa` to skip passes, `--parallel-scopes N` to set how many scopes build at once (default 4,
|
|
149
|
-
`1` = sequential), `--adversarial-verify` to refute each FAIL finding before it costs a fix round. **`--tiny`** stays a prose-only lane (`references/tiny-lane.md`) —
|
|
150
|
-
`shapeup-run.js` targets specs with committed scope contracts; a tiny change or a pre-scope-
|
|
151
|
-
contract spec runs the unchanged v0.2.6 flow this file's Hard Rules already describe.
|