instar 1.3.1052 → 1.3.1054

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,5 +2,5 @@
2
2
  "sha256": "b75c147afd1f5a9843ca4eac372159f3623f24731fe63b2f59e48043ae488af9",
3
3
  "articleCount": 82,
4
4
  "generatedFrom": "docs/STANDARDS-REGISTRY.md",
5
- "packageVersion": "1.3.1052"
5
+ "packageVersion": "1.3.1054"
6
6
  }
@@ -24,8 +24,8 @@ export interface VerificationResult {
24
24
  attributionKey: string;
25
25
  preThrottleRate: number;
26
26
  postThrottleRate: number;
27
- ratio: number;
28
- successfullyThrottled: boolean;
27
+ ratio: number | null;
28
+ successfullyThrottled: boolean | null;
29
29
  verifiedAt: string;
30
30
  }
31
31
  export interface BurnVerifierDeps {
@@ -1 +1 @@
1
- {"version":3,"file":"BurnVerifier.d.ts","sourceRoot":"","sources":["../../src/monitoring/BurnVerifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAMjE,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB,EAAE,OAAO,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAC9C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE;QACP,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwE;IACrG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4C;gBAEzD,IAAI,EAAE,gBAAgB;IAgBlC;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAc5E;;;OAGG;IACH,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,kBAAkB;IAqBpF,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,YAAY;CAUrB;AAID,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAUnE"}
1
+ {"version":3,"file":"BurnVerifier.d.ts","sourceRoot":"","sources":["../../src/monitoring/BurnVerifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAMjE,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,qBAAqB,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAC9C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE;QACP,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwE;IACrG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4C;gBAEzD,IAAI,EAAE,gBAAgB;IAgBlC;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAc5E;;;OAGG;IACH,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,kBAAkB;IAuBpF,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,YAAY;CAUrB;AAID,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAUnE"}
@@ -73,8 +73,10 @@ export class BurnVerifier {
73
73
  const row = rows.find((r) => r.attributionKey === attributionKey);
74
74
  const postThrottleTokens = row ? (row.freshTokens ?? row.totalTokens) : 0;
75
75
  const postThrottleRate = postThrottleTokens * (60 * 60 * 1000 / this.sampleWindowMs);
76
- const ratio = preThrottleRate > 0 ? postThrottleRate / preThrottleRate : 0;
77
- const successfullyThrottled = ratio < this.successRatio;
76
+ const ratio = Number.isFinite(preThrottleRate) && preThrottleRate > 0 && Number.isFinite(postThrottleRate)
77
+ ? postThrottleRate / preThrottleRate
78
+ : null;
79
+ const successfullyThrottled = ratio === null ? null : ratio < this.successRatio;
78
80
  const result = {
79
81
  attributionKey,
80
82
  preThrottleRate,
@@ -88,16 +90,20 @@ export class BurnVerifier {
88
90
  }
89
91
  fireFollowUp(r) {
90
92
  const friendlyName = humanize(r.attributionKey);
91
- const text = r.successfullyThrottled
92
- ? `Caught and contained. ${friendlyName}: before the slowdown it was running at about ` +
93
- `${formatRate(r.preThrottleRate)}; now it is running at about ${formatRate(r.postThrottleRate)} ` +
94
- `— a ${formatReduction(r.ratio)} drop. The throttle will lift on its own at the configured time, ` +
95
- `or you can release it sooner from the original alert.`
96
- : `Slowdown did not take effect. I tried to slow ${friendlyName} down, but the rate did ` +
97
- `not drop (was ${formatRate(r.preThrottleRate)}, still at ${formatRate(r.postThrottleRate)}). ` +
98
- `This usually means one of two things: the attribution is pointing at the wrong code path ` +
99
- `and the real offender is elsewhere, or the offending path does not honour the slowdown. ` +
100
- `You may need to look at this one manually.`;
93
+ const text = r.ratio === null || r.successfullyThrottled === null
94
+ ? `Slowdown verification was inconclusive. I tried to verify ${friendlyName}, but the ` +
95
+ `before-slowdown rate was unavailable or zero. The current sample is ${formatRate(r.postThrottleRate)}, ` +
96
+ `but there is no measured baseline for a before-and-after comparison.`
97
+ : r.successfullyThrottled
98
+ ? `Caught and contained. ${friendlyName}: before the slowdown it was running at about ` +
99
+ `${formatRate(r.preThrottleRate)}; now it is running at about ${formatRate(r.postThrottleRate)} ` +
100
+ `— a ${formatReduction(r.ratio)} drop. The throttle will lift on its own at the configured time, ` +
101
+ `or you can release it sooner from the original alert.`
102
+ : `Slowdown did not take effect. I tried to slow ${friendlyName} down, but the rate did ` +
103
+ `not drop (was ${formatRate(r.preThrottleRate)}, still at ${formatRate(r.postThrottleRate)}). ` +
104
+ `This usually means one of two things: the attribution is pointing at the wrong code path ` +
105
+ `and the real offender is elsewhere, or the offending path does not honour the slowdown. ` +
106
+ `You may need to look at this one manually.`;
101
107
  this.fireTelegram(text);
102
108
  }
103
109
  fireTelegram(text) {
@@ -1 +1 @@
1
- {"version":3,"file":"BurnVerifier.js","sourceRoot":"","sources":["../../src/monitoring/BurnVerifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BurnVerifier.js","sourceRoot":"","sources":["../../src/monitoring/BurnVerifier.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hostMemoryPressure.d.ts","sourceRoot":"","sources":["../../src/monitoring/hostMemoryPressure.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;CACzB;AAED,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAqB/D;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAWrE;AAED,iGAAiG;AACjG,wBAAgB,wBAAwB,CAAC,IAAI,GAAE,WAAgB,GAAG,mBAAmB,CA2BpF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,GAAE,WAAgB,GAAG,MAAM,CAG7D"}
1
+ {"version":3,"file":"hostMemoryPressure.d.ts","sourceRoot":"","sources":["../../src/monitoring/hostMemoryPressure.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,yEAAyE;AACzE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;CACzB;AAED,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAwB/D;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAWrE;AAED,iGAAiG;AACjG,wBAAgB,wBAAwB,CAAC,IAAI,GAAE,WAAgB,GAAG,mBAAmB,CA2BpF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,GAAE,WAAgB,GAAG,MAAM,CAG7D"}
@@ -33,11 +33,14 @@ export function parseVmStat(output) {
33
33
  const compressorPages = parsePages('Pages occupied by compressor');
34
34
  const purgeablePages = parsePages('Pages purgeable');
35
35
  const totalPages = freePages + activePages + inactivePages + wiredPages + compressorPages;
36
+ if (totalPages === 0) {
37
+ throw new Error('vm_stat output contained no total memory pages');
38
+ }
36
39
  const totalGB = (totalPages * pageSize) / (1024 ** 3);
37
40
  const availablePages = freePages + inactivePages + purgeablePages;
38
41
  const freeGB = (availablePages * pageSize) / (1024 ** 3);
39
42
  const usedPages = totalPages - availablePages;
40
- const pressurePercent = totalPages > 0 ? (usedPages / totalPages) * 100 : 0;
43
+ const pressurePercent = (usedPages / totalPages) * 100;
41
44
  return { pressurePercent, freeGB, totalGB };
42
45
  }
43
46
  /** Pure: parse `/proc/meminfo` content → memory reading (Linux MemAvailable). */
@@ -1 +1 @@
1
- {"version":3,"file":"hostMemoryPressure.js","sourceRoot":"","sources":["../../src/monitoring/hostMemoryPressure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hostMemoryPressure.js","sourceRoot":"","sources":["../../src/monitoring/hostMemoryPressure.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.1052",
3
+ "version": "1.3.1054",
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-07-29T11:24:16.663Z",
5
- "instarVersion": "1.3.1052",
4
+ "generatedAt": "2026-07-29T11:40:48.373Z",
5
+ "instarVersion": "1.3.1054",
6
6
  "entryCount": 202,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -2,5 +2,5 @@
2
2
  "sha256": "b75c147afd1f5a9843ca4eac372159f3623f24731fe63b2f59e48043ae488af9",
3
3
  "articleCount": 82,
4
4
  "generatedFrom": "docs/STANDARDS-REGISTRY.md",
5
- "packageVersion": "1.3.1052"
5
+ "packageVersion": "1.3.1054"
6
6
  }
@@ -0,0 +1,28 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ The macOS memory reader now treats a successful `vm_stat` command with no
9
+ parseable total-page counters as a read failure. It uses the existing logged RSS
10
+ fallback instead of publishing zero-percent pressure from an empty denominator.
11
+
12
+ ## What to Tell Your User
13
+
14
+ Malformed macOS memory output can no longer make a machine look perfectly
15
+ healthy; Instar now says the native reading failed and uses its conservative
16
+ fallback.
17
+
18
+ ## Summary of New Capabilities
19
+
20
+ - Parse-validity detection for successful macOS memory-stat reads.
21
+
22
+ ## Evidence
23
+
24
+ - The focused test feeds non-empty but unparseable output and proves the RSS
25
+ fallback reports 93.75% pressure rather than zero.
26
+ - The existing thrown-reader fallback test remains unchanged and green.
27
+ - Removing the parse-validity check makes both new assertions fail.
28
+ - Fourteen focused tests and the full repository lint pass.
@@ -0,0 +1,26 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ Post-throttle verification now reports a missing or zero pre-throttle rate as
9
+ inconclusive. It returns nullable ratio and success fields instead of treating
10
+ an empty denominator as a perfect reduction.
11
+
12
+ ## What to Tell Your User
13
+
14
+ Instar no longer says a slowdown was successful when it has no measured
15
+ before-rate to compare with the current sample.
16
+
17
+ ## Summary of New Capabilities
18
+
19
+ - Explicit insufficient-evidence state for post-throttle verification.
20
+
21
+ ## Evidence
22
+
23
+ - The regression enters the zero-before-rate state and asserts a null ratio, a
24
+ null success result, and an inconclusive follow-up message.
25
+ - Restoring the fabricated zero ratio makes the regression fail.
26
+ - Eleven focused tests and the full repository lint pass.
@@ -0,0 +1,26 @@
1
+ # Slowdown verification now distinguishes success from missing evidence
2
+
3
+ After Instar installs a token-use slowdown, it compares the rate from before the
4
+ slowdown with a fresh rate several minutes later. A real reduction can support
5
+ the “Caught and contained” follow-up, while a rate that did not fall triggers a
6
+ warning that the slowdown may not be connected to the offending path.
7
+
8
+ The old calculation had a third state that it forced into the success path. If
9
+ the before-rate was missing or zero, there was no denominator for the
10
+ comparison. The code substituted a ratio of zero, interpreted that as a
11
+ one-hundred-percent reduction, and could send a reassuring message saying a
12
+ component had been contained while both displayed rates were zero. No
13
+ before-and-after claim was actually measurable.
14
+
15
+ Verification results now represent that third state directly. Both the ratio
16
+ and `successfullyThrottled` are null when the before-rate is unavailable, zero,
17
+ or otherwise invalid. The follow-up says verification was inconclusive, gives
18
+ the current sample, and explains that there is no measured baseline. Positive
19
+ finite baselines continue through the existing success and failure paths
20
+ unchanged.
21
+
22
+ The regression enters the broken state with a zero before-rate and a zero
23
+ current sample. It asserts the two null fields, the explanatory message, and
24
+ the absence of “Caught and contained.” Restoring the old zero fallback makes
25
+ the test fail. This changes no throttle, threshold, timer, or release behavior;
26
+ it only prevents missing evidence from becoming false reassurance.
@@ -0,0 +1,27 @@
1
+ # Malformed memory output no longer looks like a healthy machine
2
+
3
+ Instar measures memory pressure differently on macOS because the ordinary
4
+ free-memory number does not include memory the operating system can reclaim.
5
+ It runs the native `vm_stat` command, reads several page counters, and combines
6
+ them into total and available memory.
7
+
8
+ The reader already handled a command that throws or cannot run: it logs the
9
+ failure and falls back to a rough estimate based on the Instar process memory
10
+ and the machine total. But there was a second failure shape. The command could
11
+ succeed and return non-empty text that contained none of the expected page
12
+ counters. Every missing counter became zero, the total denominator became zero,
13
+ and the code returned zero-percent pressure. The machine then looked perfectly
14
+ healthy even though nothing had been measured.
15
+
16
+ The parser now rejects output whose total page count is zero. That rejection is
17
+ caught by the existing read-failure handler, so it uses the same logged RSS
18
+ fallback the original author already built. The throw path, fallback formula,
19
+ logging, thresholds, and real valid parser behavior are unchanged.
20
+
21
+ The regression deliberately supplies a non-empty string so it cannot pass
22
+ through the existing empty-output branch. With a simulated machine using
23
+ fifteen of sixteen gigabytes, malformed native output must produce the fallback
24
+ reading of 93.75-percent pressure, one gigabyte free, and sixteen gigabytes
25
+ total. Restoring the old parser makes that test report zero and fail. This keeps
26
+ unknown input from becoming a flattering health measurement without inventing
27
+ a new pressure policy.
@@ -0,0 +1,114 @@
1
+ # Side-Effects Review — Burn-verifier missing baseline
2
+
3
+ **Version / slug:** `burn-verifier-missing-baseline`
4
+ **Date:** `2026-07-29`
5
+ **Author:** `instar-codey`
6
+ **Second-pass reviewer:** `not required`
7
+
8
+ ## Summary of the change
9
+
10
+ `BurnVerifier.runVerification()` now returns `ratio: null` and
11
+ `successfullyThrottled: null` when no finite positive pre-throttle rate exists.
12
+ Its Telegram follow-up names the result as inconclusive instead of routing the
13
+ fabricated zero ratio through the successful “Caught and contained” message.
14
+
15
+ ## Decision-point inventory
16
+
17
+ - Verification evidence sufficiency — modified — a finite positive before-rate
18
+ and a finite current rate are required for a ratio and success decision.
19
+ - Throttle success threshold — passed through — measured ratios are still
20
+ compared with the existing configured `successRatio`.
21
+ - Throttle installation and release — passed through — no actuation changes.
22
+
23
+ ## 1. Over-block
24
+
25
+ No action is blocked. The new branch affects only a read-only verification
26
+ result and its follow-up message. A real zero before-rate cannot support a
27
+ percentage reduction because it has no usable denominator.
28
+
29
+ ## 2. Under-block
30
+
31
+ The verifier still accepts every finite positive before-rate, including small
32
+ values, and applies the configured threshold exactly as before. It does not
33
+ attempt to infer a missing baseline from unrelated telemetry.
34
+
35
+ ## 3. Level-of-abstraction fit
36
+
37
+ Evidence sufficiency belongs beside the ratio calculation that consumes the
38
+ baseline. The follow-up renderer then maps the nullable result to a third,
39
+ explicit message. This keeps the telemetry reader, throttle runbook, and
40
+ delivery path unchanged.
41
+
42
+ ## 4. Signal vs authority compliance
43
+
44
+ **Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
45
+
46
+ - [x] No — this change has no block/allow surface.
47
+
48
+ The verifier is a post-action signal. It reports whether the observed rates
49
+ support a success conclusion, but it does not install, retain, release, or
50
+ override a throttle.
51
+
52
+ ## 4b. Judgment-point check
53
+
54
+ No heuristic judgment is added. A ratio either has a finite positive
55
+ denominator or it is not measurable. Existing measured results retain their
56
+ configured threshold.
57
+
58
+ ## 5. Interactions
59
+
60
+ - **Shadowing:** the inconclusive branch is checked before the existing success
61
+ and failure messages, so unknown evidence cannot masquerade as either.
62
+ - **Double-fire:** one verification still produces exactly one follow-up.
63
+ - **Races:** timers, ledger reads, and shared state are unchanged.
64
+ - **Feedback loops:** the follow-up is informational and does not feed back into
65
+ throttle authority.
66
+
67
+ ## 6. External surfaces
68
+
69
+ The result interface widens `ratio` and `successfullyThrottled` to nullable
70
+ fields. Repository search finds no production consumer outside `BurnVerifier`;
71
+ the live external effect is the Telegram follow-up. The new user-visible lead
72
+ is “Slowdown verification was inconclusive.” Existing success and failure
73
+ messages are unchanged for measurable inputs.
74
+
75
+ ## 6b. Operator-surface quality
76
+
77
+ The new message states what could not be measured, includes the current sample,
78
+ and avoids a recommendation or success claim. It is sent on the same topic and
79
+ cadence as the existing verifier follow-up.
80
+
81
+ ## 7. Multi-machine posture
82
+
83
+ **Machine-local by design.** Token-ledger telemetry and throttles belong to the
84
+ agent host that observed the burn. No replicated state, URL, or cross-machine
85
+ authority changes.
86
+
87
+ ## 8. Rollback cost
88
+
89
+ Pure code rollback: restore the zero ratio and boolean-only result fields.
90
+ There is no persistent-state migration. Rollback would reintroduce false
91
+ success messages for missing baselines.
92
+
93
+ ## Conclusion
94
+
95
+ Clear to ship as a small corrective PR. It adds the missing third outcome to a
96
+ read-only verification signal and does not change throttle behavior.
97
+
98
+ ## Second-pass review
99
+
100
+ **Reviewer:** not required
101
+ **Independent read of the artifact:** Not required; the implementation changes
102
+ only a nullable metric result and its informational renderer. It does not alter
103
+ an action, threshold, lifecycle controller, or authority boundary.
104
+
105
+ ## Evidence pointers
106
+
107
+ - `tests/unit/burn-detection-phase-6.test.ts`
108
+ - Eleven focused tests pass.
109
+ - Mutation proof: restoring ratio zero makes the new null assertion fail.
110
+ - Full repository lint, including TypeScript, passes.
111
+
112
+ ## Class-Closure Declaration
113
+
114
+ No agent-authored-artifact defect — not applicable.
@@ -0,0 +1,115 @@
1
+ # Side-Effects Review — Host-memory unparseable fallback
2
+
3
+ **Version / slug:** `host-memory-unparseable-fallback`
4
+ **Date:** `2026-07-29`
5
+ **Author:** `instar-codey`
6
+ **Second-pass reviewer:** `not required`
7
+
8
+ ## Summary of the change
9
+
10
+ `parseVmStat()` now rejects a zero total-page count as unparseable.
11
+ `readSystemMemoryPressure()` already catches parser errors, logs the failed
12
+ native read, and returns its existing RSS-based fallback. The new test enters
13
+ the previously uncovered successful-but-unparseable path; the existing
14
+ thrown-reader test and fallback implementation are unchanged.
15
+
16
+ ## Decision-point inventory
17
+
18
+ - `parseVmStat` parse-validity invariant — modified — a non-empty native command
19
+ result must contain at least one total-memory page counter before it can
20
+ become a pressure measurement.
21
+ - Memory-pressure policy — passed through — the existing fallback and all
22
+ downstream pressure thresholds remain unchanged.
23
+
24
+ ## 1. Over-block
25
+
26
+ No user or agent action is blocked. A syntactically unusual `vm_stat` output
27
+ that contains none of the five total-memory counters is rejected rather than
28
+ graded; that is appropriate because no total-memory denominator can be derived.
29
+
30
+ ## 2. Under-block
31
+
32
+ The parser can still accept partially populated output when at least one
33
+ total-memory counter is present. That preserves its existing tolerant parsing
34
+ contract. This change does not claim to validate the semantic relationship
35
+ between every page category; it closes the specific state where no measurement
36
+ exists at all.
37
+
38
+ ## 3. Level-of-abstraction fit
39
+
40
+ The validity check belongs in the pure parser, immediately after the denominator
41
+ is assembled. The reader already owns fallback selection, logging, and
42
+ never-throw behavior. Reusing that path avoids a second fallback policy and
43
+ keeps consumers unaware of parser details.
44
+
45
+ ## 4. Signal vs authority compliance
46
+
47
+ **Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
48
+
49
+ - [x] No — this change has no block/allow surface.
50
+
51
+ The zero-page check is a hard structural invariant: pressure cannot be computed
52
+ without total pages. It does not decide whether an operation may proceed.
53
+ Downstream pressure policy continues to consume the resulting measurement.
54
+
55
+ ## 4b. Judgment-point check
56
+
57
+ No competing-signals judgment point or new policy heuristic is added. A
58
+ zero-denominator parse cannot yield a measurement.
59
+
60
+ ## 5. Interactions
61
+
62
+ - **Shadowing:** the new parser rejection feeds the existing catch-and-fallback
63
+ path; it does not bypass or duplicate it.
64
+ - **Double-fire:** only one reading is returned. The rejected native parse does
65
+ not also publish a zero reading.
66
+ - **Races:** all reads remain synchronous and local; shared state is unchanged.
67
+ - **Feedback loops:** downstream reaping and revival continue to see the same
68
+ fallback shape already used when the native command throws.
69
+
70
+ ## 6. External surfaces
71
+
72
+ On malformed non-empty macOS output, logs now name the parse failure and the
73
+ returned reading comes from the RSS fallback. Valid macOS output, Linux input,
74
+ other platforms, external services, persistent state, and message formats are
75
+ unchanged. No operator-facing action is added.
76
+
77
+ ## 6b. Operator-surface quality
78
+
79
+ No operator surface — not applicable.
80
+
81
+ ## 7. Multi-machine posture
82
+
83
+ **Machine-local by design.** Memory pressure is a physical property of each
84
+ host and must differ across machines. The correction emits no user notice,
85
+ stores no durable or topic-bound state, and generates no URL.
86
+
87
+ ## 8. Rollback cost
88
+
89
+ Pure code rollback: remove the zero-page rejection and restore the guarded
90
+ division. No data migration or agent repair is required. Rollback would
91
+ reintroduce the false-healthy reading for malformed native output.
92
+
93
+ ## Conclusion
94
+
95
+ Clear to ship as a small corrective PR. The change reuses the existing visible,
96
+ never-throw fallback and leaves its already-correct thrown-reader path intact.
97
+
98
+ ## Second-pass review
99
+
100
+ **Reviewer:** not required
101
+ **Independent read of the artifact:** Not required; the implementation changes
102
+ only parser validity and routes through an existing tested fallback. It does not
103
+ modify a lifecycle controller, authority, threshold, or action.
104
+
105
+ ## Evidence pointers
106
+
107
+ - `tests/unit/host-memory-pressure.test.ts`
108
+ - Fourteen focused tests pass.
109
+ - Mutation proof: removing the validity check makes the parser fail to throw and
110
+ makes the reader return zero instead of the asserted 93.75-percent fallback.
111
+ - Full repository lint, including TypeScript, passes.
112
+
113
+ ## Class-Closure Declaration
114
+
115
+ No agent-authored-artifact defect — not applicable.