instar 1.3.745 → 1.3.747

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.
Files changed (55) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +41 -0
  3. package/dist/commands/server.js.map +1 -1
  4. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  5. package/dist/config/ConfigDefaults.js +18 -0
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  8. package/dist/core/PostUpdateMigrator.js +13 -3
  9. package/dist/core/PostUpdateMigrator.js.map +1 -1
  10. package/dist/core/devGatedFeatures.d.ts.map +1 -1
  11. package/dist/core/devGatedFeatures.js +6 -0
  12. package/dist/core/devGatedFeatures.js.map +1 -1
  13. package/dist/core/durableSecretScrub.d.ts +129 -0
  14. package/dist/core/durableSecretScrub.d.ts.map +1 -0
  15. package/dist/core/durableSecretScrub.js +220 -0
  16. package/dist/core/durableSecretScrub.js.map +1 -0
  17. package/dist/core/types.d.ts +18 -0
  18. package/dist/core/types.d.ts.map +1 -1
  19. package/dist/core/types.js.map +1 -1
  20. package/dist/data/durableOutputChokepoints.d.ts +84 -0
  21. package/dist/data/durableOutputChokepoints.d.ts.map +1 -0
  22. package/dist/data/durableOutputChokepoints.js +145 -0
  23. package/dist/data/durableOutputChokepoints.js.map +1 -0
  24. package/dist/messaging/SessionSummarySentinel.d.ts +28 -0
  25. package/dist/messaging/SessionSummarySentinel.d.ts.map +1 -1
  26. package/dist/messaging/SessionSummarySentinel.js +25 -1
  27. package/dist/messaging/SessionSummarySentinel.js.map +1 -1
  28. package/dist/monitoring/DurableOutputScrubber.d.ts +123 -0
  29. package/dist/monitoring/DurableOutputScrubber.d.ts.map +1 -0
  30. package/dist/monitoring/DurableOutputScrubber.js +179 -0
  31. package/dist/monitoring/DurableOutputScrubber.js.map +1 -0
  32. package/dist/monitoring/delivery-failure-sentinel/recovery-policy.d.ts +7 -0
  33. package/dist/monitoring/delivery-failure-sentinel/recovery-policy.d.ts.map +1 -1
  34. package/dist/monitoring/delivery-failure-sentinel/recovery-policy.js +47 -0
  35. package/dist/monitoring/delivery-failure-sentinel/recovery-policy.js.map +1 -1
  36. package/dist/monitoring/guardManifest.d.ts.map +1 -1
  37. package/dist/monitoring/guardManifest.js +23 -0
  38. package/dist/monitoring/guardManifest.js.map +1 -1
  39. package/dist/server/routes.d.ts +23 -0
  40. package/dist/server/routes.d.ts.map +1 -1
  41. package/dist/server/routes.js +112 -16
  42. package/dist/server/routes.js.map +1 -1
  43. package/package.json +1 -1
  44. package/src/data/builtin-manifest.json +65 -65
  45. package/src/data/durableOutputChokepoints.ts +192 -0
  46. package/src/templates/scripts/slack-reply.sh +30 -0
  47. package/src/templates/scripts/telegram-reply.sh +50 -5
  48. package/upgrades/1.3.746.md +43 -0
  49. package/upgrades/1.3.747.md +61 -0
  50. package/upgrades/side-effects/durable-output-hygiene-standard.md +229 -0
  51. package/upgrades/side-effects/slack-outbound-robustness-r8m1-arm-b-adapter-timeout.md +76 -0
  52. package/upgrades/side-effects/slack-outbound-robustness-r8m1-recovery-policy.md +110 -0
  53. package/upgrades/side-effects/slack-outbound-robustness-slack-delivery-id.md +83 -0
  54. package/upgrades/side-effects/slack-outbound-robustness-slack-forward-refusal.md +74 -0
  55. package/upgrades/side-effects/slack-outbound-robustness-telegram-prepost-mint.md +81 -0
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Durable-Output Chokepoint Inventory — the auditable registry of every store
3
+ * that accepts LLM output and, per store, its Layer-B scrub status + its
4
+ * durable-secret bench-axis coverage (Durable-Output Hygiene Standard §3,
5
+ * docs/specs/durable-output-hygiene-standard.md).
6
+ *
7
+ * This is the file the Standards Enforcement Coverage audit reads to grade the
8
+ * "What Persists Must Be Clean" standard `gate` rather than `spec-only`, and the
9
+ * file the durable-output-chokepoint ratchet (tests/unit/
10
+ * durable-output-chokepoint-ratchet.test.ts) pins SHRINK-ONLY: a chokepoint may
11
+ * graduate `pending → wired`, never regress, and a NEW durable-output persistence
12
+ * path cannot silently bypass the class (it must be classified here, exactly like
13
+ * the llmBenchCoverage map forces a bench decision on every LLM component).
14
+ *
15
+ * SCOPE (spec §3): memory-family stores + doc-tree summaries are in scope now;
16
+ * logs/telemetry are covered by the existing telemetry scrubs; caches / vector
17
+ * indexes / eval artifacts and the private-view / published-page write path are
18
+ * enumerated as tracked follow-ups IN this inventory (a semantically-durable leak
19
+ * path cannot park as an undated TODO — each carries an owner).
20
+ *
21
+ * MULTI-MACHINE POSTURE (spec §3, Cross-Machine Coherence): a replicated
22
+ * memory-family store accepts records FROM PEERS, so a peer running with the
23
+ * scrub dark could deliver an unscrubbed secret into a scrub-enabled machine's
24
+ * durable store, bypassing every writer-side chokepoint. Each replicated store
25
+ * therefore lists its RECEIVE path as its own chokepoint (`receivePath`).
26
+ *
27
+ * NOTE (rollout reality): the CODE that wires the scrub at each chokepoint lands
28
+ * incrementally (dark-first). This inventory is the durable contract that names
29
+ * every chokepoint up front so the ratchet + coverage audit measure progress
30
+ * against a fixed denominator rather than agent memory.
31
+ */
32
+ /**
33
+ * The known set from the routing registry (spec §3) + the replicated-store
34
+ * receive paths + the tracked follow-ups. SessionSummarySentinel is the FIRST
35
+ * wired chokepoint (the demonstrated Layer-B wiring); the rest are pending
36
+ * follow-ups adopting the same one-line scrubber call.
37
+ */
38
+ export const DURABLE_OUTPUT_CHOKEPOINTS = [
39
+ {
40
+ component: 'SessionSummarySentinel',
41
+ store: 'session routing summaries (state/sessions/<id>/summary.json)',
42
+ path: 'src/messaging/SessionSummarySentinel.ts',
43
+ scrubStatus: 'wired',
44
+ benchAxis: 'covered',
45
+ benchTaskId: 'session-summary-durable-secret',
46
+ },
47
+ {
48
+ component: 'SessionActivitySentinel',
49
+ store: 'activity-digest entries → SemanticMemory (long-term memory)',
50
+ path: 'src/monitoring/SessionActivitySentinel.ts',
51
+ scrubStatus: 'pending',
52
+ owner: 'durable-output-hygiene rollout step 3 (Layer A digest writer already shipped v1.3.721; migrate its persist path onto the shared scrubber)',
53
+ benchAxis: 'pending',
54
+ },
55
+ {
56
+ component: 'SelfKnowledgeTree',
57
+ store: 'self-knowledge facts extractor → self-knowledge-tree.json',
58
+ path: 'src/core/SelfKnowledgeTree.ts',
59
+ scrubStatus: 'pending',
60
+ owner: 'durable-output-hygiene rollout (adopt the shared scrubber at the facts-persist write)',
61
+ benchAxis: 'pending',
62
+ },
63
+ {
64
+ component: 'knowledge-base-synthesizer',
65
+ store: 'knowledge-base synthesized records',
66
+ path: 'src/knowledge (KB synthesizer persist path)',
67
+ scrubStatus: 'pending',
68
+ owner: 'durable-output-hygiene rollout (adopt the shared scrubber at the KB record write)',
69
+ benchAxis: 'pending',
70
+ receivePath: {
71
+ store: 'replicated KB catalog (WS2.4 stateSync.knowledge receive)',
72
+ scrubStatus: 'pending',
73
+ owner: 'durable-output-hygiene multi-machine posture (scrub-on-receive with the shared module, or argue a serve-time-redaction exemption)',
74
+ },
75
+ },
76
+ {
77
+ component: 'correction-learning',
78
+ store: 'correction distiller records (CorrectionCaptureLoop)',
79
+ path: 'src/monitoring/CorrectionCaptureLoop.ts',
80
+ scrubStatus: 'exempt',
81
+ reason: 'CorrectionCaptureLoop already applies the deterministic scrubSecrets() pass on BOTH sides of its LLM hop (pre-distill + post-distill persist) per its own spec §3.3 — an existing serve-time/persist redaction. Migrates to the shared module in rollout step 0; the class is not unguarded here.',
82
+ benchAxis: 'covered',
83
+ benchTaskId: 'correction-distiller',
84
+ },
85
+ {
86
+ component: 'CartographerSweep',
87
+ store: 'cartographer doc-tree node summaries',
88
+ path: 'src/core/cartographerSummary.ts',
89
+ scrubStatus: 'pending',
90
+ owner: 'durable-output-hygiene rollout (adopt the shared scrubber at the node-summary write; the sweep already runs on a light off-Claude model)',
91
+ benchAxis: 'pending',
92
+ },
93
+ {
94
+ component: 'learnings-registry',
95
+ store: 'learnings registry entries',
96
+ path: 'src/core (learning registry persist path)',
97
+ scrubStatus: 'pending',
98
+ owner: 'durable-output-hygiene rollout (adopt the shared scrubber at the learning-persist write)',
99
+ benchAxis: 'pending',
100
+ receivePath: {
101
+ store: 'replicated learnings (WS2.2 stateSync.learnings receive)',
102
+ scrubStatus: 'pending',
103
+ owner: 'durable-output-hygiene multi-machine posture (scrub-on-receive with the shared module, or argue a serve-time-redaction exemption)',
104
+ },
105
+ },
106
+ {
107
+ component: 'RelationshipManager',
108
+ store: 'relationship records (WS2.3 — user-visible PII)',
109
+ path: 'src/core/RelationshipManager.ts',
110
+ scrubStatus: 'pending',
111
+ owner: 'durable-output-hygiene rollout (adopt the shared scrubber at the relationship-record write)',
112
+ benchAxis: 'pending',
113
+ receivePath: {
114
+ store: 'replicated relationships (WS2.3 stateSync.relationships receive)',
115
+ scrubStatus: 'pending',
116
+ owner: 'durable-output-hygiene multi-machine posture (scrub-on-receive with the shared module, or argue a serve-time-redaction exemption)',
117
+ },
118
+ },
119
+ // ── Tracked follow-ups (spec §3 scope boundary + Frontloaded Decision #3) ──
120
+ {
121
+ component: 'private-view-publisher',
122
+ store: 'private views / published Telegraph pages (different write path)',
123
+ path: 'src/server (view + publish routes)',
124
+ scrubStatus: 'exempt',
125
+ reason: 'Out of scope for the first pass (spec Frontloaded Decision #3): a different write path, same pattern. Tracked follow-up owned by the class-closure escalator gap machinery (max-age escalation applies) — a semantically-durable leak path may not park undated.',
126
+ benchAxis: 'exempt',
127
+ },
128
+ {
129
+ component: 'vector-index-eval-artifacts',
130
+ store: 'caches / vector indexes / eval artifacts',
131
+ path: 'src/memory (embedding + eval artifact write paths)',
132
+ scrubStatus: 'exempt',
133
+ reason: 'Enumerated as a tracked follow-up (spec §3 scope boundary) under the class-closure gap machinery so it carries the max-age escalation — a semantically-durable leak path cannot park as an undated TODO. Not silently omitted.',
134
+ benchAxis: 'exempt',
135
+ },
136
+ ];
137
+ /** Chokepoints whose writer-side scrub is wired (the class is guarded here). */
138
+ export function wiredChokepoints() {
139
+ return DURABLE_OUTPUT_CHOKEPOINTS.filter((c) => c.scrubStatus === 'wired');
140
+ }
141
+ /** Chokepoints still awaiting the scrub (Close the Loop — each has an owner). */
142
+ export function pendingChokepoints() {
143
+ return DURABLE_OUTPUT_CHOKEPOINTS.filter((c) => c.scrubStatus === 'pending');
144
+ }
145
+ //# sourceMappingURL=durableOutputChokepoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"durableOutputChokepoints.js","sourceRoot":"","sources":["../../src/data/durableOutputChokepoints.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@
10
10
  * - Falls back to keyword matching when LLM is unavailable
11
11
  */
12
12
  import type { Session, IntelligenceProvider } from '../core/types.js';
13
+ import type { DurableOutputScrubber } from '../monitoring/DurableOutputScrubber.js';
13
14
  export type SessionPhase = 'planning' | 'building' | 'testing' | 'debugging' | 'deploying' | 'engaging' | 'idle';
14
15
  export interface SessionSummary {
15
16
  sessionId: string;
@@ -23,6 +24,14 @@ export interface SessionSummary {
23
24
  updatedAt: string;
24
25
  stale: boolean;
25
26
  outputHash: string;
27
+ /**
28
+ * Durable-Output Hygiene (spec Frontloaded Decision #2 — mandatory provenance):
29
+ * the one-line human-visible marker set when the Layer-B scrubber redacted a
30
+ * span from this persisted summary. Absent when nothing was redacted. An
31
+ * unmarked alteration is a swallowed finding — so an altered summary always
32
+ * carries this note.
33
+ */
34
+ redactionNote?: string;
26
35
  }
27
36
  export interface SentinelConfig {
28
37
  stateDir: string;
@@ -40,6 +49,15 @@ export interface SentinelConfig {
40
49
  stalenessMinutes?: number;
41
50
  /** Misroute threshold before fallback (default: 3 in 10 min) */
42
51
  misrouteThreshold?: number;
52
+ /**
53
+ * Durable-Output Hygiene Standard §2 (Layer B) — the config-gated scrubber that
54
+ * redacts credential SPANS from the LLM/output-derived summary fields BEFORE
55
+ * they persist to disk. Optional + dark-first: when absent (or not engaged) the
56
+ * summary is stored byte-for-byte as today. When engaged in dryRun it computes +
57
+ * records would-redact metrics but stores the original text; only a deliberate
58
+ * dryRun:false flip actually alters stored content (operator decision).
59
+ */
60
+ scrubber?: DurableOutputScrubber;
43
61
  }
44
62
  export interface RoutingScore {
45
63
  sessionId: string;
@@ -73,6 +91,16 @@ export declare class SessionSummarySentinel {
73
91
  private parseLlmResponse;
74
92
  /** Keyword-based summary extraction (fallback when LLM unavailable) */
75
93
  private extractKeywordSummary;
94
+ /**
95
+ * Durable-Output Hygiene Standard §2 (Layer B) — run the config-gated scrubber
96
+ * over the LLM/output-derived string fields (task, blockers) + string arrays
97
+ * (files, topics) BEFORE the summary persists. When the scrubber is absent or
98
+ * not engaged this is a strict no-op (returns the input summary). When engaged
99
+ * in dryRun it records would-redact metrics but returns the original content;
100
+ * only a live (dryRun:false) scrubber alters the stored text — and every altered
101
+ * summary carries the mandatory `redactionNote` provenance marker.
102
+ */
103
+ private scrubForStore;
76
104
  /** Save a summary to disk */
77
105
  private saveSummary;
78
106
  /** Get a summary for a specific session */
@@ -1 +1 @@
1
- {"version":3,"file":"SessionSummarySentinel.d.ts","sourceRoot":"","sources":["../../src/messaging/SessionSummarySentinel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionSummarySentinel.d.ts","sourceRoot":"","sources":["../../src/messaging/SessionSummarySentinel.ts"],"names":[],"mappings":"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"}
@@ -88,7 +88,12 @@ export class SessionSummarySentinel {
88
88
  // Generate summary
89
89
  const summary = await this.generateSummary(session, output, hash);
90
90
  if (summary) {
91
- await this.saveSummary(summary);
91
+ // Durable-Output Hygiene §2: scrub the freshly-generated LLM/output-
92
+ // derived summary at the persistence chokepoint BEFORE the write. The
93
+ // staleness re-save path (updateStaleness → saveSummary) is deliberately
94
+ // NOT re-scrubbed — it re-persists an already-scrubbed summary, so
95
+ // re-scrubbing would recompute an empty provenance and drop redactionNote.
96
+ await this.saveSummary(this.scrubForStore(summary));
92
97
  this.outputHashes.set(session.id, hash);
93
98
  updated++;
94
99
  }
@@ -218,6 +223,25 @@ export class SessionSummarySentinel {
218
223
  outputHash: hash,
219
224
  };
220
225
  }
226
+ /**
227
+ * Durable-Output Hygiene Standard §2 (Layer B) — run the config-gated scrubber
228
+ * over the LLM/output-derived string fields (task, blockers) + string arrays
229
+ * (files, topics) BEFORE the summary persists. When the scrubber is absent or
230
+ * not engaged this is a strict no-op (returns the input summary). When engaged
231
+ * in dryRun it records would-redact metrics but returns the original content;
232
+ * only a live (dryRun:false) scrubber alters the stored text — and every altered
233
+ * summary carries the mandatory `redactionNote` provenance marker.
234
+ */
235
+ scrubForStore(summary) {
236
+ const scrubber = this.config.scrubber;
237
+ if (!scrubber || !scrubber.isEngaged())
238
+ return summary;
239
+ const outcome = scrubber.scrubRecord(summary, ['task', 'blockers', 'files', 'topics'], { store: 'session-summary', callsite: 'SessionSummarySentinel.saveSummary' });
240
+ const next = outcome.record;
241
+ if (outcome.provenance)
242
+ next.redactionNote = outcome.provenance;
243
+ return next;
244
+ }
221
245
  /** Save a summary to disk */
222
246
  async saveSummary(summary) {
223
247
  const sessionDir = path.join(this.summaryDir, summary.sessionId);
@@ -1 +1 @@
1
- {"version":3,"file":"SessionSummarySentinel.js","sourceRoot":"","sources":["../../src/messaging/SessionSummarySentinel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionSummarySentinel.js","sourceRoot":"","sources":["../../src/messaging/SessionSummarySentinel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * DurableOutputScrubber — the config-gated Layer B service that wraps the shared
3
+ * `scrubForStore` floor at a durable-output persistence chokepoint (Durable-Output
4
+ * Hygiene Standard, "What Persists Must Be Clean" —
5
+ * docs/specs/durable-output-hygiene-standard.md §2).
6
+ *
7
+ * The pure floor (src/core/durableSecretScrub.ts) does the redaction; THIS layer
8
+ * adds everything that is NOT pure:
9
+ * - config gating (enabled / dryRun) — dark-first per Graduated Rollout;
10
+ * - observability (FeatureMetricsLedger under feature key `durable-output-scrub`);
11
+ * - the MANDATORY provenance marker on every altered entry (spec Frontloaded
12
+ * Decision #2 — an unmarked alteration is a swallowed finding);
13
+ * - the per-store poisoning-rate alarm (spec §2 — a burst of credential-shaped
14
+ * plants is an attention event, not a quiet counter).
15
+ *
16
+ * SIGNAL-VS-AUTHORITY (spec §Decision points touched, P2): this is a detector
17
+ * holding MUTATION authority over durable content — sanctioned as a deterministic
18
+ * safety floor (the fork-bomb spawn-cap precedent) that earns that authority by
19
+ * being observable, bounded, and reversible-in-posture:
20
+ * - DARK-FIRST + dryRun soak with a measured false-positive rate;
21
+ * - provenance marker on every alteration (no silent mutation);
22
+ * - typed markers + structured metadata (diagnosable after the fact);
23
+ * - per-store opt-out in the chokepoint inventory;
24
+ * - an operator-gated enforce flip (dryRun:false is Frontloaded Decision #4).
25
+ *
26
+ * dryRun semantics (the canary): while dryRun holds, the scrub is COMPUTED and
27
+ * its would-redact metrics are recorded, but the ORIGINAL text is returned
28
+ * unchanged — no durable content is ever altered until a deliberate dryRun:false.
29
+ * Telemetry never carries the secret (the floor's metadata is kind/offset/length
30
+ * only, and this layer records COUNTS, never bytes).
31
+ */
32
+ import { type RedactionSpan, type StructuredRedactionSpan, type DurableSecretKind } from '../core/durableSecretScrub.js';
33
+ /** Minimal metrics sink — the real FeatureMetricsLedger satisfies this. */
34
+ export interface DurableScrubMetricsSink {
35
+ recordEvent(feature: string, outcome: 'fired' | 'noop' | 'error' | 'shed', verdictId?: string): void;
36
+ }
37
+ /** Fired when one store's redaction rate crosses the poisoning threshold. Carries
38
+ * COUNTS + kinds only — never bytes (spec §2 telemetry-safety). */
39
+ export interface PoisoningSignal {
40
+ store: string;
41
+ /** Redaction events for this store within the current window. */
42
+ count: number;
43
+ /** Distinct pattern kinds seen in the burst. */
44
+ kinds: DurableSecretKind[];
45
+ windowMs: number;
46
+ }
47
+ export declare const DURABLE_SCRUB_FEATURE_KEY = "durable-output-scrub";
48
+ export interface DurableOutputScrubberConfig {
49
+ /** Resolved via resolveDevAgentGate at the construction boundary (live-on-dev,
50
+ * dark-on-fleet). When false the scrubber is a strict no-op. */
51
+ enabled: boolean;
52
+ /** The canary: while true, compute + record metrics but return original text
53
+ * unchanged (no durable mutation). Defaults to TRUE (fail-safe — a missing
54
+ * dryRun flag must never silently enable real redaction). */
55
+ dryRun?: boolean;
56
+ /** Input size bound handed to the floor (spec §2). */
57
+ maxBytes?: number;
58
+ metrics?: DurableScrubMetricsSink;
59
+ /** Per-store redaction-rate alarm (spec §2 poisoning visibility). Fires ONCE
60
+ * per (store) window when count crosses the threshold. */
61
+ onPoisoningSuspected?: (signal: PoisoningSignal) => void;
62
+ /** Redactions within `poisoningWindowMs` on one store before the alarm fires. */
63
+ poisoningThreshold?: number;
64
+ poisoningWindowMs?: number;
65
+ /** Injectable clock for deterministic tests. */
66
+ now?: () => number;
67
+ }
68
+ export interface ScrubOutcome {
69
+ /** The text to persist. In dryRun (or when disabled) this is the ORIGINAL
70
+ * input; live-with-redactions it is the scrubbed text + provenance marker. */
71
+ text: string;
72
+ /** Structured redaction metadata (kind/offset/length only). Populated even in
73
+ * dryRun (the would-redact record) — never carries matched bytes. */
74
+ redactions: RedactionSpan[];
75
+ /** True only when the returned `text` was actually altered (live, ≥1 redaction). */
76
+ applied: boolean;
77
+ /** The one-line human-visible provenance marker, when any span was redacted. */
78
+ provenance?: string;
79
+ }
80
+ export interface ScrubStructuredOutcome<T> {
81
+ record: T;
82
+ redactions: StructuredRedactionSpan[];
83
+ applied: boolean;
84
+ provenance?: string;
85
+ }
86
+ export declare class DurableOutputScrubber {
87
+ private readonly enabled;
88
+ private readonly dryRun;
89
+ private readonly maxBytes?;
90
+ private readonly metrics?;
91
+ private readonly onPoisoningSuspected?;
92
+ private readonly poisoningThreshold;
93
+ private readonly poisoningWindowMs;
94
+ private readonly now;
95
+ /** Per-store rolling redaction timestamps + kinds for the poisoning alarm. */
96
+ private readonly poisoningState;
97
+ constructor(config: DurableOutputScrubberConfig);
98
+ /** True when the scrubber will actually mutate durable content (enabled AND live). */
99
+ isEnforcing(): boolean;
100
+ /** True when the scrubber is engaged at all (enabled — includes dryRun soak). */
101
+ isEngaged(): boolean;
102
+ private buildProvenance;
103
+ private recordAndAlarm;
104
+ private maybeAlarm;
105
+ /**
106
+ * Scrub a single durable string field. Returns the original text unchanged when
107
+ * disabled or in dryRun; the scrubbed text + provenance marker when enforcing.
108
+ * Metrics + poisoning alarm fire in BOTH dryRun and enforcing modes.
109
+ */
110
+ scrub(input: string, ctx: {
111
+ store: string;
112
+ callsite?: string;
113
+ }): ScrubOutcome;
114
+ /**
115
+ * Scrub the named string fields of a structured record before serialization
116
+ * (spec §2 — structured stores). Same dryRun/enforcing semantics as `scrub`.
117
+ */
118
+ scrubRecord<T extends Record<string, unknown>>(record: T, fields: readonly (keyof T)[], ctx: {
119
+ store: string;
120
+ callsite?: string;
121
+ }): ScrubStructuredOutcome<T>;
122
+ }
123
+ //# sourceMappingURL=DurableOutputScrubber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DurableOutputScrubber.d.ts","sourceRoot":"","sources":["../../src/monitoring/DurableOutputScrubber.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * DurableOutputScrubber — the config-gated Layer B service that wraps the shared
3
+ * `scrubForStore` floor at a durable-output persistence chokepoint (Durable-Output
4
+ * Hygiene Standard, "What Persists Must Be Clean" —
5
+ * docs/specs/durable-output-hygiene-standard.md §2).
6
+ *
7
+ * The pure floor (src/core/durableSecretScrub.ts) does the redaction; THIS layer
8
+ * adds everything that is NOT pure:
9
+ * - config gating (enabled / dryRun) — dark-first per Graduated Rollout;
10
+ * - observability (FeatureMetricsLedger under feature key `durable-output-scrub`);
11
+ * - the MANDATORY provenance marker on every altered entry (spec Frontloaded
12
+ * Decision #2 — an unmarked alteration is a swallowed finding);
13
+ * - the per-store poisoning-rate alarm (spec §2 — a burst of credential-shaped
14
+ * plants is an attention event, not a quiet counter).
15
+ *
16
+ * SIGNAL-VS-AUTHORITY (spec §Decision points touched, P2): this is a detector
17
+ * holding MUTATION authority over durable content — sanctioned as a deterministic
18
+ * safety floor (the fork-bomb spawn-cap precedent) that earns that authority by
19
+ * being observable, bounded, and reversible-in-posture:
20
+ * - DARK-FIRST + dryRun soak with a measured false-positive rate;
21
+ * - provenance marker on every alteration (no silent mutation);
22
+ * - typed markers + structured metadata (diagnosable after the fact);
23
+ * - per-store opt-out in the chokepoint inventory;
24
+ * - an operator-gated enforce flip (dryRun:false is Frontloaded Decision #4).
25
+ *
26
+ * dryRun semantics (the canary): while dryRun holds, the scrub is COMPUTED and
27
+ * its would-redact metrics are recorded, but the ORIGINAL text is returned
28
+ * unchanged — no durable content is ever altered until a deliberate dryRun:false.
29
+ * Telemetry never carries the secret (the floor's metadata is kind/offset/length
30
+ * only, and this layer records COUNTS, never bytes).
31
+ */
32
+ import { scrubForStore, scrubStructured, } from '../core/durableSecretScrub.js';
33
+ export const DURABLE_SCRUB_FEATURE_KEY = 'durable-output-scrub';
34
+ const DEFAULT_POISONING_THRESHOLD = 25;
35
+ const DEFAULT_POISONING_WINDOW_MS = 10 * 60_000;
36
+ export class DurableOutputScrubber {
37
+ enabled;
38
+ dryRun;
39
+ maxBytes;
40
+ metrics;
41
+ onPoisoningSuspected;
42
+ poisoningThreshold;
43
+ poisoningWindowMs;
44
+ now;
45
+ /** Per-store rolling redaction timestamps + kinds for the poisoning alarm. */
46
+ poisoningState = new Map();
47
+ constructor(config) {
48
+ this.enabled = config.enabled === true;
49
+ // Fail-safe: dryRun defaults TRUE. Real redaction requires an explicit false.
50
+ this.dryRun = config.dryRun !== false;
51
+ this.maxBytes = config.maxBytes;
52
+ this.metrics = config.metrics;
53
+ this.onPoisoningSuspected = config.onPoisoningSuspected;
54
+ this.poisoningThreshold = config.poisoningThreshold ?? DEFAULT_POISONING_THRESHOLD;
55
+ this.poisoningWindowMs = config.poisoningWindowMs ?? DEFAULT_POISONING_WINDOW_MS;
56
+ this.now = config.now ?? Date.now;
57
+ }
58
+ /** True when the scrubber will actually mutate durable content (enabled AND live). */
59
+ isEnforcing() {
60
+ return this.enabled && !this.dryRun;
61
+ }
62
+ /** True when the scrubber is engaged at all (enabled — includes dryRun soak). */
63
+ isEngaged() {
64
+ return this.enabled;
65
+ }
66
+ buildProvenance(result) {
67
+ const n = result.redactions.length;
68
+ if (result.error)
69
+ return '⚠ durable-output scrub error — field withheld (see feature metrics: durable-output-scrub)';
70
+ if (result.truncated)
71
+ return '⚠ durable-output oversize — field withheld (see feature metrics: durable-output-scrub)';
72
+ return `${n} span${n === 1 ? '' : 's'} redacted by durable-output scrub (see feature metrics: durable-output-scrub)`;
73
+ }
74
+ recordAndAlarm(store, result, kinds) {
75
+ // Metrics: fired (any redaction), error (fail-safe path), else noop. Counts
76
+ // only — never the matched bytes (telemetry-safety, spec §2).
77
+ if (this.metrics) {
78
+ const outcome = result.error ? 'error' : result.redactions.length > 0 ? 'fired' : 'noop';
79
+ try {
80
+ this.metrics.recordEvent(DURABLE_SCRUB_FEATURE_KEY, outcome);
81
+ }
82
+ catch { // @silent-fallback-ok — observability must never break the persist path; a metrics sink throw is dropped so the store write still completes.
83
+ /* metrics are best-effort — never break a durable write */
84
+ }
85
+ }
86
+ if (result.redactions.length === 0)
87
+ return;
88
+ this.maybeAlarm(store, kinds);
89
+ }
90
+ maybeAlarm(store, kinds) {
91
+ if (!this.onPoisoningSuspected)
92
+ return;
93
+ const t = this.now();
94
+ let state = this.poisoningState.get(store);
95
+ if (!state) {
96
+ state = { events: [], kinds: new Set(), alarmedAt: 0 };
97
+ this.poisoningState.set(store, state);
98
+ }
99
+ state.events.push(t);
100
+ for (const k of kinds)
101
+ state.kinds.add(k);
102
+ // Drop events outside the window.
103
+ const cutoff = t - this.poisoningWindowMs;
104
+ while (state.events.length > 0 && state.events[0] < cutoff)
105
+ state.events.shift();
106
+ if (state.events.length >= this.poisoningThreshold && state.alarmedAt < cutoff) {
107
+ state.alarmedAt = t;
108
+ const signal = {
109
+ store,
110
+ count: state.events.length,
111
+ kinds: [...state.kinds],
112
+ windowMs: this.poisoningWindowMs,
113
+ };
114
+ try {
115
+ this.onPoisoningSuspected(signal);
116
+ }
117
+ catch { // @silent-fallback-ok — the alarm callback is a signal-only escalation; a throw in the consumer must not break the durable write path.
118
+ /* escalation is best-effort — never break a durable write */
119
+ }
120
+ // Reset the window's kind set after alarming so a fresh burst re-signals.
121
+ state.kinds = new Set();
122
+ }
123
+ }
124
+ /**
125
+ * Scrub a single durable string field. Returns the original text unchanged when
126
+ * disabled or in dryRun; the scrubbed text + provenance marker when enforcing.
127
+ * Metrics + poisoning alarm fire in BOTH dryRun and enforcing modes.
128
+ */
129
+ scrub(input, ctx) {
130
+ if (!this.enabled) {
131
+ return { text: input, redactions: [], applied: false };
132
+ }
133
+ const result = scrubForStore(input, this.maxBytes != null ? { maxBytes: this.maxBytes } : {});
134
+ const kinds = result.redactions
135
+ .map((r) => r.kind)
136
+ .filter((k) => k !== 'scrub-error' && k !== 'oversize');
137
+ this.recordAndAlarm(ctx.store, result, kinds);
138
+ const hasRedaction = result.redactions.length > 0;
139
+ if (this.dryRun) {
140
+ // Canary: computed + recorded, but the ORIGINAL text is what persists.
141
+ return {
142
+ text: input,
143
+ redactions: result.redactions,
144
+ applied: false,
145
+ provenance: hasRedaction ? this.buildProvenance(result) : undefined,
146
+ };
147
+ }
148
+ // Enforcing: the scrubbed text persists, carrying the provenance marker.
149
+ return {
150
+ text: result.text,
151
+ redactions: result.redactions,
152
+ applied: hasRedaction,
153
+ provenance: hasRedaction ? this.buildProvenance(result) : undefined,
154
+ };
155
+ }
156
+ /**
157
+ * Scrub the named string fields of a structured record before serialization
158
+ * (spec §2 — structured stores). Same dryRun/enforcing semantics as `scrub`.
159
+ */
160
+ scrubRecord(record, fields, ctx) {
161
+ if (!this.enabled) {
162
+ return { record, redactions: [], applied: false };
163
+ }
164
+ const result = scrubStructured(record, fields, this.maxBytes != null ? { maxBytes: this.maxBytes } : {});
165
+ const kinds = result.redactions
166
+ .map((r) => r.kind)
167
+ .filter((k) => k !== 'scrub-error' && k !== 'oversize');
168
+ this.recordAndAlarm(ctx.store, { redactions: result.redactions, error: result.error }, kinds);
169
+ const hasRedaction = result.redactions.length > 0;
170
+ const provenance = hasRedaction
171
+ ? this.buildProvenance({ redactions: result.redactions, truncated: result.truncated, error: result.error })
172
+ : undefined;
173
+ if (this.dryRun) {
174
+ return { record, redactions: result.redactions, applied: false, provenance };
175
+ }
176
+ return { record: result.record, redactions: result.redactions, applied: hasRedaction, provenance };
177
+ }
178
+ }
179
+ //# sourceMappingURL=DurableOutputScrubber.js.map