@3f-consulting/spec-controller-core 0.1.0-alpha.8 → 0.1.0-alpha.81
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 +18 -53
- package/dist/assemble/evidenceReconciliationFromSources.d.ts.map +1 -1
- package/dist/assemble/evidenceReconciliationFromSources.js +31 -326
- package/dist/assemble/evidenceReconciliationFromSources.js.map +1 -1
- package/dist/assemble/renderInput.d.ts +15 -81
- 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 +18 -52
- package/dist/census/evidenceObligations.d.ts.map +1 -1
- package/dist/census/evidenceObligations.js +22 -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 +45 -410
- package/dist/domain/evidenceReconciliation.d.ts.map +1 -1
- package/dist/domain/evidenceReconciliation.js +74 -388
- 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 +27 -411
- package/dist/domain/journal.d.ts.map +1 -1
- package/dist/domain/journal.js +7 -118
- package/dist/domain/journal.js.map +1 -1
- package/dist/domain/ledger.d.ts +37 -357
- package/dist/domain/ledger.d.ts.map +1 -1
- package/dist/domain/ledger.js +43 -346
- package/dist/domain/ledger.js.map +1 -1
- package/dist/domain/messages.d.ts +224 -0
- package/dist/domain/messages.d.ts.map +1 -0
- package/dist/domain/messages.js +335 -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 +24 -121
- 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 +4 -44
- 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 +16 -288
- package/dist/domain/qualityCheckReconciliation.d.ts.map +1 -1
- package/dist/domain/qualityCheckReconciliation.js +84 -479
- 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 +19 -216
- package/dist/domain/scenarioReconciliation.d.ts.map +1 -1
- package/dist/domain/scenarioReconciliation.js +29 -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 +6 -169
- 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 +20 -227
- 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 +13 -66
- 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 +4 -61
- 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 +5 -230
- package/dist/parse/scenarios.d.ts.map +1 -1
- package/dist/parse/scenarios.js +25 -467
- 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 +3 -80
- 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 +8 -68
- 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 +30 -138
- package/dist/provenance/provenance.d.ts.map +1 -1
- package/dist/provenance/provenance.js +5 -65
- 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 +8 -71
- 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 +3 -37
- package/dist/render/evidenceGrid.d.ts.map +1 -1
- package/dist/render/evidenceGrid.js +23 -107
- 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 +106 -487
- 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,69 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*
|
|
6
|
-
* IT ARRIVED HERE FROM `reconcile/` (3F-2232). After 3F-2202/2203/2204 that module held no domain
|
|
7
|
-
* rule — but it was still a named layer beside the domain doing the concept's own work, which is
|
|
8
|
-
* the shape `functional-domain-modelling.md` rejects: *"orchestration is thin composition, not a
|
|
9
|
-
* named layer."* Constructing a concept is the concept's business. The module's residual tell was
|
|
10
|
-
* already visible — it re-exported `isBalanced` / `hasPendingItems` / `hasBrokenEvidence` FROM
|
|
11
|
-
* `domain/ledger` purely to preserve importers' paths, a shell around behaviour that had already
|
|
12
|
-
* gone home. Every importer now points at the module that OWNS the symbol.
|
|
13
|
-
*
|
|
14
|
-
* (3F-2233 completes the move: the concept's TYPE, its `Summary`, and the factory that fuses this
|
|
15
|
-
* fold with the summary tally. Today this module holds the fold alone.)
|
|
16
|
-
*
|
|
17
|
-
* The pure obligation-vs-observation join, keyed by one flat
|
|
18
|
-
* `qualityCheck` (the two-axis `(kind, level)` grid collapsed). This module is THIN
|
|
19
|
-
* COMPOSITION: the domain RULES it once held moved to the
|
|
20
|
-
* concept modules that own them (3F-1994) — `reconcileEvidenceObligation` (the per-obligation
|
|
21
|
-
* outcome) to `domain/qualityCheckReconciliation`, `verdictFor` / `reconcilingItemsOf` (the
|
|
22
|
-
* account roll-up) to `domain/scenarioReconciliation`, `isBalanced` / `hasPendingItems` /
|
|
23
|
-
* `hasBrokenEvidence` (the whole-run predicates) to `domain/ledger`. `reconcile` is the fold that
|
|
24
|
-
* WALKS the inputs, CALLS those rules, and BUILDS the rows; it is the orchestration, not their home.
|
|
25
|
-
*
|
|
26
|
-
* POSTING-DESTINATION left too (3F-2202) — WHERE an entry lands is canon's own glossary group
|
|
27
|
-
* ("### Posting") and now lives on `domain/posting`: `postingOf`, the one citation route over both
|
|
28
|
-
* axes (plus the no-evidence-obligation-static-check arm). The by-name half is gone (3F-2590).
|
|
29
|
-
* The fold no longer DECIDES a destination anywhere — it
|
|
30
|
-
* asks the rule once per credit and files the answer. What remains is assembly: which rows exist,
|
|
31
|
-
* in what order, holding which items.
|
|
32
|
-
*
|
|
33
|
-
* Per the slice design: for each evidence obligation a scenario raises (a reconciling
|
|
34
|
-
* item), present+pass → satisfied; present+fail → failing; absent →
|
|
35
|
-
* missing. `reconcileEvidenceObligation` branches on the `qualityCheck === "lint"`
|
|
36
|
-
* watermelon discriminator (replacing the retired `kind === "static"` split): a `lint`
|
|
37
|
-
* evidence obligation reconciles against a static-check evidence observation (exists+wired → satisfied;
|
|
38
|
-
* exists+unwired → watermelon; absent → missing); a runtime evidence obligation
|
|
39
|
-
* reconciles against a test result matched by (scnId, quality-check).
|
|
40
|
-
*
|
|
41
|
-
* The scenario VERDICT is binary (superseding the earlier prioritising
|
|
42
|
-
* aggregate): a scenario is `balanced` IFF every required quality-check balances;
|
|
43
|
-
* otherwise `out-of-balance`, carrying the LIST of EVERY non-balanced reconciling
|
|
44
|
-
* item — no prioritisation, no picked winner ("missing beats failing" was a false
|
|
45
|
-
* order that hid one of two genuinely different problems). The renderers list
|
|
46
|
-
* every item.
|
|
47
|
-
*
|
|
48
|
-
* Parent: @SCN-LDG-001.
|
|
49
|
-
*/
|
|
50
|
-
import { evidenceObligationPairsOf,
|
|
51
|
-
// THE PENDING PARTITION (3F-2204) — the two exact complements over a scenario's obligations.
|
|
52
|
-
evidenceObligationsOf, pendingItemsOf, } from "../model.js";
|
|
53
|
-
import { reconcileEvidenceObligation,
|
|
54
|
-
// THE CREDIT-SIDE AND DEGENERATE OUTCOME RULES (3F-2204) — what an entry reconciles TO, as
|
|
55
|
-
// opposed to where it lands. `reconcile` asks; it no longer maps outcomes itself.
|
|
56
|
-
noEvidenceObligationReconciliationsOf, citesUnknownScenarioReconciliationsOf, suspenseReconciliationsOf, noScnCodeReconciliations, unspecifiedRowReconciliations, } from "./qualityCheckReconciliation.js";
|
|
57
|
-
import { ledgerTally, runtimeObservationTally, staticObservationTally, } from "./ledger.js";
|
|
58
|
-
import { verdictFor, reconcilingItemsOf,
|
|
59
|
-
// THE ROW-SHAPE RULE (3F-2204) — the both-missing degeneration and its pending clause.
|
|
60
|
-
qualityCheckReconciliationsOf, } from "./scenarioReconciliation.js";
|
|
61
|
-
// THE POSTING RULE (3F-2202) — where an entry lands is canon's own glossary group, so it lives on
|
|
62
|
-
// its own concept module. `reconcile` no longer decides a destination; it ASKS.
|
|
1
|
+
import { evidenceObligationPairsOf, evidenceObligationsOf, pendingItemsOf, } from "./journal.js";
|
|
2
|
+
import { reconcileEvidenceObligation, noEvidenceObligationReconciliationsOf, citesUnknownScenarioReconciliationsOf, suspenseReconciliationsOf, noScnCodeReconciliations, duplicateScnCodeReconciliationsOf, } from "./qualityCheckReconciliation.js";
|
|
3
|
+
import { ledgerTally, runtimeObservationTally, fitnessFunctionTally, RUNTIME_QUALITY_CHECKS, } from "./ledger.js";
|
|
4
|
+
import { verdictFor, reconcilingItemsOf, qualityCheckReconciliationsOf, } from "./scenarioReconciliation.js";
|
|
63
5
|
import { postingOf } from "./posting.js";
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
import {
|
|
6
|
+
import { CORE_MESSAGES, CoreMessage } from "./messages.js";
|
|
7
|
+
import { inEvidenceOrder } from "./evidenceOrder.js";
|
|
8
|
+
import { isFitnessObservation } from "./journal.js";
|
|
67
9
|
function citationIndex() {
|
|
68
10
|
const byScn = new Map();
|
|
69
11
|
const phantomIds = [];
|
|
@@ -76,168 +18,78 @@ function citationIndex() {
|
|
|
76
18
|
phantomIds.push(posting.scnId);
|
|
77
19
|
}
|
|
78
20
|
},
|
|
79
|
-
|
|
21
|
+
observationsFor: (scnId) => byScn.get(scnId) ?? [],
|
|
80
22
|
phantomIds,
|
|
81
23
|
};
|
|
82
24
|
}
|
|
83
|
-
|
|
84
|
-
* THE ONE ROUTING PASS (3F-2202). Every credit is routed ONCE, by THE posting rule
|
|
85
|
-
* (`domain/posting`), into the structures the fold reads. `reconcile` no longer DECIDES a
|
|
86
|
-
* destination anywhere — it asks, and files the answer.
|
|
87
|
-
*
|
|
88
|
-
* This replaces two passes that re-stated the SAME four routing decisions (the citation index and
|
|
89
|
-
* the phantom-id scan) plus three stream filters. They agreed by copy-paste, not by construction:
|
|
90
|
-
* either could have grown an arm alone and nothing would have redded — the identical anaemia
|
|
91
|
-
* `evidenceObligationPairsOf` was extracted to cure.
|
|
92
|
-
*
|
|
93
|
-
* ITS OWN FUNCTION, extracted at @SCN-LNT-026 when the static axis gained its second suspense
|
|
94
|
-
* reason and took `reconcile` past the `complexity` and `max-lines-per-function` ceilings. Routing
|
|
95
|
-
* is one idea with a name and the fold below is another; nothing about what it decides moved, and
|
|
96
|
-
* the exception list is untouched — an exception buys no headroom.
|
|
97
|
-
*/
|
|
98
|
-
function routeCredits(evidenceObservations, scenarioIds) {
|
|
99
|
-
// THE CITATION INDEX holds BOTH axes now (@SCN-LNT-001): a fitness check's run cites the
|
|
100
|
-
// scenario that raises its obligation, so it files here exactly as a test result does.
|
|
25
|
+
function routeObservations(evidenceObservations, scenarioIds) {
|
|
101
26
|
const citations = citationIndex();
|
|
102
|
-
// The three SUSPENSE streams, kept separate and each in observation order — the suspense row's
|
|
103
|
-
// item order (broken first, then uncited, then the no-evidence-obligation static checks) is row
|
|
104
|
-
// assembly, owned by the fold in `reconcile`, not a routing decision.
|
|
105
|
-
// BROKEN EVIDENCE FROM EITHER AXIS (@SCN-LNT-026). It was a runtime-only stream while `broken`
|
|
106
|
-
// was a runtime-only fact; a converted static check that did not run is the same fact about the
|
|
107
|
-
// same kind of absence, so it lands in the same stream and renders through the same section.
|
|
108
27
|
const brokenEvidence = [];
|
|
109
28
|
const uncited = [];
|
|
110
|
-
const
|
|
29
|
+
const uncitedFitnessFunctions = [];
|
|
111
30
|
for (const o of evidenceObservations) {
|
|
112
|
-
// The union NARROW — `qualityCheck === "lint"` is the `EvidenceObservation` union's TYPE TAG,
|
|
113
|
-
// not a posting decision. Which axis a credit rides is read here; where it LANDS is the rule's,
|
|
114
|
-
// on both branches.
|
|
115
|
-
if (o.qualityCheck === "lint") {
|
|
116
|
-
const posting = postingOf(o, scenarioIds);
|
|
117
|
-
// THE SPLIT ON THIS AXIS TOO (@SCN-LNT-026), the twin of the runtime arm's below. Both
|
|
118
|
-
// reasons post to suspense because neither names a row, and they stay in separate streams
|
|
119
|
-
// because they are different facts with different remedies: a check nobody named RAN and
|
|
120
|
-
// wants an obligation written for it; a broken one never ran and wants its harness fixed.
|
|
121
|
-
//
|
|
122
|
-
// THE SECOND CLAUSE IS THE NARROW, NOT A SECOND DECISION. `postingOf` reaches `broken` on
|
|
123
|
-
// this axis only through `isStaticCheckObservation`, so asking the same predicate here
|
|
124
|
-
// cannot disagree with it — it re-states what the rule already settled in the one form the
|
|
125
|
-
// compiler accepts. Nothing falls between the two arms: an observation that somehow took
|
|
126
|
-
// neither still lands in the second, misfiled rather than vaporised.
|
|
127
|
-
if (posting.kind === "suspense-scenario") {
|
|
128
|
-
if (posting.posted === "broken" && isStaticCheckObservation(o))
|
|
129
|
-
brokenEvidence.push(o);
|
|
130
|
-
else
|
|
131
|
-
noEvidenceObligationGuards.push(o);
|
|
132
|
-
}
|
|
133
|
-
// A CITING run files into the citation index like any other credit (@SCN-LNT-001) —
|
|
134
|
-
// exactly one row, real or invented. There is no third destination left (3F-2590).
|
|
135
|
-
else
|
|
136
|
-
citations.file(posting, o);
|
|
137
|
-
continue;
|
|
138
|
-
}
|
|
139
31
|
const posting = postingOf(o, scenarioIds);
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
case "suspense-scenario":
|
|
149
|
-
// THE SPLIT (@SCN-LDG-017) — `broken` and `cites-nothing` both land on suspense because
|
|
150
|
-
// neither names a scenario, but they are different facts with different remedies (fix the
|
|
151
|
-
// harness vs add the @SCN), so their streams stay apart. The rule already told them apart.
|
|
152
|
-
if (posting.posted === "broken")
|
|
153
|
-
brokenEvidence.push(o);
|
|
154
|
-
else
|
|
155
|
-
uncited.push(o);
|
|
156
|
-
break;
|
|
157
|
-
}
|
|
32
|
+
if (posting.kind !== "suspense-scenario")
|
|
33
|
+
citations.file(posting, o);
|
|
34
|
+
else if (posting.posted === "broken")
|
|
35
|
+
brokenEvidence.push(o);
|
|
36
|
+
else if (isFitnessObservation(o))
|
|
37
|
+
uncitedFitnessFunctions.push(o);
|
|
38
|
+
else
|
|
39
|
+
uncited.push(o);
|
|
158
40
|
}
|
|
159
|
-
return { citations, brokenEvidence, uncited,
|
|
41
|
+
return { citations, brokenEvidence, uncited, uncitedFitnessFunctions };
|
|
160
42
|
}
|
|
161
|
-
/**
|
|
162
|
-
* ONE REAL SCENARIO'S ROW — the debit side reconciled against the observed evidence, the credit
|
|
163
|
-
* side's no-evidence-obligation items beside it, and the row assembled from both.
|
|
164
|
-
*
|
|
165
|
-
* ITS OWN FUNCTION, extracted at @SCN-LNT-027 (3F-3472) when the fourth population took `reconcile`
|
|
166
|
-
* past the `max-lines-per-function` ceiling — `routeCredits`' own precedent, and the same seam.
|
|
167
|
-
* Routing is one idea with a name, what each population RECONCILES to is another, and `reconcile`
|
|
168
|
-
* is the ORDER they are filed in. Nothing any of them decides moved.
|
|
169
|
-
*/
|
|
170
43
|
function scenarioRow(d, evidenceObservations, citations, evidenceObligationPairs) {
|
|
171
|
-
// THE PENDING PARTITION (@SCN-PND-004) — `pendingItemsOf` and `evidenceObligationsOf`
|
|
172
|
-
// are exact complements over the scenario's obligations, so nothing is dropped and nothing is
|
|
173
|
-
// counted twice. Rule + rationale: `domain/journal`.
|
|
174
44
|
const pendingItems = pendingItemsOf(d);
|
|
175
|
-
|
|
176
|
-
const
|
|
177
|
-
// The CREDIT side — NO-EVIDENCE-OBLIGATION (@SCN-LDG-008): a credit citing THIS real scenario at a
|
|
178
|
-
// quality-check it never named. Rule + rationale: `domain/qualityCheckReconciliation`.
|
|
179
|
-
const noEvidenceObligationItems = noEvidenceObligationReconciliationsOf(d.scnId, citations.creditsFor(d.scnId), evidenceObligationPairs);
|
|
180
|
-
// The row's SUB-ROWS, degenerating to one `both-missing` item when the row reconciled to
|
|
181
|
-
// nothing either way (@SCN-LDG-009). Rule + rationale: `domain/scenarioReconciliation`.
|
|
45
|
+
const reconciledEvidenceObligations = evidenceObligationsOf(d.evidenceObligations).map((obligation) => reconcileEvidenceObligation(d.scnId, obligation, evidenceObservations));
|
|
46
|
+
const noEvidenceObligationItems = noEvidenceObligationReconciliationsOf(d.scnId, citations.observationsFor(d.scnId), evidenceObligationPairs);
|
|
182
47
|
const qualityCheckReconciliations = qualityCheckReconciliationsOf(reconciledEvidenceObligations, noEvidenceObligationItems, pendingItems);
|
|
183
48
|
return {
|
|
184
49
|
scnId: d.scnId,
|
|
185
50
|
kind: "scenario",
|
|
186
51
|
verdict: verdictFor(qualityCheckReconciliations),
|
|
187
|
-
|
|
188
|
-
// reconciles to above. The citation index holds every citing credit, so this includes one citing a
|
|
189
|
-
// PENDING quality-check, which reconciles `no-evidence-obligation` (3F-1858 — it used to reconcile to
|
|
190
|
-
// NO ROW AT ALL, the false-green this posting made visible without fixing). It posts and is
|
|
191
|
-
// findable WHATEVER it reconciles to; posting is not classifying, and a misclassification
|
|
192
|
-
// must misfile an entry, never vaporise it. A fitness check's run is in here too and by the
|
|
193
|
-
// SAME route (3F-2590): it cites this scenario, so the citation index holds it like any other.
|
|
194
|
-
evidenceObservations: citations.creditsFor(d.scnId),
|
|
195
|
-
// THE POSTED DEBITS (@SCN-LDG-023) — every obligation THIS scenario RAISES, in document
|
|
196
|
-
// order, keyed by quality-check. The debit half of the same posting: where a credit is
|
|
197
|
-
// routed by its citation, a debit needs no routing at all — the account IS the scenario.
|
|
198
|
-
// Includes a PENDING obligation, which partitioned off above and earns NO reconciled row: it
|
|
199
|
-
// posts ANYWAY. Posting is not classifying, on this side too.
|
|
52
|
+
evidenceObservations: citations.observationsFor(d.scnId),
|
|
200
53
|
evidenceObligations: [...d.evidenceObligations],
|
|
201
54
|
qualityCheckReconciliations,
|
|
202
55
|
reconcilingItems: reconcilingItemsOf(qualityCheckReconciliations),
|
|
203
56
|
pendingItems,
|
|
204
57
|
};
|
|
205
58
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
59
|
+
function accountsByCode(scenarios) {
|
|
60
|
+
const byCode = new Map();
|
|
61
|
+
for (const scenario of scenarios) {
|
|
62
|
+
const sharers = byCode.get(scenario.scnId) ?? [];
|
|
63
|
+
sharers.push(scenario);
|
|
64
|
+
byCode.set(scenario.scnId, sharers);
|
|
65
|
+
}
|
|
66
|
+
return [...byCode.values()];
|
|
67
|
+
}
|
|
68
|
+
function duplicateScnCodeRow(sharers, citations) {
|
|
69
|
+
const scnId = sharers[0].scnId;
|
|
70
|
+
const evidenceObligations = sharers.flatMap((s) => s.evidenceObligations);
|
|
71
|
+
const items = duplicateScnCodeReconciliationsOf(evidenceObligations);
|
|
72
|
+
return {
|
|
73
|
+
scnId,
|
|
74
|
+
kind: "scenario",
|
|
75
|
+
verdict: verdictFor(items),
|
|
76
|
+
evidenceObservations: citations.observationsFor(scnId),
|
|
77
|
+
evidenceObligations,
|
|
78
|
+
qualityCheckReconciliations: items,
|
|
79
|
+
reconcilingItems: reconcilingItemsOf(items),
|
|
80
|
+
pendingItems: [],
|
|
81
|
+
};
|
|
82
|
+
}
|
|
210
83
|
function phantomScenarioRows(citations) {
|
|
211
84
|
const rows = [];
|
|
212
|
-
// CREDIT-SIDE — PHANTOM scenarios (@SCN-LDG-006). One phantom Scenario Reconciliation per
|
|
213
|
-
// UNKNOWN cited id, in first-seen order, its Quality Check Reconciliation(s) carrying the
|
|
214
|
-
// outcome `cites-unknown-scenario` (and the evidence observation's locator, ruling Q5), verdict
|
|
215
|
-
// ALWAYS out-of-balance. Grouped AFTER the scenario rows.
|
|
216
|
-
//
|
|
217
|
-
// `phantomIds` was ROUTED ABOVE (3F-2202) — this block only ASSEMBLES the rows. The scan that
|
|
218
|
-
// stood here re-stated the citation index's four routing decisions verbatim, including the
|
|
219
|
-
// fail-safe arms (a BROKEN credit mints no phantom row; an uncited credit is suspense, never
|
|
220
|
-
// phantom); both now come from the one `postingOf` call.
|
|
221
85
|
for (const scnId of citations.phantomIds) {
|
|
222
|
-
const
|
|
223
|
-
|
|
224
|
-
const items = citesUnknownScenarioReconciliationsOf(credits);
|
|
86
|
+
const observations = citations.observationsFor(scnId);
|
|
87
|
+
const items = citesUnknownScenarioReconciliationsOf(observations);
|
|
225
88
|
rows.push({
|
|
226
89
|
scnId,
|
|
227
90
|
kind: "phantom-scenario",
|
|
228
|
-
// ASKED, not restated (3F-2204, the close-gate read). Canon says a phantom row is ALWAYS
|
|
229
|
-
// out-of-balance, and it is — BY CONSTRUCTION, because a phantom row exists only where a
|
|
230
|
-
// credit minted it, so it always carries ≥1 `cites-unknown-scenario` item. Deriving the
|
|
231
|
-
// verdict from the items keeps that a consequence of the rule rather than a constant asserted
|
|
232
|
-
// beside it: a hardcoded verdict would go on reading `out-of-balance` even if the row ever
|
|
233
|
-
// came to carry none, which is precisely the drift the verdict/items lock-step exists to stop.
|
|
234
91
|
verdict: verdictFor(items),
|
|
235
|
-
|
|
236
|
-
// "real or INVENTED scenario", so a phantom account holds its postings like any other.
|
|
237
|
-
evidenceObservations: [...credits],
|
|
238
|
-
// A phantom account is MINTED BY A CREDIT — no scenario raises it, so nothing can have
|
|
239
|
-
// been named of it. Its debit side is empty by construction (@SCN-LDG-023); the asymmetry
|
|
240
|
-
// with the credit side is real, not an omission.
|
|
92
|
+
evidenceObservations: [...observations],
|
|
241
93
|
evidenceObligations: [],
|
|
242
94
|
qualityCheckReconciliations: items,
|
|
243
95
|
reconcilingItems: items,
|
|
@@ -246,33 +98,15 @@ function phantomScenarioRows(citations) {
|
|
|
246
98
|
}
|
|
247
99
|
return rows;
|
|
248
100
|
}
|
|
249
|
-
|
|
250
|
-
* THE SUSPENSE ROW, assembled (@SCN-LDG-007) — nil rows or one. Extracted beside its siblings at
|
|
251
|
-
* 3F-3472; what lands on it is `routeCredits`' decision, and unchanged.
|
|
252
|
-
*/
|
|
253
|
-
function suspenseScenarioRows(brokenEvidence, uncited, noEvidenceObligationGuards) {
|
|
101
|
+
function suspenseScenarioRows(brokenEvidence, uncited, uncitedFitnessFunctions) {
|
|
254
102
|
const rows = [];
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
//
|
|
258
|
-
// Its three streams were ROUTED by the posting rule (3F-2202); their OUTCOMES and their ORDER
|
|
259
|
-
// are the item concept's (3F-2204, `suspenseReconciliationsOf` — rule + rationale there). What
|
|
260
|
-
// is decided HERE is only whether the row exists at all: suspense is minted by a credit landing
|
|
261
|
-
// on it, so no credit means no row.
|
|
262
|
-
if (brokenEvidence.length > 0 || uncited.length > 0 || noEvidenceObligationGuards.length > 0) {
|
|
263
|
-
const items = suspenseReconciliationsOf(brokenEvidence, uncited, noEvidenceObligationGuards);
|
|
103
|
+
if (brokenEvidence.length > 0 || uncited.length > 0 || uncitedFitnessFunctions.length > 0) {
|
|
104
|
+
const items = suspenseReconciliationsOf(brokenEvidence, uncited, uncitedFitnessFunctions);
|
|
264
105
|
rows.push({
|
|
265
|
-
scnId:
|
|
106
|
+
scnId: CORE_MESSAGES[CoreMessage.SuspenseScenarioId],
|
|
266
107
|
kind: "suspense-scenario",
|
|
267
|
-
// ASKED, not restated — same reason as the phantom row. The `if` above is what makes this
|
|
268
|
-
// out-of-balance by construction: the row exists only when a credit landed on it.
|
|
269
108
|
verdict: verdictFor(items),
|
|
270
|
-
|
|
271
|
-
// named no test, so it cites nothing whatever scnId it structurally carries), and the
|
|
272
|
-
// no-evidence-obligation static checks. With the citation index this exhausts the credit stream.
|
|
273
|
-
evidenceObservations: [...brokenEvidence, ...uncited, ...noEvidenceObligationGuards],
|
|
274
|
-
// Suspense is MINTED BY A CREDIT too — it raises nothing, so it names nothing
|
|
275
|
-
// (@SCN-LDG-023). It can therefore carry no Pending Item either.
|
|
109
|
+
evidenceObservations: [...brokenEvidence, ...uncited, ...uncitedFitnessFunctions],
|
|
276
110
|
evidenceObligations: [],
|
|
277
111
|
qualityCheckReconciliations: items,
|
|
278
112
|
reconcilingItems: items,
|
|
@@ -281,32 +115,15 @@ function suspenseScenarioRows(brokenEvidence, uncited, noEvidenceObligationGuard
|
|
|
281
115
|
}
|
|
282
116
|
return rows;
|
|
283
117
|
}
|
|
284
|
-
/**
|
|
285
|
-
* THE UNCODED-WORK ROWS, assembled (@SCN-LDG-021). Extracted beside its siblings at 3F-3472.
|
|
286
|
-
*/
|
|
287
118
|
function untaggedScenarioRows(untaggedScenarios) {
|
|
288
119
|
const rows = [];
|
|
289
|
-
// UNCODED WORK (@SCN-LDG-021) — a scenario carrying no @SCN. It is REAL and ORDINARY
|
|
290
|
-
// (`kind: "scenario"`, never phantom or suspense: it exists, and cucumber runs it); what is
|
|
291
|
-
// absent is the CODE its obligation needs in order to link to an observation. It gets its own
|
|
292
|
-
// out-of-balance row so the verdict can see it at all.
|
|
293
|
-
//
|
|
294
|
-
// The item's outcome, its scenario-scope shape and the synthesised `{}` obligation it carries
|
|
295
|
-
// are the item concept's (3F-2204, `noScnCodeReconciliations` — rule + rationale there).
|
|
296
120
|
for (const name of untaggedScenarios) {
|
|
297
121
|
const items = noScnCodeReconciliations();
|
|
298
122
|
rows.push({
|
|
299
|
-
// The scenario's NAME is its only handle — it has no code. (Precedent: the suspense row's
|
|
300
|
-
// "(no scenario)" sentinel; `featureCodeOf` falls back to the raw id when it cannot parse.)
|
|
301
123
|
scnId: name,
|
|
302
124
|
kind: "scenario",
|
|
303
|
-
// ASKED, not restated — `noScnCodeReconciliations` always returns the one `no-scn-code`
|
|
304
|
-
// item, so the verdict follows from it rather than being asserted alongside it.
|
|
305
125
|
verdict: verdictFor(items),
|
|
306
|
-
// An untagged scenario carries no @SCN, so no credit can cite it — nothing can post here.
|
|
307
126
|
evidenceObservations: [],
|
|
308
|
-
// It reaches the ledger by NAME, carrying no parsed obligations — so it posts no debits
|
|
309
|
-
// either (@SCN-LDG-023).
|
|
310
127
|
evidenceObligations: [],
|
|
311
128
|
qualityCheckReconciliations: items,
|
|
312
129
|
reconcilingItems: items,
|
|
@@ -315,184 +132,53 @@ function untaggedScenarioRows(untaggedScenarios) {
|
|
|
315
132
|
}
|
|
316
133
|
return rows;
|
|
317
134
|
}
|
|
318
|
-
|
|
319
|
-
* THE ROWS A CONFIGURED ROW WITH NO SCENARIO EARNS, assembled (@SCN-LNT-027, 3F-3472).
|
|
320
|
-
*/
|
|
321
|
-
function unspecifiedFitnessRowRows(unspecifiedFitnessRows) {
|
|
322
|
-
const rows = [];
|
|
323
|
-
// A CONFIGURED ROW THE CORPUS CARRIES NO SCENARIO FOR (@SCN-LNT-027, 3F-3472) — a check the
|
|
324
|
-
// target's manifest declares and nothing in its corpus specifies. The obligations travel with
|
|
325
|
-
// the scenarios, so such a row raised NOTHING: it was not `missing`, not phantom, not suspense,
|
|
326
|
-
// and a tree carrying one reconciled balanced at exit 0 over a check declared and never written.
|
|
327
|
-
// `features/fitness-checks.feature` promises the opposite in terms — "a row whose scenario the
|
|
328
|
-
// corpus does not carry as an Evidence Obligation nothing observed" — and this is that promise.
|
|
329
|
-
//
|
|
330
|
-
// THE PRECEDENT IS UNCODED WORK, three lines up: a fact the ordinary obligation path cannot raise
|
|
331
|
-
// reaches the ledger by a reading of its own and gets its own out-of-balance row so the verdict
|
|
332
|
-
// can see it at all. There the CORPUS supplies a row the obligations cannot; here the MANIFEST
|
|
333
|
-
// does.
|
|
334
|
-
//
|
|
335
|
-
// THE ROW IS NOT IN `scenarioIds`, WHICH IS WHAT MAKES IT UNDISCHARGEABLE. That set was built
|
|
336
|
-
// from `scenarios` alone and is not widened here, so a credit citing this row's code still mints
|
|
337
|
-
// a PHANTOM row (@SCN-LDG-006, @SCN-LNT-009) and a broken credit still lands on SUSPENSE — and
|
|
338
|
-
// there is no route left by which any credit settles this debit. Synthesising a `Scenario` for
|
|
339
|
-
// the row instead would have put it INTO that set, so a run whose CI step cited a declared-but-
|
|
340
|
-
// unwritten check would reconcile BALANCED: a new false green, in the case the phantom row
|
|
341
|
-
// already covers.
|
|
342
|
-
for (const row of unspecifiedFitnessRows) {
|
|
343
|
-
const items = unspecifiedRowReconciliations(row.characteristic);
|
|
344
|
-
rows.push({
|
|
345
|
-
scnId: row.scnId,
|
|
346
|
-
kind: "scenario",
|
|
347
|
-
// ASKED, not restated — the phantom and suspense rows' rule. `unspecifiedRowReconciliations`
|
|
348
|
-
// always returns the one `missing` item, so the verdict follows from it.
|
|
349
|
-
verdict: verdictFor(items),
|
|
350
|
-
// No scenario carries this code, so the citation router posts no credit here — see above.
|
|
351
|
-
evidenceObservations: [],
|
|
352
|
-
// THE DEBIT IS REAL AND IS POSTED (@SCN-LDG-023). Unlike the untagged row above, which
|
|
353
|
-
// reaches the ledger by name and names no check, this row names exactly one characteristic:
|
|
354
|
-
// that is the obligation, and the manifest is what raised it.
|
|
355
|
-
evidenceObligations: [...items.map((item) => item.evidenceObligation)],
|
|
356
|
-
qualityCheckReconciliations: items,
|
|
357
|
-
reconcilingItems: items,
|
|
358
|
-
pendingItems: [],
|
|
359
|
-
});
|
|
360
|
-
}
|
|
361
|
-
return rows;
|
|
362
|
-
}
|
|
363
|
-
export function reconcile(scenarios, evidenceObservations, untaggedScenarios = [],
|
|
364
|
-
/**
|
|
365
|
-
* The CONFIGURED ROWS the target's corpus carries no scenario for (@SCN-LNT-027, 3F-3472) — the
|
|
366
|
-
* fourth population, minted below.
|
|
367
|
-
*
|
|
368
|
-
* IT DEFAULTS, WHERE THE TWO GATES BELOW DELIBERATELY DO NOT (3F-2875). A gate that defaults is a
|
|
369
|
-
* gate a caller can forget and thereby CHANGE what the summary claims. This is a population, and
|
|
370
|
-
* an omitted population is indistinguishable from an empty one in the only way that matters:
|
|
371
|
-
* both mint no rows, and neither says anything about a manifest. Every caller that constructs
|
|
372
|
-
* `Scenario[]` by hand has no manifest to read rows from, which is `untaggedScenarios`' own
|
|
373
|
-
* argument for the default it already carries.
|
|
374
|
-
*/
|
|
375
|
-
unspecifiedFitnessRows = []) {
|
|
376
|
-
// THE OBLIGATION SIDE, prepared once — the three sets the posting rule and the outcome rules read.
|
|
377
|
-
// Each is already the MODEL's own rule (never re-derived here), and each is built ONCE and
|
|
378
|
-
// shared, so no two consumers can drift: `scenarioIds` is which scenarios exist,
|
|
379
|
-
// and `evidenceObligationPairs` is what they name at each quality-check (3F-1858).
|
|
135
|
+
export function reconcile(scenarios, evidenceObservations, untaggedScenarios = []) {
|
|
380
136
|
const scenarioIds = new Set(scenarios.map((d) => d.scnId));
|
|
381
|
-
// The NAMED pairs — the model's rule, built ONCE and shared with the census (3F-1858).
|
|
382
|
-
// Pending obligations are excluded: a pending obligation names nothing.
|
|
383
137
|
const evidenceObligationPairs = evidenceObligationPairsOf(scenarios);
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
const { citations, brokenEvidence, uncited, noEvidenceObligationGuards } = routeCredits(evidenceObservations, scenarioIds);
|
|
387
|
-
// THE ORDER THE POPULATIONS ARE FILED IN IS THE LEDGER'S GROUPING, and it is the whole of what
|
|
388
|
-
// this function decides now: the real scenario rows, then the phantom rows a credit invented,
|
|
389
|
-
// then the one suspense row, then uncoded work, then the configured rows no scenario specifies.
|
|
138
|
+
const observations = inEvidenceOrder(evidenceObservations);
|
|
139
|
+
const { citations, brokenEvidence, uncited, uncitedFitnessFunctions } = routeObservations(observations, scenarioIds);
|
|
390
140
|
return {
|
|
391
141
|
scenarioReconciliations: [
|
|
392
|
-
...scenarios.map((
|
|
142
|
+
...accountsByCode(scenarios).map((sharers) => sharers.length === 1
|
|
143
|
+
? scenarioRow(sharers[0], observations, citations, evidenceObligationPairs)
|
|
144
|
+
: duplicateScnCodeRow(sharers, citations)),
|
|
393
145
|
...phantomScenarioRows(citations),
|
|
394
|
-
...suspenseScenarioRows(brokenEvidence, uncited,
|
|
146
|
+
...suspenseScenarioRows(brokenEvidence, uncited, uncitedFitnessFunctions),
|
|
395
147
|
...untaggedScenarioRows(untaggedScenarios),
|
|
396
|
-
...unspecifiedFitnessRowRows(unspecifiedFitnessRows),
|
|
397
148
|
],
|
|
398
149
|
};
|
|
399
150
|
}
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
* assembled in DOCUMENT ORDER (…, testVolume?, staticChecks?, lint) so the JSON stays
|
|
408
|
-
* byte-identical.
|
|
409
|
-
*/
|
|
410
|
-
export function summaryOf(ledger, withRuntimeObservations, withStaticChecks) {
|
|
151
|
+
export function tiersWithoutRunnerOf(runnerTiers) {
|
|
152
|
+
return RUNTIME_QUALITY_CHECKS.filter((tier) => typeof runnerTiers[tier] !== "string").map((tier) => ({
|
|
153
|
+
tier,
|
|
154
|
+
namesNone: Object.hasOwn(runnerTiers, tier),
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
export function summaryOf(ledger, withRuntimeObservations, withFitnessFunctions) {
|
|
411
158
|
const tally = ledgerTally(ledger);
|
|
412
|
-
// The runtime evidence-observation totals are a FOLD OVER THE LEDGER (@SCN-RMD-003, 3F-2102) —
|
|
413
|
-
// the Ledger counts its own posted credits; the parallel census is RETIRED. `testVolume` and the
|
|
414
|
-
// re-homed `rawByRuntimeQualityCheck` derive from THIS fold. The `withRuntimeObservations` flag is
|
|
415
|
-
// now only the GATE (is the runtime-observation axis in play?) — the caller no longer threads a
|
|
416
|
-
// census object at all (the assembler folds the Ledger it already has).
|
|
417
159
|
const observations = runtimeObservationTally(ledger);
|
|
418
|
-
|
|
419
|
-
// posted static-check credits; the parallel static census is RETIRED. `staticChecks` derives from
|
|
420
|
-
// THIS fold. The `withStaticChecks` flag is now only the GATE (is the static-check axis in play?) —
|
|
421
|
-
// the caller no longer threads a census object at all (the assembler folds the Ledger it holds).
|
|
422
|
-
const staticChecks = staticObservationTally(ledger);
|
|
160
|
+
const fitnessFunctions = fitnessFunctionTally(ledger);
|
|
423
161
|
return {
|
|
424
162
|
scenarioReconciliations: tally.scenarioReconciliations,
|
|
425
163
|
evidenceObligations: tally.evidenceObligations,
|
|
426
164
|
pending: tally.pending,
|
|
427
|
-
// The runtime test-volume kind-counts (RMD-005), materialised only when the evidenceObservations
|
|
428
|
-
// read is threaded. The surface reads the fold's per-scenario-kind counts DIRECTLY (an identity
|
|
429
|
-
// — the fold already groups by the scenario-kind the credit posted to). `onScenario` is every
|
|
430
|
-
// credit posted to a scenario's account, which INCLUDES no-evidence-obligation as a subset
|
|
431
|
-
// (matched-pair + no-evidence-obligation) — a DIFFERENT number from the reconciliation-matched-attributed
|
|
432
|
-
// (the retired section's `attributed[]` sum, which excluded no-evidence-obligation). Keeping no-evidence-obligation
|
|
433
|
-
// inside this count preserves the 3-termed identity `totalEvidenceObservations = onScenario +
|
|
434
|
-
// onPhantomScenario + onSuspenseScenario` (no-evidence-obligation is a subset here, NOT a 4th identity term)
|
|
435
|
-
// — the same shape the markdown's `### Test volume` line derives. `onPhantomScenario` /
|
|
436
|
-
// `onSuspenseScenario` are the credits posted to the phantom / suspense accounts (suspense
|
|
437
|
-
// includes `broken`).
|
|
438
165
|
...(withRuntimeObservations
|
|
439
166
|
? {
|
|
440
167
|
testVolume: {
|
|
441
|
-
// ASKED, not re-derived (3F-2231) — the Ledger's fold computes this total and now
|
|
442
|
-
// returns it. The assembler summed the same record again for it, which is an adapter
|
|
443
|
-
// owning a model number by copied arithmetic.
|
|
444
168
|
totalEvidenceObservations: observations.total,
|
|
445
169
|
onScenario: observations.onScenario,
|
|
446
170
|
onPhantomScenario: observations.onPhantomScenario,
|
|
447
171
|
onSuspenseScenario: observations.onSuspenseScenario,
|
|
448
172
|
},
|
|
449
|
-
// The re-homed raw per-quality-check headline (@SCN-RMD-003) — a materialised Ledger
|
|
450
|
-
// fold, sibling of `testVolume` and present on the SAME gate.
|
|
451
173
|
rawByRuntimeQualityCheck: observations.rawByRuntimeQualityCheck,
|
|
452
174
|
}
|
|
453
175
|
: {}),
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
// runtime `testVolume` fold. The surface keeps the census shape exactly
|
|
457
|
-
// (`{ runningStaticCheckCount, uncitedStaticCheckCount }`; named is implicit). The member detail
|
|
458
|
-
// lives in the rows (named → each scenario's `@lint` sub-row; no-evidence-obligation → the suspense
|
|
459
|
-
// row) — there is no census section (2.4).
|
|
460
|
-
...(withStaticChecks ? { staticChecks } : {}),
|
|
461
|
-
// The static-only lint tally (RMD-005), a LEDGER-PURE derive from `ledgerTally` — LAST key in
|
|
462
|
-
// document order (after the census pass-throughs).
|
|
463
|
-
lint: tally.lint,
|
|
176
|
+
...(withFitnessFunctions ? { fitnessFunctions } : {}),
|
|
177
|
+
fitness: tally.fitness,
|
|
464
178
|
};
|
|
465
179
|
}
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
* Journal inputs in, whole concept out: the fold posts every entry into the Ledger, and the tally
|
|
470
|
-
* totals it. They are ONE act, not two stages a caller sequences — which is the point. While
|
|
471
|
-
* `reconcile()` and `buildSummary()` were separate, an adapter held a Ledger and derived its own
|
|
472
|
-
* totals, so "the procedure can sum the wrong rows" (`why-ddd-for-spec-controller.md`) was a
|
|
473
|
-
* REACHABLE state. Here there is no such seam: you cannot obtain a summary except from the concept
|
|
474
|
-
* that owns the rows it counts.
|
|
475
|
-
*
|
|
476
|
-
* The two flags are GATES, not data — they state whether the runtime-observation and static-check
|
|
477
|
-
* axes are in play for this run; the counts themselves are always folded from the Ledger.
|
|
478
|
-
*
|
|
479
|
-
* WHY THE TRAILING THREE ARE REQUIRED AND CARRY NO DEFAULTS (3F-2875). A gate that defaults to
|
|
480
|
-
* `false` is a gate a caller can forget to state, and forgetting it CHANGES THE REPORT — the
|
|
481
|
-
* summary then claims neither axis is in play, silently and plausibly. That is not a hypothetical:
|
|
482
|
-
* when the defaults were removed, eleven call sites turned out to have been leaning on them. Every
|
|
483
|
-
* one wanted exactly what it had been getting, so nothing moved; what changed is that each now says
|
|
484
|
-
* so. A default is the wrong shape for an argument whose omission is indistinguishable from a
|
|
485
|
-
* deliberate `false`.
|
|
486
|
-
*/
|
|
487
|
-
export function evidenceReconciliationOf(scenarios, evidenceObservations, untaggedScenarios, withRuntimeObservations, withStaticChecks,
|
|
488
|
-
/**
|
|
489
|
-
* The CONFIGURED ROWS the corpus carries no scenario for (@SCN-LNT-027, 3F-3472) — passed
|
|
490
|
-
* through to `reconcile`, which mints one row apiece. It defaults for the reason given there, and
|
|
491
|
-
* that reason is NOT the trailing three's: a population omitted mints nothing and claims nothing,
|
|
492
|
-
* where a gate omitted silently changes what the summary says is in play.
|
|
493
|
-
*/
|
|
494
|
-
unspecifiedFitnessRows = []) {
|
|
495
|
-
const ledger = reconcile(scenarios, evidenceObservations, untaggedScenarios, unspecifiedFitnessRows);
|
|
496
|
-
return { summary: summaryOf(ledger, withRuntimeObservations, withStaticChecks), ledger };
|
|
180
|
+
export function evidenceReconciliationOf(scenarios, evidenceObservations, untaggedScenarios, withRuntimeObservations, withFitnessFunctions) {
|
|
181
|
+
const ledger = reconcile(scenarios, evidenceObservations, untaggedScenarios);
|
|
182
|
+
return { summary: summaryOf(ledger, withRuntimeObservations, withFitnessFunctions), ledger };
|
|
497
183
|
}
|
|
498
184
|
//# sourceMappingURL=evidenceReconciliation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidenceReconciliation.js","sourceRoot":"","sources":["../../src/domain/evidenceReconciliation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"evidenceReconciliation.js","sourceRoot":"","sources":["../../src/domain/evidenceReconciliation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"featureCode.d.ts","sourceRoot":"","sources":["../../src/domain/featureCode.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG1D;AAID,eAAO,MAAM,aAAa,2BAAoC,CAAC;AAM/D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD"}
|