run402 4.24.0 → 4.25.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 (114) hide show
  1. package/cli.mjs +6 -6
  2. package/git-remote-run402.mjs +270 -0
  3. package/lib/command-manifest.mjs +11 -1
  4. package/lib/credentials.mjs +4 -0
  5. package/lib/domains.mjs +0 -14
  6. package/lib/gitvault.mjs +370 -0
  7. package/lib/init.mjs +143 -1
  8. package/lib/pay.test.mjs +0 -4
  9. package/package.json +8 -2
  10. package/sdk/dist/index.d.ts +20 -3
  11. package/sdk/dist/index.d.ts.map +1 -1
  12. package/sdk/dist/index.js +22 -3
  13. package/sdk/dist/index.js.map +1 -1
  14. package/sdk/dist/namespaces/admin.d.ts +0 -5
  15. package/sdk/dist/namespaces/admin.d.ts.map +1 -1
  16. package/sdk/dist/namespaces/admin.js +0 -9
  17. package/sdk/dist/namespaces/admin.js.map +1 -1
  18. package/sdk/dist/namespaces/assets.d.ts +1 -20
  19. package/sdk/dist/namespaces/assets.d.ts.map +1 -1
  20. package/sdk/dist/namespaces/assets.js +0 -27
  21. package/sdk/dist/namespaces/assets.js.map +1 -1
  22. package/sdk/dist/namespaces/auth.js +1 -1
  23. package/sdk/dist/namespaces/auth.js.map +1 -1
  24. package/sdk/dist/namespaces/domains.d.ts +0 -19
  25. package/sdk/dist/namespaces/domains.d.ts.map +1 -1
  26. package/sdk/dist/namespaces/domains.js +0 -19
  27. package/sdk/dist/namespaces/domains.js.map +1 -1
  28. package/sdk/dist/namespaces/gitvault.crypto.d.ts +319 -0
  29. package/sdk/dist/namespaces/gitvault.crypto.d.ts.map +1 -0
  30. package/sdk/dist/namespaces/gitvault.crypto.js +690 -0
  31. package/sdk/dist/namespaces/gitvault.crypto.js.map +1 -0
  32. package/sdk/dist/namespaces/gitvault.d.ts +473 -0
  33. package/sdk/dist/namespaces/gitvault.d.ts.map +1 -0
  34. package/sdk/dist/namespaces/gitvault.js +714 -0
  35. package/sdk/dist/namespaces/gitvault.js.map +1 -0
  36. package/sdk/dist/namespaces/gitvault.types.d.ts +481 -0
  37. package/sdk/dist/namespaces/gitvault.types.d.ts.map +1 -0
  38. package/sdk/dist/namespaces/gitvault.types.js +19 -0
  39. package/sdk/dist/namespaces/gitvault.types.js.map +1 -0
  40. package/sdk/dist/namespaces/org.d.ts +1 -3
  41. package/sdk/dist/namespaces/org.d.ts.map +1 -1
  42. package/sdk/dist/namespaces/org.js +6 -10
  43. package/sdk/dist/namespaces/org.js.map +1 -1
  44. package/sdk/dist/namespaces/pay.d.ts +0 -8
  45. package/sdk/dist/namespaces/pay.d.ts.map +1 -1
  46. package/sdk/dist/namespaces/pay.js.map +1 -1
  47. package/sdk/dist/namespaces/projects.d.ts +2 -2
  48. package/sdk/dist/namespaces/projects.d.ts.map +1 -1
  49. package/sdk/dist/namespaces/projects.js +4 -12
  50. package/sdk/dist/namespaces/projects.js.map +1 -1
  51. package/sdk/dist/namespaces/secrets.d.ts +0 -2
  52. package/sdk/dist/namespaces/secrets.d.ts.map +1 -1
  53. package/sdk/dist/namespaces/secrets.js +3 -10
  54. package/sdk/dist/namespaces/secrets.js.map +1 -1
  55. package/sdk/dist/namespaces/subdomains.d.ts +0 -2
  56. package/sdk/dist/namespaces/subdomains.d.ts.map +1 -1
  57. package/sdk/dist/namespaces/subdomains.js +5 -16
  58. package/sdk/dist/namespaces/subdomains.js.map +1 -1
  59. package/sdk/dist/namespaces/transfers.d.ts +0 -2
  60. package/sdk/dist/namespaces/transfers.d.ts.map +1 -1
  61. package/sdk/dist/namespaces/transfers.js +8 -10
  62. package/sdk/dist/namespaces/transfers.js.map +1 -1
  63. package/sdk/dist/namespaces/wallets.d.ts +0 -12
  64. package/sdk/dist/namespaces/wallets.d.ts.map +1 -1
  65. package/sdk/dist/namespaces/wallets.js +0 -14
  66. package/sdk/dist/namespaces/wallets.js.map +1 -1
  67. package/sdk/dist/node/gitvault-creation-journal.d.ts +222 -0
  68. package/sdk/dist/node/gitvault-creation-journal.d.ts.map +1 -0
  69. package/sdk/dist/node/gitvault-creation-journal.js +365 -0
  70. package/sdk/dist/node/gitvault-creation-journal.js.map +1 -0
  71. package/sdk/dist/node/gitvault-deploy.d.ts +211 -0
  72. package/sdk/dist/node/gitvault-deploy.d.ts.map +1 -0
  73. package/sdk/dist/node/gitvault-deploy.js +292 -0
  74. package/sdk/dist/node/gitvault-deploy.js.map +1 -0
  75. package/sdk/dist/node/gitvault-keystore.d.ts +207 -0
  76. package/sdk/dist/node/gitvault-keystore.d.ts.map +1 -0
  77. package/sdk/dist/node/gitvault-keystore.js +529 -0
  78. package/sdk/dist/node/gitvault-keystore.js.map +1 -0
  79. package/sdk/dist/node/gitvault-prune.d.ts +341 -0
  80. package/sdk/dist/node/gitvault-prune.d.ts.map +1 -0
  81. package/sdk/dist/node/gitvault-prune.js +410 -0
  82. package/sdk/dist/node/gitvault-prune.js.map +1 -0
  83. package/sdk/dist/node/gitvault-publication.d.ts +730 -0
  84. package/sdk/dist/node/gitvault-publication.d.ts.map +1 -0
  85. package/sdk/dist/node/gitvault-publication.js +1475 -0
  86. package/sdk/dist/node/gitvault-publication.js.map +1 -0
  87. package/sdk/dist/node/gitvault-snapshot.d.ts +190 -0
  88. package/sdk/dist/node/gitvault-snapshot.d.ts.map +1 -0
  89. package/sdk/dist/node/gitvault-snapshot.js +505 -0
  90. package/sdk/dist/node/gitvault-snapshot.js.map +1 -0
  91. package/sdk/dist/node/index.d.ts +11 -0
  92. package/sdk/dist/node/index.d.ts.map +1 -1
  93. package/sdk/dist/node/index.js +9 -0
  94. package/sdk/dist/node/index.js.map +1 -1
  95. package/sdk/dist/node/paid-fetch.d.ts.map +1 -1
  96. package/sdk/dist/node/paid-fetch.js +0 -4
  97. package/sdk/dist/node/paid-fetch.js.map +1 -1
  98. package/sdk/dist/node/sites-node.d.ts +1 -8
  99. package/sdk/dist/node/sites-node.d.ts.map +1 -1
  100. package/sdk/dist/node/sites-node.js +1 -7
  101. package/sdk/dist/node/sites-node.js.map +1 -1
  102. package/sdk/dist/scoped.d.ts +4 -35
  103. package/sdk/dist/scoped.d.ts.map +1 -1
  104. package/sdk/dist/scoped.js +9 -74
  105. package/sdk/dist/scoped.js.map +1 -1
  106. package/lib/sender-domain.mjs +0 -36
  107. package/sdk/dist/deprecate.d.ts +0 -23
  108. package/sdk/dist/deprecate.d.ts.map +0 -1
  109. package/sdk/dist/deprecate.js +0 -42
  110. package/sdk/dist/deprecate.js.map +0 -1
  111. package/sdk/dist/namespaces/sender-domain.d.ts +0 -47
  112. package/sdk/dist/namespaces/sender-domain.d.ts.map +0 -1
  113. package/sdk/dist/namespaces/sender-domain.js +0 -45
  114. package/sdk/dist/namespaces/sender-domain.js.map +0 -1
@@ -0,0 +1,341 @@
1
+ /**
2
+ * gitvault — prune (protocol rev 40 §7.3; task 5.12a).
3
+ *
4
+ * The two-phase, ACYCLIC prune the client half owns:
5
+ *
6
+ * 1. plan — walk the verified chain, compute the GC ROOT SET (what must
7
+ * never be deleted) and the pruneable universe, and subtract.
8
+ * 2. attest — TWO `verifier_receipt`s over the SAME `intent_core_sha256`,
9
+ * one per CLOSED implementation identity
10
+ * (`run402-cli` | `r402s-verify`). This SDK is `run402-cli`
11
+ * and produces exactly ONE of them; the other MUST come from
12
+ * `r402s-verify`, which by spec shares no implementation code
13
+ * with the SDK — differential verification is the whole point,
14
+ * so this module will never synthesize the second receipt.
15
+ * 3. submit — sign the core, wrap it, sign the wrapper, and POST the
16
+ * EXACT BYTES. The gateway reads this route through
17
+ * `express.raw` and verifies the owner signature over the
18
+ * bytes as sent, so a re-serialized object is a different
19
+ * object. {@link pruneIntentBytes} is the one serializer.
20
+ * 4. confirm — poll the intent until its control-plane-signed
21
+ * `prune_completion` appears, then believe ONLY that: per-object
22
+ * outcomes are THREE-VALUED (`deleted` | `present_not_attempted`
23
+ * | `present_after_attempt`) and only `deleted` means the bytes
24
+ * are gone. `present_after_attempt` is NOT a deletion.
25
+ *
26
+ * What this module deliberately does NOT do:
27
+ * - decide retention eligibility. The ≥90-day schedule is measured against a
28
+ * control-plane-signed `retention_cutoff` ticket and the server's own
29
+ * admission times; a client cannot prove either. The plan is a PROPOSAL and
30
+ * the gateway is the authority — it refuses any candidate that is not
31
+ * retention-eligible against the bound ticket.
32
+ * - attest anything it did not check. A receipt this module builds carries
33
+ * `result: "failed"` (and both booleans as observed) whenever the chain
34
+ * cannot prove the property, rather than a convenient `true`.
35
+ */
36
+ import { GITVAULT_FORMAT, GITVAULT_SUITE } from "../namespaces/gitvault.crypto.js";
37
+ import type { GitvaultCheckpointClaimSet, GitvaultCheckpointManifestReceipt, GitvaultCheckpointPackReceipt, GitvaultCheckpointClaimSetReceipt, GitvaultHead, GitvaultRefStateReceipt, GitvaultRetentionRootsReceipt, GitvaultWalPackReceipt } from "../namespaces/gitvault.types.js";
38
+ /** §7.3: at most 10 000 candidates per intent; larger prunes chunk into successive intents. */
39
+ export declare const GITVAULT_MAX_PRUNE_CANDIDATES = 10000;
40
+ /** The CLOSED V0 verifier identity set (`common.json#/$defs/implementation_id`). */
41
+ export declare const GITVAULT_VERIFIER_IMPLEMENTATIONS: readonly ["run402-cli", "r402s-verify"];
42
+ export type GitvaultVerifierImplementation = (typeof GITVAULT_VERIFIER_IMPLEMENTATIONS)[number];
43
+ /** This SDK's identity when it attests. The other half of the pair is never ours to produce. */
44
+ export declare const GITVAULT_SDK_VERIFIER_IMPLEMENTATION: GitvaultVerifierImplementation;
45
+ /**
46
+ * What this lineage calls itself in a receipt's `implementation_version`.
47
+ *
48
+ * The LINEAGE and the PROTOCOL REVISION, not the npm version: a receipt records
49
+ * which verifier produced it against which frozen wire, and the npm number
50
+ * moves for reasons that have nothing to do with either. Bump this when the
51
+ * verification logic or the revision it verifies changes.
52
+ */
53
+ export declare const GITVAULT_SDK_VERIFIER_VERSION = "run402-sdk/r402s-v0-rev40";
54
+ /** `common.json#/$defs/receipt_pruneable` — the CLOSED union a delete set may name. */
55
+ export type GitvaultPruneableReceipt = GitvaultWalPackReceipt | GitvaultRefStateReceipt | GitvaultRetentionRootsReceipt | GitvaultCheckpointManifestReceipt | GitvaultCheckpointPackReceipt | GitvaultCheckpointClaimSetReceipt;
56
+ /** One verified chain link plus its resolved checkpoint claim set (null when the head bears no checkpoint). */
57
+ export interface GitvaultChainEntry {
58
+ head: GitvaultHead;
59
+ head_sha256: string;
60
+ claim_set: GitvaultCheckpointClaimSet | null;
61
+ }
62
+ /** `common.json#/$defs/verifier_receipt_ref` — what the intent carries, not the receipt itself. */
63
+ export interface GitvaultVerifierReceiptRef {
64
+ object_id: string;
65
+ object_kind: "verifier_receipt";
66
+ stored_bytes_sha256: string;
67
+ size_bytes: string;
68
+ implementation_id: GitvaultVerifierImplementation;
69
+ }
70
+ /** `verifier_receipt.json` — owner-signed, uploaded, then claimed at the intent's fence. */
71
+ export interface GitvaultVerifierReceipt {
72
+ format: typeof GITVAULT_FORMAT;
73
+ object_kind: "verifier_receipt";
74
+ suite: typeof GITVAULT_SUITE;
75
+ repo_id: string;
76
+ object_id: string;
77
+ intent_core_sha256: string;
78
+ checkpoint_head_sha256: string;
79
+ cutoff_ticket_sha256: string | null;
80
+ restored_object_set_hmac: string;
81
+ retention_evolution_ok: boolean;
82
+ candidates_outside_roots_ok: boolean;
83
+ implementation_id: GitvaultVerifierImplementation;
84
+ implementation_version: string;
85
+ result: "restored_and_verified" | "failed";
86
+ signature: string;
87
+ }
88
+ /** `prune_intent_core.json` — owner-signed; the acyclic base BOTH receipts sign. */
89
+ export interface GitvaultPruneIntentCore {
90
+ format: typeof GITVAULT_FORMAT;
91
+ object_kind: "prune_intent_core";
92
+ suite: typeof GITVAULT_SUITE;
93
+ repo_id: string;
94
+ object_id: string;
95
+ gc_epoch: string;
96
+ maintenance_cycle_id: string | null;
97
+ maintenance_prune_role: "intermediate" | "final" | null;
98
+ stage_claim_set_sha256: string | null;
99
+ batch_index: string | null;
100
+ batch_count: string | null;
101
+ authorizing_head_sha256: string;
102
+ checkpoint_claim_set_sha256: string;
103
+ gc_root_set_hmac: string;
104
+ retention_state_hmac: string;
105
+ delete_set: GitvaultPruneableReceipt[];
106
+ nonce: string;
107
+ signature: string;
108
+ }
109
+ /** `prune_intent.json` — the wrapper the gateway publishes create-only under `prune/`. */
110
+ export interface GitvaultPruneIntent {
111
+ format: typeof GITVAULT_FORMAT;
112
+ object_kind: "prune_intent";
113
+ suite: typeof GITVAULT_SUITE;
114
+ repo_id: string;
115
+ object_id: string;
116
+ core: GitvaultPruneIntentCore;
117
+ intent_core_sha256: string;
118
+ verifier_receipts: GitvaultVerifierReceiptRef[];
119
+ signature: string;
120
+ }
121
+ /** One entry of the completion's three-valued vector. */
122
+ export interface GitvaultPruneOutcome {
123
+ object_id: string;
124
+ result: "deleted" | "present_not_attempted" | "present_after_attempt";
125
+ }
126
+ /** `GET …/prune-intents/:id` — the gateway's secret-free public view (`toPublicIntent`). */
127
+ export interface GitvaultPruneIntentRecord {
128
+ object_id: string;
129
+ repo_id: string;
130
+ state: string;
131
+ gc_epoch: string;
132
+ intent_sha256: string | null;
133
+ intent_core_sha256: string | null;
134
+ candidate_count: number;
135
+ next_candidate_index: number;
136
+ maintenance_cycle_id: string | null;
137
+ maintenance_prune_role: string | null;
138
+ stage_claim_set_sha256: string | null;
139
+ batch_index: number | null;
140
+ batch_count: number | null;
141
+ completion: {
142
+ object_id: string | null;
143
+ sha256: string | null;
144
+ per_object: GitvaultPruneOutcome[] | null;
145
+ deleted_count: number;
146
+ present_after_attempt_count: number;
147
+ present_not_attempted_count: number;
148
+ gc_epoch_at_completion: string;
149
+ cycle_event_seq: string | null;
150
+ completed_at: string | null;
151
+ } | null;
152
+ prepared_at: string | null;
153
+ intent_put_issued_at: string | null;
154
+ intent_stored_at: string | null;
155
+ deleting_started_at: string | null;
156
+ }
157
+ /**
158
+ * A checkpoint's FULL RECOVERY BUNDLE: the claim set, the manifest, every pack,
159
+ * AND its `covers_through` head's `ref_state` + `retention_roots` carriers.
160
+ * A bundle missing its carriers is not a recovery path, so the carriers are
161
+ * part of the protection, not adjacent to it.
162
+ */
163
+ export declare function checkpointRecoveryBundle(entry: GitvaultChainEntry): GitvaultPruneableReceipt[];
164
+ /** Every pruneable object the chain has ever named, sorted by `object_id`, deduplicated. */
165
+ export declare function collectPruneUniverse(entries: readonly GitvaultChainEntry[]): GitvaultPruneableReceipt[];
166
+ /** Pairwise-distinct, sorted by `object_id` — the schema's canonical order, not an incidental one. */
167
+ export declare function sortPruneReceipts(receipts: readonly GitvaultPruneableReceipt[]): GitvaultPruneableReceipt[];
168
+ export interface GitvaultGcRootSet {
169
+ /** The protected receipts, sorted — the `gcrootset` commitment's preimage content. */
170
+ receipts: GitvaultPruneableReceipt[];
171
+ /** The newest checkpoint-bearing entry, or `null` when the chain has none. */
172
+ latest_checkpoint: GitvaultChainEntry | null;
173
+ /** The one before it, or `null`. */
174
+ prior_checkpoint: GitvaultChainEntry | null;
175
+ /**
176
+ * Why nothing may be pruned yet, or `null` when a prune is structurally
177
+ * possible. Stated rather than left to be inferred from an empty candidate
178
+ * list, which would read as "already clean".
179
+ */
180
+ blocked_reason: string | null;
181
+ }
182
+ /**
183
+ * The GC root set: the latest checkpoint's recovery bundle + its WAL suffix +
184
+ * the immediately-prior checkpoint's recovery bundle + every carrier at or
185
+ * after the prior checkpoint.
186
+ *
187
+ * DELIBERATELY conservative in two places, because under-protecting deletes
188
+ * history and over-protecting only costs storage:
189
+ *
190
+ * - with FEWER THAN TWO checkpoints nothing is prunable at all. The
191
+ * protection rule exists so a bad latest checkpoint still has a second
192
+ * recovery path; with a single checkpoint that second path IS the
193
+ * pre-checkpoint WAL chain, so pruning it would leave exactly one.
194
+ * - every `ref_state` / `retention_roots` carrier at or after the PRIOR
195
+ * checkpoint is protected, not just the unexpired-root carriers. Root
196
+ * expiry is measured against a server-signed ticket this client cannot
197
+ * evaluate, so it never guesses a carrier is dead.
198
+ */
199
+ export declare function computeGcRootSet(entries: readonly GitvaultChainEntry[]): GitvaultGcRootSet;
200
+ export interface GitvaultPrunePlan {
201
+ /** Candidates in canonical order, capped at {@link GITVAULT_MAX_PRUNE_CANDIDATES}. */
202
+ candidates: GitvaultPruneableReceipt[];
203
+ /** How many pruneable objects were left out by the per-intent cap (chunk into a later intent). */
204
+ deferred_count: number;
205
+ root_set: GitvaultGcRootSet;
206
+ universe_count: number;
207
+ }
208
+ /** universe − GC root set, canonical order, capped. Never mutates its inputs. */
209
+ export declare function planPruneCandidates(entries: readonly GitvaultChainEntry[]): GitvaultPrunePlan;
210
+ export interface GitvaultRetentionEvolutionCheck {
211
+ ok: boolean;
212
+ /** Every departure this client could not justify from the chain alone. */
213
+ unproven: Array<{
214
+ generation: string;
215
+ ref: string;
216
+ oid: string;
217
+ reason: string;
218
+ }>;
219
+ }
220
+ /**
221
+ * Verify that every retention root which LEFT the map left legally: only at a
222
+ * checkpoint-bearing generation carrying a cutoff ticket, and only when its
223
+ * `effective_admitted_at + retentionDays < cutoff_at` strictly.
224
+ *
225
+ * `effectiveAdmittedAt` returning `null` is not a failure of the vault — it is
226
+ * a failure of THIS CLIENT to prove the departure, and the check reports `ok:
227
+ * false` so the receipt attests `false` rather than a convenient `true`.
228
+ */
229
+ export declare function checkRetentionEvolution(entries: readonly GitvaultChainEntry[], roots: (entry: GitvaultChainEntry) => Array<{
230
+ ref: string;
231
+ oid: string;
232
+ dropped_at_generation: string;
233
+ }>, effectiveAdmittedAt: (droppedAtGeneration: string) => string | null, isEligible: (effectiveAdmittedAtIso: string, cutoffAtIso: string) => boolean): GitvaultRetentionEvolutionCheck;
234
+ export interface GitvaultBuildPruneCoreInput {
235
+ repo_id: string;
236
+ gc_epoch: string;
237
+ authorizing_head_sha256: string;
238
+ checkpoint_claim_set_sha256: string;
239
+ gc_root_set_hmac: string;
240
+ retention_state_hmac: string;
241
+ delete_set: readonly GitvaultPruneableReceipt[];
242
+ /** All five cycle fields are non-null together iff the prune advances a maintenance cycle (§7.2). */
243
+ cycle?: {
244
+ maintenance_cycle_id: string;
245
+ maintenance_prune_role: "intermediate" | "final";
246
+ stage_claim_set_sha256: string;
247
+ batch_index: string;
248
+ batch_count: string;
249
+ } | null;
250
+ object_id?: string;
251
+ nonce?: string;
252
+ }
253
+ /**
254
+ * Build + sign `prune_intent_core`. The core is signed on its own AND embedded
255
+ * in a signed wrapper (the double signature of §7.3) — `intent_core_sha256` is
256
+ * the stored-bytes hash of the COMPLETE signed core, which is why the core must
257
+ * be finished before either verifier can attest anything about it.
258
+ */
259
+ export declare function buildPruneIntentCore(input: GitvaultBuildPruneCoreInput, signingSeed: Uint8Array): GitvaultPruneIntentCore;
260
+ /** The stored-bytes hash of the complete signed core — what BOTH verifier receipts sign. */
261
+ export declare function pruneIntentCoreSha256(core: GitvaultPruneIntentCore): string;
262
+ export interface GitvaultBuildVerifierReceiptInput {
263
+ repo_id: string;
264
+ intent_core_sha256: string;
265
+ checkpoint_head_sha256: string;
266
+ cutoff_ticket_sha256: string | null;
267
+ restored_object_set_hmac: string;
268
+ retention_evolution_ok: boolean;
269
+ candidates_outside_roots_ok: boolean;
270
+ implementation_id: GitvaultVerifierImplementation;
271
+ implementation_version: string;
272
+ object_id?: string;
273
+ }
274
+ /**
275
+ * Build + sign a `verifier_receipt`.
276
+ *
277
+ * `result` is DERIVED, never passed in: a receipt is `restored_and_verified`
278
+ * exactly when both attestation booleans are true, and `failed` otherwise. A
279
+ * caller cannot hand this function `failed` booleans and a passing result.
280
+ */
281
+ export declare function buildVerifierReceipt(input: GitvaultBuildVerifierReceiptInput, signingSeed: Uint8Array): GitvaultVerifierReceipt;
282
+ /** The `verifier_receipt_ref` an intent carries for an uploaded receipt. */
283
+ export declare function verifierReceiptRef(receipt: GitvaultVerifierReceipt): GitvaultVerifierReceiptRef;
284
+ /**
285
+ * Wrap + sign the intent.
286
+ *
287
+ * Every gate the gateway applies to the pair is applied here first, so a
288
+ * malformed pair never reaches the wire as a wasted round trip: exactly two
289
+ * refs, one per CLOSED implementation identity, distinct ids AND distinct
290
+ * hashes, each attesting `restored_and_verified` with both booleans true, and
291
+ * each signing THIS core.
292
+ */
293
+ export declare function buildPruneIntent(core: GitvaultPruneIntentCore, receipts: readonly GitvaultVerifierReceipt[], signingSeed: Uint8Array): GitvaultPruneIntent;
294
+ /**
295
+ * Refuse a supplied core that the chain has moved past — BEFORE the receipts
296
+ * are uploaded.
297
+ *
298
+ * A prune is planned, verified out-of-band by a second implementation, and only
299
+ * then submitted, so there is a real window in which a push or a compaction
300
+ * lands underneath it. The gateway would refuse such an intent at its fence,
301
+ * but by then both receipts are stored objects the fence CLAIMS, so a stale
302
+ * submission burns evidence for nothing. Same registry codes the gateway uses,
303
+ * raised one step earlier.
304
+ */
305
+ export declare function assertPruneCoreStillCurrent(core: GitvaultPruneIntentCore, current: {
306
+ repo_id: string;
307
+ gc_epoch: string;
308
+ checkpoint_claim_set_sha256: string;
309
+ }): void;
310
+ /**
311
+ * THE serializer for the submit route.
312
+ *
313
+ * `POST …/prune-intents` is parsed with `express.raw`: the service strict-parses
314
+ * these bytes and verifies the owner signature over them. Anything that
315
+ * re-serializes the object between here and the socket — a JSON body helper, a
316
+ * proxy that reformats — changes what was signed. Send exactly this.
317
+ */
318
+ export declare function pruneIntentBytes(intent: GitvaultPruneIntent): Uint8Array;
319
+ export interface GitvaultPruneConfirmation {
320
+ /** `null` until the control-plane-signed completion exists. */
321
+ outcome: "completed" | "superseded_no_delete" | "superseded_partial_delete" | null;
322
+ /** Object ids the completion confirms are GONE. Only `deleted` qualifies. */
323
+ deleted: string[];
324
+ /** Still present — attempted or not. Never reported as removed. */
325
+ present: GitvaultPruneOutcome[];
326
+ /** Candidates the completion did not adjudicate at all (a defect; reported, never assumed deleted). */
327
+ unadjudicated: string[];
328
+ }
329
+ /**
330
+ * Read the completion's three-valued vector against the intent's canonical
331
+ * candidate order.
332
+ *
333
+ * The one rule this function exists to enforce: **only `deleted` means gone.**
334
+ * `present_after_attempt` looks like a deletion in the logs and is not one —
335
+ * treating it as one is how a client reports history removed that is still
336
+ * there. A candidate with no entry is `unadjudicated`, never inferred.
337
+ */
338
+ export declare function summarizePruneCompletion(candidateIds: readonly string[], record: GitvaultPruneIntentRecord | null): GitvaultPruneConfirmation;
339
+ /** Run `fn` in a fresh temp directory and always remove it, even on refusal. */
340
+ export declare function withScratchDir<T>(prefix: string, fn: (dir: string) => Promise<T>): Promise<T>;
341
+ //# sourceMappingURL=gitvault-prune.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitvault-prune.d.ts","sourceRoot":"","sources":["../../src/node/gitvault-prune.ts"],"names":[],"mappings":"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"}