shapeup-sdlc 3.18.2 → 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.
Files changed (141) hide show
  1. package/.claude/settings.local.example.json +2 -3
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/AGENTS.md +115 -56
  4. package/README.md +101 -143
  5. package/SECURITY.md +16 -25
  6. package/agents/orient.md +14 -0
  7. package/agents/qa-edge-hunter.md +13 -0
  8. package/agents/spec-evaluator.md +14 -0
  9. package/agents/task-executor.md +14 -0
  10. package/bin/init.mjs +13 -16
  11. package/bin/lib/grant.mjs +8 -19
  12. package/commands/build.md +9 -14
  13. package/commands/eval.md +3 -3
  14. package/commands/hammer.md +9 -5
  15. package/commands/retro.md +12 -11
  16. package/commands/scopes.md +1 -12
  17. package/commands/ship.md +45 -88
  18. package/commands/wire.md +1 -8
  19. package/hooks/dispatch-receipt.mjs +94 -8
  20. package/hooks/hooks.json +0 -41
  21. package/hooks/lib/decision.mjs +6 -9
  22. package/hooks/lib/tier.mjs +50 -0
  23. package/hooks/sandbox-guard.mjs +140 -64
  24. package/kernel/gate.mjs +203 -22
  25. package/kernel/harness.mjs +20 -67
  26. package/kernel/init/run.mjs +175 -523
  27. package/kernel/lib/contract.mjs +9 -93
  28. package/kernel/lib/floor.mjs +64 -0
  29. package/kernel/lib/paths.mjs +39 -112
  30. package/kernel/order.mjs +157 -0
  31. package/kernel/probe/digest.mjs +2 -38
  32. package/kernel/schemas/domain.schema.json +146 -1125
  33. package/kernel/schemas/work-order.schema.json +8 -4
  34. package/kernel/schemas/work-result.schema.json +1 -1
  35. package/kernel/verify/envelope.mjs +2 -2
  36. package/kernel/verify/skills.mjs +27 -8
  37. package/kernel/verify/t0.mjs +2 -2
  38. package/package.json +4 -2
  39. package/skills/building/SKILL.md +144 -0
  40. package/skills/building/resources/gates.md +76 -0
  41. package/skills/building/resources/guidance.md +23 -0
  42. package/skills/{translator/references/preservation-rules.md → building/resources/intake-preservation.md} +1 -1
  43. package/skills/building/resources/intake.md +157 -0
  44. package/skills/building/resources/orders.md +69 -0
  45. package/skills/{ba-pitch-analyzer/references → building/resources/plan-references}/doc-schemas.md +1 -1
  46. package/skills/{ba-pitch-analyzer/references → building/resources/plan-references}/task-generation.md +13 -13
  47. package/skills/{ba-pitch-analyzer/references → building/resources/plan-references}/test-surface.md +6 -7
  48. package/skills/building/resources/plan-scopes.md +95 -0
  49. package/skills/building/resources/plan-spec.md +102 -0
  50. package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/_index.tmpl.md +1 -1
  51. package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/assess-report.tmpl.md +10 -11
  52. package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/run-state.tmpl.md +4 -4
  53. package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/scope-summary.tmpl.md +2 -2
  54. package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/synthesis.tmpl.md +4 -4
  55. package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/usecase.tmpl.md +2 -2
  56. package/skills/building/resources/plan-wire.md +82 -0
  57. package/skills/building/resources/plan.md +98 -0
  58. package/skills/building/resources/retro-research.md +60 -0
  59. package/skills/building/resources/retro-scan.md +49 -0
  60. package/skills/building/resources/retro.md +225 -0
  61. package/skills/building/resources/rounds.md +78 -0
  62. package/skills/building/resources/stop.md +127 -0
  63. package/skills/orient/SKILL.md +37 -37
  64. package/skills/qa-edge-hunter/SKILL.md +29 -14
  65. package/skills/shapeup/SKILL.md +5 -5
  66. package/skills/shapeup/resources/breadboarding.md +1 -1
  67. package/skills/shapeup/resources/context-compaction.md +5 -5
  68. package/skills/shapeup/resources/shaping.md +1 -1
  69. package/skills/spec-evaluator/SKILL.md +17 -21
  70. package/skills/spec-evaluator/references/dimension-contract.md +1 -1
  71. package/skills/spec-evaluator/references/dimensions/completeness.md +3 -3
  72. package/skills/spec-evaluator/references/dimensions/spec-conformance.md +1 -1
  73. package/skills/spec-evaluator/references/dimensions/test-surface-conformance.md +5 -5
  74. package/skills/task-executor/SKILL.md +11 -15
  75. package/commands/hill.md +0 -10
  76. package/hooks/gate-intake.mjs +0 -109
  77. package/hooks/gate-zerowork.mjs +0 -349
  78. package/hooks/tier-guard.mjs +0 -162
  79. package/kernel/compile.mjs +0 -1419
  80. package/kernel/init/fit.mjs +0 -199
  81. package/kernel/init/run-args.mjs +0 -206
  82. package/kernel/lib/breadboard.mjs +0 -165
  83. package/kernel/probe/attempts.mjs +0 -161
  84. package/kernel/probe/concurrency.mjs +0 -535
  85. package/kernel/probe/eval.mjs +0 -405
  86. package/kernel/probe/hunt.mjs +0 -104
  87. package/kernel/probe/leg.mjs +0 -229
  88. package/kernel/probe/owner.mjs +0 -142
  89. package/kernel/probe/requirements.mjs +0 -328
  90. package/kernel/probe/resume.mjs +0 -1110
  91. package/kernel/probe/rounds.mjs +0 -115
  92. package/kernel/probe/staged.mjs +0 -83
  93. package/kernel/probe/stats.mjs +0 -477
  94. package/kernel/probe/t0.mjs +0 -115
  95. package/kernel/reduce/board.mjs +0 -350
  96. package/kernel/reduce/graph.mjs +0 -482
  97. package/kernel/reduce/hill.mjs +0 -322
  98. package/kernel/reduce/ingest.mjs +0 -767
  99. package/kernel/reduce/leftovers.mjs +0 -159
  100. package/kernel/reduce/ship.mjs +0 -529
  101. package/kernel/reduce/snapshot.mjs +0 -291
  102. package/kernel/reduce/verdict.mjs +0 -172
  103. package/kernel/report/export.mjs +0 -384
  104. package/kernel/report/facts.mjs +0 -234
  105. package/kernel/verify/budget.mjs +0 -153
  106. package/kernel/verify/build.mjs +0 -428
  107. package/kernel/verify/dispatch.mjs +0 -114
  108. package/kernel/verify/spec.mjs +0 -975
  109. package/kernel/verify/trace.mjs +0 -604
  110. package/skills/ba-pitch-analyzer/SKILL.md +0 -204
  111. package/skills/coach/SKILL.md +0 -397
  112. package/skills/hill-chart/SKILL.md +0 -154
  113. package/skills/hill-chart/assets/dashboard.template.html +0 -1432
  114. package/skills/scope-architect/SKILL.md +0 -174
  115. package/skills/scope-hammer/SKILL.md +0 -231
  116. package/skills/solution-architect/SKILL.md +0 -158
  117. package/skills/tech-lead/SKILL.md +0 -151
  118. package/skills/tech-lead/references/gates.md +0 -605
  119. package/skills/tech-lead/references/protocol.md +0 -889
  120. package/skills/tech-lead/references/tiny-lane.md +0 -53
  121. package/skills/tech-lead/workflows/shapeup-run.js +0 -2187
  122. package/skills/translator/SKILL.md +0 -258
  123. /package/skills/{ba-pitch-analyzer/references → building/resources/plan-references}/contract-patterns.md +0 -0
  124. /package/skills/{ba-pitch-analyzer/references → building/resources/plan-references}/ddd-patterns.md +0 -0
  125. /package/skills/{ba-pitch-analyzer/references → building/resources/plan-references}/integration-analysis.md +0 -0
  126. /package/skills/{ba-pitch-analyzer/references → building/resources/plan-references}/ux-behavior-patterns.md +0 -0
  127. /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/api-feasibility.tmpl.md +0 -0
  128. /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/contracts/be-service.contract.tmpl.md +0 -0
  129. /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/contracts/offline-storage.contract.tmpl.md +0 -0
  130. /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/contracts/third-party-api.contract.tmpl.md +0 -0
  131. /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/cross-context/context-map.tmpl.md +0 -0
  132. /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/cross-context/event-choreography.tmpl.md +0 -0
  133. /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/cross-context/migration-plan.tmpl.md +0 -0
  134. /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/cross-context/team-handoff.tmpl.md +0 -0
  135. /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/domain-model.tmpl.md +0 -0
  136. /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/feedback.tmpl.md +0 -0
  137. /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/integration.tmpl.md +0 -0
  138. /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/task-board.tmpl.md +0 -0
  139. /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/task-spike.tmpl.md +0 -0
  140. /package/skills/{ba-pitch-analyzer/assets/templates → building/resources/plan-templates}/task.tmpl.md +0 -0
  141. /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.