instar 1.3.1273 → 1.3.1274

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.
@@ -6,6 +6,12 @@ export interface JevSignalShadowConfig {
6
6
  timeoutMs?: number;
7
7
  /** ISO instant; the shadow is inert at or after it, and when absent. */
8
8
  soakEndsAt?: string | null;
9
+ /** Retain a scrubbed, span-anchored excerpt on DISAGREEING rows only, so a
10
+ * disagreement can be adjudicated instead of merely counted. Default OFF:
11
+ * absent or false keeps the byte-identical no-text behaviour. */
12
+ retainDisagreementExcerpts?: boolean;
13
+ /** Volume bound on retained excerpts per UTC day (default EXCERPT_DAILY_CAP). */
14
+ maxExcerptsPerDay?: number;
9
15
  }
10
16
  /** The closed set of reasons a candidate was not compared. */
11
17
  export type NotComparedReason = 'timeout' | 'http-error' | 'oversize' | 'skipped-concurrent' | 'skipped-sample' | 'model-mismatch' | 'disabled-no-key' | 'soak-expired';
@@ -19,6 +25,13 @@ export type ShadowRow = {
19
25
  ms: number;
20
26
  modelServed: string;
21
27
  disagree: string[];
28
+ /** Scrubbed, span-anchored excerpt — present ONLY on disagreeing rows,
29
+ * and only when retention is enabled. */
30
+ excerpt?: string;
31
+ /** Count of secrets redacted inside the excerpt (never their values). */
32
+ excerptRedactions?: number;
33
+ /** Why no excerpt was retained on a disagreeing row. */
34
+ excerptUnavailable?: 'no-detector-span' | 'daily-cap' | 'scrub-error';
22
35
  } | {
23
36
  kind: 'not-compared';
24
37
  ts: string;
@@ -38,6 +51,12 @@ export declare const SHADOW_QUESTIONS: ReadonlyArray<{
38
51
  instructions: string;
39
52
  }>;
40
53
  export declare const POSITIVE_THRESHOLD = 0.5;
54
+ /** Characters of context kept either side of a detector span. */
55
+ export declare const EXCERPT_CONTEXT_CHARS = 60;
56
+ /** Hard clamp on a retained excerpt, before scrubbing. */
57
+ export declare const EXCERPT_MAX_CHARS = 400;
58
+ /** Default volume bound per UTC day. */
59
+ export declare const EXCERPT_DAILY_CAP = 50;
41
60
  /** Minimum spacing between key re-reads after a miss or a 401/403 (bounds any blocking lookup). */
42
61
  export declare const KEY_REREAD_MS: number;
43
62
  export interface JevSignalShadowDeps {
@@ -80,6 +99,20 @@ export declare class JevSignalShadow {
80
99
  lastDispatch: Promise<void>;
81
100
  private observeInner;
82
101
  private dispatch;
102
+ /** Retained-excerpt volume counter, keyed by UTC day. In-memory: it resets on
103
+ * restart, so it bounds VOLUME rather than acting as a secrecy guarantee —
104
+ * secrecy is carried by span-anchoring (never the whole message) plus the
105
+ * scrub, both of which hold per-excerpt regardless of this count. */
106
+ private excerptDay;
107
+ private excerptCount;
108
+ /**
109
+ * Build a scrubbed excerpt anchored to the detector spans of the DISAGREEING
110
+ * rules only. Where the detector fired and the model did not, the spans point
111
+ * at the disputed artifact. Where the model fired and the detector did NOT,
112
+ * there is no span to anchor to — and rather than widen the window to the
113
+ * message, the row honestly records `no-detector-span`.
114
+ */
115
+ private buildExcerpt;
83
116
  private write;
84
117
  }
85
118
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"JevSignalShadow.d.ts","sourceRoot":"","sources":["../../src/core/JevSignalShadow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JevSignalShadow.d.ts","sourceRoot":"","sources":["../../src/core/JevSignalShadow.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ import fs from 'node:fs';
24
24
  import path from 'node:path';
25
25
  import crypto from 'node:crypto';
26
26
  import { detectGateSignals } from './GateSignalDetectors.js';
27
+ import { scrubForStore } from './durableSecretScrub.js';
27
28
  export const JEV_SHADOW_FEATURE = 'jev-signal-shadow';
28
29
  const ENDPOINT = 'https://api.typesafe.ai/v1/systemone';
29
30
  /**
@@ -42,6 +43,12 @@ export const SHADOW_QUESTIONS = [
42
43
  { rule: 'cron_or_slug', signalKind: 'cron-or-slug', instructions: 'The message shows the reader a raw cron expression or an internal machine identifier/slug instead of plain words.' },
43
44
  ];
44
45
  export const POSITIVE_THRESHOLD = 0.5;
46
+ /** Characters of context kept either side of a detector span. */
47
+ export const EXCERPT_CONTEXT_CHARS = 60;
48
+ /** Hard clamp on a retained excerpt, before scrubbing. */
49
+ export const EXCERPT_MAX_CHARS = 400;
50
+ /** Default volume bound per UTC day. */
51
+ export const EXCERPT_DAILY_CAP = 50;
45
52
  /** Minimum spacing between key re-reads after a miss or a 401/403 (bounds any blocking lookup). */
46
53
  export const KEY_REREAD_MS = 10 * 60_000;
47
54
  export class JevSignalShadow {
@@ -122,9 +129,13 @@ export class JevSignalShadow {
122
129
  notCompared('skipped-concurrent');
123
130
  return;
124
131
  }
125
- const detectorSignals = detectGateSignals(text).map((s) => s.kind);
132
+ // Keep the FULL signals (not just kinds): their spans are what anchors a
133
+ // retained excerpt to the artifact in dispute, so retention can never widen
134
+ // beyond what the detector actually pointed at.
135
+ const signals = detectGateSignals(text);
136
+ const detectorSignals = signals.map((s) => s.kind);
126
137
  this.inFlight = true;
127
- this.lastDispatch = this.dispatch(text, cfg, { ts, sha256, bytes, detectorSignals })
138
+ this.lastDispatch = this.dispatch(text, cfg, { ts, sha256, bytes, detectorSignals, signals })
128
139
  .catch(() => { })
129
140
  .finally(() => { this.inFlight = false; });
130
141
  }
@@ -174,7 +185,11 @@ export class JevSignalShadow {
174
185
  disagree.push(q.rule);
175
186
  }
176
187
  outcome = disagree.length ? 'fired' : 'noop';
177
- this.write({ kind: 'compared', ...base, jev, ms: (this.deps.now ?? Date.now)() - t0, modelServed, disagree });
188
+ const { signals, ...rowBase } = base;
189
+ const retained = disagree.length > 0 && cfg.retainDisagreementExcerpts === true
190
+ ? this.buildExcerpt(text, signals, disagree, cfg, base.ts)
191
+ : {};
192
+ this.write({ kind: 'compared', ...rowBase, jev, ms: (this.deps.now ?? Date.now)() - t0, modelServed, disagree, ...retained });
178
193
  }
179
194
  catch (err) {
180
195
  nc(err?.name === 'AbortError' ? 'timeout' : 'http-error');
@@ -196,6 +211,75 @@ export class JevSignalShadow {
196
211
  catch { /* @silent-fallback-ok — metering must never break the instrument */ }
197
212
  }
198
213
  }
214
+ /** Retained-excerpt volume counter, keyed by UTC day. In-memory: it resets on
215
+ * restart, so it bounds VOLUME rather than acting as a secrecy guarantee —
216
+ * secrecy is carried by span-anchoring (never the whole message) plus the
217
+ * scrub, both of which hold per-excerpt regardless of this count. */
218
+ excerptDay = '';
219
+ excerptCount = 0;
220
+ /**
221
+ * Build a scrubbed excerpt anchored to the detector spans of the DISAGREEING
222
+ * rules only. Where the detector fired and the model did not, the spans point
223
+ * at the disputed artifact. Where the model fired and the detector did NOT,
224
+ * there is no span to anchor to — and rather than widen the window to the
225
+ * message, the row honestly records `no-detector-span`.
226
+ */
227
+ buildExcerpt(text, signals, disagree, cfg, ts) {
228
+ try {
229
+ const day = ts.slice(0, 10);
230
+ if (this.excerptDay !== day) {
231
+ this.excerptDay = day;
232
+ this.excerptCount = 0;
233
+ }
234
+ const cap = typeof cfg.maxExcerptsPerDay === 'number' && cfg.maxExcerptsPerDay >= 0
235
+ ? cfg.maxExcerptsPerDay
236
+ : EXCERPT_DAILY_CAP;
237
+ if (this.excerptCount >= cap)
238
+ return { excerptUnavailable: 'daily-cap' };
239
+ const kinds = new Set(disagree
240
+ .map((rule) => SHADOW_QUESTIONS.find((q) => q.rule === rule)?.signalKind)
241
+ .filter((k) => typeof k === 'string'));
242
+ const spans = signals
243
+ .filter((sig) => kinds.has(sig.kind))
244
+ .flatMap((sig) => sig.spans ?? [])
245
+ .map((sp) => ({
246
+ start: Math.max(0, sp.start - EXCERPT_CONTEXT_CHARS),
247
+ end: Math.min(text.length, sp.end + EXCERPT_CONTEXT_CHARS),
248
+ }))
249
+ .sort((a, b) => a.start - b.start);
250
+ if (spans.length === 0)
251
+ return { excerptUnavailable: 'no-detector-span' };
252
+ // Merge overlaps so context is not duplicated, then clamp the total.
253
+ const merged = [];
254
+ for (const sp of spans) {
255
+ const last = merged[merged.length - 1];
256
+ if (last && sp.start <= last.end)
257
+ last.end = Math.max(last.end, sp.end);
258
+ else
259
+ merged.push({ ...sp });
260
+ }
261
+ let out = '';
262
+ for (const sp of merged) {
263
+ if (out.length >= EXCERPT_MAX_CHARS)
264
+ break;
265
+ const piece = text.slice(sp.start, sp.end);
266
+ out += (out ? ' … ' : '') + piece;
267
+ }
268
+ out = out.slice(0, EXCERPT_MAX_CHARS);
269
+ const scrubbed = scrubForStore(out);
270
+ if (scrubbed.error)
271
+ return { excerptUnavailable: 'scrub-error' };
272
+ this.excerptCount++;
273
+ return {
274
+ excerpt: scrubbed.text,
275
+ ...(scrubbed.redactions.length > 0 ? { excerptRedactions: scrubbed.redactions.length } : {}),
276
+ };
277
+ }
278
+ catch {
279
+ // @silent-fallback-ok — retention is observability; it must never cost a comparison row.
280
+ return { excerptUnavailable: 'scrub-error' };
281
+ }
282
+ }
199
283
  write(row) {
200
284
  try {
201
285
  fs.mkdirSync(path.dirname(this.deps.logPath), { recursive: true });
@@ -1 +1 @@
1
- {"version":3,"file":"JevSignalShadow.js","sourceRoot":"","sources":["../../src/core/JevSignalShadow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JevSignalShadow.js","sourceRoot":"","sources":["../../src/core/JevSignalShadow.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  "schemaVersion": 1,
3
3
  "generatedFrom": "source-tree",
4
4
  "registrySha256": "c55d201d822f8706b0dc50ce21b0b8298b4ac470543cfe46d8988da03b0d34b9",
5
- "packageVersion": "1.3.1273",
5
+ "packageVersion": "1.3.1274",
6
6
  "guards": [
7
7
  {
8
8
  "ref": "docs/audits/phase-b/f10-triage.md",
@@ -1,5 +1,5 @@
1
1
  {
2
- "sha256": "00f4b721d4020f3d488f61655374085977c4dc16a8f62c812d2ba7f5934fad68",
2
+ "sha256": "021c6a9021ae41f455f64e83105194161d6c3b31c1fb1ce11591a4c04b74f0b5",
3
3
  "registrySha256": "c55d201d822f8706b0dc50ce21b0b8298b4ac470543cfe46d8988da03b0d34b9",
4
- "packageVersion": "1.3.1273"
4
+ "packageVersion": "1.3.1274"
5
5
  }
@@ -2,5 +2,5 @@
2
2
  "sha256": "c55d201d822f8706b0dc50ce21b0b8298b4ac470543cfe46d8988da03b0d34b9",
3
3
  "articleCount": 91,
4
4
  "generatedFrom": "docs/STANDARDS-REGISTRY.md",
5
- "packageVersion": "1.3.1273"
5
+ "packageVersion": "1.3.1274"
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.1273",
3
+ "version": "1.3.1274",
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-09-24T16:39:43.205Z",
5
- "instarVersion": "1.3.1273",
4
+ "generatedAt": "2026-09-24T17:28:08.837Z",
5
+ "instarVersion": "1.3.1274",
6
6
  "entryCount": 203,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -2,7 +2,7 @@
2
2
  "schemaVersion": 1,
3
3
  "generatedFrom": "source-tree",
4
4
  "registrySha256": "c55d201d822f8706b0dc50ce21b0b8298b4ac470543cfe46d8988da03b0d34b9",
5
- "packageVersion": "1.3.1273",
5
+ "packageVersion": "1.3.1274",
6
6
  "guards": [
7
7
  {
8
8
  "ref": "docs/audits/phase-b/f10-triage.md",
@@ -1,5 +1,5 @@
1
1
  {
2
- "sha256": "00f4b721d4020f3d488f61655374085977c4dc16a8f62c812d2ba7f5934fad68",
2
+ "sha256": "021c6a9021ae41f455f64e83105194161d6c3b31c1fb1ce11591a4c04b74f0b5",
3
3
  "registrySha256": "c55d201d822f8706b0dc50ce21b0b8298b4ac470543cfe46d8988da03b0d34b9",
4
- "packageVersion": "1.3.1273"
4
+ "packageVersion": "1.3.1274"
5
5
  }
@@ -2,5 +2,5 @@
2
2
  "sha256": "c55d201d822f8706b0dc50ce21b0b8298b4ac470543cfe46d8988da03b0d34b9",
3
3
  "articleCount": 91,
4
4
  "generatedFrom": "docs/STANDARDS-REGISTRY.md",
5
- "packageVersion": "1.3.1273"
5
+ "packageVersion": "1.3.1274"
6
6
  }
@@ -0,0 +1,47 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ `JevSignalShadow` recorded `sha256` only, so its disagreements (49 of 350
9
+ compared messages on the originating agent) could be counted but never
10
+ settled — uninterpretable as evidence in either direction.
11
+
12
+ Adds opt-in `retainDisagreementExcerpts` (default OFF — absent is
13
+ byte-identical to today). When on, a COMPARED row with `disagree.length > 0`
14
+ carries `excerpt`: the text within `EXCERPT_CONTEXT_CHARS` (60) of the
15
+ detector spans for the disagreeing rules only, overlaps merged, clamped to
16
+ `EXCERPT_MAX_CHARS` (400), then passed through `scrubForStore`. Redaction
17
+ count is recorded as `excerptRedactions`; values never are.
18
+
19
+ Non-retention is explicit rather than silent, via `excerptUnavailable`:
20
+ - `no-detector-span` — the model fired where the detector did not, so there is
21
+ no anchor. The window is NOT widened to the message; those rows stay
22
+ unadjudicable by design.
23
+ - `daily-cap` — past `maxExcerptsPerDay` (default `EXCERPT_DAILY_CAP` = 50).
24
+ - `scrub-error` — the scrub failed; nothing is kept.
25
+
26
+ ## What to Tell Your User
27
+
28
+ If the message-comparison trial is running with snippet-keeping switched on, a
29
+ disagreement between the cheap model and the existing checks now keeps a short,
30
+ secret-stripped snippet of just the disputed part — enough to tell which side
31
+ was right. Agreeing messages keep nothing, and snippets never leave the machine.
32
+
33
+ ## Summary of New Capabilities
34
+
35
+ - `intelligence.jevSignalShadow.retainDisagreementExcerpts` (default false) and
36
+ `maxExcerptsPerDay` (default 50).
37
+ - `excerpt`, `excerptRedactions`, `excerptUnavailable` on compared rows.
38
+
39
+ ## Evidence
40
+
41
+ `tests/unit/JevSignalShadow.test.ts` — seven tests: flag absent retains nothing
42
+ on a genuine disagreement; enabled retains a scrubbed span-anchored excerpt
43
+ containing the disputed artifact within the clamp; an AGREEING row never
44
+ carries text even with retention on; model-fired/detector-silent records
45
+ `no-detector-span` and does not leak the message; a secret-shaped key inside
46
+ the window is scrubbed and counted without its value appearing; the daily cap
47
+ stops retention and records `daily-cap`; the default cap is positive.
@@ -0,0 +1,79 @@
1
+ # Side-Effects Review — Jev shadow: disagreement excerpts
2
+
3
+ **Version / slug:** `jev-shadow-disagreement-excerpts`
4
+ **Date:** `2026-09-24`
5
+ **Author:** `echo`
6
+ **Second-pass reviewer:** `not required (Tier 1; observe-only research instrument, no decision surface, off by default)`
7
+
8
+ ## Summary of the change
9
+
10
+ The shadow trial recorded only `sha256` per message, so its 49 disagreements
11
+ could be counted but never adjudicated — uninterpretable in both directions.
12
+ Adds opt-in retention of a scrubbed, detector-span-anchored excerpt on
13
+ DISAGREEING rows only, with a per-UTC-day volume cap.
14
+
15
+ ## Decision-point inventory
16
+
17
+ - *(none)* — the shadow decides nothing and gates nothing. This adds a field to
18
+ a research log.
19
+
20
+ ---
21
+
22
+ ## 1. Over-block
23
+
24
+ Nothing is blocked. The only "refusal" is declining to retain: an agreeing row,
25
+ a disabled flag, a missing detector span, an exhausted daily cap, or a scrub
26
+ error each yield no excerpt, and the last three say which in
27
+ `excerptUnavailable` rather than going silent.
28
+
29
+ ## 2. Under-block
30
+
31
+ Deliberate: where the MODEL fired and the detector did not, there is no span to
32
+ anchor to and nothing is kept (`no-detector-span`). Those disagreements stay
33
+ unadjudicable. Widening the window to the message would cover them at the cost
34
+ of retaining full text of messages neither side located an artifact in — the
35
+ exposure this design exists to avoid. 12 of 52 observed disagreements are this
36
+ shape; the other 40 are covered.
37
+
38
+ ## 3. Level-of-abstraction fit
39
+
40
+ Built at the existing dispatch chokepoint, which already holds the message, the
41
+ detector signals and the verdict. No new layer, no second pass over the text.
42
+ The detector's `spans` (already produced and already capped at 8/signal) are
43
+ reused rather than re-deriving positions.
44
+
45
+ ## 4. Signal vs authority compliance
46
+
47
+ Signal-producer with no authority. Per `docs/signal-vs-authority.md` a brittle
48
+ mechanism may inform and must not block; this one only appends a field to a
49
+ JSONL research row. Every failure path returns "no excerpt", never an exception
50
+ into the message path (`observe` remains try/caught and fire-and-forget).
51
+
52
+ ## 5. Interactions
53
+
54
+ - Runs strictly after `disagree` is computed; cannot change it.
55
+ - Does not touch the request to the provider — the body is unchanged.
56
+ - The daily counter is per-instance and resets on restart. It bounds VOLUME,
57
+ not secrecy: per-excerpt secrecy is carried by span-anchoring and the scrub,
58
+ which hold regardless of the count. Stated rather than implied, because a
59
+ reset-on-restart counter must not be read as a retention guarantee.
60
+
61
+ ## 6. External surfaces
62
+
63
+ None. Excerpts are written to the existing machine-local trial log and are not
64
+ served over HTTP, replicated, or sent to the provider. The full message already
65
+ reaches the provider for comparison — unchanged by this work.
66
+
67
+ ## 7. Multi-machine posture (Cross-Machine Coherence)
68
+
69
+ Machine-local BY DESIGN. The trial log is a per-machine research artifact; each
70
+ machine compares its own traffic and keeps its own rows. Nothing is replicated
71
+ or merged, so there is no cross-machine read to keep coherent and no
72
+ topic-transfer stranding (the log is not conversation state).
73
+
74
+ ## 8. Rollback cost
75
+
76
+ Remove `retainDisagreementExcerpts` from the config block — retention stops
77
+ immediately (live config read, no restart). Existing rows remain valid JSONL
78
+ with an extra field readers may ignore. Deleting already-retained excerpts is a
79
+ file edit on one machine-local log.