@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,49 +1,3 @@
1
- /**
2
- * THE ACCOUNTING IDENTITY (@SCN-USG-018, 3F-3343) — how many steps of the target's pipeline this
3
- * run read, what became of each of them, and the total those dispositions come to.
4
- *
5
- * WHY A COUNT EXISTS AT ALL, WHEN FOUR SECTIONS OF THE REPORT ALREADY NAME THE STEPS. This axis's
6
- * first non-negotiable is that nothing seen is dropped: a step that reaches the reader leaves it
7
- * as a candidate fitness check, as one of the runners the target named, as the reconciler, or as a
8
- * step the consumer called a non-check, and there is no fifth outcome. That is a claim about code,
9
- * and no reader can check it by reading. Every account beside this one names what a step BECAME —
10
- * so a step that became nothing is missing from no list, and all four of them read exactly as they
11
- * would have read had the step never existed. Only the population, counted against the
12
- * dispositions, can see an absence like that.
13
- *
14
- * IT ASKS WHAT WOULD STOP BEING COUNTED, NOT WHAT WOULD FAIL. A removal-shaped fault — a filter
15
- * dropping a step on a branch nobody enumerated — raises nothing for double-entry to miss the
16
- * other half of. It posts no row, names no step and reds no assertion, because what it did was to
17
- * not happen. This is the instrument for that shape of fault and it is the only one on the axis.
18
- *
19
- * THE SUM IS THIS READER'S, AND THAT IS THE POINT OF CARRYING IT. `accountedFor` is added up here
20
- * and stated beside `stepsRead`, so the two totals can be compared rather than reconstructed. A
21
- * report that printed the four dispositions and left the adding to whoever read it would be
22
- * satisfied by any four figures at all — including four produced by a reader that had lost a step.
23
- *
24
- * EVERY DISPOSITION IS THE PRODUCT'S OWN RULE, ASKED, NEVER RESTATED HERE. The candidates come
25
- * from `isCandidateStep`, the runners from `runsNamedRunner`, and the other two from the seams the
26
- * composition already built (`parse/reconcilerSteps`, `parse/stepExclusions`). A count that
27
- * re-derived any of them would be measuring its own arithmetic: it would go on agreeing with
28
- * itself while the books beneath it posted something else, which is the one disagreement a reader
29
- * of a total has no way to see. It is the SAME walk, too (`ciWorkflowSteps`), so the population
30
- * being counted is the population the observers read.
31
- *
32
- * THE FOUR ARE DISJOINT BY CONSTRUCTION AND EXHAUSTIVE BY ASSERTION, which is the asymmetry the
33
- * identity turns on. Each rule below carries the guards that keep a step out of a second
34
- * disposition, so the count can never exceed the population by accident; nothing here makes them
35
- * COVER the population, and whether they do is exactly what the two totals say out loud.
36
- *
37
- * THE PRECEDENCE IS THE COMPOSITION'S, NOT A PREFERENCE. The exclusion seam discovery is asked
38
- * through puts the reconciler ahead of the consumer's own list, and a runner is a step the
39
- * observer never reached the runner rule for if something had already taken it out of discovery.
40
- * A step that is two things at once is counted under the first of them, so the report's dispositions
41
- * add up to the pipeline rather than to more than it.
42
- *
43
- * NOT THE SCOPE CENSUS beside it (`parse/discoveryScope`, @SCN-USG-020), which counts the same
44
- * population for a different question: that one says WHICH files and WHICH jobs the steps came
45
- * from, this one says none of them went missing on the way. A reader satisfies either alone.
46
- */
47
1
  import { type CiWorkflowStep, type PackageJsonScripts } from "./checkScriptsRunInCI.js";
48
2
  import type { StepAccounting } from "../domain/evidenceReconciliation.js";
49
3
  export declare function stepAccounting(ciSources: readonly string[], packageJson: PackageJsonScripts, runners: Readonly<Record<string, string | null>>, isReconciler: (step: CiWorkflowStep) => boolean, isNamedANonCheck: (step: CiWorkflowStep) => boolean): StepAccounting;
@@ -1 +1 @@
1
- {"version":3,"file":"stepAccounting.d.ts","sourceRoot":"","sources":["../../src/parse/stepAccounting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEzG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAE1E,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,EAChD,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,EAC/C,gBAAgB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,GAClD,cAAc,CA+BhB"}
1
+ {"version":3,"file":"stepAccounting.d.ts","sourceRoot":"","sources":["../../src/parse/stepAccounting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEzG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAE1E,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,EAChD,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,EAC/C,gBAAgB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,GAClD,cAAc,CAuBhB"}
@@ -1,66 +1,12 @@
1
- /**
2
- * THE ACCOUNTING IDENTITY (@SCN-USG-018, 3F-3343) — how many steps of the target's pipeline this
3
- * run read, what became of each of them, and the total those dispositions come to.
4
- *
5
- * WHY A COUNT EXISTS AT ALL, WHEN FOUR SECTIONS OF THE REPORT ALREADY NAME THE STEPS. This axis's
6
- * first non-negotiable is that nothing seen is dropped: a step that reaches the reader leaves it
7
- * as a candidate fitness check, as one of the runners the target named, as the reconciler, or as a
8
- * step the consumer called a non-check, and there is no fifth outcome. That is a claim about code,
9
- * and no reader can check it by reading. Every account beside this one names what a step BECAME —
10
- * so a step that became nothing is missing from no list, and all four of them read exactly as they
11
- * would have read had the step never existed. Only the population, counted against the
12
- * dispositions, can see an absence like that.
13
- *
14
- * IT ASKS WHAT WOULD STOP BEING COUNTED, NOT WHAT WOULD FAIL. A removal-shaped fault — a filter
15
- * dropping a step on a branch nobody enumerated — raises nothing for double-entry to miss the
16
- * other half of. It posts no row, names no step and reds no assertion, because what it did was to
17
- * not happen. This is the instrument for that shape of fault and it is the only one on the axis.
18
- *
19
- * THE SUM IS THIS READER'S, AND THAT IS THE POINT OF CARRYING IT. `accountedFor` is added up here
20
- * and stated beside `stepsRead`, so the two totals can be compared rather than reconstructed. A
21
- * report that printed the four dispositions and left the adding to whoever read it would be
22
- * satisfied by any four figures at all — including four produced by a reader that had lost a step.
23
- *
24
- * EVERY DISPOSITION IS THE PRODUCT'S OWN RULE, ASKED, NEVER RESTATED HERE. The candidates come
25
- * from `isCandidateStep`, the runners from `runsNamedRunner`, and the other two from the seams the
26
- * composition already built (`parse/reconcilerSteps`, `parse/stepExclusions`). A count that
27
- * re-derived any of them would be measuring its own arithmetic: it would go on agreeing with
28
- * itself while the books beneath it posted something else, which is the one disagreement a reader
29
- * of a total has no way to see. It is the SAME walk, too (`ciWorkflowSteps`), so the population
30
- * being counted is the population the observers read.
31
- *
32
- * THE FOUR ARE DISJOINT BY CONSTRUCTION AND EXHAUSTIVE BY ASSERTION, which is the asymmetry the
33
- * identity turns on. Each rule below carries the guards that keep a step out of a second
34
- * disposition, so the count can never exceed the population by accident; nothing here makes them
35
- * COVER the population, and whether they do is exactly what the two totals say out loud.
36
- *
37
- * THE PRECEDENCE IS THE COMPOSITION'S, NOT A PREFERENCE. The exclusion seam discovery is asked
38
- * through puts the reconciler ahead of the consumer's own list, and a runner is a step the
39
- * observer never reached the runner rule for if something had already taken it out of discovery.
40
- * A step that is two things at once is counted under the first of them, so the report's dispositions
41
- * add up to the pipeline rather than to more than it.
42
- *
43
- * NOT THE SCOPE CENSUS beside it (`parse/discoveryScope`, @SCN-USG-020), which counts the same
44
- * population for a different question: that one says WHICH files and WHICH jobs the steps came
45
- * from, this one says none of them went missing on the way. A reader satisfies either alone.
46
- */
47
1
  import { ciWorkflowSteps } from "./checkScriptsRunInCI.js";
48
- import { isCandidateStep, runsNamedRunner } from "./runningStaticChecks.js";
2
+ import { isCandidateStep, runsNamedRunner } from "./runningFitnessFunctions.js";
49
3
  export function stepAccounting(ciSources, packageJson, runners, isReconciler, isNamedANonCheck) {
50
4
  const steps = ciWorkflowSteps(ciSources);
51
- // THE COMPOSED SEAM, REBUILT FROM ITS TWO HALVES RATHER THAN TAKEN WHOLE. The observer is asked
52
- // one question per step and cannot tell the two facts apart; this reader has to, because "the
53
- // reconciler" and "the consumer said so" are the two dispositions a report keeps separate.
54
5
  const isExcludedFromDiscovery = (step) => isReconciler(step) || isNamedANonCheck(step);
55
6
  const count = (holds) => steps.filter(holds).length;
56
7
  const candidates = count((step) => isCandidateStep(step, packageJson, runners, isExcludedFromDiscovery));
57
8
  const reconciler = count(isReconciler);
58
- // NOT ALSO THE RECONCILER, so a consumer who wrote a `notChecks` entry naming a step this tool
59
- // takes out of its own books does not have it counted twice — and the surplus does not read as
60
- // a pipeline larger than the one that ran.
61
9
  const excluded = count((step) => !isReconciler(step) && isNamedANonCheck(step));
62
- // NOT ALREADY OUT OF DISCOVERY, for the same reason and in the observer's own order: the runner
63
- // rule is a question about a step the reader is still looking at.
64
10
  const runnerSteps = count((step) => !isExcludedFromDiscovery(step) && runsNamedRunner(step, packageJson, runners));
65
11
  return {
66
12
  stepsRead: steps.length,
@@ -1 +1 @@
1
- {"version":3,"file":"stepAccounting.js","sourceRoot":"","sources":["../../src/parse/stepAccounting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,EAAE,eAAe,EAAgD,MAAM,0BAA0B,CAAC;AACzG,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG5E,MAAM,UAAU,cAAc,CAC5B,SAA4B,EAC5B,WAA+B,EAC/B,OAAgD,EAChD,YAA+C,EAC/C,gBAAmD;IAEnD,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACzC,gGAAgG;IAChG,8FAA8F;IAC9F,2FAA2F;IAC3F,MAAM,uBAAuB,GAAG,CAAC,IAAoB,EAAW,EAAE,CAChE,YAAY,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,CAAC,KAAwC,EAAU,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAE/F,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAChC,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,uBAAuB,CAAC,CACrE,CAAC;IACF,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IACvC,+FAA+F;IAC/F,+FAA+F;IAC/F,2CAA2C;IAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,gGAAgG;IAChG,kEAAkE;IAClE,MAAM,WAAW,GAAG,KAAK,CACvB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CACxF,CAAC;IAEF,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,MAAM;QACvB,UAAU;QACV,OAAO,EAAE,WAAW;QACpB,UAAU;QACV,QAAQ;QACR,YAAY,EAAE,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ;KAC/D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"stepAccounting.js","sourceRoot":"","sources":["../../src/parse/stepAccounting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAgD,MAAM,0BAA0B,CAAC;AACzG,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGhF,MAAM,UAAU,cAAc,CAC5B,SAA4B,EAC5B,WAA+B,EAC/B,OAAgD,EAChD,YAA+C,EAC/C,gBAAmD;IAEnD,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,uBAAuB,GAAG,CAAC,IAAoB,EAAW,EAAE,CAChE,YAAY,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,CAAC,KAAwC,EAAU,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAE/F,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAChC,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,uBAAuB,CAAC,CACrE,CAAC;IACF,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,MAAM,WAAW,GAAG,KAAK,CACvB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CACxF,CAAC;IAEF,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,MAAM;QACvB,UAAU;QACV,OAAO,EAAE,WAAW;QACpB,UAAU;QACV,QAAQ;QACR,YAAY,EAAE,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ;KAC/D,CAAC;AACJ,CAAC"}
@@ -1,54 +1,7 @@
1
- /**
2
- * THE CONSUMER'S OWN EXCLUSIONS (@SCN-USG-015, 3F-3343) — which steps of a target's pipeline its
3
- * manifest names non-checks, and which of the entries that named them named nothing at all.
4
- *
5
- * THE THIRD EXCLUSION, AND THE ONLY ONE THAT IS A LIST SOMEBODY WRITES. The reconciler is excluded
6
- * by construction and a behavioural runner by a rule over what the target named; this one is the
7
- * consumer saying, about their own pipeline, that a step is not a check. It is a list of THEIR
8
- * steps and never a list of check names of ours, which is the whole of what keeps it from being
9
- * the prefix rule arriving one layer along.
10
- *
11
- * AN ENTRY IS `<workflow file>:<job id>:<step name>` AND IS MATCHED EXACTLY. One form and no
12
- * grammar, and the form itself is stated once next door (`parse/stepNames`) because the report
13
- * names a step that way in every section that names one at all. Fully qualified because a bare name is ambiguous in a real tree — `Typecheck` is a
14
- * check in this repository's `ci.yml` and plumbing in its `release.yml`, and a bare-name entry
15
- * would take out both, the second of them a check deleted from the report with nothing said. The
16
- * job and the source are exactly what the walk was widened to carry (3F-3352), and this is what
17
- * that was for.
18
- *
19
- * NO PREFIX AND NO WILDCARD FORM, argued rather than omitted. A consumer wanting a whole workflow
20
- * out narrows `--ci`, a supported narrowing the corpus already pins (@SCN-USG-008), so a second
21
- * way to say the same thing buys a grammar to specify, to test and to explain. Exact-only can be
22
- * widened later and breaks nobody; starting wide cannot be narrowed once a manifest depends on it.
23
- *
24
- * THE PARTITION IS TOTAL, and that is this reader's shape rather than a convenience. Every entry
25
- * the target wrote is either one that named a step or one that named none, and both halves are
26
- * returned because both have to be SAID: the first is a step that leaves the report accounted for
27
- * rather than vanished, and the second is a stale line the consumer wrote that hides nothing —
28
- * a rename that has already happened, or one that is about to hide the wrong thing. An entry lost
29
- * between the two halves would be an exclusion nothing anywhere accounts for.
30
- *
31
- * THE SEAM IS A FUNCTION, for the reason the citation seam beside it is (`runningStaticChecks`):
32
- * what the discovery reader needs is one answer per step, not this module's two lists and the
33
- * rule for turning them into one. Handing it the lists would put the qualification rule inside an
34
- * observer that has no business restating it, and a second statement of that rule is a second
35
- * chance for the two to disagree about which step an entry names.
36
- *
37
- * NO FILESYSTEM, AND THE NAMES ARE INJECTED. `ciSources` is an array of anonymous source strings
38
- * — `ciSourcePaths.ts` is explicit that keeping the core that way is the point — so the mapping
39
- * from a step's source index back to a workflow file is made at the CLI edge, where the paths were
40
- * already resolved, and arrives here as data. A source this run was given no name for can be
41
- * named by nobody, so no entry excludes it: the safe direction, and the one that stops two
42
- * nameless sources answering for each other.
43
- */
44
1
  import { type CiWorkflowStep } from "./checkScriptsRunInCI.js";
45
- /** What a target's `notChecks` list yielded — the entries that named a step, and those that did not. */
46
2
  export interface StepExclusions {
47
- /** The entries that named a step this run read, in the order the manifest wrote them. */
48
3
  readonly excluded: readonly string[];
49
- /** The entries that named none, in the order the manifest wrote them. */
50
4
  readonly unmatchedEntries: readonly string[];
51
- /** Whether the consumer named this step a non-check. */
52
5
  readonly isExcluded: (step: CiWorkflowStep) => boolean;
53
6
  }
54
7
  export declare function stepExclusions(ciSources: readonly string[], ciSourceNames: readonly string[], notChecks: readonly string[]): StepExclusions;
@@ -1 +1 @@
1
- {"version":3,"file":"stepExclusions.d.ts","sourceRoot":"","sources":["../../src/parse/stepExclusions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAGhF,wGAAwG;AACxG,MAAM,WAAW,cAAc;IAC7B,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,yEAAyE;IACzE,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,wDAAwD;IACxD,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC;CACxD;AAED,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,cAAc,CAkBhB"}
1
+ {"version":3,"file":"stepExclusions.d.ts","sourceRoot":"","sources":["../../src/parse/stepExclusions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAGhF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC;CACxD;AAED,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,cAAc,CAahB"}
@@ -1,62 +1,14 @@
1
- /**
2
- * THE CONSUMER'S OWN EXCLUSIONS (@SCN-USG-015, 3F-3343) — which steps of a target's pipeline its
3
- * manifest names non-checks, and which of the entries that named them named nothing at all.
4
- *
5
- * THE THIRD EXCLUSION, AND THE ONLY ONE THAT IS A LIST SOMEBODY WRITES. The reconciler is excluded
6
- * by construction and a behavioural runner by a rule over what the target named; this one is the
7
- * consumer saying, about their own pipeline, that a step is not a check. It is a list of THEIR
8
- * steps and never a list of check names of ours, which is the whole of what keeps it from being
9
- * the prefix rule arriving one layer along.
10
- *
11
- * AN ENTRY IS `<workflow file>:<job id>:<step name>` AND IS MATCHED EXACTLY. One form and no
12
- * grammar, and the form itself is stated once next door (`parse/stepNames`) because the report
13
- * names a step that way in every section that names one at all. Fully qualified because a bare name is ambiguous in a real tree — `Typecheck` is a
14
- * check in this repository's `ci.yml` and plumbing in its `release.yml`, and a bare-name entry
15
- * would take out both, the second of them a check deleted from the report with nothing said. The
16
- * job and the source are exactly what the walk was widened to carry (3F-3352), and this is what
17
- * that was for.
18
- *
19
- * NO PREFIX AND NO WILDCARD FORM, argued rather than omitted. A consumer wanting a whole workflow
20
- * out narrows `--ci`, a supported narrowing the corpus already pins (@SCN-USG-008), so a second
21
- * way to say the same thing buys a grammar to specify, to test and to explain. Exact-only can be
22
- * widened later and breaks nobody; starting wide cannot be narrowed once a manifest depends on it.
23
- *
24
- * THE PARTITION IS TOTAL, and that is this reader's shape rather than a convenience. Every entry
25
- * the target wrote is either one that named a step or one that named none, and both halves are
26
- * returned because both have to be SAID: the first is a step that leaves the report accounted for
27
- * rather than vanished, and the second is a stale line the consumer wrote that hides nothing —
28
- * a rename that has already happened, or one that is about to hide the wrong thing. An entry lost
29
- * between the two halves would be an exclusion nothing anywhere accounts for.
30
- *
31
- * THE SEAM IS A FUNCTION, for the reason the citation seam beside it is (`runningStaticChecks`):
32
- * what the discovery reader needs is one answer per step, not this module's two lists and the
33
- * rule for turning them into one. Handing it the lists would put the qualification rule inside an
34
- * observer that has no business restating it, and a second statement of that rule is a second
35
- * chance for the two to disagree about which step an entry names.
36
- *
37
- * NO FILESYSTEM, AND THE NAMES ARE INJECTED. `ciSources` is an array of anonymous source strings
38
- * — `ciSourcePaths.ts` is explicit that keeping the core that way is the point — so the mapping
39
- * from a step's source index back to a workflow file is made at the CLI edge, where the paths were
40
- * already resolved, and arrives here as data. A source this run was given no name for can be
41
- * named by nobody, so no entry excludes it: the safe direction, and the one that stops two
42
- * nameless sources answering for each other.
43
- */
44
1
  import { ciWorkflowSteps } from "./checkScriptsRunInCI.js";
45
2
  import { qualifiedStepName } from "./stepNames.js";
46
3
  export function stepExclusions(ciSources, ciSourceNames, notChecks) {
47
- // THE WALK, of which every other reader on this axis takes its own projection (3F-3352) — the
48
- // same parse, so an entry can never name a step the discovery reader did not see.
49
- const named = new Set(ciWorkflowSteps(ciSources).flatMap((step) => {
50
- const name = qualifiedStepName(step, ciSourceNames);
51
- return name === undefined ? [] : [name];
52
- }));
4
+ const named = new Set(ciWorkflowSteps(ciSources).map((step) => qualifiedStepName(step, ciSourceNames)));
53
5
  const excluded = notChecks.filter((entry) => named.has(entry));
54
6
  return {
55
7
  excluded,
56
8
  unmatchedEntries: notChecks.filter((entry) => !named.has(entry)),
57
9
  isExcluded: (step) => {
58
10
  const name = qualifiedStepName(step, ciSourceNames);
59
- return name !== undefined && excluded.includes(name);
11
+ return excluded.some((entry) => entry === name);
60
12
  },
61
13
  };
62
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stepExclusions.js","sourceRoot":"","sources":["../../src/parse/stepExclusions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,eAAe,EAAuB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAYnD,MAAM,UAAU,cAAc,CAC5B,SAA4B,EAC5B,aAAgC,EAChC,SAA4B;IAE5B,8FAA8F;IAC9F,kFAAkF;IAClF,MAAM,KAAK,GAAG,IAAI,GAAG,CACnB,eAAe,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACpD,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CACH,CAAC;IACF,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,OAAO;QACL,QAAQ;QACR,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChE,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACpD,OAAO,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"stepExclusions.js","sourceRoot":"","sources":["../../src/parse/stepExclusions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAuB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAQnD,MAAM,UAAU,cAAc,CAC5B,SAA4B,EAC5B,aAAgC,EAChC,SAA4B;IAE5B,MAAM,KAAK,GAAG,IAAI,GAAG,CACnB,eAAe,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CACjF,CAAC;IACF,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,OAAO;QACL,QAAQ;QACR,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChE,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACpD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,30 +1,3 @@
1
- /**
2
- * HOW A STEP IS NAMED BACK TO THE CONSUMER — `<workflow file>:<job id>:<step name>`, stated once.
3
- *
4
- * ONE STATEMENT OF THE FORM, because two readers now depend on it and they must not be free to
5
- * disagree. A `notChecks` entry is written in this form and matched against it
6
- * (`parse/stepExclusions`), and the report names a step in this form in every section that names
7
- * one at all — the consumer's own exclusions, and the reconciler's own steps
8
- * (`parse/reconcilerSteps`). A second spelling would mean a consumer copying a name off one
9
- * section of the report and finding it matches nothing when they write it into the other.
10
- *
11
- * FULLY QUALIFIED, and that is what the walk was widened to carry (3F-3352). `Typecheck` is a
12
- * check in this repository's `ci.yml` and plumbing in its `release.yml`, so a bare name is
13
- * ambiguous in any real tree — as an entry it would take out both, and as a report line it would
14
- * leave a reader unable to tell which of the two was meant.
15
- *
16
- * THE STEP'S OWN HALF IS GITHUB'S. Its `name:`, else the action it `uses:`, else the first
17
- * non-blank line of its `run:` — the string GitHub itself shows in a run log, so a consumer
18
- * reading a report line or writing an entry copies what is already in front of them.
19
- *
20
- * NO NAME FOR THE SOURCE MEANS NO QUALIFIED NAME. `ciSources` is an array of anonymous source
21
- * strings and the core holds no filesystem — `ciSourcePaths.ts` is explicit that keeping it that
22
- * way is the point — so the names arrive as data from the CLI edge. A source this run was given
23
- * none for can be named by nobody, and what each caller does with that silence is its own: an
24
- * entry excludes no such step (the safe direction), and the reconciler account falls back to the
25
- * step's own identity rather than dropping a step it recognised.
26
- */
27
1
  import type { CiWorkflowStep } from "./checkScriptsRunInCI.js";
28
- /** The one string that names this step, or nothing for a step whose source has no name. */
29
2
  export declare function qualifiedStepName(step: CiWorkflowStep, ciSourceNames: readonly string[]): string | undefined;
30
3
  //# sourceMappingURL=stepNames.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stepNames.d.ts","sourceRoot":"","sources":["../../src/parse/stepNames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,2FAA2F;AAC3F,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,cAAc,EACpB,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,MAAM,GAAG,SAAS,CAGpB"}
1
+ {"version":3,"file":"stepNames.d.ts","sourceRoot":"","sources":["../../src/parse/stepNames.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,cAAc,EACpB,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,MAAM,GAAG,SAAS,CAGpB"}
@@ -1,30 +1,3 @@
1
- /**
2
- * HOW A STEP IS NAMED BACK TO THE CONSUMER — `<workflow file>:<job id>:<step name>`, stated once.
3
- *
4
- * ONE STATEMENT OF THE FORM, because two readers now depend on it and they must not be free to
5
- * disagree. A `notChecks` entry is written in this form and matched against it
6
- * (`parse/stepExclusions`), and the report names a step in this form in every section that names
7
- * one at all — the consumer's own exclusions, and the reconciler's own steps
8
- * (`parse/reconcilerSteps`). A second spelling would mean a consumer copying a name off one
9
- * section of the report and finding it matches nothing when they write it into the other.
10
- *
11
- * FULLY QUALIFIED, and that is what the walk was widened to carry (3F-3352). `Typecheck` is a
12
- * check in this repository's `ci.yml` and plumbing in its `release.yml`, so a bare name is
13
- * ambiguous in any real tree — as an entry it would take out both, and as a report line it would
14
- * leave a reader unable to tell which of the two was meant.
15
- *
16
- * THE STEP'S OWN HALF IS GITHUB'S. Its `name:`, else the action it `uses:`, else the first
17
- * non-blank line of its `run:` — the string GitHub itself shows in a run log, so a consumer
18
- * reading a report line or writing an entry copies what is already in front of them.
19
- *
20
- * NO NAME FOR THE SOURCE MEANS NO QUALIFIED NAME. `ciSources` is an array of anonymous source
21
- * strings and the core holds no filesystem — `ciSourcePaths.ts` is explicit that keeping it that
22
- * way is the point — so the names arrive as data from the CLI edge. A source this run was given
23
- * none for can be named by nobody, and what each caller does with that silence is its own: an
24
- * entry excludes no such step (the safe direction), and the reconciler account falls back to the
25
- * step's own identity rather than dropping a step it recognised.
26
- */
27
- /** The one string that names this step, or nothing for a step whose source has no name. */
28
1
  export function qualifiedStepName(step, ciSourceNames) {
29
2
  const source = ciSourceNames[step.sourceIndex];
30
3
  return source === undefined ? undefined : `${source}:${step.jobId}:${step.identity}`;
@@ -1 +1 @@
1
- {"version":3,"file":"stepNames.js","sourceRoot":"","sources":["../../src/parse/stepNames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAIH,2FAA2F;AAC3F,MAAM,UAAU,iBAAiB,CAC/B,IAAoB,EACpB,aAAgC;IAEhC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;AACvF,CAAC"}
1
+ {"version":3,"file":"stepNames.js","sourceRoot":"","sources":["../../src/parse/stepNames.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAC/B,IAAoB,EACpB,aAAgC;IAEhC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;AACvF,CAAC"}
@@ -1,85 +1,8 @@
1
- /**
2
- * The TARGET's feature corpus read into the readings one reconciliation needs — moved here from
3
- * the app's ingest edge (3F-3088).
4
- *
5
- * WHY IT LIVES IN THE ENGINE. Every line of it is a pure function of sources somebody else already
6
- * read off disk: the obligation rule is `parseScenarios`, core's own. Sitting at the app edge it
7
- * was the reason a PUBLISHED module imported core's unpublished `/internal` subpath for five
8
- * symbols — the fault 3F-3086 repairs. One line made it impure and it was the only one: the feature discovery, which now
9
- * happens at the edge and arrives as `sources`.
10
- *
11
- * THE REGISTRY-KEYED READING THIS FILE ONCE ALSO PRODUCED — `checkHandles` and `citedScn`, the
12
- * obligation-side observer's feed — RETIRED WITH THE REGISTRY ITSELF (3F-3161, @SCN-LNT-017, the
13
- * last registry-`scn` scenario). Every check now either states its own row's code on its CI step
14
- * (`citedRow`, below) or is a converted `@fitness` row read through `domain/fitnessChecks`
15
- * directly; there is no second discovery left to key a handle set off.
16
- */
17
- import type { FitnessCheckIndex, UnspecifiedFitnessRow } from "../domain/fitnessChecks.js";
18
1
  import { type ScriptCitation } from "./fitnessCitations.js";
19
2
  import type { Scenario } from "../model.js";
20
- /**
21
- * The target's feature corpus as ONE run reads it — the obligations it raises, the `@SCN` a run
22
- * whose CI step states a code cites, the scenarios on the fitness axis no configured row names,
23
- * and the configured rows the corpus carries no scenario for.
24
- *
25
- * THE READINGS ARE ONE, which is why they are produced together. All are derived from the same
26
- * bytes and the same configured rows, and the fault they exist to foreclose is precisely their
27
- * disagreeing: a citation resolved against a corpus the ledger was not built from names a row
28
- * nobody wrote (@SCN-LNT-009). Returning them separately would leave a caller free to assemble
29
- * them from different reads.
30
- *
31
- * EVERY INPUT IS THE TARGET'S (@SCN-LNT-005). `fitnessChecks` came from the target's manifest and
32
- * the sources from the target's features directory, so a configured row means what that target
33
- * says it means and the scenario carrying its `@SCN` is one that target wrote.
34
- */
35
3
  export interface TargetCorpus {
36
- /** The `@SCN`-carrying scenarios, with their evidence obligations raised. */
37
4
  scenarios: Scenario[];
38
- /**
39
- * What a run whose CI step STATES a code cites — the configured row that code names, read for
40
- * the characteristic a CI step cannot state (@SCN-LNT-031).
41
- *
42
- * NO CODE IS THE SAME ANSWER AS AN UNANSWERED ONE — `null`, the run cites nothing, and it posts
43
- * to suspense. That is the state a consumer starts in, and this seam does not narrow it.
44
- */
45
5
  citedRow: (citedScn: string | undefined) => ScriptCitation | null;
46
- /**
47
- * The scenarios ON the fitness axis that no configured row NAMES (@SCN-LNT-020) — the corpus's
48
- * half-converted checks, in corpus order.
49
- *
50
- * It belongs with the other readings because it is the same one: the obligation rule raises
51
- * nothing for such a scenario, and this says WHICH ones. Produced here, where the corpus walk and
52
- * the configured rows are both in hand, so the naming and the raising cannot be taken from
53
- * different reads — the same guarantee `citedRow` is composed here for.
54
- */
55
- unconfiguredFitnessScenarios: readonly string[];
56
- /**
57
- * The CONFIGURED ROWS the corpus carries no scenario for (@SCN-LNT-027, 3F-3472) — the other
58
- * direction of the same disagreement, in manifest order, each with the characteristic its debit
59
- * is owed at.
60
- *
61
- * IT IS HERE FOR THE MIRROR'S REASON AND NOT A WEAKER ONE. The corpus walk and the configured
62
- * rows are both in hand exactly once, so the rows this names and the obligations `scenarios`
63
- * raises are taken from ONE read of each side. Computed at the composition from `corpus.scenarios`
64
- * it would be a second walk, free to disagree with the walk the obligations came from — which is
65
- * the fault this whole reading exists to foreclose.
66
- */
67
- unspecifiedFitnessRows: readonly UnspecifiedFitnessRow[];
68
6
  }
69
- /**
70
- * THE SOURCES ARRIVE READ, AND THAT IS THE WHOLE OF WHAT MOVED. The edge discovers the target's
71
- * feature files and reads them ONCE, so the reading a citing run needs is still taken from the same
72
- * bytes. Two discoveries could disagree about the corpus, and a citation resolved against a corpus
73
- * the ledger was not built from is exactly the phantom-row fault (@SCN-LNT-009); passing one array
74
- * preserves that guarantee where a features directory would have re-opened the question inside the
75
- * engine.
76
- */
77
- export declare function readTargetCorpus(sources: readonly string[], deferralTags: readonly string[],
78
- /**
79
- * The target's CONFIGURED ROWS (@SCN-LNT-018) — the CONVERTED route's half of the debit side. It
80
- * reaches `parseScenarios`, which raises the Evidence Obligations, and `citedRow`, which reads a
81
- * row back for a run whose CI step states its code (@SCN-LNT-031) — the same rows on both sides,
82
- * which is the whole reason this reading is composed here.
83
- */
84
- fitnessChecks: FitnessCheckIndex): TargetCorpus;
7
+ export declare function readTargetCorpus(sources: readonly string[], deferralTags: readonly string[]): TargetCorpus;
85
8
  //# sourceMappingURL=targetCorpus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"targetCorpus.d.ts","sourceRoot":"","sources":["../../src/parse/targetCorpus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAOhF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,cAAc,GAAG,IAAI,CAAC;IAClE;;;;;;;;OAQG;IACH,4BAA4B,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD;;;;;;;;;;OAUG;IACH,sBAAsB,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAC1D;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,YAAY,EAAE,SAAS,MAAM,EAAE;AAC/B;;;;;GAKG;AACH,aAAa,EAAE,iBAAiB,GAC/B,YAAY,CAkBd"}
1
+ {"version":3,"file":"targetCorpus.d.ts","sourceRoot":"","sources":["../../src/parse/targetCorpus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKhF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,cAAc,GAAG,IAAI,CAAC;CACnE;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,YAAY,CAKd"}
@@ -1,51 +1,9 @@
1
- /**
2
- * The TARGET's feature corpus read into the readings one reconciliation needs — moved here from
3
- * the app's ingest edge (3F-3088).
4
- *
5
- * WHY IT LIVES IN THE ENGINE. Every line of it is a pure function of sources somebody else already
6
- * read off disk: the obligation rule is `parseScenarios`, core's own. Sitting at the app edge it
7
- * was the reason a PUBLISHED module imported core's unpublished `/internal` subpath for five
8
- * symbols — the fault 3F-3086 repairs. One line made it impure and it was the only one: the feature discovery, which now
9
- * happens at the edge and arrives as `sources`.
10
- *
11
- * THE REGISTRY-KEYED READING THIS FILE ONCE ALSO PRODUCED — `checkHandles` and `citedScn`, the
12
- * obligation-side observer's feed — RETIRED WITH THE REGISTRY ITSELF (3F-3161, @SCN-LNT-017, the
13
- * last registry-`scn` scenario). Every check now either states its own row's code on its CI step
14
- * (`citedRow`, below) or is a converted `@fitness` row read through `domain/fitnessChecks`
15
- * directly; there is no second discovery left to key a handle set off.
16
- */
17
1
  import { citationOfCitedRow } from "./fitnessCitations.js";
18
- import { parseScenarios, parseTaggedScenarios, unconfiguredFitnessScenarios, unspecifiedFitnessRows, } from "./scenarios.js";
19
- /**
20
- * THE SOURCES ARRIVE READ, AND THAT IS THE WHOLE OF WHAT MOVED. The edge discovers the target's
21
- * feature files and reads them ONCE, so the reading a citing run needs is still taken from the same
22
- * bytes. Two discoveries could disagree about the corpus, and a citation resolved against a corpus
23
- * the ledger was not built from is exactly the phantom-row fault (@SCN-LNT-009); passing one array
24
- * preserves that guarantee where a features directory would have re-opened the question inside the
25
- * engine.
26
- */
27
- export function readTargetCorpus(sources, deferralTags,
28
- /**
29
- * The target's CONFIGURED ROWS (@SCN-LNT-018) — the CONVERTED route's half of the debit side. It
30
- * reaches `parseScenarios`, which raises the Evidence Obligations, and `citedRow`, which reads a
31
- * row back for a run whose CI step states its code (@SCN-LNT-031) — the same rows on both sides,
32
- * which is the whole reason this reading is composed here.
33
- */
34
- fitnessChecks) {
35
- // NO BARE CHECK TAG RAISES AN OBLIGATION ON A TARGET'S CORPUS. The registered half of the
36
- // union retired with the registry (3F-3161) and the measured half with the measured axis
37
- // (3F-3516), so the bare-tag set handed to `parseScenarios` is empty: a fitness obligation is
38
- // raised by the axis word and a configured row, and by nothing else.
39
- const scenarios = sources.flatMap((source) => parseScenarios(source, deferralTags, [], fitnessChecks));
40
- // THE TAGGED WALK THE TWO CORPUS-VS-MANIFEST READINGS SHARE. Kept as its own pass over the
41
- // sources, and handed to BOTH of them — the disagreement each names is the other's direction, so
42
- // taking them from one walk is what stops one reading seeing a scenario the other does not.
43
- const tagged = sources.flatMap((source) => parseTaggedScenarios(source));
2
+ import { parseScenarios, } from "./scenarios.js";
3
+ export function readTargetCorpus(sources, deferralTags) {
44
4
  return {
45
- scenarios,
46
- citedRow: (citedScn) => citationOfCitedRow(citedScn, fitnessChecks),
47
- unconfiguredFitnessScenarios: unconfiguredFitnessScenarios(tagged, fitnessChecks),
48
- unspecifiedFitnessRows: unspecifiedFitnessRows(tagged, fitnessChecks),
5
+ scenarios: sources.flatMap((source) => parseScenarios(source, deferralTags)),
6
+ citedRow: (citedScn) => citationOfCitedRow(citedScn),
49
7
  };
50
8
  }
51
9
  //# sourceMappingURL=targetCorpus.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"targetCorpus.js","sourceRoot":"","sources":["../../src/parse/targetCorpus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,kBAAkB,EAAuB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAqDxB;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAA0B,EAC1B,YAA+B;AAC/B;;;;;GAKG;AACH,aAAgC;IAEhC,0FAA0F;IAC1F,yFAAyF;IACzF,8FAA8F;IAC9F,qEAAqE;IACrE,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAC3C,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,CAAC,CACxD,CAAC;IACF,2FAA2F;IAC3F,iGAAiG;IACjG,4FAA4F;IAC5F,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE,OAAO;QACL,SAAS;QACT,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE,aAAa,CAAC;QACnE,4BAA4B,EAAE,4BAA4B,CAAC,MAAM,EAAE,aAAa,CAAC;QACjF,sBAAsB,EAAE,sBAAsB,CAAC,MAAM,EAAE,aAAa,CAAC;KACtE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"targetCorpus.js","sourceRoot":"","sources":["../../src/parse/targetCorpus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAuB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EACL,cAAc,GAEf,MAAM,gBAAgB,CAAC;AAQxB,MAAM,UAAU,gBAAgB,CAC9B,OAA0B,EAC1B,YAA+B;IAE/B,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC5E,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC;KACrD,CAAC;AACJ,CAAC"}