@mikeargento/bitgraph 1.9.1 → 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 (239) hide show
  1. package/package.json +9 -6
  2. package/dist/__tests__/audit-anchors.test.d.ts +0 -2
  3. package/dist/__tests__/audit-anchors.test.d.ts.map +0 -1
  4. package/dist/__tests__/audit-anchors.test.js +0 -152
  5. package/dist/__tests__/audit-anchors.test.js.map +0 -1
  6. package/dist/__tests__/audit-anomalies.test.d.ts +0 -2
  7. package/dist/__tests__/audit-anomalies.test.d.ts.map +0 -1
  8. package/dist/__tests__/audit-anomalies.test.js +0 -663
  9. package/dist/__tests__/audit-anomalies.test.js.map +0 -1
  10. package/dist/__tests__/audit-attestation.test.d.ts +0 -2
  11. package/dist/__tests__/audit-attestation.test.d.ts.map +0 -1
  12. package/dist/__tests__/audit-attestation.test.js +0 -403
  13. package/dist/__tests__/audit-attestation.test.js.map +0 -1
  14. package/dist/__tests__/audit-bench-smoke.test.d.ts +0 -2
  15. package/dist/__tests__/audit-bench-smoke.test.d.ts.map +0 -1
  16. package/dist/__tests__/audit-bench-smoke.test.js +0 -87
  17. package/dist/__tests__/audit-bench-smoke.test.js.map +0 -1
  18. package/dist/__tests__/audit-boundary.test.d.ts +0 -20
  19. package/dist/__tests__/audit-boundary.test.d.ts.map +0 -1
  20. package/dist/__tests__/audit-boundary.test.js +0 -84
  21. package/dist/__tests__/audit-boundary.test.js.map +0 -1
  22. package/dist/__tests__/audit-cli.test.d.ts +0 -2
  23. package/dist/__tests__/audit-cli.test.d.ts.map +0 -1
  24. package/dist/__tests__/audit-cli.test.js +0 -239
  25. package/dist/__tests__/audit-cli.test.js.map +0 -1
  26. package/dist/__tests__/audit-dependencies.test.d.ts +0 -2
  27. package/dist/__tests__/audit-dependencies.test.d.ts.map +0 -1
  28. package/dist/__tests__/audit-dependencies.test.js +0 -116
  29. package/dist/__tests__/audit-dependencies.test.js.map +0 -1
  30. package/dist/__tests__/audit-fixtures.d.ts +0 -265
  31. package/dist/__tests__/audit-fixtures.d.ts.map +0 -1
  32. package/dist/__tests__/audit-fixtures.js +0 -511
  33. package/dist/__tests__/audit-fixtures.js.map +0 -1
  34. package/dist/__tests__/audit-ingest.test.d.ts +0 -2
  35. package/dist/__tests__/audit-ingest.test.d.ts.map +0 -1
  36. package/dist/__tests__/audit-ingest.test.js +0 -473
  37. package/dist/__tests__/audit-ingest.test.js.map +0 -1
  38. package/dist/__tests__/audit-memory-ingest.test.d.ts +0 -12
  39. package/dist/__tests__/audit-memory-ingest.test.d.ts.map +0 -1
  40. package/dist/__tests__/audit-memory-ingest.test.js +0 -135
  41. package/dist/__tests__/audit-memory-ingest.test.js.map +0 -1
  42. package/dist/__tests__/audit-property.test.d.ts +0 -2
  43. package/dist/__tests__/audit-property.test.d.ts.map +0 -1
  44. package/dist/__tests__/audit-property.test.js +0 -771
  45. package/dist/__tests__/audit-property.test.js.map +0 -1
  46. package/dist/__tests__/audit-real-fixtures.test.d.ts +0 -2
  47. package/dist/__tests__/audit-real-fixtures.test.d.ts.map +0 -1
  48. package/dist/__tests__/audit-real-fixtures.test.js +0 -132
  49. package/dist/__tests__/audit-real-fixtures.test.js.map +0 -1
  50. package/dist/__tests__/audit-real-live.test.d.ts +0 -2
  51. package/dist/__tests__/audit-real-live.test.d.ts.map +0 -1
  52. package/dist/__tests__/audit-real-live.test.js +0 -107
  53. package/dist/__tests__/audit-real-live.test.js.map +0 -1
  54. package/dist/__tests__/audit-reconstruct.test.d.ts +0 -2
  55. package/dist/__tests__/audit-reconstruct.test.d.ts.map +0 -1
  56. package/dist/__tests__/audit-reconstruct.test.js +0 -287
  57. package/dist/__tests__/audit-reconstruct.test.js.map +0 -1
  58. package/dist/__tests__/audit-report.test.d.ts +0 -2
  59. package/dist/__tests__/audit-report.test.d.ts.map +0 -1
  60. package/dist/__tests__/audit-report.test.js +0 -186
  61. package/dist/__tests__/audit-report.test.js.map +0 -1
  62. package/dist/__tests__/audit-roundtrip.test.d.ts +0 -2
  63. package/dist/__tests__/audit-roundtrip.test.d.ts.map +0 -1
  64. package/dist/__tests__/audit-roundtrip.test.js +0 -368
  65. package/dist/__tests__/audit-roundtrip.test.js.map +0 -1
  66. package/dist/__tests__/audit-temporal.test.d.ts +0 -2
  67. package/dist/__tests__/audit-temporal.test.d.ts.map +0 -1
  68. package/dist/__tests__/audit-temporal.test.js +0 -364
  69. package/dist/__tests__/audit-temporal.test.js.map +0 -1
  70. package/dist/__tests__/audit-tiers.test.d.ts +0 -2
  71. package/dist/__tests__/audit-tiers.test.d.ts.map +0 -1
  72. package/dist/__tests__/audit-tiers.test.js +0 -282
  73. package/dist/__tests__/audit-tiers.test.js.map +0 -1
  74. package/dist/__tests__/audit-witness-real.test.d.ts +0 -19
  75. package/dist/__tests__/audit-witness-real.test.d.ts.map +0 -1
  76. package/dist/__tests__/audit-witness-real.test.js +0 -82
  77. package/dist/__tests__/audit-witness-real.test.js.map +0 -1
  78. package/dist/__tests__/audit-witness.test.d.ts +0 -2
  79. package/dist/__tests__/audit-witness.test.d.ts.map +0 -1
  80. package/dist/__tests__/audit-witness.test.js +0 -308
  81. package/dist/__tests__/audit-witness.test.js.map +0 -1
  82. package/dist/__tests__/canonical.test.d.ts +0 -2
  83. package/dist/__tests__/canonical.test.d.ts.map +0 -1
  84. package/dist/__tests__/canonical.test.js +0 -162
  85. package/dist/__tests__/canonical.test.js.map +0 -1
  86. package/dist/__tests__/chain-hash-anchor.test.d.ts +0 -22
  87. package/dist/__tests__/chain-hash-anchor.test.d.ts.map +0 -1
  88. package/dist/__tests__/chain-hash-anchor.test.js +0 -55
  89. package/dist/__tests__/chain-hash-anchor.test.js.map +0 -1
  90. package/dist/__tests__/commit-service.integration.test.d.ts +0 -2
  91. package/dist/__tests__/commit-service.integration.test.d.ts.map +0 -1
  92. package/dist/__tests__/commit-service.integration.test.js +0 -95
  93. package/dist/__tests__/commit-service.integration.test.js.map +0 -1
  94. package/dist/__tests__/constructor.test.d.ts +0 -2
  95. package/dist/__tests__/constructor.test.d.ts.map +0 -1
  96. package/dist/__tests__/constructor.test.js +0 -267
  97. package/dist/__tests__/constructor.test.js.map +0 -1
  98. package/dist/__tests__/declared-proof-fixture.d.ts +0 -66
  99. package/dist/__tests__/declared-proof-fixture.d.ts.map +0 -1
  100. package/dist/__tests__/declared-proof-fixture.js +0 -66
  101. package/dist/__tests__/declared-proof-fixture.js.map +0 -1
  102. package/dist/__tests__/fuse-inline.test.d.ts +0 -2
  103. package/dist/__tests__/fuse-inline.test.d.ts.map +0 -1
  104. package/dist/__tests__/fuse-inline.test.js +0 -181
  105. package/dist/__tests__/fuse-inline.test.js.map +0 -1
  106. package/dist/__tests__/fuse-placement.test.d.ts +0 -2
  107. package/dist/__tests__/fuse-placement.test.d.ts.map +0 -1
  108. package/dist/__tests__/fuse-placement.test.js +0 -31
  109. package/dist/__tests__/fuse-placement.test.js.map +0 -1
  110. package/dist/__tests__/fuse-roundtrip.test.d.ts +0 -2
  111. package/dist/__tests__/fuse-roundtrip.test.d.ts.map +0 -1
  112. package/dist/__tests__/fuse-roundtrip.test.js +0 -241
  113. package/dist/__tests__/fuse-roundtrip.test.js.map +0 -1
  114. package/dist/__tests__/fuse-sdk.test.d.ts +0 -2
  115. package/dist/__tests__/fuse-sdk.test.d.ts.map +0 -1
  116. package/dist/__tests__/fuse-sdk.test.js +0 -117
  117. package/dist/__tests__/fuse-sdk.test.js.map +0 -1
  118. package/dist/__tests__/fuse-set-sdk.test.d.ts +0 -2
  119. package/dist/__tests__/fuse-set-sdk.test.d.ts.map +0 -1
  120. package/dist/__tests__/fuse-set-sdk.test.js +0 -721
  121. package/dist/__tests__/fuse-set-sdk.test.js.map +0 -1
  122. package/dist/__tests__/fuse-set.test.d.ts +0 -2
  123. package/dist/__tests__/fuse-set.test.d.ts.map +0 -1
  124. package/dist/__tests__/fuse-set.test.js +0 -889
  125. package/dist/__tests__/fuse-set.test.js.map +0 -1
  126. package/dist/__tests__/fuse-set2.test.d.ts +0 -2
  127. package/dist/__tests__/fuse-set2.test.d.ts.map +0 -1
  128. package/dist/__tests__/fuse-set2.test.js +0 -294
  129. package/dist/__tests__/fuse-set2.test.js.map +0 -1
  130. package/dist/__tests__/fuse-vectors.test.d.ts +0 -2
  131. package/dist/__tests__/fuse-vectors.test.d.ts.map +0 -1
  132. package/dist/__tests__/fuse-vectors.test.js +0 -175
  133. package/dist/__tests__/fuse-vectors.test.js.map +0 -1
  134. package/dist/__tests__/fuse-verify.test.d.ts +0 -2
  135. package/dist/__tests__/fuse-verify.test.d.ts.map +0 -1
  136. package/dist/__tests__/fuse-verify.test.js +0 -250
  137. package/dist/__tests__/fuse-verify.test.js.map +0 -1
  138. package/dist/__tests__/hello-world.test.d.ts +0 -2
  139. package/dist/__tests__/hello-world.test.d.ts.map +0 -1
  140. package/dist/__tests__/hello-world.test.js +0 -9
  141. package/dist/__tests__/hello-world.test.js.map +0 -1
  142. package/dist/__tests__/mock-proof-fixture.d.ts +0 -15
  143. package/dist/__tests__/mock-proof-fixture.d.ts.map +0 -1
  144. package/dist/__tests__/mock-proof-fixture.js +0 -34
  145. package/dist/__tests__/mock-proof-fixture.js.map +0 -1
  146. package/dist/__tests__/policy-enforcement.test.d.ts +0 -2
  147. package/dist/__tests__/policy-enforcement.test.d.ts.map +0 -1
  148. package/dist/__tests__/policy-enforcement.test.js +0 -188
  149. package/dist/__tests__/policy-enforcement.test.js.map +0 -1
  150. package/dist/__tests__/proof-hash-regression.test.d.ts +0 -2
  151. package/dist/__tests__/proof-hash-regression.test.d.ts.map +0 -1
  152. package/dist/__tests__/proof-hash-regression.test.js +0 -95
  153. package/dist/__tests__/proof-hash-regression.test.js.map +0 -1
  154. package/dist/__tests__/proof-hash.test.d.ts +0 -2
  155. package/dist/__tests__/proof-hash.test.d.ts.map +0 -1
  156. package/dist/__tests__/proof-hash.test.js +0 -116
  157. package/dist/__tests__/proof-hash.test.js.map +0 -1
  158. package/dist/__tests__/proof-integrity.test.d.ts +0 -2
  159. package/dist/__tests__/proof-integrity.test.d.ts.map +0 -1
  160. package/dist/__tests__/proof-integrity.test.js +0 -454
  161. package/dist/__tests__/proof-integrity.test.js.map +0 -1
  162. package/dist/__tests__/realistic-proof-fixture.d.ts +0 -56
  163. package/dist/__tests__/realistic-proof-fixture.d.ts.map +0 -1
  164. package/dist/__tests__/realistic-proof-fixture.js +0 -57
  165. package/dist/__tests__/realistic-proof-fixture.js.map +0 -1
  166. package/dist/__tests__/run.test.d.ts +0 -2
  167. package/dist/__tests__/run.test.d.ts.map +0 -1
  168. package/dist/__tests__/run.test.js +0 -178
  169. package/dist/__tests__/run.test.js.map +0 -1
  170. package/dist/__tests__/verifier.test.d.ts +0 -2
  171. package/dist/__tests__/verifier.test.d.ts.map +0 -1
  172. package/dist/__tests__/verifier.test.js +0 -531
  173. package/dist/__tests__/verifier.test.js.map +0 -1
  174. package/dist/canonical.d.ts +0 -54
  175. package/dist/canonical.d.ts.map +0 -1
  176. package/dist/canonical.js +0 -119
  177. package/dist/canonical.js.map +0 -1
  178. package/dist/proof-hash.d.ts +0 -9
  179. package/dist/proof-hash.d.ts.map +0 -1
  180. package/dist/proof-hash.js +0 -75
  181. package/dist/proof-hash.js.map +0 -1
  182. package/dist/types.d.ts +0 -705
  183. package/dist/types.d.ts.map +0 -1
  184. package/dist/types.js +0 -3
  185. package/dist/types.js.map +0 -1
  186. package/dist/verifier.d.ts +0 -27
  187. package/dist/verifier.d.ts.map +0 -1
  188. package/dist/verifier.js +0 -844
  189. package/dist/verifier.js.map +0 -1
  190. package/src/__tests__/audit-anchors.test.ts +0 -188
  191. package/src/__tests__/audit-anomalies.test.ts +0 -815
  192. package/src/__tests__/audit-attestation.test.ts +0 -529
  193. package/src/__tests__/audit-bench-smoke.test.ts +0 -108
  194. package/src/__tests__/audit-boundary.test.ts +0 -96
  195. package/src/__tests__/audit-cli.test.ts +0 -288
  196. package/src/__tests__/audit-dependencies.test.ts +0 -141
  197. package/src/__tests__/audit-fixtures.ts +0 -736
  198. package/src/__tests__/audit-ingest.test.ts +0 -575
  199. package/src/__tests__/audit-memory-ingest.test.ts +0 -156
  200. package/src/__tests__/audit-property.test.ts +0 -892
  201. package/src/__tests__/audit-real-fixtures.test.ts +0 -153
  202. package/src/__tests__/audit-real-live.test.ts +0 -128
  203. package/src/__tests__/audit-reconstruct.test.ts +0 -353
  204. package/src/__tests__/audit-report.test.ts +0 -222
  205. package/src/__tests__/audit-roundtrip.test.ts +0 -464
  206. package/src/__tests__/audit-temporal.test.ts +0 -446
  207. package/src/__tests__/audit-tiers.test.ts +0 -343
  208. package/src/__tests__/audit-witness-real.test.ts +0 -92
  209. package/src/__tests__/audit-witness.test.ts +0 -345
  210. package/src/__tests__/canonical.test.ts +0 -253
  211. package/src/__tests__/chain-hash-anchor.test.ts +0 -67
  212. package/src/__tests__/commit-service.integration.test.ts +0 -117
  213. package/src/__tests__/constructor.test.ts +0 -340
  214. package/src/__tests__/declared-proof-fixture.ts +0 -65
  215. package/src/__tests__/fuse-inline.test.ts +0 -211
  216. package/src/__tests__/fuse-placement.test.ts +0 -32
  217. package/src/__tests__/fuse-roundtrip.test.ts +0 -243
  218. package/src/__tests__/fuse-sdk.test.ts +0 -142
  219. package/src/__tests__/fuse-set-sdk.test.ts +0 -852
  220. package/src/__tests__/fuse-set.test.ts +0 -1027
  221. package/src/__tests__/fuse-set2.test.ts +0 -343
  222. package/src/__tests__/fuse-vectors.test.ts +0 -218
  223. package/src/__tests__/fuse-verify.test.ts +0 -278
  224. package/src/__tests__/hello-world.test.ts +0 -10
  225. package/src/__tests__/mock-proof-fixture.ts +0 -36
  226. package/src/__tests__/policy-enforcement.test.ts +0 -226
  227. package/src/__tests__/proof-hash-regression.test.ts +0 -107
  228. package/src/__tests__/proof-hash.test.ts +0 -129
  229. package/src/__tests__/proof-integrity.test.ts +0 -576
  230. package/src/__tests__/real-fixtures/anchor-after-112762.json +0 -47
  231. package/src/__tests__/real-fixtures/anchor-with-ethereum-112758.json +0 -47
  232. package/src/__tests__/real-fixtures/live-proof-0.json +0 -42
  233. package/src/__tests__/real-fixtures/live-proof-1.json +0 -43
  234. package/src/__tests__/real-fixtures/live-proof-2.json +0 -43
  235. package/src/__tests__/real-fixtures/successor-112760.json +0 -38
  236. package/src/__tests__/real-fixtures/witness-25525146.json +0 -6
  237. package/src/__tests__/real-fixtures/witness-25525147.json +0 -6
  238. package/src/__tests__/realistic-proof-fixture.ts +0 -57
  239. package/src/__tests__/verifier.test.ts +0 -624
@@ -1,368 +0,0 @@
1
- // Copyright (c) Argento Computing Inc. 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":""}