shapeup-sdlc 3.7.12 → 3.9.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-plugin/plugin.json +1 -1
- package/AGENTS.md +2 -2
- package/README.md +13 -11
- package/kernel/lib/argv.mjs +4 -4
- package/kernel/lib/paths.mjs +0 -2
- package/kernel/reduce/hill.mjs +17 -39
- package/kernel/report/export.mjs +0 -3
- package/kernel/schemas/domain.schema.json +13 -92
- package/kernel/verify/env.mjs +2 -1
- package/kernel/verify/ratchet-tree.mjs +1 -1
- package/kernel/verify/t0.mjs +35 -87
- package/kernel/verify/trace.mjs +230 -30
- package/package.json +1 -1
- package/skills/ba-pitch-analyzer/references/task-generation.md +1 -1
- package/skills/hill-chart/assets/dashboard.template.html +1 -1
- package/skills/scope-architect/SKILL.md +3 -3
- package/skills/tech-lead/references/gates.md +20 -6
- package/skills/tech-lead/references/protocol.md +6 -8
|
@@ -916,7 +916,7 @@
|
|
|
916
916
|
html += '</div>';
|
|
917
917
|
|
|
918
918
|
// ---- 2. hill chart (headline) ----
|
|
919
|
-
html += '<div class="section"><h3>Hill Chart</h3><div class="sub">Where each scope sits between figuring it out and getting it done — mechanical, derived only from T0/T1
|
|
919
|
+
html += '<div class="section"><h3>Hill Chart</h3><div class="sub">Where each scope sits between figuring it out and getting it done — mechanical, derived only from T0/T1 evidence, never self-reported. Position is how derisked a scope has ever been; dot color is its current-round health, so a scope can sit downhill and still show red if its latest attempt regressed.</div>';
|
|
920
920
|
html += '<div class="section-card"><div class="hill-wrap hero">';
|
|
921
921
|
if (pitch.hillAvailable) {
|
|
922
922
|
html += renderHillSVG(pitch.scopeStatus, 'hero');
|
|
@@ -77,8 +77,8 @@ the ship report's census table.
|
|
|
77
77
|
write-whitelist; wrong here =
|
|
78
78
|
a legitimate ESCALATE later
|
|
79
79
|
shared_substrate[] — files ≥2 scopes both touch;
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
declaring one costs concurrency:
|
|
81
|
+
they build one at a time
|
|
82
82
|
affordance_manifest — from ux-behavior.md state
|
|
83
83
|
tables: every interactive
|
|
84
84
|
element as {test_id, role} +
|
|
@@ -93,7 +93,7 @@ the ship report's census table.
|
|
|
93
93
|
TBD and flag it, never invent
|
|
94
94
|
a fixture for unbuilt behavior
|
|
95
95
|
hill_phase: "UPHILL_UNKNOWN" — ALWAYS; phase is derived from
|
|
96
|
-
T0/T1
|
|
96
|
+
T0/T1 facts later,
|
|
97
97
|
never authored
|
|
98
98
|
4 LINT node "${CLAUDE_PLUGIN_ROOT}/kernel/harness.mjs" verify spec --slug <slug>
|
|
99
99
|
→ PA1 (directory alignment), PA2 (>~15 files), DISJOINT (undeclared overlap),
|
|
@@ -90,7 +90,7 @@ Collect (explicit — never inferred):
|
|
|
90
90
|
attempts a single scope gets inside one round before its attempt loop trips and
|
|
91
91
|
queues a hammer PROPOSAL for GATE H rather than blocking the round. Only meaningful
|
|
92
92
|
when the spec folder has scope contracts; a spec with none skips the attempt loop
|
|
93
|
-
entirely and BUILD behaves exactly as in v0.2.6 (task-executor --next, no T0
|
|
93
|
+
entirely and BUILD behaves exactly as in v0.2.6 (task-executor --next, no T0).
|
|
94
94
|
no_progress_k (v1.5): the STAGNATION term of the same inner breaker. Default 2 — the
|
|
95
95
|
number of consecutive non-`kept` trials after which a scope ends early and queues the
|
|
96
96
|
same GATE H proposal. attempt_budget counts ATTEMPTS and cannot see that the last two
|
|
@@ -220,10 +220,17 @@ Do NOT enter MAP SCOPES until Orient is accepted.
|
|
|
220
220
|
|
|
221
221
|
```
|
|
222
222
|
1. PROFILE (you write it at L0 — compile-order stays pipeline-blind): SHARED project-profile.md
|
|
223
|
-
= {schema_version:1, archetype, entry_point, build_probe?, launch_probe?}.
|
|
224
|
-
{client-only-game|web-service|mobile|library|data-pipeline}; entry_point is the
|
|
225
|
-
seam (a game's main.js is NOT a service's src/server.ts). Validate the enum — a
|
|
226
|
-
not silently disable the check.
|
|
223
|
+
= {schema_version:1, archetype, entry_point, source_extensions?, build_probe?, launch_probe?}.
|
|
224
|
+
archetype ∈ {client-only-game|web-service|mobile|library|data-pipeline}; entry_point is the
|
|
225
|
+
reachability seam (a game's main.js is NOT a service's src/server.ts). Validate the enum — a
|
|
226
|
+
typo must fail, not silently disable the check. entry_point is also the root reachability walks
|
|
227
|
+
the import graph from, so pick the module the app's screens hang off, not merely the file the
|
|
228
|
+
platform starts: a framework that registers screens by name (a route map, a manifest, a
|
|
229
|
+
string-loaded page) leaves its start file importing nothing the feature touches, and the arm
|
|
230
|
+
then reports that it could not check rather than calling every engine orphaned.
|
|
231
|
+
source_extensions is optional and only needed when the project's modules end in something the
|
|
232
|
+
entry point does not (e.g. [".ets"] when the entry is a .ts file); leaving it out costs a
|
|
233
|
+
skipped arm, never a false red. The two probes feed the round build gate (`harness verify
|
|
227
234
|
build`, every round before EVAL): build_probe asserts the BUILT ARTIFACT covers what the run
|
|
228
235
|
wrote (a green exit code is not proof the feature compiled when the toolchain compiles only what
|
|
229
236
|
an entry point reaches); launch_probe installs, starts and asserts the first screen. A `mobile`
|
|
@@ -241,7 +248,14 @@ Do NOT enter MAP SCOPES until Orient is accepted.
|
|
|
241
248
|
requirements.md registry (atomic REQ clauses, frozen ids).
|
|
242
249
|
4. trace-lint — node "${CLAUDE_PLUGIN_ROOT}/kernel/harness.mjs" verify trace --slug <slug>. ADVISORY at L1b:
|
|
243
250
|
covers-closure (every covered REQ named by ≥1 AC's covers:) + reachability (every UC engine
|
|
244
|
-
reaches entry_point). Promote to --gate only once covers: is populated.
|
|
251
|
+
reaches entry_point). Promote to --gate only once covers: is populated. Reachability reports
|
|
252
|
+
checked:false with a reason rather than a verdict in two cases, both warns: an import it could
|
|
253
|
+
not follow (the graph is incomplete) and no engine reachable at all (nothing controls the walk,
|
|
254
|
+
so an orphan and a wrong root look identical). Read either as "re-declare the profile", never
|
|
255
|
+
as a clean arm. When it does run it also reports, per scope, how many of that scope's own source
|
|
256
|
+
files the app reaches, and warns (SCOPE-UNREACHABLE) on a scope it reaches none of — a scope's
|
|
257
|
+
build fixture can be green while its code never compiles, on any toolchain that compiles only
|
|
258
|
+
what the entry point reaches. Warn only: the wiring may be a later scope's job by design.
|
|
245
259
|
```
|
|
246
260
|
|
|
247
261
|
---
|
|
@@ -205,7 +205,7 @@ ingest-result <result> → board/ledger writes
|
|
|
205
205
|
fails, and the run ABORTS naming the phase. Resolve it
|
|
206
206
|
yourself and record the answer in round-ledger.md, which
|
|
207
207
|
the NEXT attempt's fresh context reads back.
|
|
208
|
-
harness verify t0 → fixtures + DB probe
|
|
208
|
+
harness verify t0 → fixtures + DB probe, then scores the
|
|
209
209
|
attempt against the baseline trial and snapshots or
|
|
210
210
|
restores the tree. Branch on `status` from its stdout
|
|
211
211
|
JSON — the tree action has ALREADY happened:
|
|
@@ -217,9 +217,8 @@ harness verify t0 → fixtures + DB probe + (on green) sees
|
|
|
217
217
|
KEEPS, because a spec-conformance fix cannot raise a score that is already at
|
|
218
218
|
full marks, and reverting it would discard exactly the work a fix round exists
|
|
219
219
|
to do. Tree already restored from the last kept
|
|
220
|
-
snapshot. Subsumes the retired stash-and-retry branch:
|
|
221
|
-
|
|
222
|
-
is why seesaw runs before anything is declared green.
|
|
220
|
+
snapshot. Subsumes the retired stash-and-retry branch: an attempt that scores
|
|
221
|
+
worse than the incumbent reverts through this same rule.
|
|
223
222
|
rather than the code. Tree kept, baseline reset. Not a verdict, not a failure.
|
|
224
223
|
crash a fixture command failed to spawn or timed out; tree restored. Fix the fixture,
|
|
225
224
|
not the code.
|
|
@@ -446,9 +445,8 @@ Do: verify the phase's artifact by hand before trusting either diagnosis. If it
|
|
|
446
445
|
```
|
|
447
446
|
Invoke via Bash directly — NOT an Agent, this is deterministic tooling, not a worker:
|
|
448
447
|
node "${CLAUDE_PLUGIN_ROOT}/kernel/harness.mjs" verify t0 shapeup/<slug>/scopes/<scope-id>.md
|
|
449
|
-
--round <N> --attempt <M>
|
|
450
|
-
Effect: runs the scope's e2e fixtures
|
|
451
|
-
over every FINISHED scope's fixtures. Writes the verdict artifact spec-evaluator's
|
|
448
|
+
--round <N> --attempt <M>
|
|
449
|
+
Effect: runs the scope's e2e fixtures and DB probe. Writes the verdict artifact spec-evaluator's
|
|
452
450
|
T0-citation rule will require a citation to, appends one row to t0/trials.jsonl, and — this
|
|
453
451
|
is the ratchet — scores the attempt against the last kept trial and snapshots or
|
|
454
452
|
restores the working tree ITSELF. Zero LLM tokens — deterministic tooling, not a
|
|
@@ -592,7 +590,7 @@ guarantee lives in the script and, where noted, in a hook.
|
|
|
592
590
|
| Three-level circuit breaker: attempt_budget (inner, per scope) nests inside round_budget (outer), with an opt-in wall_clock_budget_s deadline | An exhausted scope queues a GATE H hammer proposal, it never blocks the round; only round_budget hitting 0 stops the whole run; the deadline breaker (checked every round boundary in `shapeup-run.js`) routes to GATE H so a run out of clock still ships what is green instead of being killed from outside |
|
|
593
591
|
| The tech lead never hand-edits a scope contract | scope-architect is its sole writer (single-writer-per-file) |
|
|
594
592
|
| Substrate-disjointness + PA1/PA2 lints are re-asserted at GATE L1b (harness verify spec) even when scope-architect already checked them | A human may have hand-approved past a 🔴 at the architect's checkpoint; `shapeup-run.js` runs spec-lint itself, in code, before resolving L1b |
|
|
595
|
-
| Hill phase is read from mechanical facts (T0/T1
|
|
593
|
+
| Hill phase is read from mechanical facts (T0/T1), never declared by a worker | Closes the self-reported-confidence risk outright — facts move dots, not authors |
|
|
596
594
|
| GATE H is delegated to scope-hammer, never adjudicated inline by the tech lead | Keeps the orchestrator thin; census/baseline-comparison/cut-list logic has one owner |
|
|
597
595
|
|
|
598
596
|
---
|