instar 1.3.819 → 1.3.821

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 (85) hide show
  1. package/dist/commands/server.d.ts.map +1 -1
  2. package/dist/commands/server.js +498 -3
  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 +69 -0
  6. package/dist/config/ConfigDefaults.js.map +1 -1
  7. package/dist/core/BackupManager.d.ts +10 -0
  8. package/dist/core/BackupManager.d.ts.map +1 -1
  9. package/dist/core/BackupManager.js +16 -0
  10. package/dist/core/BackupManager.js.map +1 -1
  11. package/dist/core/BoundedJsonlAudit.d.ts +37 -0
  12. package/dist/core/BoundedJsonlAudit.d.ts.map +1 -0
  13. package/dist/core/BoundedJsonlAudit.js +87 -0
  14. package/dist/core/BoundedJsonlAudit.js.map +1 -0
  15. package/dist/core/JudgmentProvenanceLog.d.ts +144 -0
  16. package/dist/core/JudgmentProvenanceLog.d.ts.map +1 -0
  17. package/dist/core/JudgmentProvenanceLog.js +301 -0
  18. package/dist/core/JudgmentProvenanceLog.js.map +1 -0
  19. package/dist/core/MachineIdentity.d.ts.map +1 -1
  20. package/dist/core/MachineIdentity.js +2 -0
  21. package/dist/core/MachineIdentity.js.map +1 -1
  22. package/dist/core/OwnerDarkLadder.d.ts +108 -0
  23. package/dist/core/OwnerDarkLadder.d.ts.map +1 -0
  24. package/dist/core/OwnerDarkLadder.js +229 -0
  25. package/dist/core/OwnerDarkLadder.js.map +1 -0
  26. package/dist/core/PostUpdateMigrator.d.ts +10 -0
  27. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  28. package/dist/core/PostUpdateMigrator.js +106 -0
  29. package/dist/core/PostUpdateMigrator.js.map +1 -1
  30. package/dist/core/SpawnAdmission.d.ts +218 -0
  31. package/dist/core/SpawnAdmission.d.ts.map +1 -0
  32. package/dist/core/SpawnAdmission.js +440 -0
  33. package/dist/core/SpawnAdmission.js.map +1 -0
  34. package/dist/core/devGatedFeatures.d.ts.map +1 -1
  35. package/dist/core/devGatedFeatures.js +24 -0
  36. package/dist/core/devGatedFeatures.js.map +1 -1
  37. package/dist/core/machineCoherenceManifest.d.ts.map +1 -1
  38. package/dist/core/machineCoherenceManifest.js +30 -0
  39. package/dist/core/machineCoherenceManifest.js.map +1 -1
  40. package/dist/core/types.d.ts +87 -0
  41. package/dist/core/types.d.ts.map +1 -1
  42. package/dist/core/types.js.map +1 -1
  43. package/dist/monitoring/DuplicateSessionReconciler.d.ts +225 -0
  44. package/dist/monitoring/DuplicateSessionReconciler.d.ts.map +1 -0
  45. package/dist/monitoring/DuplicateSessionReconciler.js +544 -0
  46. package/dist/monitoring/DuplicateSessionReconciler.js.map +1 -0
  47. package/dist/monitoring/FailureAnalyzer.d.ts.map +1 -1
  48. package/dist/monitoring/FailureAnalyzer.js +40 -1
  49. package/dist/monitoring/FailureAnalyzer.js.map +1 -1
  50. package/dist/monitoring/FailureLedger.d.ts +9 -0
  51. package/dist/monitoring/FailureLedger.d.ts.map +1 -1
  52. package/dist/monitoring/FailureLedger.js +21 -4
  53. package/dist/monitoring/FailureLedger.js.map +1 -1
  54. package/dist/scaffold/templates.d.ts.map +1 -1
  55. package/dist/scaffold/templates.js +2 -1
  56. package/dist/scaffold/templates.js.map +1 -1
  57. package/dist/server/AgentServer.d.ts +5 -0
  58. package/dist/server/AgentServer.d.ts.map +1 -1
  59. package/dist/server/AgentServer.js +4 -0
  60. package/dist/server/AgentServer.js.map +1 -1
  61. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  62. package/dist/server/CapabilityIndex.js +9 -0
  63. package/dist/server/CapabilityIndex.js.map +1 -1
  64. package/dist/server/fileRoutes.d.ts +16 -0
  65. package/dist/server/fileRoutes.d.ts.map +1 -1
  66. package/dist/server/fileRoutes.js +46 -0
  67. package/dist/server/fileRoutes.js.map +1 -1
  68. package/dist/server/routes.d.ts +7 -0
  69. package/dist/server/routes.d.ts.map +1 -1
  70. package/dist/server/routes.js +99 -0
  71. package/dist/server/routes.js.map +1 -1
  72. package/dist/testing/selfActionRegistry.d.ts.map +1 -1
  73. package/dist/testing/selfActionRegistry.js +89 -0
  74. package/dist/testing/selfActionRegistry.js.map +1 -1
  75. package/package.json +1 -1
  76. package/scripts/lib/self-action-detect.mjs +2 -0
  77. package/skills/instar-dev/templates/side-effects-artifact.md +8 -0
  78. package/skills/spec-converge/SKILL.md +1 -0
  79. package/skills/spec-converge/scripts/write-convergence-tag.mjs +71 -0
  80. package/src/data/builtin-manifest.json +65 -65
  81. package/src/scaffold/templates.ts +2 -1
  82. package/upgrades/1.3.820.md +25 -0
  83. package/upgrades/1.3.821.md +22 -0
  84. package/upgrades/side-effects/ownership-gated-spawn-increment-1.md +166 -0
  85. package/upgrades/side-effects/two-node-harness-increment2-entry-gate.md +64 -0
@@ -0,0 +1,225 @@
1
+ /**
2
+ * DuplicateSessionReconciler — Layer B of ownership-gated-spawn-and-judgment-
3
+ * within-floors (§3.2): converge the OWNERSHIP RECORD when the same
4
+ * conversation is live on two or more machines, so the EXISTING gated closeout
5
+ * (SessionReaper's topic-moved sweeper) can close the non-owner copy through
6
+ * its normal path. **The reconciler never kills a session** — it repairs
7
+ * records; the closeout's own guards (fresh re-checks, veto breaker,
8
+ * terminate-time re-probe) do every close.
9
+ *
10
+ * The 2026-07-10 incident's healing gap in one line: the duplicate detector
11
+ * was observe-only and request-driven (only ran when a dashboard polled), and
12
+ * both machines' cleanup separately refused the duplicates (`not-lease-holder`
13
+ * on one side, `open-commitment` on the other) — two individually-correct
14
+ * guards jointly making a duplicate immortal.
15
+ *
16
+ * Deterministic core (all ambiguity ESCALATES, never guesses):
17
+ * - §3.2.0 substrate gate: refuses to arm on an in-memory ownership store
18
+ * (fleet default) — a loud `substrate-not-ready` status, never silent.
19
+ * - §3.2.1 discovery on the serving-lease holder only, tick-paced, fresh
20
+ * direct probe before ANY record write; per-tick caps (P17).
21
+ * - §3.2.2 intended-owner evidence ladder: hard pin (never a quarantined
22
+ * one) → highest ADMISSIBLE ownershipEpoch → server-registered live
23
+ * autonomous run (probe-confirmed) → J2/escalate. Rule-2/rule-3
24
+ * contradiction, both-self-with-equal-epochs, both-live-runs, and CAS
25
+ * 409s always escalate. "Most recent user interaction" is deliberately
26
+ * NOT a rule — the non-owner duplicate often has the latest message
27
+ * BECAUSE of the bug.
28
+ * - §3.2.3 convergence: ONE fenced CAS naming the intended owner (journal
29
+ * replication fast-forwards every peer), then peer-echo confirmation
30
+ * within `echoConfirmTicks`; no echo → ONE aggregated
31
+ * `convergence-not-observed` escalation (P17).
32
+ * - §3.2.5 P19 breaker: a topic re-duplicating past the threshold stops
33
+ * being auto-reconciled and raises ONE item; record FLIPS and
34
+ * echoed-but-unhealed episodes count; transfer-traceable episodes are
35
+ * excluded from the clamp (but ≥3/24h raise an observability-only item).
36
+ * - Registry-error freeze: while the SpawnAdmission error episode is open,
37
+ * the reconciler pauses (same fault domain — §3.1 row e).
38
+ *
39
+ * Increment-1 posture: dev-gated + dryRun — detection, evidence ladder, and
40
+ * would-converge decisions run and journal; NO CAS lands, NO closeout arms
41
+ * until a deliberate dryRun:false (and the substrate gate holds regardless).
42
+ */
43
+ import type { BoundedJsonlAudit } from '../core/BoundedJsonlAudit.js';
44
+ export interface DuplicateCandidate {
45
+ /** `${platform}:${platformId}` — the conversation identity. */
46
+ key: string;
47
+ platform: string;
48
+ platformId: string;
49
+ /** Machines with a LIVE session for this conversation. */
50
+ machines: Array<{
51
+ machineId: string;
52
+ sessions: string[];
53
+ }>;
54
+ }
55
+ export interface ReconcilerConfigView {
56
+ enabled: boolean;
57
+ dryRun: boolean;
58
+ reconcilerTickMs: number;
59
+ maxReconcilesPerTick: number;
60
+ maxConvergenceWritesPerTick: number;
61
+ echoConfirmTicks: number;
62
+ breakerThreshold: number;
63
+ breakerWindowMs: number;
64
+ }
65
+ export interface OwnershipViewRow {
66
+ machineId: string;
67
+ owner: string | null;
68
+ epoch: number;
69
+ /** Origin-stamp validated (§3 epoch hygiene) — inadmissible rows never count. */
70
+ admissible: boolean;
71
+ }
72
+ export type IntendedOwnerVerdict = {
73
+ kind: 'owner';
74
+ owner: string;
75
+ rule: 'hard-pin' | 'highest-epoch' | 'live-run';
76
+ detail: string;
77
+ } | {
78
+ kind: 'escalate';
79
+ reason: string;
80
+ };
81
+ export interface ReconcilerDeps {
82
+ selfMachineId: () => string | null;
83
+ holdsLease: () => boolean;
84
+ /** §3.2.0 — durable + replicated ownership substrate live pool-wide. */
85
+ substrateReady: () => {
86
+ ready: boolean;
87
+ reason?: string;
88
+ };
89
+ /** §3.1 row e — freeze while a registry-error episode is open (same fault domain). */
90
+ errorEpisodeOpen: () => boolean;
91
+ /** One authority in motion per topic: in-flight transfer / open stale-owner episode / active hold. */
92
+ topicHasAuthorityInMotion: (sessionKey: string) => boolean;
93
+ /** Candidate discovery (lease-holder bounded fan-out, or the pool poll-cache where live). */
94
+ discoverCandidates: () => Promise<{
95
+ candidates: DuplicateCandidate[];
96
+ degraded?: string;
97
+ }>;
98
+ /**
99
+ * Fresh direct probe (5s budget in the wiring): does the machine still hold a
100
+ * LIVE copy of this conversation? Cache rows are never acted on (§3.2.1).
101
+ */
102
+ probeLiveCopy: (machineId: string, key: string) => Promise<{
103
+ ok: boolean;
104
+ live: boolean;
105
+ }>;
106
+ /** Pin store read — a quarantined pin never counts (§3.2.2 rule 1). */
107
+ readPin: (sessionKey: string) => {
108
+ pinned: boolean;
109
+ preferredMachine?: string | null;
110
+ quarantined?: boolean;
111
+ } | null;
112
+ /** Every machine's replicated registry view for this key (§3.2.2 rule 2). */
113
+ readOwnershipViews: (sessionKey: string) => OwnershipViewRow[];
114
+ /**
115
+ * §3.2.2 rule 3 — journal-replicated live-run registration, confirmed by an
116
+ * authenticated live probe to the hosting machine (never a bare poll row).
117
+ */
118
+ liveRunHosts: (sessionKey: string) => Promise<Array<{
119
+ machineId: string;
120
+ registeredAt: number;
121
+ confirmed: boolean;
122
+ }>>;
123
+ /** The fenced convergence CAS (lease epoch + record epoch ride the wiring). */
124
+ casConverge: (sessionKey: string, owner: string) => {
125
+ ok: boolean;
126
+ reason?: string;
127
+ };
128
+ /** Peer-echo: does `machineId`'s OWN registry view now name `owner`? */
129
+ peerEchoObserved: (sessionKey: string, owner: string, machineId: string) => Promise<boolean>;
130
+ /**
131
+ * Arm the existing closeout for the non-owner copy (reap-log reason
132
+ * `duplicate-reconciled`) — the sweeper's own guards still decide the close.
133
+ */
134
+ armCloseout: (sessionKey: string, owner: string) => void;
135
+ raiseAttention: (item: {
136
+ id: string;
137
+ title: string;
138
+ body: string;
139
+ priority: 'high' | 'medium';
140
+ }) => void;
141
+ journal: BoundedJsonlAudit;
142
+ provenance?: (row: {
143
+ component: string;
144
+ decisionPoint: string;
145
+ context: Record<string, unknown>;
146
+ optionsPresented: string[];
147
+ decision: string;
148
+ reason: string;
149
+ floor: string;
150
+ fallbackRung: string;
151
+ }) => void;
152
+ log: (msg: string) => void;
153
+ now?: () => number;
154
+ }
155
+ /** §3.2.5 — receive-side type clamp for replicated breaker rows. */
156
+ export declare function clampBreakerRow(row: unknown): {
157
+ key: string;
158
+ count: number;
159
+ lastAt: string;
160
+ } | null;
161
+ export interface ReconcilerTickReport {
162
+ at: string;
163
+ ran: boolean;
164
+ skippedReason?: string;
165
+ candidates: number;
166
+ reconciled: number;
167
+ wouldConverge: number;
168
+ escalations: number;
169
+ echoConfirmed: number;
170
+ echoTimeouts: number;
171
+ breakerClamped: number;
172
+ }
173
+ export interface ReconcilerStatus {
174
+ enabled: boolean;
175
+ dryRun: boolean;
176
+ substrate: {
177
+ ready: boolean;
178
+ reason?: string;
179
+ };
180
+ lastTick: ReconcilerTickReport | null;
181
+ openEpisodes: number;
182
+ breaker: Array<{
183
+ key: string;
184
+ episodes: number;
185
+ clamped: boolean;
186
+ }>;
187
+ counters: Record<string, number>;
188
+ config: Omit<ReconcilerConfigView, 'enabled' | 'dryRun'>;
189
+ }
190
+ export declare class DuplicateSessionReconciler {
191
+ private readonly deps;
192
+ private cfg;
193
+ private readonly nowFn;
194
+ private episodes;
195
+ /** §3.2.5 per-topic re-duplication episode opens within the window. */
196
+ private breakerEpisodes;
197
+ /** Topics whose episode is transfer-traceable this window (excluded from the clamp). */
198
+ private transferTraceable;
199
+ private lastTick;
200
+ private substrateNotReadySince;
201
+ private substratePauseItemRaised;
202
+ private counters;
203
+ constructor(cfg: ReconcilerConfigView, deps: ReconcilerDeps);
204
+ setConfig(cfg: ReconcilerConfigView): void;
205
+ /** One reconciler pass. Returns the report (also retained for status()). */
206
+ tick(): Promise<ReconcilerTickReport>;
207
+ private finish;
208
+ private noteSubstrateNotReady;
209
+ /** Reconcile one duplicate candidate. */
210
+ private reconcileOne;
211
+ /** §3.2.2 — the evidence ladder. */
212
+ private intendedOwner;
213
+ private checkPendingEchoes;
214
+ private openOrGetEpisode;
215
+ /** Record a topic-moved (transfer-traceable) episode — excluded from the clamp. */
216
+ noteTransferTraceable(key: string): void;
217
+ private bumpBreaker;
218
+ /** §3.2.5 — also consulted by the owner-dark ladder (clamp to rung 3). */
219
+ breakerClamped(key: string, now?: number): boolean;
220
+ private escalateOnce;
221
+ private journalRow;
222
+ private provenanceRow;
223
+ status(): ReconcilerStatus;
224
+ }
225
+ //# sourceMappingURL=DuplicateSessionReconciler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DuplicateSessionReconciler.d.ts","sourceRoot":"","sources":["../../src/monitoring/DuplicateSessionReconciler.ts"],"names":[],"mappings":"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"}