@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
@@ -0,0 +1,16 @@
1
+ import { hasBrokenEvidence, hasNothingToReconcile, hasPendingItems, isBalanced } from "./ledger.js";
2
+ import { hasScenarioCodeErrors } from "./scenarioCodeError.js";
3
+ export function verdictCode(run) {
4
+ if (hasNothingToReconcile(run.ledger))
5
+ return 5;
6
+ if (hasBrokenEvidence(run.ledger))
7
+ return 4;
8
+ if (hasScenarioCodeErrors(run))
9
+ return 1;
10
+ if (!isBalanced(run.ledger))
11
+ return 1;
12
+ if (run.strict && hasPendingItems(run.ledger))
13
+ return 3;
14
+ return 0;
15
+ }
16
+ //# sourceMappingURL=verdictCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verdictCode.js","sourceRoot":"","sources":["../../src/domain/verdictCode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,EAAE,qBAAqB,EAA0B,MAAM,wBAAwB,CAAC;AAUvF,MAAM,UAAU,WAAW,CAAC,GAAkB;IAC5C,IAAI,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,CAAC;IAChD,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,CAAC;IAC5C,IAAI,qBAAqB,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,IAAI,GAAG,CAAC,MAAM,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,CAAC;IACxD,OAAO,CAAC,CAAC;AACX,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,57 +1,31 @@
1
- /**
2
- * The public core barrel — the single entrypoint of the
3
- * `@3f-consulting/spec-controller-core` package.
4
- *
5
- * This re-exports the v1 contract surface — what a downstream consumer builds
6
- * on.
7
- *
8
- * NOTHING HOLDS IT TO A LIST, AND THAT IS NEW (3F-3449). Until that commit a
9
- * `@unit` drift guard reconciled this barrel's actual exports against a surface
10
- * written down for it in the repository's check tree, both directions, so a
11
- * symbol added here or dropped reds CI. The list and its arm are gone, with the
12
- * rest of the packaging checks this repository wrote for itself, and no
13
- * replacement runs: the community's instrument is a generated `api-extractor`
14
- * report, adopted at the 1.0 boundary where a stability promise exists again.
15
- * SO AN EXPORT ADDED TO OR REMOVED FROM THIS FILE IS A DECISION NOBODY IS
16
- * FORCED TO NOTICE. Treat a change here as a contract change on the strength of
17
- * where you are typing it, because no gate will say so — and `0.x` promises
18
- * nothing (`doc/compatibility.md`).
19
- *
20
- * SELECTIVE re-exports, NOT `export *`: the pure boundary is deliberate. The
21
- * core surface is filtered to pure symbols — no `fs` / `process.cwd` /
22
- * `child_process`. The impure application layer (file reading, git-derived
23
- * provenance, output routing, run-store, the CLI itself) lives in the
24
- * `spec-controller` package, not here.
25
- *
26
- * Groups + order are this file's own, kept because a reader uses them; they no
27
- * longer mirror an enumeration held elsewhere, because there is no longer one.
28
- * Values are re-exported with `export { … }`; types with `export type { … }`,
29
- * so the runtime namespace carries only the value bindings.
30
- */
31
- export type { QualityCheck, RuntimeQualityCheck, EvidenceStatus, EvidenceObligation, Scenario, RuntimeEvidenceObservation, GuardEvidenceObservation, EvidenceObservation, Outcome, ScenarioVerdict, ScenarioKind, QualityCheckReconciliation, ScenarioReconciliation, Ledger, } from "./model.js";
32
- export { parseScenarios, countScnOccurrences, parseUntaggedScenarios, proseOnlyCodes } from "./parse/scenarios.js";
1
+ export type { QualityCheck, RuntimeQualityCheck, EvidenceStatus, EvidenceObligation, Scenario, RuntimeEvidenceObservation, FitnessEvidenceObservation, EvidenceObservation, Outcome, ScenarioVerdict, ScenarioKind, QualityCheckReconciliation, ScenarioReconciliation, Ledger, } from "./model.js";
2
+ export { parseScenarios, countScnOccurrences, parseUntaggedScenarios } from "./parse/scenarios.js";
33
3
  export { evidenceObligations } from "./census/evidenceObligations.js";
34
- export type { EvidenceObligations, UntaggedScenario } from "./census/evidenceObligations.js";
4
+ export type { EvidenceObligations, SharedScnCode, UntaggedScenario } from "./census/evidenceObligations.js";
5
+ export { sharedScnCodesOf, untaggedScenarioId } from "./census/evidenceObligations.js";
35
6
  export { reconcile, evidenceReconciliationOf } from "./domain/evidenceReconciliation.js";
7
+ export { hasScenarioCodeErrors } from "./domain/scenarioCodeError.js";
8
+ export type { ScenarioCodeError, ScenarioCodeErrorKind, ScenarioCodePopulation } from "./domain/scenarioCodeError.js";
36
9
  export { isBalanced, hasPendingItems, hasBrokenEvidence, hasNothingToReconcile, } from "./domain/ledger.js";
10
+ export { verdictCode } from "./domain/verdictCode.js";
11
+ export type { VerdictCode, VerdictInputs } from "./domain/verdictCode.js";
12
+ export { nextScnCode } from "./domain/scnAllocation.js";
13
+ export type { Allocation, AllocationRequest, ScnOccurrence, UnknownPart } from "./domain/scnAllocation.js";
37
14
  export { parseVitestEvidenceObservations } from "./parse/vitest.js";
38
15
  export type { VitestJsonReport } from "./parse/vitest.js";
39
16
  export { parseCucumberEvidenceObservations } from "./parse/cucumber.js";
40
17
  export type { CucumberJsonReport } from "./parse/cucumber.js";
41
- export { runningStaticChecks } from "./parse/runningStaticChecks.js";
42
- export { ciRunCommands, commandInvokesScript } from "./parse/checkScriptsRunInCI.js";
18
+ export { runningFitnessFunctions } from "./parse/runningFitnessFunctions.js";
19
+ export { commandInvokesScript } from "./parse/checkScriptsRunInCI.js";
43
20
  export type { PackageJsonScripts } from "./parse/checkScriptsRunInCI.js";
44
21
  export { assembleRenderInput } from "./assemble/renderInput.js";
45
- export type { EvidenceReconciliation, RenderInput, ReportMetadata, Summary, ScenarioReconciliationTotals, EvidenceObligationTotals, MissingByQualityCheck, TestVolumeTotals, StaticCheckTotals, LintTally, EvidenceObligationsSection, } from "./assemble/renderInput.js";
22
+ export type { EvidenceReconciliation, RenderInput, ReportMetadata, Summary, ScenarioReconciliationTotals, EvidenceObligationTotals, MissingByQualityCheck, TestVolumeTotals, FitnessFunctionTotals, FitnessTally, EvidenceObligationsSection, } from "./assemble/renderInput.js";
46
23
  export { evidenceReconciliationFromSources } from "./assemble/evidenceReconciliationFromSources.js";
47
- export { corpusFaults } from "./parse/corpusFaults.js";
48
- export type { CorpusFault } from "./parse/corpusFaults.js";
49
24
  export { renderJson } from "./render/json.js";
50
25
  export { renderMarkdown, renderReport, renderReportFromJson } from "./render/markdown.js";
51
26
  export type { FeatureNames } from "./render/markdown.js";
52
27
  export { provenanceObject, projectProvenance, projectProvenanceObject } from "./provenance/provenance.js";
53
28
  export type { RunContext, RunInputs, ProvenanceObject, ProvenanceFacts, ProvenanceInput } from "./provenance/provenance.js";
54
- export { PORTFOLIO_CHECK_CHARACTERISTICS, isPortfolioCharacteristic } from "./domain/checkCharacteristics.js";
55
- export { featureCodeOf } from "./lib/featureCode.js";
29
+ export { featureCodeOf, isFeaturePart } from "./domain/featureCode.js";
56
30
  export { relativizeToRoot } from "./lib/portablePath.js";
57
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,OAAO,EACP,eAAe,EACf,YAAY,EACZ,0BAA0B,EAC1B,sBAAsB,EACtB,MAAM,GACP,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGnH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAG7F,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAKzF,OAAO,EACL,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAe5B,OAAO,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AACpE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AACxE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACrF,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAMzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,cAAc,EACd,OAAO,EACP,4BAA4B,EAC5B,wBAAwB,EACxB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC;AAQnC,OAAO,EAAE,iCAAiC,EAAE,MAAM,iDAAiD,CAAC;AASpG,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC1F,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1G,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAgB5H,OAAO,EAAE,+BAA+B,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAG9G,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,OAAO,EACP,eAAe,EACf,YAAY,EACZ,0BAA0B,EAC1B,sBAAsB,EACtB,MAAM,GACP,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAEvF,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACtH,OAAO,EACL,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE3G,OAAO,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AACpE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AACxE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EACV,sBAAsB,EACtB,WAAW,EACX,cAAc,EACd,OAAO,EACP,4BAA4B,EAC5B,wBAAwB,EACxB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,iCAAiC,EAAE,MAAM,iDAAiD,CAAC;AAEpG,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC1F,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAC1G,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE5H,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -1,100 +1,20 @@
1
- /**
2
- * The public core barrel — the single entrypoint of the
3
- * `@3f-consulting/spec-controller-core` package.
4
- *
5
- * This re-exports the v1 contract surface — what a downstream consumer builds
6
- * on.
7
- *
8
- * NOTHING HOLDS IT TO A LIST, AND THAT IS NEW (3F-3449). Until that commit a
9
- * `@unit` drift guard reconciled this barrel's actual exports against a surface
10
- * written down for it in the repository's check tree, both directions, so a
11
- * symbol added here or dropped reds CI. The list and its arm are gone, with the
12
- * rest of the packaging checks this repository wrote for itself, and no
13
- * replacement runs: the community's instrument is a generated `api-extractor`
14
- * report, adopted at the 1.0 boundary where a stability promise exists again.
15
- * SO AN EXPORT ADDED TO OR REMOVED FROM THIS FILE IS A DECISION NOBODY IS
16
- * FORCED TO NOTICE. Treat a change here as a contract change on the strength of
17
- * where you are typing it, because no gate will say so — and `0.x` promises
18
- * nothing (`doc/compatibility.md`).
19
- *
20
- * SELECTIVE re-exports, NOT `export *`: the pure boundary is deliberate. The
21
- * core surface is filtered to pure symbols — no `fs` / `process.cwd` /
22
- * `child_process`. The impure application layer (file reading, git-derived
23
- * provenance, output routing, run-store, the CLI itself) lives in the
24
- * `spec-controller` package, not here.
25
- *
26
- * Groups + order are this file's own, kept because a reader uses them; they no
27
- * longer mirror an enumeration held elsewhere, because there is no longer one.
28
- * Values are re-exported with `export { … }`; types with `export type { … }`,
29
- * so the runtime namespace carries only the value bindings.
30
- */
31
- // --- Scenario parse (`parse/scenarios.ts`) ---
32
- export { parseScenarios, countScnOccurrences, parseUntaggedScenarios, proseOnlyCodes } from "./parse/scenarios.js";
33
- // --- Evidence-obligation census (`census/evidenceObligations.ts`) ---
1
+ export { parseScenarios, countScnOccurrences, parseUntaggedScenarios } from "./parse/scenarios.js";
34
2
  export { evidenceObligations } from "./census/evidenceObligations.js";
35
- // --- Evidence Reconciliation (`domain/evidenceReconciliation.ts`) + the Ledger predicates ---
3
+ export { sharedScnCodesOf, untaggedScenarioId } from "./census/evidenceObligations.js";
36
4
  export { reconcile, evidenceReconciliationOf } from "./domain/evidenceReconciliation.js";
37
- // The whole-run predicates come DIRECT from the concept that OWNS them (3F-2232). They used to
38
- // be re-exported through `reconcile/reconcile.js` — a shell kept alive purely to preserve importer
39
- // paths after 3F-1994 sent the behaviour home. No symbol is re-exported through a module that does
40
- // not own it.
5
+ export { hasScenarioCodeErrors } from "./domain/scenarioCodeError.js";
41
6
  export { isBalanced, hasPendingItems, hasBrokenEvidence, hasNothingToReconcile, } from "./domain/ledger.js";
42
- // The runtime evidence-observation census (`census/evidenceObservations.ts`) is RETIRED (3F-2104):
43
- // its counting folds onto the Ledger (`runtimeObservationTally`, an internal domain fold), and its
44
- // 6 symbols + `EvidenceObservationsSection` left this frozen-in-intent surface. Pre-freeze, no
45
- // external consumer (unpublished package; only workspace dependents, all rewired).
46
- // The static evidence-observation census (`census/staticEvidenceObservations.ts`) is RETIRED
47
- // (3F-2119): its counting folds onto the Ledger (`staticObservationTally`, an internal domain fold),
48
- // and its 2 symbols (`countStaticEvidenceObservationKinds` value / `StaticEvidenceObservationKindCounts`
49
- // type) left this frozen-in-intent surface. `StaticCheckTotals` (the materialised headline, now
50
- // Ledger-fold-sourced) STAYS on the barrel. Pre-freeze, no external consumer (unpublished package;
51
- // only workspace dependents, all rewired).
52
- // --- Parse — result/CI readers (`parse/*`) ---
7
+ export { verdictCode } from "./domain/verdictCode.js";
8
+ export { nextScnCode } from "./domain/scnAllocation.js";
53
9
  export { parseVitestEvidenceObservations } from "./parse/vitest.js";
54
10
  export { parseCucumberEvidenceObservations } from "./parse/cucumber.js";
55
- export { runningStaticChecks } from "./parse/runningStaticChecks.js";
56
- export { ciRunCommands, commandInvokesScript } from "./parse/checkScriptsRunInCI.js";
57
- // --- Evidence Reconciliation (the concept, `domain/evidenceReconciliation.ts`) + the RENDER
58
- // INPUT the adapters frame around it (`assemble/renderInput.ts`). `RenderInput` is deliberately
59
- // NOT a canon word: canon reserves "the report" for the RENDERED ARTEFACT, so the payload a
60
- // renderer consumes must not borrow it (3F-2234). ---
11
+ export { runningFitnessFunctions } from "./parse/runningFitnessFunctions.js";
12
+ export { commandInvokesScript } from "./parse/checkScriptsRunInCI.js";
61
13
  export { assembleRenderInput } from "./assemble/renderInput.js";
62
- // --- The RECONCILE COMPOSITION over a target's already-read sources
63
- // (`assemble/evidenceReconciliationFromSources.ts`) ---
64
- // THE ONE ENTRY POINT THIS BARREL GAINS AT 3F-3086, and the reason it is here rather than on
65
- // `./internal`: a published module — the CLI's ingest edge — has to reach the composition, and
66
- // `./internal` is not published (3F-2837, unamended). The nine symbols it composes stay internal,
67
- // so the surface a consumer's v1 contract carries widens by one name and nothing else.
68
14
  export { evidenceReconciliationFromSources } from "./assemble/evidenceReconciliationFromSources.js";
69
- // --- The `@SCN` SCHEME'S OWN RULES over a target's corpus (`parse/corpusFaults.ts`) ---
70
- // THE TWO NAMES THIS BARREL GAINS AT 3F-3300, and here for `evidenceReconciliationFromSources`'s
71
- // reason: a published module — the `tags` command's CLI edge — has to reach the rule, and
72
- // `./internal` is not published (3F-2837, unamended). `parseTaggedScenarios`, the tag-inheritance
73
- // walk the grammar rules read, stays internal; what crosses is the CALLER, exactly as it did for
74
- // the reconcile composition. The surface a consumer's v1 contract carries widens by two names —
75
- // the function and the fault it reports — and by nothing else.
76
- export { corpusFaults } from "./parse/corpusFaults.js";
77
- // --- Render — model→string (`render/*`) ---
78
15
  export { renderJson } from "./render/json.js";
79
16
  export { renderMarkdown, renderReport, renderReportFromJson } from "./render/markdown.js";
80
- // --- Provenance — pure subset (`provenance/provenance.ts`) ---
81
17
  export { provenanceObject, projectProvenance, projectProvenanceObject } from "./provenance/provenance.js";
82
- // --- The portfolio's check characteristics (`domain/checkCharacteristics.ts`) ---
83
- // ON THE PUBLIC BARREL BY DESIGN, NOT ON `./internal` (3F-2996). The roster is what makes the
84
- // check vocabulary SHARED, so it has to be reachable by a product that installs this package and
85
- // never sees this repository's `tests/checks/` folder; `./internal` is monorepo-scoped and would
86
- // publish it to exactly the one consumer that does not need it. A product derives its legal set
87
- // from its PINNED version and refreshes it on a bump — which is the property a hand-typed
88
- // per-product list cannot have.
89
- //
90
- // AND IT IS A REPORTING VOCABULARY NOW, NOT A GATE (3F-3167). No check in this repository reads
91
- // it any more: the collapse to one `@fitness` tag moved the characteristic onto a configured row
92
- // as a FIELD, and a word that only labels a roll-up needs no parser holding it. Whether the
93
- // portfolio should carry a given word is a question for canon, asked of people. So this export is
94
- // what a consumer's report groups by and what the portfolio says out loud — the two jobs one
95
- // token used to do, with the enforcing half retired rather than moved.
96
- export { PORTFOLIO_CHECK_CHARACTERISTICS, isPortfolioCharacteristic } from "./domain/checkCharacteristics.js";
97
- // --- Pure helpers ---
98
- export { featureCodeOf } from "./lib/featureCode.js";
18
+ export { featureCodeOf, isFeaturePart } from "./domain/featureCode.js";
99
19
  export { relativizeToRoot } from "./lib/portablePath.js";
100
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAoBH,gDAAgD;AAChD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEnH,uEAAuE;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAGtE,+FAA+F;AAC/F,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AACzF,+FAA+F;AAC/F,mGAAmG;AACnG,mGAAmG;AACnG,cAAc;AACd,OAAO,EACL,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,mGAAmG;AACnG,mGAAmG;AACnG,+FAA+F;AAC/F,mFAAmF;AAEnF,6FAA6F;AAC7F,qGAAqG;AACrG,yGAAyG;AACzG,gGAAgG;AAChG,mGAAmG;AACnG,2CAA2C;AAE3C,gDAAgD;AAChD,OAAO,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGrF,6FAA6F;AAC7F,gGAAgG;AAChG,4FAA4F;AAC5F,sDAAsD;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAehE,qEAAqE;AACrE,wDAAwD;AACxD,6FAA6F;AAC7F,+FAA+F;AAC/F,kGAAkG;AAClG,uFAAuF;AACvF,OAAO,EAAE,iCAAiC,EAAE,MAAM,iDAAiD,CAAC;AAEpG,yFAAyF;AACzF,iGAAiG;AACjG,0FAA0F;AAC1F,kGAAkG;AAClG,iGAAiG;AACjG,gGAAgG;AAChG,+DAA+D;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,6CAA6C;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG1F,gEAAgE;AAChE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAG1G,mFAAmF;AACnF,8FAA8F;AAC9F,iGAAiG;AACjG,iGAAiG;AACjG,gGAAgG;AAChG,0FAA0F;AAC1F,gCAAgC;AAChC,EAAE;AACF,gGAAgG;AAChG,iGAAiG;AACjG,4FAA4F;AAC5F,kGAAkG;AAClG,6FAA6F;AAC7F,uEAAuE;AACvE,OAAO,EAAE,+BAA+B,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAE9G,uBAAuB;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAEvF,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,EACL,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,OAAO,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAehE,OAAO,EAAE,iCAAiC,EAAE,MAAM,iDAAiD,CAAC;AAEpG,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG1F,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAG1G,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,33 +1,9 @@
1
- /**
2
- * The MONOREPO-INTERNAL shared surface of `@3f-consulting/spec-controller-core`
3
- * — reached by the sibling `spec-controller` app via the package's `/internal`
4
- * subpath export (`@3f-consulting/spec-controller-core/internal`).
5
- *
6
- * NOT THE PUBLIC v1 CONTRACT. The v1 surface is the `.` barrel (`index.ts`)
7
- * alone, and this entry is deliberately outside it. Do NOT put public API here:
8
- * a symbol an external consumer should depend on belongs on the `.` barrel, and
9
- * putting it there is a contract decision NOTHING CHECKS — the drift guard that
10
- * reconciled that barrel against a written-down enumeration, in both directions,
11
- * left at 3F-3449 and has no replacement before 1.0.
12
- * This file exists solely so in-repo consumers get a SANCTIONED seam for a
13
- * core-internal helper instead of reaching into `core/src` by a deep relative
14
- * path.
15
- *
16
- * Kept deliberately small: it re-exports only the internal helpers the app
17
- * genuinely shares, one at a time, each with the reason it is shared here rather
18
- * than promoted to the public contract.
19
- */
20
- export { parseScnCitation, parseScnCitations } from "./lib/scnCitation.js";
1
+ export { SCN_ID_SOURCE } from "./domain/featureCode.js";
21
2
  export { bareTerm } from "./lib/bareTerm.js";
22
3
  export type { ScriptCitation } from "./parse/fitnessCitations.js";
23
- export { parseTaggedScenarios } from "./parse/scenarios.js";
24
- export type { TaggedScenario } from "./parse/scenarios.js";
25
4
  export { FITNESS_AXIS_TAG } from "./parse/scenarios.js";
26
- export { isStaticCheckObservation } from "./domain/journal.js";
27
- export type { FitnessEvidenceObservation } from "./domain/journal.js";
28
- export { ciRunSteps } from "./parse/checkScriptsRunInCI.js";
29
- export type { CiRunStep } from "./parse/checkScriptsRunInCI.js";
5
+ export { isFitnessObservation } from "./domain/journal.js";
30
6
  export { ciWorkflowSteps } from "./parse/checkScriptsRunInCI.js";
31
7
  export type { CiWorkflowStep, CiStepAction } from "./parse/checkScriptsRunInCI.js";
32
- export { resolveDeferralTags, resolveFitnessChecks, } from "./parse/targetManifest.js";
8
+ export { resolveDeferralTags, } from "./parse/targetManifest.js";
33
9
  //# sourceMappingURL=internal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAU3E,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAS7C,YAAY,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAOlE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAI5D,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAY3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAMxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,YAAY,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAatE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,YAAY,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAUhE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAcnF,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,YAAY,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEnF,OAAO,EACL,mBAAmB,GACpB,MAAM,2BAA2B,CAAC"}
package/dist/internal.js CHANGED
@@ -1,98 +1,7 @@
1
- /**
2
- * The MONOREPO-INTERNAL shared surface of `@3f-consulting/spec-controller-core`
3
- * — reached by the sibling `spec-controller` app via the package's `/internal`
4
- * subpath export (`@3f-consulting/spec-controller-core/internal`).
5
- *
6
- * NOT THE PUBLIC v1 CONTRACT. The v1 surface is the `.` barrel (`index.ts`)
7
- * alone, and this entry is deliberately outside it. Do NOT put public API here:
8
- * a symbol an external consumer should depend on belongs on the `.` barrel, and
9
- * putting it there is a contract decision NOTHING CHECKS — the drift guard that
10
- * reconciled that barrel against a written-down enumeration, in both directions,
11
- * left at 3F-3449 and has no replacement before 1.0.
12
- * This file exists solely so in-repo consumers get a SANCTIONED seam for a
13
- * core-internal helper instead of reaching into `core/src` by a deep relative
14
- * path.
15
- *
16
- * Kept deliberately small: it re-exports only the internal helpers the app
17
- * genuinely shares, one at a time, each with the reason it is shared here rather
18
- * than promoted to the public contract.
19
- */
20
- // `parseScnCitation` / `parseScnCitations` — the ONE definition of the bracketed citation
21
- // form. Shared because the two citation readers previously carried their own sigil-optional
22
- // regexes and drifted from canon and from each other (3F-2368): the runtime reader minted a
23
- // phantom scenario from fixture data, the scn-subissue gate let a prose mention vouch for a
24
- // changed block. A second copy is exactly the fault, so the gate imports this one. Internal,
25
- // not public — the form is spec-controller's own reading convention, not a v1 contract.
26
- export { parseScnCitation, parseScnCitations } from "./lib/scnCitation.js";
27
- // `bareTerm` — the ONE reading of what a term BARE is: whitespace around it is not part of it, and
28
- // only a LEADING @ is a sigil. Shared because it was hand-copied seven times and the copies carried
29
- // the same anchored-strip-before-trim ordering, so a term a target typed with a stray space in
30
- // front of its @ was stored still carrying the @ and no bare lookup ever found it again — silently,
31
- // since an absent key is a legitimate reading everywhere it is asked for (3F-2976). A caller outside
32
- // the engine reaches it here rather than re-deriving it, which is what keeps its reading of a term
33
- // the engine's by construction instead of by a comment saying it must be. Internal, not public — the sigil convention is spec-controller's own
34
- // reading of a term, not a v1 contract, and the `.` barrel is where a v1 contract goes.
1
+ export { SCN_ID_SOURCE } from "./domain/featureCode.js";
35
2
  export { bareTerm } from "./lib/bareTerm.js";
36
- // `parseTaggedScenarios` — the corpus read BEFORE any obligation rule is applied, and the input
37
- // the corpus hop above takes. Shared rather than re-derived at the edge: it is the single
38
- // tag-inheritance walk both of `parseScenarios`' historical false-greens lived in, and a caller
39
- // that rebuilt "which tags does this scenario carry" would be free to reproduce either one
40
- // silently. Internal, not public — `parseScenarios` remains the v1 corpus surface.
41
- export { parseTaggedScenarios } from "./parse/scenarios.js";
42
- // `FITNESS_AXIS_TAG` — the ONE spelling of the word a CONVERTED check's scenario carries
43
- // (`parse/scenarios`, @SCN-LNT-018). Shared because the corpus check's grammar rule (@SCN-STG-005)
44
- // must admit exactly the scenarios the obligation rule raises against, and this word is the one
45
- // source left of what names a check on a corpus — the registry retired (3F-3161) and the measured
46
- // axis's ceilings with it (3F-3516); a converted check has no runnable script handle, only a
47
- // configured row. A second spelling in `tests/checks/` would be a word the floor admitted while
48
- // the engine raised nothing for it, or the reverse — the seam 3F-3126 spent a slice closing.
49
- // A LITERAL RATHER THAN A RESOLVED SET, and deliberately: which words name a CHECK is the
50
- // target's answer, which AXIS a scenario is on is the model's, exactly as `unit` is. Internal,
51
- // not public — the `.` barrel carries the v1 contract and this is not one.
52
3
  export { FITNESS_AXIS_TAG } from "./parse/scenarios.js";
53
- // `isStaticCheckObservation` — the predicate every in-repo reader that wants a static check's OWN
54
- // fields — its runnable handle, its `exists`, its `enforcedOverRealSource` — asks. The measured
55
- // member it once told apart from left with the measured axis (3F-3516); it stays shared because a
56
- // caller re-spelling the test inline would be free to spell it differently. Internal, not public.
57
- export { isStaticCheckObservation } from "./domain/journal.js";
58
- // `ciRunSteps` / `CiRunStep` — the CI walk `ciRunCommands` projects, carrying each `run:` step's
59
- // `id:` and whether its red would abort the job. Shared so that no caller opens a second YAML walk
60
- // to see `continue-on-error`: that key is on the same step mapping this walk already visits, and a
61
- // second reader would be free to disagree with the first about which steps a workflow even runs —
62
- // which is the silent disagreement the one-place rule exists to prevent (3F-3042). Its consumer
63
- // OUTSIDE the engine is `tests/steps/lintReconciliation.steps.ts`, at twelve call sites, one of
64
- // which reads `abortsJob`; `runningStaticChecks` reads the same walk in-engine for the `id:`
65
- // (3F-3261). The local-ladder derivation was the other outside consumer until 3F-3475. Internal, not
66
- // public — `ciRunCommands` remains
67
- // the v1 contract for anyone outside, and putting this on the `.` barrel would widen the v1
68
- // contract to buy nothing.
69
- export { ciRunSteps } from "./parse/checkScriptsRunInCI.js";
70
- // `ciWorkflowSteps` / `CiWorkflowStep` / `CiStepAction` — the SAME walk read whole: `uses:` steps
71
- // as well as `run:` ones, each with the identity GitHub displays for it and the job it belongs to
72
- // (3F-3352). `ciRunSteps` is its projection, so the pair cannot disagree about which steps a
73
- // workflow runs — the third time that one-walk rule has held here, and for the reason it held the
74
- // first two. Internal, not public, on the same footing as `ciRunSteps`: `ciRunCommands` remains
75
- // the v1 contract for anyone outside, and the shape of a whole-pipeline step is a reading the
76
- // discovery inversion (3F-3343) is still settling, so putting it on the v1 contract now would
77
- // widen it for a surface no consumer has yet asked for.
4
+ export { isFitnessObservation } from "./domain/journal.js";
78
5
  export { ciWorkflowSteps } from "./parse/checkScriptsRunInCI.js";
79
- // The `resolve*` family — a target's `specController.*` configuration read into the rows and
80
- // mints the reconciler takes (`parse/targetManifest`). Shared because they moved INTO the
81
- // engine and the tree's own gates still read a target's config through them: the corpus check
82
- // (@SCN-STG-005) and the characteristic roster resolve the same rows and mints the
83
- // reconciler does, and a second reader deciding independently which words a manifest names would
84
- // admit a tag the engine raises nothing for. They sat at the app's ingest edge until 3F-3087,
85
- // where they were the reason a PUBLISHED module imported this unpublished subpath — the fault
86
- // 3F-3086 repairs. Internal, not public: where a target's rows and mints are AUTHORED
87
- // is the registry-home question (increment D), so the shape of what these read is not a v1
88
- // contract yet. Nothing under `tests/checks/`
89
- // travels in a tarball (`tsconfig.build.json` emits `src` alone), so reaching them here is the
90
- // seam working as 3F-2837 intended.
91
- export { resolveDeferralTags, resolveFitnessChecks, } from "./parse/targetManifest.js";
92
- // `readTargetCorpus` HAS LEFT THIS SEAM (3F-3089), and the removal is the point rather than tidying.
93
- // It was shared here for exactly one consumer — the app's ingest edge, which composed the
94
- // reconciliation itself — and the composition moved into the engine
95
- // (`assemble/evidenceReconciliationFromSources`), which is what takes the last crossing off the
96
- // published path. Nothing in this workspace reaches the corpus read any more, and this file
97
- // re-exports only what the app genuinely shares.
6
+ export { resolveDeferralTags, } from "./parse/targetManifest.js";
98
7
  //# sourceMappingURL=internal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,0FAA0F;AAC1F,4FAA4F;AAC5F,4FAA4F;AAC5F,4FAA4F;AAC5F,6FAA6F;AAC7F,wFAAwF;AACxF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE3E,mGAAmG;AACnG,oGAAoG;AACpG,+FAA+F;AAC/F,oGAAoG;AACpG,qGAAqG;AACrG,mGAAmG;AACnG,+IAA+I;AAC/I,wFAAwF;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAW7C,gGAAgG;AAChG,0FAA0F;AAC1F,gGAAgG;AAChG,2FAA2F;AAC3F,mFAAmF;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAM5D,yFAAyF;AACzF,mGAAmG;AACnG,gGAAgG;AAChG,kGAAkG;AAClG,6FAA6F;AAC7F,gGAAgG;AAChG,6FAA6F;AAC7F,0FAA0F;AAC1F,+FAA+F;AAC/F,2EAA2E;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,kGAAkG;AAClG,gGAAgG;AAChG,kGAAkG;AAClG,kGAAkG;AAClG,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,iGAAiG;AACjG,mGAAmG;AACnG,mGAAmG;AACnG,kGAAkG;AAClG,gGAAgG;AAChG,gGAAgG;AAChG,6FAA6F;AAC7F,qGAAqG;AACrG,mCAAmC;AACnC,4FAA4F;AAC5F,2BAA2B;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAG5D,kGAAkG;AAClG,kGAAkG;AAClG,6FAA6F;AAC7F,kGAAkG;AAClG,gGAAgG;AAChG,8FAA8F;AAC9F,8FAA8F;AAC9F,wDAAwD;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,6FAA6F;AAC7F,0FAA0F;AAC1F,8FAA8F;AAC9F,mFAAmF;AACnF,iGAAiG;AACjG,8FAA8F;AAC9F,8FAA8F;AAC9F,sFAAsF;AACtF,2FAA2F;AAC3F,8CAA8C;AAC9C,+FAA+F;AAC/F,oCAAoC;AACpC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAEnC,qGAAqG;AACrG,0FAA0F;AAC1F,oEAAoE;AACpE,gGAAgG;AAChG,4FAA4F;AAC5F,iDAAiD"}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,OAAO,EACL,mBAAmB,GACpB,MAAM,2BAA2B,CAAC"}
@@ -1,41 +1,2 @@
1
- /**
2
- * The term-spelling helper — the ONE owner of what a term BARE is (@SCN-TRM-001). Sibling of
3
- * `lib/featureCode.ts`, which owns the id grammar (`SCN-<FFF>-<NNN>`, Evidence Manifesto §9A),
4
- * and of `lib/scnCitation.ts`, which owns the bracketed citation form. This owns the sigil and
5
- * the whitespace around it.
6
- *
7
- * IT WAS SEVEN COPIES, SO ONE BUG WAS SEVEN BUGS. Every port that stores a hand-authored term as
8
- * a key spelled the same two lines the same wrong way — `value.replace(/^@/, "").trim()` — and
9
- * `^@` is anchored, so a leading space defeats it and the trim that follows removes the space and
10
- * leaves the sigil. A term a target typed as `" @SCN-MSD-001"` was stored as `"@SCN-MSD-001"`
11
- * under a key no bare lookup ever asks for, and nothing redded: `thresholdFor` answered null, a
12
- * measurement row was dropped, a registry entry was absent, and all three are legitimate readings
13
- * of a key the manifest never named. The correction is not the reordering. It is that a rule this
14
- * small was hand-copied at all — `dry`'s "a rule stated twice is a rule obeyed in its laxest form"
15
- * with the laxest form being all seven (3F-2976).
16
- *
17
- * WHAT IS IN SCOPE, AND WHERE THE RULE STOPS. Whitespace AROUND a term is not part of it, at
18
- * either end and on both sides of the sigil — so `" @X "` and `"@ X"` both name `"X"`, and the
19
- * second trim is not sanitiser creep: under a leading trim alone, `"@ X"` would store `" X"`,
20
- * which is the same silent-miss class in a narrower spelling. After this, no input reaches storage
21
- * carrying whitespace or a sigil.
22
- *
23
- * WHAT IS DELIBERATELY OUT, STATED SO THE OMISSIONS ARE NOT SILENT. A doubled sigil (`"@@X"` →
24
- * `"@X"`) — a second `@` is a different spelling, not whitespace, and `/^@/` strips exactly one
25
- * per @SCN-LNT-001's pinned "strips only a leading @". An @ spelled INSIDE a term
26
- * (`"cucumber@e2e"`) — part of the name the target chose, and eating it would rename the pair to
27
- * one no lookup asks for. Whitespace INSIDE a term — a different term, not a differently-spelled
28
- * one. Case — not a whitespace question, and folding it would be a real semantic change.
29
- *
30
- * AN EMPTY ANSWER IS AN ANSWER. A value that is nothing but whitespace and a sigil bares to `""`,
31
- * which every caller already drops as it drops an empty one — rather than storing `"@"`, a key
32
- * nobody can ask for and a bar that could never be settled.
33
- */
34
- /**
35
- * The term as its bare spelling names it — trimmed, its LEADING sigil removed, trimmed again.
36
- *
37
- * The order is the whole of it. Trimming first is what lets the anchor see the sigil at all;
38
- * trimming again is what stops a space between the sigil and the term riding into storage.
39
- */
40
1
  export declare function bareTerm(value: string): string;
41
2
  //# sourceMappingURL=bareTerm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bareTerm.d.ts","sourceRoot":"","sources":["../../src/lib/bareTerm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C"}
1
+ {"version":3,"file":"bareTerm.d.ts","sourceRoot":"","sources":["../../src/lib/bareTerm.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C"}
@@ -1,42 +1,3 @@
1
- /**
2
- * The term-spelling helper — the ONE owner of what a term BARE is (@SCN-TRM-001). Sibling of
3
- * `lib/featureCode.ts`, which owns the id grammar (`SCN-<FFF>-<NNN>`, Evidence Manifesto §9A),
4
- * and of `lib/scnCitation.ts`, which owns the bracketed citation form. This owns the sigil and
5
- * the whitespace around it.
6
- *
7
- * IT WAS SEVEN COPIES, SO ONE BUG WAS SEVEN BUGS. Every port that stores a hand-authored term as
8
- * a key spelled the same two lines the same wrong way — `value.replace(/^@/, "").trim()` — and
9
- * `^@` is anchored, so a leading space defeats it and the trim that follows removes the space and
10
- * leaves the sigil. A term a target typed as `" @SCN-MSD-001"` was stored as `"@SCN-MSD-001"`
11
- * under a key no bare lookup ever asks for, and nothing redded: `thresholdFor` answered null, a
12
- * measurement row was dropped, a registry entry was absent, and all three are legitimate readings
13
- * of a key the manifest never named. The correction is not the reordering. It is that a rule this
14
- * small was hand-copied at all — `dry`'s "a rule stated twice is a rule obeyed in its laxest form"
15
- * with the laxest form being all seven (3F-2976).
16
- *
17
- * WHAT IS IN SCOPE, AND WHERE THE RULE STOPS. Whitespace AROUND a term is not part of it, at
18
- * either end and on both sides of the sigil — so `" @X "` and `"@ X"` both name `"X"`, and the
19
- * second trim is not sanitiser creep: under a leading trim alone, `"@ X"` would store `" X"`,
20
- * which is the same silent-miss class in a narrower spelling. After this, no input reaches storage
21
- * carrying whitespace or a sigil.
22
- *
23
- * WHAT IS DELIBERATELY OUT, STATED SO THE OMISSIONS ARE NOT SILENT. A doubled sigil (`"@@X"` →
24
- * `"@X"`) — a second `@` is a different spelling, not whitespace, and `/^@/` strips exactly one
25
- * per @SCN-LNT-001's pinned "strips only a leading @". An @ spelled INSIDE a term
26
- * (`"cucumber@e2e"`) — part of the name the target chose, and eating it would rename the pair to
27
- * one no lookup asks for. Whitespace INSIDE a term — a different term, not a differently-spelled
28
- * one. Case — not a whitespace question, and folding it would be a real semantic change.
29
- *
30
- * AN EMPTY ANSWER IS AN ANSWER. A value that is nothing but whitespace and a sigil bares to `""`,
31
- * which every caller already drops as it drops an empty one — rather than storing `"@"`, a key
32
- * nobody can ask for and a bar that could never be settled.
33
- */
34
- /**
35
- * The term as its bare spelling names it — trimmed, its LEADING sigil removed, trimmed again.
36
- *
37
- * The order is the whole of it. Trimming first is what lets the anchor see the sigil at all;
38
- * trimming again is what stops a space between the sigil and the term riding into storage.
39
- */
40
1
  export function bareTerm(value) {
41
2
  return value.trim().replace(/^@/, "").trim();
42
3
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bareTerm.js","sourceRoot":"","sources":["../../src/lib/bareTerm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"bareTerm.js","sourceRoot":"","sources":["../../src/lib/bareTerm.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"portablePath.d.ts","sourceRoot":"","sources":["../../src/lib/portablePath.ts"],"names":[],"mappings":"AAgBA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK/E"}
1
+ {"version":3,"file":"portablePath.d.ts","sourceRoot":"","sources":["../../src/lib/portablePath.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK/E"}
@@ -1,24 +1,10 @@
1
- /**
2
- * relativizeToRoot — a PURE path-string transform, extracted and shared.
3
- * No IO: the caller provides the run root (the IO — `process.cwd()` — stays at
4
- * the CLI edge). A pure CORE utility both the evidenceObservations locators (`evidenceObservations.ts`) and the
5
- * provenance inputs (`run/runContext.ts`) depend on, so the portability rule lives once
6
- * — and, being side-effect-free, it sits cleanly in the public core through the Phase-B
7
- * split (no app-layer inversion).
8
- *
9
- * Semantics (unchanged): a non-absolute path (a sentinel like
10
- * `(unknown vitest file)`, an already-relative path) is returned unchanged; an absolute
11
- * path UNDER `root` collapses to the relative path; an absolute path NOT under `root`
12
- * (the relative path would escape via `..` or resolve absolute) falls back to the
13
- * ORIGINAL string — never a `../../` leak. With no `root`, the path is returned verbatim.
14
- */
15
1
  import { isAbsolute, relative } from "node:path";
16
2
  export function relativizeToRoot(path, root) {
17
3
  if (root === undefined || !isAbsolute(path))
18
4
  return path;
19
5
  const rel = relative(root, path);
20
- if (rel === "" || rel.startsWith("..") || isAbsolute(rel))
6
+ if (rel.startsWith("..") || isAbsolute(rel))
21
7
  return path;
22
- return rel;
8
+ return rel === "" ? "." : rel;
23
9
  }
24
10
  //# sourceMappingURL=portablePath.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"portablePath.js","sourceRoot":"","sources":["../../src/lib/portablePath.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAAwB;IACrE,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvE,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"portablePath.js","sourceRoot":"","sources":["../../src/lib/portablePath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAAwB;IACrE,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACzD,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAChC,CAAC"}
@@ -1,34 +1,2 @@
1
- /**
2
- * The citation-form helper — the ONE owner of what a citation LOOKS LIKE in a Vitest
3
- * `describe`/`it` title. Sibling of `lib/featureCode.ts`, which owns the id GRAMMAR
4
- * (`SCN-<FFF>-<NNN>`, Evidence Manifesto §9A); this owns the wrapper that turns a
5
- * mention of that id into a citation.
6
- *
7
- * A citation is the BRACKETED token — `[SCN-<FFF>-<NNN>]`. Canon assigns the forms per
8
- * backend (evidence-manifesto.md): "The Vitest `describe`/`it` string includes
9
- * `[SCN-007]`; the Cucumber-JS step block carries a `// @SCN-007` marker comment." The
10
- * `@` form is Cucumber's marker and is NOT a Vitest citation here — deliberately, and
11
- * that exclusion is the rule's teeth: `@SCN-…` is how this repository writes every prose
12
- * cross-reference, in comments, headers and ticket references, so accepting it in a title
13
- * would leave the false-citation class open on the form most likely to appear by accident.
14
- *
15
- * Before this module the two citation readers each carried their own sigil-OPTIONAL regex
16
- * — `/\bSCN-[A-Z0-9]+-\d+\b/` in parse/vitest.ts and `/@?(SCN-[A-Z0-9]+-\d+)/g` in
17
- * tests/checks/scnSubIssueGate.ts — so any SCN-shaped token anywhere in a title was a
18
- * citation whatever it was doing there. On the runtime side that minted a phantom scenario
19
- * from fixture data; on the static side it let a prose mention vouch for a changed test
20
- * block, a false green. Two copies of the answer is how they drifted from canon and from
21
- * each other, so there is one copy now and both import it (3F-2368).
22
- */
23
- /**
24
- * The FIRST bracketed scenario id cited in `text`, as a bare code, or null when `text`
25
- * cites none. An SCN-shaped token without its brackets is prose and yields null.
26
- */
27
1
  export declare function parseScnCitation(text: string): string | null;
28
- /**
29
- * EVERY bracketed scenario id cited in `text`, as bare codes, in document order and
30
- * de-duplicated. The multi-citation read the scn-subissue gate needs, where one
31
- * `describe` line may vouch for more than one scenario.
32
- */
33
- export declare function parseScnCitations(text: string): string[];
34
2
  //# sourceMappingURL=scnCitation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scnCitation.d.ts","sourceRoot":"","sources":["../../src/lib/scnCitation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAYH;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAExD"}
1
+ {"version":3,"file":"scnCitation.d.ts","sourceRoot":"","sources":["../../src/lib/scnCitation.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5D"}