@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
package/dist/parse/vitest.js
CHANGED
|
@@ -1,109 +1,30 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The `ingest/vitest` reader — one of the two named observed-evidence readers
|
|
3
|
-
* (the embryonic adapters, deliberately not a registry in v1). Reads Vitest's
|
|
4
|
-
* JSON reporter output and normalises each assertion that cites an @SCN id into
|
|
5
|
-
* an EvidenceObservation at the `unit` level.
|
|
6
|
-
*
|
|
7
|
-
* The level is supplied by the CALLER, not inferred: the caller states the level this Vitest
|
|
8
|
-
* source yields, and the reader stamps it — no Vitest⇒unit assumption baked into the parser. The
|
|
9
|
-
* JS-ecosystem default (unit) is set at the CLI edge.
|
|
10
|
-
*
|
|
11
|
-
* The @SCN id is the bracketed `[SCN-<FFF>-<NNN>]` token carried in the test's
|
|
12
|
-
* `describe`/`it` name (the bidirectional-link rule). The bracket is what makes it a
|
|
13
|
-
* citation and not a mention: this module's regex used to match any SCN-shaped token
|
|
14
|
-
* anywhere in the name, so fixture data and prose cross-references cited scenarios nobody
|
|
15
|
-
* meant to cite (@SCN-LDG-033, 3F-2368). The form now lives in `lib/scnCitation.ts`,
|
|
16
|
-
* shared with the scn-subissue gate's cite scan so one answer serves both readers.
|
|
17
|
-
*
|
|
18
|
-
* Vitest surfaces the assertion's OWN name as `assertionResults[].title` and its
|
|
19
|
-
* ANCESTOR PATH (describe → it) as `fullName`;
|
|
20
|
-
* the citation belongs to the assertion, so the reader reads the leaf's title FIRST and
|
|
21
|
-
* falls back to the ancestor path only when the leaf does not self-cite — most-specific-
|
|
22
|
-
* citation-wins (@SCN-LDG-016).
|
|
23
|
-
*
|
|
24
|
-
* The reader classifies THREE-WAY (@SCN-PND-015), uniform with the cucumber reader
|
|
25
|
-
* (@SCN-PND-013): a `passed` assertion → a `passed` observation (satisfied); a `failed`
|
|
26
|
-
* assertion → a `failed` observation (failing); an INCONCLUSIVE vitest status (`skipped`/`todo`,
|
|
27
|
-
* and any status ∉ {passed, failed}) → the assertion is DROPPED (no observation), so its
|
|
28
|
-
* obligation reconciles missing by absence — pending is never inferred from status. A skipped/todo
|
|
29
|
-
* unit test is a GAP, not a failure.
|
|
30
|
-
*
|
|
31
|
-
* Parent: @SCN-LDG-001 (the foundation seam; balanced path).
|
|
32
|
-
*/
|
|
33
1
|
import { relativizeToRoot } from "../lib/portablePath.js";
|
|
34
2
|
import { parseScnCitation } from "../lib/scnCitation.js";
|
|
35
|
-
|
|
36
|
-
* Parse a Vitest JSON report into observed results at the CALLER-SUPPLIED level. One result per
|
|
37
|
-
* EMITTED assertion: those carrying an @SCN id cite that scenario; those with NO id emit a
|
|
38
|
-
* null-scnId credit (@SCN-LDG-007 — previously DROPPED). A null-scnId credit cites no scenario,
|
|
39
|
-
* so the reconciler folds it into the SUSPENSE row. Every result carries its test-file locator.
|
|
40
|
-
*
|
|
41
|
-
* THREE-WAY classification (@SCN-PND-015), uniform with the cucumber reader (@SCN-PND-013) —
|
|
42
|
-
* pending is NEVER inferred from status:
|
|
43
|
-
* - `passed` → a `passed` observation → satisfied.
|
|
44
|
-
* - `failed` → a `failed` observation → failing.
|
|
45
|
-
* - otherwise (`skipped`/`todo`, and any status ∉ {passed, failed}) → INCONCLUSIVE: an assertion
|
|
46
|
-
* that RAN but proved nothing. Emit NOTHING — the evidence obligation then finds no matching
|
|
47
|
-
* observation and reconciles missing BY ABSENCE.
|
|
48
|
-
* Treating any non-pass-non-fail status as inconclusive keeps the reader robust to vitest's status
|
|
49
|
-
* spelling (`skipped`/`todo`/`pending`). `EvidenceStatus` stays binary (no new status, no reconciler
|
|
50
|
-
* change): the DROP is what realises inconclusive→missing. The uncited (null-scnId) SUSPENSE credit
|
|
51
|
-
* is preserved for genuine passed/failed results — only inconclusive assertions are dropped.
|
|
52
|
-
*/
|
|
3
|
+
import { CORE_MESSAGES, CoreMessage } from "../domain/messages.js";
|
|
53
4
|
export function parseVitestEvidenceObservations(report, qualityCheck, root) {
|
|
54
5
|
const results = [];
|
|
55
6
|
for (const file of report.testResults ?? []) {
|
|
56
|
-
|
|
57
|
-
// Q5), made portable relative to the run root (verbatim when no root given).
|
|
58
|
-
const locator = relativizeToRoot(file.name ?? "(unknown vitest file)", root);
|
|
59
|
-
// BROKEN, NOT ABSENT (@SCN-LDG-017) — the COLLECTION FAILURE. A file that failed to collect
|
|
60
|
-
// reports `status: "failed"` WITH a message and ZERO assertionResults: it errored before it
|
|
61
|
-
// named a test. Walking `assertionResults[]` alone saw nothing to emit, so the scenario whose
|
|
62
|
-
// proof lived here reconciled `missing` — indistinguishable from an unwritten test, and the
|
|
63
|
-
// wrong remedy (write a test vs fix the harness). Emit ONE observation carrying the collection
|
|
64
|
-
// failure: `broken: true`, the file locator (WHERE to fix), and the runner's message (WHAT
|
|
65
|
-
// broke). It cites NO scenario (`scnId: null`) — a suite that named no test cites no @SCN — so
|
|
66
|
-
// the reconciler posts it to the SUSPENSE row.
|
|
67
|
-
//
|
|
68
|
-
// The signature is the PAIR (failed + zero assertions), never file status alone: an ordinary
|
|
69
|
-
// red run also reports `status: "failed"` at file level, but its assertions ARE named and
|
|
70
|
-
// attributable, and already land as `failing` on the scenarios they cite (the boundary). A
|
|
71
|
-
// green file with zero assertions is likewise not broken — nothing errored.
|
|
7
|
+
const locator = relativizeToRoot(file.name ?? CORE_MESSAGES[CoreMessage.UnknownVitestFile], root);
|
|
72
8
|
const assertions = file.assertionResults ?? [];
|
|
73
9
|
if (file.status === "failed" && assertions.length === 0) {
|
|
74
10
|
results.push({
|
|
75
11
|
qualityCheck,
|
|
76
12
|
scnId: null,
|
|
77
|
-
// `status` is structurally required and the runner did report `failed`; the FAIL-SAFE in
|
|
78
|
-
// the reconciler checks `broken` BEFORE `status`, so this never reconciles as `failing`.
|
|
79
13
|
status: "failed",
|
|
80
14
|
locator,
|
|
81
15
|
broken: true,
|
|
82
|
-
|
|
16
|
+
message: file.message,
|
|
83
17
|
});
|
|
84
18
|
continue;
|
|
85
19
|
}
|
|
86
20
|
for (const assertion of assertions) {
|
|
87
21
|
const status = assertion.status;
|
|
88
|
-
// THREE-WAY (@SCN-PND-015): drop any inconclusive assertion (status ∉ {passed, failed}) —
|
|
89
|
-
// skipped/todo/pending/undefined proved nothing, so the obligation reconciles missing by
|
|
90
|
-
// absence. Only genuine passed/failed emit (the guard narrows `status` to EvidenceStatus).
|
|
91
22
|
if (status !== "passed" && status !== "failed")
|
|
92
23
|
continue;
|
|
93
|
-
// MOST-SPECIFIC-CITATION-WINS (@SCN-LDG-016): the citation belongs to the ASSERTION, and
|
|
94
|
-
// the assertion's OWN name is `title`; `fullName` is the ancestor PATH (outermost describe
|
|
95
|
-
// → innermost it). So read the leaf's own title FIRST and fall back to the ancestor path
|
|
96
|
-
// only when the leaf does not self-cite. This preserves the "describe carries the bracket,
|
|
97
|
-
// plain `it`s beneath" style (a bare leaf falls through to the describe's citation) while
|
|
98
|
-
// letting a self-citing leaf OVERRIDE its ancestor. The retired first-match-on-
|
|
99
|
-
// `fullName + " " + title` did the opposite: a grouping describe's citation SHADOWED a
|
|
100
|
-
// self-citing child, so the leaf's scenario reconciled missing while the ancestor took a
|
|
101
|
-
// spurious SECOND credit. Semantic, not positional — last-match on the concatenation would
|
|
102
|
-
// misfire when a leaf's prose names a second scenario after its own.
|
|
103
24
|
const scnId = parseScnCitation(assertion.title ?? "") ?? parseScnCitation(assertion.fullName ?? "");
|
|
104
25
|
results.push({
|
|
105
26
|
qualityCheck,
|
|
106
|
-
scnId,
|
|
27
|
+
scnId,
|
|
107
28
|
status,
|
|
108
29
|
locator,
|
|
109
30
|
});
|
package/dist/parse/vitest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/parse/vitest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/parse/vitest.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAenE,MAAM,UAAU,+BAA+B,CAC7C,MAAwB,EACxB,YAAiC,EACjC,IAAa;IAEb,MAAM,OAAO,GAA0B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,aAAa,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,CAAC;QAClG,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC;QAC/C,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC;gBACX,YAAY;gBACZ,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,QAAQ;gBAChB,OAAO;gBACP,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAChC,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ;gBAAE,SAAS;YACzD,MAAM,KAAK,GACT,gBAAgB,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,gBAAgB,CAAC,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YACxF,OAAO,CAAC,IAAI,CAAC;gBACX,YAAY;gBACZ,KAAK;gBACL,MAAM;gBACN,OAAO;aACR,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,30 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The RunContext — run provenance threaded CLI→renderers as a SIBLING to the pure
|
|
3
|
-
* Ledger, never folded into it. The Ledger model carries obligation-vs-observation
|
|
4
|
-
* reconciliation only; run metadata — the input paths/flags used, the target repo, the
|
|
5
|
-
* UTC run timestamp, the source SHA — is a separate concern carried alongside.
|
|
6
|
-
*
|
|
7
|
-
* Built once in the CLI (reusing the existing runStart; the target is the verbatim
|
|
8
|
-
* --target) and threaded renderMarkdown(balance, ctx) / writeOutputs(... ctx);
|
|
9
|
-
* it is threaded to renderJson too. The shared provenance projection (consumed by
|
|
10
|
-
* the markdown header here and the JSON object) lives here so the two surfaces
|
|
11
|
-
* never drift. This is the PURE provenance projection — the impure `resolveSourceSha` /
|
|
12
|
-
* `resolveTargetRoot` git reads live in `run-management/resolveRunInputs.ts`.
|
|
13
|
-
*
|
|
14
|
-
* Parent: (@SCN-RPT-001).
|
|
15
|
-
*/
|
|
16
|
-
/**
|
|
17
|
-
* The CLI input paths/flags actually used for a run — each optional; only the ones
|
|
18
|
-
* the operator supplied are present. The same --features/--vitest/--cucumber/--ci/
|
|
19
|
-
* --package-json/--ci-steps seams as the CLI's ReconcileOptions.
|
|
20
|
-
*
|
|
21
|
-
* The converted checks' credit stream joined the interface at 3F-3184 (@SCN-RPT-027). It was
|
|
22
|
-
* ALREADY flowing through it: `reconcileInputsOf` builds one ReconcileOptions and that same
|
|
23
|
-
* object is assigned to `ctx.inputs`, so structural typing let the stream ride along unseen and
|
|
24
|
-
* the block simply never named it. It is optional by design — passed only where the file
|
|
25
|
-
* exists — which is exactly why its silence was ambiguous between "the run never got it" and
|
|
26
|
-
* "the run got it and the block does not say so".
|
|
27
|
-
*/
|
|
28
1
|
export interface RunInputs {
|
|
29
2
|
features?: string;
|
|
30
3
|
vitest?: string;
|
|
@@ -33,120 +6,39 @@ export interface RunInputs {
|
|
|
33
6
|
packageJson?: string;
|
|
34
7
|
ciSteps?: string;
|
|
35
8
|
}
|
|
36
|
-
/**
|
|
37
|
-
* Run provenance — the sibling argument threaded CLI→renderers. `sourceSha` is the
|
|
38
|
-
* target's resolved source revision, or null when unknown (a non-git target with no
|
|
39
|
-
* --source-sha override).
|
|
40
|
-
*/
|
|
41
9
|
export interface RunContext {
|
|
42
|
-
/** The target-repo name — the verbatim --target, or "unknown-target" on omit. */
|
|
43
10
|
target: string;
|
|
44
|
-
/** The CLI input paths/flags actually used. */
|
|
45
11
|
inputs: RunInputs;
|
|
46
|
-
/** The run-start instant — the same Date that names the run dir. */
|
|
47
12
|
runStart: Date;
|
|
48
|
-
/** The target's source SHA, or null when unknown (non-git target). */
|
|
49
13
|
sourceSha: string | null;
|
|
50
|
-
/**
|
|
51
|
-
* The TOOL's own git SHA — which spec-controller produced this run (3F-1916),
|
|
52
|
-
* distinct from the target's `sourceSha`. Null when the tool is not a git checkout
|
|
53
|
-
* (an installed package). OPTIONAL on the ctx: fixtures that do not exercise
|
|
54
|
-
* tool-provenance omit it and the projection defaults it to null; the CLI always
|
|
55
|
-
* resolves it via `resolveToolIdentity`.
|
|
56
|
-
*/
|
|
57
14
|
toolSha?: string | null;
|
|
58
|
-
/**
|
|
59
|
-
* The TOOL's package version — always resolvable (read from the tool's own
|
|
60
|
-
* package.json), so it attributes a run even when no git SHA is available. OPTIONAL
|
|
61
|
-
* on the ctx (defaults to "unknown" in the projection); the CLI always sets it.
|
|
62
|
-
*/
|
|
63
15
|
toolVersion?: string;
|
|
64
|
-
/**
|
|
65
|
-
* The run root the recorded input paths are made relative to — the exact
|
|
66
|
-
* parallel of `countRuntimeEvidenceObservationKinds`'s root. Opt-in: when omitted, input paths are
|
|
67
|
-
* recorded verbatim (existing ctx fixtures unchanged). The CLI sets it to the target
|
|
68
|
-
* root (reconcile runs with cwd = the target repo root), so an absolute input path
|
|
69
|
-
* under that root is recorded relative — a banked artefact stays portable.
|
|
70
|
-
*/
|
|
71
16
|
root?: string;
|
|
17
|
+
strict?: boolean;
|
|
72
18
|
}
|
|
73
|
-
/** One input flag actually used, as the flag handle + the value the operator gave. */
|
|
74
19
|
export interface ProvenanceInput {
|
|
75
20
|
flag: string;
|
|
76
21
|
value: string;
|
|
77
22
|
}
|
|
78
|
-
/**
|
|
79
|
-
* The provenance FACTS — the single projection both report surfaces share so they
|
|
80
|
-
* never drift (project design §1; slice design "Provenance projection"). The
|
|
81
|
-
* markdown header formats it; the JSON `provenance` object will
|
|
82
|
-
* serialise the same facts. `runStartUtc` is second-precision UTC; `sourceSha` is
|
|
83
|
-
* carried raw (null preserved — markdown renders the null explicitly, JSON keeps it).
|
|
84
|
-
*/
|
|
85
23
|
export interface ProvenanceFacts {
|
|
86
24
|
target: string;
|
|
87
25
|
inputs: ProvenanceInput[];
|
|
88
26
|
runStartUtc: string;
|
|
89
27
|
sourceSha: string | null;
|
|
90
|
-
/** The tool's own SHA — which spec-controller produced the run (3F-1916); null when not a git checkout. */
|
|
91
28
|
toolSha: string | null;
|
|
92
|
-
/** The tool's package version — always present. */
|
|
93
29
|
toolVersion: string;
|
|
94
|
-
/**
|
|
95
|
-
* The canonical input flags the run did NOT receive — the complement of `inputs` over
|
|
96
|
-
* INPUT_FLAGS, in the same canonical order (@SCN-RPT-028, 3F-3155). @SCN-RPT-027 made the
|
|
97
|
-
* block name every stream a run was handed, which killed the "handed it and the block does
|
|
98
|
-
* not say so" reading; it left the other one alive, because absence from a list only informs
|
|
99
|
-
* a reader who already holds the list. Naming the flags with no value is what makes the page
|
|
100
|
-
* self-describing about the streams it did not get.
|
|
101
|
-
*
|
|
102
|
-
* PRESENTATION ONLY, AND THAT IS A RULING. It lives here and NOT on `ProvenanceObject`,
|
|
103
|
-
* because the JSON persists a fact iff it is not derivable (see that interface) and absence
|
|
104
|
-
* is exactly derivable — `inputs` plus this file's canonical flag list determines it. A
|
|
105
|
-
* second persisted copy would agree with the first only until one of them was edited.
|
|
106
|
-
*/
|
|
107
30
|
absentInputs: string[];
|
|
108
31
|
}
|
|
109
|
-
/**
|
|
110
|
-
* The provenance OBJECT — the canonical projection of a RunContext to the
|
|
111
|
-
* non-derivable run facts, the single shape both report surfaces consume so they
|
|
112
|
-
* never drift (project design §1, §3; slice design "Provenance projection"). The
|
|
113
|
-
* JSON `provenance` object serialises this verbatim ({ provenance, scenarios, warnings });
|
|
114
|
-
* `projectProvenance` below derives the markdown header's presentation form from the
|
|
115
|
-
* SAME source. `runTimestamp` is second-precision UTC; `inputs` carries only the flags
|
|
116
|
-
* actually used (keyed by their canonical name); `sourceSha` is raw (null preserved).
|
|
117
|
-
*/
|
|
118
32
|
export interface ProvenanceObject {
|
|
119
33
|
target: string;
|
|
120
34
|
sourceSha: string | null;
|
|
121
|
-
/** The tool's own SHA (3F-1916) — which spec-controller produced the run; null when not a git checkout. */
|
|
122
35
|
toolSha: string | null;
|
|
123
|
-
/** The tool's package version — always present. */
|
|
124
36
|
toolVersion: string;
|
|
125
37
|
runTimestamp: string;
|
|
126
38
|
inputs: RunInputs;
|
|
39
|
+
strict?: boolean;
|
|
127
40
|
}
|
|
128
|
-
/**
|
|
129
|
-
* Project a RunContext to the canonical provenance object. The one helper the JSON
|
|
130
|
-
* surface serialises and the markdown header (via `projectProvenance`) derives from —
|
|
131
|
-
* the timestamp formatting, the source SHA, and the input-presence selection live here
|
|
132
|
-
* once, so the two surfaces project the same ctx without duplicating field logic.
|
|
133
|
-
*/
|
|
134
41
|
export declare function provenanceObject(ctx: RunContext): ProvenanceObject;
|
|
135
|
-
/**
|
|
136
|
-
* Project a canonical provenance OBJECT to the markdown header's presentation FACTS —
|
|
137
|
-
* inputs as ordered `{flag, value}` pairs, the UTC timestamp as `runStartUtc`. This is
|
|
138
|
-
* the projection that needs no `RunContext`: the markdown renderer reads it off the shared
|
|
139
|
-
* report model's `runProvenance` (already a `ProvenanceObject`), so the human header and
|
|
140
|
-
* the JSON object project the SAME facts without re-touching the ctx (slice 3's
|
|
141
|
-
* render-from-saved-JSON path calls this directly). `projectProvenance(ctx)` delegates here.
|
|
142
|
-
*/
|
|
143
42
|
export declare function projectProvenanceObject(obj: ProvenanceObject): ProvenanceFacts;
|
|
144
|
-
/**
|
|
145
|
-
* Project a RunContext to the markdown header's provenance facts — the presentation
|
|
146
|
-
* form (inputs as ordered `{flag, value}` pairs, the UTC timestamp as `runStartUtc`).
|
|
147
|
-
* Derived from the canonical `provenanceObject` (then `projectProvenanceObject`) so the
|
|
148
|
-
* markdown header and the JSON object share the same timestamp, source SHA, and
|
|
149
|
-
* input-presence selection (no re-derivation).
|
|
150
|
-
*/
|
|
151
43
|
export declare function projectProvenance(ctx: RunContext): ProvenanceFacts;
|
|
152
44
|
//# sourceMappingURL=provenance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/provenance/provenance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/provenance/provenance.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,QAAQ,EAAE,IAAI,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAWD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAiBD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,UAAU,GAAG,gBAAgB,CAUlE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,gBAAgB,GAAG,eAAe,CAoB9E;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,UAAU,GAAG,eAAe,CAElE"}
|
|
@@ -1,45 +1,15 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The RunContext — run provenance threaded CLI→renderers as a SIBLING to the pure
|
|
3
|
-
* Ledger, never folded into it. The Ledger model carries obligation-vs-observation
|
|
4
|
-
* reconciliation only; run metadata — the input paths/flags used, the target repo, the
|
|
5
|
-
* UTC run timestamp, the source SHA — is a separate concern carried alongside.
|
|
6
|
-
*
|
|
7
|
-
* Built once in the CLI (reusing the existing runStart; the target is the verbatim
|
|
8
|
-
* --target) and threaded renderMarkdown(balance, ctx) / writeOutputs(... ctx);
|
|
9
|
-
* it is threaded to renderJson too. The shared provenance projection (consumed by
|
|
10
|
-
* the markdown header here and the JSON object) lives here so the two surfaces
|
|
11
|
-
* never drift. This is the PURE provenance projection — the impure `resolveSourceSha` /
|
|
12
|
-
* `resolveTargetRoot` git reads live in `run-management/resolveRunInputs.ts`.
|
|
13
|
-
*
|
|
14
|
-
* Parent: (@SCN-RPT-001).
|
|
15
|
-
*/
|
|
16
1
|
import { relativizeToRoot } from "../lib/portablePath.js";
|
|
17
|
-
/** The canonical input flags, in render order, mapped to their RunInputs key. */
|
|
18
2
|
const INPUT_FLAGS = [
|
|
19
3
|
{ key: "features", flag: "--features" },
|
|
20
4
|
{ key: "vitest", flag: "--vitest" },
|
|
21
5
|
{ key: "cucumber", flag: "--cucumber" },
|
|
22
6
|
{ key: "ci", flag: "--ci" },
|
|
23
7
|
{ key: "packageJson", flag: "--package-json" },
|
|
24
|
-
// APPENDED, so no flag that was already rendered moves (@SCN-RPT-027). Widening this
|
|
25
|
-
// list is the whole of the change: `presentInputs`, `provenanceObject`,
|
|
26
|
-
// `projectProvenanceObject`, the markdown header and the JSON object all iterate it, so
|
|
27
|
-
// the two surfaces gain the stream in step and neither can drift from the other.
|
|
28
8
|
{ key: "ciSteps", flag: "--ci-steps" },
|
|
29
9
|
];
|
|
30
|
-
/** Format an instant as second-precision UTC, e.g. `2026-06-27T08:17:53Z`. */
|
|
31
10
|
function formatUtc(instant) {
|
|
32
|
-
return instant.toISOString().replace(/\.\d+Z
|
|
11
|
+
return instant.toISOString().replace(/\.\d+Z/, "Z");
|
|
33
12
|
}
|
|
34
|
-
/**
|
|
35
|
-
* The inputs actually used — RunInputs filtered to the present, non-empty values, in
|
|
36
|
-
* canonical flag order, each made PORTABLE relative to the run `root`. The
|
|
37
|
-
* single input-presence + portability selection both surfaces share: the JSON
|
|
38
|
-
* `provenance.inputs` object serialises it directly; the markdown header derives its
|
|
39
|
-
* `{flag, value}` lines from it. A present value is relativized via `relativizeToRoot`
|
|
40
|
-
* (absolute-under-root → relative; otherwise verbatim — see the helper); only its
|
|
41
|
-
* presence is tested before recording.
|
|
42
|
-
*/
|
|
43
13
|
function presentInputs(inputs, root) {
|
|
44
14
|
const out = {};
|
|
45
15
|
for (const { key } of INPUT_FLAGS) {
|
|
@@ -50,38 +20,19 @@ function presentInputs(inputs, root) {
|
|
|
50
20
|
}
|
|
51
21
|
return out;
|
|
52
22
|
}
|
|
53
|
-
/**
|
|
54
|
-
* Project a RunContext to the canonical provenance object. The one helper the JSON
|
|
55
|
-
* surface serialises and the markdown header (via `projectProvenance`) derives from —
|
|
56
|
-
* the timestamp formatting, the source SHA, and the input-presence selection live here
|
|
57
|
-
* once, so the two surfaces project the same ctx without duplicating field logic.
|
|
58
|
-
*/
|
|
59
23
|
export function provenanceObject(ctx) {
|
|
60
24
|
return {
|
|
61
25
|
target: ctx.target,
|
|
62
26
|
sourceSha: ctx.sourceSha,
|
|
63
|
-
// The tool identity (3F-1916), defaulted for ctx fixtures that omit it; the CLI
|
|
64
|
-
// always sets both via resolveToolIdentity.
|
|
65
27
|
toolSha: ctx.toolSha ?? null,
|
|
66
28
|
toolVersion: ctx.toolVersion ?? "unknown",
|
|
67
29
|
runTimestamp: formatUtc(ctx.runStart),
|
|
68
30
|
inputs: presentInputs(ctx.inputs, ctx.root),
|
|
31
|
+
strict: ctx.strict === true,
|
|
69
32
|
};
|
|
70
33
|
}
|
|
71
|
-
/**
|
|
72
|
-
* Project a canonical provenance OBJECT to the markdown header's presentation FACTS —
|
|
73
|
-
* inputs as ordered `{flag, value}` pairs, the UTC timestamp as `runStartUtc`. This is
|
|
74
|
-
* the projection that needs no `RunContext`: the markdown renderer reads it off the shared
|
|
75
|
-
* report model's `runProvenance` (already a `ProvenanceObject`), so the human header and
|
|
76
|
-
* the JSON object project the SAME facts without re-touching the ctx (slice 3's
|
|
77
|
-
* render-from-saved-JSON path calls this directly). `projectProvenance(ctx)` delegates here.
|
|
78
|
-
*/
|
|
79
34
|
export function projectProvenanceObject(obj) {
|
|
80
35
|
const inputs = [];
|
|
81
|
-
// The flags with no value, derived in the SAME pass over the SAME canonical list that
|
|
82
|
-
// produces the flags with one (@SCN-RPT-028). One list, one traversal, two complementary
|
|
83
|
-
// outputs — so a flag can never be named on both lines, nor missing from both, and adding
|
|
84
|
-
// another input flag reaches the absence line without anyone remembering to.
|
|
85
36
|
const absentInputs = [];
|
|
86
37
|
for (const { key, flag } of INPUT_FLAGS) {
|
|
87
38
|
const value = obj.inputs[key];
|
|
@@ -102,13 +53,6 @@ export function projectProvenanceObject(obj) {
|
|
|
102
53
|
toolVersion: obj.toolVersion,
|
|
103
54
|
};
|
|
104
55
|
}
|
|
105
|
-
/**
|
|
106
|
-
* Project a RunContext to the markdown header's provenance facts — the presentation
|
|
107
|
-
* form (inputs as ordered `{flag, value}` pairs, the UTC timestamp as `runStartUtc`).
|
|
108
|
-
* Derived from the canonical `provenanceObject` (then `projectProvenanceObject`) so the
|
|
109
|
-
* markdown header and the JSON object share the same timestamp, source SHA, and
|
|
110
|
-
* input-presence selection (no re-derivation).
|
|
111
|
-
*/
|
|
112
56
|
export function projectProvenance(ctx) {
|
|
113
57
|
return projectProvenanceObject(provenanceObject(ctx));
|
|
114
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/provenance/provenance.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/provenance/provenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAsB1D,MAAM,WAAW,GAAsD;IACrE,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE;IACvC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE;IACnC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE;IACvC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3B,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAC9C,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE;CACvC,CAAC;AAiBF,SAAS,SAAS,CAAC,OAAa;IAC9B,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,aAAa,CAAC,MAAiB,EAAE,IAAwB;IAChE,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACrD,GAAG,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAYD,MAAM,UAAU,gBAAgB,CAAC,GAAe;IAC9C,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI;QAC5B,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;QACzC,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;QACrC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;QAC3C,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,IAAI;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAqB;IAC3D,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM;QACN,YAAY;QACZ,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EAAE,GAAG,CAAC,WAAW;KAC7B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAe;IAC/C,OAAO,uBAAuB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -1,32 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* THE BEHAVIOURAL RUNNERS a run recognised (@SCN-USG-011) — the tier a consumer named, the runner
|
|
3
|
-
* they named for it, and the step of their pipeline it was recognised at.
|
|
4
|
-
*
|
|
5
|
-
* WHY THE REPORT SAYS IT AT ALL. A recognition rule over somebody else's pipeline will be wrong
|
|
6
|
-
* sometimes, and the question is only whether being wrong is VISIBLE. Naming the steps this reader
|
|
7
|
-
* recognised is what makes it so: a consumer reads the row, sees a step they know is a fitness
|
|
8
|
-
* check, and corrects it in one line of their own configuration. Silence here would put the rule
|
|
9
|
-
* back where the prefix set was — a judgement nobody can see being made. Since @SCN-USG-004 the
|
|
10
|
-
* same recognition also DECIDES membership rather than only reporting it, which is what makes the
|
|
11
|
-
* visibility load-bearing instead of courteous.
|
|
12
|
-
*
|
|
13
|
-
* Its own module rather than a further section in `markdown.ts`, which sits at a `max-lines`
|
|
14
|
-
* exception — and an exception excuses existing debt, never headroom. The precedent is
|
|
15
|
-
* `runVerdict.ts`, moved out for exactly this reason.
|
|
16
|
-
*/
|
|
17
1
|
import type { RenderInput } from "../assemble/renderInput.js";
|
|
18
|
-
/**
|
|
19
|
-
* The recognised-runner cut and the account of the tiers it recognised none for, or nothing at all.
|
|
20
|
-
*
|
|
21
|
-
* OMITTED WHEN THE TARGET HAS SAID NOTHING, which is every target carrying no runner block: the
|
|
22
|
-
* section appears when the target named something and the report is otherwise byte-identical to
|
|
23
|
-
* what it was. This section speaks only for a target that has spoken.
|
|
24
|
-
*
|
|
25
|
-
* AND THE SILENCE IS THE RIGHT ANSWER FOR THE ONE THAT HAS NOT (@SCN-USG-017), which was an open
|
|
26
|
-
* question when the omission was written and is now settled by the scenario that asked it. What a
|
|
27
|
-
* `new-client` is owed is every step of their pipeline on the books, which the observer gives them;
|
|
28
|
-
* a section here would have nothing to report but four tiers nobody named, and printing it would
|
|
29
|
-
* turn an absence the tool supports into a form the report asks them to fill in.
|
|
30
|
-
*/
|
|
31
2
|
export declare const behaviouralRunnersSection: (report: RenderInput) => string[];
|
|
32
3
|
//# sourceMappingURL=behaviouralRunners.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behaviouralRunners.d.ts","sourceRoot":"","sources":["../../src/render/behaviouralRunners.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"behaviouralRunners.d.ts","sourceRoot":"","sources":["../../src/render/behaviouralRunners.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAmB9D,eAAO,MAAM,yBAAyB,GAAI,QAAQ,WAAW,KAAG,MAAM,EAoBrE,CAAC"}
|
|
@@ -1,88 +1,25 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* THE BEHAVIOURAL RUNNERS a run recognised (@SCN-USG-011) — the tier a consumer named, the runner
|
|
3
|
-
* they named for it, and the step of their pipeline it was recognised at.
|
|
4
|
-
*
|
|
5
|
-
* WHY THE REPORT SAYS IT AT ALL. A recognition rule over somebody else's pipeline will be wrong
|
|
6
|
-
* sometimes, and the question is only whether being wrong is VISIBLE. Naming the steps this reader
|
|
7
|
-
* recognised is what makes it so: a consumer reads the row, sees a step they know is a fitness
|
|
8
|
-
* check, and corrects it in one line of their own configuration. Silence here would put the rule
|
|
9
|
-
* back where the prefix set was — a judgement nobody can see being made. Since @SCN-USG-004 the
|
|
10
|
-
* same recognition also DECIDES membership rather than only reporting it, which is what makes the
|
|
11
|
-
* visibility load-bearing instead of courteous.
|
|
12
|
-
*
|
|
13
|
-
* Its own module rather than a further section in `markdown.ts`, which sits at a `max-lines`
|
|
14
|
-
* exception — and an exception excuses existing debt, never headroom. The precedent is
|
|
15
|
-
* `runVerdict.ts`, moved out for exactly this reason.
|
|
16
|
-
*/
|
|
17
1
|
import { RUNTIME_QUALITY_CHECKS } from "../domain/ledger.js";
|
|
18
|
-
|
|
19
|
-
* WHAT THE TARGET SAID ABOUT THE TIERS NO RUNNER WAS NAMED FOR (@SCN-USG-016) — one line each, and
|
|
20
|
-
* two different lines, because a tier the target says it HAS none and a tier it never mentioned are
|
|
21
|
-
* opposite facts. Neither recognises a step and neither excludes one, so this is the only place in
|
|
22
|
-
* the whole run where the difference between them is readable.
|
|
23
|
-
*
|
|
24
|
-
* AND THE UNNAMED LINE IS WHAT MAKES THE NULL WORTH WRITING. Without it a consumer who states
|
|
25
|
-
* `"performance": null` gets the report they would have got by saying nothing, and no reason to
|
|
26
|
-
* ever write it; with it, the tool says out loud that it has not been told, and the null is the
|
|
27
|
-
* answer. That is the same asymmetry the whole axis runs on — say what was seen and what was not,
|
|
28
|
-
* and let the consumer correct it in one line of their own configuration.
|
|
29
|
-
*
|
|
30
|
-
* THE FOUR TIERS ARE CANON AND ARE NOT A LIST THIS MODULE KEEPS. `RUNTIME_QUALITY_CHECKS` is the
|
|
31
|
-
* ledger's own enumeration of the runtime tiers, read here rather than restated: a second copy
|
|
32
|
-
* would agree by coincidence, and this axis's whole argument is that a list of names is the drift.
|
|
33
|
-
*
|
|
34
|
-
* A NAMED TIER IS NOT ACCOUNTED FOR HERE, whether or not a step was recognised for it. What a
|
|
35
|
-
* target that named a runner nothing runs is owed stays the open question the section below
|
|
36
|
-
* already deferred; naming a runner is not saying you have none.
|
|
37
|
-
*/
|
|
2
|
+
import { CORE_MESSAGES, CoreMessage } from "../domain/messages.js";
|
|
38
3
|
const runnerTierAccount = (runnerTiers) => runnerTiers === undefined
|
|
39
4
|
? []
|
|
40
5
|
: RUNTIME_QUALITY_CHECKS.filter((tier) => typeof runnerTiers[tier] !== "string").map((tier) => Object.hasOwn(runnerTiers, tier)
|
|
41
|
-
? `- ${tier}
|
|
42
|
-
: `- ${tier}
|
|
43
|
-
|
|
44
|
-
* THE KEYS THE RUNNER BLOCK WAS GIVEN THAT ARE NOT TIERS (@SCN-USG-019) — one line each, naming the
|
|
45
|
-
* key and saying what it did.
|
|
46
|
-
*
|
|
47
|
-
* THE LINE EXISTS BECAUSE THE ALTERNATIVE IS SILENCE, and silence here is the same fault as a
|
|
48
|
-
* dropped step: the consumer wrote a key, believes it took effect, and nothing they can read says
|
|
49
|
-
* otherwise. The key is not honoured — the resolver partitioned it out before any recognition ran —
|
|
50
|
-
* so the only remaining question was whether they get to find that out, and this is the answer.
|
|
51
|
-
*
|
|
52
|
-
* IT SAYS WHAT THE KEY DID, NOT ONLY THAT IT WAS SEEN. "Excludes nothing" is the fact a consumer
|
|
53
|
-
* needs to act on: they wrote it to take a check out of discovery, that is precisely what it did
|
|
54
|
-
* not do, and the check is on the books below where they can read it.
|
|
55
|
-
*/
|
|
56
|
-
const unrecognisedKeyAccount = (keys) => (keys ?? []).map((key) => `- ${key} — not a tier: the runner block is keyed by the four canon tiers, and this key excludes nothing.`);
|
|
57
|
-
/**
|
|
58
|
-
* The recognised-runner cut and the account of the tiers it recognised none for, or nothing at all.
|
|
59
|
-
*
|
|
60
|
-
* OMITTED WHEN THE TARGET HAS SAID NOTHING, which is every target carrying no runner block: the
|
|
61
|
-
* section appears when the target named something and the report is otherwise byte-identical to
|
|
62
|
-
* what it was. This section speaks only for a target that has spoken.
|
|
63
|
-
*
|
|
64
|
-
* AND THE SILENCE IS THE RIGHT ANSWER FOR THE ONE THAT HAS NOT (@SCN-USG-017), which was an open
|
|
65
|
-
* question when the omission was written and is now settled by the scenario that asked it. What a
|
|
66
|
-
* `new-client` is owed is every step of their pipeline on the books, which the observer gives them;
|
|
67
|
-
* a section here would have nothing to report but four tiers nobody named, and printing it would
|
|
68
|
-
* turn an absence the tool supports into a form the report asks them to fill in.
|
|
69
|
-
*/
|
|
6
|
+
? `- ${CORE_MESSAGES[CoreMessage.RunnerTierNamesNone](tier)}`
|
|
7
|
+
: `- ${CORE_MESSAGES[CoreMessage.RunnerTierUnnamed](tier)}`);
|
|
8
|
+
const unrecognisedKeyAccount = (keys) => (keys ?? []).map((key) => `- ${CORE_MESSAGES[CoreMessage.RunnerKeyNotATier](key)}`);
|
|
70
9
|
export const behaviouralRunnersSection = (report) => {
|
|
71
10
|
const runners = report.summary.behaviouralRunners ?? [];
|
|
72
11
|
const account = [
|
|
73
12
|
...runnerTierAccount(report.summary.runnerTiers),
|
|
74
|
-
// AFTER THE TIERS, because the four are the block's subject and an unrecognised key is what was
|
|
75
|
-
// written beside them. A consumer reads down the canon set and then what did not belong to it.
|
|
76
13
|
...unrecognisedKeyAccount(report.summary.unrecognisedRunnerKeys),
|
|
77
14
|
];
|
|
78
15
|
if (runners.length === 0 && account.length === 0)
|
|
79
16
|
return [];
|
|
80
17
|
return [
|
|
81
|
-
|
|
18
|
+
CORE_MESSAGES[CoreMessage.BehaviouralRunnersHeading],
|
|
82
19
|
"",
|
|
83
20
|
...(runners.length > 0
|
|
84
21
|
? [
|
|
85
|
-
|
|
22
|
+
CORE_MESSAGES[CoreMessage.BehaviouralRunnersTableHeader],
|
|
86
23
|
"| --- | --- | --- |",
|
|
87
24
|
...runners.map(({ tier, runner, step }) => `| ${tier} | ${runner} | ${step} |`),
|
|
88
25
|
"",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behaviouralRunners.js","sourceRoot":"","sources":["../../src/render/behaviouralRunners.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"behaviouralRunners.js","sourceRoot":"","sources":["../../src/render/behaviouralRunners.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,iBAAiB,GAAG,CACxB,WAAgE,EACtD,EAAE,CACZ,WAAW,KAAK,SAAS;IACvB,CAAC,CAAC,EAAE;IACJ,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1F,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC;QAC9B,CAAC,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,EAAE;QAC7D,CAAC,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,EAAE,CAC9D,CAAC;AAER,MAAM,sBAAsB,GAAG,CAAC,IAAmC,EAAY,EAAE,CAC/E,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAClB,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,MAAmB,EAAY,EAAE;IACzE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,IAAI,EAAE,CAAC;IACxD,MAAM,OAAO,GAAG;QACd,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;QAChD,GAAG,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC;KACjE,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5D,OAAO;QACL,aAAa,CAAC,WAAW,CAAC,yBAAyB,CAAC;QACpD,EAAE;QACF,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACpB,CAAC,CAAC;gBACE,aAAa,CAAC,WAAW,CAAC,6BAA6B,CAAC;gBACxD,qBAAqB;gBACrB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,IAAI,MAAM,MAAM,MAAM,IAAI,IAAI,CAAC;gBAC/E,EAAE;aACH;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configurationNotRead.d.ts","sourceRoot":"","sources":["../../src/render/configurationNotRead.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,eAAO,MAAM,2BAA2B,GAAI,QAAQ,WAAW,KAAG,MAAM,EAiBvE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CORE_MESSAGES, CoreMessage } from "../domain/messages.js";
|
|
2
|
+
export const configurationNotReadSection = (report) => {
|
|
3
|
+
const wrongKinds = report.summary.wrongKindConfiguration ?? [];
|
|
4
|
+
const unknownKeys = report.summary.unknownConfigurationKeys ?? [];
|
|
5
|
+
if (wrongKinds.length === 0 && unknownKeys.length === 0)
|
|
6
|
+
return [];
|
|
7
|
+
return [
|
|
8
|
+
CORE_MESSAGES[CoreMessage.ConfigurationNotReadHeading],
|
|
9
|
+
"",
|
|
10
|
+
CORE_MESSAGES[CoreMessage.ConfigurationNotReadIntro],
|
|
11
|
+
"",
|
|
12
|
+
...wrongKinds.map(({ entry, is, reads }) => `- ${CORE_MESSAGES[CoreMessage.ConfigurationWrongKind](`\`${entry}\``, is, reads)}`),
|
|
13
|
+
...unknownKeys.map((key) => `- ${CORE_MESSAGES[CoreMessage.ConfigurationUnknownKey](`\`specController.${key}\``)}`),
|
|
14
|
+
"",
|
|
15
|
+
];
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=configurationNotRead.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configurationNotRead.js","sourceRoot":"","sources":["../../src/render/configurationNotRead.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEnE,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,MAAmB,EAAY,EAAE;IAC3E,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,sBAAsB,IAAI,EAAE,CAAC;IAC/D,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,wBAAwB,IAAI,EAAE,CAAC;IAClE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnE,OAAO;QACL,aAAa,CAAC,WAAW,CAAC,2BAA2B,CAAC;QACtD,EAAE;QACF,aAAa,CAAC,WAAW,CAAC,yBAAyB,CAAC;QACpD,EAAE;QACF,GAAG,UAAU,CAAC,GAAG,CACf,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,CAC9G;QACD,GAAG,WAAW,CAAC,GAAG,CAChB,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,aAAa,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,CAChG;QACD,EAAE;KACH,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,40 +1,3 @@
|
|
|
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
1
|
import type { RenderInput } from "../assemble/renderInput.js";
|
|
26
|
-
/**
|
|
27
|
-
* The scope, or nothing at all.
|
|
28
|
-
*
|
|
29
|
-
* OMITTED WHERE THE RUN READ NO CI CONFIGURATION, which is the only way the census can be empty:
|
|
30
|
-
* the section appears wherever there is a pipeline to account for, and a run handed none renders
|
|
31
|
-
* byte-identically to before.
|
|
32
|
-
*
|
|
33
|
-
* A SOURCE THIS RUN WAS GIVEN NO NAME FOR STILL GETS ITS ROW, with an empty cell where the file
|
|
34
|
-
* would be. The core holds no filesystem and the names arrive as data from the CLI edge
|
|
35
|
-
* (`parse/stepNames`), so an unnamed source is one nobody could name rather than one nothing read
|
|
36
|
-
* — and dropping its jobs would be a job the reader ranged over vanishing from the account of what
|
|
37
|
-
* it ranged over, which is the silence this axis exists to end.
|
|
38
|
-
*/
|
|
39
2
|
export declare const discoveryScopeSection: (report: RenderInput) => string[];
|
|
40
3
|
//# sourceMappingURL=discoveryScope.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discoveryScope.d.ts","sourceRoot":"","sources":["../../src/render/discoveryScope.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"discoveryScope.d.ts","sourceRoot":"","sources":["../../src/render/discoveryScope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D,eAAO,MAAM,qBAAqB,GAAI,QAAQ,WAAW,KAAG,MAAM,EAcjE,CAAC"}
|