instar 1.3.651 → 1.3.653
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.
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +403 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/core/ReapGuard.d.ts +13 -1
- package/dist/core/ReapGuard.d.ts.map +1 -1
- package/dist/core/ReapGuard.js +86 -30
- package/dist/core/ReapGuard.js.map +1 -1
- package/dist/core/SessionManager.d.ts +11 -0
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +30 -4
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/devGatedFeatures.d.ts.map +1 -1
- package/dist/core/devGatedFeatures.js +12 -0
- package/dist/core/devGatedFeatures.js.map +1 -1
- package/dist/core/gapBCommitmentEvidence.d.ts +9 -0
- package/dist/core/gapBCommitmentEvidence.d.ts.map +1 -1
- package/dist/core/gapBCommitmentEvidence.js +20 -0
- package/dist/core/gapBCommitmentEvidence.js.map +1 -1
- package/dist/core/ownershipFollowsLiveWork.d.ts +68 -0
- package/dist/core/ownershipFollowsLiveWork.d.ts.map +1 -0
- package/dist/core/ownershipFollowsLiveWork.js +95 -0
- package/dist/core/ownershipFollowsLiveWork.js.map +1 -0
- package/dist/core/types.d.ts +26 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/messaging/stuckMessageRecovery.d.ts +12 -0
- package/dist/messaging/stuckMessageRecovery.d.ts.map +1 -1
- package/dist/messaging/stuckMessageRecovery.js +12 -0
- package/dist/messaging/stuckMessageRecovery.js.map +1 -1
- package/dist/monitoring/SessionReaper.d.ts +118 -7
- package/dist/monitoring/SessionReaper.d.ts.map +1 -1
- package/dist/monitoring/SessionReaper.js +302 -101
- package/dist/monitoring/SessionReaper.js.map +1 -1
- package/dist/monitoring/SessionRecovery.d.ts +73 -0
- package/dist/monitoring/SessionRecovery.d.ts.map +1 -1
- package/dist/monitoring/SessionRecovery.js +113 -0
- package/dist/monitoring/SessionRecovery.js.map +1 -1
- package/dist/monitoring/closeoutLivenessSnapshot.d.ts +143 -0
- package/dist/monitoring/closeoutLivenessSnapshot.d.ts.map +1 -0
- package/dist/monitoring/closeoutLivenessSnapshot.js +207 -0
- package/dist/monitoring/closeoutLivenessSnapshot.js.map +1 -0
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +3 -3
- package/upgrades/1.3.652.md +18 -0
- package/upgrades/1.3.653.md +85 -0
- package/upgrades/side-effects/ownership-follows-live-work.md +137 -0
- package/upgrades/side-effects/post-transfer-closeout-correctness.md +43 -0
|
@@ -126,6 +126,12 @@ export const DEV_GATED_FEATURES = [
|
|
|
126
126
|
description: 'Per-branch PR-push lease so two of the agent’s own concurrent sessions can’t push competing commits to the same branch (spec: parallel-hand-pr-lease).',
|
|
127
127
|
justification: 'Ships dryRun:true (the dry-run canary): on a dev agent the PreToolUse hook + the /pr-leases/evaluate route run the FULL decision loop and AUDIT every would-deny, but the route returns decision:allow (wouldDeny flag) while dryRun holds, so NO push is ever blocked until a deliberate dryRun:false. Coordinates the agent’s OWN cooperating hands only — never authority over a principal, never external egress; every uncertainty (corrupt state, server down, hook crash, no branch key) fails OPEN (allows the push). No spend, no destructive action while the canary holds. Same dogfooding posture as topicProfiles / credentialRepointing.',
|
|
128
128
|
},
|
|
129
|
+
{
|
|
130
|
+
name: 'closeoutLivenessGate',
|
|
131
|
+
configPath: 'monitoring.sessionReaper.closeoutLivenessGate',
|
|
132
|
+
description: 'Post-transfer closeout correctness (F1) — the SessionReaper closeout liveness gate: never terminate the live local session on a stale/unverified ownership record (spec: post-transfer-closeout-correctness).',
|
|
133
|
+
justification: 'STRICTLY MORE CONSERVATIVE: the gate can only ever WITHHOLD a kill the closeout would otherwise have attempted (every uncertainty — false/unknown/dep-absent/throw — fails CLOSED to WITHHOLD), except the one liveness-CONFIRMED genuine-move case where it lets a true duplicate shed via a narrow audited keep-reason bypass. The terminate still routes through the guarded terminateSession authority (signal-vs-authority: the liveness reading only changes the DECISION to attempt, never bypasses a guard wholesale). The liveness snapshot reuses the existing GET /sessions fan-out (5s-timeout, owner-scoped) — no new endpoint, no extra fleet polling when the gate is off (the refresher is constructed ONLY when resolved on), machine-local (not replicated), no spend. Dogfooded live-on-dev before any fleet flip; the dev-gate per-machine resolution is CORRECT here because the closeout is a per-machine janitor making its OWN independently-safe decision (it never corrupts cross-machine state).',
|
|
134
|
+
},
|
|
129
135
|
// ── multi-machine seamlessness coherence layers (WS3 / WS1.3 / WS4.1 / WS4.3),
|
|
130
136
|
// MOVED from hardcoded `false` in ConfigDefaults on 2026-06-13 per operator
|
|
131
137
|
// directive topic 13481 ("NOTHING should ship dark on development agents —
|
|
@@ -210,6 +216,12 @@ export const DEV_GATED_FEATURES = [
|
|
|
210
216
|
description: 'Transfer fix (live-user-channel-proof spec §7.2) — swaps the in-memory session-ownership store for a DURABLE per-session store + the OwnershipApplier that materializes ownership on the target from the REPLICATED placement journal, so a topic seat genuinely moves between machines.',
|
|
211
217
|
justification: 'Coordinates between the operator\'s OWN machines only — no external egress. The durable store is a per-session atomic JSON write (a cache of journal-decided ownership, not a new authority); the applier only ADOPTS a placement strictly newer than local via fast-forward CAS (it can never clobber a fresher local decision) and runs OFF the routing hot path on an interval; fully reversible (flip back to InMemory — the journal remains the source of truth); single-machine = no-op (no peer placements to apply). No destructive action, no third-party spend. Runs live (dryRun N/A — no destructive write to gate) on dev / dark on fleet.',
|
|
212
218
|
},
|
|
219
|
+
{
|
|
220
|
+
name: 'ownershipFollowsLiveWork',
|
|
221
|
+
configPath: 'multiMachine.ownershipFollowsLiveWork',
|
|
222
|
+
description: 'Ownership Follows Live Work (docs/specs/ownership-follows-live-work.md) — the ownership-record correction PR #1258 deferred: release-on-complete (A) + claim-on-autonomous-spawn (B) + a per-topic double-dispatch recovery gate (D), so the SessionOwnership record self-corrects toward where the live session actually is.',
|
|
223
|
+
justification: 'Coordinates the operator\'s OWN machines only — no external egress, no third-party spend, no destructive fs/git action. Parts A/B add TWO fenced-epoch CAS callsites to the EXISTING replicated ownership lifecycle (the same SessionOwnershipRegistry.cas + emitPlacement path the user-move release/transfer already use): every write is best-effort, CAS-fenced at epoch+1, loses safely to a higher epoch, and is NEVER forced (force-claim stays the reconciler\'s death-evidence verb). Part D\'s ownerOf read is a SIGNAL that only ever WITHHOLDS a local re-run / forwards to the owner — it can never cause a new kill or a new send (strictly reduces double-dispatch). Single-machine agents are a strict no-op (_meshSelfId null short-circuits every gate). Runs live (no destructive write warrants a dry-run) on dev / dark on fleet. Spec\'s fleet-promotion exit is an evidence-gated dev soak.',
|
|
224
|
+
},
|
|
213
225
|
{
|
|
214
226
|
name: 'canonicalHistoryConversationDiscipline',
|
|
215
227
|
configPath: 'threadline.canonicalHistory.conversationDiscipline.enabled',
|
|
@@ -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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"}
|
|
@@ -45,6 +45,15 @@ export interface RecencyLogEntry {
|
|
|
45
45
|
timestamp: string;
|
|
46
46
|
}
|
|
47
47
|
export declare function recentUserMessageFromHistory(history: readonly RecencyLogEntry[], withinMs: number, now?: number): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Local-receipt timestamp (ms) of the NEWEST user message in `history`, or null
|
|
50
|
+
* when there is none / none parses. SAME source as `recentUserMessageFromHistory`
|
|
51
|
+
* so the Part E freshest-interaction veto (post-transfer-closeout-correctness)
|
|
52
|
+
* shares the basis the `recent-user-message` KEEP-guard already uses (local-receipt
|
|
53
|
+
* clock). Used to decide whether a pre-move "recent" message predates the liveness
|
|
54
|
+
* snapshot.
|
|
55
|
+
*/
|
|
56
|
+
export declare function recentUserMessageAtFromHistory(history: readonly RecencyLogEntry[]): number | null;
|
|
48
57
|
/** The minimal slice of CommitmentTracker this predicate reads. */
|
|
49
58
|
export interface GapBCommitmentSource {
|
|
50
59
|
/** Active commitments bound to a topic (pending/verified/violated, not expired). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gapBCommitmentEvidence.d.ts","sourceRoot":"","sources":["../../src/core/gapBCommitmentEvidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAErE;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,SAAS,eAAe,EAAE,EACnC,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAmB,GACvB,OAAO,CAYT;AAED,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACnC,oFAAoF;IACpF,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,eAAe;IAC9B;kFAC8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,uBAAuB,EAAE,MAAM,CAAC;IAChC;uFACmF;IACnF,uBAAuB,EAAE,MAAM,CAAC;IAChC;+EAC2E;IAC3E,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAClE,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,UAAU,EACb,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,cAAc,GAAG,yBAAyB,GAAG,KAAK,CAAC,GAC9E,OAAO,CAgBT;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,oBAAoB,EAC5B,IAAI,EAAE,eAAe,GACpB,OAAO,CAcT;AAED,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC;iEAC6D;IAC7D,KAAK,EAAE,OAAO,CAAC;IACf;;4DAEwD;IACxD,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,CAAC,EAAE;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,iBAAiB,CAGpB;AAED,qFAAqF;AACrF,MAAM,WAAW,qBAAqB;IACpC;qFACiF;IACjF,KAAK,EAAE,OAAO,CAAC;IACf;iFAC6E;IAC7E,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,qBAAqB,CAMxB"}
|
|
1
|
+
{"version":3,"file":"gapBCommitmentEvidence.d.ts","sourceRoot":"","sources":["../../src/core/gapBCommitmentEvidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAErE;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,SAAS,eAAe,EAAE,EACnC,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAmB,GACvB,OAAO,CAYT;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,SAAS,eAAe,EAAE,GAClC,MAAM,GAAG,IAAI,CASf;AAED,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACnC,oFAAoF;IACpF,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,eAAe;IAC9B;kFAC8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,uBAAuB,EAAE,MAAM,CAAC;IAChC;uFACmF;IACnF,uBAAuB,EAAE,MAAM,CAAC;IAChC;+EAC2E;IAC3E,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAClE,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,UAAU,EACb,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,cAAc,GAAG,yBAAyB,GAAG,KAAK,CAAC,GAC9E,OAAO,CAgBT;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,oBAAoB,EAC5B,IAAI,EAAE,eAAe,GACpB,OAAO,CAcT;AAED,6EAA6E;AAC7E,MAAM,WAAW,iBAAiB;IAChC;iEAC6D;IAC7D,KAAK,EAAE,OAAO,CAAC;IACf;;4DAEwD;IACxD,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,CAAC,EAAE;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,iBAAiB,CAGpB;AAED,qFAAqF;AACrF,MAAM,WAAW,qBAAqB;IACpC;qFACiF;IACjF,KAAK,EAAE,OAAO,CAAC;IACf;iFAC6E;IAC7E,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,qBAAqB,CAMxB"}
|
|
@@ -39,6 +39,26 @@ export function recentUserMessageFromHistory(history, withinMs, now = Date.now()
|
|
|
39
39
|
}
|
|
40
40
|
return false;
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Local-receipt timestamp (ms) of the NEWEST user message in `history`, or null
|
|
44
|
+
* when there is none / none parses. SAME source as `recentUserMessageFromHistory`
|
|
45
|
+
* so the Part E freshest-interaction veto (post-transfer-closeout-correctness)
|
|
46
|
+
* shares the basis the `recent-user-message` KEEP-guard already uses (local-receipt
|
|
47
|
+
* clock). Used to decide whether a pre-move "recent" message predates the liveness
|
|
48
|
+
* snapshot.
|
|
49
|
+
*/
|
|
50
|
+
export function recentUserMessageAtFromHistory(history) {
|
|
51
|
+
for (let i = history.length - 1; i >= 0; i--) {
|
|
52
|
+
const entry = history[i];
|
|
53
|
+
if (!entry.fromUser)
|
|
54
|
+
continue;
|
|
55
|
+
const ts = Date.parse(entry.timestamp);
|
|
56
|
+
if (!Number.isFinite(ts))
|
|
57
|
+
continue;
|
|
58
|
+
return ts; // newest user message scanning backwards
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
42
62
|
/**
|
|
43
63
|
* D2 qualifying-commitment predicate (the per-commitment half).
|
|
44
64
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gapBCommitmentEvidence.js","sourceRoot":"","sources":["../../src/core/gapBCommitmentEvidence.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gapBCommitmentEvidence.js","sourceRoot":"","sources":["../../src/core/gapBCommitmentEvidence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ownershipFollowsLiveWork — pure decision helpers for the Ownership Follows Live
|
|
3
|
+
* Work feature (docs/specs/ownership-follows-live-work.md).
|
|
4
|
+
*
|
|
5
|
+
* Parts A (release-on-complete) and B (claim-on-spawn) are wired into server.ts
|
|
6
|
+
* closures (the only scope where `ownReg`/`emitPlacement`/`_meshSelfId` are all in
|
|
7
|
+
* lexical view). To keep the DECISION logic single-sourced AND unit-testable
|
|
8
|
+
* (Structure > Willpower — a 10-line tested helper beats a 100-line untestable
|
|
9
|
+
* closure), the gate predicates live HERE as pure functions; the server closures
|
|
10
|
+
* call them and then perform the CAS + emitPlacement pairing. Part D's recovery
|
|
11
|
+
* decision lives in SessionRecovery (its deps are injected, so it is testable in
|
|
12
|
+
* place); these helpers cover A + B.
|
|
13
|
+
*
|
|
14
|
+
* Every helper is fail-CLOSED (A & B are uniformly fail-closed per the spec's
|
|
15
|
+
* safe-direction table): any uncertainty resolves to "withhold the write".
|
|
16
|
+
*/
|
|
17
|
+
import type { SessionOwnershipRecord } from './SessionOwnership.js';
|
|
18
|
+
export declare function ownershipNonce(machineId: string, verb: string, sessionKey: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Part A — should the COMPLETING session's machine issue a `release`?
|
|
21
|
+
*
|
|
22
|
+
* Release ONLY when ALL hold (fail-closed otherwise):
|
|
23
|
+
* (a) the feature is on AND this machine has a mesh id,
|
|
24
|
+
* (b) `owner === self` and the record status is `active`,
|
|
25
|
+
* (c) the session-identity guard (FD9): no DIFFERENT live session is bound to the
|
|
26
|
+
* topic — compared by the STABLE per-instance key `startedAt`, NOT the
|
|
27
|
+
* reusable tmux name. Fail-closed/withhold if instance identity is unprovable
|
|
28
|
+
* (either `startedAt` missing).
|
|
29
|
+
*
|
|
30
|
+
* @param p.enabled resolved flag (false ⇒ never release).
|
|
31
|
+
* @param p.selfMachineId this machine's mesh id (null ⇒ never release).
|
|
32
|
+
* @param p.record the current ownership record (null ⇒ never release).
|
|
33
|
+
* @param p.completingStartedAt the completing session's stable instance key.
|
|
34
|
+
* @param p.liveStartedAt the CURRENT live session's stable instance key for
|
|
35
|
+
* this topic, or null when no live session is bound (⇒ proceed: best-effort safe
|
|
36
|
+
* direction; Part B's claim-on-spawn re-establishes ownership for a not-yet-bound
|
|
37
|
+
* respawn). `undefined` is treated the same as `null` (no live session).
|
|
38
|
+
*/
|
|
39
|
+
export declare function shouldReleaseOnComplete(p: {
|
|
40
|
+
enabled: boolean;
|
|
41
|
+
selfMachineId: string | null;
|
|
42
|
+
record: SessionOwnershipRecord | null;
|
|
43
|
+
completingStartedAt: string | null | undefined;
|
|
44
|
+
liveStartedAt: string | null | undefined;
|
|
45
|
+
}): boolean;
|
|
46
|
+
/** Part B claim plan — the ordered CAS steps the autonomous spawn should perform. */
|
|
47
|
+
export type ClaimOnSpawnPlan = {
|
|
48
|
+
action: 'place-then-claim';
|
|
49
|
+
} | {
|
|
50
|
+
action: 'noop';
|
|
51
|
+
} | {
|
|
52
|
+
action: 'audit-owned-elsewhere';
|
|
53
|
+
owner: string | null;
|
|
54
|
+
status: string;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Part B — what should an autonomous spawn do for the topic's ownership record?
|
|
58
|
+
*
|
|
59
|
+
* NEVER force-claims a peer-owned topic (FD3): an `active`/`transferring`/`placing`
|
|
60
|
+
* record owned by a PEER yields `audit-owned-elsewhere` (withhold + ONE neutral
|
|
61
|
+
* audit row). Fail-closed when off / single-machine (`noop`).
|
|
62
|
+
*/
|
|
63
|
+
export declare function planClaimOnSpawn(p: {
|
|
64
|
+
enabled: boolean;
|
|
65
|
+
selfMachineId: string | null;
|
|
66
|
+
record: SessionOwnershipRecord | null;
|
|
67
|
+
}): ClaimOnSpawnPlan;
|
|
68
|
+
//# sourceMappingURL=ownershipFollowsLiveWork.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ownershipFollowsLiveWork.d.ts","sourceRoot":"","sources":["../../src/core/ownershipFollowsLiveWork.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAapE,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE1F;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtC,mBAAmB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/C,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC1C,GAAG,OAAO,CAkBV;AAED,qFAAqF;AACrF,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,kBAAkB,CAAA;CAAE,GAC9B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,uBAAuB,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;CACvC,GAAG,gBAAgB,CAOnB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ownershipFollowsLiveWork — pure decision helpers for the Ownership Follows Live
|
|
3
|
+
* Work feature (docs/specs/ownership-follows-live-work.md).
|
|
4
|
+
*
|
|
5
|
+
* Parts A (release-on-complete) and B (claim-on-spawn) are wired into server.ts
|
|
6
|
+
* closures (the only scope where `ownReg`/`emitPlacement`/`_meshSelfId` are all in
|
|
7
|
+
* lexical view). To keep the DECISION logic single-sourced AND unit-testable
|
|
8
|
+
* (Structure > Willpower — a 10-line tested helper beats a 100-line untestable
|
|
9
|
+
* closure), the gate predicates live HERE as pure functions; the server closures
|
|
10
|
+
* call them and then perform the CAS + emitPlacement pairing. Part D's recovery
|
|
11
|
+
* decision lives in SessionRecovery (its deps are injected, so it is testable in
|
|
12
|
+
* place); these helpers cover A + B.
|
|
13
|
+
*
|
|
14
|
+
* Every helper is fail-CLOSED (A & B are uniformly fail-closed per the spec's
|
|
15
|
+
* safe-direction table): any uncertainty resolves to "withhold the write".
|
|
16
|
+
*/
|
|
17
|
+
import { randomUUID } from 'node:crypto';
|
|
18
|
+
/**
|
|
19
|
+
* FD10 — the SINGLE nonce source for the three new ownership-CAS callsites (Part A
|
|
20
|
+
* release-on-complete, Part B place+claim). The replay-guard key is
|
|
21
|
+
* `(sessionKey, sender, ownershipEpoch)`; the existing release callsite mints a
|
|
22
|
+
* millisecond-resolution nonce, so a release→re-place→release on the SAME
|
|
23
|
+
* sessionKey within one ms could collide and have a legitimately-distinct action
|
|
24
|
+
* dropped as a replay. This helper appends a process-monotonic counter AND a
|
|
25
|
+
* randomUUID, so per-process uniqueness holds regardless of clock resolution. One
|
|
26
|
+
* helper = the format can never drift between callsites.
|
|
27
|
+
*/
|
|
28
|
+
let _ownershipNonceSeq = 0;
|
|
29
|
+
export function ownershipNonce(machineId, verb, sessionKey) {
|
|
30
|
+
return `${machineId}:${verb}:${sessionKey}:${Date.now()}:${++_ownershipNonceSeq}:${randomUUID()}`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Part A — should the COMPLETING session's machine issue a `release`?
|
|
34
|
+
*
|
|
35
|
+
* Release ONLY when ALL hold (fail-closed otherwise):
|
|
36
|
+
* (a) the feature is on AND this machine has a mesh id,
|
|
37
|
+
* (b) `owner === self` and the record status is `active`,
|
|
38
|
+
* (c) the session-identity guard (FD9): no DIFFERENT live session is bound to the
|
|
39
|
+
* topic — compared by the STABLE per-instance key `startedAt`, NOT the
|
|
40
|
+
* reusable tmux name. Fail-closed/withhold if instance identity is unprovable
|
|
41
|
+
* (either `startedAt` missing).
|
|
42
|
+
*
|
|
43
|
+
* @param p.enabled resolved flag (false ⇒ never release).
|
|
44
|
+
* @param p.selfMachineId this machine's mesh id (null ⇒ never release).
|
|
45
|
+
* @param p.record the current ownership record (null ⇒ never release).
|
|
46
|
+
* @param p.completingStartedAt the completing session's stable instance key.
|
|
47
|
+
* @param p.liveStartedAt the CURRENT live session's stable instance key for
|
|
48
|
+
* this topic, or null when no live session is bound (⇒ proceed: best-effort safe
|
|
49
|
+
* direction; Part B's claim-on-spawn re-establishes ownership for a not-yet-bound
|
|
50
|
+
* respawn). `undefined` is treated the same as `null` (no live session).
|
|
51
|
+
*/
|
|
52
|
+
export function shouldReleaseOnComplete(p) {
|
|
53
|
+
if (!p.enabled || !p.selfMachineId)
|
|
54
|
+
return false; // dark / single-machine
|
|
55
|
+
const rec = p.record;
|
|
56
|
+
if (!rec)
|
|
57
|
+
return false; // no record → nothing to release
|
|
58
|
+
if (rec.ownerMachineId !== p.selfMachineId)
|
|
59
|
+
return false; // peer-owned / not ours
|
|
60
|
+
if (rec.status !== 'active')
|
|
61
|
+
return false; // FSM would reject; short-circuit
|
|
62
|
+
// (c) session-identity guard.
|
|
63
|
+
const live = p.liveStartedAt;
|
|
64
|
+
if (live == null)
|
|
65
|
+
return true; // no live session bound → proceed (best-effort safe direction)
|
|
66
|
+
const completing = p.completingStartedAt;
|
|
67
|
+
// Fail-closed if instance identity is unprovable (either side missing).
|
|
68
|
+
if (!live || !completing)
|
|
69
|
+
return false;
|
|
70
|
+
// A DIFFERENT live instance is bound (newer startedAt) → withhold the release
|
|
71
|
+
// (it would orphan a live session's record — "released record, live session").
|
|
72
|
+
if (String(live) !== String(completing))
|
|
73
|
+
return false;
|
|
74
|
+
// Same instance (the one that just completed) → release.
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Part B — what should an autonomous spawn do for the topic's ownership record?
|
|
79
|
+
*
|
|
80
|
+
* NEVER force-claims a peer-owned topic (FD3): an `active`/`transferring`/`placing`
|
|
81
|
+
* record owned by a PEER yields `audit-owned-elsewhere` (withhold + ONE neutral
|
|
82
|
+
* audit row). Fail-closed when off / single-machine (`noop`).
|
|
83
|
+
*/
|
|
84
|
+
export function planClaimOnSpawn(p) {
|
|
85
|
+
if (!p.enabled || !p.selfMachineId)
|
|
86
|
+
return { action: 'noop' }; // dark / single-machine
|
|
87
|
+
const rec = p.record;
|
|
88
|
+
if (!rec || rec.status === 'released')
|
|
89
|
+
return { action: 'place-then-claim' };
|
|
90
|
+
if (rec.status === 'active' && rec.ownerMachineId === p.selfMachineId)
|
|
91
|
+
return { action: 'noop' };
|
|
92
|
+
// active/transferring/placing owned by a PEER → never force-claim.
|
|
93
|
+
return { action: 'audit-owned-elsewhere', owner: rec.ownerMachineId ?? null, status: rec.status };
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=ownershipFollowsLiveWork.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ownershipFollowsLiveWork.js","sourceRoot":"","sources":["../../src/core/ownershipFollowsLiveWork.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;;;;;;;;GASG;AACH,IAAI,kBAAkB,GAAG,CAAC,CAAC;AAC3B,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,IAAY,EAAE,UAAkB;IAChF,OAAO,GAAG,SAAS,IAAI,IAAI,IAAI,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,kBAAkB,IAAI,UAAU,EAAE,EAAE,CAAC;AACpG,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,uBAAuB,CAAC,CAMvC;IACC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC,CAAC,wBAAwB;IAC1E,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;IACrB,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC,CAAC,iCAAiC;IACzD,IAAI,GAAG,CAAC,cAAc,KAAK,CAAC,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC,CAAC,wBAAwB;IAClF,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,CAAC,kCAAkC;IAE7E,8BAA8B;IAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC;IAC7B,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,CAAC,+DAA+D;IAC9F,MAAM,UAAU,GAAG,CAAC,CAAC,mBAAmB,CAAC;IACzC,wEAAwE;IACxE,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IACvC,8EAA8E;IAC9E,+EAA+E;IAC/E,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,yDAAyD;IACzD,OAAO,IAAI,CAAC;AACd,CAAC;AAQD;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAIhC;IACC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,aAAa;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,wBAAwB;IACvF,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;IACrB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7E,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,cAAc,KAAK,CAAC,CAAC,aAAa;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjG,mEAAmE;IACnE,OAAO,EAAE,MAAM,EAAE,uBAAuB,EAAE,KAAK,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AACpG,CAAC"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -2202,6 +2202,21 @@ export interface MultiMachineConfig {
|
|
|
2202
2202
|
* replication a clean no-op.
|
|
2203
2203
|
*/
|
|
2204
2204
|
coherenceJournal?: CoherenceJournalUserConfig;
|
|
2205
|
+
/**
|
|
2206
|
+
* Ownership Follows Live Work (docs/specs/ownership-follows-live-work.md) — the
|
|
2207
|
+
* defense-in-depth correction that makes the SessionOwnership RECORD track where
|
|
2208
|
+
* the live work actually is: a session that COMPLETES releases (Part A), an
|
|
2209
|
+
* autonomous session that SPAWNS claims (Part B), and a non-router recovery path
|
|
2210
|
+
* gates on per-topic ownership before re-running (Part D). DELIBERATELY OMITTED
|
|
2211
|
+
* from ConfigDefaults so resolveDevAgentGate decides at runtime (LIVE on a dev
|
|
2212
|
+
* agent / DARK on the fleet) — a literal `false` would force-dark the dev agent.
|
|
2213
|
+
* OFF (or single-machine, `_meshSelfId` null) = byte-identical legacy behavior:
|
|
2214
|
+
* no release-on-complete, no claim-on-spawn, recovery runs its existing logic.
|
|
2215
|
+
* Every new ownership write is the existing fenced-epoch CAS, best-effort, never
|
|
2216
|
+
* forced; Part D's `ownerOf` read is a SIGNAL (forward-vs-rerun), never a new
|
|
2217
|
+
* authority. Registered in DEV_GATED_FEATURES (not DARK_GATE_EXCLUSIONS).
|
|
2218
|
+
*/
|
|
2219
|
+
ownershipFollowsLiveWork?: boolean;
|
|
2205
2220
|
/**
|
|
2206
2221
|
* Replicated-store foundation (multi-machine-replicated-store-foundation.md
|
|
2207
2222
|
* §10). The substrate that lets independent stores (preferences, relationships,
|
|
@@ -4536,6 +4551,17 @@ export interface MonitoringConfig {
|
|
|
4536
4551
|
/** Consecutive ticks a topic must be observed owned-elsewhere before the
|
|
4537
4552
|
* closeout fires (absorbs transfer races). Default 2 (~4 min). */
|
|
4538
4553
|
topicMovedConfirmTicks?: number;
|
|
4554
|
+
/** Post-transfer closeout CORRECTNESS gate (F1,
|
|
4555
|
+
* docs/specs/post-transfer-closeout-correctness.md). When on, the closeout
|
|
4556
|
+
* verifies the owning machine ACTUALLY has a live session for the topic
|
|
4557
|
+
* before shedding the local leftover — never terminating the sole live
|
|
4558
|
+
* worker on a stale/unverified ownership record (false/unknown/dep-absent →
|
|
4559
|
+
* WITHHOLD, fail-closed). Also re-keys the closeout breaker counters on the
|
|
4560
|
+
* stable TOPIC id and adds the narrow `bypassRecentUserMessageForConfirmedMove`
|
|
4561
|
+
* on a liveness-confirmed move. OMITTED here (NOT hardcoded) so
|
|
4562
|
+
* resolveDevAgentGate resolves it LIVE on a dev agent / DARK on the fleet
|
|
4563
|
+
* (registered in DEV_GATED_FEATURES). When OFF the closeout is byte-identical. */
|
|
4564
|
+
closeoutLivenessGate?: boolean;
|
|
4539
4565
|
};
|
|
4540
4566
|
/**
|
|
4541
4567
|
* Reap-notification (UNIFIED-SESSION-LIFECYCLE §P3). The single coalescing
|