instar 1.3.1021 → 1.3.1023

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 +1 @@
1
- {"version":3,"file":"devCiFailures.d.ts","sourceRoot":"","sources":["../../src/commands/devCiFailures.ts"],"names":[],"mappings":"AAiBA,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAKD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAczE;AAqBD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqElF"}
1
+ {"version":3,"file":"devCiFailures.d.ts","sourceRoot":"","sources":["../../src/commands/devCiFailures.ts"],"names":[],"mappings":"AAiBA,8DAA8D;AAC9D,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAKD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAczE;AA2CD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqElF"}
@@ -43,6 +43,28 @@ export function extractFailureLines(annotations) {
43
43
  }
44
44
  return lines;
45
45
  }
46
+ /**
47
+ * RULE 3.1 rationale — criticality x frequency x stability x fallback.
48
+ *
49
+ * CRITICALITY: lowest band. This reads a PR's failed check-runs and their
50
+ * annotations to print what broke. It is a DIAGNOSTIC, never a gate — the
51
+ * command returns 0 even when it finds failures. A wrong answer costs a
52
+ * contributor one confusing terminal read, never a merge decision.
53
+ * FREQUENCY: once per `instar dev:ci-failures <pr>` invocation, run by hand
54
+ * against a red PR. No loop, no polling, no retry amplification.
55
+ * STABILITY: `gh --json` / the check-run annotations endpoint is GitHub's
56
+ * documented machine-readable contract, requested with explicit fields —
57
+ * not prose scraped from stdout. An upstream shape change surfaces as a `gh`
58
+ * error or a parse failure, not as a silently reshaped object. Deterministic
59
+ * parsing is acceptable here without a canary.
60
+ * FALLBACK: loud on every path, which is why this detector needs no partial
61
+ * caveat. A non-zero `gh` exit rejects with the captured stderr; empty or
62
+ * malformed stdout throws inside JSON.parse and rejects as "gh returned
63
+ * non-JSON" (note there is no `|| \'null\'` default here, so empty output
64
+ * cannot degrade into a successful-looking empty result); and every caller
65
+ * catches, writes the reason via out.error, and returns exit 1. There is no
66
+ * path on which a failed read renders as a clean one.
67
+ */
46
68
  function defaultDeps() {
47
69
  return {
48
70
  ghJson: (args) => new Promise((resolve, reject) => {
@@ -1 +1 @@
1
- {"version":3,"file":"devCiFailures.js","sourceRoot":"","sources":["../../src/commands/devCiFailures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devCiFailures.js","sourceRoot":"","sources":["../../src/commands/devCiFailures.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"devClaimCheck.d.ts","sourceRoot":"","sources":["../../src/commands/devClaimCheck.ts"],"names":[],"mappings":"AA4BA,mDAAmD;AACnD,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,6DAA6D;IAC7D,SAAS,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAOD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,EAAE,CAe5G;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5C,QAAQ,EAAE,MAAM,EAAE,GACjB,SAAS,EAAE,CAUb;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBrF;AAoBD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkErF"}
1
+ {"version":3,"file":"devClaimCheck.d.ts","sourceRoot":"","sources":["../../src/commands/devClaimCheck.ts"],"names":[],"mappings":"AA4BA,mDAAmD;AACnD,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,6DAA6D;IAC7D,SAAS,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrE;AAED,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAOD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC3B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,EAAE,CAe5G;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5C,QAAQ,EAAE,MAAM,EAAE,GACjB,SAAS,EAAE,CAUb;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBrF;AA2CD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkErF"}
@@ -99,6 +99,29 @@ export function readSpecHeads(specsDir) {
99
99
  }
100
100
  return out;
101
101
  }
102
+ /**
103
+ * RULE 3.1 rationale — criticality x frequency x stability x fallback.
104
+ *
105
+ * CRITICALITY: lowest band. This detector answers "is another PR or approved spec already
106
+ * claiming these files?" before a build starts. It is ADVISORY — it never gates, blocks,
107
+ * or decides. A wrong answer costs a duplicated build (the 2026-06-05 collision this
108
+ * command exists to prevent), never a wrong verdict on someone else's change.
109
+ * FREQUENCY: once per `instar dev:claim-check` invocation, at build start. Not a hot path,
110
+ * no loop, no retry amplification.
111
+ * STABILITY: the highest available for an external read. `gh --json <fields>` is GitHub
112
+ * CLI's documented machine-readable contract, not prose scraped from stdout, and the
113
+ * fields are requested explicitly — so an upstream format change surfaces as a `gh`
114
+ * error rather than as a silently reshaped object. Deterministic parsing is therefore
115
+ * acceptable here without a canary or an LLM check.
116
+ * FALLBACK: asymmetric, and the asymmetry is the reason this rationale is worth reading.
117
+ * A THROWN error (gh missing, auth, network, malformed JSON) degrades LOUDLY — the
118
+ * caller records `ghDegraded` and reports spec-scan-only, so the user knows the PR half
119
+ * of the check did not run. But EMPTY stdout parses to `null`, which the caller's
120
+ * `?? []` renders as "zero PRs claim these files" with no degradation flag: a check that
121
+ * could not run becomes indistinguishable from one that ran clean. That path is narrow
122
+ * (`gh pr list --json` emits `[]` on success, not empty) but real, and it is tracked
123
+ * separately rather than papered over here.
124
+ */
102
125
  function defaultGhJson(args) {
103
126
  return new Promise((resolve, reject) => {
104
127
  execFile('gh', args, { maxBuffer: 32 * 1024 * 1024, timeout: 30_000 }, (err, stdout) => {
@@ -1 +1 @@
1
- {"version":3,"file":"devClaimCheck.js","sourceRoot":"","sources":["../../src/commands/devClaimCheck.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devClaimCheck.js","sourceRoot":"","sources":["../../src/commands/devClaimCheck.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.1021",
3
+ "version": "1.3.1023",
4
4
  "description": "Coherence infrastructure for self-evolving AI agents — on the Claude Code or Codex subscription you already have.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -149,9 +149,22 @@ function readRegistry() {
149
149
  }
150
150
 
151
151
  function isInRegistry(filepath, registryContent) {
152
- // Strip src/ prefix; the registry uses paths relative to src/.
153
- const stripped = filepath.replace(/^src\//, '');
154
- return registryContent.includes(stripped);
152
+ // The registry's Location column is SECTION-relative, not uniformly relative
153
+ // to src/. Most sections write paths relative to src/, but the provider
154
+ // substrate section ("Provider substrate (`src/providers/`)") writes them
155
+ // relative to src/providers/ — 21 of its 23 rows, measured on main.
156
+ //
157
+ // Stripping only `src/` therefore looked for `providers/adapters/X.ts` while
158
+ // the row said `adapters/X.ts`, so no provider file could ever match. A file
159
+ // listed in three registry rows was still refused for a "missing registry
160
+ // entry", which told the author to add a row that already existed.
161
+ if (registryContent.includes(filepath.replace(/^src\//, ''))) return true;
162
+ // Only widen for genuine provider paths, so no other file gains a match it
163
+ // would not otherwise have had.
164
+ if (filepath.startsWith('src/providers/')) {
165
+ return registryContent.includes(filepath.replace(/^src\/providers\//, ''));
166
+ }
167
+ return false;
155
168
  }
156
169
 
157
170
  function hasMatchingCanary(stagedFiles, filepath) {
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-07-28T02:53:15.912Z",
5
- "instarVersion": "1.3.1021",
4
+ "generatedAt": "2026-07-28T09:37:06.269Z",
5
+ "instarVersion": "1.3.1023",
6
6
  "entryCount": 202,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -0,0 +1,42 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ The Rule 3 pre-commit gate's registry lookup could never match a file under `src/providers/`.
9
+
10
+ `isInRegistry()` stripped only `src/`, so it searched the state-detector registry for
11
+ `providers/adapters/foo/Bar.ts` — while the registry's provider section writes its Location column
12
+ relative to `src/providers/`, i.e. `adapters/foo/Bar.ts`. 21 of that section's 23 rows use that
13
+ form. The strings never met.
14
+
15
+ A registered file was therefore still refused, with a message instructing the author to add a
16
+ registry entry that already existed — in one case, one that appears in three separate rows.
17
+
18
+ The lookup now also tries the `src/providers/`-relative form, guarded by
19
+ `filepath.startsWith('src/providers/')` so no other file gains a match it did not already have.
20
+
21
+ ## What to Tell Your User
22
+
23
+ Nothing. This is a contributor-facing pre-commit script — not shipped, not executed at runtime, no
24
+ user-visible behaviour.
25
+
26
+ ## Summary of New Capabilities
27
+
28
+ None. A registry entry still does not exempt a file on its own: `inRegistry && (hasRationale ||
29
+ hasCanary)` is unchanged. This only stops the gate from ignoring a registry row that genuinely
30
+ exists.
31
+
32
+ ## Evidence
33
+
34
+ - Red → green, observed rather than predicted: the provider case failed and the `src/`-relative
35
+ control passed before the fix (1 failed / 23 passed); 24/24 after. The control is what isolates
36
+ the cause to the path form.
37
+ - **Why the branch had no coverage:** `tests/unit/scripts/check-rule3-coverage.test.ts` copied the
38
+ script into its tmp repo but executed the *original*. Since the script resolves its registry from
39
+ `__dirname/../specs/`, it read the real repo's registry while reading staged files from the tmp
40
+ repo — so every registry fixture a test wrote was silently ignored. Fixed by running the copy;
41
+ all 22 pre-existing tests pass unchanged under the corrected harness.
42
+ - Side-effects review: `upgrades/side-effects/rule3-registry-lookup-provider-paths.md`.
@@ -0,0 +1,74 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ `src/commands/devClaimCheck.ts` reads GitHub by running `gh` and parsing its `--json` output —
9
+ textbook state detection under Rule 3 — but it entered `main` via #813 (2026-06-05) carrying
10
+ neither of the two things Rule 3 requires: an in-file Rule 3.1 rationale and a state-detector
11
+ registry row. Both are added here.
12
+
13
+ It survived because the pre-commit Rule 3 gate evaluates **staged** files only, so a file that
14
+ entered `main` without tripping the gate at its own commit time is never re-examined.
15
+
16
+ That is not a cosmetic gap. A merge stages everything, so anyone merging `main` into an older
17
+ branch is judged as the author of all of `main` and hits this refusal for a violation absent
18
+ from their own diff — a hard blocker on locally refreshing older open PRs. It blocked exactly
19
+ that work on 2026-07-28 and is the reason this was found at all.
20
+
21
+ The registry row is deliberately **🟡 Partial rather than 🔵 Exempt**, unlike the neighbouring
22
+ `gh --json` reads that are exempt on "versioned structured contract" reasoning. The difference
23
+ is the fallback. A thrown error (gh missing, auth, network) degrades loudly — the caller sets
24
+ `ghDegraded` and reports spec-scan-only. But empty stdout parses to `null`, and the caller's
25
+ `?? []` renders that as "zero PRs claim these files" with no degradation flag: a check that
26
+ could not run reading identically to one that ran clean. Narrow (`gh pr list --json` emits `[]`
27
+ on success, not empty) and advisory-only, so the blast radius is a false all-clear on a
28
+ pre-build hint — but it is named in both the rationale and the registry rather than papered
29
+ over, and the row flips to Exempt once that path degrades as loudly as the throw path.
30
+
31
+ Fixing the silent-empty path is a behaviour change and is tracked separately, not bundled into
32
+ a comment-only commit.
33
+
34
+ ## What to Tell Your User
35
+
36
+ Nothing. No user-visible change, no new command, no behaviour difference in any conversation.
37
+ This is a documentation and registry fix to a contributor-facing CLI helper.
38
+
39
+ ## Summary of New Capabilities
40
+
41
+ None. `instar dev:claim-check` behaves exactly as before — same flags, same output, same exit
42
+ codes. The only functional effect is that `main` stops failing its own Rule 3 gate, which
43
+ unblocks locally merging `main` into older branches.
44
+
45
+ ## Evidence
46
+
47
+ - The violation was confirmed on `main`, not inferred: `grep -c "RULE 3"
48
+ src/commands/devClaimCheck.ts` on `origin/main` returns 0, and the file is absent from the
49
+ diff of the branch that hit the refusal.
50
+ - The refusal is reproducible, and so is the fix: the same staged change was **blocked** by the
51
+ Rule 3 gate before the rationale comment, blocked again for the missing registry row after it,
52
+ and **passed** once both halves were present. Each verdict was observed, not predicted.
53
+ - Comment-and-registry only — no statement, signature, export, or type is modified, so `tsc`
54
+ emits identical JS.
55
+ - Side-effects review: `upgrades/side-effects/rule3-rationale-devclaimcheck.md`.
56
+ - ELI16: `upgrades/rule3-rationale-devclaimcheck.eli16.md`.
57
+
58
+ ## Correction after opening: this was TWO files, not one
59
+
60
+ The first version of this change covered only `devClaimCheck.ts` and claimed that unblocked merging
61
+ `main` into an older branch. **That claim was false**, and an A/B test caught it: branching from a
62
+ pre-#813 `main` commit and staging a merge of current `main` flagged **two** files —
63
+ `devCiFailures.ts` as well. Fixing one of two blockers unblocks nothing.
64
+
65
+ `devCiFailures.ts` now carries its own rationale and registry row. It is marked **🔵 Exempt** rather
66
+ than Partial, because unlike its sibling every failure path is loud: a non-zero `gh` exit rejects
67
+ with captured stderr, and its `JSON.parse(stdout)` carries no `|| 'null'` default, so empty output
68
+ throws rather than degrading into a successful-looking empty result.
69
+
70
+ **How the check nearly fooled me.** My first A/B run reported the fixed side PASSING — but the merge
71
+ had failed (a ref I had not fetched), so nothing was staged and the checker exited 0 over an empty
72
+ file list. A vacuous pass is indistinguishable from a real one unless you assert the check had input.
73
+ The re-run prints staged counts: 7,499 files / 905 `src/*.ts` on the failing side, and refuses to
74
+ read 0 staged files as a pass.
@@ -0,0 +1,55 @@
1
+ # ELI16 — the missing rationale that was blocking old pull requests
2
+
3
+ There is a rule in this repo (Rule 3.1) that says: if your code looks at some outside system
4
+ to figure out what state it's in, you have to write a short paragraph explaining *why it's OK*
5
+ to detect it that way. Four questions: how much damage does a wrong answer do, how often does
6
+ this run, how likely is the outside thing to change shape on you, and what happens when it
7
+ fails.
8
+
9
+ A pre-commit check enforces that rule. But it only inspects the files you are committing
10
+ *right now*. So a file that slipped into `main` without ever tripping the check is never
11
+ looked at again.
12
+
13
+ That's what happened to `src/commands/devClaimCheck.ts`. It arrived in June, it reads GitHub
14
+ by running `gh` and parsing the JSON that comes back — textbook state detection — and it has
15
+ no rationale at all.
16
+
17
+ **Why that stopped being merely untidy.** Merging `main` into an older branch stages *every
18
+ file in main*. Git then treats you as the author of all of it, so the check inspects the whole
19
+ thing, finds this file, and refuses your commit — for a violation you did not write and cannot
20
+ see in your own diff. Anyone trying to bring an old pull request up to date walks into it. It
21
+ blocked me last night.
22
+
23
+ **The change is one comment.** It adds the rationale that should have been there in June.
24
+
25
+ The one part worth reading is the "what happens when it fails" answer, because it is not
26
+ flattering. If `gh` genuinely breaks — missing, not logged in, no network — the tool says so
27
+ out loud and tells you it only managed to scan the specs. Good. But if `gh` returns *nothing
28
+ at all*, that empty result quietly becomes "zero pull requests claim these files", with no
29
+ warning. A check that could not run ends up looking exactly like a check that ran and found
30
+ everything clear.
31
+
32
+ That path is narrow, and this change does not fix it. It writes it down instead of leaving it
33
+ unmentioned, and it is tracked separately. A rationale that only lists reassuring facts is
34
+ worth very little — the point of the rule is to surface the part someone should worry about.
35
+
36
+ No behaviour changes. Nothing runs differently.
37
+
38
+
39
+ ## Correction after opening: this was TWO files, not one
40
+
41
+ The first version of this change covered only `devClaimCheck.ts` and claimed that unblocked merging
42
+ `main` into an older branch. **That claim was false**, and an A/B test caught it: branching from a
43
+ pre-#813 `main` commit and staging a merge of current `main` flagged **two** files —
44
+ `devCiFailures.ts` as well. Fixing one of two blockers unblocks nothing.
45
+
46
+ `devCiFailures.ts` now carries its own rationale and registry row. It is marked **🔵 Exempt** rather
47
+ than Partial, because unlike its sibling every failure path is loud: a non-zero `gh` exit rejects
48
+ with captured stderr, and its `JSON.parse(stdout)` carries no `|| 'null'` default, so empty output
49
+ throws rather than degrading into a successful-looking empty result.
50
+
51
+ **How the check nearly fooled me.** My first A/B run reported the fixed side PASSING — but the merge
52
+ had failed (a ref I had not fetched), so nothing was staged and the checker exited 0 over an empty
53
+ file list. A vacuous pass is indistinguishable from a real one unless you assert the check had input.
54
+ The re-run prints staged counts: 7,499 files / 905 `src/*.ts` on the failing side, and refuses to
55
+ read 0 staged files as a pass.
@@ -0,0 +1,36 @@
1
+ # ELI16 — the gate told authors to add a registry row that was already there
2
+
3
+ There is a registry listing every place Instar reads state from something it doesn't control.
4
+ A pre-commit gate uses it: if your file is in the registry *and* carries a rationale comment,
5
+ the gate lets it through.
6
+
7
+ For files under `src/providers/`, that lookup could never succeed.
8
+
9
+ **Why.** The gate turned `src/providers/adapters/foo/Bar.ts` into
10
+ `providers/adapters/foo/Bar.ts` and searched the registry for that string. But the registry's
11
+ provider section writes its paths relative to `src/providers/`, so the row actually says
12
+ `adapters/foo/Bar.ts`. The two never matched — 21 of the 23 provider rows are written that way.
13
+
14
+ The result: a file listed in the registry — one of them appears in **three** rows — was still
15
+ refused, with a message telling the author to add a registry entry. Adding the row again would
16
+ not have helped. That is the worst kind of gate message: it is confidently wrong about what
17
+ would fix it.
18
+
19
+ **Why nobody noticed.** The test file for this gate builds a throwaway repo, copies the script
20
+ into it, writes a registry fixture — and then runs the *original* script instead of the copy.
21
+ The script finds its registry relative to its own folder, so it read the real repo's registry
22
+ while reading the staged files from the throwaway one. Every registry fixture a test wrote was
23
+ quietly ignored, so this whole branch had no working test coverage. That is fixed here too, by
24
+ running the copy.
25
+
26
+ **How I know the fix works rather than believing it.** I wrote two tests: the provider case, and
27
+ a control using the ordinary path form that should already have worked. Before the fix the
28
+ provider one failed and the control passed. After, both pass, and the 22 tests that were already
29
+ there still pass.
30
+
31
+ Worth saying: the control failed on my first attempt too, which meant my explanation was wrong.
32
+ Chasing that disagreement is what turned up the harness defect. A control test that fails is
33
+ telling you something.
34
+
35
+ **Scope.** A registry entry still does not exempt a file on its own — a rationale or a canary is
36
+ still required. This only stops the gate from ignoring a registry row that genuinely exists.
@@ -0,0 +1,73 @@
1
+ # Side-effects review — Rule 3.1 rationale for `devClaimCheck`'s gh detector
2
+
3
+ **Change:** one doc-comment added above `defaultGhJson` in `src/commands/devClaimCheck.ts`.
4
+ 23 lines, comment-only. No statement, expression, signature, export, or type is modified.
5
+
6
+ ## What the change can affect
7
+
8
+ | Surface | Effect | Why |
9
+ |---|---|---|
10
+ | Runtime behaviour | **None** | A block comment. `tsc` emits identical JS; no code path is reachable through it. |
11
+ | Public API / CLI | **None** | `dev:claim-check` flags, output, and exit codes are untouched. |
12
+ | Tests | **None expected** | No test asserts on this file's source text. |
13
+ | The Rule 3 pre-commit gate | **Intended change** | This file stops being a violation. Verified: the gate refused this exact commit before the comment and accepted it after. |
14
+ | Other repos / migration | **None** | Not an agent-installed file, no config default, no template, no hook. Migration Parity does not apply. |
15
+ | Multi-machine posture | **N/A** | No state surface introduced. |
16
+
17
+ ## The risk worth naming
18
+
19
+ The change is safe. The thing it *documents* is not, and I want that visible rather than
20
+ buried in a comment.
21
+
22
+ `JSON.parse(stdout || 'null')` resolves `null` on empty stdout. The caller's
23
+ `(await ghJson(...)) as ClaimPr[] ?? []` turns that into an empty array, and an empty array is
24
+ indistinguishable from "no open PR claims these files". Meanwhile a *thrown* error is handled
25
+ properly — it sets `ghDegraded` and the tool reports spec-scan-only.
26
+
27
+ So the loud path is loud and the quiet path is silently clean. That is the failure shape the
28
+ constitution calls out directly: a check that cannot run must not be indistinguishable from
29
+ one that ran clean.
30
+
31
+ **Not fixed here, deliberately.** Fixing it means changing behaviour (treating empty stdout as
32
+ a degradation), which deserves its own review and its own tests. Bundling it into a
33
+ comment-only change would hide a behaviour change inside a documentation commit. It is filed
34
+ separately.
35
+
36
+ **Reachability:** narrow. `gh pr list --json` emits `[]` on success, not empty output. It
37
+ would take a `gh` build that exits 0 while writing nothing, or truncated output. Low
38
+ likelihood, and the consequence is a false all-clear on an advisory tool — not a wrong gate
39
+ verdict.
40
+
41
+ ## Rollback
42
+
43
+ `git revert`. Nothing depends on it; reverting restores the pre-existing violation and with it
44
+ the merge blocker.
45
+
46
+ ## What I verified rather than assumed
47
+
48
+ - The file is `main`'s, not the PR's — it arrived via #813 (`144ff6122`, 2026-06-05) and is
49
+ absent from the branch diff.
50
+ - `main`'s copy carries zero `RULE 3` markers (`grep -c` → 0).
51
+ - The refusal is real and reproducible: the same staged commit was blocked before the comment
52
+ and passed the Rule 3 check after it.
53
+ - The fallback asymmetry is read from the code, not inferred — `catch` at the call site sets
54
+ `ghDegraded`; the `?? []` at lines 197/201 absorbs `null` with no flag.
55
+
56
+
57
+ ## Correction after opening: this was TWO files, not one
58
+
59
+ The first version of this change covered only `devClaimCheck.ts` and claimed that unblocked merging
60
+ `main` into an older branch. **That claim was false**, and an A/B test caught it: branching from a
61
+ pre-#813 `main` commit and staging a merge of current `main` flagged **two** files —
62
+ `devCiFailures.ts` as well. Fixing one of two blockers unblocks nothing.
63
+
64
+ `devCiFailures.ts` now carries its own rationale and registry row. It is marked **🔵 Exempt** rather
65
+ than Partial, because unlike its sibling every failure path is loud: a non-zero `gh` exit rejects
66
+ with captured stderr, and its `JSON.parse(stdout)` carries no `|| 'null'` default, so empty output
67
+ throws rather than degrading into a successful-looking empty result.
68
+
69
+ **How the check nearly fooled me.** My first A/B run reported the fixed side PASSING — but the merge
70
+ had failed (a ref I had not fetched), so nothing was staged and the checker exited 0 over an empty
71
+ file list. A vacuous pass is indistinguishable from a real one unless you assert the check had input.
72
+ The re-run prints staged counts: 7,499 files / 905 `src/*.ts` on the failing side, and refuses to
73
+ read 0 staged files as a pass.
@@ -0,0 +1,57 @@
1
+ # Side-effects review — Rule 3 gate registry lookup (provider paths)
2
+
3
+ **Change:** `isInRegistry()` in `scripts/check-rule3-coverage.cjs` gains a second, narrowly-scoped
4
+ path form; `tests/unit/scripts/check-rule3-coverage.test.ts` runs the copied script instead of the
5
+ original and gains 2 tests + a registry-fixture helper.
6
+
7
+ ## Direction of effect — the only question that matters for a gate
8
+
9
+ This makes the gate **strictly more permissive**, so the risk to weigh is a false ACCEPT, never a
10
+ false refusal.
11
+
12
+ | Surface | Effect |
13
+ |---|---|
14
+ | Non-provider files | **None.** The widened form is behind `filepath.startsWith('src/providers/')`, so no other file can gain a match it did not already have. |
15
+ | Provider files, registered, with rationale | Now correctly accepted (was refused). **This is the fix.** |
16
+ | Provider files, registered, no rationale/canary | Still refused — `inRegistry && (hasRationale \|\| hasCanary)` is unchanged. |
17
+ | Provider files, unregistered | Still refused. Containment against a row that does not exist still fails. |
18
+ | Runtime / shipped product | **None.** A pre-commit script; not in `src/`, not bundled, not executed by the server. |
19
+
20
+ ## The false-accept surface, stated plainly
21
+
22
+ Containment is a substring test, so a short row path could in principle match an unintended file.
23
+ That property is **pre-existing** and unchanged in kind — this only adds a second candidate string
24
+ for paths already under `src/providers/`. A file would need to be under `src/providers/` *and* have
25
+ its `src/providers/`-relative path appear verbatim in the registry, which is precisely the
26
+ condition the fix exists to honour.
27
+
28
+ I considered resolving each row against its section heading instead, which would remove the
29
+ guesswork entirely. It is the better long-term shape and a larger change; it is not done here.
30
+
31
+ ## Test-harness change — read this as a coverage change, not a cosmetic one
32
+
33
+ `runCheck` now executes the copy inside the tmp repo. The script resolves the registry from
34
+ `__dirname/../specs/`, so running the original read the **real** repo's registry while reading
35
+ staged files from the tmp repo.
36
+
37
+ Consequence: every registry fixture written by a test was silently ignored, and the
38
+ "already in the registry" branch had **no reachable coverage at all**. `beforeEach` had always
39
+ copied the script in — the copy was simply never run.
40
+
41
+ All 22 pre-existing tests pass unchanged under the corrected harness, which is the evidence that
42
+ this repaired coverage rather than altering what those tests assert.
43
+
44
+ ## Verification
45
+
46
+ - **Red → green, observed:** before the fix, the provider test failed and the `src/`-relative
47
+ control passed (1 failed / 23 passed). After, 24/24.
48
+ - The control is the load-bearing part: it fails if the cause is anything other than the provider
49
+ path form.
50
+ - **A correction this produced:** on my first attempt the control failed *too*, which meant my
51
+ explanation was wrong — a registry entry alone never exempted anything. Following that
52
+ disagreement is what surfaced the harness defect. The earlier claim that 26 files on `main` were
53
+ affected is withdrawn: all 26 lack a rationale and would be refused regardless.
54
+
55
+ ## Rollback
56
+
57
+ `git revert`. Restores the unreachable lookup; no state, no migration, no config.