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