@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,49 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* THE ACCOUNTING IDENTITY (@SCN-USG-018, 3F-3343) — how many steps of the target's pipeline this
|
|
3
|
-
* run read, what became of each of them, and the total those dispositions come to.
|
|
4
|
-
*
|
|
5
|
-
* WHY A COUNT EXISTS AT ALL, WHEN FOUR SECTIONS OF THE REPORT ALREADY NAME THE STEPS. This axis's
|
|
6
|
-
* first non-negotiable is that nothing seen is dropped: a step that reaches the reader leaves it
|
|
7
|
-
* as a candidate fitness check, as one of the runners the target named, as the reconciler, or as a
|
|
8
|
-
* step the consumer called a non-check, and there is no fifth outcome. That is a claim about code,
|
|
9
|
-
* and no reader can check it by reading. Every account beside this one names what a step BECAME —
|
|
10
|
-
* so a step that became nothing is missing from no list, and all four of them read exactly as they
|
|
11
|
-
* would have read had the step never existed. Only the population, counted against the
|
|
12
|
-
* dispositions, can see an absence like that.
|
|
13
|
-
*
|
|
14
|
-
* IT ASKS WHAT WOULD STOP BEING COUNTED, NOT WHAT WOULD FAIL. A removal-shaped fault — a filter
|
|
15
|
-
* dropping a step on a branch nobody enumerated — raises nothing for double-entry to miss the
|
|
16
|
-
* other half of. It posts no row, names no step and reds no assertion, because what it did was to
|
|
17
|
-
* not happen. This is the instrument for that shape of fault and it is the only one on the axis.
|
|
18
|
-
*
|
|
19
|
-
* THE SUM IS THIS READER'S, AND THAT IS THE POINT OF CARRYING IT. `accountedFor` is added up here
|
|
20
|
-
* and stated beside `stepsRead`, so the two totals can be compared rather than reconstructed. A
|
|
21
|
-
* report that printed the four dispositions and left the adding to whoever read it would be
|
|
22
|
-
* satisfied by any four figures at all — including four produced by a reader that had lost a step.
|
|
23
|
-
*
|
|
24
|
-
* EVERY DISPOSITION IS THE PRODUCT'S OWN RULE, ASKED, NEVER RESTATED HERE. The candidates come
|
|
25
|
-
* from `isCandidateStep`, the runners from `runsNamedRunner`, and the other two from the seams the
|
|
26
|
-
* composition already built (`parse/reconcilerSteps`, `parse/stepExclusions`). A count that
|
|
27
|
-
* re-derived any of them would be measuring its own arithmetic: it would go on agreeing with
|
|
28
|
-
* itself while the books beneath it posted something else, which is the one disagreement a reader
|
|
29
|
-
* of a total has no way to see. It is the SAME walk, too (`ciWorkflowSteps`), so the population
|
|
30
|
-
* being counted is the population the observers read.
|
|
31
|
-
*
|
|
32
|
-
* THE FOUR ARE DISJOINT BY CONSTRUCTION AND EXHAUSTIVE BY ASSERTION, which is the asymmetry the
|
|
33
|
-
* identity turns on. Each rule below carries the guards that keep a step out of a second
|
|
34
|
-
* disposition, so the count can never exceed the population by accident; nothing here makes them
|
|
35
|
-
* COVER the population, and whether they do is exactly what the two totals say out loud.
|
|
36
|
-
*
|
|
37
|
-
* THE PRECEDENCE IS THE COMPOSITION'S, NOT A PREFERENCE. The exclusion seam discovery is asked
|
|
38
|
-
* through puts the reconciler ahead of the consumer's own list, and a runner is a step the
|
|
39
|
-
* observer never reached the runner rule for if something had already taken it out of discovery.
|
|
40
|
-
* A step that is two things at once is counted under the first of them, so the report's dispositions
|
|
41
|
-
* add up to the pipeline rather than to more than it.
|
|
42
|
-
*
|
|
43
|
-
* NOT THE SCOPE CENSUS beside it (`parse/discoveryScope`, @SCN-USG-020), which counts the same
|
|
44
|
-
* population for a different question: that one says WHICH files and WHICH jobs the steps came
|
|
45
|
-
* from, this one says none of them went missing on the way. A reader satisfies either alone.
|
|
46
|
-
*/
|
|
47
1
|
import { type CiWorkflowStep, type PackageJsonScripts } from "./checkScriptsRunInCI.js";
|
|
48
2
|
import type { StepAccounting } from "../domain/evidenceReconciliation.js";
|
|
49
3
|
export declare function stepAccounting(ciSources: readonly string[], packageJson: PackageJsonScripts, runners: Readonly<Record<string, string | null>>, isReconciler: (step: CiWorkflowStep) => boolean, isNamedANonCheck: (step: CiWorkflowStep) => boolean): StepAccounting;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stepAccounting.d.ts","sourceRoot":"","sources":["../../src/parse/stepAccounting.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stepAccounting.d.ts","sourceRoot":"","sources":["../../src/parse/stepAccounting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEzG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAE1E,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,EAChD,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,EAC/C,gBAAgB,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,GAClD,cAAc,CAuBhB"}
|
|
@@ -1,66 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* THE ACCOUNTING IDENTITY (@SCN-USG-018, 3F-3343) — how many steps of the target's pipeline this
|
|
3
|
-
* run read, what became of each of them, and the total those dispositions come to.
|
|
4
|
-
*
|
|
5
|
-
* WHY A COUNT EXISTS AT ALL, WHEN FOUR SECTIONS OF THE REPORT ALREADY NAME THE STEPS. This axis's
|
|
6
|
-
* first non-negotiable is that nothing seen is dropped: a step that reaches the reader leaves it
|
|
7
|
-
* as a candidate fitness check, as one of the runners the target named, as the reconciler, or as a
|
|
8
|
-
* step the consumer called a non-check, and there is no fifth outcome. That is a claim about code,
|
|
9
|
-
* and no reader can check it by reading. Every account beside this one names what a step BECAME —
|
|
10
|
-
* so a step that became nothing is missing from no list, and all four of them read exactly as they
|
|
11
|
-
* would have read had the step never existed. Only the population, counted against the
|
|
12
|
-
* dispositions, can see an absence like that.
|
|
13
|
-
*
|
|
14
|
-
* IT ASKS WHAT WOULD STOP BEING COUNTED, NOT WHAT WOULD FAIL. A removal-shaped fault — a filter
|
|
15
|
-
* dropping a step on a branch nobody enumerated — raises nothing for double-entry to miss the
|
|
16
|
-
* other half of. It posts no row, names no step and reds no assertion, because what it did was to
|
|
17
|
-
* not happen. This is the instrument for that shape of fault and it is the only one on the axis.
|
|
18
|
-
*
|
|
19
|
-
* THE SUM IS THIS READER'S, AND THAT IS THE POINT OF CARRYING IT. `accountedFor` is added up here
|
|
20
|
-
* and stated beside `stepsRead`, so the two totals can be compared rather than reconstructed. A
|
|
21
|
-
* report that printed the four dispositions and left the adding to whoever read it would be
|
|
22
|
-
* satisfied by any four figures at all — including four produced by a reader that had lost a step.
|
|
23
|
-
*
|
|
24
|
-
* EVERY DISPOSITION IS THE PRODUCT'S OWN RULE, ASKED, NEVER RESTATED HERE. The candidates come
|
|
25
|
-
* from `isCandidateStep`, the runners from `runsNamedRunner`, and the other two from the seams the
|
|
26
|
-
* composition already built (`parse/reconcilerSteps`, `parse/stepExclusions`). A count that
|
|
27
|
-
* re-derived any of them would be measuring its own arithmetic: it would go on agreeing with
|
|
28
|
-
* itself while the books beneath it posted something else, which is the one disagreement a reader
|
|
29
|
-
* of a total has no way to see. It is the SAME walk, too (`ciWorkflowSteps`), so the population
|
|
30
|
-
* being counted is the population the observers read.
|
|
31
|
-
*
|
|
32
|
-
* THE FOUR ARE DISJOINT BY CONSTRUCTION AND EXHAUSTIVE BY ASSERTION, which is the asymmetry the
|
|
33
|
-
* identity turns on. Each rule below carries the guards that keep a step out of a second
|
|
34
|
-
* disposition, so the count can never exceed the population by accident; nothing here makes them
|
|
35
|
-
* COVER the population, and whether they do is exactly what the two totals say out loud.
|
|
36
|
-
*
|
|
37
|
-
* THE PRECEDENCE IS THE COMPOSITION'S, NOT A PREFERENCE. The exclusion seam discovery is asked
|
|
38
|
-
* through puts the reconciler ahead of the consumer's own list, and a runner is a step the
|
|
39
|
-
* observer never reached the runner rule for if something had already taken it out of discovery.
|
|
40
|
-
* A step that is two things at once is counted under the first of them, so the report's dispositions
|
|
41
|
-
* add up to the pipeline rather than to more than it.
|
|
42
|
-
*
|
|
43
|
-
* NOT THE SCOPE CENSUS beside it (`parse/discoveryScope`, @SCN-USG-020), which counts the same
|
|
44
|
-
* population for a different question: that one says WHICH files and WHICH jobs the steps came
|
|
45
|
-
* from, this one says none of them went missing on the way. A reader satisfies either alone.
|
|
46
|
-
*/
|
|
47
1
|
import { ciWorkflowSteps } from "./checkScriptsRunInCI.js";
|
|
48
|
-
import { isCandidateStep, runsNamedRunner } from "./
|
|
2
|
+
import { isCandidateStep, runsNamedRunner } from "./runningFitnessFunctions.js";
|
|
49
3
|
export function stepAccounting(ciSources, packageJson, runners, isReconciler, isNamedANonCheck) {
|
|
50
4
|
const steps = ciWorkflowSteps(ciSources);
|
|
51
|
-
// THE COMPOSED SEAM, REBUILT FROM ITS TWO HALVES RATHER THAN TAKEN WHOLE. The observer is asked
|
|
52
|
-
// one question per step and cannot tell the two facts apart; this reader has to, because "the
|
|
53
|
-
// reconciler" and "the consumer said so" are the two dispositions a report keeps separate.
|
|
54
5
|
const isExcludedFromDiscovery = (step) => isReconciler(step) || isNamedANonCheck(step);
|
|
55
6
|
const count = (holds) => steps.filter(holds).length;
|
|
56
7
|
const candidates = count((step) => isCandidateStep(step, packageJson, runners, isExcludedFromDiscovery));
|
|
57
8
|
const reconciler = count(isReconciler);
|
|
58
|
-
// NOT ALSO THE RECONCILER, so a consumer who wrote a `notChecks` entry naming a step this tool
|
|
59
|
-
// takes out of its own books does not have it counted twice — and the surplus does not read as
|
|
60
|
-
// a pipeline larger than the one that ran.
|
|
61
9
|
const excluded = count((step) => !isReconciler(step) && isNamedANonCheck(step));
|
|
62
|
-
// NOT ALREADY OUT OF DISCOVERY, for the same reason and in the observer's own order: the runner
|
|
63
|
-
// rule is a question about a step the reader is still looking at.
|
|
64
10
|
const runnerSteps = count((step) => !isExcludedFromDiscovery(step) && runsNamedRunner(step, packageJson, runners));
|
|
65
11
|
return {
|
|
66
12
|
stepsRead: steps.length,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stepAccounting.js","sourceRoot":"","sources":["../../src/parse/stepAccounting.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stepAccounting.js","sourceRoot":"","sources":["../../src/parse/stepAccounting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAgD,MAAM,0BAA0B,CAAC;AACzG,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGhF,MAAM,UAAU,cAAc,CAC5B,SAA4B,EAC5B,WAA+B,EAC/B,OAAgD,EAChD,YAA+C,EAC/C,gBAAmD;IAEnD,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,uBAAuB,GAAG,CAAC,IAAoB,EAAW,EAAE,CAChE,YAAY,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,CAAC,KAAwC,EAAU,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAE/F,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAChC,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,uBAAuB,CAAC,CACrE,CAAC;IACF,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,MAAM,WAAW,GAAG,KAAK,CACvB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CACxF,CAAC;IAEF,OAAO;QACL,SAAS,EAAE,KAAK,CAAC,MAAM;QACvB,UAAU;QACV,OAAO,EAAE,WAAW;QACpB,UAAU;QACV,QAAQ;QACR,YAAY,EAAE,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ;KAC/D,CAAC;AACJ,CAAC"}
|
|
@@ -1,54 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* THE CONSUMER'S OWN EXCLUSIONS (@SCN-USG-015, 3F-3343) — which steps of a target's pipeline its
|
|
3
|
-
* manifest names non-checks, and which of the entries that named them named nothing at all.
|
|
4
|
-
*
|
|
5
|
-
* THE THIRD EXCLUSION, AND THE ONLY ONE THAT IS A LIST SOMEBODY WRITES. The reconciler is excluded
|
|
6
|
-
* by construction and a behavioural runner by a rule over what the target named; this one is the
|
|
7
|
-
* consumer saying, about their own pipeline, that a step is not a check. It is a list of THEIR
|
|
8
|
-
* steps and never a list of check names of ours, which is the whole of what keeps it from being
|
|
9
|
-
* the prefix rule arriving one layer along.
|
|
10
|
-
*
|
|
11
|
-
* AN ENTRY IS `<workflow file>:<job id>:<step name>` AND IS MATCHED EXACTLY. One form and no
|
|
12
|
-
* grammar, and the form itself is stated once next door (`parse/stepNames`) because the report
|
|
13
|
-
* names a step that way in every section that names one at all. Fully qualified because a bare name is ambiguous in a real tree — `Typecheck` is a
|
|
14
|
-
* check in this repository's `ci.yml` and plumbing in its `release.yml`, and a bare-name entry
|
|
15
|
-
* would take out both, the second of them a check deleted from the report with nothing said. The
|
|
16
|
-
* job and the source are exactly what the walk was widened to carry (3F-3352), and this is what
|
|
17
|
-
* that was for.
|
|
18
|
-
*
|
|
19
|
-
* NO PREFIX AND NO WILDCARD FORM, argued rather than omitted. A consumer wanting a whole workflow
|
|
20
|
-
* out narrows `--ci`, a supported narrowing the corpus already pins (@SCN-USG-008), so a second
|
|
21
|
-
* way to say the same thing buys a grammar to specify, to test and to explain. Exact-only can be
|
|
22
|
-
* widened later and breaks nobody; starting wide cannot be narrowed once a manifest depends on it.
|
|
23
|
-
*
|
|
24
|
-
* THE PARTITION IS TOTAL, and that is this reader's shape rather than a convenience. Every entry
|
|
25
|
-
* the target wrote is either one that named a step or one that named none, and both halves are
|
|
26
|
-
* returned because both have to be SAID: the first is a step that leaves the report accounted for
|
|
27
|
-
* rather than vanished, and the second is a stale line the consumer wrote that hides nothing —
|
|
28
|
-
* a rename that has already happened, or one that is about to hide the wrong thing. An entry lost
|
|
29
|
-
* between the two halves would be an exclusion nothing anywhere accounts for.
|
|
30
|
-
*
|
|
31
|
-
* THE SEAM IS A FUNCTION, for the reason the citation seam beside it is (`runningStaticChecks`):
|
|
32
|
-
* what the discovery reader needs is one answer per step, not this module's two lists and the
|
|
33
|
-
* rule for turning them into one. Handing it the lists would put the qualification rule inside an
|
|
34
|
-
* observer that has no business restating it, and a second statement of that rule is a second
|
|
35
|
-
* chance for the two to disagree about which step an entry names.
|
|
36
|
-
*
|
|
37
|
-
* NO FILESYSTEM, AND THE NAMES ARE INJECTED. `ciSources` is an array of anonymous source strings
|
|
38
|
-
* — `ciSourcePaths.ts` is explicit that keeping the core that way is the point — so the mapping
|
|
39
|
-
* from a step's source index back to a workflow file is made at the CLI edge, where the paths were
|
|
40
|
-
* already resolved, and arrives here as data. A source this run was given no name for can be
|
|
41
|
-
* named by nobody, so no entry excludes it: the safe direction, and the one that stops two
|
|
42
|
-
* nameless sources answering for each other.
|
|
43
|
-
*/
|
|
44
1
|
import { type CiWorkflowStep } from "./checkScriptsRunInCI.js";
|
|
45
|
-
/** What a target's `notChecks` list yielded — the entries that named a step, and those that did not. */
|
|
46
2
|
export interface StepExclusions {
|
|
47
|
-
/** The entries that named a step this run read, in the order the manifest wrote them. */
|
|
48
3
|
readonly excluded: readonly string[];
|
|
49
|
-
/** The entries that named none, in the order the manifest wrote them. */
|
|
50
4
|
readonly unmatchedEntries: readonly string[];
|
|
51
|
-
/** Whether the consumer named this step a non-check. */
|
|
52
5
|
readonly isExcluded: (step: CiWorkflowStep) => boolean;
|
|
53
6
|
}
|
|
54
7
|
export declare function stepExclusions(ciSources: readonly string[], ciSourceNames: readonly string[], notChecks: readonly string[]): StepExclusions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stepExclusions.d.ts","sourceRoot":"","sources":["../../src/parse/stepExclusions.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stepExclusions.d.ts","sourceRoot":"","sources":["../../src/parse/stepExclusions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAGhF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC;CACxD;AAED,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,aAAa,EAAE,SAAS,MAAM,EAAE,EAChC,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,cAAc,CAahB"}
|
|
@@ -1,62 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* THE CONSUMER'S OWN EXCLUSIONS (@SCN-USG-015, 3F-3343) — which steps of a target's pipeline its
|
|
3
|
-
* manifest names non-checks, and which of the entries that named them named nothing at all.
|
|
4
|
-
*
|
|
5
|
-
* THE THIRD EXCLUSION, AND THE ONLY ONE THAT IS A LIST SOMEBODY WRITES. The reconciler is excluded
|
|
6
|
-
* by construction and a behavioural runner by a rule over what the target named; this one is the
|
|
7
|
-
* consumer saying, about their own pipeline, that a step is not a check. It is a list of THEIR
|
|
8
|
-
* steps and never a list of check names of ours, which is the whole of what keeps it from being
|
|
9
|
-
* the prefix rule arriving one layer along.
|
|
10
|
-
*
|
|
11
|
-
* AN ENTRY IS `<workflow file>:<job id>:<step name>` AND IS MATCHED EXACTLY. One form and no
|
|
12
|
-
* grammar, and the form itself is stated once next door (`parse/stepNames`) because the report
|
|
13
|
-
* names a step that way in every section that names one at all. Fully qualified because a bare name is ambiguous in a real tree — `Typecheck` is a
|
|
14
|
-
* check in this repository's `ci.yml` and plumbing in its `release.yml`, and a bare-name entry
|
|
15
|
-
* would take out both, the second of them a check deleted from the report with nothing said. The
|
|
16
|
-
* job and the source are exactly what the walk was widened to carry (3F-3352), and this is what
|
|
17
|
-
* that was for.
|
|
18
|
-
*
|
|
19
|
-
* NO PREFIX AND NO WILDCARD FORM, argued rather than omitted. A consumer wanting a whole workflow
|
|
20
|
-
* out narrows `--ci`, a supported narrowing the corpus already pins (@SCN-USG-008), so a second
|
|
21
|
-
* way to say the same thing buys a grammar to specify, to test and to explain. Exact-only can be
|
|
22
|
-
* widened later and breaks nobody; starting wide cannot be narrowed once a manifest depends on it.
|
|
23
|
-
*
|
|
24
|
-
* THE PARTITION IS TOTAL, and that is this reader's shape rather than a convenience. Every entry
|
|
25
|
-
* the target wrote is either one that named a step or one that named none, and both halves are
|
|
26
|
-
* returned because both have to be SAID: the first is a step that leaves the report accounted for
|
|
27
|
-
* rather than vanished, and the second is a stale line the consumer wrote that hides nothing —
|
|
28
|
-
* a rename that has already happened, or one that is about to hide the wrong thing. An entry lost
|
|
29
|
-
* between the two halves would be an exclusion nothing anywhere accounts for.
|
|
30
|
-
*
|
|
31
|
-
* THE SEAM IS A FUNCTION, for the reason the citation seam beside it is (`runningStaticChecks`):
|
|
32
|
-
* what the discovery reader needs is one answer per step, not this module's two lists and the
|
|
33
|
-
* rule for turning them into one. Handing it the lists would put the qualification rule inside an
|
|
34
|
-
* observer that has no business restating it, and a second statement of that rule is a second
|
|
35
|
-
* chance for the two to disagree about which step an entry names.
|
|
36
|
-
*
|
|
37
|
-
* NO FILESYSTEM, AND THE NAMES ARE INJECTED. `ciSources` is an array of anonymous source strings
|
|
38
|
-
* — `ciSourcePaths.ts` is explicit that keeping the core that way is the point — so the mapping
|
|
39
|
-
* from a step's source index back to a workflow file is made at the CLI edge, where the paths were
|
|
40
|
-
* already resolved, and arrives here as data. A source this run was given no name for can be
|
|
41
|
-
* named by nobody, so no entry excludes it: the safe direction, and the one that stops two
|
|
42
|
-
* nameless sources answering for each other.
|
|
43
|
-
*/
|
|
44
1
|
import { ciWorkflowSteps } from "./checkScriptsRunInCI.js";
|
|
45
2
|
import { qualifiedStepName } from "./stepNames.js";
|
|
46
3
|
export function stepExclusions(ciSources, ciSourceNames, notChecks) {
|
|
47
|
-
|
|
48
|
-
// same parse, so an entry can never name a step the discovery reader did not see.
|
|
49
|
-
const named = new Set(ciWorkflowSteps(ciSources).flatMap((step) => {
|
|
50
|
-
const name = qualifiedStepName(step, ciSourceNames);
|
|
51
|
-
return name === undefined ? [] : [name];
|
|
52
|
-
}));
|
|
4
|
+
const named = new Set(ciWorkflowSteps(ciSources).map((step) => qualifiedStepName(step, ciSourceNames)));
|
|
53
5
|
const excluded = notChecks.filter((entry) => named.has(entry));
|
|
54
6
|
return {
|
|
55
7
|
excluded,
|
|
56
8
|
unmatchedEntries: notChecks.filter((entry) => !named.has(entry)),
|
|
57
9
|
isExcluded: (step) => {
|
|
58
10
|
const name = qualifiedStepName(step, ciSourceNames);
|
|
59
|
-
return
|
|
11
|
+
return excluded.some((entry) => entry === name);
|
|
60
12
|
},
|
|
61
13
|
};
|
|
62
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stepExclusions.js","sourceRoot":"","sources":["../../src/parse/stepExclusions.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stepExclusions.js","sourceRoot":"","sources":["../../src/parse/stepExclusions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAuB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAQnD,MAAM,UAAU,cAAc,CAC5B,SAA4B,EAC5B,aAAgC,EAChC,SAA4B;IAE5B,MAAM,KAAK,GAAG,IAAI,GAAG,CACnB,eAAe,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CACjF,CAAC;IACF,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,OAAO;QACL,QAAQ;QACR,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChE,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YACpD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,30 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HOW A STEP IS NAMED BACK TO THE CONSUMER — `<workflow file>:<job id>:<step name>`, stated once.
|
|
3
|
-
*
|
|
4
|
-
* ONE STATEMENT OF THE FORM, because two readers now depend on it and they must not be free to
|
|
5
|
-
* disagree. A `notChecks` entry is written in this form and matched against it
|
|
6
|
-
* (`parse/stepExclusions`), and the report names a step in this form in every section that names
|
|
7
|
-
* one at all — the consumer's own exclusions, and the reconciler's own steps
|
|
8
|
-
* (`parse/reconcilerSteps`). A second spelling would mean a consumer copying a name off one
|
|
9
|
-
* section of the report and finding it matches nothing when they write it into the other.
|
|
10
|
-
*
|
|
11
|
-
* FULLY QUALIFIED, and that is what the walk was widened to carry (3F-3352). `Typecheck` is a
|
|
12
|
-
* check in this repository's `ci.yml` and plumbing in its `release.yml`, so a bare name is
|
|
13
|
-
* ambiguous in any real tree — as an entry it would take out both, and as a report line it would
|
|
14
|
-
* leave a reader unable to tell which of the two was meant.
|
|
15
|
-
*
|
|
16
|
-
* THE STEP'S OWN HALF IS GITHUB'S. Its `name:`, else the action it `uses:`, else the first
|
|
17
|
-
* non-blank line of its `run:` — the string GitHub itself shows in a run log, so a consumer
|
|
18
|
-
* reading a report line or writing an entry copies what is already in front of them.
|
|
19
|
-
*
|
|
20
|
-
* NO NAME FOR THE SOURCE MEANS NO QUALIFIED NAME. `ciSources` is an array of anonymous source
|
|
21
|
-
* strings and the core holds no filesystem — `ciSourcePaths.ts` is explicit that keeping it that
|
|
22
|
-
* way is the point — so the names arrive as data from the CLI edge. A source this run was given
|
|
23
|
-
* none for can be named by nobody, and what each caller does with that silence is its own: an
|
|
24
|
-
* entry excludes no such step (the safe direction), and the reconciler account falls back to the
|
|
25
|
-
* step's own identity rather than dropping a step it recognised.
|
|
26
|
-
*/
|
|
27
1
|
import type { CiWorkflowStep } from "./checkScriptsRunInCI.js";
|
|
28
|
-
/** The one string that names this step, or nothing for a step whose source has no name. */
|
|
29
2
|
export declare function qualifiedStepName(step: CiWorkflowStep, ciSourceNames: readonly string[]): string | undefined;
|
|
30
3
|
//# sourceMappingURL=stepNames.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stepNames.d.ts","sourceRoot":"","sources":["../../src/parse/stepNames.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"stepNames.d.ts","sourceRoot":"","sources":["../../src/parse/stepNames.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,cAAc,EACpB,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,MAAM,GAAG,SAAS,CAGpB"}
|
package/dist/parse/stepNames.js
CHANGED
|
@@ -1,30 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HOW A STEP IS NAMED BACK TO THE CONSUMER — `<workflow file>:<job id>:<step name>`, stated once.
|
|
3
|
-
*
|
|
4
|
-
* ONE STATEMENT OF THE FORM, because two readers now depend on it and they must not be free to
|
|
5
|
-
* disagree. A `notChecks` entry is written in this form and matched against it
|
|
6
|
-
* (`parse/stepExclusions`), and the report names a step in this form in every section that names
|
|
7
|
-
* one at all — the consumer's own exclusions, and the reconciler's own steps
|
|
8
|
-
* (`parse/reconcilerSteps`). A second spelling would mean a consumer copying a name off one
|
|
9
|
-
* section of the report and finding it matches nothing when they write it into the other.
|
|
10
|
-
*
|
|
11
|
-
* FULLY QUALIFIED, and that is what the walk was widened to carry (3F-3352). `Typecheck` is a
|
|
12
|
-
* check in this repository's `ci.yml` and plumbing in its `release.yml`, so a bare name is
|
|
13
|
-
* ambiguous in any real tree — as an entry it would take out both, and as a report line it would
|
|
14
|
-
* leave a reader unable to tell which of the two was meant.
|
|
15
|
-
*
|
|
16
|
-
* THE STEP'S OWN HALF IS GITHUB'S. Its `name:`, else the action it `uses:`, else the first
|
|
17
|
-
* non-blank line of its `run:` — the string GitHub itself shows in a run log, so a consumer
|
|
18
|
-
* reading a report line or writing an entry copies what is already in front of them.
|
|
19
|
-
*
|
|
20
|
-
* NO NAME FOR THE SOURCE MEANS NO QUALIFIED NAME. `ciSources` is an array of anonymous source
|
|
21
|
-
* strings and the core holds no filesystem — `ciSourcePaths.ts` is explicit that keeping it that
|
|
22
|
-
* way is the point — so the names arrive as data from the CLI edge. A source this run was given
|
|
23
|
-
* none for can be named by nobody, and what each caller does with that silence is its own: an
|
|
24
|
-
* entry excludes no such step (the safe direction), and the reconciler account falls back to the
|
|
25
|
-
* step's own identity rather than dropping a step it recognised.
|
|
26
|
-
*/
|
|
27
|
-
/** The one string that names this step, or nothing for a step whose source has no name. */
|
|
28
1
|
export function qualifiedStepName(step, ciSourceNames) {
|
|
29
2
|
const source = ciSourceNames[step.sourceIndex];
|
|
30
3
|
return source === undefined ? undefined : `${source}:${step.jobId}:${step.identity}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stepNames.js","sourceRoot":"","sources":["../../src/parse/stepNames.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stepNames.js","sourceRoot":"","sources":["../../src/parse/stepNames.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAC/B,IAAoB,EACpB,aAAgC;IAEhC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;AACvF,CAAC"}
|
|
@@ -1,85 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The TARGET's feature corpus read into the readings one reconciliation needs — moved here from
|
|
3
|
-
* the app's ingest edge (3F-3088).
|
|
4
|
-
*
|
|
5
|
-
* WHY IT LIVES IN THE ENGINE. Every line of it is a pure function of sources somebody else already
|
|
6
|
-
* read off disk: the obligation rule is `parseScenarios`, core's own. Sitting at the app edge it
|
|
7
|
-
* was the reason a PUBLISHED module imported core's unpublished `/internal` subpath for five
|
|
8
|
-
* symbols — the fault 3F-3086 repairs. One line made it impure and it was the only one: the feature discovery, which now
|
|
9
|
-
* happens at the edge and arrives as `sources`.
|
|
10
|
-
*
|
|
11
|
-
* THE REGISTRY-KEYED READING THIS FILE ONCE ALSO PRODUCED — `checkHandles` and `citedScn`, the
|
|
12
|
-
* obligation-side observer's feed — RETIRED WITH THE REGISTRY ITSELF (3F-3161, @SCN-LNT-017, the
|
|
13
|
-
* last registry-`scn` scenario). Every check now either states its own row's code on its CI step
|
|
14
|
-
* (`citedRow`, below) or is a converted `@fitness` row read through `domain/fitnessChecks`
|
|
15
|
-
* directly; there is no second discovery left to key a handle set off.
|
|
16
|
-
*/
|
|
17
|
-
import type { FitnessCheckIndex, UnspecifiedFitnessRow } from "../domain/fitnessChecks.js";
|
|
18
1
|
import { type ScriptCitation } from "./fitnessCitations.js";
|
|
19
2
|
import type { Scenario } from "../model.js";
|
|
20
|
-
/**
|
|
21
|
-
* The target's feature corpus as ONE run reads it — the obligations it raises, the `@SCN` a run
|
|
22
|
-
* whose CI step states a code cites, the scenarios on the fitness axis no configured row names,
|
|
23
|
-
* and the configured rows the corpus carries no scenario for.
|
|
24
|
-
*
|
|
25
|
-
* THE READINGS ARE ONE, which is why they are produced together. All are derived from the same
|
|
26
|
-
* bytes and the same configured rows, and the fault they exist to foreclose is precisely their
|
|
27
|
-
* disagreeing: a citation resolved against a corpus the ledger was not built from names a row
|
|
28
|
-
* nobody wrote (@SCN-LNT-009). Returning them separately would leave a caller free to assemble
|
|
29
|
-
* them from different reads.
|
|
30
|
-
*
|
|
31
|
-
* EVERY INPUT IS THE TARGET'S (@SCN-LNT-005). `fitnessChecks` came from the target's manifest and
|
|
32
|
-
* the sources from the target's features directory, so a configured row means what that target
|
|
33
|
-
* says it means and the scenario carrying its `@SCN` is one that target wrote.
|
|
34
|
-
*/
|
|
35
3
|
export interface TargetCorpus {
|
|
36
|
-
/** The `@SCN`-carrying scenarios, with their evidence obligations raised. */
|
|
37
4
|
scenarios: Scenario[];
|
|
38
|
-
/**
|
|
39
|
-
* What a run whose CI step STATES a code cites — the configured row that code names, read for
|
|
40
|
-
* the characteristic a CI step cannot state (@SCN-LNT-031).
|
|
41
|
-
*
|
|
42
|
-
* NO CODE IS THE SAME ANSWER AS AN UNANSWERED ONE — `null`, the run cites nothing, and it posts
|
|
43
|
-
* to suspense. That is the state a consumer starts in, and this seam does not narrow it.
|
|
44
|
-
*/
|
|
45
5
|
citedRow: (citedScn: string | undefined) => ScriptCitation | null;
|
|
46
|
-
/**
|
|
47
|
-
* The scenarios ON the fitness axis that no configured row NAMES (@SCN-LNT-020) — the corpus's
|
|
48
|
-
* half-converted checks, in corpus order.
|
|
49
|
-
*
|
|
50
|
-
* It belongs with the other readings because it is the same one: the obligation rule raises
|
|
51
|
-
* nothing for such a scenario, and this says WHICH ones. Produced here, where the corpus walk and
|
|
52
|
-
* the configured rows are both in hand, so the naming and the raising cannot be taken from
|
|
53
|
-
* different reads — the same guarantee `citedRow` is composed here for.
|
|
54
|
-
*/
|
|
55
|
-
unconfiguredFitnessScenarios: readonly string[];
|
|
56
|
-
/**
|
|
57
|
-
* The CONFIGURED ROWS the corpus carries no scenario for (@SCN-LNT-027, 3F-3472) — the other
|
|
58
|
-
* direction of the same disagreement, in manifest order, each with the characteristic its debit
|
|
59
|
-
* is owed at.
|
|
60
|
-
*
|
|
61
|
-
* IT IS HERE FOR THE MIRROR'S REASON AND NOT A WEAKER ONE. The corpus walk and the configured
|
|
62
|
-
* rows are both in hand exactly once, so the rows this names and the obligations `scenarios`
|
|
63
|
-
* raises are taken from ONE read of each side. Computed at the composition from `corpus.scenarios`
|
|
64
|
-
* it would be a second walk, free to disagree with the walk the obligations came from — which is
|
|
65
|
-
* the fault this whole reading exists to foreclose.
|
|
66
|
-
*/
|
|
67
|
-
unspecifiedFitnessRows: readonly UnspecifiedFitnessRow[];
|
|
68
6
|
}
|
|
69
|
-
|
|
70
|
-
* THE SOURCES ARRIVE READ, AND THAT IS THE WHOLE OF WHAT MOVED. The edge discovers the target's
|
|
71
|
-
* feature files and reads them ONCE, so the reading a citing run needs is still taken from the same
|
|
72
|
-
* bytes. Two discoveries could disagree about the corpus, and a citation resolved against a corpus
|
|
73
|
-
* the ledger was not built from is exactly the phantom-row fault (@SCN-LNT-009); passing one array
|
|
74
|
-
* preserves that guarantee where a features directory would have re-opened the question inside the
|
|
75
|
-
* engine.
|
|
76
|
-
*/
|
|
77
|
-
export declare function readTargetCorpus(sources: readonly string[], deferralTags: readonly string[],
|
|
78
|
-
/**
|
|
79
|
-
* The target's CONFIGURED ROWS (@SCN-LNT-018) — the CONVERTED route's half of the debit side. It
|
|
80
|
-
* reaches `parseScenarios`, which raises the Evidence Obligations, and `citedRow`, which reads a
|
|
81
|
-
* row back for a run whose CI step states its code (@SCN-LNT-031) — the same rows on both sides,
|
|
82
|
-
* which is the whole reason this reading is composed here.
|
|
83
|
-
*/
|
|
84
|
-
fitnessChecks: FitnessCheckIndex): TargetCorpus;
|
|
7
|
+
export declare function readTargetCorpus(sources: readonly string[], deferralTags: readonly string[]): TargetCorpus;
|
|
85
8
|
//# sourceMappingURL=targetCorpus.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targetCorpus.d.ts","sourceRoot":"","sources":["../../src/parse/targetCorpus.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"targetCorpus.d.ts","sourceRoot":"","sources":["../../src/parse/targetCorpus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAKhF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,cAAc,GAAG,IAAI,CAAC;CACnE;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,YAAY,CAKd"}
|
|
@@ -1,51 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The TARGET's feature corpus read into the readings one reconciliation needs — moved here from
|
|
3
|
-
* the app's ingest edge (3F-3088).
|
|
4
|
-
*
|
|
5
|
-
* WHY IT LIVES IN THE ENGINE. Every line of it is a pure function of sources somebody else already
|
|
6
|
-
* read off disk: the obligation rule is `parseScenarios`, core's own. Sitting at the app edge it
|
|
7
|
-
* was the reason a PUBLISHED module imported core's unpublished `/internal` subpath for five
|
|
8
|
-
* symbols — the fault 3F-3086 repairs. One line made it impure and it was the only one: the feature discovery, which now
|
|
9
|
-
* happens at the edge and arrives as `sources`.
|
|
10
|
-
*
|
|
11
|
-
* THE REGISTRY-KEYED READING THIS FILE ONCE ALSO PRODUCED — `checkHandles` and `citedScn`, the
|
|
12
|
-
* obligation-side observer's feed — RETIRED WITH THE REGISTRY ITSELF (3F-3161, @SCN-LNT-017, the
|
|
13
|
-
* last registry-`scn` scenario). Every check now either states its own row's code on its CI step
|
|
14
|
-
* (`citedRow`, below) or is a converted `@fitness` row read through `domain/fitnessChecks`
|
|
15
|
-
* directly; there is no second discovery left to key a handle set off.
|
|
16
|
-
*/
|
|
17
1
|
import { citationOfCitedRow } from "./fitnessCitations.js";
|
|
18
|
-
import { parseScenarios,
|
|
19
|
-
|
|
20
|
-
* THE SOURCES ARRIVE READ, AND THAT IS THE WHOLE OF WHAT MOVED. The edge discovers the target's
|
|
21
|
-
* feature files and reads them ONCE, so the reading a citing run needs is still taken from the same
|
|
22
|
-
* bytes. Two discoveries could disagree about the corpus, and a citation resolved against a corpus
|
|
23
|
-
* the ledger was not built from is exactly the phantom-row fault (@SCN-LNT-009); passing one array
|
|
24
|
-
* preserves that guarantee where a features directory would have re-opened the question inside the
|
|
25
|
-
* engine.
|
|
26
|
-
*/
|
|
27
|
-
export function readTargetCorpus(sources, deferralTags,
|
|
28
|
-
/**
|
|
29
|
-
* The target's CONFIGURED ROWS (@SCN-LNT-018) — the CONVERTED route's half of the debit side. It
|
|
30
|
-
* reaches `parseScenarios`, which raises the Evidence Obligations, and `citedRow`, which reads a
|
|
31
|
-
* row back for a run whose CI step states its code (@SCN-LNT-031) — the same rows on both sides,
|
|
32
|
-
* which is the whole reason this reading is composed here.
|
|
33
|
-
*/
|
|
34
|
-
fitnessChecks) {
|
|
35
|
-
// NO BARE CHECK TAG RAISES AN OBLIGATION ON A TARGET'S CORPUS. The registered half of the
|
|
36
|
-
// union retired with the registry (3F-3161) and the measured half with the measured axis
|
|
37
|
-
// (3F-3516), so the bare-tag set handed to `parseScenarios` is empty: a fitness obligation is
|
|
38
|
-
// raised by the axis word and a configured row, and by nothing else.
|
|
39
|
-
const scenarios = sources.flatMap((source) => parseScenarios(source, deferralTags, [], fitnessChecks));
|
|
40
|
-
// THE TAGGED WALK THE TWO CORPUS-VS-MANIFEST READINGS SHARE. Kept as its own pass over the
|
|
41
|
-
// sources, and handed to BOTH of them — the disagreement each names is the other's direction, so
|
|
42
|
-
// taking them from one walk is what stops one reading seeing a scenario the other does not.
|
|
43
|
-
const tagged = sources.flatMap((source) => parseTaggedScenarios(source));
|
|
2
|
+
import { parseScenarios, } from "./scenarios.js";
|
|
3
|
+
export function readTargetCorpus(sources, deferralTags) {
|
|
44
4
|
return {
|
|
45
|
-
scenarios,
|
|
46
|
-
citedRow: (citedScn) => citationOfCitedRow(citedScn
|
|
47
|
-
unconfiguredFitnessScenarios: unconfiguredFitnessScenarios(tagged, fitnessChecks),
|
|
48
|
-
unspecifiedFitnessRows: unspecifiedFitnessRows(tagged, fitnessChecks),
|
|
5
|
+
scenarios: sources.flatMap((source) => parseScenarios(source, deferralTags)),
|
|
6
|
+
citedRow: (citedScn) => citationOfCitedRow(citedScn),
|
|
49
7
|
};
|
|
50
8
|
}
|
|
51
9
|
//# sourceMappingURL=targetCorpus.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targetCorpus.js","sourceRoot":"","sources":["../../src/parse/targetCorpus.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"targetCorpus.js","sourceRoot":"","sources":["../../src/parse/targetCorpus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAuB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EACL,cAAc,GAEf,MAAM,gBAAgB,CAAC;AAQxB,MAAM,UAAU,gBAAgB,CAC9B,OAA0B,EAC1B,YAA+B;IAE/B,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC5E,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC;KACrD,CAAC;AACJ,CAAC"}
|