instar 1.3.1160 → 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.
@@ -2,7 +2,7 @@
2
2
  "schemaVersion": 1,
3
3
  "generatedFrom": "source-tree",
4
4
  "registrySha256": "81b53363a440e832672618965540b3e507ae0d93adcc67ec2b93daf7933b3ab4",
5
- "packageVersion": "1.3.1160",
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": "05daed4cc90fbaa0916c051d8cf8985aa11cdc27f15f50ea5a3ffeff29550857",
2
+ "sha256": "43851e9ac8b44d594fefed64286f3c7d1a9e5028b8b96934309d13cb50851fad",
3
3
  "registrySha256": "81b53363a440e832672618965540b3e507ae0d93adcc67ec2b93daf7933b3ab4",
4
- "packageVersion": "1.3.1160"
4
+ "packageVersion": "1.3.1161"
5
5
  }
@@ -2,5 +2,5 @@
2
2
  "sha256": "81b53363a440e832672618965540b3e507ae0d93adcc67ec2b93daf7933b3ab4",
3
3
  "articleCount": 88,
4
4
  "generatedFrom": "docs/STANDARDS-REGISTRY.md",
5
- "packageVersion": "1.3.1160"
5
+ "packageVersion": "1.3.1161"
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.1160",
3
+ "version": "1.3.1161",
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",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-08-15T04:54:47.730Z",
5
- "instarVersion": "1.3.1160",
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.1160",
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": "05daed4cc90fbaa0916c051d8cf8985aa11cdc27f15f50ea5a3ffeff29550857",
2
+ "sha256": "43851e9ac8b44d594fefed64286f3c7d1a9e5028b8b96934309d13cb50851fad",
3
3
  "registrySha256": "81b53363a440e832672618965540b3e507ae0d93adcc67ec2b93daf7933b3ab4",
4
- "packageVersion": "1.3.1160"
4
+ "packageVersion": "1.3.1161"
5
5
  }
@@ -2,5 +2,5 @@
2
2
  "sha256": "81b53363a440e832672618965540b3e507ae0d93adcc67ec2b93daf7933b3ab4",
3
3
  "articleCount": 88,
4
4
  "generatedFrom": "docs/STANDARDS-REGISTRY.md",
5
- "packageVersion": "1.3.1160"
5
+ "packageVersion": "1.3.1161"
6
6
  }
@@ -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 — 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.