instar 1.3.688 → 1.3.689

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.
@@ -1 +1 @@
1
- {"version":3,"file":"devGatedFeatures.d.ts","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAAe,EA8Z/C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,cAAc,GACd,gBAAgB,GAChB,sBAAsB,GACtB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,EA2InD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAO5E"}
1
+ {"version":3,"file":"devGatedFeatures.d.ts","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,eAAe,EA8Z/C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,cAAc,GACd,gBAAgB,GAChB,sBAAsB,GACtB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,EAgJnD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAO5E"}
@@ -491,6 +491,11 @@ export const DARK_GATE_EXCLUSIONS = [
491
491
  category: 'optional-integration',
492
492
  reason: 'hold-for-stability policy; trails inboundQueue one rollout stage behind (operator discipline)',
493
493
  },
494
+ {
495
+ configPath: 'multiMachine.sessionPool.ownershipCheckedSpawn.enabled',
496
+ category: 'optional-integration',
497
+ reason: 'G3 lease-gated spawn (MESH-SELF-HEAL-SPEC §3.3) — spawn iff holding the fenced awake-lease, else forward to holder; stops the duplicate-session harm. Dark→dry-run→dev-live→fleet, live-verified on the real Mini+Laptop pair before enablement.',
498
+ },
494
499
  // (the 7 multiMachine.stateSync.* memory stores — preferences, relationships,
495
500
  // learnings, knowledge, evolutionActions, userRegistry, topicOperator — MOVED to
496
501
  // DEV_GATED_FEATURES on 2026-06-13 per operator directive topic 13481: "NOTHING
@@ -1 +1 @@
1
- {"version":3,"file":"devGatedFeatures.js","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"devGatedFeatures.js","sourceRoot":"","sources":["../../src/core/devGatedFeatures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,232 @@
1
+ /**
2
+ * G3 — Lease-gated session spawn (MESH-SELF-HEAL-SPEC §3.3, FD6).
3
+ *
4
+ * The incident: a non-holder machine spawned its OWN session for a topic the
5
+ * holder already owned → two machines served one topic → double-replies. The
6
+ * structural fix is "spawn iff I hold the fenced awake-lease, else forward to
7
+ * the holder." Per the spec's foundation note B, the gate keys on the ONE
8
+ * trustworthy authority — the fenced awake-lease — NOT a placement view (which
9
+ * is not reliably readable from a non-router machine).
10
+ *
11
+ * This module is a PURE decision function (no I/O), mirroring SessionRouter's
12
+ * testable-pure pattern, so both sides of the boundary are unit-testable.
13
+ * The wiring (calling holdsLease(), forwarding via SessionRouter/deliverMessage)
14
+ * lives at the spawn callsites; this only decides spawn-vs-forward.
15
+ *
16
+ * Fail direction: CLOSED (FD6) — under ambiguity (cannot confirm we hold the
17
+ * lease) we do NOT spawn; we forward/defer, and G2's nobody-polling detector is
18
+ * the bounded backstop that guarantees someone ends up serving. A wrongful spawn
19
+ * is the duplicate the spec exists to prevent; a wrongful forward is recovered.
20
+ *
21
+ * Single-machine + flag-off MUST be byte-for-byte the legacy behavior (always
22
+ * spawn locally) — the gate is additive, dark by default.
23
+ */
24
+ export interface LeaseGatedSpawnInputs {
25
+ /**
26
+ * Whether THIS machine currently holds the fenced awake-lease.
27
+ * Sourced from MultiMachineCoordinator.holdsLease(), which DEFAULTS TO true on
28
+ * a single-machine agent (no leaseCoordinator) — so single-machine naturally
29
+ * resolves to 'spawn'.
30
+ */
31
+ holdsLease: boolean;
32
+ /** The ownershipCheckedSpawn flag (multiMachine.sessionPool.ownershipCheckedSpawn.enabled). */
33
+ flagEnabled: boolean;
34
+ /** Dry-run: log the intended decision but still spawn locally (observe-only soak). */
35
+ dryRun: boolean;
36
+ /**
37
+ * True when this agent is NOT running multi-machine (no peers / no lease
38
+ * coordinator). A single-machine agent always spawns locally regardless of
39
+ * the flag — the gate is a no-op there.
40
+ */
41
+ singleMachine: boolean;
42
+ /**
43
+ * Whether the forward path (SessionRouter / deliverMessage to the holder) is
44
+ * actually available. If the gate would forward but no forward seam exists,
45
+ * we must NOT strand the message — we fall back to spawning locally and flag
46
+ * it, because a stranded inbound (nobody serves) is worse than a rare
47
+ * duplicate. G2 is the backstop, but the forward seam is the primary path.
48
+ */
49
+ forwardAvailable: boolean;
50
+ }
51
+ export type LeaseGatedSpawnAction = 'spawn' | 'forward' | 'dry-run-would-forward' | 'spawn-forward-unavailable';
52
+ export interface LeaseGatedSpawnDecision {
53
+ action: LeaseGatedSpawnAction;
54
+ /** True when a session should actually be spawned locally as a result. */
55
+ spawnLocally: boolean;
56
+ /** Short machine-readable reason for the audit log. */
57
+ reason: string;
58
+ }
59
+ /**
60
+ * Decide whether to spawn a session locally for an inbound topic message, or
61
+ * forward it to the lease holder. Pure: no I/O, fully unit-testable.
62
+ */
63
+ export declare function decideLeaseGatedSpawn(inputs: LeaseGatedSpawnInputs): LeaseGatedSpawnDecision;
64
+ /**
65
+ * G3.4 — Single-writer binding lifecycle: clear-on-kill (MESH-SELF-HEAL-SPEC §3.3,
66
+ * FD7). The incident: killing a duplicate session did NOT clear its topic→session
67
+ * binding — only an explicit topic pin stopped the re-spawn, so a dead session's
68
+ * stale binding could silently resurrect work. The invariant is "a binding exists
69
+ * IFF a live session exists for it": the moment a session is killed, its binding
70
+ * must go.
71
+ *
72
+ * Safety note (why clearing on kill never breaks resume): the topic→session
73
+ * binding maps topicId→tmux-session-name; the RESUME UUID lives separately in
74
+ * TopicResumeMap keyed by topicId. Clearing the binding to a dead tmux session
75
+ * does not touch the resume UUID — the next inbound for the topic re-spawns a
76
+ * FRESH session (with --resume) and re-registers a new binding. We are only
77
+ * removing a pointer at a corpse.
78
+ *
79
+ * Pure: no I/O. The wiring (resolving the topic for the killed session, calling
80
+ * unregisterTopic, the audit line) lives at the beforeSessionKill listener.
81
+ *
82
+ * Gating mirrors the spawn gate: dark + dryRun by default ⇒ a strict no-op until
83
+ * the operator opts into the G3 single-writer binding lifecycle.
84
+ */
85
+ export interface BindingCleanupOnKillInputs {
86
+ /** The ownershipCheckedSpawn flag (multiMachine.sessionPool.ownershipCheckedSpawn.enabled). */
87
+ flagEnabled: boolean;
88
+ /** Dry-run: record the counterfactual but DO NOT clear the binding (observe-only soak). */
89
+ dryRun: boolean;
90
+ /** True when the killed session has a resolvable topic→session binding to clear. */
91
+ hasBinding: boolean;
92
+ /**
93
+ * True when this kill is immediately followed by a SAME-TOPIC respawn
94
+ * (context-exhaustion / recovery bounce, framework swap). The respawn resolves
95
+ * its target via getSessionForTopic, so clearing the binding first would make
96
+ * that lookup return null and the recovery silently abort. A respawn-kill must
97
+ * NEVER clear the binding (and must not record a would-clear counterfactual,
98
+ * since clearing would be the WRONG action there). Mirrors the resume-UUID-save
99
+ * listener's contextExhaustionKills guard. Defaults false (a terminal kill).
100
+ */
101
+ respawnImminent?: boolean;
102
+ }
103
+ export type BindingCleanupAction = 'clear' | 'dry-run-would-clear' | 'skip-no-binding' | 'skip-respawn-kill' | 'skip-legacy';
104
+ export interface BindingCleanupDecision {
105
+ action: BindingCleanupAction;
106
+ /** True when the binding should actually be unregistered as a result. */
107
+ clearNow: boolean;
108
+ /** Short machine-readable reason for the audit log. */
109
+ reason: string;
110
+ }
111
+ /**
112
+ * Decide whether to clear a killed session's topic→session binding. Pure: no I/O,
113
+ * fully unit-testable on both sides of the boundary.
114
+ */
115
+ export declare function decideBindingCleanupOnKill(inputs: BindingCleanupOnKillInputs): BindingCleanupDecision;
116
+ /**
117
+ * Soak-evidence ledger (operator directive 2026-06-27 — "observe-mode must record
118
+ * EVALUABLE counterfactual evidence, not a throwaway log line; otherwise it's
119
+ * useless and can never justify promotion"). This is the structured metric that
120
+ * lets a later promotion-review say, concretely, "G3 caught N real duplicate-spawn
121
+ * attempts in dryRun over the soak → promote it" (or "never fired → remove it").
122
+ *
123
+ * THE load-bearing counterfactual metric is `wouldHavePreventedDuplicate`: in
124
+ * dry-run, every `dry-run-would-forward` is a duplicate session this gate WOULD
125
+ * have prevented had it been enabled — i.e. a real instance of the incident's harm
126
+ * that the gate would have stopped. A nonzero, growing count over a clean soak is
127
+ * the evidence FOR promotion; a flat zero over a long soak is evidence the gate is
128
+ * a no-op here (consider removal). Either way the loop can close.
129
+ */
130
+ export interface LeaseGatedSpawnSoakSummary {
131
+ /** Decisions observed total. */
132
+ decisions: number;
133
+ /** Spawned locally because we hold the lease (the normal, correct path). */
134
+ spawnedAsHolder: number;
135
+ /** Spawned locally as a single-machine / flag-off no-op. */
136
+ spawnedLegacy: number;
137
+ /** Actually forwarded (gate enabled, non-dry-run, not holder) — enforcement firing. */
138
+ forwarded: number;
139
+ /**
140
+ * THE counterfactual: in dry-run, a non-holder spawn the gate WOULD have
141
+ * forwarded — i.e. a duplicate session it would have prevented if enabled.
142
+ */
143
+ wouldHavePreventedDuplicate: number;
144
+ /** Not holder but no forward seam available → spawned to avoid a strand (a gap to close). */
145
+ spawnedNoForwardSeam: number;
146
+ /** Binding-cleanup decisions observed on session-kill. */
147
+ bindingCleanupDecisions: number;
148
+ /** Stale bindings actually cleared on kill (enforcement firing). */
149
+ bindingsCleared: number;
150
+ /**
151
+ * THE binding-cleanup counterfactual: in dry-run, each killed session that
152
+ * still had a binding is a stale binding the gate WOULD have cleared — i.e. a
153
+ * potential silent stale-respawn it would have prevented if enabled.
154
+ */
155
+ wouldHaveClearedStaleBinding: number;
156
+ firstAt: string | null;
157
+ lastAt: string | null;
158
+ }
159
+ export declare class LeaseGatedSpawnSoakLedger {
160
+ private s;
161
+ /** Record one decision. `nowIso` is injected (callers pass a real timestamp). */
162
+ record(decision: LeaseGatedSpawnDecision, nowIso: string): void;
163
+ /**
164
+ * Record one binding-cleanup-on-kill decision (G3.4). `nowIso` is injected.
165
+ * Only decisions that touch a real binding (clear / would-clear) advance the
166
+ * counters; skip-legacy / skip-no-binding are non-events for the soak metric.
167
+ */
168
+ recordBindingCleanup(decision: BindingCleanupDecision, nowIso: string): void;
169
+ summary(): LeaseGatedSpawnSoakSummary;
170
+ /**
171
+ * A promotion recommendation derived from the soak evidence — the thing that
172
+ * was NEVER produced before (operator: "you've never once recommended promoting
173
+ * a dark feature"). Deterministic, evidence-based, advisory.
174
+ */
175
+ promotionSignal(minDuplicatesToPromote?: number): {
176
+ recommendation: 'promote' | 'keep-soaking' | 'consider-removal' | 'enforcing';
177
+ why: string;
178
+ };
179
+ }
180
+ /**
181
+ * The minimal binding-registry surface the kill-time cleanup needs. Mirrors the
182
+ * relevant slice of TelegramAdapter (getTopicForSession / unregisterTopic) so the
183
+ * cleanup wiring is unit-testable against a fake without a real adapter/tmux.
184
+ */
185
+ export interface BindingRegistryPort {
186
+ getTopicForSession(sessionName: string): number | null;
187
+ unregisterTopic(topicId: number): void;
188
+ }
189
+ /**
190
+ * G3.4 wiring helper — resolve the killed session's topic binding, decide whether
191
+ * to clear it (pure fn), record the soak counterfactual, and on a live decision
192
+ * actually unregister the stale binding. Returns the decision for the caller's
193
+ * audit. Kept here (not inlined at the beforeSessionKill listener) so the
194
+ * single-writer-on-kill invariant has a wiring-integrity test target.
195
+ *
196
+ * Order contract: the caller MUST run this AFTER the resume-UUID save (the UUID
197
+ * lives in TopicResumeMap keyed by topicId, so clearing the binding can't lose
198
+ * it — but resolving the topic for the UUID save reads the same binding, so save
199
+ * first, clear second).
200
+ */
201
+ export interface BindingCleanupAuditEntry {
202
+ ts: string;
203
+ /** 'binding-cleared' when actually cleared; 'binding-would-clear' in dry-run. */
204
+ event: 'binding-cleared' | 'binding-would-clear';
205
+ topicId: number;
206
+ sessionName: string;
207
+ dryRun: boolean;
208
+ reason: string;
209
+ }
210
+ export declare function applyBindingCleanupOnKill(args: {
211
+ registry: BindingRegistryPort;
212
+ sessionName: string;
213
+ flagEnabled: boolean;
214
+ dryRun: boolean;
215
+ ledger: LeaseGatedSpawnSoakLedger;
216
+ nowIso: string;
217
+ log?: (msg: string) => void;
218
+ /** Optional durable audit sink (logs/mesh-selfheal.jsonl) — invoked ONLY on a
219
+ * real transition (clear / would-clear), never on a skip. Spec §6. */
220
+ audit?: (entry: BindingCleanupAuditEntry) => void;
221
+ /** True when a same-topic respawn follows this kill (recovery bounce) — keep the
222
+ * binding so recovery's getSessionForTopic lookup resolves. See input docs. */
223
+ respawnImminent?: boolean;
224
+ }): BindingCleanupDecision;
225
+ /**
226
+ * Process-wide shared soak ledger — one source of truth for the G3 gate's
227
+ * evaluable evidence. server.ts (the spawn callsites) RECORDS to it; routes.ts
228
+ * (GET /mesh-selfheal/g3) READS it for the operator's promotion-evidence surface.
229
+ * A shared singleton avoids threading the ledger through AgentServer's RouteContext.
230
+ */
231
+ export declare const sharedG3SoakLedger: LeaseGatedSpawnSoakLedger;
232
+ //# sourceMappingURL=leaseGatedSpawn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaseGatedSpawn.d.ts","sourceRoot":"","sources":["../../src/core/leaseGatedSpawn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * G3 — Lease-gated session spawn (MESH-SELF-HEAL-SPEC §3.3, FD6).
3
+ *
4
+ * The incident: a non-holder machine spawned its OWN session for a topic the
5
+ * holder already owned → two machines served one topic → double-replies. The
6
+ * structural fix is "spawn iff I hold the fenced awake-lease, else forward to
7
+ * the holder." Per the spec's foundation note B, the gate keys on the ONE
8
+ * trustworthy authority — the fenced awake-lease — NOT a placement view (which
9
+ * is not reliably readable from a non-router machine).
10
+ *
11
+ * This module is a PURE decision function (no I/O), mirroring SessionRouter's
12
+ * testable-pure pattern, so both sides of the boundary are unit-testable.
13
+ * The wiring (calling holdsLease(), forwarding via SessionRouter/deliverMessage)
14
+ * lives at the spawn callsites; this only decides spawn-vs-forward.
15
+ *
16
+ * Fail direction: CLOSED (FD6) — under ambiguity (cannot confirm we hold the
17
+ * lease) we do NOT spawn; we forward/defer, and G2's nobody-polling detector is
18
+ * the bounded backstop that guarantees someone ends up serving. A wrongful spawn
19
+ * is the duplicate the spec exists to prevent; a wrongful forward is recovered.
20
+ *
21
+ * Single-machine + flag-off MUST be byte-for-byte the legacy behavior (always
22
+ * spawn locally) — the gate is additive, dark by default.
23
+ */
24
+ /**
25
+ * Decide whether to spawn a session locally for an inbound topic message, or
26
+ * forward it to the lease holder. Pure: no I/O, fully unit-testable.
27
+ */
28
+ export function decideLeaseGatedSpawn(inputs) {
29
+ const { holdsLease, flagEnabled, dryRun, singleMachine, forwardAvailable } = inputs;
30
+ // Legacy / no-op paths — byte-for-byte the prior behavior (always spawn).
31
+ if (!flagEnabled) {
32
+ return { action: 'spawn', spawnLocally: true, reason: 'flag-off-legacy' };
33
+ }
34
+ if (singleMachine) {
35
+ return { action: 'spawn', spawnLocally: true, reason: 'single-machine-noop' };
36
+ }
37
+ // Multi-machine, flag on: gate on the fenced lease.
38
+ if (holdsLease) {
39
+ return { action: 'spawn', spawnLocally: true, reason: 'holds-lease' };
40
+ }
41
+ // We do NOT hold the lease → we must NOT spawn (fail-CLOSED, FD6). Forward to
42
+ // the holder — UNLESS the forward seam is unavailable (then spawn to avoid a
43
+ // strand, and flag it) or we are in dry-run soak (spawn + log the intent).
44
+ if (dryRun) {
45
+ return {
46
+ action: 'dry-run-would-forward',
47
+ spawnLocally: true,
48
+ reason: 'dry-run-would-forward-not-holder',
49
+ };
50
+ }
51
+ if (!forwardAvailable) {
52
+ return {
53
+ action: 'spawn-forward-unavailable',
54
+ spawnLocally: true,
55
+ reason: 'not-holder-but-no-forward-seam-avoid-strand',
56
+ };
57
+ }
58
+ return { action: 'forward', spawnLocally: false, reason: 'not-holder-forward-to-owner' };
59
+ }
60
+ /**
61
+ * Decide whether to clear a killed session's topic→session binding. Pure: no I/O,
62
+ * fully unit-testable on both sides of the boundary.
63
+ */
64
+ export function decideBindingCleanupOnKill(inputs) {
65
+ const { flagEnabled, dryRun, hasBinding, respawnImminent } = inputs;
66
+ // Flag off ⇒ byte-for-byte the legacy behavior (binding persists across kill).
67
+ if (!flagEnabled) {
68
+ return { action: 'skip-legacy', clearNow: false, reason: 'flag-off-legacy' };
69
+ }
70
+ // Nothing bound to this session ⇒ nothing to clear (not a counterfactual either).
71
+ if (!hasBinding) {
72
+ return { action: 'skip-no-binding', clearNow: false, reason: 'no-binding-for-session' };
73
+ }
74
+ // Kill is immediately followed by a same-topic respawn (recovery bounce) ⇒ keep
75
+ // the binding so the respawn's getSessionForTopic lookup still resolves. Takes
76
+ // precedence over dryRun so we never record a would-clear counterfactual that
77
+ // would, if promoted, BREAK recovery. (G3 side-effects second-pass review.)
78
+ if (respawnImminent) {
79
+ return { action: 'skip-respawn-kill', clearNow: false, reason: 'respawn-imminent-keep-binding' };
80
+ }
81
+ // Observe-only soak: record the counterfactual, leave the binding in place.
82
+ if (dryRun) {
83
+ return {
84
+ action: 'dry-run-would-clear',
85
+ clearNow: false,
86
+ reason: 'dry-run-would-clear-stale-binding',
87
+ };
88
+ }
89
+ // Enabled + live: enforce the invariant — clear the stale binding now.
90
+ return { action: 'clear', clearNow: true, reason: 'clear-stale-binding-on-kill' };
91
+ }
92
+ export class LeaseGatedSpawnSoakLedger {
93
+ s = {
94
+ decisions: 0,
95
+ spawnedAsHolder: 0,
96
+ spawnedLegacy: 0,
97
+ forwarded: 0,
98
+ wouldHavePreventedDuplicate: 0,
99
+ spawnedNoForwardSeam: 0,
100
+ bindingCleanupDecisions: 0,
101
+ bindingsCleared: 0,
102
+ wouldHaveClearedStaleBinding: 0,
103
+ firstAt: null,
104
+ lastAt: null,
105
+ };
106
+ /** Record one decision. `nowIso` is injected (callers pass a real timestamp). */
107
+ record(decision, nowIso) {
108
+ this.s.decisions += 1;
109
+ if (this.s.firstAt === null)
110
+ this.s.firstAt = nowIso;
111
+ this.s.lastAt = nowIso;
112
+ switch (decision.action) {
113
+ case 'spawn':
114
+ if (decision.reason === 'holds-lease')
115
+ this.s.spawnedAsHolder += 1;
116
+ else
117
+ this.s.spawnedLegacy += 1; // flag-off-legacy | single-machine-noop
118
+ break;
119
+ case 'forward':
120
+ this.s.forwarded += 1;
121
+ break;
122
+ case 'dry-run-would-forward':
123
+ this.s.wouldHavePreventedDuplicate += 1;
124
+ break;
125
+ case 'spawn-forward-unavailable':
126
+ this.s.spawnedNoForwardSeam += 1;
127
+ break;
128
+ }
129
+ }
130
+ /**
131
+ * Record one binding-cleanup-on-kill decision (G3.4). `nowIso` is injected.
132
+ * Only decisions that touch a real binding (clear / would-clear) advance the
133
+ * counters; skip-legacy / skip-no-binding are non-events for the soak metric.
134
+ */
135
+ recordBindingCleanup(decision, nowIso) {
136
+ switch (decision.action) {
137
+ case 'clear':
138
+ this.s.bindingCleanupDecisions += 1;
139
+ this.s.bindingsCleared += 1;
140
+ break;
141
+ case 'dry-run-would-clear':
142
+ this.s.bindingCleanupDecisions += 1;
143
+ this.s.wouldHaveClearedStaleBinding += 1;
144
+ break;
145
+ // skip-legacy / skip-no-binding: nothing to count (no binding was at risk).
146
+ default:
147
+ return;
148
+ }
149
+ if (this.s.firstAt === null)
150
+ this.s.firstAt = nowIso;
151
+ this.s.lastAt = nowIso;
152
+ }
153
+ summary() {
154
+ return { ...this.s };
155
+ }
156
+ /**
157
+ * A promotion recommendation derived from the soak evidence — the thing that
158
+ * was NEVER produced before (operator: "you've never once recommended promoting
159
+ * a dark feature"). Deterministic, evidence-based, advisory.
160
+ */
161
+ promotionSignal(minDuplicatesToPromote = 1) {
162
+ const s = this.s;
163
+ if (s.forwarded > 0 || s.bindingsCleared > 0) {
164
+ const parts = [];
165
+ if (s.forwarded > 0)
166
+ parts.push(`forwarded ${s.forwarded} inbound(s) to the holder`);
167
+ if (s.bindingsCleared > 0)
168
+ parts.push(`cleared ${s.bindingsCleared} stale binding(s) on kill`);
169
+ return { recommendation: 'enforcing', why: `gate is live and has ${parts.join(' and ')}` };
170
+ }
171
+ const counterfactual = s.wouldHavePreventedDuplicate + s.wouldHaveClearedStaleBinding;
172
+ if (counterfactual >= minDuplicatesToPromote) {
173
+ return {
174
+ recommendation: 'promote',
175
+ why: `dry-run would have prevented ${s.wouldHavePreventedDuplicate} duplicate session(s) and cleared ${s.wouldHaveClearedStaleBinding} stale binding(s) — real harm the gate stops; promote to enabled`,
176
+ };
177
+ }
178
+ const observed = s.decisions + s.bindingCleanupDecisions;
179
+ if (observed === 0) {
180
+ return { recommendation: 'keep-soaking', why: 'no decisions observed yet' };
181
+ }
182
+ return {
183
+ recommendation: 'consider-removal',
184
+ why: `${observed} decision(s) observed, 0 counterfactual prevention — the gate has not fired usefully here`,
185
+ };
186
+ }
187
+ }
188
+ export function applyBindingCleanupOnKill(args) {
189
+ const { registry, sessionName, flagEnabled, dryRun, ledger, nowIso, log, audit, respawnImminent } = args;
190
+ const topicId = registry.getTopicForSession(sessionName);
191
+ const decision = decideBindingCleanupOnKill({
192
+ flagEnabled,
193
+ dryRun,
194
+ hasBinding: topicId !== null,
195
+ respawnImminent,
196
+ });
197
+ ledger.recordBindingCleanup(decision, nowIso);
198
+ if (decision.clearNow && topicId !== null) {
199
+ registry.unregisterTopic(topicId);
200
+ log?.(`[g3-binding-cleanup] cleared stale binding for topic ${topicId} (session "${sessionName}") on kill — binding-IFF-live-session`);
201
+ audit?.({ ts: nowIso, event: 'binding-cleared', topicId, sessionName, dryRun, reason: decision.reason });
202
+ }
203
+ else if (decision.action === 'dry-run-would-clear' && topicId !== null) {
204
+ log?.(`[g3-binding-cleanup] DRY-RUN would clear stale binding for topic ${topicId} (session "${sessionName}") on kill`);
205
+ audit?.({ ts: nowIso, event: 'binding-would-clear', topicId, sessionName, dryRun, reason: decision.reason });
206
+ }
207
+ return decision;
208
+ }
209
+ /**
210
+ * Process-wide shared soak ledger — one source of truth for the G3 gate's
211
+ * evaluable evidence. server.ts (the spawn callsites) RECORDS to it; routes.ts
212
+ * (GET /mesh-selfheal/g3) READS it for the operator's promotion-evidence surface.
213
+ * A shared singleton avoids threading the ledger through AgentServer's RouteContext.
214
+ */
215
+ export const sharedG3SoakLedger = new LeaseGatedSpawnSoakLedger();
216
+ //# sourceMappingURL=leaseGatedSpawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaseGatedSpawn.js","sourceRoot":"","sources":["../../src/core/leaseGatedSpawn.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CapabilityIndex.d.ts","sourceRoot":"","sources":["../../src/server/CapabilityIndex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,yEAAyE;AACzE,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,YAAY,CAAC;IAClB,iFAAiF;IACjF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kFAAkF;IAClF,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,OAAO,CAAC;CAC1D;AAID,eAAO,MAAM,gBAAgB,EAAE,SAAS,eAAe,EAmiCtD,CAAC;AAsCF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAuE/E,CAAC;AAIF;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAUzD;AAED,mEAAmE;AACnE,wBAAgB,sBAAsB,IAAI,GAAG,CAAC,MAAM,CAAC,CAEpD;AAED,sEAAsE;AACtE,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,oBAAoB,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB"}
1
+ {"version":3,"file":"CapabilityIndex.d.ts","sourceRoot":"","sources":["../../src/server/CapabilityIndex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,yEAAyE;AACzE,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,YAAY,CAAC;IAClB,iFAAiF;IACjF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kFAAkF;IAClF,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,kEAAkE;IAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,OAAO,CAAC;CAC1D;AAID,eAAO,MAAM,gBAAgB,EAAE,SAAS,eAAe,EAmiCtD,CAAC;AAsCF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAwE/E,CAAC;AAIF;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAUzD;AAED,mEAAmE;AACnE,wBAAgB,sBAAsB,IAAI,GAAG,CAAC,MAAM,CAAC,CAEpD;AAED,sEAAsE;AACtE,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,oBAAoB,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB"}
@@ -1188,6 +1188,7 @@ export const INTERNAL_PREFIXES = [
1188
1188
  { prefix: 'hooks', reason: 'hook listing surfaced via the top-level `hooks` field of the response' },
1189
1189
  { prefix: 'threadline', reason: 'surfaced via discovery (threadline-relay feature)' },
1190
1190
  { prefix: 'mesh', reason: 'machine-to-machine MeshRpc transport (§L0 Session Pool) — Ed25519-signed, recipient-bound peer commands; never an agent/user capability' },
1191
+ { prefix: 'mesh-selfheal', reason: 'G3 lease-gated-spawn promotion-evidence surface (MESH-SELF-HEAL-SPEC §3.3) — read-only soak ledger (would-have-prevented-duplicate / would-have-cleared-stale-binding + promotion recommendation) the agent READS for the dark-feature graduation loop; operational observability like /worktrees/agent-reaper, not a user-invokable capability' },
1191
1192
  { prefix: 'session-pool', reason: 'session-pool rollout-gate E2E results (§Rollout) — operator observability for a dark feature, not a conversational capability' },
1192
1193
  ];
1193
1194
  // ── Public helpers ───────────────────────────────────────────────────────