@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,48 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
* THE SCOPE THIS RUN RANGED OVER (@SCN-USG-020) — the workflow files `--ci` resolved, the jobs
|
|
3
|
-
* within them, how many steps each held and how many of those became candidate fitness checks.
|
|
4
|
-
*
|
|
5
|
-
* THE SECTION IS THE TOOL'S ANSWER TO BEING POINTED AT THE WRONG THING. It makes no judgement
|
|
6
|
-
* about whether a scope is a plausible one — a rule for "this looks like a release workflow" is
|
|
7
|
-
* exactly the judgement this axis puts out of scope, and it is a list of ours. What it does
|
|
8
|
-
* instead is say what it read, so a consumer sees a workflow they did not mean or a job they
|
|
9
|
-
* forgot they had, and corrects it by narrowing `--ci` or by naming the steps that are not checks.
|
|
10
|
-
*
|
|
11
|
-
* AND IT IS WHERE THE QUIET JOB BECOMES VISIBLE. Every other cut of this report is about steps
|
|
12
|
-
* that became something; this one is about the pipeline the steps came out of, so a job whose
|
|
13
|
-
* every step was taken out — and a job the consumer forgot the tool could not see — reads here
|
|
14
|
-
* and nowhere else.
|
|
15
|
-
*
|
|
16
|
-
* A TABLE RATHER THAN A LINE PER JOB, because four facts per row is what a reader compares down a
|
|
17
|
-
* column: two jobs of one file, or the two figures of one job, are read against each other rather
|
|
18
|
-
* than one sentence at a time. `behaviouralRunners.ts` takes the same shape for the same reason.
|
|
19
|
-
*
|
|
20
|
-
* Its own module rather than a further section in `markdown.ts`, which sits at a `max-lines`
|
|
21
|
-
* exception — and an exception excuses existing debt, never headroom. The precedent is
|
|
22
|
-
* `runVerdict.ts` and, along this axis, `behaviouralRunners.ts`, `excludedSteps.ts` and
|
|
23
|
-
* `reconcilerSteps.ts`.
|
|
24
|
-
*/
|
|
25
|
-
/**
|
|
26
|
-
* The scope, or nothing at all.
|
|
27
|
-
*
|
|
28
|
-
* OMITTED WHERE THE RUN READ NO CI CONFIGURATION, which is the only way the census can be empty:
|
|
29
|
-
* the section appears wherever there is a pipeline to account for, and a run handed none renders
|
|
30
|
-
* byte-identically to before.
|
|
31
|
-
*
|
|
32
|
-
* A SOURCE THIS RUN WAS GIVEN NO NAME FOR STILL GETS ITS ROW, with an empty cell where the file
|
|
33
|
-
* would be. The core holds no filesystem and the names arrive as data from the CLI edge
|
|
34
|
-
* (`parse/stepNames`), so an unnamed source is one nobody could name rather than one nothing read
|
|
35
|
-
* — and dropping its jobs would be a job the reader ranged over vanishing from the account of what
|
|
36
|
-
* it ranged over, which is the silence this axis exists to end.
|
|
37
|
-
*/
|
|
1
|
+
import { CORE_MESSAGES, CoreMessage } from "../domain/messages.js";
|
|
38
2
|
export const discoveryScopeSection = (report) => {
|
|
39
3
|
const scope = report.summary.discoveryScope ?? [];
|
|
40
4
|
if (scope.length === 0)
|
|
41
5
|
return [];
|
|
42
6
|
return [
|
|
43
|
-
|
|
7
|
+
CORE_MESSAGES[CoreMessage.DiscoveryScopeHeading],
|
|
44
8
|
"",
|
|
45
|
-
|
|
9
|
+
CORE_MESSAGES[CoreMessage.DiscoveryScopeTableHeader],
|
|
46
10
|
"| --- | --- | --- | --- |",
|
|
47
11
|
...scope.map(({ source, job, steps, candidates }) => `| ${source ?? "—"} | ${job} | ${steps} | ${candidates} |`),
|
|
48
12
|
"",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discoveryScope.js","sourceRoot":"","sources":["../../src/render/discoveryScope.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"discoveryScope.js","sourceRoot":"","sources":["../../src/render/discoveryScope.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,MAAmB,EAAY,EAAE;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;IAClD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO;QACL,aAAa,CAAC,WAAW,CAAC,qBAAqB,CAAC;QAChD,EAAE;QACF,aAAa,CAAC,WAAW,CAAC,yBAAyB,CAAC;QACpD,2BAA2B;QAC3B,GAAG,KAAK,CAAC,GAAG,CACV,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CACrC,KAAK,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,KAAK,MAAM,UAAU,IAAI,CAC7D;QACD,EAAE;KACH,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,45 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* THE LEDGER'S EVIDENCE GRID — the corpus-driven evidence columns the Scenario Reconciliations table
|
|
3
|
-
* gains when the runtime-observation axis is in play, and the two-sided cell under each.
|
|
4
|
-
*
|
|
5
|
-
* Its own module rather than a block in `markdown.ts`, moved out whole at 3F-3524 so the ledger
|
|
6
|
-
* section's split into functions under the complexity and function-length ceilings did not push
|
|
7
|
-
* the file past its `max-lines`; `staticChecks.ts` and `runVerdict.ts` are the precedent. NOTHING
|
|
8
|
-
* about the grid changed in the move: same columns, same headers, same cells.
|
|
9
|
-
*/
|
|
10
1
|
import type { ScenarioReconciliation, RuntimeQualityCheck } from "../model.js";
|
|
11
|
-
/**
|
|
12
|
-
* One corpus-driven evidence column in the ledger: the lint (static) column,
|
|
13
|
-
* or a runtime quality-check column. The column SET is corpus-driven — only the quality-checks
|
|
14
|
-
* the run raises or observes appear, so e2e / performance show up only when present.
|
|
15
|
-
*/
|
|
16
2
|
export type EvidenceColumn = {
|
|
17
|
-
kind: "
|
|
3
|
+
kind: "fitness";
|
|
18
4
|
} | {
|
|
19
5
|
kind: "runtime";
|
|
20
6
|
qualityCheck: RuntimeQualityCheck;
|
|
21
7
|
};
|
|
22
|
-
/**
|
|
23
|
-
* The corpus-driven evidence columns: lint first (when any scenario names a static check), then
|
|
24
|
-
* each runtime quality-check present as an EVIDENCE OBLIGATION or as a posted EVIDENCE OBSERVATION
|
|
25
|
-
* on a scenario row, in canonical quality-check order.
|
|
26
|
-
*/
|
|
27
8
|
export declare function evidenceColumns(scenarios: readonly ScenarioReconciliation[]): EvidenceColumn[];
|
|
28
|
-
/** The column's header — the tag word, title-cased (Lint / Unit / Integration / …). */
|
|
29
9
|
export declare function columnHeader(col: EvidenceColumn): string;
|
|
30
|
-
/**
|
|
31
|
-
* One evidence cell — the two-sided `<obligation>/<observation>` encoding. The LEFT side is the
|
|
32
|
-
* EVIDENCE OBLIGATION (a single quality-check letter iff the scenario obligated this check, else `-`); the RIGHT
|
|
33
|
-
* side is the OBSERVATION count (the multiplicity of posted credits at this check, else `-`). It
|
|
34
|
-
* projects the two-sided ledger row — it reconstructs nothing. It counts BACKING (presence), NOT
|
|
35
|
-
* quality: a failing runtime evidenceObligation still shows its credit count (the failing-ness lives
|
|
36
|
-
* in the Verdict + Reconciling-items columns), so `U/-` is unambiguously named-but-missing (zero
|
|
37
|
-
* evidenceObservations). A `-/N` cell is a NO-EVIDENCE-OBLIGATION observation (a credit at a check the scenario
|
|
38
|
-
* did not name, @SCN-LDG-008); a doubly-empty `-/-` renders BLANK (`""`) — no evidence obligation, no credit.
|
|
39
|
-
* The lint cell reads the scenario's static evidenceObligation outcomes (lint is not a counted
|
|
40
|
-
* evidence observation): its right side is the count of static checks PRESENT — `balanced` or the
|
|
41
|
-
* watermelon (the script exists; its inadequacy is quality, in Reconciling-items 🍉), NOT a posted
|
|
42
|
-
* credit. The count exposes backing, not quality — never rank by it.
|
|
43
|
-
*/
|
|
44
10
|
export declare function evidenceCell(s: ScenarioReconciliation, col: EvidenceColumn): string;
|
|
45
11
|
//# sourceMappingURL=evidenceGrid.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidenceGrid.d.ts","sourceRoot":"","sources":["../../src/render/evidenceGrid.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"evidenceGrid.d.ts","sourceRoot":"","sources":["../../src/render/evidenceGrid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAgB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAS7F,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,YAAY,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAiB1G,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,sBAAsB,EAAE,GAC3C,cAAc,EAAE,CAYlB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CAGxD;AAUD,wBAAgB,YAAY,CAC1B,CAAC,EAAE,sBAAsB,EACzB,GAAG,EAAE,cAAc,GAClB,MAAM,CAGR"}
|
|
@@ -1,143 +1,61 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* THE LEDGER'S EVIDENCE GRID — the corpus-driven evidence columns the Scenario Reconciliations table
|
|
3
|
-
* gains when the runtime-observation axis is in play, and the two-sided cell under each.
|
|
4
|
-
*
|
|
5
|
-
* Its own module rather than a block in `markdown.ts`, moved out whole at 3F-3524 so the ledger
|
|
6
|
-
* section's split into functions under the complexity and function-length ceilings did not push
|
|
7
|
-
* the file past its `max-lines`; `staticChecks.ts` and `runVerdict.ts` are the precedent. NOTHING
|
|
8
|
-
* about the grid changed in the move: same columns, same headers, same cells.
|
|
9
|
-
*/
|
|
10
1
|
import { RUNTIME_QUALITY_CHECKS } from "../domain/ledger.js";
|
|
11
|
-
import { isScenario,
|
|
2
|
+
import { isScenario, fitnessFunctionReconciliationsOf, presentFitnessFunctionCountOf, } from "../domain/scenarioReconciliation.js";
|
|
12
3
|
import { evidenceObligationsOf } from "../domain/journal.js";
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
* each runtime quality-check present as an EVIDENCE OBLIGATION or as a posted EVIDENCE OBSERVATION
|
|
16
|
-
* on a scenario row, in canonical quality-check order.
|
|
17
|
-
*/
|
|
18
|
-
export function evidenceColumns(scenarios) {
|
|
19
|
-
// Only scenario rows carry evidence obligations that drive columns — a phantom / suspense
|
|
20
|
-
// row's credit-side items are not evidence obligations, so they never add a column.
|
|
21
|
-
const scenarioRows = scenarios.filter(isScenario);
|
|
22
|
-
// ASKED (3F-2203) — whether a row has static-check sub-rows is the same model cut the grid cell
|
|
23
|
-
// and the lint table read. Whether a COLUMN then appears is the renderer's own business; what a
|
|
24
|
-
// row's lint sub-rows ARE is not.
|
|
25
|
-
const hasStatic = scenarioRows.some((s) => staticCheckReconciliationsOf(s).length > 0);
|
|
26
|
-
const qualityChecksPresent = new Set();
|
|
27
|
-
// A column appears for every runtime quality-check present in EVIDENCE OBLIGATION or OBSERVATION on a scenario
|
|
28
|
-
// row. Both are read off the Ledger: a named or no-evidence-obligation quality-check surfaces as a
|
|
29
|
-
// `QualityCheckReconciliation` at that check; every observed credit surfaces as a posted credit on
|
|
30
|
-
// the row (@SCN-LDG-022). The retired census's `attributed[]` re-represented those posted credits
|
|
31
|
-
// — it added no quality-check the rows do not already carry (a matched/no-evidence-obligation credit always
|
|
32
|
-
// has its `QualityCheckReconciliation`), so folding the rows keeps the column set byte-identical.
|
|
4
|
+
function runtimeQualityChecksPresent(scenarioRows) {
|
|
5
|
+
const present = new Set();
|
|
33
6
|
for (const s of scenarioRows) {
|
|
34
7
|
for (const o of s.qualityCheckReconciliations) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
qualityChecksPresent.add(o.qualityCheck);
|
|
8
|
+
if (o.qualityCheck && o.qualityCheck !== "fitness")
|
|
9
|
+
present.add(o.qualityCheck);
|
|
38
10
|
}
|
|
39
11
|
for (const o of s.evidenceObservations) {
|
|
40
|
-
if (o.qualityCheck !== "
|
|
41
|
-
|
|
12
|
+
if (o.qualityCheck !== "fitness")
|
|
13
|
+
present.add(o.qualityCheck);
|
|
42
14
|
}
|
|
43
15
|
}
|
|
16
|
+
return present;
|
|
17
|
+
}
|
|
18
|
+
export function evidenceColumns(scenarios) {
|
|
19
|
+
const scenarioRows = scenarios.filter(isScenario);
|
|
20
|
+
const hasFitnessFunction = scenarioRows.some((s) => fitnessFunctionReconciliationsOf(s).length > 0);
|
|
21
|
+
const qualityChecksPresent = runtimeQualityChecksPresent(scenarioRows);
|
|
44
22
|
const columns = [];
|
|
45
|
-
if (
|
|
46
|
-
columns.push({ kind: "
|
|
23
|
+
if (hasFitnessFunction)
|
|
24
|
+
columns.push({ kind: "fitness" });
|
|
47
25
|
for (const qualityCheck of RUNTIME_QUALITY_CHECKS) {
|
|
48
26
|
if (qualityChecksPresent.has(qualityCheck))
|
|
49
27
|
columns.push({ kind: "runtime", qualityCheck });
|
|
50
28
|
}
|
|
51
29
|
return columns;
|
|
52
30
|
}
|
|
53
|
-
/** The column's header — the tag word, title-cased (Lint / Unit / Integration / …). */
|
|
54
31
|
export function columnHeader(col) {
|
|
55
|
-
const word = col.kind === "
|
|
32
|
+
const word = col.kind === "fitness" ? "fitness" : col.qualityCheck;
|
|
56
33
|
return word.charAt(0).toUpperCase() + word.slice(1);
|
|
57
34
|
}
|
|
58
|
-
/**
|
|
59
|
-
* The quality-check → single-letter obligation glyph, parallel to `columnHeader` — the LEFT side
|
|
60
|
-
* of the two-sided cell (the evidence obligation). A single letter names WHICH check is obligated; the right
|
|
61
|
-
* side (after the `/`) carries the OBSERVATION count (the credit). Lint's left MAY carry a count
|
|
62
|
-
* suffix (`L2`/`L3`) when a scenario names more than one static check — the evidence-obligation
|
|
63
|
-
* count; the runtime letters stay countless (one obligation per tier).
|
|
64
|
-
*/
|
|
65
35
|
const QUALITY_CHECK_LETTER = {
|
|
66
|
-
|
|
36
|
+
fitness: "F",
|
|
67
37
|
unit: "U",
|
|
68
38
|
integration: "I",
|
|
69
39
|
e2e: "E",
|
|
70
40
|
performance: "P",
|
|
71
41
|
};
|
|
72
|
-
/**
|
|
73
|
-
* One evidence cell — the two-sided `<obligation>/<observation>` encoding. The LEFT side is the
|
|
74
|
-
* EVIDENCE OBLIGATION (a single quality-check letter iff the scenario obligated this check, else `-`); the RIGHT
|
|
75
|
-
* side is the OBSERVATION count (the multiplicity of posted credits at this check, else `-`). It
|
|
76
|
-
* projects the two-sided ledger row — it reconstructs nothing. It counts BACKING (presence), NOT
|
|
77
|
-
* quality: a failing runtime evidenceObligation still shows its credit count (the failing-ness lives
|
|
78
|
-
* in the Verdict + Reconciling-items columns), so `U/-` is unambiguously named-but-missing (zero
|
|
79
|
-
* evidenceObservations). A `-/N` cell is a NO-EVIDENCE-OBLIGATION observation (a credit at a check the scenario
|
|
80
|
-
* did not name, @SCN-LDG-008); a doubly-empty `-/-` renders BLANK (`""`) — no evidence obligation, no credit.
|
|
81
|
-
* The lint cell reads the scenario's static evidenceObligation outcomes (lint is not a counted
|
|
82
|
-
* evidence observation): its right side is the count of static checks PRESENT — `balanced` or the
|
|
83
|
-
* watermelon (the script exists; its inadequacy is quality, in Reconciling-items 🍉), NOT a posted
|
|
84
|
-
* credit. The count exposes backing, not quality — never rank by it.
|
|
85
|
-
*/
|
|
86
42
|
export function evidenceCell(s, col) {
|
|
87
|
-
// A PHANTOM / suspense row has no evidence obligation of its own — its
|
|
88
|
-
// whole story is the credit-side reconciling item. Every evidence cell is neither-named-nor-
|
|
89
|
-
// matched, so it reads `—`; the citation shows in Reconciling items.
|
|
90
43
|
if (!isScenario(s))
|
|
91
44
|
return "—";
|
|
92
|
-
return col.kind === "
|
|
45
|
+
return col.kind === "fitness" ? fitnessCell(s) : runtimeCell(s, col.qualityCheck);
|
|
93
46
|
}
|
|
94
|
-
/**
|
|
95
|
-
* The two sides joined — except a doubly-empty cell (no evidence obligation, no credit), which
|
|
96
|
-
* renders BLANK: the column is simply absent for this scenario.
|
|
97
|
-
*/
|
|
98
47
|
function twoSided(left, right) {
|
|
99
48
|
return left === "-" && right === "-" ? "" : `${left}/${right}`;
|
|
100
49
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
// (`L`; `L2`/`L3` when the row names >1 static check — the evidence-obligation count, one
|
|
105
|
-
// lint QCR per `@lint=<guard>` obligation). RIGHT: the PRESENT-guard count — the
|
|
106
|
-
// static checks `satisfied` or watermelon. Lint's right stays this static-outcome derivation
|
|
107
|
-
// (NOT `evidenceObservations`): lint carries no credit multiplicity, so the count is exact.
|
|
108
|
-
// BOTH SIDES ASKED (3F-2203) — the named-guard sub-rows and the present-guard count are
|
|
109
|
-
// model facts, read off the row. "Present" spans satisfied AND watermelon (a watermelon guard
|
|
110
|
-
// EXISTS; its inadequacy is quality, shown in Reconciling items 🍉) — an outcome-vocabulary
|
|
111
|
-
// rule, which is why the renderer no longer states it.
|
|
112
|
-
const statics = staticCheckReconciliationsOf(s);
|
|
113
|
-
const left = statics.length > 0
|
|
114
|
-
? QUALITY_CHECK_LETTER.lint + (statics.length > 1 ? String(statics.length) : "")
|
|
115
|
-
: "-";
|
|
116
|
-
const present = presentStaticCheckCountOf(s);
|
|
50
|
+
function fitnessCell(s) {
|
|
51
|
+
const left = fitnessFunctionReconciliationsOf(s).length > 0 ? QUALITY_CHECK_LETTER.fitness : "-";
|
|
52
|
+
const present = presentFitnessFunctionCountOf(s);
|
|
117
53
|
const right = present > 0 ? String(present) : "-";
|
|
118
54
|
return twoSided(left, right);
|
|
119
55
|
}
|
|
120
|
-
/** A runtime quality-check column's cell on a scenario row. */
|
|
121
56
|
function runtimeCell(s, qualityCheck) {
|
|
122
|
-
// LEFT — EVIDENCE OBLIGATION is ASKED of the Ledger, not reconstructed. `s.evidenceObligations` is the debit
|
|
123
|
-
// side the scenario RAISED (@SCN-LDG-023) — the fact itself — filtered to the ACTIVE ones: a
|
|
124
|
-
// `<qc>pending` obligation names NOTHING (it partitions off to a one-sided Pending Item), so it
|
|
125
|
-
// is not an evidence obligation. Named → the check's letter; else `-`.
|
|
126
|
-
// ASKED, not re-encoded (3F-2203). "A pending obligation names nothing" is the model's rule
|
|
127
|
-
// (canon, Pending Item — a `<qc>pending` tag raises NO Evidence Obligation), and it is the SAME
|
|
128
|
-
// rule `evidenceObligationPairsOf` applies. The renderer stated the
|
|
129
|
-
// `!pending` clause itself before: a third home for one rule, agreeing by copy.
|
|
130
57
|
const named = evidenceObligationsOf(s.evidenceObligations).some((o) => o.qualityCheck === qualityCheck);
|
|
131
58
|
const left = named ? QUALITY_CHECK_LETTER[qualityCheck] : "-";
|
|
132
|
-
// RIGHT — the OBSERVATION count is the MULTIPLICITY of POSTED CREDITS at this quality-check on THIS
|
|
133
|
-
// row (@SCN-LDG-022) — read straight off the Ledger's `evidenceObservations`, NEVER from
|
|
134
|
-
// `qualityCheckReconciliations` (which collapse to ONE matched row however many credits cite the
|
|
135
|
-
// pair, and would undercount duplicate citations). BOTH the named and no-evidence-obligation arms read this
|
|
136
|
-
// one source: a named check's credits are matched-attributed, a no-evidence-obligation check's credits post
|
|
137
|
-
// as no-evidence-obligation rows — the same posted credits either way, so `evidenceObservations` is the single
|
|
138
|
-
// multiplicity-correct count. (Provably equal to the retired split off `qualityCheckReconciliations`
|
|
139
|
-
// for the no-evidence-obligation arm — the reconciler posts one no-evidence-obligation QCR per citing credit — but that
|
|
140
|
-
// derivation collapses duplicate citations, so the credits are the correct source.)
|
|
141
59
|
const observed = s.evidenceObservations.filter((o) => o.qualityCheck === qualityCheck).length;
|
|
142
60
|
const right = observed > 0 ? String(observed) : "-";
|
|
143
61
|
return twoSided(left, right);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidenceGrid.js","sourceRoot":"","sources":["../../src/render/evidenceGrid.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"evidenceGrid.js","sourceRoot":"","sources":["../../src/render/evidenceGrid.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,29 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* THE STEPS THE TARGET NAMED NON-CHECKS (@SCN-USG-015), and the entries of its list that named no
|
|
3
|
-
* step at all.
|
|
4
|
-
*
|
|
5
|
-
* THIS SECTION IS WHY THE EXCLUSION IS ALLOWED TO EXIST. A step that reaches the reader leaves it
|
|
6
|
-
* as an observation, as a behavioural runner, as the reconciler, or as a step the consumer named a
|
|
7
|
-
* non-check — and none of those four is silent. An exclusion that simply removed a step would be
|
|
8
|
-
* the very silence this axis exists to end, arriving in a new coat and with the consumer's own
|
|
9
|
-
* signature on it, so the price of being able to say "not a check" is being told what it took out.
|
|
10
|
-
*
|
|
11
|
-
* TWO SENTENCES, BECAUSE THE TWO HALVES ARE OPPOSITE FACTS. An entry that named a step took one out
|
|
12
|
-
* of discovery, which is a thing that happened and a thing to check. An entry that named none took
|
|
13
|
-
* nothing out — a stale line, most often a step renamed since it was written — and reading it as
|
|
14
|
-
* the first would tell the consumer their pipeline is narrower than it is.
|
|
15
|
-
*
|
|
16
|
-
* Its own module rather than a further section in `markdown.ts`, which sits at a `max-lines`
|
|
17
|
-
* exception — and an exception excuses existing debt, never headroom. The precedent is
|
|
18
|
-
* `runVerdict.ts` and, one sub-issue along, `behaviouralRunners.ts`.
|
|
19
|
-
*/
|
|
20
1
|
import type { RenderInput } from "../assemble/renderInput.js";
|
|
21
|
-
/**
|
|
22
|
-
* The excluded steps and the stale entries, or nothing at all.
|
|
23
|
-
*
|
|
24
|
-
* OMITTED WHEN THE TARGET HAS NAMED NO NON-CHECKS, which is every target that carries no such
|
|
25
|
-
* list: the section appears only when there is something the consumer said, and every other
|
|
26
|
-
* report is byte-identical to what it was.
|
|
27
|
-
*/
|
|
28
2
|
export declare const excludedStepsSection: (report: RenderInput) => string[];
|
|
29
3
|
//# sourceMappingURL=excludedSteps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"excludedSteps.d.ts","sourceRoot":"","sources":["../../src/render/excludedSteps.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"excludedSteps.d.ts","sourceRoot":"","sources":["../../src/render/excludedSteps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,eAAO,MAAM,oBAAoB,GAAI,QAAQ,WAAW,KAAG,MAAM,EAWhE,CAAC"}
|
|
@@ -1,42 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
* THE STEPS THE TARGET NAMED NON-CHECKS (@SCN-USG-015), and the entries of its list that named no
|
|
3
|
-
* step at all.
|
|
4
|
-
*
|
|
5
|
-
* THIS SECTION IS WHY THE EXCLUSION IS ALLOWED TO EXIST. A step that reaches the reader leaves it
|
|
6
|
-
* as an observation, as a behavioural runner, as the reconciler, or as a step the consumer named a
|
|
7
|
-
* non-check — and none of those four is silent. An exclusion that simply removed a step would be
|
|
8
|
-
* the very silence this axis exists to end, arriving in a new coat and with the consumer's own
|
|
9
|
-
* signature on it, so the price of being able to say "not a check" is being told what it took out.
|
|
10
|
-
*
|
|
11
|
-
* TWO SENTENCES, BECAUSE THE TWO HALVES ARE OPPOSITE FACTS. An entry that named a step took one out
|
|
12
|
-
* of discovery, which is a thing that happened and a thing to check. An entry that named none took
|
|
13
|
-
* nothing out — a stale line, most often a step renamed since it was written — and reading it as
|
|
14
|
-
* the first would tell the consumer their pipeline is narrower than it is.
|
|
15
|
-
*
|
|
16
|
-
* Its own module rather than a further section in `markdown.ts`, which sits at a `max-lines`
|
|
17
|
-
* exception — and an exception excuses existing debt, never headroom. The precedent is
|
|
18
|
-
* `runVerdict.ts` and, one sub-issue along, `behaviouralRunners.ts`.
|
|
19
|
-
*/
|
|
20
|
-
/**
|
|
21
|
-
* The excluded steps and the stale entries, or nothing at all.
|
|
22
|
-
*
|
|
23
|
-
* OMITTED WHEN THE TARGET HAS NAMED NO NON-CHECKS, which is every target that carries no such
|
|
24
|
-
* list: the section appears only when there is something the consumer said, and every other
|
|
25
|
-
* report is byte-identical to what it was.
|
|
26
|
-
*/
|
|
1
|
+
import { CORE_MESSAGES, CoreMessage } from "../domain/messages.js";
|
|
27
2
|
export const excludedStepsSection = (report) => {
|
|
28
3
|
const excluded = report.summary.excludedSteps ?? [];
|
|
29
4
|
const unmatched = report.summary.unmatchedNotChecks ?? [];
|
|
30
5
|
if (excluded.length === 0 && unmatched.length === 0)
|
|
31
6
|
return [];
|
|
32
7
|
return [
|
|
33
|
-
|
|
8
|
+
CORE_MESSAGES[CoreMessage.ExcludedStepsHeading],
|
|
34
9
|
"",
|
|
35
|
-
...excluded.map((entry) => `- ${entry}
|
|
36
|
-
|
|
37
|
-
// it failed to do. A consumer reads what came out of discovery and then what they wrote that
|
|
38
|
-
// took nothing out of it.
|
|
39
|
-
...unmatched.map((entry) => `- ${entry} — matches no step: the entry names nothing this run read.`),
|
|
10
|
+
...excluded.map((entry) => `- ${CORE_MESSAGES[CoreMessage.StepExcluded](entry)}`),
|
|
11
|
+
...unmatched.map((entry) => `- ${CORE_MESSAGES[CoreMessage.NotChecksEntryMatchesNoStep](entry)}`),
|
|
40
12
|
"",
|
|
41
13
|
];
|
|
42
14
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"excludedSteps.js","sourceRoot":"","sources":["../../src/render/excludedSteps.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"excludedSteps.js","sourceRoot":"","sources":["../../src/render/excludedSteps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAmB,EAAY,EAAE;IACpE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;IACpD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,IAAI,EAAE,CAAC;IAC1D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/D,OAAO;QACL,aAAa,CAAC,WAAW,CAAC,oBAAoB,CAAC;QAC/C,EAAE;QACF,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACjF,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACjG,EAAE;KACH,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fitnessFunctions.d.ts","sourceRoot":"","sources":["../../src/render/fitnessFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,eAAO,MAAM,uBAAuB,GAAI,QAAQ,WAAW,KAAG,MAAM,EAQnE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CORE_MESSAGES, CoreMessage } from "../domain/messages.js";
|
|
2
|
+
export const fitnessFunctionsSection = (report) => {
|
|
3
|
+
const { fitnessFunctions: counts } = report.summary;
|
|
4
|
+
if (!counts)
|
|
5
|
+
return [];
|
|
6
|
+
return [
|
|
7
|
+
CORE_MESSAGES[CoreMessage.FitnessFunctionsHeading], "",
|
|
8
|
+
CORE_MESSAGES[CoreMessage.FitnessFunctionsCounts](counts.runningFitnessFunctionCount, counts.uncitedFitnessFunctionCount),
|
|
9
|
+
"",
|
|
10
|
+
];
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=fitnessFunctions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fitnessFunctions.js","sourceRoot":"","sources":["../../src/render/fitnessFunctions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAmB,EAAY,EAAE;IACvE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;IACpD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO;QACL,aAAa,CAAC,WAAW,CAAC,uBAAuB,CAAC,EAAE,EAAE;QACtD,aAAa,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,2BAA2B,EAAE,MAAM,CAAC,2BAA2B,CAAC;QACzH,EAAE;KACH,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/render/json.d.ts
CHANGED
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The JSON renderer — the machine-readable whole-document report, the sibling of the
|
|
3
|
-
* markdown renderer. Now GLUE-FREE (@SCN-RMD-001): it serialises the ONE
|
|
4
|
-
* whole-document report model (`assembleRenderInput`) with `JSON.stringify`, no per-key
|
|
5
|
-
* hand-assembly. The report model — not this renderer — owns the section set, the
|
|
6
|
-
* document order, and the manifesto-vocabulary key names. So the JSON is provably
|
|
7
|
-
* the model, not a lossy projection: humans read the markdown; machines/CI read the json;
|
|
8
|
-
* both are one model in two renderings.
|
|
9
|
-
*
|
|
10
|
-
* Parent: (@SCN-RMD-001).
|
|
11
|
-
*/
|
|
12
1
|
import type { EvidenceReconciliation } from "../domain/evidenceReconciliation.js";
|
|
13
2
|
import type { RunContext } from "../provenance/provenance.js";
|
|
14
3
|
import type { EvidenceObligations } from "../census/evidenceObligations.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/render/json.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/render/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,wBAAgB,UAAU,CACxB,sBAAsB,EAAE,sBAAsB,EAC9C,GAAG,EAAE,UAAU,EACf,mBAAmB,CAAC,EAAE,mBAAmB,EACzC,YAAY,CAAC,EAAE,YAAY,GAC1B,MAAM,CAMR"}
|
package/dist/render/json.js
CHANGED
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The JSON renderer — the machine-readable whole-document report, the sibling of the
|
|
3
|
-
* markdown renderer. Now GLUE-FREE (@SCN-RMD-001): it serialises the ONE
|
|
4
|
-
* whole-document report model (`assembleRenderInput`) with `JSON.stringify`, no per-key
|
|
5
|
-
* hand-assembly. The report model — not this renderer — owns the section set, the
|
|
6
|
-
* document order, and the manifesto-vocabulary key names. So the JSON is provably
|
|
7
|
-
* the model, not a lossy projection: humans read the markdown; machines/CI read the json;
|
|
8
|
-
* both are one model in two renderings.
|
|
9
|
-
*
|
|
10
|
-
* Parent: (@SCN-RMD-001).
|
|
11
|
-
*/
|
|
12
1
|
import { assembleRenderInput } from "../assemble/renderInput.js";
|
|
13
2
|
export function renderJson(evidenceReconciliation, ctx, evidenceObligations, featureNames) {
|
|
14
3
|
return JSON.stringify(assembleRenderInput(evidenceReconciliation, ctx, evidenceObligations, featureNames), null, 2);
|
package/dist/render/json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/render/json.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/render/json.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,UAAU,UAAU,CACxB,sBAA8C,EAC9C,GAAe,EACf,mBAAyC,EACzC,YAA2B;IAE3B,OAAO,IAAI,CAAC,SAAS,CACnB,mBAAmB,CAAC,sBAAsB,EAAE,GAAG,EAAE,mBAAmB,EAAE,YAAY,CAAC,EACnF,IAAI,EACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,63 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The markdown renderer — the human-readable spec reconciliation: summary views up
|
|
3
|
-
* top (the derived cuts OF the reconciliation), the per-scenario Scenario Reconciliations last.
|
|
4
|
-
* Each Scenario Reconciliation row carries its binary VERDICT (balanced | out-of-balance) and the
|
|
5
|
-
* LIST of EVERY reconciling item that holds it out of balance (no single
|
|
6
|
-
* picked winner; an out-of-balance scenario lists all its non-balanced items, typed).
|
|
7
|
-
*
|
|
8
|
-
* A PURE PRESENTATION of the shared whole-document `EvidenceReconciliation` model: the JSON
|
|
9
|
-
* renderer serialises that model, and this renderer projects the SAME model to markdown,
|
|
10
|
-
* so the two outputs are one model in two renderings and cannot diverge. `renderMarkdown`
|
|
11
|
-
* keeps its `(balance, ctx, …)` signature — it builds `assembleRenderInput(...)` internally
|
|
12
|
-
* (mirroring `json.ts`) then delegates to `renderReport(report, featureNames)`, the
|
|
13
|
-
* from-model pipeline (exposed for slice 3's render-from-saved-JSON path). Every section
|
|
14
|
-
* emitter reads MATERIALISED fields off the report rather than recomputing them.
|
|
15
|
-
*
|
|
16
|
-
* The report IS the reconciliation; the per-scenario Evidence reconciliation is its core, and the
|
|
17
|
-
* summary views — the Evidence reconciliation aggregate (the balance-check that verifies the accounts
|
|
18
|
-
* agree), lint evidence obligations, out-of-balance by feature — are cuts OF it. Layout
|
|
19
|
-
* reorganised summary-first / ledger-last.
|
|
20
|
-
*
|
|
21
|
-
* Parent: (@SCN-LDG-001).
|
|
22
|
-
*/
|
|
23
1
|
import type { RunContext } from "../provenance/provenance.js";
|
|
24
|
-
import type
|
|
2
|
+
import { type EvidenceObligations } from "../census/evidenceObligations.js";
|
|
25
3
|
import { type RenderInput } from "../assemble/renderInput.js";
|
|
26
4
|
import type { EvidenceReconciliation } from "../domain/evidenceReconciliation.js";
|
|
27
|
-
/**
|
|
28
|
-
* The target-derived `feature-code → slug` map — a markdown-only render arg (NOT
|
|
29
|
-
* serialised by `renderJson`, NOT part of the shared `EvidenceReconciliation` model). Built by
|
|
30
|
-
* `readFeatureNames` over `discoverFeatures`: each coded feature file's `@<FFF>` header maps
|
|
31
|
-
* to its filename slug. Display enrichment for the by-feature cut (keyed on the `FFF` already
|
|
32
|
-
* in every `scnId`), not a non-derivable machine fact — so it stays off the JSON surface.
|
|
33
|
-
*/
|
|
34
5
|
export type FeatureNames = ReadonlyMap<string, string>;
|
|
35
|
-
/**
|
|
36
|
-
* Render the whole-document report model to markdown — the from-model pipeline,
|
|
37
|
-
* a PURE PRESENTATION over the same `EvidenceReconciliation` the JSON serialises. Exposed for slice 3's
|
|
38
|
-
* render-from-saved-JSON path: a consumer rebuilds a `EvidenceReconciliation` from banked JSON and
|
|
39
|
-
* renders the human view off it, with no `RunContext` in hand. Needs NO external map — the
|
|
40
|
-
* feature titles are read off `report.metadata.featureNames` (@SCN-RMD-006; nested under
|
|
41
|
-
* `metadata`), so the by-feature cut names each feature in full from the model alone.
|
|
42
|
-
*/
|
|
43
6
|
export declare function renderReport(report: RenderInput): string;
|
|
44
|
-
/**
|
|
45
|
-
* Regenerate the markdown from a banked `spec-reconciliation.json` ALONE (@SCN-RMD-007)
|
|
46
|
-
* — the render-from-saved-JSON seam. `JSON.parse` the stored whole-document report back into a
|
|
47
|
-
* `EvidenceReconciliation` and render it via `renderReport`: no `RunContext`, no live inputs, the JSON is the
|
|
48
|
-
* whole document. Drift-equality is the acceptance — the markdown from the saved JSON equals the
|
|
49
|
-
* markdown rendered directly from the same run (the by-feature titles included, which is why the
|
|
50
|
-
* feature-title model-completion @SCN-RMD-006 is the enabling dependency). The load-bearing proof
|
|
51
|
-
* that the JSON is the model, not a lossy projection.
|
|
52
|
-
*/
|
|
53
7
|
export declare function renderReportFromJson(json: string): string;
|
|
54
|
-
/**
|
|
55
|
-
* Render the reconciliation to markdown. Keeps its `(balance, ctx, …)` signature (mirroring
|
|
56
|
-
* `json.ts`): it assembles the shared whole-document report from the reconcile pieces —
|
|
57
|
-
* threading the live `featureNames` title source INTO `assembleRenderInput`, so the titles
|
|
58
|
-
* land on the model — then delegates to `renderReport`. So `writer.ts` and the unit tests are
|
|
59
|
-
* untouched, the markdown stays byte-identical (same slugs, now model-sourced), and it is
|
|
60
|
-
* provably a presentation of the same model the JSON serialises.
|
|
61
|
-
*/
|
|
62
8
|
export declare function renderMarkdown(evidenceReconciliation: EvidenceReconciliation, ctx: RunContext, evidenceObligations?: EvidenceObligations, featureNames?: FeatureNames): string;
|
|
63
9
|
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/render/markdown.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/render/markdown.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAEL,KAAK,mBAAmB,EAGzB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAwFlF,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AA0SvD,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAExD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,cAAc,CAC5B,sBAAsB,EAAE,sBAAsB,EAC9C,GAAG,EAAE,UAAU,EACf,mBAAmB,CAAC,EAAE,mBAAmB,EACzC,YAAY,CAAC,EAAE,YAAY,GAC1B,MAAM,CAER"}
|