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.
@@ -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/seesaw 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>';
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
- every write there forces a full
81
- seesaw run at the next gate
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/seesaw facts later,
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/seesaw).
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?}. archetype ∈
224
- {client-only-game|web-service|mobile|library|data-pipeline}; entry_point is the reachability
225
- seam (a game's main.js is NOT a service's src/server.ts). Validate the enum — a typo must fail,
226
- not silently disable the check. The two probes feed the round build gate (`harness verify
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 + (on green) seesaw, then scores the
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: a FINISHED scope's broken
221
- fixture raises score.regressions and reverts through this same rule, which
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> --seesaw-registry .shapeup/<slug>/seesaw/registry.json
450
- Effect: runs the scope's e2e fixtures + DB probe, then (on green) the seesaw regression check
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/seesaw), never declared by a worker | Closes the self-reported-confidence risk outright — facts move dots, not authors |
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
  ---