@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,441 +1,71 @@
|
|
|
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 type { RuntimeQualityCheck, Scenario, EvidenceObservation, Ledger } from "../model.js";
|
|
51
|
-
import type { UnspecifiedFitnessRow } from "./fitnessChecks.js";
|
|
52
|
-
import type { ScenarioReconciliationTotals, EvidenceObligationTotals, LintTally } from "./ledger.js";
|
|
53
|
-
export declare function reconcile(scenarios: Scenario[], evidenceObservations: EvidenceObservation[], untaggedScenarios?: readonly string[],
|
|
54
|
-
/**
|
|
55
|
-
* The CONFIGURED ROWS the target's corpus carries no scenario for (@SCN-LNT-027, 3F-3472) — the
|
|
56
|
-
* fourth population, minted below.
|
|
57
|
-
*
|
|
58
|
-
* IT DEFAULTS, WHERE THE TWO GATES BELOW DELIBERATELY DO NOT (3F-2875). A gate that defaults is a
|
|
59
|
-
* gate a caller can forget and thereby CHANGE what the summary claims. This is a population, and
|
|
60
|
-
* an omitted population is indistinguishable from an empty one in the only way that matters:
|
|
61
|
-
* both mint no rows, and neither says anything about a manifest. Every caller that constructs
|
|
62
|
-
* `Scenario[]` by hand has no manifest to read rows from, which is `untaggedScenarios`' own
|
|
63
|
-
* argument for the default it already carries.
|
|
64
|
-
*/
|
|
65
|
-
unspecifiedFitnessRows?: readonly UnspecifiedFitnessRow[]): Ledger;
|
|
66
|
-
/**
|
|
67
|
-
* The materialised test-volume totals (RMD-005) — the runtime evidence-observation kind-counts
|
|
68
|
-
* the markdown's `### Test volume` identity line derives, carried AS DATA. The identity
|
|
69
|
-
* `totalEvidenceObservations = onScenario + onPhantomScenario + onSuspenseScenario` holds by
|
|
70
|
-
* construction (one shared `runtimeObservationTally` fold), so a JSON consumer reads the balance
|
|
71
|
-
* rather than re-deriving it. The three terms are named for the SCENARIO-KIND the credit posted
|
|
72
|
-
* to (the canon grouping): `onScenario` (a scenario's account), `onPhantomScenario` (an
|
|
73
|
-
* invented phantom-scenario account) and `onSuspenseScenario` (the suspense scenario — includes
|
|
74
|
-
* `broken`). This is an identity read off the fold, not a re-map of the outcome handles.
|
|
75
|
-
*/
|
|
1
|
+
import type { RuntimeQualityCheck, Scenario, EvidenceObservation } from "./journal.js";
|
|
2
|
+
import type { Ledger } from "./ledger.js";
|
|
3
|
+
import type { ScenarioReconciliationTotals, EvidenceObligationTotals, FitnessTally } from "./ledger.js";
|
|
4
|
+
import type { ScenarioCodeError, ScenarioCodePopulation } from "./scenarioCodeError.js";
|
|
5
|
+
export declare function reconcile(scenarios: Scenario[], evidenceObservations: EvidenceObservation[], untaggedScenarios?: readonly string[]): Ledger;
|
|
76
6
|
export interface TestVolumeTotals {
|
|
77
7
|
totalEvidenceObservations: number;
|
|
78
8
|
onScenario: number;
|
|
79
9
|
onPhantomScenario: number;
|
|
80
10
|
onSuspenseScenario: number;
|
|
81
11
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
* `runningStaticCheckCount` (the volume of running static checks) and `uncitedStaticCheckCount` (how many
|
|
86
|
-
* of THOSE no `@lint` cites — a subset of the first, @SCN-LNT-033). The named count is IMPLICIT
|
|
87
|
-
* (`running − uncited`) and is not carried (every named static check is already a reconciled
|
|
88
|
-
* `@lint` sub-row); drawn from one population under one membership rule, it cannot go below nil.
|
|
89
|
-
*/
|
|
90
|
-
export interface StaticCheckTotals {
|
|
91
|
-
runningStaticCheckCount: number;
|
|
92
|
-
uncitedStaticCheckCount: number;
|
|
12
|
+
export interface FitnessFunctionTotals {
|
|
13
|
+
runningFitnessFunctionCount: number;
|
|
14
|
+
uncitedFitnessFunctionCount: number;
|
|
93
15
|
}
|
|
94
|
-
/**
|
|
95
|
-
* ONE STEP THAT IS THE RECONCILER (@SCN-USG-014) — the step, as the report names one, and which
|
|
96
|
-
* half of the reconciler it is.
|
|
97
|
-
*
|
|
98
|
-
* TWO ROLES RATHER THAN A BARE LIST, because the two are different facts about a pipeline and a
|
|
99
|
-
* consumer reading the report is owed both: one step RUNS the reconciliation these books are, and
|
|
100
|
-
* one WRITES the step record that run reads. Collapsing them would say only that two steps were
|
|
101
|
-
* set aside, which is the shape of a claim nobody can check.
|
|
102
|
-
*
|
|
103
|
-
* BESIDE `BehaviouralRunner` FOR THE REASON THAT ONE IS HERE: it is carried on the summary and the
|
|
104
|
-
* renderer reads it off there. Neither is a tally — the question a reader has is which step was
|
|
105
|
-
* accounted for as what, and a count answers none of it.
|
|
106
|
-
*/
|
|
107
16
|
export interface ReconcilerStep {
|
|
108
|
-
/** The step, named as every section of the report names one (`parse/stepNames`). */
|
|
109
17
|
readonly step: string;
|
|
110
|
-
/** Which half of the reconciler it is — the run itself, or the record that run reads. */
|
|
111
18
|
readonly role: "reconciles" | "records";
|
|
112
19
|
}
|
|
113
|
-
/**
|
|
114
|
-
* ONE STEP RECOGNISED AS THE RUNNER OF ONE TIER (@SCN-USG-011) — the tier the target named it
|
|
115
|
-
* for, the runner it named, and the step GitHub itself displays it as.
|
|
116
|
-
*
|
|
117
|
-
* BESIDE `StaticCheckTotals` RATHER THAN IN THE PARSE THAT PRODUCES IT, for the reason that one
|
|
118
|
-
* is here: it is carried on the summary, and the renderer reads it off there. It is not a tally —
|
|
119
|
-
* a recognition names a step, and a count of them would answer none of the questions a reader has
|
|
120
|
-
* about which step was recognised as what.
|
|
121
|
-
*/
|
|
122
20
|
export interface BehaviouralRunner {
|
|
123
|
-
/** The tier key the target named this runner under — `unit`, `integration`, `e2e`, `performance`. */
|
|
124
21
|
readonly tier: string;
|
|
125
|
-
/** The runner's name, as the target wrote it. */
|
|
126
22
|
readonly runner: string;
|
|
127
|
-
/** The step's identity — its `name:`, else the action it `uses:`, else the first line of its `run:`. */
|
|
128
23
|
readonly step: string;
|
|
129
24
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
* `steps` says what was in front of the tool and nothing about what it did with them; `candidates`
|
|
136
|
-
* is the figure already on the report, re-cut. It is the PAIR, per job, that lets a consumer see a
|
|
137
|
-
* whole job pass through discovery contributing nothing and ask why.
|
|
138
|
-
*
|
|
139
|
-
* BESIDE `ReconcilerStep` AND `BehaviouralRunner` FOR THE REASON THOSE ARE HERE: it is carried on
|
|
140
|
-
* the summary and the renderer reads it off there. It is not a tally of the ledger — no row exists
|
|
141
|
-
* for a job, and the question a reader has is which files and which jobs the numbers came from.
|
|
142
|
-
*
|
|
143
|
-
* THE SOURCE IS OPTIONAL BECAUSE THE CORE HOLDS NO FILESYSTEM. Workflow names arrive as data from
|
|
144
|
-
* the CLI edge (`parse/stepNames`), so a run given none for a source can name no file for its jobs
|
|
145
|
-
* — and dropping those jobs would be the silence this axis exists to end, so the row survives
|
|
146
|
-
* without the half of its name nobody supplied.
|
|
147
|
-
*/
|
|
25
|
+
export interface WrongKindEntry {
|
|
26
|
+
readonly entry: string;
|
|
27
|
+
readonly is: string;
|
|
28
|
+
readonly reads: string;
|
|
29
|
+
}
|
|
148
30
|
export interface JobDiscoveryScope {
|
|
149
|
-
/** The workflow file the job was read from, absent where the run was given no name for it. */
|
|
150
31
|
readonly source?: string;
|
|
151
|
-
/** The key the job is written under in that workflow's `jobs:` mapping. */
|
|
152
32
|
readonly job: string;
|
|
153
|
-
/** How many steps this run read from it. */
|
|
154
33
|
readonly steps: number;
|
|
155
|
-
/** How many of those steps are candidate fitness checks. */
|
|
156
34
|
readonly candidates: number;
|
|
157
35
|
}
|
|
158
|
-
/**
|
|
159
|
-
* WHAT BECAME OF EVERY STEP THIS RUN READ (@SCN-USG-018) — the population, the four dispositions,
|
|
160
|
-
* and the total those four come to.
|
|
161
|
-
*
|
|
162
|
-
* BOTH TOTALS, AND `accountedFor` IS THE ONE THAT HAS TO BE CARRIED. A consumer of this structure
|
|
163
|
-
* could add the four dispositions up for themselves, and a consumer that did would be measuring
|
|
164
|
-
* their own arithmetic: they would agree with any four figures a reader happened to produce,
|
|
165
|
-
* including four produced by a reader that had lost a step on the way. The sum is the READER's
|
|
166
|
-
* answer to "how many did you account for", stated beside "how many did you read" so the two can
|
|
167
|
-
* be compared rather than reconstructed. The identity `accountedFor === stepsRead` is the axis's
|
|
168
|
-
* first non-negotiable — nothing seen is dropped — made checkable.
|
|
169
|
-
*
|
|
170
|
-
* IT IS A CARDINALITY INSTRUMENT, WHICH IS WHY NO OTHER MEMBER HERE CAN STAND IN FOR IT. Every
|
|
171
|
-
* account beside it names steps that BECAME something — a runner, the reconciler, an exclusion, a
|
|
172
|
-
* row on the books. A step dropped on a branch nobody enumerated becomes nothing, names nothing
|
|
173
|
-
* and posts nothing, so there is no list it is missing from: only a count of the population
|
|
174
|
-
* against the dispositions can see it at all.
|
|
175
|
-
*
|
|
176
|
-
* BESIDE `JobDiscoveryScope` FOR THE REASON THAT ONE IS HERE: it is carried on the summary and the
|
|
177
|
-
* renderer reads it off there. It is not a fold of the ledger — three of its four dispositions
|
|
178
|
-
* post no row by definition, so there is nothing for it to be derived from.
|
|
179
|
-
*/
|
|
180
36
|
export interface StepAccounting {
|
|
181
|
-
/** How many steps of the target's pipeline this run read. */
|
|
182
37
|
readonly stepsRead: number;
|
|
183
|
-
/** How many of them are candidate fitness checks. */
|
|
184
38
|
readonly candidates: number;
|
|
185
|
-
/** How many of them run a runner the target named. */
|
|
186
39
|
readonly runners: number;
|
|
187
|
-
/** How many of them are the reconciliation or the step record it reads. */
|
|
188
40
|
readonly reconciler: number;
|
|
189
|
-
/** How many of them the target names non-checks. */
|
|
190
41
|
readonly excluded: number;
|
|
191
|
-
/** The four above, added up by the reader that counted them. */
|
|
192
42
|
readonly accountedFor: number;
|
|
193
43
|
}
|
|
194
|
-
/** The materialised summary — the totals (manifesto: "the aggregate of the trial balance"). */
|
|
195
44
|
export interface Summary {
|
|
196
45
|
scenarioReconciliations: ScenarioReconciliationTotals;
|
|
197
46
|
evidenceObligations: EvidenceObligationTotals;
|
|
198
|
-
/**
|
|
199
|
-
* The Pending Items tally (@SCN-PND-011) — the count of Pending Items across the
|
|
200
|
-
* reconciliation (one per deferred `<quality-check>pending` obligation, evidence-manifesto §11B),
|
|
201
|
-
* SEPARATE from the scenario balanced / out-of-balance counts and the evidence-obligation counts.
|
|
202
|
-
* A Pending Item is deferred, NOT out-of-balance, so it is NEVER folded into
|
|
203
|
-
* `OUT_OF_BALANCE_OUTCOMES` (never a leaf of its own, at any leaf count — the constraint is
|
|
204
|
-
* categorical, not arithmetic) nor into `evidenceObligations` — its own tally.
|
|
205
|
-
* Counts Pending ITEMS, not scenarios-carrying-pending (mirroring the out-of-balance
|
|
206
|
-
* decomposition, which counts obligations, not scenarios). Always present (a pure balance derive,
|
|
207
|
-
* like `lint`); reads 0 when no scenario raises a pending obligation.
|
|
208
|
-
*/
|
|
209
47
|
pending: number;
|
|
210
|
-
/** The runtime test-volume kind-counts (RMD-005) — present when the evidenceObservations read is threaded. */
|
|
211
48
|
testVolume?: TestVolumeTotals;
|
|
212
|
-
/**
|
|
213
|
-
* The re-homed raw per-quality-check evidence-observation totals (@SCN-RMD-003, 3F-2102) — a
|
|
214
|
-
* materialised headline the Ledger folds (`runtimeObservationTally`), testVolume-adjacent. It
|
|
215
|
-
* RE-HOMES onto `summary` the raw totals the retired `evidenceObservations` section used to
|
|
216
|
-
* carry: a legitimate aggregate headline (per the done-criterion's fold-vs-store test — three
|
|
217
|
-
* derived totals, not a parallel store of the posted credits). Present exactly when `testVolume`
|
|
218
|
-
* is (both gated on the observation read being threaded).
|
|
219
|
-
*/
|
|
220
49
|
rawByRuntimeQualityCheck?: Record<RuntimeQualityCheck, number>;
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
/** The static-only lint evidenceObligation tally (RMD-005) — always present (a pure balance derive). */
|
|
224
|
-
lint: LintTally;
|
|
225
|
-
/**
|
|
226
|
-
* The scenarios ON the fitness axis that no configured row NAMES (@SCN-LNT-020) — the corpus's
|
|
227
|
-
* half-converted checks, in corpus order.
|
|
228
|
-
*
|
|
229
|
-
* NOT A LEDGER FOLD, and it says so by being the one member here that is not. It is a fact about
|
|
230
|
-
* the CORPUS — what a scenario said about itself and what no row said back — which the Ledger
|
|
231
|
-
* cannot hold: such a scenario raises nothing, so nothing about it reaches a row except the
|
|
232
|
-
* degenerate `both-missing` item its emptiness earns, and that item's own gloss is about a
|
|
233
|
-
* scenario carrying no `@SCN`. It rides beside `staticChecks` for the reason that one does: the
|
|
234
|
-
* report's `### Static checks` section is where a half-entry the run saw and nothing owed is
|
|
235
|
-
* named, and this is that same class of half-entry on the other side of the books.
|
|
236
|
-
*
|
|
237
|
-
* PRESENT ONLY WHEN NON-EMPTY, so a target that has converted nothing — every target today —
|
|
238
|
-
* renders and serialises exactly as it did before.
|
|
239
|
-
*/
|
|
240
|
-
unconfiguredFitnessScenarios?: readonly string[];
|
|
241
|
-
/**
|
|
242
|
-
* THE STEPS RECOGNISED AS BEHAVIOURAL RUNNERS (@SCN-USG-011), in the order the pipeline runs
|
|
243
|
-
* them — what the target named, found where its pipeline invokes it.
|
|
244
|
-
*
|
|
245
|
-
* NOT A LEDGER FOLD, and it rides here for the reason `unconfiguredFitnessScenarios` does: it is
|
|
246
|
-
* a fact about what the reader SAW, not about anything the books hold. A runner raises no
|
|
247
|
-
* obligation and posts no credit — it is the disposition a step gets INSTEAD of reaching the
|
|
248
|
-
* ledger — so there is no row for it to be derived from and it has to be carried.
|
|
249
|
-
*
|
|
250
|
-
* PRESENT ONLY WHEN NON-EMPTY, so a target that has named no runners renders and serialises
|
|
251
|
-
* exactly as it did before.
|
|
252
|
-
*/
|
|
50
|
+
fitnessFunctions?: FitnessFunctionTotals;
|
|
51
|
+
fitness: FitnessTally;
|
|
253
52
|
behaviouralRunners?: readonly BehaviouralRunner[];
|
|
254
|
-
/**
|
|
255
|
-
* WHAT THE TARGET SAID ABOUT EACH TIER (@SCN-USG-016) — `specController.runners` as written: the
|
|
256
|
-
* runner's name where it named one, and `null` for a tier it says it has none. A tier the block
|
|
257
|
-
* OMITS is absent from this record, and that third state is the whole reason the field exists.
|
|
258
|
-
*
|
|
259
|
-
* NOT `behaviouralRunners`, which is the other half of the same subject and is easy to mistake
|
|
260
|
-
* for it. That one is what a run RECOGNISED — tier, runner and the step it was found at, a fact
|
|
261
|
-
* about the pipeline. This one is what the target SAID, a fact about the manifest, and the two
|
|
262
|
-
* disagree whenever a named runner runs at no step this reader could see.
|
|
263
|
-
*
|
|
264
|
-
* PRESENT ONLY WHEN NON-EMPTY, so a target that has named no runners renders and serialises
|
|
265
|
-
* byte-identically to before.
|
|
266
|
-
*/
|
|
267
53
|
runnerTiers?: Readonly<Record<string, string | null>>;
|
|
268
|
-
/**
|
|
269
|
-
* THE RUNNER BLOCK'S KEYS THAT ARE NOT ONE OF THE FOUR CANON TIERS (@SCN-USG-019) — what the
|
|
270
|
-
* target wrote that this tool does not recognise, in the order the manifest wrote it.
|
|
271
|
-
*
|
|
272
|
-
* IT CARRIES A NON-EVENT, WHICH IS WHY IT HAS TO BE CARRIED AT ALL. An unrecognised key
|
|
273
|
-
* recognises no step, excludes no step and posts no row, so nothing anywhere else in this
|
|
274
|
-
* structure differs between a manifest that wrote it and one that did not. Without this field
|
|
275
|
-
* the consumer's entry is simply gone — and a consumer who wrote something and believes it took
|
|
276
|
-
* effect is the same fault as a step dropped in silence, reached from the configuration side.
|
|
277
|
-
*
|
|
278
|
-
* NOT `runnerTiers`, which is the block's other half: that one is what the target said about a
|
|
279
|
-
* tier that EXISTS, and every entry in it can be run against a pipeline. Nothing in here can be.
|
|
280
|
-
*
|
|
281
|
-
* PRESENT ONLY WHEN NON-EMPTY, so a target whose block is keyed correctly — every target today —
|
|
282
|
-
* renders and serialises byte-identically to before.
|
|
283
|
-
*/
|
|
284
54
|
unrecognisedRunnerKeys?: readonly string[];
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
* manifest carries that this tool no longer reads, in the order the manifest wrote them.
|
|
288
|
-
*
|
|
289
|
-
* NOT unrecognisedRunnerKeys, which names a key the target INVENTED. This one names a key
|
|
290
|
-
* the target wrote CORRECTLY, under a name this reader once read and has since stopped
|
|
291
|
-
* reading — `checkRegistry` first. Its entries reach no candidate, resolve no citation, and
|
|
292
|
-
* are simply not there for anything downstream to find; naming the key is the only way a
|
|
293
|
-
* consumer who wrote it in good faith learns that none of it is taking effect.
|
|
294
|
-
*
|
|
295
|
-
* AND A BAR A CONFIGURED ROW STILL CARRIES (@SCN-LNT-035), named with its row —
|
|
296
|
-
* `fitnessChecks[SCN-XXX-NNN].atLeast` / `.atMost` — in the same account, in manifest order.
|
|
297
|
-
* The row itself still reaches the books, credited by its step's outcome; only the bar is unread.
|
|
298
|
-
*
|
|
299
|
-
* PRESENT ONLY WHEN NON-EMPTY, so a target that carries no retired key — every target today
|
|
300
|
-
* that has never written one — renders and serialises byte-identically to before.
|
|
301
|
-
*/
|
|
302
|
-
retiredKeys?: readonly string[];
|
|
303
|
-
/**
|
|
304
|
-
* THE STEPS THE TARGET NAMES NON-CHECKS (@SCN-USG-015) — `specController.notChecks`' entries
|
|
305
|
-
* that named a step of the pipeline this run read, each as the consumer wrote it.
|
|
306
|
-
*
|
|
307
|
-
* IT CARRIES A DISPOSITION, WHICH IS WHY IT IS CARRIED AT ALL. An excluded step reaches no
|
|
308
|
-
* observer and posts no row, so nothing else in this structure differs between a run that
|
|
309
|
-
* excluded it and a run that never saw it — and those are the two things a reader most needs
|
|
310
|
-
* told apart. A step that simply vanished on the consumer's own instruction is the silence this
|
|
311
|
-
* axis exists to end, arriving with their signature on it; naming it is what makes the exclusion
|
|
312
|
-
* a disposition rather than a drop, and correctable in one line of their own configuration.
|
|
313
|
-
*
|
|
314
|
-
* PRESENT ONLY WHEN NON-EMPTY, so a target that names no non-checks — every target today —
|
|
315
|
-
* renders and serialises byte-identically to before.
|
|
316
|
-
*/
|
|
55
|
+
wrongKindConfiguration?: readonly WrongKindEntry[];
|
|
56
|
+
unknownConfigurationKeys?: readonly string[];
|
|
317
57
|
excludedSteps?: readonly string[];
|
|
318
|
-
/**
|
|
319
|
-
* THE STEPS THAT ARE THE RECONCILER (@SCN-USG-014) — the step running this reconciliation and
|
|
320
|
-
* the step writing the record it reads, in the order the pipeline runs them.
|
|
321
|
-
*
|
|
322
|
-
* NOT `excludedSteps`, AND THE DIFFERENCE IS THE WHOLE REASON THIS IS A SEPARATE MEMBER. That
|
|
323
|
-
* one is a list the consumer wrote about their own pipeline; this one is nobody's list. A
|
|
324
|
-
* `notChecks` pair naming these two steps produces the same books, and a report folding them
|
|
325
|
-
* together would credit a consumer's configuration for an exclusion that holds over a manifest
|
|
326
|
-
* saying nothing — which is every consumer's first run.
|
|
327
|
-
*
|
|
328
|
-
* PRESENT ONLY WHEN NON-EMPTY, so a target whose pipeline does not run this tool renders and
|
|
329
|
-
* serialises byte-identically to before.
|
|
330
|
-
*/
|
|
331
58
|
reconcilerSteps?: readonly ReconcilerStep[];
|
|
332
|
-
/**
|
|
333
|
-
* THE `notChecks` ENTRIES THAT NAMED NO STEP (@SCN-USG-015) — in the order the manifest wrote
|
|
334
|
-
* them, and the other half of a total partition with `excludedSteps`.
|
|
335
|
-
*
|
|
336
|
-
* A LINE THAT MATCHES NOTHING IS A STALE EXCLUSION. The consumer renamed a step and the entry
|
|
337
|
-
* now hides nothing, or is about to hide the wrong thing the next time a step is renamed onto
|
|
338
|
-
* it. Either way it is a fact about their manifest that only this run can see, and dropping it
|
|
339
|
-
* is the same fault as dropping a step: something was written, it took no effect, and nothing
|
|
340
|
-
* anywhere says so.
|
|
341
|
-
*
|
|
342
|
-
* NOT `excludedSteps`, and the two are easy to mistake for one another. That one names a step
|
|
343
|
-
* this run READ; every entry in here named none, so nothing in the pipeline corresponds to it.
|
|
344
|
-
*
|
|
345
|
-
* PRESENT ONLY WHEN NON-EMPTY, for the reason its twin is.
|
|
346
|
-
*/
|
|
347
59
|
unmatchedNotChecks?: readonly string[];
|
|
348
|
-
/**
|
|
349
|
-
* THE SCOPE THIS RUN RANGED OVER (@SCN-USG-020) — one entry per job of every workflow `--ci`
|
|
350
|
-
* resolved, sorted by workflow and then by job.
|
|
351
|
-
*
|
|
352
|
-
* IT CARRIES THE PROVENANCE OF EVERY OTHER FIGURE ON THE REPORT, which is why it has to be
|
|
353
|
-
* carried at all. The census above states how many checks ran; nothing anywhere states how many
|
|
354
|
-
* jobs, in how many files, that number came from — so a consumer whose second job holds three
|
|
355
|
-
* checks reads exactly what a consumer with three checks in one job reads, and a consumer
|
|
356
|
-
* pointed at the wrong file has nothing that says so. The tool makes no judgement about whether
|
|
357
|
-
* a scope is the right one; stating it is the answer.
|
|
358
|
-
*
|
|
359
|
-
* NOT THE ACCOUNTING IDENTITY, which is a separate claim over the same steps (@SCN-USG-018).
|
|
360
|
-
* That one asserts the dispositions sum to the steps read, so nothing was dropped; this one
|
|
361
|
-
* asserts WHERE the steps came from. A reader satisfies either alone.
|
|
362
|
-
*
|
|
363
|
-
* PRESENT ONLY WHEN NON-EMPTY, so a run that read no CI configuration at all renders and
|
|
364
|
-
* serialises byte-identically to before.
|
|
365
|
-
*/
|
|
366
60
|
discoveryScope?: readonly JobDiscoveryScope[];
|
|
367
|
-
/**
|
|
368
|
-
* WHAT BECAME OF EVERY STEP THIS RUN READ (@SCN-USG-018) — the population, the four dispositions
|
|
369
|
-
* and the total they come to, so the axis's first non-negotiable is a figure a reader can check
|
|
370
|
-
* rather than a sentence they have to take on trust.
|
|
371
|
-
*
|
|
372
|
-
* IT IS THE ONLY MEMBER HERE THAT CAN SEE AN ABSENCE. `behaviouralRunners`, `reconcilerSteps`,
|
|
373
|
-
* `excludedSteps` and the static-check census each name what a step BECAME; a step dropped on a
|
|
374
|
-
* branch nobody enumerated became nothing, so it is missing from no list and every one of them
|
|
375
|
-
* reads exactly as it would have read had the step never existed. Counting the population
|
|
376
|
-
* against the dispositions is what makes the drop visible, and it is the whole reason this
|
|
377
|
-
* member is a set of counts rather than another list of steps.
|
|
378
|
-
*
|
|
379
|
-
* NOT `discoveryScope`, which counts the same population for a different question. That one
|
|
380
|
-
* asserts WHERE the steps came from — which files, which jobs; this one asserts that none of
|
|
381
|
-
* them went missing between being read and being accounted for. A reader satisfies either alone.
|
|
382
|
-
*
|
|
383
|
-
* PRESENT ONLY WHEN THE RUN READ A STEP, so a run handed no CI configuration renders and
|
|
384
|
-
* serialises byte-identically to before.
|
|
385
|
-
*/
|
|
386
61
|
stepAccounting?: StepAccounting;
|
|
387
62
|
}
|
|
388
|
-
/**
|
|
389
|
-
* THE EVIDENCE RECONCILIATION — canon's Layer 1. `summary` carries the totals, `ledger` the detail.
|
|
390
|
-
*
|
|
391
|
-
* NOT the report. The run's PROVENANCE (when, where, which SHA) and the presentation metadata
|
|
392
|
-
* (feature titles) are the report's framing and live on the render payload, not here: canon is
|
|
393
|
-
* explicit that rendering this concept into various formats PRODUCES the report, which "draws its
|
|
394
|
-
* substance from it". "Ledger" is a REJECTED ALIAS for this concept — the ledger is the grid
|
|
395
|
-
* WITHIN it, which is why both fields are named rather than the whole thing collapsing to one.
|
|
396
|
-
*/
|
|
397
63
|
export interface EvidenceReconciliation {
|
|
398
64
|
summary: Summary;
|
|
399
65
|
ledger: Ledger;
|
|
66
|
+
scenarioCodeErrors?: readonly ScenarioCodeError[];
|
|
67
|
+
scenarioCodePopulation?: ScenarioCodePopulation;
|
|
400
68
|
}
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
* table derives, carried AS DATA so a later render-from-saved-JSON rebuilds it with zero
|
|
404
|
-
* computation (the MATERIALISE ruling). THIN COMPOSITION (3F-2000): the LEDGER-PURE totals
|
|
405
|
-
* (`scenarioReconciliations`, `evidenceObligations`, `pending`, `lint`) come from `ledgerTally`
|
|
406
|
-
* — the Ledger owns its own totals ("the summary is its totals") — and are MERGED here with the
|
|
407
|
-
* census pass-throughs (`testVolume`, `staticChecks`), which are NOT Ledger-pure. The keys are
|
|
408
|
-
* assembled in DOCUMENT ORDER (…, testVolume?, staticChecks?, lint) so the JSON stays
|
|
409
|
-
* byte-identical.
|
|
410
|
-
*/
|
|
411
|
-
export declare function summaryOf(ledger: Ledger, withRuntimeObservations: boolean, withStaticChecks: boolean): Summary;
|
|
412
|
-
/**
|
|
413
|
-
* BUILD the Evidence Reconciliation from the journal — THE FACTORY (3F-2233).
|
|
414
|
-
*
|
|
415
|
-
* Journal inputs in, whole concept out: the fold posts every entry into the Ledger, and the tally
|
|
416
|
-
* totals it. They are ONE act, not two stages a caller sequences — which is the point. While
|
|
417
|
-
* `reconcile()` and `buildSummary()` were separate, an adapter held a Ledger and derived its own
|
|
418
|
-
* totals, so "the procedure can sum the wrong rows" (`why-ddd-for-spec-controller.md`) was a
|
|
419
|
-
* REACHABLE state. Here there is no such seam: you cannot obtain a summary except from the concept
|
|
420
|
-
* that owns the rows it counts.
|
|
421
|
-
*
|
|
422
|
-
* The two flags are GATES, not data — they state whether the runtime-observation and static-check
|
|
423
|
-
* axes are in play for this run; the counts themselves are always folded from the Ledger.
|
|
424
|
-
*
|
|
425
|
-
* WHY THE TRAILING THREE ARE REQUIRED AND CARRY NO DEFAULTS (3F-2875). A gate that defaults to
|
|
426
|
-
* `false` is a gate a caller can forget to state, and forgetting it CHANGES THE REPORT — the
|
|
427
|
-
* summary then claims neither axis is in play, silently and plausibly. That is not a hypothetical:
|
|
428
|
-
* when the defaults were removed, eleven call sites turned out to have been leaning on them. Every
|
|
429
|
-
* one wanted exactly what it had been getting, so nothing moved; what changed is that each now says
|
|
430
|
-
* so. A default is the wrong shape for an argument whose omission is indistinguishable from a
|
|
431
|
-
* deliberate `false`.
|
|
432
|
-
*/
|
|
433
|
-
export declare function evidenceReconciliationOf(scenarios: Scenario[], evidenceObservations: EvidenceObservation[], untaggedScenarios: readonly string[], withRuntimeObservations: boolean, withStaticChecks: boolean,
|
|
434
|
-
/**
|
|
435
|
-
* The CONFIGURED ROWS the corpus carries no scenario for (@SCN-LNT-027, 3F-3472) — passed
|
|
436
|
-
* through to `reconcile`, which mints one row apiece. It defaults for the reason given there, and
|
|
437
|
-
* that reason is NOT the trailing three's: a population omitted mints nothing and claims nothing,
|
|
438
|
-
* where a gate omitted silently changes what the summary says is in play.
|
|
439
|
-
*/
|
|
440
|
-
unspecifiedFitnessRows?: readonly UnspecifiedFitnessRow[]): EvidenceReconciliation;
|
|
69
|
+
export declare function summaryOf(ledger: Ledger, withRuntimeObservations: boolean, withFitnessFunctions: boolean): Summary;
|
|
70
|
+
export declare function evidenceReconciliationOf(scenarios: Scenario[], evidenceObservations: EvidenceObservation[], untaggedScenarios: readonly string[], withRuntimeObservations: boolean, withFitnessFunctions: boolean): EvidenceReconciliation;
|
|
441
71
|
//# sourceMappingURL=evidenceReconciliation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidenceReconciliation.d.ts","sourceRoot":"","sources":["../../src/domain/evidenceReconciliation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"evidenceReconciliation.d.ts","sourceRoot":"","sources":["../../src/domain/evidenceReconciliation.ts"],"names":[],"mappings":"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"}
|