instar 1.3.1159 → 1.3.1161
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/dist/data/standards-guard-index.json +1 -1
- package/dist/data/standards-guard-index.meta.json +2 -2
- package/dist/data/standards-registry.meta.json +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +2 -2
- package/src/data/standards-guard-index.json +1 -1
- package/src/data/standards-guard-index.meta.json +2 -2
- package/src/data/standards-registry.meta.json +1 -1
- package/upgrades/{1.3.1159.md → 1.3.1160.md} +27 -0
- package/upgrades/1.3.1161.md +50 -0
- package/upgrades/side-effects/gemini-env-refusal-extract.md +60 -0
- package/upgrades/side-effects/native-module-health-banner.md +60 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"generatedFrom": "source-tree",
|
|
4
4
|
"registrySha256": "81b53363a440e832672618965540b3e507ae0d93adcc67ec2b93daf7933b3ab4",
|
|
5
|
-
"packageVersion": "1.3.
|
|
5
|
+
"packageVersion": "1.3.1161",
|
|
6
6
|
"guards": [
|
|
7
7
|
{
|
|
8
8
|
"ref": "docs/audits/phase-b/f10-triage.md",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"sha256": "
|
|
2
|
+
"sha256": "43851e9ac8b44d594fefed64286f3c7d1a9e5028b8b96934309d13cb50851fad",
|
|
3
3
|
"registrySha256": "81b53363a440e832672618965540b3e507ae0d93adcc67ec2b93daf7933b3ab4",
|
|
4
|
-
"packageVersion": "1.3.
|
|
4
|
+
"packageVersion": "1.3.1161"
|
|
5
5
|
}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-08-
|
|
5
|
-
"instarVersion": "1.3.
|
|
4
|
+
"generatedAt": "2026-08-15T05:03:51.309Z",
|
|
5
|
+
"instarVersion": "1.3.1161",
|
|
6
6
|
"entryCount": 202,
|
|
7
7
|
"entries": {
|
|
8
8
|
"hook:session-start": {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"generatedFrom": "source-tree",
|
|
4
4
|
"registrySha256": "81b53363a440e832672618965540b3e507ae0d93adcc67ec2b93daf7933b3ab4",
|
|
5
|
-
"packageVersion": "1.3.
|
|
5
|
+
"packageVersion": "1.3.1161",
|
|
6
6
|
"guards": [
|
|
7
7
|
{
|
|
8
8
|
"ref": "docs/audits/phase-b/f10-triage.md",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"sha256": "
|
|
2
|
+
"sha256": "43851e9ac8b44d594fefed64286f3c7d1a9e5028b8b96934309d13cb50851fad",
|
|
3
3
|
"registrySha256": "81b53363a440e832672618965540b3e507ae0d93adcc67ec2b93daf7933b3ab4",
|
|
4
|
-
"packageVersion": "1.3.
|
|
4
|
+
"packageVersion": "1.3.1161"
|
|
5
5
|
}
|
|
@@ -5,6 +5,17 @@
|
|
|
5
5
|
|
|
6
6
|
## What Changed
|
|
7
7
|
|
|
8
|
+
Extracted `tests/helpers/geminiEnvRefusal.ts` and its two call sites
|
|
9
|
+
(`tests/e2e/gemini-cli-alive-lifecycle.test.ts`,
|
|
10
|
+
`tests/e2e/gemini-setup-narrative-lifecycle.test.ts`) plus its unit test out of the
|
|
11
|
+
blocked `echo/authorship-provenance` branch and onto main on their own.
|
|
12
|
+
|
|
13
|
+
The two live-gemini E2Es gate on `haveGemini = !!detectGeminiPath()` — whether the
|
|
14
|
+
BINARY IS INSTALLED. An installed-but-uncredentialed CLI exits 41 before processing
|
|
15
|
+
the prompt, so the assertion downstream can neither pass nor meaningfully fail. CI is
|
|
16
|
+
green only because no gemini binary exists there; the box that HAS gemini is the one
|
|
17
|
+
that goes red.
|
|
18
|
+
|
|
8
19
|
The two vitest globalSetup files that prepare the packed standards-registry asset
|
|
9
20
|
(`tests/setup/build-dist.globalSetup.ts` and
|
|
10
21
|
`tests/setup/ensure-registry-asset.globalSetup.ts`) decided whether to regenerate it
|
|
@@ -26,6 +37,16 @@ None — internal change (no user-facing surface).
|
|
|
26
37
|
|
|
27
38
|
## Evidence
|
|
28
39
|
|
|
40
|
+
- A full unit+integration+e2e run on a current checkout (3070 files) produced
|
|
41
|
+
**exactly 2 failures — both of these files**, both on
|
|
42
|
+
`Gemini CLI exited 41 — you must specify the GEMINI_API_KEY environment variable`.
|
|
43
|
+
- The helper is ABSENT from main (404 via the contents API, against a control showing
|
|
44
|
+
7 files DO exist in `tests/helpers/`), and the failing test on main references it 0
|
|
45
|
+
times — so the fix genuinely never landed.
|
|
46
|
+
- Main has not modified either e2e file since the authorship branch's base, so this
|
|
47
|
+
reverts nothing; the diff is +37/-6 against main.
|
|
48
|
+
- `tsc --noEmit` exit 0 via the real binary.
|
|
49
|
+
|
|
29
50
|
- Measured 2026-08-15: in a checkout whose asset was generated at 17:59 from a source
|
|
30
51
|
three hours newer, `standards-registry-asset`, `standards-enforcement-auditor` and
|
|
31
52
|
`standards-coverage-route` failed with 8 assertions. Regenerating the asset alone
|
|
@@ -38,3 +59,9 @@ None — internal change (no user-facing surface).
|
|
|
38
59
|
aliased import cannot defeat it — the alias blindness found in an invariant test
|
|
39
60
|
earlier this week.
|
|
40
61
|
- `tsc --noEmit` exit 0; full lint chain exit 0 across 45 lints.
|
|
62
|
+
|
|
63
|
+
## Why it is separate
|
|
64
|
+
|
|
65
|
+
Out-of-charter work absorbed into a large blocked change becomes hostage to that
|
|
66
|
+
change's gate. The Zero-Failure Standard was satisfied on a branch and NOT on main,
|
|
67
|
+
which is the only place it counts.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
Adds `tests/setup/nativeModuleHealth.globalSetup.ts`, wired into `vitest.config.ts`
|
|
9
|
+
after `build-dist.globalSetup.ts`. It probes better-sqlite3 once (load AND open an
|
|
10
|
+
in-memory DB) and, only when that fails, prints one line at setup and a single
|
|
11
|
+
banner at TEARDOWN — which vitest renders after the run summary, beside the failure
|
|
12
|
+
count.
|
|
13
|
+
|
|
14
|
+
## What to Tell Your User
|
|
15
|
+
|
|
16
|
+
None — internal change (no user-facing surface).
|
|
17
|
+
|
|
18
|
+
## Summary of New Capabilities
|
|
19
|
+
|
|
20
|
+
None — internal change (no user-facing surface).
|
|
21
|
+
|
|
22
|
+
## Evidence
|
|
23
|
+
|
|
24
|
+
- `tests/unit/native-module-health-banner.test.ts` — 11/11.
|
|
25
|
+
- **Placement proven END-TO-END, not asserted**: the broken branch was forced by
|
|
26
|
+
mutation (count-asserted at exactly 1 — the first attempt applied 0 times and was
|
|
27
|
+
caught by that control), a suite was run, and the banner rendered AFTER the
|
|
28
|
+
`Test Files / Tests / Duration` summary. Source restored byte-exact, 0 markers.
|
|
29
|
+
- Probe covers the incident's real signature — the module LOADS but cannot open a
|
|
30
|
+
database. A require-only probe would have reported healthy for the entire outage;
|
|
31
|
+
that case is pinned.
|
|
32
|
+
- Over-block control: given a healthy probe it writes NOTHING and returns NO
|
|
33
|
+
teardown. It also cannot throw — a throwing probe is reported, not propagated,
|
|
34
|
+
because this runs before every suite.
|
|
35
|
+
- `tsc --noEmit` exit 0 via the real binary; full lint chain exit 0.
|
|
36
|
+
|
|
37
|
+
## Why
|
|
38
|
+
|
|
39
|
+
Measured 2026-08-15: a local full suite reported 225 failing files; 108 were
|
|
40
|
+
downstream of better-sqlite3 having no native binary in that checkout (the install
|
|
41
|
+
had skipped its postinstall). instar diagnosed it correctly and printed the remedy
|
|
42
|
+
**189 times**, and that did not help — 189 lines in a 21MB log is volume, not a
|
|
43
|
+
signal. This does not add detection; it moves the existing diagnosis to where it is
|
|
44
|
+
read.
|
|
45
|
+
|
|
46
|
+
## Not closed
|
|
47
|
+
|
|
48
|
+
Scoped to better-sqlite3 alone — deliberately, since generalising from one incident
|
|
49
|
+
is the over-read that caused it. The install hygiene itself is unchanged; this makes
|
|
50
|
+
its consequence legible, it does not prevent it.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Side-effects review — extracting the gemini environmental-refusal classifier
|
|
2
|
+
|
|
3
|
+
## The change
|
|
4
|
+
|
|
5
|
+
Moves `tests/helpers/geminiEnvRefusal.ts`, its unit test, and its two E2E call sites out of the blocked
|
|
6
|
+
`echo/authorship-provenance` branch and onto main on their own. No new code: the same four files,
|
|
7
|
+
standing alone where they can land. Test-only; no runtime surface.
|
|
8
|
+
|
|
9
|
+
## Why it is separate, which is the actual point
|
|
10
|
+
|
|
11
|
+
The two live-gemini E2Es gate on whether the BINARY IS INSTALLED. An installed-but-uncredentialed CLI
|
|
12
|
+
exits 41 before it processes the prompt, so the assertion downstream can neither pass nor meaningfully
|
|
13
|
+
fail. CI is green only because no gemini binary exists there — the box that HAS gemini is the one that
|
|
14
|
+
goes red. That is a Zero-Failure Standard violation on main today.
|
|
15
|
+
|
|
16
|
+
The fix was written hours ago, out-of-charter, and committed to whichever branch was checked out at the
|
|
17
|
+
time — a large change now blocked at an approval gate for reasons unrelated to gemini. So the standard
|
|
18
|
+
was satisfied on a branch and NOT on main, which is the only place it counts. **Out-of-charter work
|
|
19
|
+
absorbed into a blocked change becomes hostage to that change's gate.**
|
|
20
|
+
|
|
21
|
+
## Review answers
|
|
22
|
+
|
|
23
|
+
1. **Over-block.** The classifier skips ONLY on causes the CLI itself names (missing credentials, quota
|
|
24
|
+
exhaustion, a version-manager miss). Everything else still fails. The rejected alternative — a live
|
|
25
|
+
preflight asking "can this box reach gemini at all?" — is recorded in the helper's own header as the
|
|
26
|
+
wrong trade: it would also skip on a transient failure, so a real regression would vanish silently.
|
|
27
|
+
Between a false red (visible, blocks a push) and a silent skip (invisible), the silent skip is worse.
|
|
28
|
+
2. **Under-block.** A NEW environmental cause with different wording still fails loudly. That is the
|
|
29
|
+
intended direction; the list grows only when a real cause is observed.
|
|
30
|
+
3. **Level-of-abstraction fit.** The classification is shared once and the tests decide what to do with
|
|
31
|
+
the answer — this is the third environmental cause these files handle, which is the point at which
|
|
32
|
+
two copies stop being maintainable.
|
|
33
|
+
4. **Signal vs authority.** Not a gate. It decides whether a test asserts or skips.
|
|
34
|
+
5. **Interactions.** None outside the three test files. No production import.
|
|
35
|
+
6. **External surfaces.** None.
|
|
36
|
+
7. **Multi-machine posture.** Machine-local BY DESIGN — it classifies THIS box's credential state.
|
|
37
|
+
8. **Rollback cost.** Revert; the two e2e files return to failing on an uncredentialed box.
|
|
38
|
+
|
|
39
|
+
## Evidence
|
|
40
|
+
|
|
41
|
+
- **The negative control is main itself, measured rather than mutated.** A full run on a current
|
|
42
|
+
checkout (3073 files) produced exactly 2 failures — these two files — both on
|
|
43
|
+
`Gemini CLI exited 41 — you must specify the GEMINI_API_KEY environment variable`.
|
|
44
|
+
- On this branch the same three files pass, 24 tests, with the E2E bodies skipping loudly:
|
|
45
|
+
*"Skipping live Gemini narrative assertion: no credentials configured (the child env is key-free by
|
|
46
|
+
design; OAuth creds absent)."*
|
|
47
|
+
- The helper is ABSENT from main (404 via the contents API, against a control showing 7 files DO exist
|
|
48
|
+
in `tests/helpers/`), and the failing test on main references it 0 times — the fix genuinely never
|
|
49
|
+
landed.
|
|
50
|
+
- Main has not modified either e2e file since the source branch's base, so this reverts nothing; the
|
|
51
|
+
diff against main is +37/-6 on the e2e files plus the two new files.
|
|
52
|
+
- `tsc --noEmit` exit 0 via the real binary.
|
|
53
|
+
|
|
54
|
+
## Class closure — what this does NOT close
|
|
55
|
+
|
|
56
|
+
- **The live smoke assertion still never executes on this box.** It skips, correctly and loudly. Making
|
|
57
|
+
it exercisable needs a credential decision that is the operator's, not a code change.
|
|
58
|
+
- **Only gemini.** No audit was done of other live-CLI E2Es for the same installed-vs-usable confusion.
|
|
59
|
+
- **The stranding pattern itself is untouched.** Nothing prevents the next out-of-charter fix from being
|
|
60
|
+
committed to a branch that later blocks. That is a process observation, recorded rather than solved.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Side-effects review — native-module health banner
|
|
2
|
+
|
|
3
|
+
## The change
|
|
4
|
+
|
|
5
|
+
A vitest globalSetup that probes better-sqlite3 once and, only on failure, emits one
|
|
6
|
+
setup line plus a single banner at teardown (rendered after the run summary). Adds no
|
|
7
|
+
detection: it relocates a diagnosis instar already produces to where a reader looks.
|
|
8
|
+
|
|
9
|
+
## Review answers
|
|
10
|
+
|
|
11
|
+
1. **Over-block.** The dominant risk, because this runs before EVERY suite on every
|
|
12
|
+
machine. It writes nothing and returns no teardown on a healthy probe — pinned by a
|
|
13
|
+
control. It never fails, skips, or changes an exit code. And it cannot throw: the
|
|
14
|
+
probe is wrapped even though the default probe already catches internally, because
|
|
15
|
+
an exception here would take down every run — strictly worse than the degraded
|
|
16
|
+
state it describes.
|
|
17
|
+
2. **Under-block.** It watches ONE module. A different native module breaking silently
|
|
18
|
+
gets no banner. That is deliberate: generalising to "native modules" from a single
|
|
19
|
+
incident would be inventing a class, which is the exact over-read that caused the
|
|
20
|
+
incident. It also cannot detect a module that loads, opens a DB, and misbehaves
|
|
21
|
+
later — the probe is a smoke test, not a health monitor.
|
|
22
|
+
3. **Level-of-abstraction fit.** globalSetup is the right layer: a per-file check is
|
|
23
|
+
invisible to the next file (this file's sibling records that lesson explicitly),
|
|
24
|
+
and teardown is the only hook that runs after the summary.
|
|
25
|
+
4. **Signal vs authority.** Pure signal. It gates nothing and rejects nothing.
|
|
26
|
+
5. **Interactions.** Ordered AFTER `build-dist.globalSetup.ts`, so its teardown runs
|
|
27
|
+
FIRST (teardowns run in reverse) and the banner sits closest to the summary. It
|
|
28
|
+
shares no state with any other setup.
|
|
29
|
+
6. **External surfaces.** None. Test-run stderr only; nothing ships to an agent or a
|
|
30
|
+
user, no file is written.
|
|
31
|
+
7. **Multi-machine posture.** Machine-local BY DESIGN — it reports on THIS checkout's
|
|
32
|
+
node_modules. There is nothing to replicate; a peer's binary state is irrelevant to
|
|
33
|
+
a local run.
|
|
34
|
+
8. **Rollback cost.** Remove the config entry, or delete the file. No migration, no
|
|
35
|
+
state, no consumer.
|
|
36
|
+
|
|
37
|
+
## Class closure — what this does NOT close
|
|
38
|
+
|
|
39
|
+
- **It does not prevent the cause.** An install that skips its postinstall still
|
|
40
|
+
produces a broken checkout; this only makes the consequence readable. The hygiene
|
|
41
|
+
fix (never installing with `--ignore-scripts`) is a habit, not code, and I am not
|
|
42
|
+
claiming otherwise.
|
|
43
|
+
- **Only better-sqlite3**, and only at run start.
|
|
44
|
+
- **Placement depends on vitest rendering teardown output after the summary.** That is
|
|
45
|
+
measured on vitest 2.1.9 here, not guaranteed by contract. If a future version
|
|
46
|
+
reorders it, the setup line still fires at the top — which is why both exist.
|
|
47
|
+
|
|
48
|
+
## Evidence
|
|
49
|
+
|
|
50
|
+
- 11/11 in `tests/unit/native-module-health-banner.test.ts`; `tsc --noEmit` exit 0 via
|
|
51
|
+
the real binary; full lint chain exit 0.
|
|
52
|
+
- **Placement proven end-to-end.** The broken branch was forced by mutation and a real
|
|
53
|
+
suite was run; the banner rendered AFTER `Test Files / Tests / Duration`. **My first
|
|
54
|
+
mutation attempt applied 0 times and its own count control caught it** — that run
|
|
55
|
+
would have "passed" while proving nothing, which is the defect class this whole
|
|
56
|
+
change is about. Re-applied against the real line (count asserted at exactly 1),
|
|
57
|
+
re-run, restored byte-exact with 0 markers.
|
|
58
|
+
- The incident's real signature is pinned: a module that LOADS but cannot open a
|
|
59
|
+
database is reported BROKEN. A require-only probe would have called the entire
|
|
60
|
+
outage healthy.
|