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

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,92 +1,26 @@
1
- /**
2
- * The whole-document report model (@SCN-RMD-001) — the ONE model
3
- * both renderings consume, in document order, so the JSON and the markdown are one
4
- * model in two renderings, not two dialects.
5
- *
6
- * `assembleRenderInput` builds it from the existing reconcile pieces (the balance, the run
7
- * context, and the obligation / observation / static-check sibling reads). The JSON renderer collapses
8
- * to a glue-free `JSON.stringify(assembleRenderInput(...))`. The assembler is the ONLY place the
9
- * JSON-surface vocabulary lives — the manifesto-vocabulary key renames (the revert)
10
- * are MAPPED here so they never ripple into markdown.ts / evidenceObservations.ts internals, keeping the
11
- * markdown byte-identical this slice.
12
- *
13
- * The sections are in document order with `runProvenance` renamed, a materialised `summary`,
14
- * the per-scenario reconciliation under `evidenceReconciliation` (RMD-002), and the observed
15
- * evidence under `evidenceObservations` (RMD-003) — every JSON section reads in the manifesto's
16
- * vocabulary. The static-check census is `summary.staticChecks` counts alone (2.4): its
17
- * member detail lives in the rows (named → `@lint` sub-rows; no-evidence-obligation → the suspense row),
18
- * so there is no standalone `staticChecks` section — symmetric with the runtime side.
19
- *
20
- * Parent: (@SCN-RMD-001).
21
- */
1
+ import type { ScenarioCodeError, ScenarioCodePopulation } from "../domain/scenarioCodeError.js";
22
2
  import type { Ledger } from "../model.js";
23
3
  import type { EvidenceReconciliation, Summary } from "../domain/evidenceReconciliation.js";
24
4
  import { type ProvenanceObject, type RunContext } from "../provenance/provenance.js";
25
- import type { EvidenceObligations, UntaggedScenario } from "../census/evidenceObligations.js";
26
- export type { ScenarioReconciliationTotals, EvidenceObligationTotals, MissingByQualityCheck, LintTally, } from "../domain/ledger.js";
27
- export type { Summary, TestVolumeTotals, StaticCheckTotals, EvidenceReconciliation, } from "../domain/evidenceReconciliation.js";
28
- /** The evidence-obligation census section, as serialised on the report. */
5
+ import type { EvidenceObligations, SharedScnCode, UntaggedScenario } from "../census/evidenceObligations.js";
6
+ export type { ScenarioReconciliationTotals, EvidenceObligationTotals, MissingByQualityCheck, FitnessTally, } from "../domain/ledger.js";
7
+ export type { Summary, TestVolumeTotals, FitnessFunctionTotals, EvidenceReconciliation, } from "../domain/evidenceReconciliation.js";
29
8
  export interface EvidenceObligationsSection {
30
9
  excludedOccurrences: number;
31
10
  untaggedScenarios: UntaggedScenario[];
32
- proseOnlyCodes: string[];
11
+ sharedScnCodes?: SharedScnCode[];
33
12
  }
34
- /**
35
- * Presentation metadata — a small top-level object holding the run's PRESENTATION
36
- * facts (names/titles), kept cleanly SEPARATE from the reconciliation records (`summary` /
37
- * `evidenceReconciliation` / `evidenceObservations` / `staticChecks`). It carries the feature
38
- * titles (the `feature-code → slug` map the by-feature cut names each feature from); it is
39
- * NOT a reconciliation record, so it does not sit as a sibling of the records. Present only
40
- * when the run carries ≥1 coded feature (i.e. when `featureNames` is non-empty).
41
- */
42
13
  export interface ReportMetadata {
43
- /** The feature titles — the `feature-code → slug` map (@SCN-RMD-006). */
44
14
  featureNames?: Record<string, string>;
45
15
  }
46
- /**
47
- * The whole-document report — the ordered sections as data. RMD-002 / RMD-003 rename the interim
48
- * `scenarios` / `evidenceObservations` keys to `evidenceReconciliation` / `evidenceObservations`;
49
- * the static-check census is `summary.staticChecks` counts alone (2.4 — the standalone
50
- * `staticChecks` section collapsed, its member detail now in the rows). The `warnings` top-level
51
- * key was RETIRED — a zero-evidence scenario is now a `both-missing` row in
52
- * `evidenceReconciliation`, not a separate axis.
53
- */
54
16
  export interface RenderInput {
55
17
  runProvenance: ProvenanceObject;
56
18
  summary: Summary;
57
- /**
58
- * THE LEDGER — the accounts with their posted entries (@SCN-RMD-002, 3F-1848). Sits BESIDE
59
- * `summary`, so root reads as chain step 6 literally: "The summary has the totals and the ledger
60
- * the detail."
61
- *
62
- * Renamed from the member `evidenceReconciliation` — the 3F-1138 error ONE LAYER DOWN. This
63
- * document IS the Evidence Reconciliation, so a key of that name was the layer naming itself
64
- * inside itself, and the grid it named is by canon the LEDGER.
65
- *
66
- * Typed `Ledger`, NOT `ScenarioReconciliation[]`: code identifiers and JSON keys are ONE
67
- * vocabulary (manifesto line 3), so this and `"ledger": { "scenarioReconciliations": [...] }`
68
- * agree as OBJECTS — a Ledger that holds entries cannot serialise as a bare array of rows.
69
- */
70
19
  ledger: Ledger;
20
+ scenarioCodeErrors?: readonly ScenarioCodeError[];
21
+ scenarioCodePopulation?: ScenarioCodePopulation;
71
22
  evidenceObligations?: EvidenceObligationsSection;
72
- /**
73
- * The presentation metadata — the feature titles (`metadata.featureNames`, the
74
- * `feature-code → slug` map the by-feature cut names each feature in full from). It is
75
- * presentation *metadata* (names), NOT a reconciliation record, so it is cleanly separated
76
- * from the records rather than sitting as their sibling. The LAST document key (the retired
77
- * `warnings` key no longer trails it).
78
- */
79
23
  metadata?: ReportMetadata;
80
24
  }
81
- /**
82
- * Assemble the whole-document report from the reconcile pieces. The JSON-surface vocabulary
83
- * lives HERE (mapped, not renamed at the model): `provenance` → `runProvenance`; `scenarios`
84
- * → `evidenceReconciliation`; `evidenceObservations` → `evidenceObservations` (+ `phantom`/`suspense` →
85
- * `phantomEvidenceObservations`/`suspenseEvidenceObservations`); the static-check census is the
86
- * materialised `summary.staticChecks` counts alone (2.4 — no standalone section, the
87
- * member detail lives in the rows); the summary is materialised. Sections are inserted in document
88
- * order, so JSON.stringify preserves it. The optional sections are included only when their sibling
89
- * read is threaded (the CLI always threads them; the narrower-arg tests exercise omission).
90
- */
91
25
  export declare function assembleRenderInput(evidenceReconciliation: EvidenceReconciliation, ctx: RunContext, evidenceObligations?: EvidenceObligations, featureNames?: ReadonlyMap<string, string>): RenderInput;
92
26
  //# sourceMappingURL=renderInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderInput.d.ts","sourceRoot":"","sources":["../../src/assemble/renderInput.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC3F,OAAO,EAAoB,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACvG,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAK9F,YAAY,EACV,4BAA4B,EAC5B,wBAAwB,EACxB,qBAAqB,EACrB,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,OAAO,EACP,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAE7C,2EAA2E;AAC3E,MAAM,WAAW,0BAA0B;IACzC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAOD;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,gBAAgB,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;;;;;;;;OAYG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,0BAA0B,CAAC;IAKjD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,sBAAsB,EAAE,sBAAsB,EAC9C,GAAG,EAAE,UAAU,EACf,mBAAmB,CAAC,EAAE,mBAAmB,EACzC,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,WAAW,CA+Bb"}
1
+ {"version":3,"file":"renderInput.d.ts","sourceRoot":"","sources":["../../src/assemble/renderInput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAChG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC3F,OAAO,EAAoB,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACvG,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAE7G,YAAY,EACV,4BAA4B,EAC5B,wBAAwB,EACxB,qBAAqB,EACrB,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,OAAO,EACP,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAE7C,MAAM,WAAW,0BAA0B;IACzC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,gBAAgB,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAClD,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,mBAAmB,CAAC,EAAE,0BAA0B,CAAC;IACjD,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CACjC,sBAAsB,EAAE,sBAAsB,EAC9C,GAAG,EAAE,UAAU,EACf,mBAAmB,CAAC,EAAE,mBAAmB,EACzC,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,WAAW,CAmBb"}
@@ -1,61 +1,19 @@
1
- /**
2
- * The whole-document report model (@SCN-RMD-001) — the ONE model
3
- * both renderings consume, in document order, so the JSON and the markdown are one
4
- * model in two renderings, not two dialects.
5
- *
6
- * `assembleRenderInput` builds it from the existing reconcile pieces (the balance, the run
7
- * context, and the obligation / observation / static-check sibling reads). The JSON renderer collapses
8
- * to a glue-free `JSON.stringify(assembleRenderInput(...))`. The assembler is the ONLY place the
9
- * JSON-surface vocabulary lives — the manifesto-vocabulary key renames (the revert)
10
- * are MAPPED here so they never ripple into markdown.ts / evidenceObservations.ts internals, keeping the
11
- * markdown byte-identical this slice.
12
- *
13
- * The sections are in document order with `runProvenance` renamed, a materialised `summary`,
14
- * the per-scenario reconciliation under `evidenceReconciliation` (RMD-002), and the observed
15
- * evidence under `evidenceObservations` (RMD-003) — every JSON section reads in the manifesto's
16
- * vocabulary. The static-check census is `summary.staticChecks` counts alone (2.4): its
17
- * member detail lives in the rows (named → `@lint` sub-rows; no-evidence-obligation → the suspense row),
18
- * so there is no standalone `staticChecks` section — symmetric with the runtime side.
19
- *
20
- * Parent: (@SCN-RMD-001).
21
- */
22
1
  import { provenanceObject } from "../provenance/provenance.js";
23
- /**
24
- * Assemble the whole-document report from the reconcile pieces. The JSON-surface vocabulary
25
- * lives HERE (mapped, not renamed at the model): `provenance` → `runProvenance`; `scenarios`
26
- * → `evidenceReconciliation`; `evidenceObservations` → `evidenceObservations` (+ `phantom`/`suspense` →
27
- * `phantomEvidenceObservations`/`suspenseEvidenceObservations`); the static-check census is the
28
- * materialised `summary.staticChecks` counts alone (2.4 — no standalone section, the
29
- * member detail lives in the rows); the summary is materialised. Sections are inserted in document
30
- * order, so JSON.stringify preserves it. The optional sections are included only when their sibling
31
- * read is threaded (the CLI always threads them; the narrower-arg tests exercise omission).
32
- */
33
2
  export function assembleRenderInput(evidenceReconciliation, ctx, evidenceObligations, featureNames) {
34
3
  return {
35
4
  runProvenance: provenanceObject(ctx),
36
- // THE CONCEPT, SPREAD (3F-2233) — `summary` then `ledger`, exactly the key order the document
37
- // has always had, so the JSON is byte-identical. `assemble` no longer BUILDS either: the
38
- // Evidence Reconciliation arrives whole from its own factory, and this function only frames it
39
- // with the run's provenance, the census section and the presentation metadata.
40
5
  ...evidenceReconciliation,
41
6
  ...(evidenceObligations
42
7
  ? {
43
8
  evidenceObligations: {
44
9
  excludedOccurrences: evidenceObligations.excludedOccurrences,
45
10
  untaggedScenarios: evidenceObligations.untaggedScenarios,
46
- proseOnlyCodes: evidenceObligations.proseOnlyCodes,
11
+ ...(evidenceObligations.sharedScnCodes && evidenceObligations.sharedScnCodes.length > 0
12
+ ? { sharedScnCodes: evidenceObligations.sharedScnCodes }
13
+ : {}),
47
14
  },
48
15
  }
49
16
  : {}),
50
- // No staticChecks census SECTION (2.4): the guard member detail lives in the rows
51
- // (named → each scenario's `@lint` sub-row; no-evidence-obligation → the suspense row), symmetric with
52
- // the runtime side. The counts survive in `summary.staticChecks` (the balance-check identity).
53
- // No `evidenceObservations` SECTION (@SCN-RMD-003 / @SCN-RPT-010, 3F-2103): the runtime
54
- // evidence-observation counting is RETIRED to the Ledger fold (`runtimeObservationTally`). Its
55
- // raw totals re-home onto `summary.rawByRuntimeQualityCheck`; the per-`(scnId, quality-check)`
56
- // `attributed[]` did NOT re-home — it re-represented the posted credits the Ledger already
57
- // carries (`ledger.scenarioReconciliations[].evidenceObservations`), the parallel store the
58
- // done-criterion deletes rather than relocates. The grid cell counts those credits off the rows.
59
17
  ...(featureNames && featureNames.size > 0
60
18
  ? { metadata: { featureNames: Object.fromEntries(featureNames) } }
61
19
  : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"renderInput.js","sourceRoot":"","sources":["../../src/assemble/renderInput.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,OAAO,EAAE,gBAAgB,EAA0C,MAAM,6BAA6B,CAAC;AAoFvG;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CACjC,sBAA8C,EAC9C,GAAe,EACf,mBAAyC,EACzC,YAA0C;IAE1C,OAAO;QACL,aAAa,EAAE,gBAAgB,CAAC,GAAG,CAAC;QACpC,8FAA8F;QAC9F,yFAAyF;QACzF,+FAA+F;QAC/F,+EAA+E;QAC/E,GAAG,sBAAsB;QACzB,GAAG,CAAC,mBAAmB;YACrB,CAAC,CAAC;gBACE,mBAAmB,EAAE;oBACnB,mBAAmB,EAAE,mBAAmB,CAAC,mBAAmB;oBAC5D,iBAAiB,EAAE,mBAAmB,CAAC,iBAAiB;oBACxD,cAAc,EAAE,mBAAmB,CAAC,cAAc;iBACnD;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,kFAAkF;QAClF,uGAAuG;QACvG,+FAA+F;QAE/F,wFAAwF;QACxF,+FAA+F;QAC/F,+FAA+F;QAC/F,2FAA2F;QAC3F,4FAA4F;QAC5F,iGAAiG;QACjG,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC;YACvC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,EAAE;YAClE,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"renderInput.js","sourceRoot":"","sources":["../../src/assemble/renderInput.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAA0C,MAAM,6BAA6B,CAAC;AAoCvG,MAAM,UAAU,mBAAmB,CACjC,sBAA8C,EAC9C,GAAe,EACf,mBAAyC,EACzC,YAA0C;IAE1C,OAAO;QACL,aAAa,EAAE,gBAAgB,CAAC,GAAG,CAAC;QACpC,GAAG,sBAAsB;QACzB,GAAG,CAAC,mBAAmB;YACrB,CAAC,CAAC;gBACE,mBAAmB,EAAE;oBACnB,mBAAmB,EAAE,mBAAmB,CAAC,mBAAmB;oBAC5D,iBAAiB,EAAE,mBAAmB,CAAC,iBAAiB;oBACxD,GAAG,CAAC,mBAAmB,CAAC,cAAc,IAAI,mBAAmB,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;wBACrF,CAAC,CAAC,EAAE,cAAc,EAAE,mBAAmB,CAAC,cAAc,EAAE;wBACxD,CAAC,CAAC,EAAE,CAAC;iBACR;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC;YACvC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,EAAE;YAClE,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC"}
@@ -1,57 +1,22 @@
1
- /**
2
- * The EvidenceObligations — the obligation-corpus census carried ALONGSIDE the balance, a
3
- * sibling to both the pure Ledger (the obligation-vs-observation verdict data) and
4
- * the RunContext (run metadata). It records how the parsed corpus reconciles
5
- * against EVERY raw @SCN mention in the source: how many ids the source mentioned in
6
- * total (tag + non-tag context) vs how many were actually read as scenarios.
7
- *
8
- * The lone non-derivable corpus fact is `excludedOccurrences` (raw − scenarioCount): the
9
- * @SCN ids seen in prose, comments, or step text that the tag-line parser ignores.
10
- * `scenarioCount` is derivable from the balance and `rawScnOccurrences` is derivable
11
- * as scenarioCount + excludedOccurrences, so only `excludedOccurrences` is persisted
12
- * on the JSON surface (project design §3). Threaded CLI→renderers exactly like
13
- * RunContext — a third, OPTIONAL renderer argument — so the existing 2-arg byte/JSON
14
- * guards stay green untouched.
15
- *
16
- * Parent: (@SCN-RPT-008).
17
- */
18
- /**
19
- * One untagged scenario (@SCN-RPT-014) — a Gherkin scenario header with no
20
- * `@SCN` tag, located by its feature file + scenario name (the where-to-fix locator).
21
- */
22
1
  export interface UntaggedScenario {
23
- /** The feature file the scenario lives in (e.g. `report.feature`). */
24
2
  feature: string;
25
- /** The scenario name — the text after the `Scenario:`/`Outline:`/`Example:` keyword. */
26
3
  scenario: string;
27
4
  }
28
- /** The scenario-corpus census — a reconciliation-read fact carried beside the balance. */
5
+ export declare function untaggedScenarioId({ feature, scenario }: UntaggedScenario): string;
6
+ export interface SharedScnCode {
7
+ scnId: string;
8
+ scenarios: UntaggedScenario[];
9
+ }
29
10
  export interface EvidenceObligations {
30
- /** Every @SCN-FFF-NNN occurrence in the whole source (tag-line + non-tag context). */
31
11
  rawScnOccurrences: number;
32
- /** The @SCN ids actually read as scenarios. */
33
12
  scenarioCount: number;
34
- /** rawScnOccurrences − scenarioCount: ids seen in non-tag context, excluded. */
35
13
  excludedOccurrences: number;
36
- /**
37
- * Gherkin scenarios with no @SCN tag — feature:scenario locators, sorted.
38
- * A NEW non-derivable obligation-side datum, so it persists on JSON beside
39
- * `excludedOccurrences` (project design §3).
40
- */
41
14
  untaggedScenarios: UntaggedScenario[];
42
- /**
43
- * @SCN codes that appear only in prose, never as a tag anywhere — the
44
- * dangling references, sorted. A cross-corpus `proseCodes − tagCodes` difference,
45
- * distinct from `excludedOccurrences` (raw occurrences). Non-derivable obligation-side
46
- * datum → persists on JSON beside the others (project design §3).
47
- */
48
- proseOnlyCodes: string[];
15
+ sharedScnCodes?: SharedScnCode[];
49
16
  }
50
- /**
51
- * Build a EvidenceObligations from the raw-occurrence count, the scenario count,
52
- * and the untagged scenarios: `excludedOccurrences = raw − scenarioCount` — the ids
53
- * seen in non-tag context (each scenario contributes exactly one tag-line
54
- * occurrence). `untaggedScenarios` defaults to empty for callers that don't read them.
55
- */
56
- export declare function evidenceObligations(raw: number, scenarioCount: number, untaggedScenarios?: UntaggedScenario[], proseOnlyCodes?: string[]): EvidenceObligations;
17
+ export declare function evidenceObligations(raw: number, scenarioCount: number, untaggedScenarios?: UntaggedScenario[], sharedScnCodes?: SharedScnCode[]): EvidenceObligations;
18
+ export declare function sharedScnCodesOf(files: readonly {
19
+ feature: string;
20
+ source: string;
21
+ }[]): SharedScnCode[];
57
22
  //# sourceMappingURL=evidenceObligations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"evidenceObligations.d.ts","sourceRoot":"","sources":["../../src/census/evidenceObligations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,0FAA0F;AAC1F,MAAM,WAAW,mBAAmB;IAClC,sFAAsF;IACtF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC;;;;;OAKG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,iBAAiB,GAAE,gBAAgB,EAAO,EAC1C,cAAc,GAAE,MAAM,EAAO,GAC5B,mBAAmB,CAQrB"}
1
+ {"version":3,"file":"evidenceObligations.d.ts","sourceRoot":"","sources":["../../src/census/evidenceObligations.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,gBAAgB,GAAG,MAAM,CAElF;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,iBAAiB,GAAE,gBAAgB,EAAO,EAC1C,cAAc,GAAE,aAAa,EAAO,GACnC,mBAAmB,CAQrB;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,GACpD,aAAa,EAAE,CAWjB"}
@@ -1,33 +1,27 @@
1
- /**
2
- * The EvidenceObligations — the obligation-corpus census carried ALONGSIDE the balance, a
3
- * sibling to both the pure Ledger (the obligation-vs-observation verdict data) and
4
- * the RunContext (run metadata). It records how the parsed corpus reconciles
5
- * against EVERY raw @SCN mention in the source: how many ids the source mentioned in
6
- * total (tag + non-tag context) vs how many were actually read as scenarios.
7
- *
8
- * The lone non-derivable corpus fact is `excludedOccurrences` (raw − scenarioCount): the
9
- * @SCN ids seen in prose, comments, or step text that the tag-line parser ignores.
10
- * `scenarioCount` is derivable from the balance and `rawScnOccurrences` is derivable
11
- * as scenarioCount + excludedOccurrences, so only `excludedOccurrences` is persisted
12
- * on the JSON surface (project design §3). Threaded CLI→renderers exactly like
13
- * RunContext — a third, OPTIONAL renderer argument — so the existing 2-arg byte/JSON
14
- * guards stay green untouched.
15
- *
16
- * Parent: (@SCN-RPT-008).
17
- */
18
- /**
19
- * Build a EvidenceObligations from the raw-occurrence count, the scenario count,
20
- * and the untagged scenarios: `excludedOccurrences = raw − scenarioCount` — the ids
21
- * seen in non-tag context (each scenario contributes exactly one tag-line
22
- * occurrence). `untaggedScenarios` defaults to empty for callers that don't read them.
23
- */
24
- export function evidenceObligations(raw, scenarioCount, untaggedScenarios = [], proseOnlyCodes = []) {
1
+ import { parseTaggedScenarios } from "../parse/scenarios.js";
2
+ import { CORE_MESSAGES, CoreMessage } from "../domain/messages.js";
3
+ export function untaggedScenarioId({ feature, scenario }) {
4
+ return CORE_MESSAGES[CoreMessage.UntaggedScenarioId](feature, scenario);
5
+ }
6
+ export function evidenceObligations(raw, scenarioCount, untaggedScenarios = [], sharedScnCodes = []) {
25
7
  return {
26
8
  rawScnOccurrences: raw,
27
9
  scenarioCount,
28
10
  excludedOccurrences: raw - scenarioCount,
29
11
  untaggedScenarios,
30
- proseOnlyCodes,
12
+ sharedScnCodes,
31
13
  };
32
14
  }
15
+ export function sharedScnCodesOf(files) {
16
+ const byCode = new Map();
17
+ for (const { feature, source } of files) {
18
+ for (const { scnId, name } of parseTaggedScenarios(source)) {
19
+ byCode.set(scnId, [...(byCode.get(scnId) ?? []), { feature, scenario: name }]);
20
+ }
21
+ }
22
+ return [...byCode]
23
+ .filter(([, scenarios]) => scenarios.length > 1)
24
+ .map(([scnId, scenarios]) => ({ scnId, scenarios }))
25
+ .sort((a, b) => a.scnId.localeCompare(b.scnId));
26
+ }
33
27
  //# sourceMappingURL=evidenceObligations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"evidenceObligations.js","sourceRoot":"","sources":["../../src/census/evidenceObligations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAoCH;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAAW,EACX,aAAqB,EACrB,oBAAwC,EAAE,EAC1C,iBAA2B,EAAE;IAE7B,OAAO;QACL,iBAAiB,EAAE,GAAG;QACtB,aAAa;QACb,mBAAmB,EAAE,GAAG,GAAG,aAAa;QACxC,iBAAiB;QACjB,cAAc;KACf,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"evidenceObligations.js","sourceRoot":"","sources":["../../src/census/evidenceObligations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAOnE,MAAM,UAAU,kBAAkB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAoB;IACxE,OAAO,aAAa,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC1E,CAAC;AAeD,MAAM,UAAU,mBAAmB,CACjC,GAAW,EACX,aAAqB,EACrB,oBAAwC,EAAE,EAC1C,iBAAkC,EAAE;IAEpC,OAAO;QACL,iBAAiB,EAAE,GAAG;QACtB,aAAa;QACb,mBAAmB,EAAE,GAAG,GAAG,aAAa;QACxC,iBAAiB;QACjB,cAAc;KACf,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAqD;IAErD,MAAM,MAAM,GAAG,IAAI,GAAG,EAA8B,CAAC;IACrD,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;QACxC,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC;SACf,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;SAC/C,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;SACnD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { EvidenceObservation } from "./journal.js";
2
+ export declare function inEvidenceOrder(observations: readonly EvidenceObservation[]): EvidenceObservation[];
3
+ //# sourceMappingURL=evidenceOrder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidenceOrder.d.ts","sourceRoot":"","sources":["../../src/domain/evidenceOrder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAUxD,wBAAgB,eAAe,CAC7B,YAAY,EAAE,SAAS,mBAAmB,EAAE,GAC3C,mBAAmB,EAAE,CAOvB"}
@@ -0,0 +1,15 @@
1
+ import { RUNTIME_QUALITY_CHECKS } from "./ledger.js";
2
+ const QUALITY_CHECK_ORDER = [...RUNTIME_QUALITY_CHECKS, "fitness"];
3
+ function evidenceOrderKey(o) {
4
+ const content = JSON.stringify(o, Object.keys(o).sort());
5
+ return [QUALITY_CHECK_ORDER.indexOf(o.qualityCheck), o.locator ?? "", o.scnId ?? "", content].join("\u0000");
6
+ }
7
+ export function inEvidenceOrder(observations) {
8
+ const byKey = new Map();
9
+ for (const o of observations) {
10
+ const key = evidenceOrderKey(o);
11
+ byKey.set(key, [...(byKey.get(key) ?? []), o]);
12
+ }
13
+ return [...byKey.keys()].sort().flatMap((key) => byKey.get(key));
14
+ }
15
+ //# sourceMappingURL=evidenceOrder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidenceOrder.js","sourceRoot":"","sources":["../../src/domain/evidenceOrder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,mBAAmB,GAAsB,CAAC,GAAG,sBAAsB,EAAE,SAAS,CAAC,CAAC;AAEtF,SAAS,gBAAgB,CAAC,CAAsB;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/G,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,YAA4C;IAE5C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiC,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC;AACpE,CAAC"}