@cello-protocol/daemon 0.0.181 → 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.
Files changed (164) hide show
  1. package/dist/agent-id-migration.d.ts +9 -0
  2. package/dist/agent-id-migration.d.ts.map +1 -1
  3. package/dist/agent-id-migration.js +73 -1
  4. package/dist/agent-id-migration.js.map +1 -1
  5. package/dist/agent-selection.d.ts +73 -0
  6. package/dist/agent-selection.d.ts.map +1 -0
  7. package/dist/agent-selection.js +80 -0
  8. package/dist/agent-selection.js.map +1 -0
  9. package/dist/assignment-verify.d.ts +62 -0
  10. package/dist/assignment-verify.d.ts.map +1 -0
  11. package/dist/assignment-verify.js +185 -0
  12. package/dist/assignment-verify.js.map +1 -0
  13. package/dist/backup-restore.d.ts +102 -0
  14. package/dist/backup-restore.d.ts.map +1 -0
  15. package/dist/backup-restore.js +340 -0
  16. package/dist/backup-restore.js.map +1 -0
  17. package/dist/bin/cello-daemon.js +91 -49
  18. package/dist/bin/cello-daemon.js.map +1 -1
  19. package/dist/close-commitment.d.ts +67 -0
  20. package/dist/close-commitment.d.ts.map +1 -0
  21. package/dist/close-commitment.js +78 -0
  22. package/dist/close-commitment.js.map +1 -0
  23. package/dist/close-session-handler.d.ts +20 -0
  24. package/dist/close-session-handler.d.ts.map +1 -1
  25. package/dist/close-session-handler.js +351 -58
  26. package/dist/close-session-handler.js.map +1 -1
  27. package/dist/consortium-bootstrap.d.ts +2 -0
  28. package/dist/consortium-bootstrap.d.ts.map +1 -1
  29. package/dist/consortium-bootstrap.js +65 -7
  30. package/dist/consortium-bootstrap.js.map +1 -1
  31. package/dist/content-park.d.ts.map +1 -1
  32. package/dist/content-park.js +141 -10
  33. package/dist/content-park.js.map +1 -1
  34. package/dist/daemon.d.ts +13 -1
  35. package/dist/daemon.d.ts.map +1 -1
  36. package/dist/daemon.js +866 -122
  37. package/dist/daemon.js.map +1 -1
  38. package/dist/delivery-session-suspects.d.ts.map +1 -1
  39. package/dist/delivery-session-suspects.js +5 -0
  40. package/dist/delivery-session-suspects.js.map +1 -1
  41. package/dist/directory-auth-posture.d.ts +87 -0
  42. package/dist/directory-auth-posture.d.ts.map +1 -0
  43. package/dist/directory-auth-posture.js +134 -0
  44. package/dist/directory-auth-posture.js.map +1 -0
  45. package/dist/directory-bootstrap.d.ts +66 -3
  46. package/dist/directory-bootstrap.d.ts.map +1 -1
  47. package/dist/directory-bootstrap.js +133 -7
  48. package/dist/directory-bootstrap.js.map +1 -1
  49. package/dist/document-delivery-transport.d.ts +22 -2
  50. package/dist/document-delivery-transport.d.ts.map +1 -1
  51. package/dist/document-delivery-transport.js +11 -3
  52. package/dist/document-delivery-transport.js.map +1 -1
  53. package/dist/inbound-sessions.d.ts +31 -1
  54. package/dist/inbound-sessions.d.ts.map +1 -1
  55. package/dist/inbound-sessions.js +276 -16
  56. package/dist/inbound-sessions.js.map +1 -1
  57. package/dist/index.d.ts +2 -0
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +3 -0
  60. package/dist/index.js.map +1 -1
  61. package/dist/ipc-server.d.ts +5 -1
  62. package/dist/ipc-server.d.ts.map +1 -1
  63. package/dist/ipc-server.js +19 -3
  64. package/dist/ipc-server.js.map +1 -1
  65. package/dist/manifest-validity.d.ts +151 -0
  66. package/dist/manifest-validity.d.ts.map +1 -0
  67. package/dist/manifest-validity.js +268 -0
  68. package/dist/manifest-validity.js.map +1 -0
  69. package/dist/notification-handlers.d.ts.map +1 -1
  70. package/dist/notification-handlers.js +15 -0
  71. package/dist/notification-handlers.js.map +1 -1
  72. package/dist/outbound-sessions.d.ts +31 -0
  73. package/dist/outbound-sessions.d.ts.map +1 -1
  74. package/dist/outbound-sessions.js +198 -17
  75. package/dist/outbound-sessions.js.map +1 -1
  76. package/dist/park-envelope.d.ts +72 -1
  77. package/dist/park-envelope.d.ts.map +1 -1
  78. package/dist/park-envelope.js +119 -4
  79. package/dist/park-envelope.js.map +1 -1
  80. package/dist/refusal-reasons.d.ts +72 -0
  81. package/dist/refusal-reasons.d.ts.map +1 -0
  82. package/dist/refusal-reasons.js +69 -0
  83. package/dist/refusal-reasons.js.map +1 -0
  84. package/dist/registration-manager.d.ts.map +1 -1
  85. package/dist/registration-manager.js +20 -1
  86. package/dist/registration-manager.js.map +1 -1
  87. package/dist/restart-seal-resolver.d.ts.map +1 -1
  88. package/dist/restart-seal-resolver.js +6 -0
  89. package/dist/restart-seal-resolver.js.map +1 -1
  90. package/dist/retry-queue.d.ts +23 -1
  91. package/dist/retry-queue.d.ts.map +1 -1
  92. package/dist/retry-queue.js +37 -9
  93. package/dist/retry-queue.js.map +1 -1
  94. package/dist/roster-freshness.d.ts +169 -0
  95. package/dist/roster-freshness.d.ts.map +1 -0
  96. package/dist/roster-freshness.js +249 -0
  97. package/dist/roster-freshness.js.map +1 -0
  98. package/dist/seal-certificate-pull.d.ts +17 -1
  99. package/dist/seal-certificate-pull.d.ts.map +1 -1
  100. package/dist/seal-certificate-pull.js +37 -3
  101. package/dist/seal-certificate-pull.js.map +1 -1
  102. package/dist/seal-coordinator.d.ts +17 -1
  103. package/dist/seal-coordinator.d.ts.map +1 -1
  104. package/dist/seal-coordinator.js +71 -0
  105. package/dist/seal-coordinator.js.map +1 -1
  106. package/dist/seal-failure-store.d.ts +104 -0
  107. package/dist/seal-failure-store.d.ts.map +1 -0
  108. package/dist/seal-failure-store.js +126 -0
  109. package/dist/seal-failure-store.js.map +1 -0
  110. package/dist/seal-flows.d.ts.map +1 -1
  111. package/dist/seal-flows.js +35 -6
  112. package/dist/seal-flows.js.map +1 -1
  113. package/dist/seal-upgrade.d.ts +20 -5
  114. package/dist/seal-upgrade.d.ts.map +1 -1
  115. package/dist/seal-upgrade.js +28 -5
  116. package/dist/seal-upgrade.js.map +1 -1
  117. package/dist/session-assignment-parser.d.ts +41 -5
  118. package/dist/session-assignment-parser.d.ts.map +1 -1
  119. package/dist/session-assignment-parser.js +77 -14
  120. package/dist/session-assignment-parser.js.map +1 -1
  121. package/dist/session-ceremony.d.ts +29 -0
  122. package/dist/session-ceremony.d.ts.map +1 -1
  123. package/dist/session-ceremony.js +71 -0
  124. package/dist/session-ceremony.js.map +1 -1
  125. package/dist/session-connection-gater.d.ts +46 -7
  126. package/dist/session-connection-gater.d.ts.map +1 -1
  127. package/dist/session-connection-gater.js +163 -12
  128. package/dist/session-connection-gater.js.map +1 -1
  129. package/dist/session-content-handlers.d.ts.map +1 -1
  130. package/dist/session-content-handlers.js +110 -4
  131. package/dist/session-content-handlers.js.map +1 -1
  132. package/dist/session-node-manager.d.ts +406 -36
  133. package/dist/session-node-manager.d.ts.map +1 -1
  134. package/dist/session-node-manager.js +3025 -245
  135. package/dist/session-node-manager.js.map +1 -1
  136. package/dist/session-read-handlers.d.ts +27 -0
  137. package/dist/session-read-handlers.d.ts.map +1 -1
  138. package/dist/session-read-handlers.js +112 -6
  139. package/dist/session-read-handlers.js.map +1 -1
  140. package/dist/session-relay-client.d.ts +61 -2
  141. package/dist/session-relay-client.d.ts.map +1 -1
  142. package/dist/session-relay-client.js +170 -11
  143. package/dist/session-relay-client.js.map +1 -1
  144. package/dist/session-salt-agreement.d.ts +284 -0
  145. package/dist/session-salt-agreement.d.ts.map +1 -0
  146. package/dist/session-salt-agreement.js +371 -0
  147. package/dist/session-salt-agreement.js.map +1 -0
  148. package/dist/signal-submission.d.ts.map +1 -1
  149. package/dist/signal-submission.js +10 -1
  150. package/dist/signal-submission.js.map +1 -1
  151. package/dist/signaling-connect.d.ts.map +1 -1
  152. package/dist/signaling-connect.js +42 -5
  153. package/dist/signaling-connect.js.map +1 -1
  154. package/dist/types.d.ts +54 -0
  155. package/dist/types.d.ts.map +1 -1
  156. package/dist/types.js.map +1 -1
  157. package/dist/vocabulary.d.ts.map +1 -1
  158. package/dist/vocabulary.js +10 -0
  159. package/dist/vocabulary.js.map +1 -1
  160. package/dist/wire-content-hash.d.ts +56 -0
  161. package/dist/wire-content-hash.d.ts.map +1 -1
  162. package/dist/wire-content-hash.js +71 -0
  163. package/dist/wire-content-hash.js.map +1 -1
  164. package/package.json +5 -5
@@ -0,0 +1,268 @@
1
+ /**
2
+ * DOD-M15-MANIFEST-EXPIRY-LIVE-1 — a running daemon notices its own trust anchor expiring.
3
+ *
4
+ * ─── The gap ───────────────────────────────────────────────────────────────────────────────────
5
+ *
6
+ The consortium manifest's validity window is enforced at boot (`verifyStartupManifest`) and, after
7
+ * that, in exactly ONE consumer: `signal-submission.ts` re-checks the HELD manifest at request time
8
+ * and refuses. Nothing else does — not directory identity authentication, not the ceremony roster.
9
+ *
10
+ * (An earlier version of this header said nothing re-checked the held manifest at all. That was
11
+ * wrong — the third false claim I have shipped in three units — and the correction matters, because
12
+ * the real shape is not "unchecked" but INCONSISTENT: the daemon refuses the lowest-stakes consumer
13
+ * and permits the two highest-stakes ones, invisibly. See the decision note below.)
14
+ *
15
+ * There is also a check that reads like coverage and is not: `http-manifest-poll.ts` refuses to
16
+ * ADOPT an expired manifest. That checks the manifest being FETCHED, never the one already held — so
17
+ * a daemon whose anchor has lapsed keeps polling, keeps correctly refusing expired replacements, and
18
+ * keeps using the expired anchor it already has.
19
+ *
20
+ * On the PRODUCTION DEFAULT it is worse: the bundled-manifest path wires no poll scheduler at all
21
+ * ("the bundled roster is static"), so there is not even a fetch that might have noticed.
22
+ *
23
+ * ─── Why it matters, concretely ────────────────────────────────────────────────────────────────
24
+ *
25
+ The manifest is the trust anchor for directory identity authentication (step 6) and for the node
26
+ * roster a threshold ceremony draws from — both re-read `getCurrentManifest()` at request time, so
27
+ * both genuinely run on whatever is held.
28
+ *
29
+ * What expiry means precisely (review F10, correcting my own overstatement): it is the NOTICE that
30
+ * the anchor may be out of date, not the mechanism by which it becomes so. The daemon trusts the
31
+ * identical roster the day BEFORE expiry; what keeps a removed node trusted is never having adopted
32
+ * v+1. So the accurate statement is that past expiry there is NO ASSURANCE the enforced roster is
33
+ * current — a node removed since then would still be trusted, and nothing here can say whether one
34
+ * was.
35
+ *
36
+ * ─── Found the wrong way round ─────────────────────────────────────────────────────────────────
37
+ *
38
+ * `DOD-M15-STALEROSTER-1` shipped a guidance string blaming an expired manifest for a state an
39
+ * expired manifest cannot reach (that daemon refuses to start). Review corrected it and pointed at
40
+ * where the hazard actually lives — here. After that unit, a daemon in this state reports its roster
41
+ * reading as `stale: false`: a confidently fresh measurement taken against a dead anchor, which is
42
+ * worse than the stale reading that line existed to fix.
43
+ *
44
+ * ─── Decision: report, do not kill ─────────────────────────────────────────────────────────────
45
+ *
46
+ A daemon does NOT tear itself down at the expiry instant. §2b invariant 2 backs this explicitly —
47
+ * *"Loud does not mean blocking… treating every failure as fatal is its own defect."*
48
+ *
49
+ * But review corrected the FRAMING, and the correction is worth keeping: the availability argument I
50
+ * originally made does not survive. The fleet-wide stop I claimed to be avoiding happens anyway, at
51
+ * each operator's next restart, via ADV-002 — report-only DEFERS that outage, it does not prevent
52
+ * it. The honest reason to warn rather than kill is that a wall-clock boundary is a bad trigger for
53
+ * tearing down live conversations, not that it avoids the outage.
54
+ *
55
+ * The real question was never global report-vs-kill; it is PER CONSUMER, and the repo has already
56
+ * ruled on one of them inconsistently. `signal-submission.ts` refuses a trust-signal submission on
57
+ * expiry, while `register-handler.ts` deals a FROST share against a roster re-resolved from the same
58
+ * lapsed manifest with no gate, and the challenge verifier authenticates a directory against it with
59
+ * no gate. **The daemon refuses its lowest-stakes consumer and permits its two highest-stakes ones.**
60
+ * That is not defended anywhere; it is carried as `DOD-M15-EXPIRY-CONSUMER-POLICY-1` rather than
61
+ * settled inside a reporting unit.
62
+ */
63
+ /**
64
+ * How long before expiry the warning starts.
65
+ *
66
+ * Warning at the expiry instant is useless — the operator finds out once they are already running
67
+ * on a dead anchor. Seven days is chosen to cover a weekend plus the working days either side, which
68
+ * is the realistic floor for noticing an alert and rotating a threshold-signed artefact.
69
+ */
70
+ export const MANIFEST_EXPIRY_WARNING_MS = 7 * 86_400_000;
71
+ /**
72
+ * Where does this manifest sit in its validity window, as of `nowMs`?
73
+ *
74
+ * Clock injected so the boundaries are tested exactly rather than approximately.
75
+ */
76
+ export function classifyManifestValidity(manifest, nowMs) {
77
+ if (!manifest)
78
+ return { state: "not_configured" };
79
+ const expiresMs = Date.parse(manifest.expires);
80
+ /**
81
+ * AN UNREADABLE EXPIRY IS EXPIRED.
82
+ *
83
+ * `new Date("nonsense") <= now` is FALSE — every comparison against NaN is false — so the
84
+ * startup check's own shape waves a garbage timestamp through as though it were in-window. Valid
85
+ * is the answer that costs security here, so nothing unmeasurable may reach it.
86
+ */
87
+ if (Number.isNaN(expiresMs))
88
+ return { state: "expired", expires: manifest.expires, secondsSince: 0 };
89
+ /**
90
+ * AN UNREADABLE `not_before` FAILS CLOSED TOO — review F3, and it was my own defect sitting
91
+ * directly under the comment above claiming it could not happen.
92
+ *
93
+ * The first cut wrote `if (!Number.isNaN(notBeforeMs) && nowMs < notBeforeMs)`, which SKIPS the
94
+ * window-open check entirely when the field is garbage and falls through to a possible `valid`.
95
+ * So `not_before: "2026-13-01T00:00:00Z"` — month thirteen, the shape a hand-edited or
96
+ * generator-bugged artefact actually has — classified as valid, contributed nothing to the status
97
+ * surface, and logged nothing. I handled the same case correctly for `expires` eleven lines up and
98
+ * then wrote the inverted guard for `not_before`, under a comment asserting the property.
99
+ *
100
+ * `signal-submission.ts` already had this right (`!Number.isFinite(expiresAt) || expiresAt <= now`)
101
+ * and is the precedent.
102
+ */
103
+ const notBeforeMs = Date.parse(manifest.not_before);
104
+ if (Number.isNaN(notBeforeMs)) {
105
+ return { state: "unreadable_window", notBefore: manifest.not_before };
106
+ }
107
+ if (nowMs < notBeforeMs) {
108
+ return { state: "not_yet_valid", notBefore: manifest.not_before };
109
+ }
110
+ if (expiresMs <= nowMs) {
111
+ return { state: "expired", expires: manifest.expires, secondsSince: Math.floor((nowMs - expiresMs) / 1000) };
112
+ }
113
+ const remainingMs = expiresMs - nowMs;
114
+ const secondsRemaining = Math.floor(remainingMs / 1000);
115
+ // The constant directly, not an injectable parameter — review F9. A `warningMs` argument had no
116
+ // caller anywhere, and it was the ONE seam by which the two surfaces could ever disagree: the
117
+ // status path could not pass a custom window while the watch could. An unused knob whose only
118
+ // possible effect is drift between two readings of the same fact.
119
+ return remainingMs <= MANIFEST_EXPIRY_WARNING_MS
120
+ ? { state: "expiring_soon", expires: manifest.expires, secondsRemaining }
121
+ : { state: "valid", expires: manifest.expires, secondsRemaining };
122
+ }
123
+ /** What to actually DO about a manifest that needs replacing, given where it came from. */
124
+ function remedyFor(origin) {
125
+ return origin === "bundled"
126
+ ? "This daemon uses the COMPILED-IN consortium manifest, so there is no file to replace: " +
127
+ "upgrade the @cello-protocol/connect package to get a newer one. Do NOT repoint " +
128
+ "CELLO_DIRECTORY_URL to get past this — an endpoint that is not byte-equal to a bundled one " +
129
+ "makes the daemon start with directory identity authentication switched off, which is a " +
130
+ "weaker client than the one you are trying to fix."
131
+ : "Replace the manifest file at CELLO_CONSORTIUM_MANIFEST with a current one.";
132
+ }
133
+ export function describeManifestValidity(v, origin = "file") {
134
+ /**
135
+ * `valid` contributes nothing — correct, and the rule this milestone repeats most.
136
+ *
137
+ * `not_configured` USED TO collapse into that silence, and it was the same defect one spread
138
+ * above: a daemon holding NO consortium manifest at all rendered byte-identically to one holding
139
+ * a fully valid, in-window trust anchor. Found by `DOD-M15-DIRAUTH-1`'s review, which noticed it
140
+ * is the exact condition that unit was writing 100+ lines to expose — same daemon, same boot.
141
+ *
142
+ * "Absent" and "healthy" must not look alike. That is `STALEROSTER-1`'s rule and it applies to the
143
+ * anchor as much as to the roster reading.
144
+ */
145
+ if (v.state === "valid")
146
+ return undefined;
147
+ if (v.state === "not_configured") {
148
+ return {
149
+ manifest_anchor: "none",
150
+ manifest_validity_guidance: "There is NO consortium manifest on this daemon, so there is no trust anchor to have a " +
151
+ "validity window at all — the absence of an expiry warning here is not evidence of a healthy " +
152
+ "one. Directory identity authentication is off for the same reason; see " +
153
+ "directory_authentication for what that costs and how to turn it on.",
154
+ };
155
+ }
156
+ if (v.state === "unreadable_window") {
157
+ return {
158
+ manifest_expired: false,
159
+ manifest_window_unreadable: true,
160
+ manifest_valid_from: v.notBefore,
161
+ manifest_validity_guidance: `The consortium manifest's not_before field cannot be parsed as a date (got ` +
162
+ `${JSON.stringify(v.notBefore)}), so this daemon cannot tell whether its trust anchor's ` +
163
+ "validity window has even opened. This is a MALFORMED manifest rather than a stale one — " +
164
+ "the usual causes are a hand-edited file or a broken generator. " + remedyFor(origin),
165
+ };
166
+ }
167
+ if (v.state === "not_yet_valid") {
168
+ return {
169
+ manifest_expired: false,
170
+ manifest_not_yet_valid: true,
171
+ manifest_valid_from: v.notBefore,
172
+ manifest_validity_guidance: `The consortium manifest does not become valid until ${v.notBefore}, and this daemon is ` +
173
+ "still running against it. Either this machine's clock is wrong — the common cause, and the " +
174
+ "one to check first — or a manifest was rotated in ahead of its window. " + remedyFor(origin),
175
+ };
176
+ }
177
+ if (v.state === "expiring_soon") {
178
+ const days = Math.floor(v.secondsRemaining / 86_400);
179
+ return {
180
+ manifest_expired: false,
181
+ manifest_expires_at: v.expires,
182
+ manifest_expires_in_days: days,
183
+ manifest_validity_guidance: `The consortium manifest expires in ${days} day(s), at ${v.expires}. Rotate it before then. ` +
184
+ "After expiry this daemon KEEPS RUNNING on the old manifest — it does not fail closed the " +
185
+ "way startup does — so nothing will stop working at the deadline and nothing will announce " +
186
+ "it except this field and one log line. A daemon RESTARTED after expiry will refuse to " +
187
+ "start, which is how this usually gets discovered, at the worst moment. " + remedyFor(origin),
188
+ };
189
+ }
190
+ const days = Math.floor(v.secondsSince / 86_400);
191
+ return {
192
+ manifest_expired: true,
193
+ manifest_expires_at: v.expires,
194
+ manifest_expired_days_ago: days,
195
+ manifest_validity_guidance: `The consortium manifest EXPIRED at ${v.expires} (${days} day(s) ago) and this daemon is ` +
196
+ "still running on it. Its signatures no longer warrant the current consortium, so directory " +
197
+ "identity authentication and the threshold-ceremony roster are both being drawn from an " +
198
+ "anchor that has lapsed, so this daemon has NO ASSURANCE that the roster it enforces is the " +
199
+ "current one. A node removed from the consortium since then would still be trusted here, and " +
200
+ "nothing in this daemon can tell you whether one was. " + remedyFor(origin) + " Do NOT simply " +
201
+ "restart to clear this — a restart will REFUSE to start (startup fails closed on an expired " +
202
+ "manifest), so restarting without a fresh manifest turns a degraded daemon into a dead one.",
203
+ };
204
+ }
205
+ /**
206
+ * A check to call periodically, which logs each TRANSITION once.
207
+ *
208
+ * Returns a function rather than owning a timer: the roster sweep already ticks every 90–180 s on
209
+ * exactly the path where a manifest provider exists, so this rides it. A second timer measuring the
210
+ * same subsystem would be two things to stop, two things to test, and two places for the interval
211
+ * to drift out of agreement with the freshness bound.
212
+ *
213
+ * The latch is keyed on the STATE PLUS the expiry string, so rotating the manifest re-arms it. A
214
+ * bare boolean would mean an operator who rotated once could never be warned again — the warning
215
+ * would have been spent on a manifest that is no longer installed.
216
+ */
217
+ export function startManifestValidityWatch(opts) {
218
+ const { getManifest, logger, now = Date.now } = opts;
219
+ let lastReported = null;
220
+ return () => {
221
+ const v = classifyManifestValidity(getManifest(), now());
222
+ const key = v.state === "not_configured" ? "not_configured"
223
+ : v.state === "not_yet_valid" || v.state === "unreadable_window" ? `${v.state}:${v.notBefore}`
224
+ : `${v.state}:${v.expires}`;
225
+ if (key === lastReported)
226
+ return v;
227
+ lastReported = key;
228
+ if (v.state === "expired") {
229
+ logger.error("directory.auth.manifest.expired.live", {
230
+ expiresAt: v.expires,
231
+ expiredDaysAgo: Math.floor(v.secondsSince / 86_400),
232
+ impact: "the daemon is STILL RUNNING on this manifest. Directory identity authentication and the " +
233
+ "threshold-ceremony roster are drawn from it at request time, so there is NO ASSURANCE " +
234
+ "the enforced roster is the current one — a node removed since then would still be " +
235
+ "trusted, and nothing here can say whether one was.",
236
+ guidance: "Replace the manifest (a file at CELLO_CONSORTIUM_MANIFEST, or an @cello-protocol/connect " +
237
+ "upgrade if this daemon uses the compiled-in one). Do not restart to clear it: startup " +
238
+ "fails closed on an expired manifest, so a restart without a fresh one turns a degraded " +
239
+ "daemon into a dead one.",
240
+ });
241
+ }
242
+ else if (v.state === "expiring_soon") {
243
+ logger.warn("directory.auth.manifest.expiring", {
244
+ expiresAt: v.expires,
245
+ daysRemaining: Math.floor(v.secondsRemaining / 86_400),
246
+ impact: "after this date the daemon keeps running on the expired manifest rather than failing closed.",
247
+ guidance: "Rotate before the date. A daemon RESTARTED after it will refuse to start.",
248
+ });
249
+ }
250
+ else if (v.state === "unreadable_window") {
251
+ logger.error("directory.auth.manifest.window.unreadable", {
252
+ notBefore: v.notBefore,
253
+ impact: "the manifest's not_before field does not parse as a date, so this daemon cannot tell " +
254
+ "whether its trust anchor's validity window has opened. It is running against it anyway.",
255
+ guidance: "The manifest is MALFORMED, not stale — a hand-edited file or a broken generator. Replace it.",
256
+ });
257
+ }
258
+ else if (v.state === "not_yet_valid") {
259
+ logger.error("directory.auth.manifest.not.yet.valid.live", {
260
+ notBefore: v.notBefore,
261
+ impact: "the daemon is running against a manifest whose validity window has not opened.",
262
+ guidance: "Check this machine's clock first — that is the common cause.",
263
+ });
264
+ }
265
+ return v;
266
+ };
267
+ }
268
+ //# sourceMappingURL=manifest-validity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-validity.js","sourceRoot":"","sources":["../src/manifest-validity.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"notification-handlers.d.ts","sourceRoot":"","sources":["../src/notification-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE/G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,CAAC;IAC9D,mBAAmB,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjG,YAAY,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,0GAA0G;IAC1G,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACjC,0BAA0B,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACzD,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC7D,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC7D;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChH,mGAAmG;IACnG,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACpD;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAkOhF"}
1
+ {"version":3,"file":"notification-handlers.d.ts","sourceRoot":"","sources":["../src/notification-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE/G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,CAAC;IAC9D,mBAAmB,EAAE,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjG,YAAY,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,0GAA0G;IAC1G,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACjC,0BAA0B,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACzD,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC7D,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC7D;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChH,mGAAmG;IACnG,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACpD;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAiPhF"}
@@ -1,3 +1,4 @@
1
+ import { REFUSAL_GUIDANCE } from "./refusal-reasons.js";
1
2
  import { resolveNamedAgent } from "./resolve-named-agent.js";
2
3
  export function registerNotificationHandlers(deps) {
3
4
  const { handlers, logger, sessionNodeManager, getConnState, resolveCurrentAgent, loadedAgents, agents: allAgents, reapExpiredInboundSessions, inboundSessionQueues, expiredSessionRequests, refusedSessionRequests, documentNotices, ownerKeyFor, } = deps;
@@ -113,11 +114,25 @@ export function registerNotificationHandlers(deps) {
113
114
  // M12-P18: sessions THIS agent turned away (cap/abuse bound). Local-only visibility so a cap
114
115
  // firing does not require reading the daemon log to discover — the failure mode that hid a
115
116
  // stranded 297-times-re-pulled message.
117
+ /**
118
+ * A refusal an agent can ACT on, not a code it has to look up.
119
+ *
120
+ * Most entries here are ordinary capacity or abuse bounds and speak for themselves. Two are
121
+ * SECURITY refusals from the inbound assignment path, and a bare reason string is the wrong
122
+ * surface for those — the operator needs to know that something was refused ON PURPOSE, what
123
+ * it means, and that for one of them the next step happens OUTSIDE this system.
124
+ */
125
+ const guidanceFor = (reason) => REFUSAL_GUIDANCE[reason];
126
+ // Shared with the site that RECORDS the refusal (review N8) — a duplicated literal here
127
+ // meant a rename on either side silently dropped the guidance and left a bare reason code.
116
128
  const refused = (refusedSessionRequests.get(agent) ?? []).map((e) => ({
117
129
  session_id: e.sessionIdHex,
118
130
  from: e.counterpartyPubkeyHex,
119
131
  reason: e.reason,
120
132
  refused_at: e.refusedAt,
133
+ // `e.reason` is a free-form string on the record (capacity and abuse bounds use their own
134
+ // codes and speak for themselves); only the security reasons carry guidance.
135
+ ...(guidanceFor(e.reason) !== undefined ? { guidance: guidanceFor(e.reason) } : {}),
121
136
  }));
122
137
  const unread = sessionNodeManager.getUnreadSummary(agent);
123
138
  const ended_unread = sessionNodeManager.getEndedUnread(agent);
@@ -1 +1 @@
1
- {"version":3,"file":"notification-handlers.js","sourceRoot":"","sources":["../src/notification-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notification-handlers.js","sourceRoot":"","sources":["../src/notification-handlers.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,25 @@ export interface OutboundSessionDeps {
32
32
  waitForSignalingConnected: (mgr: SignalingManager, timeoutMs: number) => Promise<boolean>;
33
33
  getFailoverEndpoint: () => Promise<DirectoryEndpoint | null>;
34
34
  resolveConsortiumRoster: () => Promise<ConsortiumEndpoint[] | null>;
35
+ /**
36
+ * DOD-M15-ERRSTRING-1 — the nodes whose bootstrap probe failed in the last sweep.
37
+ *
38
+ * Needed here because a SHORT ROSTER is the cause the DoD line asks these errors to name ("a
39
+ * roster below threshold says so"), and the negotiator otherwise sees only the reachable subset —
40
+ * it cannot tell three-of-three from three-of-five. Reachable + unresolved is the declared count,
41
+ * and majority(declared) is the threshold a ceremony needs.
42
+ */
43
+ getUnresolvedNodes?: () => ReadonlyArray<{
44
+ nodeId: string;
45
+ reason: string;
46
+ }>;
47
+ /**
48
+ * How many nodes the VERIFIED MANIFEST declares. Review MEDIUM-2: deriving this as
49
+ * `reachable + unresolved` undercounts, because a node dropped for an invalid endpoint or a
50
+ * peer-id mismatch appears in neither term — and the note would then affirm that ceremonies can
51
+ * complete when the true threshold is unmet.
52
+ */
53
+ getDeclaredNodeCount?: () => number | null;
35
54
  /** The WHOLE seal listener bundle — a visiting stream needs every one of them. */
36
55
  registerSealListeners: (signaling: SignalingManager, agentName: string, agentPubkeyHex: string) => () => void;
37
56
  sessionNegotiator?: SessionNegotiator;
@@ -44,6 +63,18 @@ export interface OutboundSessionDeps {
44
63
  pubkey: string;
45
64
  }>;
46
65
  }
66
+ /**
67
+ * How long a session initiation waits for signaling before giving up.
68
+ *
69
+ * EXPORTED because it is a CONSTRAINT ON SOMETHING ELSE, not just a local number: every probe
70
+ * budget on the reconnect path has to fit inside it. `DOD-M15-BOOTSTRAP-1` learned that the hard
71
+ * way — a retry budget chosen in isolation pushed the resolver past this wait and would have made
72
+ * `cello_initiate_session` fail on exactly the lossy links the retry was added to help.
73
+ *
74
+ * `dod-m15-bootstrap-1.test.ts` asserts the budgets against this value, so changing it here breaks
75
+ * that test rather than silently breaking the behaviour.
76
+ */
77
+ export declare const SIGNALING_CONNECT_WAIT_MS = 10000;
47
78
  export declare function createOutboundSessions(deps: OutboundSessionDeps): {
48
79
  openVisitingConnection: (agentName: string, agentKeyProvider: import("@cello-protocol/crypto").KeyProvider, agentPubkeyHex: string, endpoint: DirectoryEndpoint, correlationId: string, nodeId: string) => {
49
80
  mgr: SignalingManager;
@@ -1 +1 @@
1
- {"version":3,"file":"outbound-sessions.d.ts","sourceRoot":"","sources":["../src/outbound-sessions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAA4B,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAI1F,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAM7E,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;IAC/D,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,yBAAyB,CAAC;IACjE,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,KAAK;QAAE,SAAS,EAAE,gBAAgB,CAAC;QAAC,OAAO,EAAE,MAAM,SAAS,GAAG,IAAI,CAAA;KAAE,CAAC;IACxJ,yBAAyB,EAAE,CAAC,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1F,mBAAmB,EAAE,MAAM,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAC7D,uBAAuB,EAAE,MAAM,OAAO,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,CAAC;IACpE,kFAAkF;IAClF,qBAAqB,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,MAAM,IAAI,CAAC;IAC9G,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,2BAA2B,CAAC;IAChD,kBAAkB,EAAE,MAAM,MAAM,CAAC;IACjC,0DAA0D;IAC1D,YAAY,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB;wCA2VjD,MAAM,oBACC,OAAO,wBAAwB,EAAE,WAAW,kBAC9C,MAAM,YACZ,iBAAiB,iBACZ,MAAM,UACb,MAAM,KACb;QAAE,GAAG,EAAE,gBAAgB,CAAC;QAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE;;;oCAtTxD,gBAAgB,aAChB,MAAM,aACN,MAAM,iBACF,MAAM,KACpB,OAAO,CAAC,gBAAgB,CAAC;EA+lB7B"}
1
+ {"version":3,"file":"outbound-sessions.d.ts","sourceRoot":"","sources":["../src/outbound-sessions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAA4B,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAK1F,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAM7E,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;IAC/D,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,yBAAyB,CAAC;IACjE,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,KAAK;QAAE,SAAS,EAAE,gBAAgB,CAAC;QAAC,OAAO,EAAE,MAAM,SAAS,GAAG,IAAI,CAAA;KAAE,CAAC;IACxJ,yBAAyB,EAAE,CAAC,GAAG,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1F,mBAAmB,EAAE,MAAM,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAC7D,uBAAuB,EAAE,MAAM,OAAO,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,CAAC;IACpE;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,MAAM,aAAa,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC3C,kFAAkF;IAClF,qBAAqB,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,MAAM,IAAI,CAAC;IAC9G,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,2BAA2B,CAAC;IAChD,kBAAkB,EAAE,MAAM,MAAM,CAAC;IACjC,0DAA0D;IAC1D,YAAY,EAAE,aAAa,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,mBAAmB;wCA4ZjD,MAAM,oBACC,OAAO,wBAAwB,EAAE,WAAW,kBAC9C,MAAM,YACZ,iBAAiB,iBACZ,MAAM,UACb,MAAM,KACb;QAAE,GAAG,EAAE,gBAAgB,CAAC;QAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE;;;oCA5UxD,gBAAgB,aAChB,MAAM,aACN,MAAM,iBACF,MAAM,KACpB,OAAO,CAAC,gBAAgB,CAAC;EAmuB7B"}