@cello-protocol/daemon 0.0.180 → 0.0.182
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/agent-id-migration.d.ts +9 -0
- package/dist/agent-id-migration.d.ts.map +1 -1
- package/dist/agent-id-migration.js +73 -1
- package/dist/agent-id-migration.js.map +1 -1
- package/dist/agent-selection.d.ts +73 -0
- package/dist/agent-selection.d.ts.map +1 -0
- package/dist/agent-selection.js +80 -0
- package/dist/agent-selection.js.map +1 -0
- package/dist/assignment-verify.d.ts +62 -0
- package/dist/assignment-verify.d.ts.map +1 -0
- package/dist/assignment-verify.js +185 -0
- package/dist/assignment-verify.js.map +1 -0
- package/dist/backup-restore.d.ts +102 -0
- package/dist/backup-restore.d.ts.map +1 -0
- package/dist/backup-restore.js +340 -0
- package/dist/backup-restore.js.map +1 -0
- package/dist/bin/cello-daemon.js +91 -49
- package/dist/bin/cello-daemon.js.map +1 -1
- package/dist/close-commitment.d.ts +67 -0
- package/dist/close-commitment.d.ts.map +1 -0
- package/dist/close-commitment.js +78 -0
- package/dist/close-commitment.js.map +1 -0
- package/dist/close-session-handler.d.ts +20 -0
- package/dist/close-session-handler.d.ts.map +1 -1
- package/dist/close-session-handler.js +351 -58
- package/dist/close-session-handler.js.map +1 -1
- package/dist/consortium-bootstrap.d.ts +2 -0
- package/dist/consortium-bootstrap.d.ts.map +1 -1
- package/dist/consortium-bootstrap.js +65 -7
- package/dist/consortium-bootstrap.js.map +1 -1
- package/dist/content-park.d.ts.map +1 -1
- package/dist/content-park.js +141 -10
- package/dist/content-park.js.map +1 -1
- package/dist/daemon.d.ts +13 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +928 -123
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-session-suspects.d.ts.map +1 -1
- package/dist/delivery-session-suspects.js +5 -0
- package/dist/delivery-session-suspects.js.map +1 -1
- package/dist/directory-auth-posture.d.ts +87 -0
- package/dist/directory-auth-posture.d.ts.map +1 -0
- package/dist/directory-auth-posture.js +134 -0
- package/dist/directory-auth-posture.js.map +1 -0
- package/dist/directory-bootstrap.d.ts +66 -3
- package/dist/directory-bootstrap.d.ts.map +1 -1
- package/dist/directory-bootstrap.js +133 -7
- package/dist/directory-bootstrap.js.map +1 -1
- package/dist/document-delivery-transport.d.ts +22 -2
- package/dist/document-delivery-transport.d.ts.map +1 -1
- package/dist/document-delivery-transport.js +11 -3
- package/dist/document-delivery-transport.js.map +1 -1
- package/dist/document-frame-router.d.ts +14 -0
- package/dist/document-frame-router.d.ts.map +1 -1
- package/dist/document-frame-router.js +17 -0
- package/dist/document-frame-router.js.map +1 -1
- package/dist/document-gate.js +51 -8
- package/dist/document-gate.js.map +1 -1
- package/dist/document-handlers.d.ts.map +1 -1
- package/dist/document-handlers.js +50 -6
- package/dist/document-handlers.js.map +1 -1
- package/dist/document-inbound.d.ts +22 -0
- package/dist/document-inbound.d.ts.map +1 -1
- package/dist/document-inbound.js +54 -0
- package/dist/document-inbound.js.map +1 -1
- package/dist/document-layer.d.ts +13 -0
- package/dist/document-layer.d.ts.map +1 -1
- package/dist/document-layer.js +1 -0
- package/dist/document-layer.js.map +1 -1
- package/dist/document-screen.d.ts +39 -0
- package/dist/document-screen.d.ts.map +1 -1
- package/dist/document-screen.js +64 -9
- package/dist/document-screen.js.map +1 -1
- package/dist/inbound-sessions.d.ts +31 -1
- package/dist/inbound-sessions.d.ts.map +1 -1
- package/dist/inbound-sessions.js +276 -16
- package/dist/inbound-sessions.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/ipc-server.d.ts +5 -1
- package/dist/ipc-server.d.ts.map +1 -1
- package/dist/ipc-server.js +19 -3
- package/dist/ipc-server.js.map +1 -1
- package/dist/manifest-validity.d.ts +151 -0
- package/dist/manifest-validity.d.ts.map +1 -0
- package/dist/manifest-validity.js +268 -0
- package/dist/manifest-validity.js.map +1 -0
- package/dist/notification-handlers.d.ts.map +1 -1
- package/dist/notification-handlers.js +15 -0
- package/dist/notification-handlers.js.map +1 -1
- package/dist/outbound-sessions.d.ts +31 -0
- package/dist/outbound-sessions.d.ts.map +1 -1
- package/dist/outbound-sessions.js +198 -17
- package/dist/outbound-sessions.js.map +1 -1
- package/dist/park-envelope.d.ts +72 -1
- package/dist/park-envelope.d.ts.map +1 -1
- package/dist/park-envelope.js +119 -4
- package/dist/park-envelope.js.map +1 -1
- package/dist/refusal-reasons.d.ts +72 -0
- package/dist/refusal-reasons.d.ts.map +1 -0
- package/dist/refusal-reasons.js +69 -0
- package/dist/refusal-reasons.js.map +1 -0
- package/dist/registration-manager.d.ts.map +1 -1
- package/dist/registration-manager.js +20 -1
- package/dist/registration-manager.js.map +1 -1
- package/dist/restart-seal-resolver.d.ts.map +1 -1
- package/dist/restart-seal-resolver.js +6 -0
- package/dist/restart-seal-resolver.js.map +1 -1
- package/dist/retry-queue.d.ts +23 -1
- package/dist/retry-queue.d.ts.map +1 -1
- package/dist/retry-queue.js +37 -9
- package/dist/retry-queue.js.map +1 -1
- package/dist/roster-freshness.d.ts +169 -0
- package/dist/roster-freshness.d.ts.map +1 -0
- package/dist/roster-freshness.js +249 -0
- package/dist/roster-freshness.js.map +1 -0
- package/dist/seal-certificate-pull.d.ts +17 -1
- package/dist/seal-certificate-pull.d.ts.map +1 -1
- package/dist/seal-certificate-pull.js +37 -3
- package/dist/seal-certificate-pull.js.map +1 -1
- package/dist/seal-coordinator.d.ts +17 -1
- package/dist/seal-coordinator.d.ts.map +1 -1
- package/dist/seal-coordinator.js +71 -0
- package/dist/seal-coordinator.js.map +1 -1
- package/dist/seal-failure-store.d.ts +104 -0
- package/dist/seal-failure-store.d.ts.map +1 -0
- package/dist/seal-failure-store.js +126 -0
- package/dist/seal-failure-store.js.map +1 -0
- package/dist/seal-flows.d.ts.map +1 -1
- package/dist/seal-flows.js +35 -6
- package/dist/seal-flows.js.map +1 -1
- package/dist/seal-upgrade.d.ts +20 -5
- package/dist/seal-upgrade.d.ts.map +1 -1
- package/dist/seal-upgrade.js +28 -5
- package/dist/seal-upgrade.js.map +1 -1
- package/dist/session-assignment-parser.d.ts +41 -5
- package/dist/session-assignment-parser.d.ts.map +1 -1
- package/dist/session-assignment-parser.js +77 -14
- package/dist/session-assignment-parser.js.map +1 -1
- package/dist/session-ceremony.d.ts +29 -0
- package/dist/session-ceremony.d.ts.map +1 -1
- package/dist/session-ceremony.js +71 -0
- package/dist/session-ceremony.js.map +1 -1
- package/dist/session-connection-gater.d.ts +46 -7
- package/dist/session-connection-gater.d.ts.map +1 -1
- package/dist/session-connection-gater.js +163 -12
- package/dist/session-connection-gater.js.map +1 -1
- package/dist/session-content-handlers.d.ts.map +1 -1
- package/dist/session-content-handlers.js +110 -4
- package/dist/session-content-handlers.js.map +1 -1
- package/dist/session-node-manager.d.ts +407 -37
- package/dist/session-node-manager.d.ts.map +1 -1
- package/dist/session-node-manager.js +3051 -239
- package/dist/session-node-manager.js.map +1 -1
- package/dist/session-read-handlers.d.ts +27 -0
- package/dist/session-read-handlers.d.ts.map +1 -1
- package/dist/session-read-handlers.js +112 -6
- package/dist/session-read-handlers.js.map +1 -1
- package/dist/session-relay-client.d.ts +61 -2
- package/dist/session-relay-client.d.ts.map +1 -1
- package/dist/session-relay-client.js +170 -11
- package/dist/session-relay-client.js.map +1 -1
- package/dist/session-salt-agreement.d.ts +284 -0
- package/dist/session-salt-agreement.d.ts.map +1 -0
- package/dist/session-salt-agreement.js +371 -0
- package/dist/session-salt-agreement.js.map +1 -0
- package/dist/signal-submission.d.ts.map +1 -1
- package/dist/signal-submission.js +10 -1
- package/dist/signal-submission.js.map +1 -1
- package/dist/signaling-connect.d.ts.map +1 -1
- package/dist/signaling-connect.js +42 -5
- package/dist/signaling-connect.js.map +1 -1
- package/dist/types.d.ts +54 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/vocabulary.d.ts.map +1 -1
- package/dist/vocabulary.js +10 -0
- package/dist/vocabulary.js.map +1 -1
- package/dist/wire-content-hash.d.ts +56 -0
- package/dist/wire-content-hash.d.ts.map +1 -1
- package/dist/wire-content-hash.js +71 -0
- package/dist/wire-content-hash.js.map +1 -1
- package/package.json +5 -5
package/dist/retry-queue.js
CHANGED
|
@@ -58,15 +58,32 @@ export class RetryQueue {
|
|
|
58
58
|
awaiting_ack INTEGER NOT NULL DEFAULT 0,
|
|
59
59
|
content_hash_hex TEXT,
|
|
60
60
|
structure1_cbor BLOB,
|
|
61
|
-
structure2_cbor BLOB
|
|
61
|
+
structure2_cbor BLOB,
|
|
62
|
+
content_hash_alg TEXT
|
|
62
63
|
)
|
|
63
64
|
`);
|
|
64
65
|
// Idempotent add for databases created before M12-P12. SQLite has no ADD COLUMN IF NOT EXISTS,
|
|
65
66
|
// so the duplicate-column error is the expected no-op on an already-migrated DB; any OTHER
|
|
66
67
|
// error is a real failure and must not be swallowed.
|
|
67
|
-
|
|
68
|
+
/**
|
|
69
|
+
* 🚨 A COLUMN ADDED HERE NEEDS A SECOND ENTRY, in `agent-id-migration.ts`'s `retry_queue`
|
|
70
|
+
* `createSql`. That rebuild copies the INTERSECTION of the old and new column lists, so a column
|
|
71
|
+
* this loop adds and that DDL omits is DROPPED on the one boot where a legacy database migrates
|
|
72
|
+
* — and then re-added EMPTY by this very loop, which is what makes it silent.
|
|
73
|
+
*
|
|
74
|
+
* It has happened: `structure1_cbor` and `structure2_cbor` were missing from that DDL from the
|
|
75
|
+
* day they were added until `DOD-M15-SEALWIRE-1` part B2b found it.
|
|
76
|
+
*/
|
|
77
|
+
for (const col of [
|
|
78
|
+
{ name: "structure1_cbor", type: "BLOB" },
|
|
79
|
+
{ name: "structure2_cbor", type: "BLOB" },
|
|
80
|
+
// DOD-M15-SEALWIRE-1 part B2b: which content-hash algorithm this queued message was hashed
|
|
81
|
+
// under. The crash-backstop park producer has no other source for it — the frame is gone by
|
|
82
|
+
// the time it runs — and re-parking under the wrong one gets the message refused.
|
|
83
|
+
{ name: "content_hash_alg", type: "TEXT" },
|
|
84
|
+
]) {
|
|
68
85
|
try {
|
|
69
|
-
this.#db.exec(`ALTER TABLE retry_queue ADD COLUMN ${col}
|
|
86
|
+
this.#db.exec(`ALTER TABLE retry_queue ADD COLUMN ${col.name} ${col.type}`);
|
|
70
87
|
}
|
|
71
88
|
catch (err) {
|
|
72
89
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -100,7 +117,7 @@ export class RetryQueue {
|
|
|
100
117
|
*/
|
|
101
118
|
loadFromDb() {
|
|
102
119
|
const rows = this.#db
|
|
103
|
-
.prepare("SELECT session_id, agent_id, nonce_hex, content_blob, queued_at, attempts, position, awaiting_ack, content_hash_hex, structure1_cbor, structure2_cbor FROM retry_queue ORDER BY session_id, position ASC")
|
|
120
|
+
.prepare("SELECT session_id, agent_id, nonce_hex, content_blob, queued_at, attempts, position, awaiting_ack, content_hash_hex, structure1_cbor, structure2_cbor, content_hash_alg FROM retry_queue ORDER BY session_id, position ASC")
|
|
104
121
|
.all();
|
|
105
122
|
this.#queues.clear();
|
|
106
123
|
this.#positionCounters.clear();
|
|
@@ -126,6 +143,7 @@ export class RetryQueue {
|
|
|
126
143
|
contentBlob: this.#openBlob(Uint8Array.from(row.content_blob)),
|
|
127
144
|
// M12-P12 (F2): the ordering record is NOT sealed — it is the relay's own signed record,
|
|
128
145
|
// already public to the relay, and it must be readable to re-seal the park envelope.
|
|
146
|
+
contentHashAlg: row.content_hash_alg ?? undefined,
|
|
129
147
|
structure1Cbor: row.structure1_cbor ? Uint8Array.from(row.structure1_cbor) : undefined,
|
|
130
148
|
structure2Cbor: row.structure2_cbor ? Uint8Array.from(row.structure2_cbor) : undefined,
|
|
131
149
|
queuedAt: row.queued_at,
|
|
@@ -474,7 +492,17 @@ export class RetryQueue {
|
|
|
474
492
|
* indistinguishable from a successful enqueue at the call site, which is how a leaf could be
|
|
475
493
|
* committed for content that no longer existed anywhere.
|
|
476
494
|
*/
|
|
477
|
-
|
|
495
|
+
/**
|
|
496
|
+
* `contentHashAlg` — `DOD-M15-SEALWIRE-1` part B2b. WHICH algorithm `contentHash` was produced
|
|
497
|
+
* under, carried because the crash-backstop park producer has NO OTHER SOURCE for it: it runs at
|
|
498
|
+
* the next boot, long after the frame is gone, and re-parking under the wrong algorithm gets the
|
|
499
|
+
* message refused by the recipient and re-pulled forever.
|
|
500
|
+
*
|
|
501
|
+
* Optional and stored as NULL when absent, never defaulted to the literal `"sha256"` — absent is
|
|
502
|
+
* what `resolveContentHashAlg` reads as "predates the field", and that distinction is the one B1
|
|
503
|
+
* and B2a each had to restore after it was collapsed.
|
|
504
|
+
*/
|
|
505
|
+
enqueueAwaitingContent(agentId, sessionId, contentHash, contentBlob, structure1Cbor, structure2Cbor, contentHashAlg) {
|
|
478
506
|
if (!agentId)
|
|
479
507
|
throw new Error("enqueueAwaitingContent: an owning agentId is required");
|
|
480
508
|
const contentHashHex = Buffer.from(contentHash).toString("hex");
|
|
@@ -506,9 +534,9 @@ export class RetryQueue {
|
|
|
506
534
|
// full, corruption, SQLITE_LOCKED); the agent-scoped unique index rules out a benign collision.
|
|
507
535
|
try {
|
|
508
536
|
this.#db
|
|
509
|
-
.prepare(`INSERT INTO retry_queue (session_id, agent_id, nonce_hex, content_blob, queued_at, attempts, position, awaiting_ack, content_hash_hex, structure1_cbor, structure2_cbor)
|
|
510
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?)`)
|
|
511
|
-
.run(sessionId, agentId, contentHashHex, Buffer.from(this.#sealBlob(contentBlob)), queuedAt, 1, position, contentHashHex, structure1Cbor ? Buffer.from(structure1Cbor) : null, structure2Cbor ? Buffer.from(structure2Cbor) : null);
|
|
537
|
+
.prepare(`INSERT INTO retry_queue (session_id, agent_id, nonce_hex, content_blob, queued_at, attempts, position, awaiting_ack, content_hash_hex, structure1_cbor, structure2_cbor, content_hash_alg)
|
|
538
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?)`)
|
|
539
|
+
.run(sessionId, agentId, contentHashHex, Buffer.from(this.#sealBlob(contentBlob)), queuedAt, 1, position, contentHashHex, structure1Cbor ? Buffer.from(structure1Cbor) : null, structure2Cbor ? Buffer.from(structure2Cbor) : null, contentHashAlg ?? null);
|
|
512
540
|
}
|
|
513
541
|
catch (err) {
|
|
514
542
|
const reason = err instanceof Error ? err.message : String(err);
|
|
@@ -522,7 +550,7 @@ export class RetryQueue {
|
|
|
522
550
|
throw new Error(`awaiting_content_persist_failed: ${reason}`);
|
|
523
551
|
}
|
|
524
552
|
this.#positionCounters.set(ak, position);
|
|
525
|
-
q.push({ agentId, sessionId, contentHashHex, contentBlob, structure1Cbor, structure2Cbor, queuedAt, position });
|
|
553
|
+
q.push({ agentId, sessionId, contentHashHex, contentBlob, structure1Cbor, structure2Cbor, contentHashAlg, queuedAt, position });
|
|
526
554
|
return true;
|
|
527
555
|
}
|
|
528
556
|
/** Remove an awaiting-ACK entry once its `persisted` ACK arrives. */
|
package/dist/retry-queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry-queue.js","sourceRoot":"","sources":["../src/retry-queue.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"retry-queue.js","sourceRoot":"","sources":["../src/retry-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,gEAAgE;AAChE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AA2DpC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,uBAAuB,GAAwB,IAAI,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAEzF,MAAM,OAAO,UAAU;IACZ,GAAG,CAAiB;IACpB,OAAO,CAAS;IACzB,uFAAuF;IACvF,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC/C,4DAA4D;IAC5D,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,6EAA6E;IAC7E,SAAS,GAAG,IAAI,GAAG,EAAkC,CAAC;IAEtD,YAAY,EAAkB,EAAE,MAAc;QAC5C,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,sEAAsE;QACtE,iGAAiG;QACjG,8FAA8F;QAC9F,sDAAsD;QACtD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;KAgBb,CAAC,CAAC;QACH,+FAA+F;QAC/F,2FAA2F;QAC3F,qDAAqD;QACrD;;;;;;;;WAQG;QACH,KAAK,MAAM,GAAG,IAAI;YAChB,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE;YACzC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE;YACzC,2FAA2F;YAC3F,4FAA4F;YAC5F,kFAAkF;YAClF,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE;SAC3C,EAAE,CAAC;YACF,IAAI,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,sCAAsC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9E,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,MAAM,GAAG,CAAC;YACrD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;;KAGb,CAAC,CAAC;QACH,2FAA2F;QAC3F,kGAAkG;QAClG,EAAE;QACF,kGAAkG;QAClG,0FAA0F;QAC1F,2FAA2F;QAC3F,uFAAuF;QACvF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;;KAGb,CAAC,CAAC;IACL,CAAC;IAED,qEAAqE;IACrE,GAAG,CAAC,OAAe,EAAE,SAAiB;QACpC,OAAO,GAAG,OAAO,OAAO,SAAS,EAAE,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG;aAClB,OAAO,CAAC,4NAA4N,CAAC;aACrO,GAAG,EAaF,CAAC;QAEL,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAEvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,GAAG,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;gBAC3B,4FAA4F;gBAC5F,yFAAyF;gBACzF,8FAA8F;gBAC9F,gGAAgG;gBAChG,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;oBAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE;wBACpD,SAAS,EAAE,GAAG,CAAC,UAAU;wBACzB,KAAK,EAAE,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,SAAS;wBAC5C,MAAM,EAAE,wDAAwD;qBACjE,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBACD,MAAM,KAAK,GAAyB;oBAClC,OAAO,EAAE,GAAG,CAAC,QAAQ;oBACrB,SAAS,EAAE,GAAG,CAAC,UAAU;oBACzB,cAAc,EAAE,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,SAAS;oBACrD,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAC9D,yFAAyF;oBACzF,qFAAqF;oBACrF,cAAc,EAAE,GAAG,CAAC,gBAAgB,IAAI,SAAS;oBACjD,cAAc,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;oBACtF,cAAc,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS;oBACtF,QAAQ,EAAE,GAAG,CAAC,SAAS;oBACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ;iBACvB,CAAC;gBACF,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBACnD,qFAAqF;gBACrF,wFAAwF;gBACxF,8EAA8E;gBAC9E,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACxD,IAAI,GAAG,CAAC,QAAQ,GAAG,WAAW;oBAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC7E,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC/B,IAAI,CAAC,CAAC,EAAE,CAAC;oBAAC,CAAC,GAAG,EAAE,CAAC;oBAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAC9C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACd,SAAS;YACX,CAAC;YAED,sFAAsF;YACtF,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACnE,IAAI,GAAG,CAAC,QAAQ,GAAG,UAAU;gBAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YAExF,MAAM,KAAK,GAAoB;gBAC7B,SAAS,EAAE,GAAG,CAAC,UAAU;gBACzB,QAAQ,EAAE,GAAG,CAAC,SAAS;gBACvB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC9D,QAAQ,EAAE,GAAG,CAAC,SAAS;gBACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;aACvB,CAAC;YAEF,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,YAAY,GAAG,EAAE,CAAC;gBAClB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAClD,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH;;;OAGG;IACH,SAAS,CAAC,CAAa;QACrB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,SAAS,CAAC,CAAa;QACrB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,SAAiB,EAAE,KAAiB,EAAE,WAAuB;QACnE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEpD,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,YAAY,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC5C,CAAC;QAED,4CAA4C;QAC5C,IAAI,YAAY,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,iBAAiB;YACjB,IAAI,CAAC;gBACH,IAAI,CAAC,GAAG;qBACL,OAAO,CAAC,+DAA+D,CAAC;qBACxE,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE;oBACjD,SAAS;oBACT,KAAK,EAAE,MAAM,CAAC,QAAQ;oBACtB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD,CAAC,CAAC;YACL,CAAC;YACD,+CAA+C;YAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE;gBACzC,SAAS;gBACT,KAAK,EAAE,MAAM,CAAC,QAAQ;gBACtB,UAAU,EAAE,eAAe;aAC5B,CAAC,CAAC;YACH,wBAAwB;YACxB,YAAY,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAED,wBAAwB;QACxB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,YAAY,GAAG,UAAU,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAEpD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAoB;YAC7B,SAAS;YACT,QAAQ;YACR,WAAW;YACX,QAAQ;YACR,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,YAAY;SACvB,CAAC;QAEF,uBAAuB;QACvB,IAAI,CAAC;YACH,IAAI,CAAC,GAAG;iBACL,OAAO,CACN;qCAC2B,CAC5B;iBACA,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;QACnG,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE;gBACjD,SAAS;gBACT,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;YACH,qEAAqE;QACvE,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE;YACxC,SAAS;YACT,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,YAAY,CAAC,MAAM;SAChC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,MAAgB;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,sEAAsE;QACtE,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAE/C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACtB,uEAAuE;gBACvE,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACjB,IAAI,CAAC;oBACH,IAAI,CAAC,GAAG;yBACL,OAAO,CAAC,4EAA4E,CAAC;yBACrF,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACpD,CAAC;gBAAC,OAAO,GAAY,EAAE,CAAC;oBACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE;wBACjD,SAAS;wBACT,KAAK,EAAE,KAAK,CAAC,QAAQ;wBACrB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;qBACxD,CAAC,CAAC;gBACL,CAAC;gBACD,+DAA+D;gBAC/D,MAAM;YACR,CAAC;YAED,0BAA0B;YAC1B,IAAI,CAAC;gBACH,IAAI,CAAC,GAAG;qBACL,OAAO,CAAC,gEAAgE,CAAC;qBACzE,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE;oBACjD,SAAS;oBACT,KAAK,EAAE,KAAK,CAAC,QAAQ;oBACrB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACxD,CAAC,CAAC;YACL,CAAC;YAED,qBAAqB;YACrB,YAAY,CAAC,KAAK,EAAE,CAAC;YAErB,iCAAiC;YACjC,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;YAEzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBAC3C,SAAS;gBACT,KAAK,EAAE,KAAK,CAAC,QAAQ;gBACrB,aAAa;aACd,CAAC,CAAC;YAEH,SAAS,EAAE,CAAC;QACd,CAAC;QAED,6BAA6B;QAC7B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,SAAiB,EAAE,cAAsC;QAC3E,gGAAgG;QAChG,4FAA4F;QAC5F,6FAA6F;QAC7F,8FAA8F;QAC9F,+FAA+F;QAC/F,OAAO;QACP,IAAI,MAAoC,CAAC;QACzC,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,GAAG;iBACd,OAAO,CAAC,6EAA6E,CAAC;iBACtF,GAAG,CAAC,SAAS,CAA4C,CAAC;QAC/D,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE;gBACjD,SAAS;gBACT,SAAS,EAAE,sBAAsB;gBACjC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBACvD,MAAM,EAAE,uFAAuF;aAChG,CAAC,CAAC;YACH,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,6FAA6F;YAC7F,4FAA4F;YAC5F,0EAA0E;YAC1E,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC/B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACzC,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG;iBACpB,OAAO,CAAC,mEAAmE,CAAC;iBAC5E,GAAG,CAAC,SAAS,CAA6C,CAAC;YAC9D,4FAA4F;YAC5F,6FAA6F;YAC7F,kEAAkE;YAClE,IAAI,MAAM,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE;oBACjD,SAAS;oBACT,SAAS,EAAE,sBAAsB;oBACjC,KAAK,EAAE,0CAA0C;oBACjD,MAAM,EAAE,6EAA6E;iBACtF,CAAC,CAAC;YACL,CAAC;YACD,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,yFAAyF;YACzF,0EAA0E;YAC1E,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE;gBACjD,SAAS;gBACT,SAAS,EAAE,sBAAsB;gBACjC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBACvD,MAAM,EAAE,6EAA6E;aACtF,CAAC,CAAC;YACH,OAAO,CAAC,CAAC;QACX,CAAC;QAED,+FAA+F;QAC/F,oDAAoD;QACpD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE;gBACtD,SAAS;gBACT,KAAK,EAAE,GAAG,CAAC,SAAS;gBACpB,MAAM,EAAE,cAAc;gBACtB,MAAM,EAAE,2FAA2F;aACpG,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE;YAC7C,SAAS;YACT,UAAU,EAAE,OAAO;YACnB,MAAM,EAAE,cAAc;SACvB,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,2BAA2B;QACzB,IAAI,IAAmD,CAAC;QACxD,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,GAAG;iBACZ,OAAO,CACN;;;;sDAI4C,CAC7C;iBACA,GAAG,EAA8D,CAAC;QACvE,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE;gBACjD,SAAS,EAAE,4BAA4B;gBACvC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBACvD,MAAM,EAAE,gFAAgF;aACzF,CAAC,CAAC;YACH,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,KAAK,IAAI,IAAI,CAAC,mBAAmB,CAC/B,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CACjD,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE;gBACzD,YAAY,EAAE,IAAI,CAAC,MAAM;gBACzB,UAAU,EAAE,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mDAAmD;IACnD,aAAa;QACX,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;QACxB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gDAAgD;IAChD,eAAe,CAAC,SAAiB;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,+FAA+F;IAC/F,iBAAiB,CAAC,SAAiB;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjC,CAAC;IAED,4CAA4C;IAE5C;;;;OAIG;IACH;;;;;;OAMG;IACH;;;;;;;;;OASG;IACH,sBAAsB,CAAC,OAAe,EAAE,SAAiB,EAAE,WAAuB,EAAE,WAAuB,EAAE,cAAsC,EAAE,cAAsC,EAAE,cAAkC;QAC7N,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACvF,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC,EAAE,CAAC;YAAC,CAAC,GAAG,EAAE,CAAC;YAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAC9C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,cAAc,CAAC,EAAE,CAAC;YACvD,8FAA8F;YAC9F,6FAA6F;YAC7F,6FAA6F;YAC7F,yFAAyF;YACzF,mFAAmF;YACnF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,+BAA+B,EAAE;gBACjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc;gBAC/C,MAAM,EAAE,wFAAwF;aACjG,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE5B,iGAAiG;QACjG,kGAAkG;QAClG,gGAAgG;QAChG,+FAA+F;QAC/F,gGAAgG;QAChG,IAAI,CAAC;YACH,IAAI,CAAC,GAAG;iBACL,OAAO,CACN;uDAC6C,CAC9C;iBACA,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,cAAc,EACnH,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EACnD,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EACnD,cAAc,IAAI,IAAI,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE;gBACjD,OAAO;gBACP,SAAS;gBACT,KAAK,EAAE,cAAc;gBACrB,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,2EAA2E;aACpF,CAAC,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChI,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qEAAqE;IACrE,gBAAgB,CAAC,OAAe,EAAE,SAAiB,EAAE,WAAuB;QAC1E,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,CAAC;YACN,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,cAAc,CAAC,CAAC;YACpE,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,GAAG;iBACL,OAAO,CAAC,6GAA6G,CAAC;iBACtH,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE;gBACjD,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aAC1F,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,gBAAgB,CAAC,OAAe,EAAE,SAAiB;QACjD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,mGAAmG;IACnG,mBAAmB;QACjB,MAAM,GAAG,GAAkD,EAAE,CAAC;QAC9D,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,SAAiB,EAAE,MAAc;QAC1E,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACnC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC3B,IAAI,MAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,MAAM,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACtF,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBACnB,yEAAyE;gBACzE,yEAAyE;gBACzE,4FAA4F;gBAC5F,4FAA4F;gBAC5F,cAAc;gBACd,IAAI,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9C,yFAAyF;oBACzF,yFAAyF;oBACzF,sEAAsE;oBACtE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE;wBAC3C,OAAO;wBACP,SAAS;wBACT,WAAW,EAAE,KAAK,CAAC,cAAc;wBACjC,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,MAAM,EAAE,wIAAwI;qBACjJ,CAAC,CAAC;oBACH,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC9B,IAAI,IAAI,KAAK,CAAC,CAAC;wBAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACnC,IAAI,CAAC;wBACH,IAAI,CAAC,GAAG;6BACL,OAAO,CAAC,6GAA6G,CAAC;6BACtH,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;oBACnD,CAAC;oBAAC,OAAO,GAAY,EAAE,CAAC;wBACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE;4BACjD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,EAAE,SAAS,EAAE,qBAAqB;4BACjF,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;4BACvD,MAAM,EAAE,2EAA2E;yBACpF,CAAC,CAAC;oBACL,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE;oBACvC,OAAO;oBACP,SAAS;oBACT,WAAW,EAAE,KAAK,CAAC,cAAc;oBACjC,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB,CAAC,CAAC;gBACH,SAAS,CAAC,0CAA0C;YACtD,CAAC;YACD,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC;gBACH,IAAI,CAAC,GAAG;qBACL,OAAO,CAAC,6GAA6G,CAAC;qBACtH,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;YACnD,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE;oBACjD,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBAChG,CAAC,CAAC;YACL,CAAC;YACD,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9C,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-M15-STALEROSTER-1 — a directory-roster reading that refuses to present itself as current.
|
|
3
|
+
*
|
|
4
|
+
* ─── The defect, measured twice on two machines ────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* Both daemons displayed directory node failures from minutes long past while `curl` reached all
|
|
7
|
+
* three nodes in 37–184 ms. The operator debugs an outage that ended before they looked.
|
|
8
|
+
*
|
|
9
|
+
* ─── The cause, CORRECTED after review ─────────────────────────────────────────────────────────
|
|
10
|
+
*
|
|
11
|
+
* This file first said the sweep had ONE caller — the failover path — and therefore ran only while
|
|
12
|
+
* the daemon was unhealthy. **That is false, and a thirty-second grep falsifies it.**
|
|
13
|
+
* `resolveConsortiumRoster` has ten callers: the failover resolver, four session and seal ceremony
|
|
14
|
+
* handlers, the seal auto-ack broker reconnect, `cello_refresh`, `cello_get_submission_results`,
|
|
15
|
+
* three cross-node session-setup paths, and the seal broker.
|
|
16
|
+
*
|
|
17
|
+
* The real shape is **an IDLE daemon never re-measures**. Every one of those callers is
|
|
18
|
+
* activity-driven, so the reading is refreshed by ceremonies and session setup and by nothing else.
|
|
19
|
+
* A daemon that sits still — which is what a daemon does between conversations — keeps the reading
|
|
20
|
+
* it was seeded with at boot, for as long as it stays still. The measured symptom is that startup
|
|
21
|
+
* seeded a failing reading and nothing happened afterwards to overwrite it.
|
|
22
|
+
*
|
|
23
|
+
* The fix is unchanged by the correction: a time-driven sweep is exactly what an activity-driven
|
|
24
|
+
* producer lacks. But the wrong map had a cost — believing there was a single writer is why the
|
|
25
|
+
* concurrent-sweep race below was not considered until review found it.
|
|
26
|
+
*
|
|
27
|
+
* ─── Two halves, because "no reading" and "an old reading" are different lies ───────────────────
|
|
28
|
+
*
|
|
29
|
+
* 1. `startRosterSweep` keeps measuring on a slow timer even when everything is healthy, so the
|
|
30
|
+
* reading cannot freeze.
|
|
31
|
+
* 2. `classifyRosterReading` / `describeRosterFreshness` make the reading state its own age, so a
|
|
32
|
+
* sweep that has stopped (or never started) is visible rather than inferred.
|
|
33
|
+
*
|
|
34
|
+
* The line rules out the tempting third option: *"Do not fix it by hiding the field when stale —
|
|
35
|
+
* absent and healthy must not look alike."* Suppressing a stale block trades a wrong answer for no
|
|
36
|
+
* answer, and no answer renders exactly like health.
|
|
37
|
+
*
|
|
38
|
+
* ─── Why "no reading" is a distinct kind, and the SECOND thing review corrected ─────────────────
|
|
39
|
+
*
|
|
40
|
+
* This file also claimed an EXPIRED manifest reaches the unmeasured state. It does not: a daemon
|
|
41
|
+
* whose manifest fails verification **refuses to start** (`daemon.ts`, ADV-002 — "an operator who
|
|
42
|
+
* configures manifestProvider has opted INTO manifest enforcement"). Not-yet-valid, rollback and
|
|
43
|
+
* load-failure are the same. Shipping that sentence in operator guidance sent the reader hunting a
|
|
44
|
+
* manifest problem, through a log family that has no lines on the only path that can actually get
|
|
45
|
+
* here. Error substitution, in brand-new prose, inside the fix for error substitution.
|
|
46
|
+
*
|
|
47
|
+
* The one reachable route is **no manifest provider at all**, and it is DESIGNED and BENIGN:
|
|
48
|
+
* `manifest-deps.ts` returns `{}` when `CELLO_DIRECTORY_URL` is not byte-equal to a bundled
|
|
49
|
+
* endpoint — local dev, the e2e harness, or an operator who used a DNS hostname for a bundled node.
|
|
50
|
+
* So it gets its own kind and its own calm wording. Treating it as an alarm would fire on every
|
|
51
|
+
* local run and every harness spin-up: a signal on the designed normal case, which this same file
|
|
52
|
+
* forbids two paragraphs down.
|
|
53
|
+
*
|
|
54
|
+
* Both kinds still EMIT — the line rules out hiding the field, because absent and healthy must not
|
|
55
|
+
* look alike. What changes between them is what the operator is told to do about it.
|
|
56
|
+
*/
|
|
57
|
+
/**
|
|
58
|
+
* How old a reading may be before it stops claiming the present tense.
|
|
59
|
+
*
|
|
60
|
+
* Five minutes is chosen against the SWEEP interval, not against operator patience: the sweep is
|
|
61
|
+
* slow by design (it probes every node in the consortium), so the bound has to be comfortably
|
|
62
|
+
* longer than one sweep period or a healthy daemon would flap between fresh and stale between
|
|
63
|
+
* ticks. It is the answer to "could this have changed without us noticing", and at five minutes the
|
|
64
|
+
* answer is still usually no.
|
|
65
|
+
*/
|
|
66
|
+
export declare const ROSTER_STALE_AFTER_MS: number;
|
|
67
|
+
/** How often the background sweep re-measures. Comfortably inside `ROSTER_STALE_AFTER_MS`. */
|
|
68
|
+
export declare const ROSTER_SWEEP_INTERVAL_MS = 90000;
|
|
69
|
+
export type RosterReading = {
|
|
70
|
+
kind: "never_measured";
|
|
71
|
+
} | {
|
|
72
|
+
kind: "fresh";
|
|
73
|
+
sweptAt: string;
|
|
74
|
+
ageMs: number;
|
|
75
|
+
} | {
|
|
76
|
+
kind: "stale";
|
|
77
|
+
sweptAt: string;
|
|
78
|
+
ageMs: number;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* How old is this reading, and may it still speak in the present tense?
|
|
82
|
+
*
|
|
83
|
+
* Pure and clock-injected: `nowMs` is a parameter so the boundary can be tested exactly rather than
|
|
84
|
+
* approximately, and so a test never has to sleep.
|
|
85
|
+
*/
|
|
86
|
+
export declare function classifyRosterReading(sweptAt: string | null, nowMs: number, staleAfterMs?: number): RosterReading;
|
|
87
|
+
export interface RosterFreshness {
|
|
88
|
+
/** ISO timestamp of the reading, or null when nothing has ever been measured. */
|
|
89
|
+
checked_at: string | null;
|
|
90
|
+
/** Whole seconds since the reading, or null when there is no reading (or its age is unknowable). */
|
|
91
|
+
age_seconds: number | null;
|
|
92
|
+
/** True when this reading must not be read as the present tense. */
|
|
93
|
+
stale: boolean;
|
|
94
|
+
/**
|
|
95
|
+
* WHICH of the non-current states this is, because they call for different responses:
|
|
96
|
+
* `current` — measured recently; the only state that may speak in the present tense.
|
|
97
|
+
* `stale` — measured, too long ago to be trusted as now.
|
|
98
|
+
* `never` — a manifest IS configured but no sweep has completed yet.
|
|
99
|
+
* `not_configured` — no consortium manifest, so there is no roster to measure. DESIGNED.
|
|
100
|
+
*/
|
|
101
|
+
measurement: "current" | "stale" | "never" | "not_configured";
|
|
102
|
+
/** Present ONLY when the reading is not current — a flag on every reading is not a flag. */
|
|
103
|
+
freshness_guidance?: string;
|
|
104
|
+
/**
|
|
105
|
+
* The last sweep failure, when the background sweep is erroring — DOD-M15-STALEROSTER-1 review F4.
|
|
106
|
+
*
|
|
107
|
+
* The log alone was not enough: a sweep failing every 90–180 s leaves the reading inside its
|
|
108
|
+
* 5-minute freshness bound for the first two or three failures, so the block reports
|
|
109
|
+
* `stale: false` and hands over a frozen reading as current. That is the defect this whole line
|
|
110
|
+
* exists to end, arriving through the new code's own failure path. The agent response carries the
|
|
111
|
+
* cause, and the log line stays.
|
|
112
|
+
*/
|
|
113
|
+
last_sweep_error?: {
|
|
114
|
+
event: string;
|
|
115
|
+
error: string;
|
|
116
|
+
at: string;
|
|
117
|
+
consecutive: number;
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Render a reading's age for an operator-facing response.
|
|
122
|
+
*
|
|
123
|
+
* A FRESH reading is deliberately left undecorated. A staleness marker attached to every reading
|
|
124
|
+
* fires on the ordinary case, which is the failure this milestone keeps re-finding: it is not a
|
|
125
|
+
* signal, and it teaches the reader to skip past the one that is real.
|
|
126
|
+
*/
|
|
127
|
+
export declare function describeRosterFreshness(reading: RosterReading, opts?: {
|
|
128
|
+
manifestConfigured: boolean;
|
|
129
|
+
lastSweepError?: RosterFreshness["last_sweep_error"];
|
|
130
|
+
}): RosterFreshness;
|
|
131
|
+
/** Minimal structural logger — `domain.noun.verb` taxonomy, injected, never imported. */
|
|
132
|
+
export interface RosterSweepLogger {
|
|
133
|
+
info(event: string, ctx?: Record<string, unknown>): void;
|
|
134
|
+
warn(event: string, ctx?: Record<string, unknown>): void;
|
|
135
|
+
error(event: string, ctx?: Record<string, unknown>): void;
|
|
136
|
+
}
|
|
137
|
+
export interface RosterSweepScheduler {
|
|
138
|
+
scheduleNext(callbackFn: () => Promise<void>): void;
|
|
139
|
+
cancel(): void;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Keep measuring directory reachability on a slow timer, whether or not anything is broken.
|
|
143
|
+
*
|
|
144
|
+
* This is the half that actually fixes the freeze: every existing caller of the sweep is
|
|
145
|
+
* activity-driven (ceremonies, session setup, `cello_refresh`), so an IDLE daemon never
|
|
146
|
+
* re-measures — and sitting idle is what a daemon does between conversations. A time-driven sweep
|
|
147
|
+
* is precisely what an activity-driven producer lacks.
|
|
148
|
+
*
|
|
149
|
+
* Mirrors `startHttpManifestPoll`'s shape deliberately — same re-arm discipline, same
|
|
150
|
+
* never-throw-out-of-the-tick rule, same stop function.
|
|
151
|
+
*/
|
|
152
|
+
export declare function startRosterSweep(opts: {
|
|
153
|
+
scheduler: RosterSweepScheduler;
|
|
154
|
+
sweep: () => Promise<unknown>;
|
|
155
|
+
logger: RosterSweepLogger;
|
|
156
|
+
/**
|
|
157
|
+
* REVIEW F4 — where a sweep failure becomes visible to the AGENT, not only to the log.
|
|
158
|
+
*
|
|
159
|
+
* Invariant 2 asks for both, and the log alone was measurably not enough here: the freshness
|
|
160
|
+
* bound is five minutes and the sweep runs every 90–180 s, so the first two or three consecutive
|
|
161
|
+
* failures all land while the reading still reports `stale: false`. The operator is handed a
|
|
162
|
+
* frozen reading presented as current — this line's own defect, arriving through the fix's
|
|
163
|
+
* failure path. The bound that prevents flapping is the same window that blinds it.
|
|
164
|
+
*/
|
|
165
|
+
onSweepError?: (e: NonNullable<RosterFreshness["last_sweep_error"]>) => void;
|
|
166
|
+
onSweepSuccess?: () => void;
|
|
167
|
+
now?: () => number;
|
|
168
|
+
}): () => void;
|
|
169
|
+
//# sourceMappingURL=roster-freshness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roster-freshness.d.ts","sourceRoot":"","sources":["../src/roster-freshness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,QAAa,CAAC;AAEhD,8FAA8F;AAC9F,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,GAAE,MAA8B,GAC3C,aAAa,CAkBf;AAED,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oGAAoG;IACpG,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oEAAoE;IACpE,KAAK,EAAE,OAAO,CAAC;IACf;;;;;;OAMG;IACH,WAAW,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,gBAAgB,CAAC;IAC9D,4FAA4F;IAC5F,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACtF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,aAAa,EACtB,IAAI,GAAE;IAAE,kBAAkB,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAA;CAExF,GACA,eAAe,CA2EjB;AAED,yFAAyF;AACzF,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC3D;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpD,MAAM,IAAI,IAAI,CAAC;CAChB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,SAAS,EAAE,oBAAoB,CAAC;IAChC,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,iBAAiB,CAAC;IAC1B;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,KAAK,IAAI,CAAC;IAC7E,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,GAAG,MAAM,IAAI,CAiEb"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-M15-STALEROSTER-1 — a directory-roster reading that refuses to present itself as current.
|
|
3
|
+
*
|
|
4
|
+
* ─── The defect, measured twice on two machines ────────────────────────────────────────────────
|
|
5
|
+
*
|
|
6
|
+
* Both daemons displayed directory node failures from minutes long past while `curl` reached all
|
|
7
|
+
* three nodes in 37–184 ms. The operator debugs an outage that ended before they looked.
|
|
8
|
+
*
|
|
9
|
+
* ─── The cause, CORRECTED after review ─────────────────────────────────────────────────────────
|
|
10
|
+
*
|
|
11
|
+
* This file first said the sweep had ONE caller — the failover path — and therefore ran only while
|
|
12
|
+
* the daemon was unhealthy. **That is false, and a thirty-second grep falsifies it.**
|
|
13
|
+
* `resolveConsortiumRoster` has ten callers: the failover resolver, four session and seal ceremony
|
|
14
|
+
* handlers, the seal auto-ack broker reconnect, `cello_refresh`, `cello_get_submission_results`,
|
|
15
|
+
* three cross-node session-setup paths, and the seal broker.
|
|
16
|
+
*
|
|
17
|
+
* The real shape is **an IDLE daemon never re-measures**. Every one of those callers is
|
|
18
|
+
* activity-driven, so the reading is refreshed by ceremonies and session setup and by nothing else.
|
|
19
|
+
* A daemon that sits still — which is what a daemon does between conversations — keeps the reading
|
|
20
|
+
* it was seeded with at boot, for as long as it stays still. The measured symptom is that startup
|
|
21
|
+
* seeded a failing reading and nothing happened afterwards to overwrite it.
|
|
22
|
+
*
|
|
23
|
+
* The fix is unchanged by the correction: a time-driven sweep is exactly what an activity-driven
|
|
24
|
+
* producer lacks. But the wrong map had a cost — believing there was a single writer is why the
|
|
25
|
+
* concurrent-sweep race below was not considered until review found it.
|
|
26
|
+
*
|
|
27
|
+
* ─── Two halves, because "no reading" and "an old reading" are different lies ───────────────────
|
|
28
|
+
*
|
|
29
|
+
* 1. `startRosterSweep` keeps measuring on a slow timer even when everything is healthy, so the
|
|
30
|
+
* reading cannot freeze.
|
|
31
|
+
* 2. `classifyRosterReading` / `describeRosterFreshness` make the reading state its own age, so a
|
|
32
|
+
* sweep that has stopped (or never started) is visible rather than inferred.
|
|
33
|
+
*
|
|
34
|
+
* The line rules out the tempting third option: *"Do not fix it by hiding the field when stale —
|
|
35
|
+
* absent and healthy must not look alike."* Suppressing a stale block trades a wrong answer for no
|
|
36
|
+
* answer, and no answer renders exactly like health.
|
|
37
|
+
*
|
|
38
|
+
* ─── Why "no reading" is a distinct kind, and the SECOND thing review corrected ─────────────────
|
|
39
|
+
*
|
|
40
|
+
* This file also claimed an EXPIRED manifest reaches the unmeasured state. It does not: a daemon
|
|
41
|
+
* whose manifest fails verification **refuses to start** (`daemon.ts`, ADV-002 — "an operator who
|
|
42
|
+
* configures manifestProvider has opted INTO manifest enforcement"). Not-yet-valid, rollback and
|
|
43
|
+
* load-failure are the same. Shipping that sentence in operator guidance sent the reader hunting a
|
|
44
|
+
* manifest problem, through a log family that has no lines on the only path that can actually get
|
|
45
|
+
* here. Error substitution, in brand-new prose, inside the fix for error substitution.
|
|
46
|
+
*
|
|
47
|
+
* The one reachable route is **no manifest provider at all**, and it is DESIGNED and BENIGN:
|
|
48
|
+
* `manifest-deps.ts` returns `{}` when `CELLO_DIRECTORY_URL` is not byte-equal to a bundled
|
|
49
|
+
* endpoint — local dev, the e2e harness, or an operator who used a DNS hostname for a bundled node.
|
|
50
|
+
* So it gets its own kind and its own calm wording. Treating it as an alarm would fire on every
|
|
51
|
+
* local run and every harness spin-up: a signal on the designed normal case, which this same file
|
|
52
|
+
* forbids two paragraphs down.
|
|
53
|
+
*
|
|
54
|
+
* Both kinds still EMIT — the line rules out hiding the field, because absent and healthy must not
|
|
55
|
+
* look alike. What changes between them is what the operator is told to do about it.
|
|
56
|
+
*/
|
|
57
|
+
/**
|
|
58
|
+
* How old a reading may be before it stops claiming the present tense.
|
|
59
|
+
*
|
|
60
|
+
* Five minutes is chosen against the SWEEP interval, not against operator patience: the sweep is
|
|
61
|
+
* slow by design (it probes every node in the consortium), so the bound has to be comfortably
|
|
62
|
+
* longer than one sweep period or a healthy daemon would flap between fresh and stale between
|
|
63
|
+
* ticks. It is the answer to "could this have changed without us noticing", and at five minutes the
|
|
64
|
+
* answer is still usually no.
|
|
65
|
+
*/
|
|
66
|
+
export const ROSTER_STALE_AFTER_MS = 5 * 60_000;
|
|
67
|
+
/** How often the background sweep re-measures. Comfortably inside `ROSTER_STALE_AFTER_MS`. */
|
|
68
|
+
export const ROSTER_SWEEP_INTERVAL_MS = 90_000;
|
|
69
|
+
/**
|
|
70
|
+
* How old is this reading, and may it still speak in the present tense?
|
|
71
|
+
*
|
|
72
|
+
* Pure and clock-injected: `nowMs` is a parameter so the boundary can be tested exactly rather than
|
|
73
|
+
* approximately, and so a test never has to sleep.
|
|
74
|
+
*/
|
|
75
|
+
export function classifyRosterReading(sweptAt, nowMs, staleAfterMs = ROSTER_STALE_AFTER_MS) {
|
|
76
|
+
// No measurement at all — a different fact from an old measurement, and the only one that can
|
|
77
|
+
// hide an expired manifest. See the header.
|
|
78
|
+
if (sweptAt === null)
|
|
79
|
+
return { kind: "never_measured" };
|
|
80
|
+
const takenMs = Date.parse(sweptAt);
|
|
81
|
+
// An unparseable timestamp is a reading whose age cannot be established. FRESH is the one answer
|
|
82
|
+
// that must never be reachable by accident — it is the claim that costs the operator an
|
|
83
|
+
// investigation — so anything unmeasurable falls to stale.
|
|
84
|
+
if (Number.isNaN(takenMs))
|
|
85
|
+
return { kind: "stale", sweptAt, ageMs: Number.NaN };
|
|
86
|
+
const ageMs = nowMs - takenMs;
|
|
87
|
+
// A reading from the FUTURE is not infinitely fresh. Clock skew, a restored snapshot or an
|
|
88
|
+
// operator moving the system clock would otherwise satisfy the freshness bound forever — the
|
|
89
|
+
// freeze this whole unit exists to end, arriving by a different door.
|
|
90
|
+
if (ageMs < 0)
|
|
91
|
+
return { kind: "stale", sweptAt, ageMs };
|
|
92
|
+
return ageMs > staleAfterMs ? { kind: "stale", sweptAt, ageMs } : { kind: "fresh", sweptAt, ageMs };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Render a reading's age for an operator-facing response.
|
|
96
|
+
*
|
|
97
|
+
* A FRESH reading is deliberately left undecorated. A staleness marker attached to every reading
|
|
98
|
+
* fires on the ordinary case, which is the failure this milestone keeps re-finding: it is not a
|
|
99
|
+
* signal, and it teaches the reader to skip past the one that is real.
|
|
100
|
+
*/
|
|
101
|
+
export function describeRosterFreshness(reading, opts = {
|
|
102
|
+
manifestConfigured: true,
|
|
103
|
+
}) {
|
|
104
|
+
const errorField = opts.lastSweepError ? { last_sweep_error: opts.lastSweepError } : {};
|
|
105
|
+
if (reading.kind === "never_measured") {
|
|
106
|
+
// DESIGNED AND BENIGN — the calm branch. Firing an alarm here would fire it on every local-dev
|
|
107
|
+
// daemon and every e2e-harness spin-up, which is a signal on the normal case.
|
|
108
|
+
if (!opts.manifestConfigured) {
|
|
109
|
+
return {
|
|
110
|
+
checked_at: null,
|
|
111
|
+
age_seconds: null,
|
|
112
|
+
stale: false,
|
|
113
|
+
measurement: "not_configured",
|
|
114
|
+
freshness_guidance: "Directory reachability is NOT MEASURED on this daemon because no consortium manifest is " +
|
|
115
|
+
"configured, so there is no node roster to probe. This is expected in local development " +
|
|
116
|
+
"and in the e2e harness. It also happens against a real directory when " +
|
|
117
|
+
"CELLO_DIRECTORY_URL is not byte-equal to a bundled endpoint — a DNS hostname for a " +
|
|
118
|
+
"bundled node does NOT match, and turns this off along with directory identity " +
|
|
119
|
+
"authentication. Look for daemon.manifest.bundled.skipped in the log; if it is there with " +
|
|
120
|
+
"a non-local URL, this client is weaker than you think it is. The empty node list below " +
|
|
121
|
+
"is the absence of a measurement, not a clean bill of health.",
|
|
122
|
+
...errorField,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
checked_at: null,
|
|
127
|
+
age_seconds: null,
|
|
128
|
+
stale: true,
|
|
129
|
+
measurement: "never",
|
|
130
|
+
freshness_guidance: "A consortium manifest IS configured, but no directory-reachability sweep has completed " +
|
|
131
|
+
"yet, so the absence of failures below is not evidence of health — nothing has finished " +
|
|
132
|
+
"looking. Immediately after startup this is normal and resolves within a couple of minutes. " +
|
|
133
|
+
"If it persists, the background sweep is not completing: look for " +
|
|
134
|
+
"directory.roster.sweep.failed in the log, and see last_sweep_error here if it is present.",
|
|
135
|
+
...errorField,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
if (reading.kind === "fresh") {
|
|
139
|
+
return {
|
|
140
|
+
checked_at: reading.sweptAt,
|
|
141
|
+
age_seconds: Math.floor(reading.ageMs / 1000),
|
|
142
|
+
stale: false,
|
|
143
|
+
measurement: "current",
|
|
144
|
+
...errorField,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
const ageKnown = Number.isFinite(reading.ageMs) && reading.ageMs >= 0;
|
|
148
|
+
return {
|
|
149
|
+
checked_at: reading.sweptAt,
|
|
150
|
+
age_seconds: ageKnown ? Math.floor(reading.ageMs / 1000) : null,
|
|
151
|
+
stale: true,
|
|
152
|
+
measurement: "stale",
|
|
153
|
+
freshness_guidance: (ageKnown
|
|
154
|
+
? `This reading is ${Math.floor(reading.ageMs / 1000)} seconds old. `
|
|
155
|
+
: `This reading's age could not be established (checked_at is ${Number.isNaN(reading.ageMs) ? "unparseable" : "in the future — check the system clock"}). `) +
|
|
156
|
+
"Anything reported below MAY NO LONGER BE TRUE: the nodes listed may already have recovered. " +
|
|
157
|
+
"Do not begin an investigation from it — this has been measured twice, on two machines, where " +
|
|
158
|
+
"a daemon showed node failures from minutes past while all three nodes answered in under " +
|
|
159
|
+
"200 ms. " +
|
|
160
|
+
// REVIEW F12: the first draft said "the background sweep has stopped; look for
|
|
161
|
+
// directory.roster.sweep.failed" — but the likeliest cause by far is a laptop that slept,
|
|
162
|
+
// where the sweep did not FAIL, it did not RUN, and that log line will not be there. Sending
|
|
163
|
+
// the operator to look for a line that cannot exist is the same substitution as F1, smaller.
|
|
164
|
+
"The sweep did not complete on schedule. Two causes: the process was suspended (a laptop " +
|
|
165
|
+
"asleep is the common one, and needs nothing — the next sweep corrects it), or the sweep is " +
|
|
166
|
+
"erroring, in which case last_sweep_error appears above and directory.roster.sweep.failed is " +
|
|
167
|
+
"in the log.",
|
|
168
|
+
...errorField,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Keep measuring directory reachability on a slow timer, whether or not anything is broken.
|
|
173
|
+
*
|
|
174
|
+
* This is the half that actually fixes the freeze: every existing caller of the sweep is
|
|
175
|
+
* activity-driven (ceremonies, session setup, `cello_refresh`), so an IDLE daemon never
|
|
176
|
+
* re-measures — and sitting idle is what a daemon does between conversations. A time-driven sweep
|
|
177
|
+
* is precisely what an activity-driven producer lacks.
|
|
178
|
+
*
|
|
179
|
+
* Mirrors `startHttpManifestPoll`'s shape deliberately — same re-arm discipline, same
|
|
180
|
+
* never-throw-out-of-the-tick rule, same stop function.
|
|
181
|
+
*/
|
|
182
|
+
export function startRosterSweep(opts) {
|
|
183
|
+
const { scheduler, sweep, logger, onSweepError, onSweepSuccess, now = Date.now } = opts;
|
|
184
|
+
let stopped = false;
|
|
185
|
+
let consecutive = 0;
|
|
186
|
+
const tick = async () => {
|
|
187
|
+
if (stopped)
|
|
188
|
+
return;
|
|
189
|
+
try {
|
|
190
|
+
await sweep();
|
|
191
|
+
/**
|
|
192
|
+
* RE-CHECK AFTER THE AWAIT — review F10, partial.
|
|
193
|
+
*
|
|
194
|
+
* A sweep takes up to ~16 s with a node down, so a `stop()` landing mid-sweep is ordinary,
|
|
195
|
+
* not exotic. Without this the completing sweep still fires its callbacks and still logs,
|
|
196
|
+
* against a daemon that has already reported itself stopped — which in-process means writing
|
|
197
|
+
* through a logger whose test has finished, and in production means status side effects after
|
|
198
|
+
* teardown.
|
|
199
|
+
*
|
|
200
|
+
* This does NOT abort the outbound probes: `fetchBootstrapResult` owns a per-request
|
|
201
|
+
* AbortController for its own deadline and takes no external signal, so cancelling them means
|
|
202
|
+
* threading one through `manifestNodesToEndpoints`. Carried as
|
|
203
|
+
* `DOD-M15-SWEEP-ABORT-1` rather than done here — the probes are read-only GETs against
|
|
204
|
+
* `/bootstrap` and the process is exiting; what mattered was not acting on the result.
|
|
205
|
+
*/
|
|
206
|
+
if (stopped)
|
|
207
|
+
return;
|
|
208
|
+
consecutive = 0;
|
|
209
|
+
onSweepSuccess?.();
|
|
210
|
+
}
|
|
211
|
+
catch (err) {
|
|
212
|
+
if (stopped)
|
|
213
|
+
return;
|
|
214
|
+
consecutive++;
|
|
215
|
+
onSweepError?.({
|
|
216
|
+
event: "directory.roster.sweep.failed",
|
|
217
|
+
error: err instanceof Error ? err.message : String(err),
|
|
218
|
+
at: new Date(now()).toISOString(),
|
|
219
|
+
consecutive,
|
|
220
|
+
});
|
|
221
|
+
/**
|
|
222
|
+
* LOUD, and then RE-ARMED. Swallowing this would leave the reading frozen with nothing
|
|
223
|
+
* saying measurement had stopped — the original defect, silently reintroduced. Skipping the
|
|
224
|
+
* re-arm would do the same thing more permanently: one bad probe and the clock stops for the
|
|
225
|
+
* life of the process.
|
|
226
|
+
*
|
|
227
|
+
* The upstream cause is carried into the log rather than replaced with a label, because
|
|
228
|
+
* "the sweep failed" does not tell an operator whether their resolver is down, their network
|
|
229
|
+
* is gone, or a node is refusing them.
|
|
230
|
+
*/
|
|
231
|
+
logger.error("directory.roster.sweep.failed", {
|
|
232
|
+
error: err instanceof Error ? err.message : String(err),
|
|
233
|
+
impact: "directory reachability was not re-measured this cycle, so cello_status is answering " +
|
|
234
|
+
"from an older reading. It will say so: a reading past its bound reports stale:true.",
|
|
235
|
+
guidance: "If this repeats, the roster reading in cello_status cannot be trusted as current — " +
|
|
236
|
+
"check DNS resolution for the directory endpoints from this machine.",
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
// OUTSIDE the try. A re-arm that lives in the success path is how a sweep stops forever.
|
|
240
|
+
if (!stopped)
|
|
241
|
+
scheduler.scheduleNext(tick);
|
|
242
|
+
};
|
|
243
|
+
scheduler.scheduleNext(tick);
|
|
244
|
+
return () => {
|
|
245
|
+
stopped = true;
|
|
246
|
+
scheduler.cancel();
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=roster-freshness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roster-freshness.js","sourceRoot":"","sources":["../src/roster-freshness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAG,MAAM,CAAC;AAEhD,8FAA8F;AAC9F,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAO/C;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAsB,EACtB,KAAa,EACb,eAAuB,qBAAqB;IAE5C,8FAA8F;IAC9F,4CAA4C;IAC5C,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;IAExD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,iGAAiG;IACjG,wFAAwF;IACxF,2DAA2D;IAC3D,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;IAEhF,MAAM,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;IAC9B,2FAA2F;IAC3F,6FAA6F;IAC7F,sEAAsE;IACtE,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAExD,OAAO,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACtG,CAAC;AA+BD;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAsB,EACtB,OAA8F;IAC5F,kBAAkB,EAAE,IAAI;CACzB;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAExF,IAAI,OAAO,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QACtC,+FAA+F;QAC/F,8EAA8E;QAC9E,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,OAAO;gBACL,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,gBAAgB;gBAC7B,kBAAkB,EAChB,0FAA0F;oBAC1F,yFAAyF;oBACzF,wEAAwE;oBACxE,qFAAqF;oBACrF,gFAAgF;oBAChF,2FAA2F;oBAC3F,yFAAyF;oBACzF,8DAA8D;gBAChE,GAAG,UAAU;aACd,CAAC;QACJ,CAAC;QACD,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,OAAO;YACpB,kBAAkB,EAChB,yFAAyF;gBACzF,yFAAyF;gBACzF,6FAA6F;gBAC7F,mEAAmE;gBACnE,2FAA2F;YAC7F,GAAG,UAAU;SACd,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO;YACL,UAAU,EAAE,OAAO,CAAC,OAAO;YAC3B,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YAC7C,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,SAAS;YACtB,GAAG,UAAU;SACd,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;IACtE,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,OAAO;QAC3B,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;QAC/D,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,OAAO;QACpB,kBAAkB,EAChB,CAAC,QAAQ;YACP,CAAC,CAAC,mBAAmB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB;YACrE,CAAC,CAAC,8DACE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,wCAChD,KAAK,CAAC;YACV,8FAA8F;YAC9F,+FAA+F;YAC/F,0FAA0F;YAC1F,UAAU;YACV,+EAA+E;YAC/E,0FAA0F;YAC1F,6FAA6F;YAC7F,6FAA6F;YAC7F,0FAA0F;YAC1F,6FAA6F;YAC7F,8FAA8F;YAC9F,aAAa;QACf,GAAG,UAAU;KACd,CAAC;AACJ,CAAC;AAcD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAgBhC;IACC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IACxF,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;QACrC,IAAI,OAAO;YAAE,OAAO;QACpB,IAAI,CAAC;YACH,MAAM,KAAK,EAAE,CAAC;YACd;;;;;;;;;;;;;;eAcG;YACH,IAAI,OAAO;gBAAE,OAAO;YACpB,WAAW,GAAG,CAAC,CAAC;YAChB,cAAc,EAAE,EAAE,CAAC;QACrB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,OAAO;gBAAE,OAAO;YACpB,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;gBACb,KAAK,EAAE,+BAA+B;gBACtC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBACvD,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE;gBACjC,WAAW;aACZ,CAAC,CAAC;YACH;;;;;;;;;eASG;YACH,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE;gBAC5C,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBACvD,MAAM,EACJ,sFAAsF;oBACtF,qFAAqF;gBACvF,QAAQ,EACN,qFAAqF;oBACrF,qEAAqE;aACxE,CAAC,CAAC;QACL,CAAC;QACD,yFAAyF;QACzF,IAAI,CAAC,OAAO;YAAE,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,GAAG,EAAE;QACV,OAAO,GAAG,IAAI,CAAC;QACf,SAAS,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -33,9 +33,25 @@ export interface SealCertificatePullDeps {
|
|
|
33
33
|
getPersistence: (agentName: string) => DaemonRegistrationPersistence;
|
|
34
34
|
getAgentPubkeyHex: (agentName: string) => string | undefined;
|
|
35
35
|
}
|
|
36
|
-
export type SealCertificatePullResult =
|
|
36
|
+
export type SealCertificatePullResult =
|
|
37
|
+
/**
|
|
38
|
+
* `verified` is REQUIRED, not optional, and that is the point.
|
|
39
|
+
*
|
|
40
|
+
* `verifyBilateralSealCertificate` returns `{ok:true, verified:false}` when this daemon holds no
|
|
41
|
+
* key for the certificate's signer — a legitimate state, and no longer a rare one: clearing a
|
|
42
|
+
* counterparty's pin (the remedy for the identity-refusal lockout) moves every past session with
|
|
43
|
+
* them from *verified* to *taken on their word*.
|
|
44
|
+
*
|
|
45
|
+
* Until now the pull returned `{ok:true, rootHex}` either way, so `cello_sealed_receipt` handed
|
|
46
|
+
* the agent a response byte-for-byte identical to a verified one. An operator could clear a
|
|
47
|
+
* contact, pull an old receipt, and pass it to a third party as proof. It is not proof, and
|
|
48
|
+
* nothing in the response said so. Making the field non-optional means a new caller cannot
|
|
49
|
+
* construct this result without deciding what to tell them.
|
|
50
|
+
*/
|
|
51
|
+
{
|
|
37
52
|
ok: true;
|
|
38
53
|
rootHex: string;
|
|
54
|
+
verified: boolean;
|
|
39
55
|
}
|
|
40
56
|
/**
|
|
41
57
|
* `reason` is never collapsed. Each of these sends the caller somewhere different, and the whole
|