@cotal-ai/core 0.48.2 → 0.50.0

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 (125) hide show
  1. package/dist/agent-file.d.ts +34 -0
  2. package/dist/agent-file.d.ts.map +1 -1
  3. package/dist/agent-file.js +94 -2
  4. package/dist/agent-file.js.map +1 -1
  5. package/dist/auth-provider.d.ts +25 -1
  6. package/dist/auth-provider.d.ts.map +1 -1
  7. package/dist/auth-provider.js.map +1 -1
  8. package/dist/connector.d.ts +4 -0
  9. package/dist/connector.d.ts.map +1 -1
  10. package/dist/connector.js.map +1 -1
  11. package/dist/endpoint-action.d.ts +1 -0
  12. package/dist/endpoint-action.d.ts.map +1 -1
  13. package/dist/endpoint-action.js +1 -1
  14. package/dist/endpoint-action.js.map +1 -1
  15. package/dist/endpoint-binding.d.ts +6 -0
  16. package/dist/endpoint-binding.d.ts.map +1 -1
  17. package/dist/endpoint-binding.js +17 -0
  18. package/dist/endpoint-binding.js.map +1 -1
  19. package/dist/endpoint-envelope.d.ts +1 -1
  20. package/dist/endpoint-envelope.d.ts.map +1 -1
  21. package/dist/endpoint-envelope.js +1 -1
  22. package/dist/endpoint-envelope.js.map +1 -1
  23. package/dist/endpoint-error.d.ts +10 -1
  24. package/dist/endpoint-error.d.ts.map +1 -1
  25. package/dist/endpoint-error.js +12 -0
  26. package/dist/endpoint-error.js.map +1 -1
  27. package/dist/endpoint-grants.d.ts.map +1 -1
  28. package/dist/endpoint-grants.js +34 -12
  29. package/dist/endpoint-grants.js.map +1 -1
  30. package/dist/endpoint-invoke.d.ts.map +1 -1
  31. package/dist/endpoint-invoke.js +16 -51
  32. package/dist/endpoint-invoke.js.map +1 -1
  33. package/dist/endpoint-publish-denial.d.ts +35 -0
  34. package/dist/endpoint-publish-denial.d.ts.map +1 -0
  35. package/dist/endpoint-publish-denial.js +56 -0
  36. package/dist/endpoint-publish-denial.js.map +1 -0
  37. package/dist/endpoint-serve-kv.d.ts +16 -0
  38. package/dist/endpoint-serve-kv.d.ts.map +1 -1
  39. package/dist/endpoint-serve-kv.js +29 -0
  40. package/dist/endpoint-serve-kv.js.map +1 -1
  41. package/dist/endpoint-serve.d.ts.map +1 -1
  42. package/dist/endpoint-serve.js +9 -4
  43. package/dist/endpoint-serve.js.map +1 -1
  44. package/dist/endpoint-service.d.ts +21 -0
  45. package/dist/endpoint-service.d.ts.map +1 -1
  46. package/dist/endpoint-service.js +150 -15
  47. package/dist/endpoint-service.js.map +1 -1
  48. package/dist/endpoint-subjects.d.ts +34 -0
  49. package/dist/endpoint-subjects.d.ts.map +1 -1
  50. package/dist/endpoint-subjects.js +87 -18
  51. package/dist/endpoint-subjects.js.map +1 -1
  52. package/dist/endpoint-verbs.d.ts +4 -2
  53. package/dist/endpoint-verbs.d.ts.map +1 -1
  54. package/dist/endpoint-verbs.js +23 -8
  55. package/dist/endpoint-verbs.js.map +1 -1
  56. package/dist/endpoint.d.ts +309 -8
  57. package/dist/endpoint.d.ts.map +1 -1
  58. package/dist/endpoint.js +888 -61
  59. package/dist/endpoint.js.map +1 -1
  60. package/dist/index.d.ts +4 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +8 -1
  63. package/dist/index.js.map +1 -1
  64. package/dist/issued-authority.d.ts +168 -0
  65. package/dist/issued-authority.d.ts.map +1 -0
  66. package/dist/issued-authority.js +497 -0
  67. package/dist/issued-authority.js.map +1 -0
  68. package/dist/issuer-session.d.ts +30 -0
  69. package/dist/issuer-session.d.ts.map +1 -0
  70. package/dist/issuer-session.js +51 -0
  71. package/dist/issuer-session.js.map +1 -0
  72. package/dist/lease.d.ts +22 -0
  73. package/dist/lease.d.ts.map +1 -1
  74. package/dist/lease.js +14 -1
  75. package/dist/lease.js.map +1 -1
  76. package/dist/lifecycle-state.d.ts +9 -2
  77. package/dist/lifecycle-state.d.ts.map +1 -1
  78. package/dist/lifecycle-state.js +11 -2
  79. package/dist/lifecycle-state.js.map +1 -1
  80. package/dist/membership-feed.d.ts +24 -1
  81. package/dist/membership-feed.d.ts.map +1 -1
  82. package/dist/membership-feed.js +61 -3
  83. package/dist/membership-feed.js.map +1 -1
  84. package/dist/provision.d.ts +24 -14
  85. package/dist/provision.d.ts.map +1 -1
  86. package/dist/provision.js +149 -15
  87. package/dist/provision.js.map +1 -1
  88. package/dist/remote-manager-authority.d.ts +126 -1
  89. package/dist/remote-manager-authority.d.ts.map +1 -1
  90. package/dist/remote-manager-authority.js +21 -0
  91. package/dist/remote-manager-authority.js.map +1 -1
  92. package/dist/run-admission.d.ts +88 -0
  93. package/dist/run-admission.d.ts.map +1 -0
  94. package/dist/run-admission.js +193 -0
  95. package/dist/run-admission.js.map +1 -0
  96. package/dist/run-driver-grants.d.ts +10 -0
  97. package/dist/run-driver-grants.d.ts.map +1 -1
  98. package/dist/run-driver-grants.js +21 -0
  99. package/dist/run-driver-grants.js.map +1 -1
  100. package/dist/run-host.d.ts +7 -1
  101. package/dist/run-host.d.ts.map +1 -1
  102. package/dist/run-host.js.map +1 -1
  103. package/dist/run-journal.d.ts +4 -0
  104. package/dist/run-journal.d.ts.map +1 -1
  105. package/dist/run-journal.js +80 -17
  106. package/dist/run-journal.js.map +1 -1
  107. package/dist/runtime.d.ts +31 -3
  108. package/dist/runtime.d.ts.map +1 -1
  109. package/dist/secret-fs.d.ts +25 -0
  110. package/dist/secret-fs.d.ts.map +1 -1
  111. package/dist/secret-fs.js +136 -3
  112. package/dist/secret-fs.js.map +1 -1
  113. package/dist/secret-store.d.ts +44 -0
  114. package/dist/secret-store.d.ts.map +1 -1
  115. package/dist/secret-store.js +60 -1
  116. package/dist/secret-store.js.map +1 -1
  117. package/dist/streams.d.ts +23 -75
  118. package/dist/streams.d.ts.map +1 -1
  119. package/dist/streams.js +65 -85
  120. package/dist/streams.js.map +1 -1
  121. package/dist/subjects.d.ts +11 -1
  122. package/dist/subjects.d.ts.map +1 -1
  123. package/dist/subjects.js +11 -1
  124. package/dist/subjects.js.map +1 -1
  125. package/package.json +1 -1
@@ -28,6 +28,12 @@
28
28
  * (e.g. `mintCreds`).
29
29
  */
30
30
  export interface SecretStore {
31
+ /** Stable, non-secret identity of the authority this adapter reads and writes. A first-party
32
+ * filesystem adapter declares this intrinsically. A hosted adapter may declare its Vault/KMS
33
+ * coordinate here, so callers do not have to reconstruct the adapter's authority from cwd or
34
+ * another local root. Optional for compatibility; a composition that needs identity proof must
35
+ * otherwise supply an explicit coordinate at its boundary. */
36
+ readonly identity?: SecretStoreIdentity;
31
37
  /** The stored value for `key`, or `undefined` if absent. */
32
38
  get(key: string): Promise<string | undefined>;
33
39
  /** Store `value` under `key`, replacing any prior value AS A WHOLE: a concurrent `get` observes
@@ -43,4 +49,42 @@ export interface SecretStore {
43
49
  * are mint / renewal / eviction concerns, not `SecretStore`). */
44
50
  delete(key: string): Promise<void>;
45
51
  }
52
+ /**
53
+ * How a process names the SecretStore it uses as the standing-daemon credential authority.
54
+ *
55
+ * Fingerprint-only `reloadCreds` is safe only when the renewal owner and the delivery daemon
56
+ * genuinely read one store. This identity is that proof: it names the store, never a secret.
57
+ * Two workstation filesystem stores agree only when they resolve the same directory. An
58
+ * injected (hosted) store is identified by an operator-supplied coordinate, never guessed from
59
+ * a local root. A store may declare this identity itself; otherwise the composition root must
60
+ * provide it explicitly. There is no fallback between the two shapes.
61
+ */
62
+ export type SecretStoreIdentity = {
63
+ kind: "fs";
64
+ root: string;
65
+ } | {
66
+ kind: "injected";
67
+ coordinate: string;
68
+ };
69
+ /** Compare two store identities. Filesystem roots are compared after POSIX-style trailing-slash trim. */
70
+ export declare function sameSecretStoreIdentity(a: SecretStoreIdentity, b: SecretStoreIdentity): boolean;
71
+ /** Operator-facing label used in the divergence notice that names both stores. */
72
+ export declare function formatSecretStoreIdentity(id: SecretStoreIdentity): string;
73
+ /**
74
+ * Parse a store identity off the delivery-admin rail. Unknown fields, extra keys, blank
75
+ * values, and mixed fs/injected shapes are refused rather than guessed.
76
+ */
77
+ export declare function parseSecretStoreIdentity(raw: unknown): SecretStoreIdentity;
78
+ /**
79
+ * The notice a manager logs when its remint store and the daemon's reload source are not one
80
+ * authority. That manager is not the daemon-credential renewal owner: it serves the space and
81
+ * leaves those credentials to the manager whose store the daemon reloads from (#1634). Both
82
+ * identities appear, because a notice that declines ownership without naming them leaves the
83
+ * operator no way to find the owner.
84
+ *
85
+ * Matching this identity is NECESSARY but NOT SUFFICIENT for ownership. It is pure equality with
86
+ * no holder and no tiebreak, so every manager sharing one store passes it; the per-space renewal
87
+ * lease is what makes the owner single.
88
+ */
89
+ export declare function divergentSecretStoreNotice(owner: SecretStoreIdentity, daemon: SecretStoreIdentity): string;
46
90
  //# sourceMappingURL=secret-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"secret-store.d.ts","sourceRoot":"","sources":["../src/secret-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAE9C;;;;0GAIsG;IACtG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;;;sEAIkE;IAClE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC"}
1
+ {"version":3,"file":"secret-store.d.ts","sourceRoot":"","sources":["../src/secret-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;mEAI+D;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAExC,4DAA4D;IAC5D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAE9C;;;;0GAIsG;IACtG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;;;sEAIkE;IAClE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7C,yGAAyG;AACzG,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAK/F;AAMD,kFAAkF;AAClF,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,mBAAmB,GAAG,MAAM,CAEzE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,CAoB1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAQ1G"}
@@ -1,2 +1,61 @@
1
- export {};
1
+ /** Compare two store identities. Filesystem roots are compared after POSIX-style trailing-slash trim. */
2
+ export function sameSecretStoreIdentity(a, b) {
3
+ if (a.kind !== b.kind)
4
+ return false;
5
+ if (a.kind === "fs" && b.kind === "fs")
6
+ return trimStorePath(a.root) === trimStorePath(b.root);
7
+ if (a.kind === "injected" && b.kind === "injected")
8
+ return a.coordinate === b.coordinate;
9
+ return false;
10
+ }
11
+ function trimStorePath(p) {
12
+ return p.replace(/[/\\]+$/, "") || p;
13
+ }
14
+ /** Operator-facing label used in the divergence notice that names both stores. */
15
+ export function formatSecretStoreIdentity(id) {
16
+ return id.kind === "fs" ? id.root : `injected:${id.coordinate}`;
17
+ }
18
+ /**
19
+ * Parse a store identity off the delivery-admin rail. Unknown fields, extra keys, blank
20
+ * values, and mixed fs/injected shapes are refused rather than guessed.
21
+ */
22
+ export function parseSecretStoreIdentity(raw) {
23
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw))
24
+ throw new Error("secret-store identity must be an object");
25
+ const o = raw;
26
+ const keys = Object.keys(o);
27
+ if (o.kind === "fs") {
28
+ if (keys.some((k) => k !== "kind" && k !== "root"))
29
+ throw new Error("secret-store identity of kind fs admits only {kind, root}");
30
+ if (typeof o.root !== "string" || !o.root.trim())
31
+ throw new Error("secret-store identity of kind fs requires a non-blank root");
32
+ return { kind: "fs", root: o.root };
33
+ }
34
+ if (o.kind === "injected") {
35
+ if (keys.some((k) => k !== "kind" && k !== "coordinate"))
36
+ throw new Error("secret-store identity of kind injected admits only {kind, coordinate}");
37
+ if (typeof o.coordinate !== "string" || !o.coordinate.trim())
38
+ throw new Error("secret-store identity of kind injected requires a non-blank coordinate");
39
+ return { kind: "injected", coordinate: o.coordinate };
40
+ }
41
+ throw new Error('secret-store identity kind must be "fs" or "injected"');
42
+ }
43
+ /**
44
+ * The notice a manager logs when its remint store and the daemon's reload source are not one
45
+ * authority. That manager is not the daemon-credential renewal owner: it serves the space and
46
+ * leaves those credentials to the manager whose store the daemon reloads from (#1634). Both
47
+ * identities appear, because a notice that declines ownership without naming them leaves the
48
+ * operator no way to find the owner.
49
+ *
50
+ * Matching this identity is NECESSARY but NOT SUFFICIENT for ownership. It is pure equality with
51
+ * no holder and no tiebreak, so every manager sharing one store passes it; the per-space renewal
52
+ * lease is what makes the owner single.
53
+ */
54
+ export function divergentSecretStoreNotice(owner, daemon) {
55
+ return (`not the daemon-credential renewal owner for this space: ` +
56
+ `this manager remints through ${formatSecretStoreIdentity(owner)} while the delivery daemon ` +
57
+ `reloads from ${formatSecretStoreIdentity(daemon)}, so it leaves those credentials to the ` +
58
+ `manager on the daemon's own store. Give both processes the same store ` +
59
+ `(one explicit SecretStore coordinate, or one shared filesystem root) to renew from here.`);
60
+ }
2
61
  //# sourceMappingURL=secret-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"secret-store.js","sourceRoot":"","sources":["../src/secret-store.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"secret-store.js","sourceRoot":"","sources":["../src/secret-store.ts"],"names":[],"mappings":"AAqEA,yGAAyG;AACzG,MAAM,UAAU,uBAAuB,CAAC,CAAsB,EAAE,CAAsB;IACpF,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/F,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,CAAC;IACzF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,CAAS;IAC9B,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,yBAAyB,CAAC,EAAuB;IAC/D,OAAO,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAY;IACnD,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,GAA8B,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;YAC9C,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,YAAY,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE;YAC1D,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAC5F,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;IACxD,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAA0B,EAAE,MAA2B;IAChG,OAAO,CACL,0DAA0D;QAC1D,gCAAgC,yBAAyB,CAAC,KAAK,CAAC,6BAA6B;QAC7F,gBAAgB,yBAAyB,CAAC,MAAM,CAAC,0CAA0C;QAC3F,wEAAwE;QACxE,0FAA0F,CAC3F,CAAC;AACJ,CAAC"}
package/dist/streams.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type ConsumerConfig, type JetStreamManager } from "@nats-io/jetstream";
1
+ import { type ConsumerConfig, type JetStreamClient, type JetStreamManager } from "@nats-io/jetstream";
2
2
  import { type NatsConnection } from "@nats-io/transport-node";
3
3
  /** Per-(sender,channel)-subject retention cap on the chat stream — the bound past which the
4
4
  * oldest message on a subject is discarded (`DiscardPolicy.Old`). Also the horizon of focus
@@ -179,82 +179,30 @@ export declare function fanoutDurableConfig(space: string, opts?: {
179
179
  }): Partial<ConsumerConfig>;
180
180
  /** Connect with the given (privileged) creds, create the space's streams, and disconnect.
181
181
  * Used by `cotal up` to pre-create streams once at setup. */
182
- /** #286: reconcile a TTL'd KV bucket's `max_age` to `ttlMs`. `kvm.create` NEVER updates an existing
183
- * bucket's config, so a presence/lease bucket created by a cotal that predated the TTL (or created
184
- * without it) keeps NO expiry forever — dead presence records and stale leases never age out, and a
185
- * raw-KV reader (a dashboard) shows a crashed agent as live indefinitely. Run at every `cotal up`, this
186
- * `STREAM.UPDATE`s the backing stream when its `max_age` has drifted. Lowering `max_age` immediately
187
- * ages out already-expired messages (the intended liveness effect; active leases are younger than their
188
- * TTL and survive, a stale one dies and its holder self-fences on its next failed renewal). NATS requires
189
- * `duplicate_window <= max_age`; an old unlimited bucket's 120s window would otherwise reject the update,
190
- * so the window is lowered in the SAME update. Idempotent (a matching bucket is skipped). The `provisioner`
191
- * cred holds `STREAM.UPDATE` on exactly these three streams (see provision.ts).
192
- *
193
- * WHAT THE READ-BACK PROVES, AND WHAT IT CANNOT. It verifies exactly two things: **`max_age` came back
194
- * EXACTLY as intended**, and **`duplicate_window` does not violate the NATS constraint** (it is not
195
- * above `max_age`). A no-op update, a `max_age` that came back other than intended, or a server that
196
- * answers OK without changing anything is caught here and throws.
197
- *
198
- * Note what that does NOT include: the update sends a computed `dupNs`, but the read-back never checks
199
- * the window came back as sent — omitted, zeroed, or clamped smaller all pass. Deliberate: any window
200
- * `<= max_age` is legal and harmless for a liveness bucket, and demanding equality would turn a
201
- * legitimate server-side clamp into a failed `cotal up`. (Confirmed by probe: the real function accepts
202
- * a read-back with exact `max_age` and the window OMITTED.) It does NOT prove that file-store expiry is
203
- * in force either, and the distinction is
204
- * not theoretical — on the supported floor (nats-server 2.12.1) the effect is applied in two places and
205
- * only one of them is visible to us:
206
- * - `stream.go` assigns the new in-memory `mset.cfg`, then calls `mset.store.UpdateConfig(cfg)` and
207
- * IGNORES its returned error;
208
- * - `filestore.go`'s `UpdateConfig` restores the previous config and returns early when
209
- * `writeStreamMeta()` fails — BEFORE `expireMsgs()`/age enforcement is ever started;
210
- * - `STREAM.INFO` is answered from `mset.config()`, i.e. the in-memory copy.
211
- * So a metadata-write fault (EACCES, ENOSPC) yields UPDATE OK, a read-back showing the intended
212
- * `max_age`, and a backing store still running unlimited with no expiry timer. **This check cannot see
213
- * that**, because both fields it reads come from the config that DID get updated.
214
- *
215
- * It is NOT, however, invisible everywhere — an earlier version of this comment said no check at this
216
- * seam could see it, and that was false. `$JS.API.STREAM.SNAPSHOT` splits the useful way: the snapshot
217
- * INITIATION response copies `mset.config()` and false-greens like INFO, but the STREAMED archive's
218
- * first `meta.inf` entry marshals `fs.cfg` — the file store's own, rolled-back config. Reproduced live
219
- * against an EACCES split: INFO and the initiation response both reported the requested TTL while the
220
- * streamed `meta.inf` reported the old one. So a store-side detector EXISTS in the protocol, and this
221
- * codebase has `downloadStreamSnapshot` plus a per-stream-scoped snapshot grant MODEL (`backup.ts`).
222
- *
223
- * **It is NOT available under current authority, and that — not the cost — is what blocks it.**
224
- * `assertBackupStream` runs every scope through `canonicalBackupStreamConfig`, which accepts only the
225
- * durable registries (channel / acl / members) among KV buckets and THROWS for presence, delivery and
226
- * manager. So wiring this in needs a NEW EXACT SCOPE, or a widening of the reconcile credential to
227
- * whole-body snapshot authority over liveness data — an unsettled authority question on the credential
228
- * this change otherwise keeps to three `STREAM.UPDATE` subjects. The cost is real too (it scales with
229
- * bucket size, and a snapshot carries the bucket's records), but quoting only the cost would read as
230
- * "available but expensive", which is the wrong summary. See the tracking issue for the full spec.
231
- *
232
- * Stated here rather than left implied: this guard is a drift detector, not proof of enforcement — and
233
- * "cannot be detected here" is the stronger claim it does NOT license.
182
+ export declare const TTL_RECONCILE_CANARY_KEY = "_cotal_ttl_reconcile";
183
+ /** The server accepted and reported a TTL update, but its backing store did not enforce it. */
184
+ export declare class TtlPersistenceError extends Error {
185
+ readonly stream: string;
186
+ readonly ttlMs: number;
187
+ readonly canarySubject: string;
188
+ constructor(stream: string, ttlMs: number, canarySubject: string);
189
+ }
190
+ /** #286/#404: reconcile a TTL'd KV bucket and prove the backing store enforces the result.
234
191
  *
235
- * CONSEQUENCE OF READING FIRST, which follows from the same split and is worth naming because the
236
- * skip is deliberate: once `STREAM.INFO` reports the intended `max_age`, later reconciles see no
237
- * drift and issue no update, so a bucket left unenforced by a metadata-write fault is not retried
238
- * for as long as that server process lives.
192
+ * `STREAM.INFO` alone is not evidence. nats-server updates the stream's in-memory config before asking
193
+ * the backing store to persist it, ignores the store's `UpdateConfig` error, and serves INFO from the
194
+ * in-memory copy. A file-store metadata fault can therefore report UPDATE success and the requested
195
+ * `max_age` while the store rolls back and never starts age enforcement.
239
196
  *
240
- * WHERE THAT GOES depends on WHEN the write failed, and an earlier version of this comment got it
241
- * wrong by generalising from one case. `writeStreamMeta` performs TWO writes `meta.inf`, then
242
- * `meta.sum` and `UpdateConfig` rolls `fs.cfg` back if either fails:
243
- * - **Failure BEFORE the first write commits** (the original EACCES reproduction): persisted state
244
- * is coherent and old, so a restart makes `INFO` report the old value again and the next
245
- * reconcile repairs it. Here the skip DEFERS a repair.
246
- * - **Failure BETWEEN the two** (reproduced live by pointing `meta.sum.tmp` at `/dev/full`):
247
- * `meta.inf` commits NEW while `meta.sum` stays OLD — a torn pair. On restart the server logs
248
- * `checksums do not match` and recovery `continue`s past the stream, so it is SKIPPED: `INFO`
249
- * returns **stream not found**, and the reconcile cannot repair it because its own first `INFO`
250
- * gets not-found. **That case does not defer a repair, it loses the stream until an operator
251
- * intervenes.**
252
- * So "the persisted metadata is ground truth, restart repairs it" is TRUE ONLY of the
253
- * before-first-atomic case, and "defers, never loses" is false in general. The read-first skip is
254
- * still right — it keeps a healthy repeat `cotal up` to reads and no writes — but its worst case is
255
- * worse than a deferred repair. Both branches reproduced live against 2.12.1 during review; see the
256
- * tracking issue. */
257
- export declare function reconcileBucketTtl(jsm: JetStreamManager, streamName: string, ttlMs: number): Promise<TtlReconciled | undefined>;
197
+ * Before an update, this writes a durable marker on a reserved KV subject so an interrupted or false-green
198
+ * attempt cannot disappear behind a later matching INFO read. After the update, it writes the enforcement
199
+ * canary on that same subject and waits for subject-filtered stream state to report it gone within
200
+ * `max_age` plus fixed grace. The post-update write is the timed proof even when the prior TTL was shorter
201
+ * and expired the marker during the update. A clean matching bucket has no canary and stays a fast read-only
202
+ * no-op. The transition is proof of enforcement rather than config: the false-green store leaves the canary
203
+ * present and causes a named {@link TtlPersistenceError}, which `cotal up` surfaces. Successful canaries
204
+ * self-delete through the policy they verify. */
205
+ export declare function reconcileBucketTtl(jsm: JetStreamManager, js: Pick<JetStreamClient, "publish">, streamName: string, bucket: string, ttlMs: number): Promise<TtlReconciled | undefined>;
258
206
  /** The TTL'd buckets and their intended `max_age`, in ONE place — and the ONLY place any of them is
259
207
  * created.
260
208
  *
@@ -1 +1 @@
1
- {"version":3,"file":"streams.d.ts","sourceRoot":"","sources":["../src/streams.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streams.d.ts","sourceRoot":"","sources":["../src/streams.ts"],"names":[],"mappings":"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"}
package/dist/streams.js CHANGED
@@ -241,88 +241,70 @@ export function fanoutDurableConfig(space, opts = {}) {
241
241
  }
242
242
  /** Connect with the given (privileged) creds, create the space's streams, and disconnect.
243
243
  * Used by `cotal up` to pre-create streams once at setup. */
244
- /** #286: reconcile a TTL'd KV bucket's `max_age` to `ttlMs`. `kvm.create` NEVER updates an existing
245
- * bucket's config, so a presence/lease bucket created by a cotal that predated the TTL (or created
246
- * without it) keeps NO expiry forever — dead presence records and stale leases never age out, and a
247
- * raw-KV reader (a dashboard) shows a crashed agent as live indefinitely. Run at every `cotal up`, this
248
- * `STREAM.UPDATE`s the backing stream when its `max_age` has drifted. Lowering `max_age` immediately
249
- * ages out already-expired messages (the intended liveness effect; active leases are younger than their
250
- * TTL and survive, a stale one dies and its holder self-fences on its next failed renewal). NATS requires
251
- * `duplicate_window <= max_age`; an old unlimited bucket's 120s window would otherwise reject the update,
252
- * so the window is lowered in the SAME update. Idempotent (a matching bucket is skipped). The `provisioner`
253
- * cred holds `STREAM.UPDATE` on exactly these three streams (see provision.ts).
254
- *
255
- * WHAT THE READ-BACK PROVES, AND WHAT IT CANNOT. It verifies exactly two things: **`max_age` came back
256
- * EXACTLY as intended**, and **`duplicate_window` does not violate the NATS constraint** (it is not
257
- * above `max_age`). A no-op update, a `max_age` that came back other than intended, or a server that
258
- * answers OK without changing anything is caught here and throws.
259
- *
260
- * Note what that does NOT include: the update sends a computed `dupNs`, but the read-back never checks
261
- * the window came back as sent omitted, zeroed, or clamped smaller all pass. Deliberate: any window
262
- * `<= max_age` is legal and harmless for a liveness bucket, and demanding equality would turn a
263
- * legitimate server-side clamp into a failed `cotal up`. (Confirmed by probe: the real function accepts
264
- * a read-back with exact `max_age` and the window OMITTED.) It does NOT prove that file-store expiry is
265
- * in force either, and the distinction is
266
- * not theoretical on the supported floor (nats-server 2.12.1) the effect is applied in two places and
267
- * only one of them is visible to us:
268
- * - `stream.go` assigns the new in-memory `mset.cfg`, then calls `mset.store.UpdateConfig(cfg)` and
269
- * IGNORES its returned error;
270
- * - `filestore.go`'s `UpdateConfig` restores the previous config and returns early when
271
- * `writeStreamMeta()` fails BEFORE `expireMsgs()`/age enforcement is ever started;
272
- * - `STREAM.INFO` is answered from `mset.config()`, i.e. the in-memory copy.
273
- * So a metadata-write fault (EACCES, ENOSPC) yields UPDATE OK, a read-back showing the intended
274
- * `max_age`, and a backing store still running unlimited with no expiry timer. **This check cannot see
275
- * that**, because both fields it reads come from the config that DID get updated.
276
- *
277
- * It is NOT, however, invisible everywhere — an earlier version of this comment said no check at this
278
- * seam could see it, and that was false. `$JS.API.STREAM.SNAPSHOT` splits the useful way: the snapshot
279
- * INITIATION response copies `mset.config()` and false-greens like INFO, but the STREAMED archive's
280
- * first `meta.inf` entry marshals `fs.cfg` — the file store's own, rolled-back config. Reproduced live
281
- * against an EACCES split: INFO and the initiation response both reported the requested TTL while the
282
- * streamed `meta.inf` reported the old one. So a store-side detector EXISTS in the protocol, and this
283
- * codebase has `downloadStreamSnapshot` plus a per-stream-scoped snapshot grant MODEL (`backup.ts`).
284
- *
285
- * **It is NOT available under current authority, and that — not the cost — is what blocks it.**
286
- * `assertBackupStream` runs every scope through `canonicalBackupStreamConfig`, which accepts only the
287
- * durable registries (channel / acl / members) among KV buckets and THROWS for presence, delivery and
288
- * manager. So wiring this in needs a NEW EXACT SCOPE, or a widening of the reconcile credential to
289
- * whole-body snapshot authority over liveness data — an unsettled authority question on the credential
290
- * this change otherwise keeps to three `STREAM.UPDATE` subjects. The cost is real too (it scales with
291
- * bucket size, and a snapshot carries the bucket's records), but quoting only the cost would read as
292
- * "available but expensive", which is the wrong summary. See the tracking issue for the full spec.
293
- *
294
- * Stated here rather than left implied: this guard is a drift detector, not proof of enforcement — and
295
- * "cannot be detected here" is the stronger claim it does NOT license.
244
+ export const TTL_RECONCILE_CANARY_KEY = "_cotal_ttl_reconcile";
245
+ const TTL_RECONCILE_POLL_MS = 100;
246
+ const TTL_RECONCILE_GRACE_MS = 2_000;
247
+ /** The server accepted and reported a TTL update, but its backing store did not enforce it. */
248
+ export class TtlPersistenceError extends Error {
249
+ stream;
250
+ ttlMs;
251
+ canarySubject;
252
+ constructor(stream, ttlMs, canarySubject) {
253
+ super(`TTL reconcile persistence failed for ${stream}: the server accepted max_age=${ttlMs}ms, ` +
254
+ "but the backing store did not persist or enforce it (the enforcement canary remained past max_age plus grace)");
255
+ this.stream = stream;
256
+ this.ttlMs = ttlMs;
257
+ this.canarySubject = canarySubject;
258
+ this.name = "TtlPersistenceError";
259
+ }
260
+ }
261
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
262
+ async function ttlCanaryCount(jsm, streamName, canarySubject) {
263
+ const info = await jsm.streams.info(streamName, { subjects_filter: canarySubject });
264
+ return info.state.subjects?.[canarySubject] ?? 0;
265
+ }
266
+ async function awaitTtlCanaryExpiry(jsm, streamName, canarySubject, ttlMs) {
267
+ const deadline = Date.now() + ttlMs + TTL_RECONCILE_GRACE_MS;
268
+ while (Date.now() <= deadline) {
269
+ if (await ttlCanaryCount(jsm, streamName, canarySubject) === 0)
270
+ return;
271
+ await sleep(Math.min(TTL_RECONCILE_POLL_MS, Math.max(1, deadline - Date.now())));
272
+ }
273
+ throw new TtlPersistenceError(streamName, ttlMs, canarySubject);
274
+ }
275
+ /** #286/#404: reconcile a TTL'd KV bucket and prove the backing store enforces the result.
296
276
  *
297
- * CONSEQUENCE OF READING FIRST, which follows from the same split and is worth naming because the
298
- * skip is deliberate: once `STREAM.INFO` reports the intended `max_age`, later reconciles see no
299
- * drift and issue no update, so a bucket left unenforced by a metadata-write fault is not retried
300
- * for as long as that server process lives.
277
+ * `STREAM.INFO` alone is not evidence. nats-server updates the stream's in-memory config before asking
278
+ * the backing store to persist it, ignores the store's `UpdateConfig` error, and serves INFO from the
279
+ * in-memory copy. A file-store metadata fault can therefore report UPDATE success and the requested
280
+ * `max_age` while the store rolls back and never starts age enforcement.
301
281
  *
302
- * WHERE THAT GOES depends on WHEN the write failed, and an earlier version of this comment got it
303
- * wrong by generalising from one case. `writeStreamMeta` performs TWO writes `meta.inf`, then
304
- * `meta.sum` and `UpdateConfig` rolls `fs.cfg` back if either fails:
305
- * - **Failure BEFORE the first write commits** (the original EACCES reproduction): persisted state
306
- * is coherent and old, so a restart makes `INFO` report the old value again and the next
307
- * reconcile repairs it. Here the skip DEFERS a repair.
308
- * - **Failure BETWEEN the two** (reproduced live by pointing `meta.sum.tmp` at `/dev/full`):
309
- * `meta.inf` commits NEW while `meta.sum` stays OLD — a torn pair. On restart the server logs
310
- * `checksums do not match` and recovery `continue`s past the stream, so it is SKIPPED: `INFO`
311
- * returns **stream not found**, and the reconcile cannot repair it because its own first `INFO`
312
- * gets not-found. **That case does not defer a repair, it loses the stream until an operator
313
- * intervenes.**
314
- * So "the persisted metadata is ground truth, restart repairs it" is TRUE ONLY of the
315
- * before-first-atomic case, and "defers, never loses" is false in general. The read-first skip is
316
- * still right — it keeps a healthy repeat `cotal up` to reads and no writes — but its worst case is
317
- * worse than a deferred repair. Both branches reproduced live against 2.12.1 during review; see the
318
- * tracking issue. */
319
- export async function reconcileBucketTtl(jsm, streamName, ttlMs) {
282
+ * Before an update, this writes a durable marker on a reserved KV subject so an interrupted or false-green
283
+ * attempt cannot disappear behind a later matching INFO read. After the update, it writes the enforcement
284
+ * canary on that same subject and waits for subject-filtered stream state to report it gone within
285
+ * `max_age` plus fixed grace. The post-update write is the timed proof even when the prior TTL was shorter
286
+ * and expired the marker during the update. A clean matching bucket has no canary and stays a fast read-only
287
+ * no-op. The transition is proof of enforcement rather than config: the false-green store leaves the canary
288
+ * present and causes a named {@link TtlPersistenceError}, which `cotal up` surfaces. Successful canaries
289
+ * self-delete through the policy they verify. */
290
+ export async function reconcileBucketTtl(jsm, js, streamName, bucket, ttlMs) {
320
291
  const wantNs = nanos(ttlMs);
292
+ const canarySubject = `$KV.${bucket}.${TTL_RECONCILE_CANARY_KEY}`;
321
293
  const info = await jsm.streams.info(streamName);
322
- if (info.config.max_age === wantNs)
323
- return undefined; // already at the intended TTL no update
294
+ // A prior attempt may have left its durable canary behind. Reissue the desired config in case the
295
+ // store recovered, then prove it. Never accept the matching in-memory config on its own.
296
+ if (info.config.max_age === wantNs) {
297
+ if (await ttlCanaryCount(jsm, streamName, canarySubject) === 0)
298
+ return undefined;
299
+ const dupNs = Math.min(info.config.duplicate_window ?? wantNs, wantNs);
300
+ await jsm.streams.update(streamName, { max_age: wantNs, duplicate_window: dupNs });
301
+ await js.publish(canarySubject, new TextEncoder().encode("cotal ttl enforcement canary"));
302
+ await awaitTtlCanaryExpiry(jsm, streamName, canarySubject, ttlMs);
303
+ return undefined;
304
+ }
324
305
  const fromNs = info.config.max_age;
325
306
  const dupNs = Math.min(info.config.duplicate_window ?? wantNs, wantNs); // NATS constraint: duplicate_window <= max_age
307
+ await js.publish(canarySubject, new TextEncoder().encode("cotal ttl enforcement canary"));
326
308
  await jsm.streams.update(streamName, { max_age: wantNs, duplicate_window: dupNs });
327
309
  const after = await jsm.streams.info(streamName);
328
310
  if (after.config.max_age !== wantNs)
@@ -336,6 +318,8 @@ export async function reconcileBucketTtl(jsm, streamName, ttlMs) {
336
318
  // written to remove. (Semantics confirmed at the NATS source rather than reasoned from our seam.)
337
319
  if ((after.config.duplicate_window ?? 0) > wantNs)
338
320
  throw new Error(`TTL reconcile left ${streamName} inconsistent: duplicate_window is ${after.config.duplicate_window}ns, which exceeds max_age ${wantNs}ns (a conforming server rejects this combination, so the update was applied partially)`);
321
+ await js.publish(canarySubject, new TextEncoder().encode("cotal ttl enforcement canary"));
322
+ await awaitTtlCanaryExpiry(jsm, streamName, canarySubject, ttlMs);
339
323
  return { stream: streamName, fromMs: fromNs / 1e6, toMs: wantNs / 1e6 };
340
324
  }
341
325
  /** The TTL'd buckets and their intended `max_age`, in ONE place — and the ONLY place any of them is
@@ -380,13 +364,9 @@ export async function reconcileSpaceTtls(opts) {
380
364
  const nc = await connect({ servers: opts.servers, ...standaloneConnectOpts({ creds: opts.creds, tls: false }) });
381
365
  try {
382
366
  const jsm = await jetstreamManager(nc);
383
- const changed = [];
384
- for (const [bucket, ttl] of ttlBuckets(opts.space)) {
385
- const done = await reconcileBucketTtl(jsm, `KV_${bucket}`, ttl);
386
- if (done)
387
- changed.push(done);
388
- }
389
- return changed;
367
+ const js = jetstream(nc);
368
+ const reconciled = await Promise.all(ttlBuckets(opts.space).map(([bucket, ttl]) => reconcileBucketTtl(jsm, js, `KV_${bucket}`, bucket, ttl)));
369
+ return reconciled.filter((done) => done !== undefined);
390
370
  }
391
371
  finally {
392
372
  await nc.drain();
@@ -515,8 +495,8 @@ export async function setupSpaceStreams(opts) {
515
495
  // stale leases. Reconcile the three TTL'd buckets' `max_age` here (STREAM.UPDATE), idempotently.
516
496
  // Same list as `reconcileSpaceTtls`, from one source: two copies would let a fourth TTL'd bucket
517
497
  // be added to the create path and silently miss the upgrade path, which is this defect exactly.
518
- for (const [bucket, ttl] of ttlBuckets(opts.space))
519
- await reconcileBucketTtl(jsm, `KV_${bucket}`, ttl);
498
+ const js = jetstream(nc);
499
+ await Promise.all(ttlBuckets(opts.space).map(([bucket, ttl]) => reconcileBucketTtl(jsm, js, `KV_${bucket}`, bucket, ttl)));
520
500
  // Artifact Object Store (SPEC section 5): the bytes an `artifact` reference part points at.
521
501
  // Create-or-VERIFY, drift fails loud - see ensureArtifactStore for why create alone is not enough.
522
502
  await ensureArtifactStore(nc, opts.space);
@@ -1 +1 @@
1
- {"version":3,"file":"streams.js","sourceRoot":"","sources":["../src/streams.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streams.js","sourceRoot":"","sources":["../src/streams.ts"],"names":[],"mappings":"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"}
@@ -318,7 +318,9 @@ export declare function controlServiceSubject(space: string, service: string, ow
318
318
  export declare const CONTROL_DELIVERY: "delivery";
319
319
  /** The delivery daemon's PRIVILEGED admin rail (the D5 rail-split): control-plane ops the daemon
320
320
  * EXECUTES for the mesh's renewal/repair owner — credential reload (`reloadCreds`, the class-2
321
- * standing-renewal adoption step) now; the live-eviction executor rides here next. Cred-enforced
321
+ * standing-renewal adoption step); the store-identity challenge (`reloadStoreIdentity`,
322
+ * so a two-root composition is refused before that remint, including a late-binding daemon); the live-eviction executor
323
+ * rides here next. Cred-enforced
322
324
  * caller set: only the manager's `supervisor` profile holds the request-publish grant (every agent
323
325
  * cred is default-denied — nats-server is the boundary);
324
326
  * the `delivery` cred holds the serve + bounded-reply side. */
@@ -501,6 +503,14 @@ export declare const MANAGER_LEASE_KEY = "lease";
501
503
  /** The per-logical-instance liveness key in {@link managerBucket}. `instanceId` is a single lifecycle-uid
502
504
  * token (lowercase alnum, no dots/wildcards), so it is a safe trailing subject token under `lease.*`. */
503
505
  export declare function managerLeaseKey(instanceId: string): string;
506
+ /** The per-SPACE daemon-credential renewal lease in {@link managerBucket} (#1634). Store identity
507
+ * alone cannot pick one renewal owner: `sameSecretStoreIdentity` is pure equality, carrying no
508
+ * holder and no tiebreak, so N managers sharing one store (a shared root, or one injected
509
+ * coordinate on both) all satisfy it at once and all remint. Whoever holds this one key remints;
510
+ * everyone else serves the space and skips it. Bucket TTL expires a crashed holder's key so a
511
+ * survivor takes over. Deliberately OUTSIDE the `lease.*` subtree, which is per-instance liveness:
512
+ * a manager's own-lease-only grant must not reach this one. */
513
+ export declare const MANAGER_RENEWAL_LEASE_KEY = "renewal";
504
514
  /** Deterministic FNV-1a (32-bit) hash of `key` into `[0, n)` — stable across processes/restarts, so a
505
515
  * shard assignment never moves under a running daemon. The Plane-3 partition seam (sharding):
506
516
  * **N=1 is the only operating mode shipped** (`shards > 1` is hard-rejected at the daemon entrypoint)