@3f-consulting/spec-controller-core 0.1.0-alpha.7 → 0.1.0-alpha.70

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 +5 -40
  3. package/dist/assemble/evidenceReconciliationFromSources.d.ts.map +1 -1
  4. package/dist/assemble/evidenceReconciliationFromSources.js +30 -325
  5. package/dist/assemble/evidenceReconciliationFromSources.js.map +1 -1
  6. package/dist/assemble/renderInput.d.ts +7 -73
  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 +11 -46
  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 +21 -391
  19. package/dist/domain/evidenceReconciliation.d.ts.map +1 -1
  20. package/dist/domain/evidenceReconciliation.js +87 -382
  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 +8 -393
  27. package/dist/domain/journal.d.ts.map +1 -1
  28. package/dist/domain/journal.js +6 -118
  29. package/dist/domain/journal.js.map +1 -1
  30. package/dist/domain/ledger.d.ts +8 -328
  31. package/dist/domain/ledger.d.ts.map +1 -1
  32. package/dist/domain/ledger.js +23 -326
  33. package/dist/domain/ledger.js.map +1 -1
  34. package/dist/domain/messages.d.ts +213 -0
  35. package/dist/domain/messages.d.ts.map +1 -0
  36. package/dist/domain/messages.js +313 -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 +8 -105
  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 +3 -43
  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 +7 -280
  51. package/dist/domain/qualityCheckReconciliation.d.ts.map +1 -1
  52. package/dist/domain/qualityCheckReconciliation.js +63 -463
  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 +2 -207
  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 +5 -168
  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 +18 -225
  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 +0 -53
  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 +2 -57
  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 +3 -228
  134. package/dist/parse/scenarios.d.ts.map +1 -1
  135. package/dist/parse/scenarios.js +20 -457
  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 +1 -78
  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 +0 -60
  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 +2 -110
  162. package/dist/provenance/provenance.d.ts.map +1 -1
  163. package/dist/provenance/provenance.js +2 -58
  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 +1 -35
  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 +128 -467
  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,304 +1,31 @@
1
- /**
2
- * THE QUALITY CHECK RECONCILIATION — one reconciling item in the accounting frame: the
3
- * per-evidence-obligation line explaining why obligation and observation disagree. This module
4
- * co-locates the concept's type with its OWN behaviour — the outcome vocabulary, the canon
5
- * descriptions, and `reconcileEvidenceObligation`, the pure derivation that computes a single
6
- * obligation's outcome from the observed evidence (module, not class; the rule lives WITH the
7
- * concept, not in the reconcile orchestration that folds it).
8
- */
9
- import type { QualityCheck, EvidenceObligation, EvidenceObservation, GuardEvidenceObservation, FitnessEvidenceObservation, RuntimeEvidenceObservation } from "./journal.js";
10
- /**
11
- * The reconciled OUTCOME of a single quality-check evidence obligation — one
12
- * RECONCILING ITEM in the accounting frame (the per-evidenceObligation line explaining
13
- * why obligation and observation disagree). The rationalisation: the
14
- * per-evidenceObligation axis is the OUTCOME — `satisfied` (its `balanced` retired,
15
- * `balanced` being the scenario VERDICT's word), and the watermelon reads plainly
16
- * as `watermelon`.
17
- */
18
- export type Outcome = "satisfied" | "failing" | "watermelon" | "missing" | "cites-unknown-scenario" | "cites-no-scenario" | "broken" | "no-evidence-obligation" | "no-scn-code" | "both-missing";
19
- /**
20
- * The canon description for each reconciling-item Outcome — the human-readable gloss a
21
- * markdown reader needs (the bare handle means nothing in a CI log). SINGLE SOURCE: the
22
- * markdown renderer renders this description in place of the handle EVERYWHERE an outcome
23
- * surfaces to a reader — the Evidence-reconciliation summary's `↳` decomposition rows, the
24
- * per-scenario reconciling-items list, and the lint-obligation table's Outcome column. The
25
- * JSON keeps the bare handle (the machine axis; a programmatic consumer uses it).
26
- *
27
- * Keyed by EVERY `Outcome` (a `Record<Outcome, …>`), so a new outcome cannot be added to the
28
- * union without a description here — the description can never silently diverge from the
29
- * outcome it names (the drift class this project has been burned by: the census, the views).
30
- * These phrasings ARE the original canon — later abbreviated to the handles; 3F-1626 restores
31
- * them. `satisfied` (the balanced outcome, excluded from the out-of-balance decomposition)
32
- * carries one for totality's sake.
33
- *
34
- * ⚠ KEY ORDER IS LOAD-BEARING (3F-1806). `OUT_OF_BALANCE_OUTCOMES` is DERIVED from these keys,
35
- * and the renderer walks that list to emit the decomposition rows — so this map's key order IS
36
- * the report's row order (`missing` first: the headline cause, the one carrying the bare-level
37
- * split as Detail). Reordering these keys is a REPORT CHANGE, not a cosmetic tidy. The order
38
- * follows canon, grouped by reconciling-item shape: a DEBIT block (missing, failing, watermelon,
39
- * no-scn-code), a CREDIT block (cites-unknown-scenario, cites-no-scenario, no-evidence-obligation), then
40
- * NEITHER (broken, both-missing). @SCN-RPT-019 now pins this SEQUENCE against the rendered `↳`
41
- * rows (3F-1926), so a reorder reds — the exhaustiveness guard alone proved MEMBERSHIP, not
42
- * order, and used not to catch one (which is how the order drifted before it was pinned).
43
- */
1
+ import type { QualityCheck, EvidenceObligation, EvidenceObservation, FitnessEvidenceObservation, RuntimeEvidenceObservation } from "./journal.js";
2
+ import type { Outcome, SidePresence } from "./outcome.js";
3
+ export type { Outcome, SidePresence } from "./outcome.js";
44
4
  export declare const OUTCOME_DESCRIPTION: Record<Outcome, string>;
45
- /**
46
- * The out-of-balance reconciling-item outcomes, in report reading order — every `Outcome`
47
- * except `satisfied` (the BALANCED outcome, not part of the OUT-of-balance decomposition).
48
- * The renderer walks this to emit the summary's `↳` leaf rows (@SCN-RPT-019), each reconciling
49
- * to the out-of-balance total exactly once (a FLAT list: the old debit/credit/neither grouping
50
- * emitted a `↳ <group>-side` subtotal AND its leaves at the same indent, so a naive column-sum
51
- * double-counted — the live 170 vs 85).
52
- *
53
- * DERIVED from the type-forced `OUTCOME_DESCRIPTION`, never hand-listed (3F-1806). It was a
54
- * hand-maintained `readonly Outcome[]` in the renderer, which accepted a missing union member
55
- * SILENTLY: `broken` (@SCN-LDG-017) joined the union, tallied into `byOutcome`, compiled clean,
56
- * and would have been omitted from the table. Deriving the keys makes that omission IMPOSSIBLE
57
- * rather than merely CAUGHT — a new `Outcome` cannot compile without a description, and the
58
- * moment it has one it renders a leaf row with no change to the renderer.
59
- *
60
- * Lives in the model, not the renderer: which outcomes are out-of-balance is the model's rule,
61
- * not a presentation choice (`entity-owns-its-behaviour`). The @SCN-RPT-019 guard remains as the
62
- * end-to-end backstop — it renders real markdown and reads the rows back, deriving its
63
- * expectation from its OWN type-forced record (`double-entry`, not a re-read of this source).
64
- */
65
5
  export declare const OUT_OF_BALANCE_OUTCOMES: readonly Outcome[];
66
- /**
67
- * THE NOMINAL BRAND (@SCN-LDG-030, 3F-2016) — a module-private `unique symbol` phantom field.
68
- * `QualityCheckReconciliation` is `QualityCheckReconciliationFields` PLUS a required field of this
69
- * symbol's type, so no object literal typechecks as a `QualityCheckReconciliation` OUTSIDE this
70
- * module — only `makeQualityCheckReconciliation` (which casts) can mint one. The brand symbol has
71
- * no runtime presence; the field is a Symbol key, so `JSON.stringify` skips it (never
72
- * serialised) and `.toEqual` sees no runtime key (value-literal comparisons stay green). The brand
73
- * restricts CONSTRUCTION only — consumers only READ QCRs, so no read site changes.
74
- */
75
6
  declare const qualityCheckReconciliationBrand: unique symbol;
76
- /**
77
- * A single evidenceObligation's reconciliation outcome — a reconciling item. A SINGLE
78
- * flat shape mirroring EvidenceObligation: keyed on `qualityCheck`, with
79
- * `staticCheck` present IFF `qualityCheck === 'lint'` (the static-check reconciling item).
80
- *
81
- * The un-branded FIELDS (module-internal). The exported `QualityCheckReconciliation` type is this
82
- * intersected with the nominal brand; `makeQualityCheckReconciliation` takes these fields and mints
83
- * the branded value.
84
- */
85
7
  interface QualityCheckReconciliationFields {
86
- /**
87
- * The flat quality-check this reconciling item is about. ABSENT only for the degenerate
88
- * `both-missing` item — the neither-side shape, blank on both sides: it names no
89
- * quality-check because it is neither a debit evidence obligation nor a credit evidence observation. Present on
90
- * every other outcome (debit and credit alike).
91
- */
92
8
  qualityCheck?: QualityCheck;
93
- /** The `staticCheck` handle — present IFF `qualityCheck === 'lint'`. */
94
- staticCheck?: string;
9
+ fitnessFunction?: string;
95
10
  outcome: Outcome;
96
- /**
97
- * The DEBIT side of the two-sided reconciling item (@SCN-LDG-026): the evidence obligation
98
- * this item reconciles, carried on the reconciliation itself rather than joined from a
99
- * separate scenario-level array at print time. Present IFF the obligation Exists — every
100
- * debit-bearing outcome (`satisfied` / `missing` / `failing` / `watermelon`), AND `no-scn-code`,
101
- * which carries a SYNTHESIZED scenario-scope obligation (an empty `{}`, no `qualityCheck` /
102
- * `staticCheck`): canon (`double-entry-manifesto.md` line 39) marks `no-scn-code` Obligation
103
- * Exists, Observation None — the debit twin of `cites-no-scenario` (@SCN-LDG-029). ABSENT on the
104
- * credit-only outcomes (`cites-unknown-scenario` / `cites-no-scenario` / `no-evidence-obligation`) and the
105
- * neither-side outcomes (`broken` / `both-missing`), where no obligation is in scope.
106
- * `JSON.stringify` omits it when undefined, so a byte-identical golden is preserved everywhere the
107
- * obligation is absent.
108
- */
109
11
  evidenceObligation?: EvidenceObligation;
110
- /**
111
- * The CREDIT side of the two-sided reconciling item (@SCN-LDG-027): the evidence observation
112
- * this item reconciles, carried on the reconciliation itself rather than joined from a
113
- * separate scenario-level array at print time. Present IFF the observation Exists — every
114
- * observation-bearing outcome: the two-sided debit outcomes (`satisfied` / `failing` /
115
- * `watermelon`) whose match `reconcileEvidenceObligation` found, AND the credit-only outcomes
116
- * (`cites-unknown-scenario` / `cites-no-scenario` / `no-evidence-obligation`) the fold produces from a
117
- * citing observation. ABSENT on `missing` (obligation Exists, observation None) and the
118
- * neither-side outcomes (`no-scn-code` / `broken` / `both-missing`), where no observation is in
119
- * scope. For a lint `missing` the absent static check is FOUND as the negative fact
120
- * `{exists:false}` — an ABSENCE, not an observation (@SCN-LDG-028) — so it is NOT carried here:
121
- * only a REAL observation (`exists:true`) is the credit side. `JSON.stringify` omits it when
122
- * undefined, so a byte-identical golden is preserved everywhere the observation is absent.
123
- */
124
12
  evidenceObservation?: EvidenceObservation;
125
- /**
126
- * The where-to-fix for a CREDIT-side reconciling item (ruling Q5) — the
127
- * evidence-observation locator (the test-file path the citing credit came from),
128
- * carried so it survives the detail-arrays-into-rows move. Present only on a
129
- * credit-side Quality Check Reconciliation (e.g. `cites-unknown-scenario` on a
130
- * phantom scenario); a debit-side evidence obligation carries none.
131
- */
132
13
  locator?: string;
133
- /**
134
- * The WHAT-BROKE payload of a `broken` credit-side reconciling item (@SCN-LDG-017) — the
135
- * collection error the runner reported, carried alongside the `locator` (the file to fix).
136
- * Present only on a `broken` item; every other outcome carries none.
137
- */
138
14
  message?: string;
139
15
  }
140
- /**
141
- * A single evidenceObligation's reconciliation outcome — the branded reconciling item. The fields
142
- * intersected with the nominal brand (@SCN-LDG-030): mintable ONLY by
143
- * `makeQualityCheckReconciliation`, so every QCR in the system has passed the (outcome,
144
- * side-presence) consistency check. The barrel (`index.ts`) re-exports this TYPE via
145
- * `model.ts`; the phantom field adds no exported SYMBOL, so the symbol NAMES on the public v1
146
- * surface are unchanged — but constructibility is deliberately NARROWED: QCRs are engine-minted,
147
- * and the type is exported for READING the reconciliation the engine produced, not for external
148
- * CONSTRUCTION (the smart constructor is unexported). That narrowed contract is stated executably
149
- * by the type-level guard in `index.test.ts` (@SCN-API-002, 3F-2040), not merely asserted here.
150
- */
151
16
  export type QualityCheckReconciliation = QualityCheckReconciliationFields & {
152
17
  readonly [qualityCheckReconciliationBrand]: typeof qualityCheckReconciliationBrand;
153
18
  };
154
- /**
155
- * Whether a canon-correct reconciling item CARRIES a given side — the value both halves of the
156
- * invariant are stated in: what the canon row required, and what the fields actually carried.
157
- *
158
- * Named rather than restated inline so the fault that reports a divergence (`qualityCheckFault.ts`)
159
- * is typed in the reconciliation's own vocabulary instead of re-spelling the two literals a third
160
- * and fourth time.
161
- */
162
- export type SidePresence = "Exists" | "None";
163
- /**
164
- * THE CANON OUTCOME-SIDE PROFILE (@SCN-LDG-030, 3F-2016) — the (outcome → side-presence) table
165
- * transcribed from canon (`double-entry-manifesto.md` lines 35-44), keyed by EVERY `Outcome` (a
166
- * `Record<Outcome, …>`), so a new outcome cannot join the union without STATING its side
167
- * profile here — the type-forced totality that makes this map the SINGLE SOURCE the invariant is
168
- * checked against (mirroring `OUTCOME_DESCRIPTION`).
169
- *
170
- * `obligation`/`observation` are `"Exists" | "None"` — whether a canon-correct reconciling item
171
- * of that outcome CARRIES the debit (evidence obligation) and the credit (evidence observation)
172
- * side respectively. NOT a naive function of side-presence: `missing` and `no-scn-code` share
173
- * (Exists, None); the three credit outcomes (`cites-unknown-scenario` / `cites-no-scenario` /
174
- * `no-evidence-obligation`) share (None, Exists). So the invariant `makeQualityCheckReconciliation` enforces
175
- * is (outcome, side-presence) CONSISTENCY against this row, never a derivation of outcome FROM the
176
- * sides.
177
- */
178
19
  export declare const OUTCOME_SIDE_PROFILE: Record<Outcome, {
179
20
  obligation: SidePresence;
180
21
  observation: SidePresence;
181
22
  }>;
182
- /**
183
- * THE SMART CONSTRUCTOR (@SCN-LDG-030, 3F-2016) — the ONLY way to mint a
184
- * `QualityCheckReconciliation`. It takes `outcome` as GIVEN (a consistency check, NOT a
185
- * derivation — `missing`/`no-scn-code` share a profile, so the outcome cannot be recovered from
186
- * side-presence alone), looks up the canon row in `OUTCOME_SIDE_PROFILE`, and THROWS if the
187
- * carried sides disagree with it: a divergent (outcome, side-presence) pair — the watermelon class
188
- * this tool exists to catch, in its own output — is UNCONSTRUCTIBLE.
189
- *
190
- * Returns `fields` UNCHANGED (cast to the branded type): the producer's own key order is preserved
191
- * verbatim, so every unchanged row stays byte-identical (no object is reconstructed).
192
- */
193
23
  export declare function makeQualityCheckReconciliation(fields: QualityCheckReconciliationFields): QualityCheckReconciliation;
194
- /**
195
- * Reconcile one evidence obligation against the observed evidence, keyed on the
196
- * flat `qualityCheck`. `qualityCheck === "lint"` is the watermelon
197
- * discriminator: it routes to the STATIC-check mapping;
198
- * every other value routes to the RUNTIME-result mapping.
199
- */
200
- export declare function reconcileEvidenceObligation(scnId: string, req: EvidenceObligation, evidenceObservations: EvidenceObservation[]): QualityCheckReconciliation;
201
- /**
202
- * The NO-EVIDENCE-OBLIGATION items on a real scenario's row (@SCN-LDG-008) — one per credit citing THIS
203
- * scenario at a quality-check it never named. The credit posts to a real row against NO
204
- * evidence obligation, so the item is CREDIT-ONLY (no obligation is in scope).
205
- *
206
- * The pair-check is what distinguishes no-evidence-obligation from a matched credit: a credit at a NAMED
207
- * `(scnId, quality-check)` pair reconciles satisfied/failing via `reconcileEvidenceObligation` and
208
- * is NOT re-listed here. `evidenceObligationPairs` is the journal's rule (`evidenceObligationPairsOf`),
209
- * built once and shared — which is what makes a credit citing a PENDING pair land here rather than
210
- * nowhere (3F-1858: a pending obligation names nothing, so such a credit is no-evidence-obligation exactly
211
- * as when nothing was raised at all, and the run that used to read balanced over it now fails).
212
- */
24
+ export declare function reconcileEvidenceObligation(scnId: string, obligation: EvidenceObligation, evidenceObservations: EvidenceObservation[]): QualityCheckReconciliation;
213
25
  export declare function noEvidenceObligationReconciliationsOf(scnId: string, postedCredits: readonly EvidenceObservation[], evidenceObligationPairs: ReadonlySet<string>): QualityCheckReconciliation[];
214
- /**
215
- * The items on a PHANTOM row (@SCN-LDG-006) — one `cites-unknown-scenario` per credit citing an
216
- * `@SCN` no scenario carries, in citation order. CREDIT-ONLY: a phantom row is minted BY a credit,
217
- * so nothing can ever have been named of it, and no obligation is in scope.
218
- *
219
- * THE WHERE-TO-FIX IS THE WHOLE OF WHAT THIS ITEM CAN OFFER, which is why both halves ride through
220
- * (ruling Q5): a phantom item has no obligation to point a reader at instead. A runtime credit
221
- * carries its locator (the test file that cited); a FITNESS credit carries the CHECK THAT RAN —
222
- * it is read from a target's config, not from a test file, so it has no locator and the handle is
223
- * all there is. That half became reachable when the fitness axis started citing (@SCN-LNT-009);
224
- * the suspense arm below already carried it, and the two unmatched-credit destinations must not
225
- * tell a reader different amounts about the same class of fault.
226
- */
227
26
  export declare function citesUnknownScenarioReconciliationsOf(credits: readonly EvidenceObservation[]): QualityCheckReconciliation[];
228
- /**
229
- * The items on the SUSPENSE row (@SCN-LDG-007) — every entry that names no scenario at all,
230
- * in the ONE order canon fixes.
231
- *
232
- * THE ORDER IS THE RULE, not an accident of assembly. `broken` comes FIRST because a broken run's
233
- * other suspense items are downstream noise: the reader must be sent to the harness before being
234
- * asked to read anything the harness failed to produce.
235
- *
236
- * THE SPLIT (@SCN-LDG-017) is why `broken` and `cites-no-scenario` are separate arms rather than
237
- * one map over "everything uncited". Both land here because they name no scenario, but they are
238
- * distinguished by errored-vs-completed and their remedies differ: a `cites-no-scenario` test RAN
239
- * and forgot its citation (add the `@SCN`); a `broken` suite never ran at all (fix the harness).
240
- * Folding the second into the first would hide a collection failure behind the wrong cure.
241
- *
242
- * The three arms carry different payloads, each for a stated reason:
243
- * - `broken` carries its WHERE-to-fix (locator) and its WHAT-broke (the runner's message), and
244
- * NO `evidenceObservation` — a proof that never ran is not an observed piece of evidence.
245
- * - an uncited runtime credit carries the observation it reconciles, plus its locator.
246
- * - a no-evidence-obligation static check carries its handle and its observation; it has no locator (a
247
- * static check is read from config, not from a test file).
248
- *
249
- * THE BROKEN STREAM TAKES EITHER AXIS SINCE @SCN-LNT-026, AND THE ARM NEEDED NO BRANCH FOR IT.
250
- * A converted static check that did not run carries the same two payload halves under the same
251
- * two names, so the map reads what the observation holds exactly as it does for a vitest suite
252
- * that failed to collect. What differs is only the `qualityCheck` the item then carries — `lint`
253
- * rather than a runtime tier — which is read off the observation and not decided here.
254
- */
255
- export declare function suspenseReconciliationsOf(brokenEvidence: readonly (RuntimeEvidenceObservation | GuardEvidenceObservation)[], uncited: readonly RuntimeEvidenceObservation[], noEvidenceObligationGuards: readonly FitnessEvidenceObservation[]): QualityCheckReconciliation[];
256
- /**
257
- * The item on an UNTAGGED scenario's row (@SCN-LDG-021) — the DEBIT twin of `cites-no-scenario`
258
- * (same missing link, opposite side; suspense stays credit-only).
259
- *
260
- * A scenario carrying no `@SCN` is REAL and ORDINARY — cucumber runs it — but its obligation has no
261
- * CODE for an observation to link to, so it could reconcile NOTHING: not satisfied, not failing,
262
- * not even `missing`, because an obligation never RAISED cannot be ABSENT. Without this item it
263
- * contributed nothing to the verdict and the run went green over work nothing proves.
264
- *
265
- * It carries NO `qualityCheck`: with no code, no observation can link at ANY tier, so the missing
266
- * link is SCENARIO-scope, not tier-scope (the shape `both-missing` also uses). The synthesised
267
- * scenario-scope obligation — an empty `{}` — lives ONLY on this item; the row's own
268
- * `evidenceObligations` stays empty (canon citation: double-entry-manifesto line 39, Obligation
269
- * Exists / Observation None).
270
- */
27
+ export declare function suspenseReconciliationsOf(brokenEvidence: readonly (RuntimeEvidenceObservation | FitnessEvidenceObservation)[], uncited: readonly RuntimeEvidenceObservation[], noEvidenceObligationFitnessFunctions: readonly FitnessEvidenceObservation[]): QualityCheckReconciliation[];
271
28
  export declare function noScnCodeReconciliations(): QualityCheckReconciliation[];
272
- /**
273
- * The degenerate BOTH-MISSING item (@SCN-LDG-009) — the NEITHER-side outcome, blank on both sides:
274
- * no `qualityCheck` (it is neither a debit obligation nor a credit observation), no carried entry.
275
- * A scenario that reconciled to zero rows on BOTH sides posts exactly one of these, and is
276
- * out-of-balance through it.
277
- *
278
- * Construction lives here with the item; the rule for WHEN a row carries it instead of its sub-rows
279
- * is the ROW's, and lives on `scenarioReconciliation` (`qualityCheckReconciliationsOf`).
280
- */
29
+ export declare function duplicateScnCodeReconciliationsOf(obligations: readonly EvidenceObligation[]): QualityCheckReconciliation[];
281
30
  export declare function bothMissingReconciliation(): QualityCheckReconciliation;
282
- /**
283
- * The item on the row a CONFIGURED ROW WITH NO SCENARIO earns (@SCN-LNT-027, 3F-3472) — canon's
284
- * `missing`: Obligation Exists, Observation None.
285
- *
286
- * NO NEW OUTCOME, AND THAT IS THE ARGUMENT RATHER THAN THE CONVENIENCE. A row the manifest declares
287
- * and no scenario specifies is a debit nothing observed, which is what `missing` already means and
288
- * what `features/fitness-checks.feature` promises in those words. Minting a fourth corpus-shape
289
- * outcome would put a second sentence beside a row canon already has a sentence for.
290
- *
291
- * THE OBLIGATION IS THE ROW'S OWN, and it is REAL — `{ qualityCheck: "lint", staticCheck: <the
292
- * characteristic> }`, the same shape a converted scenario raises. That is what separates this from
293
- * the uncoded-work item beside it: THAT one synthesises an empty `{}` because an untagged scenario
294
- * names no check at all, and this row names exactly one. So the row posts it as a debit too, and
295
- * the summary counts the obligation the manifest raised.
296
- *
297
- * NOTHING HERE CAN DISCHARGE IT, and that is structural rather than asserted: no observation is
298
- * offered to this item at all, and the minted row's `@SCN` is not a member of the set the citation
299
- * router posts credits against. A credit citing the row's code still mints a phantom row
300
- * (@SCN-LNT-009); there is no route by which it reaches this one.
301
- */
302
- export declare function unspecifiedRowReconciliations(characteristic: string): QualityCheckReconciliation[];
303
- export {};
304
31
  //# sourceMappingURL=qualityCheckReconciliation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"qualityCheckReconciliation.d.ts","sourceRoot":"","sources":["../../src/domain/qualityCheckReconciliation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qualityCheckReconciliation.d.ts","sourceRoot":"","sources":["../../src/domain/qualityCheckReconciliation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,0BAA0B,EAC1B,0BAA0B,EAC3B,MAAM,cAAc,CAAC;AAOtB,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE1D,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE1D,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAcvD,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,SAAS,OAAO,EAER,CAAC;AAE/C,OAAO,CAAC,MAAM,+BAA+B,EAAE,OAAO,MAAM,CAAC;AAE7D,UAAU,gCAAgC;IACxC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,0BAA0B,GAAG,gCAAgC,GAAG;IAC1E,QAAQ,CAAC,CAAC,+BAA+B,CAAC,EAAE,OAAO,+BAA+B,CAAC;CACpF,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CACvC,OAAO,EACP;IAAE,UAAU,EAAE,YAAY,CAAC;IAAC,WAAW,EAAE,YAAY,CAAA;CAAE,CAaxD,CAAC;AAEF,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,gCAAgC,GACvC,0BAA0B,CAmB5B;AA8DD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,kBAAkB,EAC9B,oBAAoB,EAAE,mBAAmB,EAAE,GAC1C,0BAA0B,CAiB5B;AAQD,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,SAAS,mBAAmB,EAAE,EAC7C,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAAC,GAC3C,0BAA0B,EAAE,CAe9B;AAED,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,SAAS,mBAAmB,EAAE,GACtC,0BAA0B,EAAE,CAU9B;AAED,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,SAAS,CAAC,0BAA0B,GAAG,0BAA0B,CAAC,EAAE,EACpF,OAAO,EAAE,SAAS,0BAA0B,EAAE,EAC9C,oCAAoC,EAAE,SAAS,0BAA0B,EAAE,GAC1E,0BAA0B,EAAE,CA2B9B;AAED,wBAAgB,wBAAwB,IAAI,0BAA0B,EAAE,CAEvE;AAED,wBAAgB,iCAAiC,CAC/C,WAAW,EAAE,SAAS,kBAAkB,EAAE,GACzC,0BAA0B,EAAE,CAa9B;AAED,wBAAgB,yBAAyB,IAAI,0BAA0B,CAEtE"}