instar 1.3.43 → 1.3.44
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 +292 -3
- package/dist/commands/server.js.map +1 -1
- package/dist/core/HandoffReceiver.d.ts +56 -0
- package/dist/core/HandoffReceiver.d.ts.map +1 -0
- package/dist/core/HandoffReceiver.js +103 -0
- package/dist/core/HandoffReceiver.js.map +1 -0
- package/dist/core/HandoffWireTransport.d.ts +61 -0
- package/dist/core/HandoffWireTransport.d.ts.map +1 -0
- package/dist/core/HandoffWireTransport.js +114 -0
- package/dist/core/HandoffWireTransport.js.map +1 -0
- package/dist/core/HttpLeaseTransport.d.ts +68 -0
- package/dist/core/HttpLeaseTransport.d.ts.map +1 -0
- package/dist/core/HttpLeaseTransport.js +97 -0
- package/dist/core/HttpLeaseTransport.js.map +1 -0
- package/dist/core/HttpLiveTailTransport.d.ts +88 -0
- package/dist/core/HttpLiveTailTransport.d.ts.map +1 -0
- package/dist/core/HttpLiveTailTransport.js +95 -0
- package/dist/core/HttpLiveTailTransport.js.map +1 -0
- package/dist/core/LeaseCoordinator.d.ts +14 -0
- package/dist/core/LeaseCoordinator.d.ts.map +1 -1
- package/dist/core/LeaseCoordinator.js +38 -0
- package/dist/core/LeaseCoordinator.js.map +1 -1
- package/dist/core/LiveTailSource.d.ts +65 -0
- package/dist/core/LiveTailSource.d.ts.map +1 -0
- package/dist/core/LiveTailSource.js +87 -0
- package/dist/core/LiveTailSource.js.map +1 -0
- package/dist/core/MultiMachineCoordinator.d.ts +14 -0
- package/dist/core/MultiMachineCoordinator.d.ts.map +1 -1
- package/dist/core/MultiMachineCoordinator.js +22 -0
- package/dist/core/MultiMachineCoordinator.js.map +1 -1
- package/dist/core/ReplyMarkerTransport.d.ts +58 -0
- package/dist/core/ReplyMarkerTransport.d.ts.map +1 -0
- package/dist/core/ReplyMarkerTransport.js +66 -0
- package/dist/core/ReplyMarkerTransport.js.map +1 -0
- package/dist/core/handoffReceiverWiring.d.ts +57 -0
- package/dist/core/handoffReceiverWiring.d.ts.map +1 -0
- package/dist/core/handoffReceiverWiring.js +65 -0
- package/dist/core/handoffReceiverWiring.js.map +1 -0
- package/dist/core/handoffSentinelBootWiring.d.ts +53 -0
- package/dist/core/handoffSentinelBootWiring.d.ts.map +1 -0
- package/dist/core/handoffSentinelBootWiring.js +52 -0
- package/dist/core/handoffSentinelBootWiring.js.map +1 -0
- package/dist/core/handoffSentinelWiring.d.ts +60 -0
- package/dist/core/handoffSentinelWiring.d.ts.map +1 -0
- package/dist/core/handoffSentinelWiring.js +59 -0
- package/dist/core/handoffSentinelWiring.js.map +1 -0
- package/dist/core/seamlessnessConfig.d.ts +8 -0
- package/dist/core/seamlessnessConfig.d.ts.map +1 -1
- package/dist/core/seamlessnessConfig.js +1 -0
- package/dist/core/seamlessnessConfig.js.map +1 -1
- package/dist/core/types.d.ts +6 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/messaging/TelegramAdapter.d.ts +6 -0
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
- package/dist/messaging/TelegramAdapter.js +8 -0
- package/dist/messaging/TelegramAdapter.js.map +1 -1
- package/dist/messaging/ingressDedup.d.ts +55 -0
- package/dist/messaging/ingressDedup.d.ts.map +1 -0
- package/dist/messaging/ingressDedup.js +69 -0
- package/dist/messaging/ingressDedup.js.map +1 -0
- package/dist/messaging/stuckMessageRecovery.d.ts +46 -0
- package/dist/messaging/stuckMessageRecovery.d.ts.map +1 -0
- package/dist/messaging/stuckMessageRecovery.js +52 -0
- package/dist/messaging/stuckMessageRecovery.js.map +1 -0
- package/dist/server/AgentServer.d.ts +64 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +24 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/handoffInitiateRoutes.d.ts +40 -0
- package/dist/server/handoffInitiateRoutes.d.ts.map +1 -0
- package/dist/server/handoffInitiateRoutes.js +57 -0
- package/dist/server/handoffInitiateRoutes.js.map +1 -0
- package/dist/server/machineRoutes.d.ts +47 -0
- package/dist/server/machineRoutes.d.ts.map +1 -1
- package/dist/server/machineRoutes.js +138 -0
- package/dist/server/machineRoutes.js.map +1 -1
- package/dist/server/routes.d.ts +20 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +65 -0
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +49 -49
- package/upgrades/1.3.44.md +72 -0
- package/upgrades/side-effects/cross-machine-seamlessness-consent-acquire.md +52 -0
- package/upgrades/side-effects/cross-machine-seamlessness-exactly-once-ingress.md +73 -0
- package/upgrades/side-effects/cross-machine-seamlessness-handoff-ack-yield.md +82 -0
- package/upgrades/side-effects/cross-machine-seamlessness-handoff-begin.md +48 -0
- package/upgrades/side-effects/cross-machine-seamlessness-handoff-boot-wiring.md +68 -0
- package/upgrades/side-effects/cross-machine-seamlessness-handoff-receiver-wiring.md +52 -0
- package/upgrades/side-effects/cross-machine-seamlessness-handoff-receiver.md +46 -0
- package/upgrades/side-effects/cross-machine-seamlessness-handoff-sentinel-wiring.md +47 -0
- package/upgrades/side-effects/cross-machine-seamlessness-lease-wire.md +46 -0
- package/upgrades/side-effects/cross-machine-seamlessness-livetail-source.md +50 -0
- package/upgrades/side-effects/cross-machine-seamlessness-livetail-streaming.md +50 -0
- package/upgrades/side-effects/cross-machine-seamlessness-livetail-wire.md +65 -0
- package/upgrades/side-effects/cross-machine-seamlessness-noloss-recovery.md +61 -0
- package/upgrades/side-effects/cross-machine-seamlessness-reply-marker.md +65 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Side-Effects Review — Cross-Machine Seamlessness: reply-marker propagation (D-xmachine)
|
|
2
|
+
|
|
3
|
+
**Spec:** docs/specs/CROSS-MACHINE-SEAMLESSNESS-SPEC.md §8 G3a ("dual-medium reply_committed marker")
|
|
4
|
+
|
|
5
|
+
The cross-machine half of exactly-once. The same-machine dedup gate + no-loss recovery handle
|
|
6
|
+
one machine; this closes the window where, AFTER a handoff/failover, a provider redelivery of a
|
|
7
|
+
message the OLD holder already answered arrives at the NEW holder — whose ledger wouldn't know,
|
|
8
|
+
so it would re-answer. The holder now propagates a `reply_committed` marker to standby peers on
|
|
9
|
+
each commit; the standby applies it via `applyRemoteReplyMarker`, so the new holder's dedup gate
|
|
10
|
+
drops the redelivery. Still flag-gated dark (`multiMachine.exactlyOnceIngress`, default false).
|
|
11
|
+
|
|
12
|
+
## What changed
|
|
13
|
+
- `src/core/ReplyMarkerTransport.ts` — NEW. `broadcast(marker)` signs + POSTs
|
|
14
|
+
{dedupeKey, platform, replyIdempotencyKey, epoch, topic} to each standby peer's
|
|
15
|
+
`/api/message-marker` over the authenticated machine channel. NO encryption (the marker
|
|
16
|
+
carries no conversation content — authentication only). No peers → reachable no-op. Never
|
|
17
|
+
throws (best-effort; the dedup gate + provider redelivery are the backstop).
|
|
18
|
+
- `src/server/machineRoutes.ts` — `POST /api/message-marker` (machineAuth) + `onReplyMarker`
|
|
19
|
+
ctx callback. Validates the marker shape; 503 when no receiver (exactly-once off).
|
|
20
|
+
- `src/server/AgentServer.ts` — `replyMarkerTransport?` + `onReplyMarker?` options → routeCtx /
|
|
21
|
+
machineRoutes.
|
|
22
|
+
- `src/server/routes.ts` — RouteContext.replyMarkerTransport; the outbound commit at
|
|
23
|
+
`/telegram/reply/:topicId` reads the just-committed `replyIdempotencyKey` from the ledger and
|
|
24
|
+
fires `replyMarkerTransport.broadcast(...)` (fire-and-forget, after the local commit).
|
|
25
|
+
- `src/commands/server.ts` — constructs `ReplyMarkerTransport` (peer resolver = registry
|
|
26
|
+
machines with a lastKnownUrl) ONLY when `exactlyOnceIngress` + coordinator.enabled; wires
|
|
27
|
+
`onReplyMarker` → `messageLedger.applyRemoteReplyMarker`.
|
|
28
|
+
|
|
29
|
+
## Over-block / under-block
|
|
30
|
+
- The marker NEVER over-marks a fresh event: `applyRemoteReplyMarker` only sets reply_committed
|
|
31
|
+
on an entry not already acted-on, and the dedupeKey is the same provider-stable id both
|
|
32
|
+
machines compute — so a marker for event X can only dedup event X. The deterministic
|
|
33
|
+
`replyIdempotencyKey` (hash(dedupeKey+index)) is identical on both machines.
|
|
34
|
+
- UNDER-propagate (a lost marker): best-effort — if the marker doesn't reach the standby, the
|
|
35
|
+
provider's at-least-once redelivery + the standby's own ledger (once it catches up) still
|
|
36
|
+
dedup; the residual is the documented single-duplicate Two-Generals floor, not a new failure.
|
|
37
|
+
- Signed channel: `/api/message-marker` requires machineAuth (unsigned → 401, proven in the e2e);
|
|
38
|
+
the marker carries no secrets so no encryption is needed.
|
|
39
|
+
|
|
40
|
+
## Signal vs authority
|
|
41
|
+
- The transport propagates; the receiving ledger's `applyRemoteReplyMarker` is the authority on
|
|
42
|
+
its own state (only promotes a not-yet-acted entry). The dedup gate remains the single drop authority.
|
|
43
|
+
|
|
44
|
+
## Interactions
|
|
45
|
+
- Fires AFTER the local `commitInboundReply` (the local guarantee never depends on propagation).
|
|
46
|
+
- Skipped for proxy/system sends (same guard as the commit) — a proxy message isn't a user reply.
|
|
47
|
+
- Peer resolver mirrors the live-tail/handoff resolvers (registry machines with lastKnownUrl,
|
|
48
|
+
excludes self/revoked). Solo agent → no peers → no-op.
|
|
49
|
+
|
|
50
|
+
## Rollback cost
|
|
51
|
+
- Low. Flag default-off ⇒ transport not constructed, route 503s, no propagation. Revert = drop
|
|
52
|
+
the transport + route + the broadcast call. No persisted schema.
|
|
53
|
+
|
|
54
|
+
## Tests
|
|
55
|
+
- `tests/unit/reply-marker-transport.test.ts` (3): no-peers no-op; signs + POSTs to each peer;
|
|
56
|
+
resolves false (never throws) when all peers reject.
|
|
57
|
+
- `tests/e2e/reply-marker-cross-machine-e2e.test.ts` (2): a PEER-signed marker over real HTTP +
|
|
58
|
+
machine-auth applies to the receiver's ledger, then a redelivery of that message is DEDUPED
|
|
59
|
+
(already-replied) — the cross-machine guarantee end-to-end; + unsigned marker rejected (401).
|
|
60
|
+
|
|
61
|
+
## Completion status
|
|
62
|
+
- With D-dedup + D-noloss + D-xmachine, the exactly-once guarantee is COMPLETE in all dimensions
|
|
63
|
+
(no-dup same+cross machine, no-loss on crash), all DARK behind the flag. Remaining before the
|
|
64
|
+
flag flips: D3 (CONTINUATION resume verify) + the over-Telegram two-machine test-as-self (the
|
|
65
|
+
live acceptance bar, needs the operator's machines).
|