@mikeargento/bitgraph 1.9.0 → 1.9.2

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 (252) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +58 -35
  3. package/dist/constructor.js +1 -1
  4. package/dist/constructor.js.map +1 -1
  5. package/dist/fuse-cli.js +1 -1
  6. package/dist/fuse-cli.js.map +1 -1
  7. package/dist/fuse.js +1 -1
  8. package/dist/fuse.js.map +1 -1
  9. package/dist/host.js +1 -1
  10. package/dist/host.js.map +1 -1
  11. package/dist/index.d.ts +2 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +2 -2
  14. package/dist/index.js.map +1 -1
  15. package/dist/policy.js +1 -1
  16. package/dist/policy.js.map +1 -1
  17. package/package.json +23 -8
  18. package/src/constructor.ts +1 -1
  19. package/src/fuse-cli.ts +1 -1
  20. package/src/fuse.ts +1 -1
  21. package/src/host.ts +1 -1
  22. package/src/index.ts +3 -2
  23. package/src/policy.ts +1 -1
  24. package/dist/__tests__/audit-anchors.test.d.ts +0 -2
  25. package/dist/__tests__/audit-anchors.test.d.ts.map +0 -1
  26. package/dist/__tests__/audit-anchors.test.js +0 -152
  27. package/dist/__tests__/audit-anchors.test.js.map +0 -1
  28. package/dist/__tests__/audit-anomalies.test.d.ts +0 -2
  29. package/dist/__tests__/audit-anomalies.test.d.ts.map +0 -1
  30. package/dist/__tests__/audit-anomalies.test.js +0 -663
  31. package/dist/__tests__/audit-anomalies.test.js.map +0 -1
  32. package/dist/__tests__/audit-attestation.test.d.ts +0 -2
  33. package/dist/__tests__/audit-attestation.test.d.ts.map +0 -1
  34. package/dist/__tests__/audit-attestation.test.js +0 -403
  35. package/dist/__tests__/audit-attestation.test.js.map +0 -1
  36. package/dist/__tests__/audit-bench-smoke.test.d.ts +0 -2
  37. package/dist/__tests__/audit-bench-smoke.test.d.ts.map +0 -1
  38. package/dist/__tests__/audit-bench-smoke.test.js +0 -87
  39. package/dist/__tests__/audit-bench-smoke.test.js.map +0 -1
  40. package/dist/__tests__/audit-boundary.test.d.ts +0 -20
  41. package/dist/__tests__/audit-boundary.test.d.ts.map +0 -1
  42. package/dist/__tests__/audit-boundary.test.js +0 -84
  43. package/dist/__tests__/audit-boundary.test.js.map +0 -1
  44. package/dist/__tests__/audit-cli.test.d.ts +0 -2
  45. package/dist/__tests__/audit-cli.test.d.ts.map +0 -1
  46. package/dist/__tests__/audit-cli.test.js +0 -239
  47. package/dist/__tests__/audit-cli.test.js.map +0 -1
  48. package/dist/__tests__/audit-dependencies.test.d.ts +0 -2
  49. package/dist/__tests__/audit-dependencies.test.d.ts.map +0 -1
  50. package/dist/__tests__/audit-dependencies.test.js +0 -116
  51. package/dist/__tests__/audit-dependencies.test.js.map +0 -1
  52. package/dist/__tests__/audit-fixtures.d.ts +0 -265
  53. package/dist/__tests__/audit-fixtures.d.ts.map +0 -1
  54. package/dist/__tests__/audit-fixtures.js +0 -511
  55. package/dist/__tests__/audit-fixtures.js.map +0 -1
  56. package/dist/__tests__/audit-ingest.test.d.ts +0 -2
  57. package/dist/__tests__/audit-ingest.test.d.ts.map +0 -1
  58. package/dist/__tests__/audit-ingest.test.js +0 -473
  59. package/dist/__tests__/audit-ingest.test.js.map +0 -1
  60. package/dist/__tests__/audit-memory-ingest.test.d.ts +0 -12
  61. package/dist/__tests__/audit-memory-ingest.test.d.ts.map +0 -1
  62. package/dist/__tests__/audit-memory-ingest.test.js +0 -135
  63. package/dist/__tests__/audit-memory-ingest.test.js.map +0 -1
  64. package/dist/__tests__/audit-property.test.d.ts +0 -2
  65. package/dist/__tests__/audit-property.test.d.ts.map +0 -1
  66. package/dist/__tests__/audit-property.test.js +0 -771
  67. package/dist/__tests__/audit-property.test.js.map +0 -1
  68. package/dist/__tests__/audit-real-fixtures.test.d.ts +0 -2
  69. package/dist/__tests__/audit-real-fixtures.test.d.ts.map +0 -1
  70. package/dist/__tests__/audit-real-fixtures.test.js +0 -132
  71. package/dist/__tests__/audit-real-fixtures.test.js.map +0 -1
  72. package/dist/__tests__/audit-real-live.test.d.ts +0 -2
  73. package/dist/__tests__/audit-real-live.test.d.ts.map +0 -1
  74. package/dist/__tests__/audit-real-live.test.js +0 -107
  75. package/dist/__tests__/audit-real-live.test.js.map +0 -1
  76. package/dist/__tests__/audit-reconstruct.test.d.ts +0 -2
  77. package/dist/__tests__/audit-reconstruct.test.d.ts.map +0 -1
  78. package/dist/__tests__/audit-reconstruct.test.js +0 -287
  79. package/dist/__tests__/audit-reconstruct.test.js.map +0 -1
  80. package/dist/__tests__/audit-report.test.d.ts +0 -2
  81. package/dist/__tests__/audit-report.test.d.ts.map +0 -1
  82. package/dist/__tests__/audit-report.test.js +0 -186
  83. package/dist/__tests__/audit-report.test.js.map +0 -1
  84. package/dist/__tests__/audit-roundtrip.test.d.ts +0 -2
  85. package/dist/__tests__/audit-roundtrip.test.d.ts.map +0 -1
  86. package/dist/__tests__/audit-roundtrip.test.js +0 -368
  87. package/dist/__tests__/audit-roundtrip.test.js.map +0 -1
  88. package/dist/__tests__/audit-temporal.test.d.ts +0 -2
  89. package/dist/__tests__/audit-temporal.test.d.ts.map +0 -1
  90. package/dist/__tests__/audit-temporal.test.js +0 -364
  91. package/dist/__tests__/audit-temporal.test.js.map +0 -1
  92. package/dist/__tests__/audit-tiers.test.d.ts +0 -2
  93. package/dist/__tests__/audit-tiers.test.d.ts.map +0 -1
  94. package/dist/__tests__/audit-tiers.test.js +0 -282
  95. package/dist/__tests__/audit-tiers.test.js.map +0 -1
  96. package/dist/__tests__/audit-witness-real.test.d.ts +0 -19
  97. package/dist/__tests__/audit-witness-real.test.d.ts.map +0 -1
  98. package/dist/__tests__/audit-witness-real.test.js +0 -82
  99. package/dist/__tests__/audit-witness-real.test.js.map +0 -1
  100. package/dist/__tests__/audit-witness.test.d.ts +0 -2
  101. package/dist/__tests__/audit-witness.test.d.ts.map +0 -1
  102. package/dist/__tests__/audit-witness.test.js +0 -308
  103. package/dist/__tests__/audit-witness.test.js.map +0 -1
  104. package/dist/__tests__/canonical.test.d.ts +0 -2
  105. package/dist/__tests__/canonical.test.d.ts.map +0 -1
  106. package/dist/__tests__/canonical.test.js +0 -162
  107. package/dist/__tests__/canonical.test.js.map +0 -1
  108. package/dist/__tests__/chain-hash-anchor.test.d.ts +0 -22
  109. package/dist/__tests__/chain-hash-anchor.test.d.ts.map +0 -1
  110. package/dist/__tests__/chain-hash-anchor.test.js +0 -55
  111. package/dist/__tests__/chain-hash-anchor.test.js.map +0 -1
  112. package/dist/__tests__/commit-service.integration.test.d.ts +0 -2
  113. package/dist/__tests__/commit-service.integration.test.d.ts.map +0 -1
  114. package/dist/__tests__/commit-service.integration.test.js +0 -95
  115. package/dist/__tests__/commit-service.integration.test.js.map +0 -1
  116. package/dist/__tests__/constructor.test.d.ts +0 -2
  117. package/dist/__tests__/constructor.test.d.ts.map +0 -1
  118. package/dist/__tests__/constructor.test.js +0 -267
  119. package/dist/__tests__/constructor.test.js.map +0 -1
  120. package/dist/__tests__/declared-proof-fixture.d.ts +0 -66
  121. package/dist/__tests__/declared-proof-fixture.d.ts.map +0 -1
  122. package/dist/__tests__/declared-proof-fixture.js +0 -66
  123. package/dist/__tests__/declared-proof-fixture.js.map +0 -1
  124. package/dist/__tests__/fuse-placement.test.d.ts +0 -2
  125. package/dist/__tests__/fuse-placement.test.d.ts.map +0 -1
  126. package/dist/__tests__/fuse-placement.test.js +0 -31
  127. package/dist/__tests__/fuse-placement.test.js.map +0 -1
  128. package/dist/__tests__/fuse-roundtrip.test.d.ts +0 -2
  129. package/dist/__tests__/fuse-roundtrip.test.d.ts.map +0 -1
  130. package/dist/__tests__/fuse-roundtrip.test.js +0 -241
  131. package/dist/__tests__/fuse-roundtrip.test.js.map +0 -1
  132. package/dist/__tests__/fuse-sdk.test.d.ts +0 -2
  133. package/dist/__tests__/fuse-sdk.test.d.ts.map +0 -1
  134. package/dist/__tests__/fuse-sdk.test.js +0 -117
  135. package/dist/__tests__/fuse-sdk.test.js.map +0 -1
  136. package/dist/__tests__/fuse-set-sdk.test.d.ts +0 -2
  137. package/dist/__tests__/fuse-set-sdk.test.d.ts.map +0 -1
  138. package/dist/__tests__/fuse-set-sdk.test.js +0 -721
  139. package/dist/__tests__/fuse-set-sdk.test.js.map +0 -1
  140. package/dist/__tests__/fuse-set.test.d.ts +0 -2
  141. package/dist/__tests__/fuse-set.test.d.ts.map +0 -1
  142. package/dist/__tests__/fuse-set.test.js +0 -868
  143. package/dist/__tests__/fuse-set.test.js.map +0 -1
  144. package/dist/__tests__/fuse-set2.test.d.ts +0 -2
  145. package/dist/__tests__/fuse-set2.test.d.ts.map +0 -1
  146. package/dist/__tests__/fuse-set2.test.js +0 -294
  147. package/dist/__tests__/fuse-set2.test.js.map +0 -1
  148. package/dist/__tests__/fuse-vectors.test.d.ts +0 -2
  149. package/dist/__tests__/fuse-vectors.test.d.ts.map +0 -1
  150. package/dist/__tests__/fuse-vectors.test.js +0 -175
  151. package/dist/__tests__/fuse-vectors.test.js.map +0 -1
  152. package/dist/__tests__/fuse-verify.test.d.ts +0 -2
  153. package/dist/__tests__/fuse-verify.test.d.ts.map +0 -1
  154. package/dist/__tests__/fuse-verify.test.js +0 -250
  155. package/dist/__tests__/fuse-verify.test.js.map +0 -1
  156. package/dist/__tests__/hello-world.test.d.ts +0 -2
  157. package/dist/__tests__/hello-world.test.d.ts.map +0 -1
  158. package/dist/__tests__/hello-world.test.js +0 -9
  159. package/dist/__tests__/hello-world.test.js.map +0 -1
  160. package/dist/__tests__/mock-proof-fixture.d.ts +0 -15
  161. package/dist/__tests__/mock-proof-fixture.d.ts.map +0 -1
  162. package/dist/__tests__/mock-proof-fixture.js +0 -34
  163. package/dist/__tests__/mock-proof-fixture.js.map +0 -1
  164. package/dist/__tests__/policy-enforcement.test.d.ts +0 -2
  165. package/dist/__tests__/policy-enforcement.test.d.ts.map +0 -1
  166. package/dist/__tests__/policy-enforcement.test.js +0 -188
  167. package/dist/__tests__/policy-enforcement.test.js.map +0 -1
  168. package/dist/__tests__/proof-hash-regression.test.d.ts +0 -2
  169. package/dist/__tests__/proof-hash-regression.test.d.ts.map +0 -1
  170. package/dist/__tests__/proof-hash-regression.test.js +0 -95
  171. package/dist/__tests__/proof-hash-regression.test.js.map +0 -1
  172. package/dist/__tests__/proof-hash.test.d.ts +0 -2
  173. package/dist/__tests__/proof-hash.test.d.ts.map +0 -1
  174. package/dist/__tests__/proof-hash.test.js +0 -116
  175. package/dist/__tests__/proof-hash.test.js.map +0 -1
  176. package/dist/__tests__/proof-integrity.test.d.ts +0 -2
  177. package/dist/__tests__/proof-integrity.test.d.ts.map +0 -1
  178. package/dist/__tests__/proof-integrity.test.js +0 -426
  179. package/dist/__tests__/proof-integrity.test.js.map +0 -1
  180. package/dist/__tests__/realistic-proof-fixture.d.ts +0 -56
  181. package/dist/__tests__/realistic-proof-fixture.d.ts.map +0 -1
  182. package/dist/__tests__/realistic-proof-fixture.js +0 -57
  183. package/dist/__tests__/realistic-proof-fixture.js.map +0 -1
  184. package/dist/__tests__/verifier.test.d.ts +0 -2
  185. package/dist/__tests__/verifier.test.d.ts.map +0 -1
  186. package/dist/__tests__/verifier.test.js +0 -531
  187. package/dist/__tests__/verifier.test.js.map +0 -1
  188. package/dist/canonical.d.ts +0 -54
  189. package/dist/canonical.d.ts.map +0 -1
  190. package/dist/canonical.js +0 -119
  191. package/dist/canonical.js.map +0 -1
  192. package/dist/proof-hash.d.ts +0 -9
  193. package/dist/proof-hash.d.ts.map +0 -1
  194. package/dist/proof-hash.js +0 -75
  195. package/dist/proof-hash.js.map +0 -1
  196. package/dist/types.d.ts +0 -705
  197. package/dist/types.d.ts.map +0 -1
  198. package/dist/types.js +0 -3
  199. package/dist/types.js.map +0 -1
  200. package/dist/verifier.d.ts +0 -27
  201. package/dist/verifier.d.ts.map +0 -1
  202. package/dist/verifier.js +0 -844
  203. package/dist/verifier.js.map +0 -1
  204. package/src/__tests__/audit-anchors.test.ts +0 -188
  205. package/src/__tests__/audit-anomalies.test.ts +0 -815
  206. package/src/__tests__/audit-attestation.test.ts +0 -529
  207. package/src/__tests__/audit-bench-smoke.test.ts +0 -108
  208. package/src/__tests__/audit-boundary.test.ts +0 -96
  209. package/src/__tests__/audit-cli.test.ts +0 -288
  210. package/src/__tests__/audit-dependencies.test.ts +0 -141
  211. package/src/__tests__/audit-fixtures.ts +0 -736
  212. package/src/__tests__/audit-ingest.test.ts +0 -575
  213. package/src/__tests__/audit-memory-ingest.test.ts +0 -156
  214. package/src/__tests__/audit-property.test.ts +0 -892
  215. package/src/__tests__/audit-real-fixtures.test.ts +0 -153
  216. package/src/__tests__/audit-real-live.test.ts +0 -128
  217. package/src/__tests__/audit-reconstruct.test.ts +0 -353
  218. package/src/__tests__/audit-report.test.ts +0 -222
  219. package/src/__tests__/audit-roundtrip.test.ts +0 -464
  220. package/src/__tests__/audit-temporal.test.ts +0 -446
  221. package/src/__tests__/audit-tiers.test.ts +0 -343
  222. package/src/__tests__/audit-witness-real.test.ts +0 -92
  223. package/src/__tests__/audit-witness.test.ts +0 -345
  224. package/src/__tests__/canonical.test.ts +0 -253
  225. package/src/__tests__/chain-hash-anchor.test.ts +0 -67
  226. package/src/__tests__/commit-service.integration.test.ts +0 -117
  227. package/src/__tests__/constructor.test.ts +0 -340
  228. package/src/__tests__/declared-proof-fixture.ts +0 -65
  229. package/src/__tests__/fuse-placement.test.ts +0 -32
  230. package/src/__tests__/fuse-roundtrip.test.ts +0 -243
  231. package/src/__tests__/fuse-sdk.test.ts +0 -142
  232. package/src/__tests__/fuse-set-sdk.test.ts +0 -852
  233. package/src/__tests__/fuse-set.test.ts +0 -1005
  234. package/src/__tests__/fuse-set2.test.ts +0 -343
  235. package/src/__tests__/fuse-vectors.test.ts +0 -218
  236. package/src/__tests__/fuse-verify.test.ts +0 -278
  237. package/src/__tests__/hello-world.test.ts +0 -10
  238. package/src/__tests__/mock-proof-fixture.ts +0 -36
  239. package/src/__tests__/policy-enforcement.test.ts +0 -226
  240. package/src/__tests__/proof-hash-regression.test.ts +0 -107
  241. package/src/__tests__/proof-hash.test.ts +0 -129
  242. package/src/__tests__/proof-integrity.test.ts +0 -541
  243. package/src/__tests__/real-fixtures/anchor-after-112762.json +0 -47
  244. package/src/__tests__/real-fixtures/anchor-with-ethereum-112758.json +0 -47
  245. package/src/__tests__/real-fixtures/live-proof-0.json +0 -42
  246. package/src/__tests__/real-fixtures/live-proof-1.json +0 -43
  247. package/src/__tests__/real-fixtures/live-proof-2.json +0 -43
  248. package/src/__tests__/real-fixtures/successor-112760.json +0 -38
  249. package/src/__tests__/real-fixtures/witness-25525146.json +0 -6
  250. package/src/__tests__/real-fixtures/witness-25525147.json +0 -6
  251. package/src/__tests__/realistic-proof-fixture.ts +0 -57
  252. package/src/__tests__/verifier.test.ts +0 -624
@@ -1,368 +0,0 @@
1
- // Copyright (c) Mike Argento. All rights reserved. See LICENSE.
2
- /**
3
- * Export round trip (Phase 5, mandatory per the build brief): a synthetic
4
- * epoch (real signed chain, an interleaved Ethereum anchor, and a valid
5
- * offline witness) goes through the archive builder, the resulting .tar.gz
6
- * goes through the full audit pipeline, and the report must come back
7
- * completely clean. Also covers the open-epoch snapshot manifest round
8
- * trip, builder determinism, and conformance of the website's independent
9
- * export assembly (website/src/lib/export-epoch.ts, imported by a spawned
10
- * node process under type stripping) against the reference builder,
11
- * byte for byte.
12
- *
13
- * All data is synthetic and local. No network, no live ledger, ever.
14
- */
15
- import { describe, it, before } from "node:test";
16
- import * as assert from "node:assert/strict";
17
- import { execFile } from "node:child_process";
18
- import { promisify } from "node:util";
19
- import { readFile, writeFile } from "node:fs/promises";
20
- import { join } from "node:path";
21
- import { fileURLToPath, pathToFileURL } from "node:url";
22
- import { createRequire } from "node:module";
23
- import { keccak_256 } from "@noble/hashes/sha3";
24
- import { buildBundleArchive, runAudit, computeExitFlags, buildJsonReport, } from "@mikeargento/bitgraph-audit";
25
- import { utf8, makeCounterChain, makeAnchorProof, makeEthereumHeader, makeTempDir, storedProofJson, } from "./audit-fixtures.js";
26
- const execFileAsync = promisify(execFile);
27
- const EPOCH_ID = "epoch-roundtrip-1";
28
- const CHAIN_ID = "bitgraph:main";
29
- const MEASUREMENT = "test-measurement-roundtrip";
30
- const GENERATED_AT = "2026-07-10T00:00:00Z";
31
- const BLOCK_NUMBER = 987654;
32
- const BLOCK_TIMESTAMP = 1_720_000_000;
33
- const pad12 = (counter) => counter.padStart(12, "0");
34
- const toSafe = (value) => value.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
35
- /**
36
- * One epoch, one signer, one chain, enclave-shaped counters:
37
- * user proofs at slot/commit 1/2 and 3/4, an Ethereum anchor at 5/6, then
38
- * user proofs at 7/8 and 9/10, all prevB64-linked into one intact chain.
39
- * The anchor's block hash is the Keccak-256 of a synthetic RLP header, so
40
- * the witness verifies fully offline.
41
- */
42
- async function makeSyntheticEpoch() {
43
- const part1 = await makeCounterChain({
44
- epochId: EPOCH_ID,
45
- pairs: [
46
- { slot: "1", commit: "2" },
47
- { slot: "3", commit: "4" },
48
- ],
49
- chainId: CHAIN_ID,
50
- measurement: MEASUREMENT,
51
- payloadPrefix: "rt-part1",
52
- });
53
- const { headerBytes, headerRlpHex } = makeEthereumHeader({
54
- blockNumber: BLOCK_NUMBER,
55
- timestamp: BLOCK_TIMESTAMP,
56
- });
57
- const blockHash = `0x${Buffer.from(keccak_256(headerBytes)).toString("hex")}`;
58
- const anchor = await makeAnchorProof({
59
- blockHash,
60
- blockNumber: BLOCK_NUMBER,
61
- key: part1.key,
62
- epochId: EPOCH_ID,
63
- counter: "6",
64
- slotCounter: "5",
65
- prevB64: part1.proofs[1].chainHash,
66
- chainId: CHAIN_ID,
67
- measurement: MEASUREMENT,
68
- });
69
- const part2 = await makeCounterChain({
70
- epochId: EPOCH_ID,
71
- pairs: [
72
- { slot: "7", commit: "8" },
73
- { slot: "9", commit: "10" },
74
- ],
75
- key: part1.key,
76
- chainId: CHAIN_ID,
77
- measurement: MEASUREMENT,
78
- payloadPrefix: "rt-part2",
79
- prevB64OfFirst: anchor.chainHash,
80
- });
81
- const userProofs = [...part1.proofs, ...part2.proofs];
82
- const witness = {
83
- version: "bitgraph-anchor-witness/1",
84
- headerRlpHex,
85
- blockNumber: BLOCK_NUMBER,
86
- blockHash,
87
- };
88
- const members = [
89
- ...part1.proofs.map((p) => ({ proof: p.proof, proofHash: p.proofHash })),
90
- { proof: anchor.proof, proofHash: anchor.proofHash },
91
- ...part2.proofs.map((p) => ({ proof: p.proof, proofHash: p.proofHash })),
92
- ];
93
- return { userProofs, anchor, blockHash, witness, members };
94
- }
95
- function builderInput(epoch, extras) {
96
- return {
97
- proofs: epoch.userProofs.map((p) => ({ proof: p.proof, storedProofHash: p.proofHash })),
98
- anchors: [{ proof: epoch.anchor.proof, storedProofHash: epoch.anchor.proofHash }],
99
- witnesses: [{ path: `witnesses/${BLOCK_NUMBER}.json`, witness: epoch.witness }],
100
- artifactFiles: [
101
- ...epoch.userProofs.map((p, i) => ({ name: `payload-${i}.bin`, bytes: p.bytes })),
102
- { name: "anchor-block-hash.txt", bytes: utf8(epoch.blockHash) },
103
- ],
104
- epochIds: [EPOCH_ID],
105
- chainIds: [CHAIN_ID],
106
- generatedAt: GENERATED_AT,
107
- ...extras,
108
- };
109
- }
110
- /** Every clean-report assertion in one place, shared by the variants. */
111
- function assertCleanAudit(result, expected) {
112
- const expectedWitnesses = expected.verifiedWitnesses ?? 1;
113
- const flags = computeExitFlags(result);
114
- assert.equal(flags.code, 0, "exit flags must be 0 (clean)");
115
- assert.equal(result.ingest.counts.observed, 5);
116
- assert.equal(result.ingest.counts.unsupportedVersion, 0);
117
- assert.equal(result.ingest.counts.exactDuplicates, 0);
118
- assert.equal(result.ingest.counts.semanticDuplicates, 0);
119
- assert.deepEqual(result.ingest.findings, [], "zero ingest findings");
120
- assert.equal(result.verification.total, 5);
121
- assert.equal(result.verification.verified, expected.verified);
122
- assert.equal(result.verification.failed, 0);
123
- assert.equal(result.verification.artifactUnavailable, expected.artifactUnavailable);
124
- assert.equal(result.verification.chainless, 0);
125
- assert.deepEqual(result.anomalies.anomalies, [], "zero chain anomalies");
126
- assert.deepEqual(result.anomalies.divergences, [], "zero divergences");
127
- assert.deepEqual(result.authorities.anomalies, [], "zero authority anomalies");
128
- assert.deepEqual(result.anchors.findings, [], "zero anchor findings");
129
- assert.deepEqual(result.witnesses.findings, [], "zero witness findings");
130
- assert.deepEqual(result.attestations.findings, [], "zero attestation findings");
131
- // One partition, one intact component.
132
- assert.equal(result.reconstruction.partitions.length, 1);
133
- assert.equal(result.reconstruction.partitions[0].components.length, 1);
134
- assert.equal(result.reconstruction.partitions[0].components[0].memberProofHashes.length, 5);
135
- // Manifest: recognized, valid, contents hash verifies, counts match.
136
- const manifest = result.ingest.manifest;
137
- assert.ok(manifest, "manifest present");
138
- assert.equal(manifest.parsed, true);
139
- assert.equal(manifest.recognized, true);
140
- assert.deepEqual(manifest.problems, []);
141
- assert.ok(manifest.contentsHash, "manifest declared a contents hash");
142
- assert.equal(manifest.contentsHash.match, true, "manifest contents hash verifies");
143
- assert.equal(manifest.manifest["proofCount"], result.ingest.counts.observed, "manifest proofCount matches observed");
144
- assert.deepEqual(manifest.manifest["epochIds"], [EPOCH_ID]);
145
- assert.deepEqual(manifest.manifest["chainIds"], [CHAIN_ID]);
146
- assert.deepEqual(manifest.manifest["counterRanges"], [
147
- { epochId: EPOCH_ID, chainId: CHAIN_ID, min: "2", max: "10" },
148
- ]);
149
- // The anchor is identified from its signed attribution regardless of
150
- // witness presence. When the bundle carries a witness (the reference
151
- // builder variants), it verifies fully offline and yields the header
152
- // timestamp as evidence; website exports carry no witnesses because the
153
- // ledger stores neither witnesses nor artifacts.
154
- assert.equal(result.anchors.anchors.length, 1);
155
- assert.equal(result.anchors.anchors[0].blockNumber, String(BLOCK_NUMBER));
156
- const outcomes = result.witnesses.outcomes.filter((o) => o.verified);
157
- assert.equal(outcomes.length, expectedWitnesses, "verified witness outcomes");
158
- if (expectedWitnesses > 0) {
159
- assert.equal(outcomes[0].timestamp, BLOCK_TIMESTAMP);
160
- assert.equal(outcomes[0].blockNumber, String(BLOCK_NUMBER));
161
- }
162
- // Report-level verdicts.
163
- const report = buildJsonReport(result);
164
- assert.equal(report.summary.chainIntact, true, "chain intact");
165
- assert.deepEqual(report.summary.anomalyCountsByCode, {});
166
- assert.equal(report.summary.temporal.anchorsWithVerifiedWitness, expectedWitnesses);
167
- assert.equal(report.summary.exit.code, 0);
168
- }
169
- describe("export round trip: buildBundleArchive -> runAudit", () => {
170
- let epoch;
171
- before(async () => {
172
- epoch = await makeSyntheticEpoch();
173
- });
174
- it("closed-epoch archive with artifacts audits completely clean", async () => {
175
- const archive = buildBundleArchive(builderInput(epoch));
176
- const dir = await makeTempDir("bitgraph-roundtrip-closed-");
177
- const bundlePath = join(dir, "bundle.tar.gz");
178
- await writeFile(bundlePath, archive);
179
- const result = await runAudit(bundlePath);
180
- assertCleanAudit(result, { verified: 5, artifactUnavailable: 0 });
181
- assert.equal(result.ingest.container, "tar-gz");
182
- assert.equal(result.ingest.manifest.manifest["artifactsIncluded"], true);
183
- assert.equal(result.ingest.manifest.manifest["openEpochs"], undefined);
184
- });
185
- it("open-epoch snapshot: openEpochs round-trips through the manifest and audits clean", async () => {
186
- const openEpochs = [{ epochId: EPOCH_ID, counterAtSnapshot: "10" }];
187
- const archive = buildBundleArchive(builderInput(epoch, { openEpochs }));
188
- const dir = await makeTempDir("bitgraph-roundtrip-open-");
189
- const bundlePath = join(dir, "bundle.tar.gz");
190
- await writeFile(bundlePath, archive);
191
- const result = await runAudit(bundlePath);
192
- assertCleanAudit(result, { verified: 5, artifactUnavailable: 0 });
193
- assert.deepEqual(result.ingest.manifest.manifest["openEpochs"], openEpochs, "openEpochs round-trips");
194
- });
195
- it("is deterministic: the same input produces a byte-identical archive", () => {
196
- const a = buildBundleArchive(builderInput(epoch));
197
- const c = buildBundleArchive(builderInput(epoch));
198
- assert.ok(Buffer.from(a).equals(Buffer.from(c)), "two builds of the same input are byte-identical");
199
- });
200
- it("rejects producer-conformance violations deterministically", async () => {
201
- // Non-bitgraph/1 member.
202
- assert.throws(() => buildBundleArchive({
203
- proofs: [{ proof: { version: "occ/1" } }],
204
- epochIds: [],
205
- chainIds: [],
206
- }), /only bitgraph\/1 proofs/);
207
- // storedProofHash disagreeing with the computed canonical hash.
208
- assert.throws(() => buildBundleArchive({
209
- proofs: [{ proof: epoch.userProofs[0].proof, storedProofHash: "bm90LXRoZS1oYXNo" }],
210
- epochIds: [EPOCH_ID],
211
- chainIds: [CHAIN_ID],
212
- }), /storedProofHash does not match/);
213
- // Duplicate canonical identity.
214
- assert.throws(() => buildBundleArchive({
215
- proofs: [
216
- { proof: epoch.userProofs[0].proof },
217
- { proof: epoch.userProofs[0].proof },
218
- ],
219
- epochIds: [EPOCH_ID],
220
- chainIds: [CHAIN_ID],
221
- }), /duplicate proof/);
222
- // Unsafe witness path.
223
- assert.throws(() => buildBundleArchive({
224
- proofs: [{ proof: epoch.userProofs[0].proof }],
225
- witnesses: [{ path: "../escape.json", witness: {} }],
226
- epochIds: [EPOCH_ID],
227
- chainIds: [CHAIN_ID],
228
- }), /unsafe component/);
229
- });
230
- });
231
- // ---------------------------------------------------------------------------
232
- // Website conformance: the independent assembly in
233
- // website/src/lib/export-epoch.ts must produce a spec-conformant bundle,
234
- // byte-identical to the reference builder for the same input. The website
235
- // lib is imported by a SPAWNED node process under type stripping (it is
236
- // self-contained: node builtins only), because the website's tsconfig and
237
- // package scope are separate from the root project.
238
- // ---------------------------------------------------------------------------
239
- const WEBSITE_LIB_PATH = fileURLToPath(new URL("../../website/src/lib/export-epoch.ts", import.meta.url));
240
- // The website lib is TypeScript and self-contained (node builtins only).
241
- // Transpile it to plain ESM with the TypeScript compiler rather than relying
242
- // on the Node runtime to strip types: native type stripping is on by default
243
- // only on Node 22.6 and up, so importing the .ts directly fails on the Node 20
244
- // floor that CI runs against. Transpiling here makes the spawned runner import
245
- // work identically on every supported Node version.
246
- const tsRequire = createRequire(import.meta.url);
247
- async function transpileWebsiteLib(destDir) {
248
- const ts = tsRequire("typescript");
249
- const source = await readFile(WEBSITE_LIB_PATH, "utf8");
250
- const js = ts.transpileModule(source, {
251
- compilerOptions: {
252
- module: ts.ModuleKind.ESNext,
253
- target: ts.ScriptTarget.ES2022,
254
- },
255
- }).outputText;
256
- const libPath = join(destDir, "export-epoch.mjs");
257
- await writeFile(libPath, js);
258
- return pathToFileURL(libPath).href;
259
- }
260
- const RUNNER_SOURCE = `
261
- const [configPath] = process.argv.slice(2);
262
- const { readFile, writeFile } = await import("node:fs/promises");
263
- const config = JSON.parse(await readFile(configPath, "utf8"));
264
- const mod = await import(config.libUrl);
265
- const source = {
266
- listProofKeys: async () => config.proofKeys,
267
- listAnchorKeys: async () => config.anchorKeys,
268
- getObjectText: async (key) => Object.hasOwn(config.objects, key) ? config.objects[key] : null,
269
- getCurrentEpochSafeId: async () => config.currentSafeId,
270
- };
271
- const result = await mod.exportEpoch(source, config.safeEpochId, config.generatedAt);
272
- if (result === null) {
273
- console.error("exportEpoch returned null");
274
- process.exit(2);
275
- }
276
- await writeFile(config.outPath, result.archive);
277
- await writeFile(config.metaPath, JSON.stringify({
278
- open: result.open,
279
- proofCount: result.proofCount,
280
- epochId: result.epochId,
281
- maxCounter: result.maxCounter,
282
- skipped: result.skipped,
283
- }));
284
- `;
285
- async function runWebsiteExport(epoch, opts) {
286
- const dir = await makeTempDir("bitgraph-roundtrip-website-");
287
- const safeEpoch = toSafe(EPOCH_ID);
288
- // The in-memory ledger view: stored-form proofs under proofs/{epoch}/,
289
- // plus the anchors/ index copy of the anchor (extra unsigned "ethereum"
290
- // field, no hash suffix in the key) that the exporter must dedup, never
291
- // mirror.
292
- const objects = {};
293
- const proofKeys = [];
294
- for (const member of epoch.members) {
295
- const counter = member.proof.commit.counter ?? "0";
296
- const key = `proofs/${safeEpoch}/${pad12(counter)}-${toSafe(member.proofHash)}.json`;
297
- objects[key] = storedProofJson(member.proof, member.proofHash);
298
- proofKeys.push(key);
299
- }
300
- proofKeys.sort();
301
- const anchorIndexKey = `anchors/${safeEpoch}/${pad12("6")}.json`;
302
- objects[anchorIndexKey] = JSON.stringify({
303
- ...JSON.parse(storedProofJson(epoch.anchor.proof, epoch.anchor.proofHash)),
304
- ethereum: { blockNumber: BLOCK_NUMBER, blockHash: epoch.blockHash },
305
- });
306
- const runnerPath = join(dir, "runner.mjs");
307
- const configPath = join(dir, "config.json");
308
- const outPath = join(dir, "website-export.tar.gz");
309
- const metaPath = join(dir, "meta.json");
310
- const libUrl = await transpileWebsiteLib(dir);
311
- await writeFile(runnerPath, RUNNER_SOURCE);
312
- await writeFile(configPath, JSON.stringify({
313
- libUrl,
314
- safeEpochId: safeEpoch,
315
- currentSafeId: opts.open ? safeEpoch : "some-other-epoch",
316
- generatedAt: GENERATED_AT,
317
- proofKeys,
318
- anchorKeys: [anchorIndexKey],
319
- objects,
320
- outPath,
321
- metaPath,
322
- }));
323
- await execFileAsync(process.execPath, [runnerPath, configPath]);
324
- const meta = JSON.parse(await readFile(metaPath, "utf8"));
325
- return { archivePath: outPath, meta };
326
- }
327
- describe("export round trip: website export-epoch conformance", () => {
328
- let epoch;
329
- before(async () => {
330
- epoch = await makeSyntheticEpoch();
331
- });
332
- it("closed-epoch website export is byte-identical to the reference builder and audits clean", async () => {
333
- const { archivePath, meta } = await runWebsiteExport(epoch, { open: false });
334
- assert.equal(meta.open, false);
335
- assert.equal(meta.proofCount, 5);
336
- assert.equal(meta.epochId, EPOCH_ID);
337
- assert.equal(meta.maxCounter, "10");
338
- // Exactly one skip: the anchors/ index copy, deduped by stored proofHash.
339
- assert.equal(meta.skipped, 1);
340
- const websiteArchive = await readFile(archivePath);
341
- // Reference builder, same input: all five members under proofs/ (the
342
- // website exports the proofs/ listing, where anchors already live), no
343
- // witnesses or artifacts (the ledger stores neither).
344
- const reference = buildBundleArchive({
345
- proofs: epoch.members.map((m) => ({ proof: m.proof, storedProofHash: m.proofHash })),
346
- epochIds: [EPOCH_ID],
347
- chainIds: [CHAIN_ID],
348
- generatedAt: GENERATED_AT,
349
- });
350
- assert.ok(websiteArchive.equals(Buffer.from(reference)), "website assembly is byte-identical to the reference builder for the same input");
351
- const result = await runAudit(archivePath);
352
- // No artifact bytes in a ledger export: every member is
353
- // artifact-unavailable at the integrity tier, and that is not a failure.
354
- assertCleanAudit(result, { verified: 0, artifactUnavailable: 5, verifiedWitnesses: 0 });
355
- assert.equal(result.ingest.manifest.manifest["artifactsIncluded"], false);
356
- assert.equal(result.ingest.manifest.manifest["openEpochs"], undefined);
357
- });
358
- it("open-epoch website export carries the openEpochs snapshot and audits clean", async () => {
359
- const { archivePath, meta } = await runWebsiteExport(epoch, { open: true });
360
- assert.equal(meta.open, true);
361
- const result = await runAudit(archivePath);
362
- assertCleanAudit(result, { verified: 0, artifactUnavailable: 5, verifiedWitnesses: 0 });
363
- assert.deepEqual(result.ingest.manifest.manifest["openEpochs"], [
364
- { epochId: EPOCH_ID, counterAtSnapshot: "10" },
365
- ]);
366
- });
367
- });
368
- //# sourceMappingURL=audit-roundtrip.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-roundtrip.test.js","sourceRoot":"","sources":["../../src/__tests__/audit-roundtrip.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=audit-temporal.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-temporal.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/audit-temporal.test.ts"],"names":[],"mappings":""}