shapeup-sdlc 3.7.3 → 3.7.4

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "shapeup-sdlc-plugin",
3
3
  "displayName": "ShapeUp SDLC Plugin",
4
- "version": "3.7.3",
4
+ "version": "3.7.4",
5
5
  "description": "Shape Up SDLC harness for Claude Code: shaping, intake, orient, scope-mapping, building (T0-verified, sandboxed, scope-contracted), evaluation and QA skills orchestrated by a tech-lead.",
6
6
  "author": {
7
7
  "name": "Liberty Nguyen",
@@ -857,12 +857,22 @@ export async function cli(rawArgv) {
857
857
  // receipts ledger EXISTING while carrying no row for the previous attempt: a lane that does not
858
858
  // attest dispatches at all (no ledger on disk) cannot be judged by this rule and is waved
859
859
  // through, so `--tiny`, a prose round loop and a standalone build are untouched.
860
- if (scope?.scope_id && round && attempt > 1) {
860
+ //
861
+ // THE RUN KEY IS PART OF THE QUESTION. `attemptEvidence` matches a receipt to an attempt by
862
+ // `order_id` AND `run_id` — deliberately, so a previous run's receipt over the same slug cannot
863
+ // answer for this one — and this call used to omit the key. With no key nothing matches, so every
864
+ // previous attempt read "unattested" and every attempt 2 was refused as unanswered, on every run,
865
+ // with the receipt, the leg row and the result all on disk. Measured on a live run: one attempt
866
+ // spent of five, the census reading it spent, and the gate refusing to open the next one three
867
+ // times over. The ratchet was one attempt deep for as long as the gate has existed. A run with no
868
+ // readable receipt has no key to ask with and is waved through, like a lane with no ledger.
869
+ const myRunId = (scope?.scope_id && round && attempt > 1) ? readRunId(cwd, slug) : null;
870
+ if (scope?.scope_id && round && attempt > 1 && myRunId) {
861
871
  const receiptsPath = dispatchReceipts(cwd, slug);
862
872
  if (existsSync(receiptsPath)) {
863
873
  const prev = attemptEvidence(
864
874
  cwd, slug, scope.scope_id, round, attempt - 1,
865
- readReceipts(receiptsPath), readLegs(legLedger(cwd, slug)),
875
+ readReceipts(receiptsPath), readLegs(legLedger(cwd, slug)), myRunId,
866
876
  );
867
877
  if (prev.state !== "spent") {
868
878
  const why = prev.state === "unattested"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shapeup-sdlc",
3
- "version": "3.7.3",
3
+ "version": "3.7.4",
4
4
  "description": "Shape Up for coding agents \u2014 with gates the agent can't talk its way past. Harness for Claude Code.",
5
5
  "bin": {
6
6
  "shapeup-sdlc": "bin/init.mjs"