@3f-consulting/spec-controller-core 0.1.0-alpha.8 → 0.1.0-alpha.80

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 (257) hide show
  1. package/README.md +3 -3
  2. package/dist/assemble/evidenceReconciliationFromSources.d.ts +18 -53
  3. package/dist/assemble/evidenceReconciliationFromSources.d.ts.map +1 -1
  4. package/dist/assemble/evidenceReconciliationFromSources.js +31 -326
  5. package/dist/assemble/evidenceReconciliationFromSources.js.map +1 -1
  6. package/dist/assemble/renderInput.d.ts +15 -81
  7. package/dist/assemble/renderInput.d.ts.map +1 -1
  8. package/dist/assemble/renderInput.js +3 -45
  9. package/dist/assemble/renderInput.js.map +1 -1
  10. package/dist/census/evidenceObligations.d.ts +17 -52
  11. package/dist/census/evidenceObligations.d.ts.map +1 -1
  12. package/dist/census/evidenceObligations.js +19 -25
  13. package/dist/census/evidenceObligations.js.map +1 -1
  14. package/dist/domain/evidenceOrder.d.ts +3 -0
  15. package/dist/domain/evidenceOrder.d.ts.map +1 -0
  16. package/dist/domain/evidenceOrder.js +15 -0
  17. package/dist/domain/evidenceOrder.js.map +1 -0
  18. package/dist/domain/evidenceReconciliation.d.ts +40 -410
  19. package/dist/domain/evidenceReconciliation.d.ts.map +1 -1
  20. package/dist/domain/evidenceReconciliation.js +68 -388
  21. package/dist/domain/evidenceReconciliation.js.map +1 -1
  22. package/dist/domain/featureCode.d.ts +4 -0
  23. package/dist/domain/featureCode.d.ts.map +1 -0
  24. package/dist/domain/featureCode.js +12 -0
  25. package/dist/domain/featureCode.js.map +1 -0
  26. package/dist/domain/journal.d.ts +27 -411
  27. package/dist/domain/journal.d.ts.map +1 -1
  28. package/dist/domain/journal.js +7 -118
  29. package/dist/domain/journal.js.map +1 -1
  30. package/dist/domain/ledger.d.ts +37 -357
  31. package/dist/domain/ledger.d.ts.map +1 -1
  32. package/dist/domain/ledger.js +43 -346
  33. package/dist/domain/ledger.js.map +1 -1
  34. package/dist/domain/messages.d.ts +224 -0
  35. package/dist/domain/messages.d.ts.map +1 -0
  36. package/dist/domain/messages.js +335 -0
  37. package/dist/domain/messages.js.map +1 -0
  38. package/dist/domain/outcome.d.ts +3 -0
  39. package/dist/domain/outcome.d.ts.map +1 -0
  40. package/dist/domain/outcome.js +2 -0
  41. package/dist/domain/outcome.js.map +1 -0
  42. package/dist/domain/posting.d.ts +24 -121
  43. package/dist/domain/posting.d.ts.map +1 -1
  44. package/dist/domain/posting.js +4 -56
  45. package/dist/domain/posting.js.map +1 -1
  46. package/dist/domain/qualityCheckFault.d.ts +4 -44
  47. package/dist/domain/qualityCheckFault.d.ts.map +1 -1
  48. package/dist/domain/qualityCheckFault.js +0 -24
  49. package/dist/domain/qualityCheckFault.js.map +1 -1
  50. package/dist/domain/qualityCheckReconciliation.d.ts +15 -288
  51. package/dist/domain/qualityCheckReconciliation.d.ts.map +1 -1
  52. package/dist/domain/qualityCheckReconciliation.js +80 -479
  53. package/dist/domain/qualityCheckReconciliation.js.map +1 -1
  54. package/dist/domain/qualityCheckReconciliationFault.d.ts +0 -19
  55. package/dist/domain/qualityCheckReconciliationFault.d.ts.map +1 -1
  56. package/dist/domain/qualityCheckReconciliationFault.js +1 -24
  57. package/dist/domain/qualityCheckReconciliationFault.js.map +1 -1
  58. package/dist/domain/scenarioCodeError.d.ts +16 -0
  59. package/dist/domain/scenarioCodeError.d.ts.map +1 -0
  60. package/dist/domain/scenarioCodeError.js +4 -0
  61. package/dist/domain/scenarioCodeError.js.map +1 -0
  62. package/dist/domain/scenarioReconciliation.d.ts +10 -215
  63. package/dist/domain/scenarioReconciliation.d.ts.map +1 -1
  64. package/dist/domain/scenarioReconciliation.js +4 -101
  65. package/dist/domain/scenarioReconciliation.js.map +1 -1
  66. package/dist/domain/scnAllocation.d.ts +27 -0
  67. package/dist/domain/scnAllocation.d.ts.map +1 -0
  68. package/dist/domain/scnAllocation.js +33 -0
  69. package/dist/domain/scnAllocation.js.map +1 -0
  70. package/dist/domain/verdictCode.d.ts +10 -0
  71. package/dist/domain/verdictCode.d.ts.map +1 -0
  72. package/dist/domain/verdictCode.js +16 -0
  73. package/dist/domain/verdictCode.js.map +1 -0
  74. package/dist/index.d.ts +14 -40
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +8 -88
  77. package/dist/index.js.map +1 -1
  78. package/dist/internal.d.ts +3 -27
  79. package/dist/internal.d.ts.map +1 -1
  80. package/dist/internal.js +3 -94
  81. package/dist/internal.js.map +1 -1
  82. package/dist/lib/bareTerm.d.ts +0 -39
  83. package/dist/lib/bareTerm.d.ts.map +1 -1
  84. package/dist/lib/bareTerm.js +0 -39
  85. package/dist/lib/bareTerm.js.map +1 -1
  86. package/dist/lib/portablePath.d.ts.map +1 -1
  87. package/dist/lib/portablePath.js +2 -16
  88. package/dist/lib/portablePath.js.map +1 -1
  89. package/dist/lib/scnCitation.d.ts +0 -32
  90. package/dist/lib/scnCitation.d.ts.map +1 -1
  91. package/dist/lib/scnCitation.js +2 -42
  92. package/dist/lib/scnCitation.js.map +1 -1
  93. package/dist/model.d.ts +0 -23
  94. package/dist/model.d.ts.map +1 -1
  95. package/dist/model.js +0 -23
  96. package/dist/model.js.map +1 -1
  97. package/dist/parse/checkScriptsRunInCI.d.ts +6 -169
  98. package/dist/parse/checkScriptsRunInCI.d.ts.map +1 -1
  99. package/dist/parse/checkScriptsRunInCI.js +11 -171
  100. package/dist/parse/checkScriptsRunInCI.js.map +1 -1
  101. package/dist/parse/ciStepRecord.d.ts +4 -118
  102. package/dist/parse/ciStepRecord.d.ts.map +1 -1
  103. package/dist/parse/ciStepRecord.js +20 -227
  104. package/dist/parse/ciStepRecord.js.map +1 -1
  105. package/dist/parse/commandRuns.d.ts +0 -39
  106. package/dist/parse/commandRuns.d.ts.map +1 -1
  107. package/dist/parse/commandRuns.js +6 -67
  108. package/dist/parse/commandRuns.js.map +1 -1
  109. package/dist/parse/cucumber.d.ts +13 -66
  110. package/dist/parse/cucumber.d.ts.map +1 -1
  111. package/dist/parse/cucumber.js +42 -146
  112. package/dist/parse/cucumber.js.map +1 -1
  113. package/dist/parse/discoveryScope.d.ts +1 -46
  114. package/dist/parse/discoveryScope.d.ts.map +1 -1
  115. package/dist/parse/discoveryScope.js +4 -61
  116. package/dist/parse/discoveryScope.js.map +1 -1
  117. package/dist/parse/fitnessCitations.d.ts +1 -72
  118. package/dist/parse/fitnessCitations.d.ts.map +1 -1
  119. package/dist/parse/fitnessCitations.js +3 -55
  120. package/dist/parse/fitnessCitations.js.map +1 -1
  121. package/dist/parse/reconcilerSteps.d.ts +0 -46
  122. package/dist/parse/reconcilerSteps.d.ts.map +1 -1
  123. package/dist/parse/reconcilerSteps.js +2 -64
  124. package/dist/parse/reconcilerSteps.js.map +1 -1
  125. package/dist/parse/runningFitnessFunctions.d.ts +9 -0
  126. package/dist/parse/runningFitnessFunctions.d.ts.map +1 -0
  127. package/dist/parse/runningFitnessFunctions.js +57 -0
  128. package/dist/parse/runningFitnessFunctions.js.map +1 -0
  129. package/dist/parse/scenarioCodeErrors.d.ts +11 -0
  130. package/dist/parse/scenarioCodeErrors.d.ts.map +1 -0
  131. package/dist/parse/scenarioCodeErrors.js +78 -0
  132. package/dist/parse/scenarioCodeErrors.js.map +1 -0
  133. package/dist/parse/scenarios.d.ts +5 -230
  134. package/dist/parse/scenarios.d.ts.map +1 -1
  135. package/dist/parse/scenarios.js +25 -467
  136. package/dist/parse/scenarios.js.map +1 -1
  137. package/dist/parse/stepAccounting.d.ts +0 -46
  138. package/dist/parse/stepAccounting.d.ts.map +1 -1
  139. package/dist/parse/stepAccounting.js +1 -55
  140. package/dist/parse/stepAccounting.js.map +1 -1
  141. package/dist/parse/stepExclusions.d.ts +0 -47
  142. package/dist/parse/stepExclusions.d.ts.map +1 -1
  143. package/dist/parse/stepExclusions.js +2 -50
  144. package/dist/parse/stepExclusions.js.map +1 -1
  145. package/dist/parse/stepNames.d.ts +0 -27
  146. package/dist/parse/stepNames.d.ts.map +1 -1
  147. package/dist/parse/stepNames.js +0 -27
  148. package/dist/parse/stepNames.js.map +1 -1
  149. package/dist/parse/targetCorpus.d.ts +3 -80
  150. package/dist/parse/targetCorpus.d.ts.map +1 -1
  151. package/dist/parse/targetCorpus.js +4 -46
  152. package/dist/parse/targetCorpus.js.map +1 -1
  153. package/dist/parse/targetManifest.d.ts +8 -146
  154. package/dist/parse/targetManifest.d.ts.map +1 -1
  155. package/dist/parse/targetManifest.js +48 -198
  156. package/dist/parse/targetManifest.js.map +1 -1
  157. package/dist/parse/vitest.d.ts +8 -68
  158. package/dist/parse/vitest.d.ts.map +1 -1
  159. package/dist/parse/vitest.js +4 -83
  160. package/dist/parse/vitest.js.map +1 -1
  161. package/dist/provenance/provenance.d.ts +30 -138
  162. package/dist/provenance/provenance.d.ts.map +1 -1
  163. package/dist/provenance/provenance.js +5 -65
  164. package/dist/provenance/provenance.js.map +1 -1
  165. package/dist/render/behaviouralRunners.d.ts +0 -29
  166. package/dist/render/behaviouralRunners.d.ts.map +1 -1
  167. package/dist/render/behaviouralRunners.js +6 -69
  168. package/dist/render/behaviouralRunners.js.map +1 -1
  169. package/dist/render/configurationNotRead.d.ts +3 -0
  170. package/dist/render/configurationNotRead.d.ts.map +1 -0
  171. package/dist/render/configurationNotRead.js +17 -0
  172. package/dist/render/configurationNotRead.js.map +1 -0
  173. package/dist/render/discoveryScope.d.ts +0 -37
  174. package/dist/render/discoveryScope.d.ts.map +1 -1
  175. package/dist/render/discoveryScope.js +3 -39
  176. package/dist/render/discoveryScope.js.map +1 -1
  177. package/dist/render/evidenceGrid.d.ts +3 -37
  178. package/dist/render/evidenceGrid.d.ts.map +1 -1
  179. package/dist/render/evidenceGrid.js +21 -103
  180. package/dist/render/evidenceGrid.js.map +1 -1
  181. package/dist/render/excludedSteps.d.ts +0 -26
  182. package/dist/render/excludedSteps.d.ts.map +1 -1
  183. package/dist/render/excludedSteps.js +4 -32
  184. package/dist/render/excludedSteps.js.map +1 -1
  185. package/dist/render/fitnessFunctions.d.ts +3 -0
  186. package/dist/render/fitnessFunctions.d.ts.map +1 -0
  187. package/dist/render/fitnessFunctions.js +12 -0
  188. package/dist/render/fitnessFunctions.js.map +1 -0
  189. package/dist/render/json.d.ts +0 -11
  190. package/dist/render/json.d.ts.map +1 -1
  191. package/dist/render/json.js +0 -11
  192. package/dist/render/json.js.map +1 -1
  193. package/dist/render/markdown.d.ts +1 -55
  194. package/dist/render/markdown.d.ts.map +1 -1
  195. package/dist/render/markdown.js +104 -480
  196. package/dist/render/markdown.js.map +1 -1
  197. package/dist/render/provenanceSection.d.ts +0 -22
  198. package/dist/render/provenanceSection.d.ts.map +1 -1
  199. package/dist/render/provenanceSection.js +10 -53
  200. package/dist/render/provenanceSection.js.map +1 -1
  201. package/dist/render/reconcilerSteps.d.ts +0 -25
  202. package/dist/render/reconcilerSteps.d.ts.map +1 -1
  203. package/dist/render/reconcilerSteps.js +5 -30
  204. package/dist/render/reconcilerSteps.js.map +1 -1
  205. package/dist/render/runVerdict.d.ts +0 -38
  206. package/dist/render/runVerdict.d.ts.map +1 -1
  207. package/dist/render/runVerdict.js +62 -129
  208. package/dist/render/runVerdict.js.map +1 -1
  209. package/dist/render/scenarioCodeErrorsSection.d.ts +3 -0
  210. package/dist/render/scenarioCodeErrorsSection.d.ts.map +1 -0
  211. package/dist/render/scenarioCodeErrorsSection.js +45 -0
  212. package/dist/render/scenarioCodeErrorsSection.js.map +1 -0
  213. package/dist/render/stepAccounting.d.ts +0 -36
  214. package/dist/render/stepAccounting.d.ts.map +1 -1
  215. package/dist/render/stepAccounting.js +5 -49
  216. package/dist/render/stepAccounting.js.map +1 -1
  217. package/dist/render/testVolume.d.ts +0 -25
  218. package/dist/render/testVolume.d.ts.map +1 -1
  219. package/dist/render/testVolume.js +4 -35
  220. package/dist/render/testVolume.js.map +1 -1
  221. package/package.json +4 -1
  222. package/dist/domain/checkCharacteristics.d.ts +0 -88
  223. package/dist/domain/checkCharacteristics.d.ts.map +0 -1
  224. package/dist/domain/checkCharacteristics.js +0 -109
  225. package/dist/domain/checkCharacteristics.js.map +0 -1
  226. package/dist/domain/fitnessChecks.d.ts +0 -79
  227. package/dist/domain/fitnessChecks.d.ts.map +0 -1
  228. package/dist/domain/fitnessChecks.js +0 -81
  229. package/dist/domain/fitnessChecks.js.map +0 -1
  230. package/dist/domain/qualityCheckFaultMessages.d.ts +0 -43
  231. package/dist/domain/qualityCheckFaultMessages.d.ts.map +0 -1
  232. package/dist/domain/qualityCheckFaultMessages.js +0 -38
  233. package/dist/domain/qualityCheckFaultMessages.js.map +0 -1
  234. package/dist/lib/featureCode.d.ts +0 -21
  235. package/dist/lib/featureCode.d.ts.map +0 -1
  236. package/dist/lib/featureCode.js +0 -24
  237. package/dist/lib/featureCode.js.map +0 -1
  238. package/dist/parse/corpusCodeFaults.d.ts +0 -76
  239. package/dist/parse/corpusCodeFaults.d.ts.map +0 -1
  240. package/dist/parse/corpusCodeFaults.js +0 -121
  241. package/dist/parse/corpusCodeFaults.js.map +0 -1
  242. package/dist/parse/corpusFaults.d.ts +0 -124
  243. package/dist/parse/corpusFaults.d.ts.map +0 -1
  244. package/dist/parse/corpusFaults.js +0 -72
  245. package/dist/parse/corpusFaults.js.map +0 -1
  246. package/dist/parse/corpusGrammarFaults.d.ts +0 -71
  247. package/dist/parse/corpusGrammarFaults.d.ts.map +0 -1
  248. package/dist/parse/corpusGrammarFaults.js +0 -292
  249. package/dist/parse/corpusGrammarFaults.js.map +0 -1
  250. package/dist/parse/runningStaticChecks.d.ts +0 -125
  251. package/dist/parse/runningStaticChecks.d.ts.map +0 -1
  252. package/dist/parse/runningStaticChecks.js +0 -316
  253. package/dist/parse/runningStaticChecks.js.map +0 -1
  254. package/dist/render/staticChecks.d.ts +0 -23
  255. package/dist/render/staticChecks.d.ts.map +0 -1
  256. package/dist/render/staticChecks.js +0 -69
  257. package/dist/render/staticChecks.js.map +0 -1
@@ -1,379 +1,59 @@
1
- /**
2
- * THE LEDGER — the accounts with their posted entries, co-located with its OWN whole-run
3
- * behaviour: `isBalanced`, `hasPendingItems`, `hasBrokenEvidence` (module, not class). These
4
- * three pure predicates are the whole-run verdict surface the CLI edge maps to exit codes;
5
- * they were the reconcile orchestration's exports and now live WITH the concept they fold over.
6
- */
7
1
  import type { Outcome, QualityCheckReconciliation } from "./qualityCheckReconciliation.js";
8
2
  import type { ScenarioReconciliation } from "./scenarioReconciliation.js";
9
3
  import type { RuntimeQualityCheck } from "./journal.js";
10
- /**
11
- * THE LEDGER — the accounts with their POSTED ENTRIES. Canon (double-entry-manifesto, chain
12
- * step 4 + the Ledger entry): "the evidence obligations (debits) and evidence observations
13
- * (credits) organised by real or invented scenario, keyed by quality-check — THIS IS WHERE
14
- * RECONCILIATION HAPPENS."
15
- *
16
- * RENAMED FROM `Ledger` (3F-1846 / 3F-1830). 3F-1138 corrected a real error — the
17
- * rendered report was titled `# Ledger`, and the per-scenario reconciliation is the trial balance,
18
- * not the ledger — but corrected it by DELETING the concept rather than distinguishing it. The
19
- * Ledger was never the report, so removing the report's wrong name should not have removed the
20
- * Ledger. This restores it. `Ledger` is now canon's name for LAYER 1 — the
21
- * assembled statement (`assemble/report.ts`, formerly `EvidenceReconciliation`); the four layers are
22
- * `Ledger` → `Ledger` → `ScenarioReconciliation` → `QualityCheckReconciliation`,
23
- * under canon's four names.
24
- *
25
- * The Ledger is NOT a second name for the Evidence Reconciliation, and NOT a pre-reconciliation
26
- * input stage: the SAME accounts live in it before and after balancing off, gaining their verdict
27
- * IN PLACE. It holds entries, so it is an OBJECT and never a bare array of rows — the code and the
28
- * JSON are one vocabulary (`interface Ledger { scenarioReconciliations }` ↔
29
- * `"ledger": { "scenarioReconciliations": [...] }`).
30
- *
31
- * `scenarioReconciliations` (renamed from `scenarios`) is the collection of Scenario
32
- * Reconciliation rows — real (`kind: scenario`, including the degenerate `both-missing`
33
- * row a zero-evidence scenario posts), cited-but-UNKNOWN (`kind: phantom-scenario`), and
34
- * cites-nothing (`kind: suspense-scenario`). The name reserves `scenario`/`scenarios` for the
35
- * real kind (a phantom / suspense is NOT a scenario).
36
- *
37
- * EVERY scenario is a row now: the separate-axis authoring-quality
38
- * `warnings` collection was RETIRED — a scenario raising zero evidence obligations and cited
39
- * by no evidence observation reconciles to a `both-missing` out-of-balance row, not a warning excluded
40
- * from the balance.
41
- */
42
4
  export interface Ledger {
43
- scenarioReconciliations: ScenarioReconciliation[];
44
- }
45
- /**
46
- * The WHOLE-RUN verdict — is the ENTIRE reconciliation balanced? A pure domain
47
- * derivation over the WHOLE `Ledger`: balanced IFF NO reconciling
48
- * item exists ANYWHERE, across every Scenario Reconciliation row — scenario,
49
- * phantom, and suspense alike. Out-of-balance iff ANY row carries a reconciling
50
- * item: a scenario's out-of-balance items (failing / missing /
51
- * no-evidence-obligation / both-missing) AND the credit-side suspense/phantom rows (a
52
- * no-evidence-obligation static-check watermelon, an uncited credit, a phantom scenario).
53
- *
54
- * It is deliberately NOT a scan of scenario verdicts alone — that would
55
- * let a watermelon-only run (every scenario balanced, yet a no-evidence-obligation
56
- * static check sitting unreconciled in the suspense row) read as balanced, the
57
- * false pass a CI gate must never give. Every row's `reconcilingItems` is
58
- * consulted, so the suspense/phantom rows (verdict ALWAYS out-of-balance) count.
59
- *
60
- * The CLI edge maps this boolean to the process exit code — balanced → 0,
61
- * out-of-balance → EXACTLY 1 — an ENUMERATED status, never a count (a count would
62
- * 8-bit `& 0xFF` wrap → false pass).
63
- */
64
- export declare function isBalanced(reconciliation: Ledger): boolean;
65
- /**
66
- * Does the WHOLE reconciliation carry any Pending Item? A pure domain predicate over the
67
- * WHOLE `Ledger`, SYMMETRIC with `isBalanced` — together they are the
68
- * whole-run verdict surface. True iff ANY Scenario Reconciliation row carries a Pending
69
- * Item (a deferred `<quality-check>pending` obligation partitioned off before reconciliation,
70
- * @SCN-PND-004). Pending Items are run-neutral by default (@SCN-PND-008); the CLI edge
71
- * consults this ALONGSIDE `isBalanced` to escalate an otherwise-balanced run to the distinct
72
- * exit code 3 under `--strict` (@SCN-CLI-011) — an OPT-IN gate on deferred obligations,
73
- * checked only when `isBalanced` is true (out-of-balance dominates, exit 1).
74
- */
75
- export declare function hasPendingItems(reconciliation: Ledger): boolean;
76
- /**
77
- * Does the WHOLE reconciliation carry BROKEN evidence — i.e. is the run UNSOUND? The THIRD
78
- * whole-run predicate (@SCN-LDG-018), beside `isBalanced` and `hasPendingItems`, and the
79
- * EXISTENTIAL TWIN of the latter: the same `some(row => some(item => item.outcome === X))` scan.
80
- *
81
- * Soundness is a property of the RUN, not of a scenario. If any PROOF NEVER RAN — a vitest suite
82
- * that failed to collect (@SCN-LDG-017), or a cucumber step matched by two or more definitions
83
- * (@SCN-LDG-019) — the evidence never fully materialised, so every `missing` in that run is
84
- * SUSPECT: it may be a broken proof rather than an absent one, and the remedies differ (fix the
85
- * harness vs write a test). The scenario's own row stays honest at its own resolution (`missing`);
86
- * the RUN is what is stamped unsound.
87
- *
88
- * DERIVED, NEVER STORED — no soundness flag is written onto `Ledger`, the same
89
- * no-drift reason `isBalanced` and `hasPendingItems` derive. Machine consumers read soundness off
90
- * `summary.byOutcome.broken > 0` (type-forced into the JSON the moment `broken` joined the
91
- * `Outcome` union); the markdown renderer prints the HEADLINE word — "unsound" is the render word,
92
- * never the predicate's name, exactly as "out-of-balance" is for `isBalanced`.
93
- *
94
- * Keyed on the `broken` OUTCOME specifically, never on `!isBalanced`: an ordinary out-of-balance
95
- * run (an honest `missing`, no broken evidence) is perfectly SOUND. The three whole-run
96
- * predicates are INDEPENDENT — a run may carry Pending Items and be sound; a run may carry broken
97
- * evidence and no Pending Items. (A broken run is ALWAYS out-of-balance, since the `broken` item
98
- * sits on the suspense row — which is why the CLI edge must consult THIS predicate BEFORE the
99
- * balance verdict, @SCN-CLI-012, or its exit code would be unreachable.)
100
- */
101
- export declare function hasBrokenEvidence(reconciliation: Ledger): boolean;
102
- /**
103
- * Does the WHOLE run have NOTHING TO RECONCILE — no accounts at all? The FOURTH whole-run
104
- * predicate (@SCN-CLI-019), beside `isBalanced` / `hasPendingItems` / `hasBrokenEvidence`, and the
105
- * one shape the other three cannot speak about.
106
- *
107
- * THE FAULT IT EXISTS TO NAME. `isBalanced` is `.every()` over the rows, so on an EMPTY ledger it
108
- * is VACUOUSLY TRUE; `hasPendingItems` and `hasBrokenEvidence` are `.some()`, so they are
109
- * vacuously FALSE. A target that declared nothing and produced nothing therefore satisfied every
110
- * existing predicate in the direction that reads as a pass, and was told "BALANCED … (exit 0)" — a
111
- * green over silence, from the tool whose whole claim is that silence is not the same as nothing
112
- * wrong. No combination of the three separates an empty run from a clean one, which is why this is
113
- * a predicate and not a derivation of one.
114
- *
115
- * ITS OWN ENUMERATED STATE, exit 5 (taxonomy: 0 balanced / 1 out-of-balance / 2 usage / 3
116
- * pending-under-strict / 4 unsound / 5 nothing to reconcile). Not balanced — there are no accounts
117
- * to agree. Not out-of-balance — nothing disagrees. Not a usage fault — the invocation was valid
118
- * and `new-client` is a supported adoption state, not a degraded one. Not unsound — no proof
119
- * failed; none was owed.
120
- *
121
- * KEYED ON THE EMPTY LEDGER, NEVER ON THE EMPTY CORPUS, and that is load-bearing rather than
122
- * pedantic: a target with no corpus but uncited credits HAS a row — its suspense row — and is an
123
- * ordinary out-of-balance report at exit 1 (@SCN-CLI-020). Keyed on "no corpus" instead, the modal
124
- * first run's whole report would disappear behind exit 5.
125
- *
126
- * DERIVED, NEVER STORED — no emptiness flag is written onto `Ledger`, the same no-drift reason its
127
- * three siblings derive, and the reason no JSON-schema change is owed: a machine consumer reads
128
- * the row count off the ledger it already has. The markdown renderer prints the HEADLINE word —
129
- * "NOTHING TO RECONCILE" is the render word, never the predicate's name, exactly as "unsound" is
130
- * for `hasBrokenEvidence`.
131
- *
132
- * WHERE IT MUST BE ASKED, MEASURED RATHER THAN ARGUED (3F-3344). The ticket predicted this would
133
- * be @SCN-CLI-012's pre-emption one code further on — ask it after `isBalanced` and the branch
134
- * goes unreachable. IT IS NOT, and the plant that was supposed to prove it stayed GREEN. An empty
135
- * ledger is MUTUALLY EXCLUSIVE with all three siblings: with no rows there is no row to carry a
136
- * broken item, a reconciling item or a Pending Item, so it fires NONE of them and its position
137
- * AMONG them is unobservable. Moving it below `!isBalanced` in the CLI ladder still exits 5
138
- * (measured).
139
- *
140
- * WHAT IS LOAD-BEARING is its position against the chain's DEFAULT. "Balanced" is not a predicate
141
- * branch — it is the fall-through — so there is no "after the balanced case" to append a fifth
142
- * code to, and a chain that reaches its default has already called the run balanced. Appended
143
- * after the default the branch is dead code and the run exits 0 (measured: the plant that DID red).
144
- * That is also why the fault survived: a fifth code cannot be ADDED to this chain, it has to
145
- * DISPLACE the default, and nothing about the other three predicates says so.
146
- */
147
- export declare function hasNothingToReconcile(reconciliation: Ledger): boolean;
148
- /**
149
- * The BROKEN reconciling items across the WHOLE run (3F-2203) — every proof that never ran, in row
150
- * order, each carrying its WHERE-to-fix (locator) and WHAT-broke (the runner's message).
151
- *
152
- * The QUANTITATIVE twin of `hasBrokenEvidence`, which is now derived FROM it: "is this run
153
- * unsound?" and "which proofs never ran?" are one question at two resolutions, so they are one
154
- * scan. The markdown's Run-integrity section listed these by re-deriving the scan itself — a model
155
- * query living in the renderer, and a second statement of which outcome means broken.
156
- *
157
- * The renderer READS this list and takes its length for the count-phrase; asking a list you were
158
- * given how long it is is projection, not derivation.
159
- */
160
- export declare function brokenItemsOf(reconciliation: Ledger): QualityCheckReconciliation[];
161
- /**
162
- * The OBLIGATION-SIDE static-check sub-rows across the whole Ledger (3F-2203) — each `lint` Quality
163
- * Check Reconciliation with the scnId of the row that names it, in row-then-document order.
164
- *
165
- * SCENARIO ROWS ONLY. A `lint` obligation is obligation-side, so a phantom or suspense row can carry
166
- * none; the suspense row's lint CREDIT (a no-evidence-obligation static check, `cites-no-scenario`) is an
167
- * observation, not an obligation, and must never inflate the obligation-side lint total.
168
- *
169
- * ONE COPY, BY CONSTRUCTION. That scenario-rows-only filter plus the lint cut existed TWICE,
170
- * character-identical — here in `lintTally` and in the markdown's `### Lint evidence obligations`
171
- * table. They agreed by copy-paste, not construction: either could have grown a clause alone and
172
- * nothing would have redded. Same anaemia, same cure as `evidenceObligationPairsOf` and
173
- * the corpus's own fitness obligations; the tally and the table are now two readings of ONE list.
174
- */
175
- export declare function lintReconciliationsOf(reconciliation: Ledger): {
5
+ readonly scenarioReconciliations: readonly ScenarioReconciliation[];
6
+ }
7
+ export declare function isBalanced(ledger: Ledger): boolean;
8
+ export declare function hasPendingItems(ledger: Ledger): boolean;
9
+ export declare function hasBrokenEvidence(ledger: Ledger): boolean;
10
+ export declare function hasNothingToReconcile(ledger: Ledger): boolean;
11
+ export declare function brokenItemsOf(ledger: Ledger): QualityCheckReconciliation[];
12
+ export declare function fitnessReconciliationsOf(ledger: Ledger): {
176
13
  scnId: string;
177
14
  reconciliation: QualityCheckReconciliation;
178
15
  }[];
179
- /**
180
- * The materialised totals over the Scenario Reconciliations — the headline verdict tally,
181
- * counted over EVERY row (@SCN-RMD-001, 3F-1724).
182
- *
183
- * The Evidence Reconciliation is ALL Scenario Reconciliations assembled, and the summary is
184
- * its totals (`strategy/double-entry-manifesto.md`). There are three row kinds — real
185
- * (`scenario`), `phantom-scenario` (cited by a credit, carried by no feature) and
186
- * `suspense-scenario` (credits citing no scenario at all) — and phantom / suspense
187
- * reconciliations are ALWAYS out-of-balance. So `total` / `balanced` / `outOfBalance` count
188
- * every row, phantom and suspense among them.
189
- *
190
- * (The earlier "ruling Q3" — a scenario-only tally with phantom / suspense bucketed APART —
191
- * was a divergence from the manifesto, not a decision: it let `isBalanced` (which correctly
192
- * walks every row's reconciling items → exit 1) disagree with a tally reading 0
193
- * out-of-balance, so a failing run rendered a headline that read as a pass. RETRACTED by the
194
- * operator, 2026-07-13; the bug it caused is 3F-1703.)
195
- */
196
16
  export interface ScenarioReconciliationTotals {
197
- /** Every Scenario Reconciliation — scenario, phantom and suspense rows alike. */
198
- total: number;
199
- balanced: number;
200
- /** Every out-of-balance row — the phantom and suspense rows among them (they always are). */
201
- outOfBalance: number;
202
- /**
203
- * Phantom-scenario rows (cited by a credit, carried by no feature) — a SUB-COUNT, i.e. a
204
- * breakdown OF `total` / `outOfBalance`, not a bucket outside them.
205
- */
206
- phantom: number;
207
- /**
208
- * Suspense-scenario rows — credits citing NO scenario, aggregated into the one
209
- * `(no scenario)` row. A SUB-COUNT like `phantom`: counted INSIDE `total` and
210
- * `outOfBalance`, and surfaced separately so a reader recovers the scenario count as
211
- * `total − phantom − suspense`.
212
- */
213
- suspense: number;
17
+ readonly total: number;
18
+ readonly balanced: number;
19
+ readonly outOfBalance: number;
20
+ readonly phantom: number;
21
+ readonly suspense: number;
214
22
  }
215
- /** A missing bucket — a rendered subject (a quality-check: `lint` or a runtime quality-check) and its count. */
216
23
  export interface MissingByQualityCheck {
217
- subject: string;
218
- count: number;
24
+ readonly subject: string;
25
+ readonly count: number;
219
26
  }
220
- /**
221
- * The materialised evidence-obligation totals — the aggregate the markdown's Evidence
222
- * reconciliation table derives, carried AS DATA (the MATERIALISE ruling): the total, the
223
- * per-reconciliation-outcome breakdown, the out-of-balance sum, and the missing
224
- * split by rendered subject.
225
- */
226
27
  export interface EvidenceObligationTotals {
227
- total: number;
228
- byOutcome: Record<Outcome, number>;
229
- outOfBalance: number;
230
- missingByQualityCheck: MissingByQualityCheck[];
28
+ readonly total: number;
29
+ readonly byOutcome: Record<Outcome, number>;
30
+ readonly outOfBalance: number;
31
+ readonly missingByQualityCheck: readonly MissingByQualityCheck[];
231
32
  }
232
- /**
233
- * The materialised lint tally (RMD-005) — the static-only evidenceObligation tally the markdown's
234
- * `### Lint evidence obligations` total line derives: how many `@lint` (static) evidence obligations
235
- * reconcile satisfied (balanced), out of the total raised. `summary.byOutcome` is
236
- * kind-agnostic and cannot express the static-only lint total, so it is materialised explicitly.
237
- */
238
- export interface LintTally {
239
- satisfied: number;
240
- total: number;
33
+ export interface FitnessTally {
34
+ readonly satisfied: number;
35
+ readonly total: number;
241
36
  }
242
- /**
243
- * The LEDGER-PURE part of the report summary — every totals field derived from the `Ledger`
244
- * alone. The assembler merges this with the census pass-throughs (`testVolume`, `staticChecks`)
245
- * and interleaves the keys in document order to build the full `Summary`.
246
- */
247
37
  export interface LedgerTally {
248
- scenarioReconciliations: ScenarioReconciliationTotals;
249
- evidenceObligations: EvidenceObligationTotals;
250
- pending: number;
251
- lint: LintTally;
38
+ readonly scenarioReconciliations: ScenarioReconciliationTotals;
39
+ readonly evidenceObligations: EvidenceObligationTotals;
40
+ readonly pending: number;
41
+ readonly fitness: FitnessTally;
252
42
  }
253
- /**
254
- * Tally the LEDGER-PURE summary totals from the balance — the aggregate the markdown's
255
- * trial-balance table derives, carried AS DATA so a later render-from-saved-JSON rebuilds it with
256
- * zero computation (the MATERIALISE ruling). The census pass-throughs (`testVolume`,
257
- * `staticChecks`) are not Ledger-pure and are merged in by the assembler.
258
- */
259
- export declare function ledgerTally(balance: Ledger): LedgerTally;
260
- /**
261
- * The static-only lint tally (RMD-005) — how many `@lint` (static) evidence obligations reconcile
262
- * satisfied (`balanced`), out of the total raised. Byte-for-byte the markdown's
263
- * `countStaticEvidenceObligations` (`src/render/markdown.ts`), so slice 2 can read `satisfied` / `total`
264
- * with zero byte change. `summary.byOutcome` counts ALL kinds, so the static-only total is derived
265
- * here explicitly.
266
- */
267
- export declare function lintTally(balance: Ledger): LintTally;
268
- /** The canonical runtime quality-check order, in reading order. */
43
+ export declare function ledgerTally(ledger: Ledger): LedgerTally;
44
+ export declare function fitnessTally(ledger: Ledger): FitnessTally;
269
45
  export declare const RUNTIME_QUALITY_CHECKS: readonly RuntimeQualityCheck[];
270
- /**
271
- * The materialised runtime-observation totals — the aggregate the markdown's `### Test volume`
272
- * cut derives, carried AS DATA (the MATERIALISE ruling). Two keyings of the SAME posted credits:
273
- * - `rawByRuntimeQualityCheck` — the per-quality-check evidence-observation total over ALL
274
- * runtime credits, regardless of `@SCN` (the runtime axis; `lint` credits are not counted).
275
- * - the per-scenario-kind counts — how many credits posted to a scenario's account
276
- * (`onScenario`), to an invented `phantom-scenario` account (`onPhantomScenario`), and to the
277
- * `suspense-scenario` account (`onSuspenseScenario`).
278
- * These jointly exhaust the raw total by construction:
279
- * `Σ rawByRuntimeQualityCheck = onScenario + onPhantomScenario + onSuspenseScenario`.
280
- */
281
46
  export interface RuntimeObservationTally {
282
- /** Raw per-quality-check evidence-observation totals — ALL runtime credits, regardless of `@SCN`. */
283
- rawByRuntimeQualityCheck: Record<RuntimeQualityCheck, number>;
284
- /**
285
- * The runtime credit total — `Σ rawByRuntimeQualityCheck`, and equally
286
- * `onScenario + onPhantomScenario + onSuspenseScenario` (3F-2231).
287
- *
288
- * RETURNED, not left for the caller to re-derive. The fold computed this sum and discarded it,
289
- * so the assembler summed the same record again to fill `summary.testVolume` — the identical
290
- * `reduce`, in an adapter, for a number the Ledger already knew. Two homes for one total is the
291
- * shape this domain model exists to remove: the Ledger counts its own posted credits because it
292
- * IS the balance, and a consumer asks rather than counts.
293
- */
294
- total: number;
295
- /** Runtime credits posted to a scenario's account (matched-attributed OR no-evidence-obligation). */
296
- onScenario: number;
297
- /** Runtime credits posted to an invented `phantom-scenario` account (an `@SCN` no feature carries). */
298
- onPhantomScenario: number;
299
- /** Runtime credits posted to the `suspense-scenario` account (citing no scenario, or broken). */
300
- onSuspenseScenario: number;
47
+ readonly rawByRuntimeQualityCheck: Record<RuntimeQualityCheck, number>;
48
+ readonly total: number;
49
+ readonly onScenario: number;
50
+ readonly onPhantomScenario: number;
51
+ readonly onSuspenseScenario: number;
301
52
  }
302
- /**
303
- * Tally the runtime evidence observations from the Ledger — a FOLD OVER THE POSTED CREDITS
304
- * (@SCN-RMD-003), the credit-side twin of `ledgerTally`'s debit-side fold. It walks the POSTED
305
- * CREDITS on each Scenario Reconciliation row (@SCN-LDG-022) and reads each credit's account off
306
- * THE ROW IT POSTED TO — a scenario row ⇒ `onScenario`, a phantom row ⇒ `onPhantomScenario`,
307
- * the suspense row ⇒ `onSuspenseScenario` — summing the raw per-quality-check total in lockstep.
308
- *
309
- * It RE-DERIVES NOTHING and it does NOT classify: the reconciler already decided which account
310
- * every credit posts to (the account IS the citation, @SCN-LDG-022), so asking the row is asking
311
- * that decision. There is ONE place that decides what a credit is, so this tally can never disagree
312
- * with the verdict — the views (Test volume, the per-quality-check table) are projections of the
313
- * same rows, not a parallel opinion kept in step.
314
- *
315
- * Static check (`lint`) credits are SKIPPED, ON THE CHECK and never on the absence of a citation
316
- * (@SCN-RPT-023). A fitness credit now CITES its own scenario and posts to an ordinary
317
- * scenario row, so to a naive walk it is indistinguishable from a runtime credit by the account it
318
- * landed on; the `qualityCheck` is the only thing that tells them apart. Counting one would fold
319
- * the static axis into the Test volume, which must not see it at all.
320
- *
321
- * The per-scenario-kind counts feed `summary.testVolume` directly (`onScenario` counts credits
322
- * citing a scenario, INCLUDING no-evidence-obligation — so the 3-termed identity
323
- * `total = onScenario + onPhantomScenario + onSuspenseScenario` holds); `rawByRuntimeQualityCheck`
324
- * is the re-homed per-quality-check headline the by-level table renders.
325
- */
326
53
  export declare function runtimeObservationTally(ledger: Ledger): RuntimeObservationTally;
327
- /**
328
- * The materialised static-check totals — the STATIC-axis analogue of `RuntimeObservationTally`,
329
- * two counts read off the SAME posted static-check credits: `runningStaticCheckCount` (the volume of
330
- * distinct static checks that RAN — every static check a CI step invokes, whether or not its red is
331
- * that job's verdict, 3F-3280) and `uncitedStaticCheckCount` (how many of THOSE no scenario cites — a
332
- * static check running with nothing naming it, the mirror of a runtime `cites-no-scenario` credit).
333
- * The named count is IMPLICIT (`runningStaticCheckCount − uncitedStaticCheckCount`) and NOT carried:
334
- * every cited static check is already a reconciled `lint` sub-row and adds nothing the rows do not
335
- * already hold.
336
- *
337
- * THE SECOND COUNT IS A SUBSET OF THE FIRST, AND THAT IS WHAT MAKES THE IMPLICIT COUNT SOUND
338
- * (@SCN-LNT-033). Both take the same running membership rule, so the subtraction a reader performs
339
- * on the pair can never go below nil — it is a partition of the running set into the named and the
340
- * uncited, not two independently-drawn populations that happen to be printed on one line.
341
- */
342
- export interface StaticObservationTally {
343
- /**
344
- * The running static-check set volume — every check a step of the target's CI runs, whatever
345
- * form the step takes (@SCN-USG-013): a check can be an action as readily as a command. A check
346
- * whose red the job survives RAN and is counted (3F-3280); that it enforces nothing is its own
347
- * row's watermelon (@SCN-LNT-032), not a smaller number here.
348
- */
349
- runningStaticCheckCount: number;
350
- /** Running static checks NO `@lint` cites — a SUBSET of the count above (named is implicit). */
351
- uncitedStaticCheckCount: number;
54
+ export interface FitnessFunctionTally {
55
+ readonly runningFitnessFunctionCount: number;
56
+ readonly uncitedFitnessFunctionCount: number;
352
57
  }
353
- /**
354
- * Tally the static-check observations from the Ledger — a FOLD OVER THE POSTED static-check CREDITS
355
- * (3F-2118), the static-axis twin of `runtimeObservationTally`. It walks the POSTED CREDITS on each
356
- * Scenario Reconciliation row (@SCN-LDG-022), reads each credit off THE ROW IT POSTED TO, and — like
357
- * its runtime sibling — RE-DERIVES NOTHING: the reconciler already decided which account every credit
358
- * posts to, so this can never disagree with the verdict.
359
- *
360
- * `uncitedStaticCheckCount` is the count of RUNNING lint credits on the SUSPENSE row — the
361
- * no-evidence-obligation static checks the reconciler folded there (a static check running with no
362
- * scenario citing it, `cites-no-scenario` on the credit side). THE RUNNING QUALIFIER IS APPLIED
363
- * HERE RATHER THAN ASSUMED (@SCN-LNT-033): the uncited count is the running count's suspense-row
364
- * subset, so the two take one membership rule. A severed check nobody cites RAN, and is in both
365
- * (3F-3280). A BROKEN credit reaches the same row by a different route (@SCN-LNT-026) and is
366
- * excluded: it is a check a scenario DID name, which did not run.
367
- *
368
- * `runningStaticCheckCount` is the count of lint credits that RAN, across ALL rows. One care-move
369
- * the runtime axis does not need (see the block comment above):
370
- * - FILTER TO WHAT RAN (`exists`): a missing (absent) or broken check STILL posts (posting is not
371
- * classifying), but it did not run, so it is excluded — as the retired census's running-only
372
- * `continue` excluded it. A severed check (wired, and the job's verdict does not depend on it)
373
- * ran and is counted; its row reads the watermelon (3F-3280, ruled 2026-09-17).
374
- *
375
- * The named (implicit) count is `runningStaticCheckCount − uncitedStaticCheckCount`, and it cannot
376
- * go below nil: the uncited count is drawn from inside the running one.
377
- */
378
- export declare function staticObservationTally(ledger: Ledger): StaticObservationTally;
58
+ export declare function fitnessFunctionTally(ledger: Ledger): FitnessFunctionTally;
379
59
  //# sourceMappingURL=ledger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../src/domain/ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../src/domain/ledger.ts"],"names":[],"mappings":"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"}