instar 1.3.714 → 1.3.715
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 +599 -4
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +35 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/core/CoherenceJournal.d.ts +1 -1
- package/dist/core/CoherenceJournal.d.ts.map +1 -1
- package/dist/core/CoherenceJournal.js +9 -2
- package/dist/core/CoherenceJournal.js.map +1 -1
- package/dist/core/FencedLease.d.ts +47 -1
- package/dist/core/FencedLease.d.ts.map +1 -1
- package/dist/core/FencedLease.js +58 -1
- package/dist/core/FencedLease.js.map +1 -1
- package/dist/core/LeaseCoordinator.d.ts +25 -1
- package/dist/core/LeaseCoordinator.d.ts.map +1 -1
- package/dist/core/LeaseCoordinator.js +66 -0
- package/dist/core/LeaseCoordinator.js.map +1 -1
- package/dist/core/LeaseHandbackReconciler.d.ts +212 -0
- package/dist/core/LeaseHandbackReconciler.d.ts.map +1 -0
- package/dist/core/LeaseHandbackReconciler.js +416 -0
- package/dist/core/LeaseHandbackReconciler.js.map +1 -0
- package/dist/core/MeshRpc.d.ts +6 -1
- package/dist/core/MeshRpc.d.ts.map +1 -1
- package/dist/core/MeshRpc.js +9 -0
- package/dist/core/MeshRpc.js.map +1 -1
- package/dist/core/MultiMachineCoordinator.d.ts +20 -0
- package/dist/core/MultiMachineCoordinator.d.ts.map +1 -1
- package/dist/core/MultiMachineCoordinator.js +30 -0
- package/dist/core/MultiMachineCoordinator.js.map +1 -1
- package/dist/core/OwnershipReconciler.d.ts +42 -2
- package/dist/core/OwnershipReconciler.d.ts.map +1 -1
- package/dist/core/OwnershipReconciler.js +100 -2
- package/dist/core/OwnershipReconciler.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts +1 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +31 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/StaleOwnerReleaseEngine.d.ts +290 -0
- package/dist/core/StaleOwnerReleaseEngine.d.ts.map +1 -0
- package/dist/core/StaleOwnerReleaseEngine.js +645 -0
- package/dist/core/StaleOwnerReleaseEngine.js.map +1 -0
- package/dist/core/TopicClaimAnnotationStore.d.ts +121 -0
- package/dist/core/TopicClaimAnnotationStore.d.ts.map +1 -0
- package/dist/core/TopicClaimAnnotationStore.js +234 -0
- package/dist/core/TopicClaimAnnotationStore.js.map +1 -0
- package/dist/core/devGatedFeatures.d.ts.map +1 -1
- package/dist/core/devGatedFeatures.js +11 -0
- package/dist/core/devGatedFeatures.js.map +1 -1
- package/dist/core/handbackLatch.d.ts +28 -0
- package/dist/core/handbackLatch.d.ts.map +1 -0
- package/dist/core/handbackLatch.js +73 -0
- package/dist/core/handbackLatch.js.map +1 -0
- package/dist/core/ropeHealth.d.ts +26 -0
- package/dist/core/ropeHealth.d.ts.map +1 -0
- package/dist/core/ropeHealth.js +32 -0
- package/dist/core/ropeHealth.js.map +1 -0
- package/dist/core/types.d.ts +51 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/monitoring/StrandedTopicSentinel.d.ts +5 -0
- package/dist/monitoring/StrandedTopicSentinel.d.ts.map +1 -1
- package/dist/monitoring/StrandedTopicSentinel.js +8 -0
- package/dist/monitoring/StrandedTopicSentinel.js.map +1 -1
- package/dist/monitoring/guardManifest.d.ts.map +1 -1
- package/dist/monitoring/guardManifest.js +45 -0
- package/dist/monitoring/guardManifest.js.map +1 -1
- package/dist/monitoring/strandedTopicDecision.d.ts +11 -0
- package/dist/monitoring/strandedTopicDecision.d.ts.map +1 -1
- package/dist/monitoring/strandedTopicDecision.js +12 -1
- package/dist/monitoring/strandedTopicDecision.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +2 -1
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/AgentServer.d.ts +9 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +2 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/routes.d.ts +9 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +76 -0
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +65 -65
- package/src/scaffold/templates.ts +2 -1
- package/upgrades/1.3.715.md +92 -0
- package/upgrades/side-effects/u4-stale-owner-release-lease-handback.md +87 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StaleOwnerReleaseEngine — U4.2 (docs/specs/u4-2-stale-owner-release.md): the
|
|
3
|
+
* CMT-1786 auto-failover, built as the EVIDENCE UPGRADE to OwnershipReconciler
|
|
4
|
+
* Case C. When a topic's owner machine is genuinely dead/dark, the serving-lease
|
|
5
|
+
* HOLDER force-claims its topics — but only after an evidence bar in which EVERY
|
|
6
|
+
* predicate is a mechanical check over authenticated state, and every ambiguity
|
|
7
|
+
* fails CLOSED (a brief strand beats a split-brain).
|
|
8
|
+
*
|
|
9
|
+
* One actor (spec §2.7.6): this engine is invoked FROM OwnershipReconciler.tick()
|
|
10
|
+
* and issues claims through the reconciler's single CAS funnel — it is Case C's
|
|
11
|
+
* evidence bar, not a second takeover authority. `ownershipEpoch` is the only
|
|
12
|
+
* fence; the §2.4 `topic-claim-annotation` kind is deliberately NOT ownership
|
|
13
|
+
* state (it can never answer or fence ownership).
|
|
14
|
+
*
|
|
15
|
+
* The evidence bar (§2.2 — ALL required; fail CLOSED on any ambiguity):
|
|
16
|
+
* 1. machine death: owner offline in the pool AND observer-stamped staleness
|
|
17
|
+
* ≥ deathEvidenceMs on the OBSERVER's monotonic clock (never the owner's
|
|
18
|
+
* self-reported wall clock — R-r2-5a). Never-observed-since-boot follows
|
|
19
|
+
* the bounded bootstrap rule (R-r2-2), never a silent forever-strand.
|
|
20
|
+
* 2. multi-transport disproof: unreachable via the authenticated probe on
|
|
21
|
+
* EVERY advertised transport; the advert set must be owner-authenticated
|
|
22
|
+
* (PeerEndpointRecorder provenance ONLY — R-r2-5b), non-empty, fresh, and
|
|
23
|
+
* multi-transport (a single-rope advert set is automatic ambiguity).
|
|
24
|
+
* 3. quorum (verbatim Case C): online × 2 > machines.
|
|
25
|
+
* 4. claimant self-connectivity proof (a claimer with a broken NIC sees
|
|
26
|
+
* everyone as dead and must never claim). 2-machine git-less mesh: the
|
|
27
|
+
* claim path is DISABLED outright (detection + escalation still run).
|
|
28
|
+
* 5. owner liveness disproof over a PROVABLY FRESH evidence mirror — a stale
|
|
29
|
+
* mirror classifies AMBIGUITY, never "no recent side-effects" (R-r2-3).
|
|
30
|
+
* 6. fresh re-read immediately before the claim (the caller's CAS funnel
|
|
31
|
+
* re-reads; the engine re-checks the record at claim time).
|
|
32
|
+
*
|
|
33
|
+
* Bounded blast radius (§2.5): maxClaimsPerTick; per-topic claim budget +
|
|
34
|
+
* widening backoff carried on the REPLICATED topic-claim-annotation kind
|
|
35
|
+
* (R-r2-4 — the claimer role moves with the lease, the budget must follow the
|
|
36
|
+
* topic); probe verdicts single-flight + TTL-memoized + backoff + a P19 breaker
|
|
37
|
+
* that degrades to ONE attention item. A declined demote (operator "no") rides
|
|
38
|
+
* the same replicated kind and blocks the episode's claims on ANY claimer.
|
|
39
|
+
*
|
|
40
|
+
* Honesty surfaces (§2.6): every stale-detect, probe verdict, would-claim
|
|
41
|
+
* (dry-run), claim and REFUSAL lands in the decision trace (state-change-gated
|
|
42
|
+
* per episode, never per-tick); ambiguity persisting past the ceiling escalates
|
|
43
|
+
* ONE per-episode deduped attention item — raisable by ANY quorum member
|
|
44
|
+
* (R-r2-1), while the CLAIM stays lease-holder-only.
|
|
45
|
+
*
|
|
46
|
+
* Supervision: Tier 0 by explicit argument (§2.8) — deterministic fencing path;
|
|
47
|
+
* LLM-free, synchronous verdicts, acquires NO spawn-cap slot (asserted by test).
|
|
48
|
+
*/
|
|
49
|
+
import type { SessionOwnershipRecord } from './SessionOwnership.js';
|
|
50
|
+
import type { MergedClaimAnnotation } from './TopicClaimAnnotationStore.js';
|
|
51
|
+
/** Config subtree: multiMachine.sessionPool.staleOwnerRelease (§5). */
|
|
52
|
+
export interface StaleOwnerReleaseConfig {
|
|
53
|
+
enabled: boolean;
|
|
54
|
+
dryRun: boolean;
|
|
55
|
+
/** Death-evidence bound (ms). Default 180_000 (existing Case C bound). */
|
|
56
|
+
deathEvidenceMs: number;
|
|
57
|
+
/** Per-endpoint probe timeout (ms) — well below the lease transport's 30s. */
|
|
58
|
+
probeTimeoutMs: number;
|
|
59
|
+
/** Ambiguity escalates after ambiguityCeilingMultiple × deathEvidenceMs. */
|
|
60
|
+
ambiguityCeilingMultiple: number;
|
|
61
|
+
/** Hard cap on claims landed per tick (P19). */
|
|
62
|
+
maxClaimsPerTick: number;
|
|
63
|
+
/** Bootstrap rule (R-r2-2): never-observed-since-boot classifies EXPIRED only
|
|
64
|
+
* after bootstrapNonObservationMultiple × deathEvidenceMs of continuous
|
|
65
|
+
* non-observation since claimant boot (plus the durable-heartbeat tie-break). */
|
|
66
|
+
bootstrapNonObservationMultiple: number;
|
|
67
|
+
/** The owner self-fence TTL the §2.3 ordering invariant is validated against. */
|
|
68
|
+
selfFenceTtlMs: number;
|
|
69
|
+
}
|
|
70
|
+
export declare const DEFAULT_STALE_OWNER_RELEASE_CONFIG: Omit<StaleOwnerReleaseConfig, 'enabled'>;
|
|
71
|
+
/**
|
|
72
|
+
* §2.3 TTL-ordering invariant (R-r2-3, part 1): "expired implies self-fenced by
|
|
73
|
+
* construction" holds ONLY when
|
|
74
|
+
* deathEvidenceMs > selfFenceTtlMs + reconcilerTickMs + clockSkewSlackMs.
|
|
75
|
+
* This is an INVARIANT of the design, not a tuning suggestion — a violating
|
|
76
|
+
* combination is REJECTED at config validation (the existing multiMachine
|
|
77
|
+
* reject-nonsensical-combinations-at-startup pattern). Returns null when valid,
|
|
78
|
+
* else a human-readable rejection message.
|
|
79
|
+
*/
|
|
80
|
+
export declare function validateStaleOwnerReleaseInvariants(cfg: Pick<StaleOwnerReleaseConfig, 'deathEvidenceMs' | 'selfFenceTtlMs'>, reconcilerTickMs: number, clockSkewSlackMs: number): string | null;
|
|
81
|
+
/** §2.9 refusal reasons (closed enum — the FD-7 telemetry the soak is judged on). */
|
|
82
|
+
export type StaleOwnerRefusalReason = 'transport-ambiguity' | 'not-expired' | 'quorum-fail' | 'self-proof-fail' | 'side-effect-fresh';
|
|
83
|
+
/** The machine-level evidence verdict for one owner in one tick. */
|
|
84
|
+
export type OwnerEvidenceVerdict = {
|
|
85
|
+
verdict: 'healthy';
|
|
86
|
+
} | {
|
|
87
|
+
verdict: 'expired';
|
|
88
|
+
} | {
|
|
89
|
+
verdict: 'refused';
|
|
90
|
+
reason: StaleOwnerRefusalReason;
|
|
91
|
+
} | {
|
|
92
|
+
verdict: 'ambiguity';
|
|
93
|
+
reason: StaleOwnerRefusalReason;
|
|
94
|
+
};
|
|
95
|
+
/** One probe outcome per (owner, episode) — memoized, single-flight. */
|
|
96
|
+
export type ProbeVerdict = 'reachable' | 'unreachable' | 'error';
|
|
97
|
+
export interface AdvertSetView {
|
|
98
|
+
/** Owner-authenticated endpoints (PeerEndpointRecorder provenance ONLY). */
|
|
99
|
+
endpoints: Array<{
|
|
100
|
+
kind: string;
|
|
101
|
+
url: string;
|
|
102
|
+
}>;
|
|
103
|
+
/** Whether the advert set is freshness-bounded (wiring computes the bound). */
|
|
104
|
+
fresh: boolean;
|
|
105
|
+
}
|
|
106
|
+
export interface StaleOwnerTraceEntry {
|
|
107
|
+
ts: string;
|
|
108
|
+
type: 'stale-detect' | 'probe-verdict' | 'would-claim' | 'claim' | 'refusal' | 'ambiguity-escalated' | 'p19-giveup' | 'declined-demote';
|
|
109
|
+
owner?: string;
|
|
110
|
+
episodeId?: string;
|
|
111
|
+
topic?: string;
|
|
112
|
+
reason?: string;
|
|
113
|
+
detail?: string;
|
|
114
|
+
}
|
|
115
|
+
export interface StaleOwnerAttentionItem {
|
|
116
|
+
id: string;
|
|
117
|
+
title: string;
|
|
118
|
+
body: string;
|
|
119
|
+
priority: 'high' | 'medium';
|
|
120
|
+
sourceContext: string;
|
|
121
|
+
}
|
|
122
|
+
export interface StaleOwnerReleaseDeps {
|
|
123
|
+
/** Live-read feature gate (dev-gate resolved by the wiring). */
|
|
124
|
+
enabled: () => boolean;
|
|
125
|
+
dryRun: () => boolean;
|
|
126
|
+
config: () => StaleOwnerReleaseConfig;
|
|
127
|
+
selfMachineId: () => string | null;
|
|
128
|
+
/** All registered machines with OBSERVER-STAMPED liveness (R-r2-5a: the wiring
|
|
129
|
+
* MUST feed routerReceivedAt-derived values, never selfReportedLastSeen). */
|
|
130
|
+
machines: () => Array<{
|
|
131
|
+
machineId: string;
|
|
132
|
+
online: boolean;
|
|
133
|
+
observerLastSeenMs: number;
|
|
134
|
+
}>;
|
|
135
|
+
/** Whether THIS machine holds the serving lease (the sole-claimer arbiter). */
|
|
136
|
+
holdsLease: () => boolean;
|
|
137
|
+
/** All known ownership records (the registry `all()` scan). */
|
|
138
|
+
listOwnershipRecords: () => SessionOwnershipRecord[];
|
|
139
|
+
/**
|
|
140
|
+
* Durable last-known heartbeat for a machine (the git-synced coarseHeartbeat
|
|
141
|
+
* re-feed — bootstrap rule condition (b), a tie-breaker only per R-r3-3).
|
|
142
|
+
* null = no durable record. Wall-clock epoch-ms.
|
|
143
|
+
*/
|
|
144
|
+
durableLastKnownHeartbeatMs: (machineId: string) => number | null;
|
|
145
|
+
/** Owner-authenticated advert set (R-r2-5b — PeerEndpointRecorder provenance
|
|
146
|
+
* ONLY; the git registry's lastKnownUrl is NOT acceptable input). */
|
|
147
|
+
advertSet: (machineId: string) => AdvertSetView;
|
|
148
|
+
/** Probe ONE advertised endpoint with the authenticated signed handshake.
|
|
149
|
+
* Resolves true iff an identity-verified response arrived within the timeout. */
|
|
150
|
+
probeEndpoint: (machineId: string, endpoint: {
|
|
151
|
+
kind: string;
|
|
152
|
+
url: string;
|
|
153
|
+
}, timeoutMs: number) => Promise<boolean>;
|
|
154
|
+
/** Claimant self-connectivity proof (evidence 4): a successful authenticated
|
|
155
|
+
* probe of a third peer, or (2-machine) verified reach of the durable lease
|
|
156
|
+
* authority. Resolves false on ANY uncertainty. */
|
|
157
|
+
selfConnectivityProof: () => Promise<boolean>;
|
|
158
|
+
/** Whether a durable third-party lease authority exists (git substrate). A
|
|
159
|
+
* 2-machine mesh WITHOUT one has its claim path DISABLED (fail closed). */
|
|
160
|
+
hasDurableLeaseAuthority: () => boolean;
|
|
161
|
+
/** Evidence-5 mirror (§2.2.5): the claimant's replicated-channel mirror. */
|
|
162
|
+
evidenceMirror: () => {
|
|
163
|
+
/** Last SUCCESSFUL sync of the replicated channel (epoch-ms), or null. */
|
|
164
|
+
lastSyncOkMs: number | null;
|
|
165
|
+
/** Newest authenticated side-effect from `machineId` on the mirror
|
|
166
|
+
* (placement/ownership emissions + lease/ownership renewals), or null. */
|
|
167
|
+
lastOwnerSideEffectMs: (machineId: string) => number | null;
|
|
168
|
+
};
|
|
169
|
+
/** Merged replicated topic-claim-annotations (per-topic budget / suspension /
|
|
170
|
+
* declined-demote — R-r2-4: read the REPLICATED view, never local memory). */
|
|
171
|
+
claimAnnotations: () => Map<number, MergedClaimAnnotation>;
|
|
172
|
+
/**
|
|
173
|
+
* Issue the force-claim through the reconciler's single CAS funnel. The
|
|
174
|
+
* callee re-reads the record (evidence 6) and stamps the extended nonce
|
|
175
|
+
* `${self}:stale-owner-release:${sessionKey}:${episodeId}:${now}` (§2.7.5).
|
|
176
|
+
* Returns true iff the CAS landed.
|
|
177
|
+
*/
|
|
178
|
+
actForceClaim: (sessionKey: string, episodeId: string) => boolean;
|
|
179
|
+
/** Emit/refresh the claim annotation (suspension + budget) — level-reconciled:
|
|
180
|
+
* a claim that landed without its annotation is re-emitted idempotently. */
|
|
181
|
+
emitClaimAnnotation: (input: {
|
|
182
|
+
topic: number;
|
|
183
|
+
episodeId: string;
|
|
184
|
+
suspended: boolean;
|
|
185
|
+
claimedBy: string;
|
|
186
|
+
claimCount: number;
|
|
187
|
+
backoffUntilMs?: number;
|
|
188
|
+
declinedDemote?: boolean;
|
|
189
|
+
}) => void;
|
|
190
|
+
/** Attempt the working-set pull for a claimed topic (queues durably against a
|
|
191
|
+
* provably-dark producer — §2.4; failures never block the claim). */
|
|
192
|
+
pullWorkingSet: (topic: number) => void;
|
|
193
|
+
/** Post-claim hook (continuation disclosure + paced resume routing). */
|
|
194
|
+
onClaimed?: (topic: number, episodeId: string, prevOwner: string) => void;
|
|
195
|
+
/** Append one decision-trace line (logs/stale-owner-release.jsonl). */
|
|
196
|
+
trace: (entry: StaleOwnerTraceEntry) => void;
|
|
197
|
+
/** Raise ONE deduped attention item (episode-keyed; P17-coalesced pool-wide). */
|
|
198
|
+
raiseAttention: (item: StaleOwnerAttentionItem) => void;
|
|
199
|
+
now?: () => number;
|
|
200
|
+
monotonicNow?: () => number;
|
|
201
|
+
logger?: (msg: string) => void;
|
|
202
|
+
}
|
|
203
|
+
export interface StaleOwnerReleaseStatus {
|
|
204
|
+
enabled: boolean;
|
|
205
|
+
dryRun: boolean;
|
|
206
|
+
lastTickAt: string | null;
|
|
207
|
+
counters: {
|
|
208
|
+
attempts: number;
|
|
209
|
+
claims: number;
|
|
210
|
+
wouldClaims: number;
|
|
211
|
+
refusalsByReason: Record<StaleOwnerRefusalReason, number>;
|
|
212
|
+
ambiguities: number;
|
|
213
|
+
escalations: number;
|
|
214
|
+
p19GiveUps: number;
|
|
215
|
+
};
|
|
216
|
+
evidenceClasses: Record<string, number>;
|
|
217
|
+
probeBreaker: {
|
|
218
|
+
openOwners: string[];
|
|
219
|
+
};
|
|
220
|
+
lastEpisode: {
|
|
221
|
+
episodeId: string;
|
|
222
|
+
owner: string;
|
|
223
|
+
verdict: string;
|
|
224
|
+
at: string;
|
|
225
|
+
} | null;
|
|
226
|
+
openEpisodes: Array<{
|
|
227
|
+
episodeId: string;
|
|
228
|
+
owner: string;
|
|
229
|
+
openedAt: string;
|
|
230
|
+
lastVerdict: string | null;
|
|
231
|
+
escalated: boolean;
|
|
232
|
+
}>;
|
|
233
|
+
}
|
|
234
|
+
export declare class StaleOwnerReleaseEngine {
|
|
235
|
+
private readonly d;
|
|
236
|
+
private readonly episodes;
|
|
237
|
+
/** Observer-clock liveness: mono-ms an owner's observer-stamped lastSeen last
|
|
238
|
+
* ADVANCED (the FencedLease-F2 verified fold-in pattern). Absent = never
|
|
239
|
+
* observed since claimant boot (the R-r2-2 bootstrap case). */
|
|
240
|
+
private readonly lastSeenMono;
|
|
241
|
+
private readonly lastSeenWallReading;
|
|
242
|
+
private readonly bootMono;
|
|
243
|
+
private lastTickAtWall;
|
|
244
|
+
private lastEpisodeSummary;
|
|
245
|
+
private readonly counters;
|
|
246
|
+
private readonly evidenceClasses;
|
|
247
|
+
constructor(deps: StaleOwnerReleaseDeps);
|
|
248
|
+
private now;
|
|
249
|
+
private mono;
|
|
250
|
+
private log;
|
|
251
|
+
private trace;
|
|
252
|
+
private bumpEvidenceClass;
|
|
253
|
+
isActive(): boolean;
|
|
254
|
+
/**
|
|
255
|
+
* One evidence pass (invoked from OwnershipReconciler.tick()). Deterministic
|
|
256
|
+
* over injected state; probes are kicked off asynchronously and their
|
|
257
|
+
* verdicts consumed on LATER ticks (single-flight, memoized) — the tick
|
|
258
|
+
* itself never blocks on the network.
|
|
259
|
+
*/
|
|
260
|
+
tick(): void;
|
|
261
|
+
/** Record the operator's durable "no" for an owner's current episode (§2.6). */
|
|
262
|
+
recordDeclinedDemote(topic: number, episodeId: string): void;
|
|
263
|
+
private openEpisode;
|
|
264
|
+
/** The §2.2 evidence bar for ONE owner. Fail CLOSED on every uncertainty. */
|
|
265
|
+
private classifyOwner;
|
|
266
|
+
private selfProofState;
|
|
267
|
+
private selfProofAtMono;
|
|
268
|
+
private kickSelfProof;
|
|
269
|
+
/**
|
|
270
|
+
* ONE reachability verdict per (owner, episode) — single-flight, TTL-memoized,
|
|
271
|
+
* widening backoff between attempts, P19 breaker that degrades to the
|
|
272
|
+
* attention item. Returns the memoized verdict, or 'error' while pending /
|
|
273
|
+
* breaker-open (which classifies as ambiguity upstream — fail closed).
|
|
274
|
+
*/
|
|
275
|
+
private probeVerdict;
|
|
276
|
+
private recordVerdict;
|
|
277
|
+
private p19GiveUp;
|
|
278
|
+
/** §2.9 status surface (assembled per tick, never stale on early return). */
|
|
279
|
+
status(): StaleOwnerReleaseStatus;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* §2.9 `ownershipLeaseState` derivation for /pool/placement (R-r2 minor) —
|
|
283
|
+
* DERIVED from record status + evidence state, per the spec's table.
|
|
284
|
+
*/
|
|
285
|
+
export type OwnershipLeaseState = 'held' | 'stale' | 'releasing' | 'claimed';
|
|
286
|
+
export declare function deriveOwnershipLeaseState(record: Pick<SessionOwnershipRecord, 'status' | 'nonce'> | null, opts: {
|
|
287
|
+
evidenceEpisodeOpen: boolean;
|
|
288
|
+
suspensionAnnotationPresent: boolean;
|
|
289
|
+
}): OwnershipLeaseState | null;
|
|
290
|
+
//# sourceMappingURL=StaleOwnerReleaseEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StaleOwnerReleaseEngine.d.ts","sourceRoot":"","sources":["../../src/core/StaleOwnerReleaseEngine.ts"],"names":[],"mappings":"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"}
|