@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,287 +0,0 @@
1
- // Copyright (c) Argento Computing Inc. All rights reserved. See LICENSE.
2
- /**
3
- * Tests for @mikeargento/bitgraph-audit causal reconstruction:
4
- * partitioning per (signer key, epochId, chainId), chain components from
5
- * prevB64 hash links, genesis and terminal identification, counter
6
- * evidence, and epoch relationships (epochLink lineage edges, hard-edge
7
- * ordering, observed-but-unordered epochs).
8
- */
9
- import { describe, test, after } from "node:test";
10
- import * as assert from "node:assert/strict";
11
- import { rm } from "node:fs/promises";
12
- import { classifyAnomalies, ingestBundle, reconstructChains, verifyObservedProofs, } from "@mikeargento/bitgraph-audit";
13
- import { sha256 } from "@noble/hashes/sha256";
14
- import { b64, healthyPairs, makeConstructorProof, makeCounterChain, makeEpochLinkProof, makeKey, makeTempDir, proofJson, utf8, writeBundleDir, } from "./audit-fixtures.js";
15
- const tempDirs = [];
16
- after(async () => {
17
- for (const dir of tempDirs) {
18
- await rm(dir, { recursive: true, force: true });
19
- }
20
- });
21
- async function auditBundle(files) {
22
- const dir = await makeTempDir("bitgraph-audit-reconstruct-");
23
- tempDirs.push(dir);
24
- await writeBundleDir(dir, files);
25
- const ingest = await ingestBundle(dir);
26
- await verifyObservedProofs(ingest);
27
- const reconstruction = await reconstructChains(ingest);
28
- const report = await classifyAnomalies(ingest, reconstruction);
29
- return { ingest, reconstruction, report };
30
- }
31
- // ---------------------------------------------------------------------------
32
- // The critical regression: a healthy chain is clean
33
- // ---------------------------------------------------------------------------
34
- describe("reconstruct: healthy slot/commit chain", () => {
35
- test("one partition, one component, zero anomalies, zero unexplained positions", async () => {
36
- const chain = await makeCounterChain({
37
- epochId: "epoch-healthy",
38
- chainId: "bitgraph:main",
39
- pairs: healthyPairs(4), // slot 1/commit 2 ... slot 7/commit 8
40
- });
41
- const { ingest, reconstruction, report } = await auditBundle({
42
- "proofs/p0.json": proofJson(chain.proofs[0].proof),
43
- "proofs/p1.json": proofJson(chain.proofs[1].proof),
44
- "proofs/p2.json": proofJson(chain.proofs[2].proof),
45
- "proofs/p3.json": proofJson(chain.proofs[3].proof),
46
- });
47
- assert.equal(ingest.proofs.length, 4);
48
- assert.equal(reconstruction.partitions.length, 1);
49
- const partition = reconstruction.partitions[0];
50
- assert.deepEqual(partition.key, {
51
- publicKeyB64: chain.key.publicKeyB64,
52
- epochId: "epoch-healthy",
53
- chainId: "bitgraph:main",
54
- });
55
- assert.equal(partition.components.length, 1);
56
- const component = partition.components[0];
57
- assert.deepEqual(component.memberProofHashes, chain.proofs.map((p) => p.proofHash), "link order must follow the hash chain from genesis to terminal");
58
- assert.deepEqual(component.genesisProofHashes, [chain.proofs[0].proofHash]);
59
- assert.deepEqual(component.terminalProofHashes, [chain.proofs[3].proofHash]);
60
- assert.deepEqual(component.brokenLinkProofHashes, []);
61
- assert.equal(component.hasCounterEvidence, true);
62
- assert.deepEqual(component.positionRange, { min: "1", max: "8" });
63
- // THE critical regression: a healthy slot/commit chain produces NO
64
- // unexplained positions and no anomalies of any kind.
65
- assert.deepEqual(report.anomalies, []);
66
- assert.deepEqual(report.divergences, []);
67
- });
68
- test("reconstruction is link-driven: file order and counters are not the mechanism", async () => {
69
- const chain = await makeCounterChain({
70
- epochId: "epoch-shuffled",
71
- pairs: healthyPairs(3),
72
- });
73
- // Write files in an order that reverses the causal order.
74
- const { reconstruction } = await auditBundle({
75
- "a-last.json": proofJson(chain.proofs[2].proof),
76
- "b-middle.json": proofJson(chain.proofs[1].proof),
77
- "c-first.json": proofJson(chain.proofs[0].proof),
78
- });
79
- const component = reconstruction.partitions[0].components[0];
80
- assert.deepEqual(component.memberProofHashes, chain.proofs.map((p) => p.proofHash));
81
- });
82
- test("a counterless link chain still reconstructs as one component", async () => {
83
- const chain = await makeCounterChain({
84
- epochId: "epoch-no-counters",
85
- pairs: [{}, {}, {}], // epochId only: hash links are the only evidence
86
- });
87
- const { reconstruction, report } = await auditBundle({
88
- "p0.json": proofJson(chain.proofs[0].proof),
89
- "p1.json": proofJson(chain.proofs[1].proof),
90
- "p2.json": proofJson(chain.proofs[2].proof),
91
- });
92
- const partition = reconstruction.partitions[0];
93
- assert.equal(partition.components.length, 1);
94
- const component = partition.components[0];
95
- assert.deepEqual(component.memberProofHashes, chain.proofs.map((p) => p.proofHash));
96
- assert.equal(component.hasCounterEvidence, false);
97
- assert.equal(component.positionRange, undefined);
98
- assert.deepEqual(report.anomalies, []);
99
- });
100
- });
101
- // ---------------------------------------------------------------------------
102
- // Partitioning
103
- // ---------------------------------------------------------------------------
104
- describe("reconstruct: partitioning", () => {
105
- test("two independent lineages are never merged", async () => {
106
- const chainA = await makeCounterChain({ epochId: "epoch-A", pairs: healthyPairs(2) });
107
- const chainB = await makeCounterChain({ epochId: "epoch-B", pairs: healthyPairs(2) });
108
- const { reconstruction, report } = await auditBundle({
109
- "a0.json": proofJson(chainA.proofs[0].proof),
110
- "a1.json": proofJson(chainA.proofs[1].proof),
111
- "b0.json": proofJson(chainB.proofs[0].proof),
112
- "b1.json": proofJson(chainB.proofs[1].proof),
113
- });
114
- assert.equal(reconstruction.partitions.length, 2);
115
- const keys = reconstruction.partitions.map((p) => p.key.publicKeyB64).sort();
116
- assert.deepEqual(keys, [chainA.key.publicKeyB64, chainB.key.publicKeyB64].sort());
117
- // Same counters on both chains, yet no collisions: counters are
118
- // partition-local.
119
- assert.deepEqual(report.anomalies, []);
120
- assert.deepEqual(report.divergences, []);
121
- });
122
- test("same signer and epoch on different chainIds are separate partitions (G6)", async () => {
123
- const key = await makeKey();
124
- const main = await makeCounterChain({
125
- key,
126
- epochId: "epoch-multichain",
127
- chainId: "bitgraph:main",
128
- pairs: healthyPairs(2),
129
- payloadPrefix: "main",
130
- });
131
- const globalChain = await makeCounterChain({
132
- key,
133
- epochId: "epoch-multichain",
134
- pairs: healthyPairs(2), // no chainId: normalized "global"
135
- payloadPrefix: "global",
136
- });
137
- const { reconstruction, report } = await auditBundle({
138
- "m0.json": proofJson(main.proofs[0].proof),
139
- "m1.json": proofJson(main.proofs[1].proof),
140
- "g0.json": proofJson(globalChain.proofs[0].proof),
141
- "g1.json": proofJson(globalChain.proofs[1].proof),
142
- });
143
- assert.equal(reconstruction.partitions.length, 2);
144
- assert.deepEqual(reconstruction.partitions.map((p) => p.key.chainId).sort(), ["bitgraph:main", "global"]);
145
- assert.deepEqual(report.anomalies, []);
146
- });
147
- test("chainless proofs stay outside partitions as observed-but-unchained", async () => {
148
- const chain = await makeCounterChain({ epochId: "epoch-with-stray", pairs: healthyPairs(2) });
149
- const chainless = await makeConstructorProof(); // no counter, no epochId
150
- const { ingest, reconstruction, report } = await auditBundle({
151
- "p0.json": proofJson(chain.proofs[0].proof),
152
- "p1.json": proofJson(chain.proofs[1].proof),
153
- "stray.json": proofJson(chainless.proof),
154
- });
155
- assert.equal(ingest.proofs.length, 3);
156
- assert.equal(reconstruction.partitions.length, 1);
157
- assert.equal(reconstruction.partitions[0].memberProofHashes.length, 2);
158
- const strayHash = ingest.proofs.find((p) => p.chainless).proofHash;
159
- assert.deepEqual(reconstruction.unchainedProofHashes, [strayHash]);
160
- // Observed-but-unchained is not an anomaly.
161
- assert.deepEqual(report.anomalies, []);
162
- });
163
- test("a proof with chain fields but no signer key is unpartitioned", async () => {
164
- const broken = JSON.stringify({
165
- version: "bitgraph/1",
166
- artifact: { hashAlg: "sha256", digestB64: b64(sha256(utf8("broken-payload"))) },
167
- commit: { nonceB64: "AAAA", counter: "2", epochId: "epoch-broken" },
168
- signer: { publicKeyB64: 42, signatureB64: "AAAA" },
169
- });
170
- const { ingest, reconstruction } = await auditBundle({ "broken.json": broken });
171
- assert.equal(ingest.proofs.length, 1);
172
- assert.equal(reconstruction.partitions.length, 0);
173
- assert.deepEqual(reconstruction.unpartitionedProofHashes, [ingest.proofs[0].proofHash]);
174
- // The verification dimension reports the structural failure.
175
- assert.equal(ingest.proofs[0].verification.status, "failed");
176
- });
177
- });
178
- // ---------------------------------------------------------------------------
179
- // Missing proofs split components
180
- // ---------------------------------------------------------------------------
181
- describe("reconstruct: missing middle proof", () => {
182
- test("splits the partition into two components with the break identified", async () => {
183
- const chain = await makeCounterChain({ epochId: "epoch-gap", pairs: healthyPairs(3) });
184
- // Omit the middle proof (slot 3 / commit 4).
185
- const { reconstruction } = await auditBundle({
186
- "p0.json": proofJson(chain.proofs[0].proof),
187
- "p2.json": proofJson(chain.proofs[2].proof),
188
- });
189
- const partition = reconstruction.partitions[0];
190
- assert.equal(partition.components.length, 2);
191
- const [first, second] = partition.components;
192
- assert.deepEqual(first.memberProofHashes, [chain.proofs[0].proofHash]);
193
- assert.deepEqual(first.genesisProofHashes, [chain.proofs[0].proofHash]);
194
- assert.deepEqual(first.terminalProofHashes, [chain.proofs[0].proofHash]);
195
- assert.deepEqual(second.memberProofHashes, [chain.proofs[2].proofHash]);
196
- assert.deepEqual(second.genesisProofHashes, []);
197
- assert.deepEqual(second.brokenLinkProofHashes, [chain.proofs[2].proofHash]);
198
- });
199
- });
200
- // ---------------------------------------------------------------------------
201
- // Epoch relationships
202
- // ---------------------------------------------------------------------------
203
- describe("reconstruct: epoch relationships", () => {
204
- test("a valid epochLink produces a hard lineage edge and linked ordering", async () => {
205
- const chainA = await makeCounterChain({ epochId: "epoch-lineage-A", pairs: healthyPairs(2) });
206
- const terminalA = chainA.proofs[1];
207
- const genesisB = await makeEpochLinkProof({
208
- prevEpochId: "epoch-lineage-A",
209
- prevCounter: terminalA.proof.commit.counter,
210
- prevProofHashB64: terminalA.chainHash,
211
- prevPublicKeyB64: chainA.key.publicKeyB64,
212
- toEpochId: "epoch-lineage-B",
213
- counter: "2",
214
- slotCounter: "1",
215
- });
216
- const { reconstruction, report } = await auditBundle({
217
- "a0.json": proofJson(chainA.proofs[0].proof),
218
- "a1.json": proofJson(terminalA.proof),
219
- "b-genesis.json": proofJson(genesisB.proof),
220
- });
221
- const { edges, epochs, orderedPairs } = reconstruction.epochRelationships;
222
- assert.equal(edges.length, 1);
223
- const edge = edges[0];
224
- assert.equal(edge.resolution, "matched");
225
- assert.equal(edge.fromEpochId, "epoch-lineage-A");
226
- assert.equal(edge.toEpochId, "epoch-lineage-B");
227
- assert.equal(edge.predecessorProofHash, terminalA.proofHash);
228
- assert.equal(edge.metadataConsistent, true);
229
- assert.equal(edge.referencedProofIsTerminal, true);
230
- assert.equal(edge.viaProofValid, true);
231
- assert.equal(edge.predecessorValid, true);
232
- assert.equal(edge.hardEdge, true);
233
- assert.deepEqual(orderedPairs, [
234
- { beforeEpochId: "epoch-lineage-A", afterEpochId: "epoch-lineage-B" },
235
- ]);
236
- const epochA = epochs.find((e) => e.epochId === "epoch-lineage-A");
237
- const epochB = epochs.find((e) => e.epochId === "epoch-lineage-B");
238
- assert.equal(epochA.ordering, "linked");
239
- assert.equal(epochB.ordering, "linked");
240
- assert.deepEqual(epochA.linkedSuccessorEpochIds, ["epoch-lineage-B"]);
241
- assert.deepEqual(epochB.linkedPredecessorEpochIds, ["epoch-lineage-A"]);
242
- // The extension point stays untouched by reconstruction.
243
- assert.equal(epochA.anchorBounds, undefined);
244
- // Valid lineage is not an anomaly.
245
- assert.deepEqual(report.anomalies, []);
246
- assert.deepEqual(report.divergences, []);
247
- });
248
- test("a dangling epochLink yields no hard edge and no ordering", async () => {
249
- const genesis = await makeEpochLinkProof({
250
- prevEpochId: "epoch-never-observed",
251
- prevCounter: "10",
252
- prevProofHashB64: b64(sha256(utf8("terminal-never-observed"))),
253
- toEpochId: "epoch-dangling-B",
254
- counter: "2",
255
- slotCounter: "1",
256
- });
257
- const { reconstruction } = await auditBundle({
258
- "b-genesis.json": proofJson(genesis.proof),
259
- });
260
- const { edges, epochs, orderedPairs } = reconstruction.epochRelationships;
261
- assert.equal(edges.length, 1);
262
- assert.equal(edges[0].resolution, "dangling");
263
- assert.equal(edges[0].hardEdge, false);
264
- assert.deepEqual(orderedPairs, []);
265
- assert.equal(epochs.find((e) => e.epochId === "epoch-dangling-B").ordering, "observed-but-unordered");
266
- });
267
- test("epochs with no lineage evidence are observed-but-unordered, never divergence", async () => {
268
- const chainA = await makeCounterChain({ epochId: "epoch-solo-A", pairs: healthyPairs(2) });
269
- const chainB = await makeCounterChain({ epochId: "epoch-solo-B", pairs: healthyPairs(2) });
270
- const { reconstruction, report } = await auditBundle({
271
- "a0.json": proofJson(chainA.proofs[0].proof),
272
- "a1.json": proofJson(chainA.proofs[1].proof),
273
- "b0.json": proofJson(chainB.proofs[0].proof),
274
- "b1.json": proofJson(chainB.proofs[1].proof),
275
- });
276
- const { epochs, edges, orderedPairs } = reconstruction.epochRelationships;
277
- assert.equal(edges.length, 0);
278
- assert.deepEqual(orderedPairs, []);
279
- for (const epoch of epochs) {
280
- assert.equal(epoch.ordering, "observed-but-unordered");
281
- }
282
- // Concurrent-or-unordered is never divergence.
283
- assert.deepEqual(report.divergences, []);
284
- assert.deepEqual(report.anomalies, []);
285
- });
286
- });
287
- //# sourceMappingURL=audit-reconstruct.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-reconstruct.test.js","sourceRoot":"","sources":["../../src/__tests__/audit-reconstruct.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=audit-report.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-report.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/audit-report.test.ts"],"names":[],"mappings":""}
@@ -1,186 +0,0 @@
1
- // Copyright (c) Argento Computing Inc. All rights reserved. See LICENSE.
2
- /**
3
- * Tests for the Phase 4d audit orchestrator and report generators:
4
- * runAudit end-to-end over the standard mixed bundle, JSON report with
5
- * stable codes and correct counts, deterministic double-run equality
6
- * (runMetadata stripped), executive-summary language in the brief's
7
- * style (two-position gap wording, no-winner divergence wording), and
8
- * zero em dash characters in all generated output.
9
- */
10
- import { describe, it, before, after } from "node:test";
11
- import * as assert from "node:assert/strict";
12
- import { rm } from "node:fs/promises";
13
- import { buildJsonReport, buildMarkdownReport, computeExitFlags, runAudit, } from "@mikeargento/bitgraph-audit";
14
- import { makeStandardAuditBundle } from "./audit-fixtures.js";
15
- const EM_DASH = "—";
16
- describe("audit orchestrator and reports: standard mixed bundle", () => {
17
- let bundle;
18
- let result;
19
- let report;
20
- let markdown;
21
- before(async () => {
22
- bundle = await makeStandardAuditBundle();
23
- result = await runAudit(bundle.dir);
24
- report = buildJsonReport(result);
25
- markdown = buildMarkdownReport(result);
26
- });
27
- after(async () => {
28
- await rm(bundle.dir, { recursive: true, force: true });
29
- });
30
- it("runs the full pipeline end-to-end", () => {
31
- assert.equal(result.ingest.container, "directory");
32
- assert.equal(result.runMetadata.bundlePath, bundle.dir);
33
- assert.equal(typeof result.runMetadata.toolVersion, "string");
34
- assert.ok(result.runMetadata.startedAt.includes("T"));
35
- // Two partitions: the main chain and the anchor's own epoch.
36
- assert.equal(result.reconstruction.partitions.length, 2);
37
- // Verification tiers.
38
- assert.equal(result.verification.verified, bundle.expected.verified);
39
- assert.equal(result.verification.failed, bundle.expected.failed);
40
- assert.equal(result.verification.artifactUnavailable, bundle.expected.artifactUnavailable);
41
- assert.equal(result.verification.chainless, bundle.expected.chainless);
42
- // Chain anomalies: gap, break, fork.
43
- const codes = result.anomalies.anomalies.map((a) => a.code).sort();
44
- assert.deepEqual(codes, [
45
- "chain-break-missing",
46
- "predecessor-reuse",
47
- "unexplained-counter-positions",
48
- ]);
49
- assert.equal(result.anomalies.divergences.length, 1);
50
- assert.equal(result.anomalies.divergences[0]?.kind, "predecessor-reuse");
51
- const partyHashes = result.anomalies.divergences[0]?.parties.map((p) => p.proofHash).sort();
52
- assert.deepEqual(partyHashes, [bundle.forkAProofHash, bundle.forkBProofHash].sort());
53
- // The gap is exactly the dropped proof's two positions (slot 3, commit 4).
54
- const gap = result.anomalies.anomalies.find((a) => a.code === "unexplained-counter-positions");
55
- assert.deepEqual((gap?.details).positions, ["3", "4"]);
56
- // Authority analysis is quiet; attestation records exist without documents.
57
- assert.equal(result.authorities.anomalies.length, 0);
58
- assert.equal(result.attestations.records.length, 6);
59
- assert.equal(result.attestations.counts.proofsWithDocument, 0);
60
- // The anchor was identified and its witness verified with the header timestamp.
61
- assert.deepEqual(result.temporal.verifiedAnchorProofHashes, [bundle.anchorProofHash]);
62
- const outcome = result.witnesses.outcomes.find((o) => o.verified);
63
- assert.equal(outcome?.anchorProofHash, bundle.anchorProofHash);
64
- assert.equal(outcome?.timestamp, bundle.blockTimestamp);
65
- assert.equal(outcome?.blockNumber, String(bundle.blockNumber));
66
- // Exit flags: unsupported-version sets bit 1, anomalies set bit 2.
67
- assert.deepEqual(computeExitFlags(result), {
68
- verificationFailures: true,
69
- chainAnomaliesOrDivergences: true,
70
- code: 3,
71
- });
72
- });
73
- it("JSON report carries the schema version, stable codes, and correct counts", () => {
74
- assert.equal(report.reportSchemaVersion, "bitgraph-audit-report/2");
75
- assert.equal(report.toolVersion, result.runMetadata.toolVersion);
76
- assert.equal(report.runMetadata.nondeterministic, true);
77
- assert.equal(report.input.counts.observed, bundle.expected.observed);
78
- assert.equal(report.input.counts.proofFiles, bundle.expected.proofFiles);
79
- assert.equal(report.input.counts.exactDuplicates, bundle.expected.exactDuplicates);
80
- assert.equal(report.input.counts.semanticDuplicates, bundle.expected.semanticDuplicates);
81
- assert.equal(report.input.counts.unsupportedVersion, bundle.expected.unsupportedVersion);
82
- assert.equal(report.input.counts.verified, bundle.expected.verified);
83
- assert.equal(report.input.counts.failed, bundle.expected.failed);
84
- assert.equal(report.input.counts.artifactUnavailable, bundle.expected.artifactUnavailable);
85
- assert.equal(report.input.counts.chainless, bundle.expected.chainless);
86
- // Machine consumers key on stable codes, never prose.
87
- const codes = report.anomalies.map((a) => a.code);
88
- for (const expected of [
89
- "unsupported-version",
90
- "exact-duplicate",
91
- "semantic-duplicate",
92
- "unexplained-counter-positions",
93
- "chain-break-missing",
94
- "predecessor-reuse",
95
- ]) {
96
- assert.ok(codes.includes(expected), `anomaly list includes ${expected}`);
97
- }
98
- assert.equal(report.anomalies.length, 6);
99
- assert.deepEqual(report.summary.anomalyCountsByCode, {
100
- "chain-break-missing": 1,
101
- "exact-duplicate": 1,
102
- "predecessor-reuse": 1,
103
- "semantic-duplicate": 1,
104
- "unexplained-counter-positions": 1,
105
- "unsupported-version": 1,
106
- });
107
- // Per-proof records: sorted by canonical hash, compact fields only.
108
- const hashes = report.proofs.map((p) => p.proofHash);
109
- assert.deepEqual(hashes, [...hashes].sort());
110
- assert.equal(report.proofs.length, bundle.expected.observed);
111
- assert.ok(!("proof" in report.proofs[0]), "raw proof objects never serialized");
112
- // The stored-form copy is cross-checked, never trusted. Its embedded
113
- // proofHash matched, so no mismatch escalation and no finding; the
114
- // record keeps the first observed copy's "absent" status per ingest
115
- // semantics (only a mismatch on any copy escalates).
116
- const genesis = report.proofs.find((p) => p.proofHash === bundle.chainProofHashes[0]);
117
- assert.notEqual(genesis?.embeddedProofHash, "mismatch");
118
- assert.ok(!codes.includes("proofhash-mismatch"));
119
- assert.equal(genesis?.sources.length, 3);
120
- assert.equal(genesis?.verificationStatus, "verified");
121
- // Partition intactness: main chain broken, anchor partition intact.
122
- assert.equal(report.partitions.length, 2);
123
- const mainPartition = report.partitions.find((p) => p.key.epochId === bundle.epochId);
124
- const anchorPartition = report.partitions.find((p) => p.key.epochId === bundle.anchorEpochId);
125
- assert.equal(mainPartition?.intact, false);
126
- assert.equal(mainPartition?.components.length, 2);
127
- assert.equal(anchorPartition?.intact, true);
128
- assert.equal(report.summary.chainIntact, false);
129
- assert.equal(report.summary.partitionsIntact, 1);
130
- // Epoch relationships: two epochs, no ordering evidence between them.
131
- assert.equal(report.summary.epochsObserved, 2);
132
- assert.equal(report.epochRelationships.unorderedPairs.length, 1);
133
- assert.equal(report.epochRelationships.orderedPairs.length, 0);
134
- // Rejected input listed with path and offending version string.
135
- assert.equal(report.unsupportedVersions.length, 1);
136
- assert.equal(report.unsupportedVersions[0]?.path, bundle.unsupportedPath);
137
- assert.equal(report.unsupportedVersions[0]?.version, "occ/1");
138
- // Temporal summary: the anchor's own segment is lower-bounded, the rest unanchored.
139
- assert.equal(report.summary.temporal.anchorsIdentified, 1);
140
- assert.equal(report.summary.temporal.anchorsWithVerifiedWitness, 1);
141
- assert.ok(report.summary.temporal.segmentsLowerBounded >= 1);
142
- assert.ok(report.summary.temporal.segmentsUnanchored >= 1);
143
- // Exit flags mirrored into the summary.
144
- assert.deepEqual(report.summary.exit, {
145
- verificationFailures: true,
146
- chainAnomaliesOrDivergences: true,
147
- code: 3,
148
- });
149
- });
150
- it("is deterministic across runs once runMetadata is stripped", async () => {
151
- const resultA = await runAudit(bundle.dir);
152
- const resultB = await runAudit(bundle.dir);
153
- const reportA = buildJsonReport(resultA);
154
- const reportB = buildJsonReport(resultB);
155
- const { runMetadata: metaA, ...restA } = reportA;
156
- const { runMetadata: metaB, ...restB } = reportB;
157
- assert.deepEqual(restA, restB);
158
- assert.equal(JSON.stringify(restA), JSON.stringify(restB));
159
- // The markdown differs only in the wall-clock start time.
160
- const mdA = buildMarkdownReport(resultA).replaceAll(metaA.startedAt, "STARTED_AT");
161
- const mdB = buildMarkdownReport(resultB).replaceAll(metaB.startedAt, "STARTED_AT");
162
- assert.equal(mdA, mdB);
163
- });
164
- it("markdown executive summary uses the brief's gap and divergence language", () => {
165
- assert.ok(markdown.includes("# BitGraph Audit Report"));
166
- // G2 gap language: two-position wording, honest absence claim.
167
- assert.ok(markdown.includes("neither commit positions nor referenced slot positions"));
168
- assert.ok(markdown.includes("does not, by itself, prove"));
169
- // Divergence: no winner is ever chosen.
170
- assert.ok(markdown.includes("does not choose between them"));
171
- // Rejected legacy input listed with its path and version string.
172
- assert.ok(markdown.includes(bundle.unsupportedPath));
173
- assert.ok(markdown.includes("occ/1"));
174
- // Chain intactness stated per partition.
175
- assert.ok(markdown.includes("Chain intact: no"));
176
- assert.ok(markdown.includes("Chain intact: yes"));
177
- });
178
- it("contains zero em dash characters in the markdown and the JSON", () => {
179
- assert.ok(!markdown.includes(EM_DASH), "markdown contains no em dashes");
180
- const json = JSON.stringify(report, null, 2);
181
- assert.ok(!json.includes(EM_DASH), "JSON report contains no em dashes");
182
- // The report never leaks signatures or raw proof bodies.
183
- assert.ok(!json.includes('"signatureB64"'));
184
- });
185
- });
186
- //# sourceMappingURL=audit-report.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-report.test.js","sourceRoot":"","sources":["../../src/__tests__/audit-report.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=audit-roundtrip.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-roundtrip.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/audit-roundtrip.test.ts"],"names":[],"mappings":""}