audit-tools 0.42.0 → 0.43.0
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/dispatch/merge-results.mjs +229 -140
- package/dispatch/validate-result.mjs +98 -40
- package/dist/audit/cli/conceptualDispatch.d.ts.map +1 -1
- package/dist/audit/cli/conceptualDispatch.js +35 -3
- package/dist/audit/cli/conceptualDispatch.js.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.d.ts +9 -1
- package/dist/audit/cli/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.js +94 -38
- package/dist/audit/cli/dispatch/hostHandoff.js.map +1 -1
- package/dist/audit/cli/nextStepCommand.d.ts +64 -0
- package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +877 -783
- package/dist/audit/cli/nextStepCommand.js.map +1 -1
- package/dist/audit/cli/nextStepHelpers.d.ts +12 -0
- package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
- package/dist/audit/cli/nextStepHelpers.js +34 -1
- package/dist/audit/cli/nextStepHelpers.js.map +1 -1
- package/dist/audit/cli/steps.d.ts +2 -2
- package/dist/audit/extractors/graph.d.ts +28 -2
- package/dist/audit/extractors/graph.d.ts.map +1 -1
- package/dist/audit/extractors/graph.js +122 -11
- package/dist/audit/extractors/graph.js.map +1 -1
- package/dist/audit/extractors/graphRoutes.d.ts +8 -0
- package/dist/audit/extractors/graphRoutes.d.ts.map +1 -1
- package/dist/audit/extractors/graphRoutes.js +71 -4
- package/dist/audit/extractors/graphRoutes.js.map +1 -1
- package/dist/audit/io/artifacts.d.ts +55 -0
- package/dist/audit/io/artifacts.d.ts.map +1 -1
- package/dist/audit/io/artifacts.js +189 -12
- package/dist/audit/io/artifacts.js.map +1 -1
- package/dist/audit/io/toolingManifest.d.ts +11 -0
- package/dist/audit/io/toolingManifest.d.ts.map +1 -1
- package/dist/audit/io/toolingManifest.js +13 -3
- package/dist/audit/io/toolingManifest.js.map +1 -1
- package/dist/audit/orchestrator/advance.d.ts +64 -0
- package/dist/audit/orchestrator/advance.d.ts.map +1 -1
- package/dist/audit/orchestrator/advance.js +191 -57
- package/dist/audit/orchestrator/advance.js.map +1 -1
- package/dist/audit/orchestrator/charterClarificationExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/charterClarificationExecutor.js +55 -21
- package/dist/audit/orchestrator/charterClarificationExecutor.js.map +1 -1
- package/dist/audit/orchestrator/flowCoverage.d.ts.map +1 -1
- package/dist/audit/orchestrator/flowCoverage.js +7 -10
- package/dist/audit/orchestrator/flowCoverage.js.map +1 -1
- package/dist/audit/orchestrator/flowPlanning.d.ts +54 -1
- package/dist/audit/orchestrator/flowPlanning.d.ts.map +1 -1
- package/dist/audit/orchestrator/flowPlanning.js +77 -18
- package/dist/audit/orchestrator/flowPlanning.js.map +1 -1
- package/dist/audit/orchestrator/flowRequeue.d.ts.map +1 -1
- package/dist/audit/orchestrator/flowRequeue.js +6 -10
- package/dist/audit/orchestrator/flowRequeue.js.map +1 -1
- package/dist/audit/orchestrator/partitionTaskGraph.d.ts.map +1 -1
- package/dist/audit/orchestrator/partitionTaskGraph.js +2 -2
- package/dist/audit/orchestrator/partitionTaskGraph.js.map +1 -1
- package/dist/audit/orchestrator/requeueFold.d.ts.map +1 -1
- package/dist/audit/orchestrator/requeueFold.js +18 -5
- package/dist/audit/orchestrator/requeueFold.js.map +1 -1
- package/dist/audit/orchestrator/staleness.d.ts +24 -1
- package/dist/audit/orchestrator/staleness.d.ts.map +1 -1
- package/dist/audit/orchestrator/staleness.js +147 -16
- package/dist/audit/orchestrator/staleness.js.map +1 -1
- package/dist/audit/orchestrator/syntaxResolutionExecutor.d.ts +26 -0
- package/dist/audit/orchestrator/syntaxResolutionExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/syntaxResolutionExecutor.js +97 -12
- package/dist/audit/orchestrator/syntaxResolutionExecutor.js.map +1 -1
- package/dist/audit/orchestrator/taskBuilder.d.ts.map +1 -1
- package/dist/audit/orchestrator/taskBuilder.js +111 -21
- package/dist/audit/orchestrator/taskBuilder.js.map +1 -1
- package/dist/audit/orchestrator/trivialAudit.d.ts +17 -1
- package/dist/audit/orchestrator/trivialAudit.d.ts.map +1 -1
- package/dist/audit/orchestrator/trivialAudit.js +31 -4
- package/dist/audit/orchestrator/trivialAudit.js.map +1 -1
- package/dist/audit/reporting/synthesis.d.ts.map +1 -1
- package/dist/audit/reporting/synthesis.js +2 -3
- package/dist/audit/reporting/synthesis.js.map +1 -1
- package/dist/audit/reporting/workBlocks.d.ts.map +1 -1
- package/dist/audit/reporting/workBlocks.js +4 -38
- package/dist/audit/reporting/workBlocks.js.map +1 -1
- package/dist/audit/types/analyzerCapability.d.ts +6 -6
- package/dist/audit/types/charterRegister.d.ts +30 -12
- package/dist/audit/types/charterRegister.d.ts.map +1 -1
- package/dist/audit/types/charterRegister.js +22 -9
- package/dist/audit/types/charterRegister.js.map +1 -1
- package/dist/audit/validation/anchorGrounding.d.ts.map +1 -1
- package/dist/audit/validation/anchorGrounding.js +17 -0
- package/dist/audit/validation/anchorGrounding.js.map +1 -1
- package/dist/audit/validation/auditResults.d.ts +17 -0
- package/dist/audit/validation/auditResults.d.ts.map +1 -1
- package/dist/audit/validation/auditResults.js +50 -17
- package/dist/audit/validation/auditResults.js.map +1 -1
- package/dist/remediate/contractPipeline/cyclicSeamResolution.d.ts +48 -0
- package/dist/remediate/contractPipeline/cyclicSeamResolution.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/cyclicSeamResolution.js +128 -0
- package/dist/remediate/contractPipeline/cyclicSeamResolution.js.map +1 -1
- package/dist/remediate/contractPipeline/derive.d.ts +8 -5
- package/dist/remediate/contractPipeline/derive.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/derive.js +8 -16
- package/dist/remediate/contractPipeline/derive.js.map +1 -1
- package/dist/remediate/index.d.ts.map +1 -1
- package/dist/remediate/index.js +43 -2
- package/dist/remediate/index.js.map +1 -1
- package/dist/remediate/intent/intentOrdering.d.ts +13 -5
- package/dist/remediate/intent/intentOrdering.d.ts.map +1 -1
- package/dist/remediate/intent/intentOrdering.js +56 -25
- package/dist/remediate/intent/intentOrdering.js.map +1 -1
- package/dist/remediate/phases/close.d.ts +57 -2
- package/dist/remediate/phases/close.d.ts.map +1 -1
- package/dist/remediate/phases/close.js +260 -36
- package/dist/remediate/phases/close.js.map +1 -1
- package/dist/remediate/state/disposition.d.ts +26 -4
- package/dist/remediate/state/disposition.d.ts.map +1 -1
- package/dist/remediate/state/itemStatus.d.ts +33 -6
- package/dist/remediate/state/itemStatus.d.ts.map +1 -1
- package/dist/remediate/state/itemStatus.js +154 -39
- package/dist/remediate/state/itemStatus.js.map +1 -1
- package/dist/remediate/state/types.d.ts +41 -2
- package/dist/remediate/state/types.d.ts.map +1 -1
- package/dist/remediate/state/types.js.map +1 -1
- package/dist/remediate/steps/contractPipeline.d.ts +287 -15
- package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipeline.js +1664 -987
- package/dist/remediate/steps/contractPipeline.js.map +1 -1
- package/dist/remediate/steps/contractPipelinePrompts.js +1 -1
- package/dist/remediate/steps/contractPipelinePrompts.js.map +1 -1
- package/dist/remediate/steps/dispatch/hostHandoff.d.ts +137 -2
- package/dist/remediate/steps/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch/hostHandoff.js +713 -59
- package/dist/remediate/steps/dispatch/hostHandoff.js.map +1 -1
- package/dist/remediate/steps/finalGate.d.ts +136 -37
- package/dist/remediate/steps/finalGate.d.ts.map +1 -1
- package/dist/remediate/steps/finalGate.js +120 -86
- package/dist/remediate/steps/finalGate.js.map +1 -1
- package/dist/remediate/steps/gateCommands.d.ts +8 -0
- package/dist/remediate/steps/gateCommands.d.ts.map +1 -1
- package/dist/remediate/steps/gateCommands.js +40 -11
- package/dist/remediate/steps/gateCommands.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts +96 -5
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +668 -147
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/remediate/steps/types.d.ts +4 -1
- package/dist/remediate/steps/types.d.ts.map +1 -1
- package/dist/remediate/steps/types.js +10 -0
- package/dist/remediate/steps/types.js.map +1 -1
- package/dist/remediate/validation/artifacts.d.ts +20 -0
- package/dist/remediate/validation/artifacts.d.ts.map +1 -1
- package/dist/remediate/validation/artifacts.js +239 -13
- package/dist/remediate/validation/artifacts.js.map +1 -1
- package/dist/remediate/validation/contractPipelineGates.d.ts +58 -0
- package/dist/remediate/validation/contractPipelineGates.d.ts.map +1 -1
- package/dist/remediate/validation/contractPipelineGates.js +167 -43
- package/dist/remediate/validation/contractPipelineGates.js.map +1 -1
- package/dist/shared/analyzers/acquisitionEngine.d.ts +72 -25
- package/dist/shared/analyzers/acquisitionEngine.d.ts.map +1 -1
- package/dist/shared/analyzers/acquisitionEngine.js +149 -15
- package/dist/shared/analyzers/acquisitionEngine.js.map +1 -1
- package/dist/shared/analyzers/binaryAcquisition.d.ts +27 -2
- package/dist/shared/analyzers/binaryAcquisition.d.ts.map +1 -1
- package/dist/shared/analyzers/binaryAcquisition.js +149 -43
- package/dist/shared/analyzers/binaryAcquisition.js.map +1 -1
- package/dist/shared/analyzers/candidates.d.ts +9 -8
- package/dist/shared/analyzers/candidates.d.ts.map +1 -1
- package/dist/shared/analyzers/candidates.js +96 -64
- package/dist/shared/analyzers/candidates.js.map +1 -1
- package/dist/shared/analyzers/normalizeExternal.d.ts +40 -12
- package/dist/shared/analyzers/normalizeExternal.d.ts.map +1 -1
- package/dist/shared/analyzers/normalizeExternal.js +74 -18
- package/dist/shared/analyzers/normalizeExternal.js.map +1 -1
- package/dist/shared/analyzers/rubocop.d.ts +14 -13
- package/dist/shared/analyzers/rubocop.d.ts.map +1 -1
- package/dist/shared/analyzers/rubocop.js +29 -6
- package/dist/shared/analyzers/rubocop.js.map +1 -1
- package/dist/shared/analyzers/types.d.ts +196 -13
- package/dist/shared/analyzers/types.d.ts.map +1 -1
- package/dist/shared/analyzers/types.js +122 -9
- package/dist/shared/analyzers/types.js.map +1 -1
- package/dist/shared/decompose/charterClarification.d.ts +12 -1
- package/dist/shared/decompose/charterClarification.d.ts.map +1 -1
- package/dist/shared/decompose/charterClarification.js +11 -4
- package/dist/shared/decompose/charterClarification.js.map +1 -1
- package/dist/shared/decompose/charterExtraction.d.ts +20 -10
- package/dist/shared/decompose/charterExtraction.d.ts.map +1 -1
- package/dist/shared/decompose/charterExtraction.js +52 -23
- package/dist/shared/decompose/charterExtraction.js.map +1 -1
- package/dist/shared/decompose/contentCoherence.d.ts +43 -2
- package/dist/shared/decompose/contentCoherence.d.ts.map +1 -1
- package/dist/shared/decompose/contentCoherence.js +109 -5
- package/dist/shared/decompose/contentCoherence.js.map +1 -1
- package/dist/shared/decompose/modularity.d.ts +17 -0
- package/dist/shared/decompose/modularity.d.ts.map +1 -1
- package/dist/shared/decompose/modularity.js +78 -3
- package/dist/shared/decompose/modularity.js.map +1 -1
- package/dist/shared/decompose/workBlockSeams.d.ts +45 -0
- package/dist/shared/decompose/workBlockSeams.d.ts.map +1 -0
- package/dist/shared/decompose/workBlockSeams.js +82 -0
- package/dist/shared/decompose/workBlockSeams.js.map +1 -0
- package/dist/shared/index.d.ts +4 -3
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +4 -2
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/intent/freeFormIntentInterpreter.d.ts +12 -2
- package/dist/shared/intent/freeFormIntentInterpreter.d.ts.map +1 -1
- package/dist/shared/intent/freeFormIntentInterpreter.js +27 -22
- package/dist/shared/intent/freeFormIntentInterpreter.js.map +1 -1
- package/dist/shared/intent/pathScope.d.ts +12 -1
- package/dist/shared/intent/pathScope.d.ts.map +1 -1
- package/dist/shared/intent/pathScope.js +56 -19
- package/dist/shared/intent/pathScope.js.map +1 -1
- package/dist/shared/intent/sharedIntentData.d.ts +19 -1
- package/dist/shared/intent/sharedIntentData.d.ts.map +1 -1
- package/dist/shared/intent/sharedIntentData.js +33 -8
- package/dist/shared/intent/sharedIntentData.js.map +1 -1
- package/dist/shared/io/fileLock.d.ts +12 -0
- package/dist/shared/io/fileLock.d.ts.map +1 -1
- package/dist/shared/io/fileLock.js +48 -5
- package/dist/shared/io/fileLock.js.map +1 -1
- package/dist/shared/io/json.d.ts +13 -0
- package/dist/shared/io/json.d.ts.map +1 -1
- package/dist/shared/io/json.js +19 -1
- package/dist/shared/io/json.js.map +1 -1
- package/dist/shared/reporting/auditDeliverable.d.ts.map +1 -1
- package/dist/shared/reporting/auditDeliverable.js +8 -3
- package/dist/shared/reporting/auditDeliverable.js.map +1 -1
- package/dist/shared/steps/stepEmissionScaffold.d.ts +69 -0
- package/dist/shared/steps/stepEmissionScaffold.d.ts.map +1 -0
- package/dist/shared/steps/stepEmissionScaffold.js +83 -0
- package/dist/shared/steps/stepEmissionScaffold.js.map +1 -0
- package/dist/shared/submission/handRecovery.d.ts.map +1 -1
- package/dist/shared/submission/handRecovery.js +69 -4
- package/dist/shared/submission/handRecovery.js.map +1 -1
- package/dist/shared/submission/submissionIdentity.d.ts +10 -1
- package/dist/shared/submission/submissionIdentity.d.ts.map +1 -1
- package/dist/shared/submission/submissionIdentity.js +12 -3
- package/dist/shared/submission/submissionIdentity.js.map +1 -1
- package/dist/shared/submission/submissionLedger.d.ts +43 -2
- package/dist/shared/submission/submissionLedger.d.ts.map +1 -1
- package/dist/shared/submission/submissionLedger.js +50 -7
- package/dist/shared/submission/submissionLedger.js.map +1 -1
- package/dist/shared/tooling/allowlistedExec.d.ts +9 -0
- package/dist/shared/tooling/allowlistedExec.d.ts.map +1 -1
- package/dist/shared/tooling/allowlistedExec.js +19 -2
- package/dist/shared/tooling/allowlistedExec.js.map +1 -1
- package/dist/shared/types/charter.d.ts +24 -0
- package/dist/shared/types/charter.d.ts.map +1 -1
- package/dist/shared/types/charter.js +9 -0
- package/dist/shared/types/charter.js.map +1 -1
- package/dist/shared/types/finding.d.ts +105 -53
- package/dist/shared/types/finding.d.ts.map +1 -1
- package/dist/shared/types/finding.js +38 -11
- package/dist/shared/types/finding.js.map +1 -1
- package/dist/shared/types/remediationOutcome.d.ts +282 -9
- package/dist/shared/types/remediationOutcome.d.ts.map +1 -1
- package/dist/shared/types/remediationOutcome.js +174 -1
- package/dist/shared/types/remediationOutcome.js.map +1 -1
- package/dist/shared/validation/findingsReport.d.ts.map +1 -1
- package/dist/shared/validation/findingsReport.js +19 -1
- package/dist/shared/validation/findingsReport.js.map +1 -1
- package/package.json +2 -1
- package/remediate-code.mjs +15 -0
- package/wrapper/remediate-code-wrapper-install-hosts.mjs +45 -4
- package/wrapper/remediate-code-wrapper-install-renderers.mjs +12 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowPlanning.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/flowPlanning.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flowPlanning.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/flowPlanning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AA8B/D;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,EAAE,CAErE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,MAAM,eAAe,GAAG,eAAe,EAAE,GAAG,iBAAiB,CAAC;AAkBpE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,oBAAoB,EACnC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,EACvD,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAC5B,eAAe,CAiEjB"}
|
|
@@ -1,26 +1,81 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { LENS_REGISTRY, isLens } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* The FLOW-LENS POLICY — one source, three call sites.
|
|
4
|
+
*
|
|
5
|
+
* A flow's declared `concerns` are free strings; the policy says which of them
|
|
6
|
+
* are lenses a flow may be PLANNED against (here), marked REQUIRED for coverage
|
|
7
|
+
* against (`buildFlowCoverage`), and REQUEUED against (`buildFlowRequeueTasks`).
|
|
8
|
+
* All three must answer identically or a flow can be required under a lens
|
|
9
|
+
* planning refuses to schedule.
|
|
10
|
+
*
|
|
11
|
+
* They did not, and the divergence was the defect: this module hand-copied a
|
|
12
|
+
* seven-entry lens array (security, reliability, correctness, data_integrity,
|
|
13
|
+
* operability, performance, observability) while coverage and requeue both
|
|
14
|
+
* admitted every canonical lens through `isLens`. A flow whose only concern was
|
|
15
|
+
* maintainability, architecture, tests, or config_deployment therefore got zero
|
|
16
|
+
* planning blocks while coverage still marked that lens required — the flow
|
|
17
|
+
* could never reach status `complete` via the planning path and was only
|
|
18
|
+
* rescued by the requeue fallback, which over-produces one task per
|
|
19
|
+
* (flow, lens, path) instead of the single claimed block planning would emit.
|
|
20
|
+
*
|
|
21
|
+
* The policy is now drawn, by all three, from the ONE lens registry in
|
|
22
|
+
* `src/audit/types.ts`: membership is `isLens` (derived from `ALL_LENSES`) and
|
|
23
|
+
* ordering is `order_weight` (`LENS_REGISTRY`). Adding a lens to that registry
|
|
24
|
+
* reaches flow planning with no edit here.
|
|
25
|
+
*/
|
|
26
|
+
const FLOW_LENS_ORDER = new Map(LENS_REGISTRY.map((definition) => [definition.id, definition.order_weight]));
|
|
27
|
+
/**
|
|
28
|
+
* Select the reviewable lenses from a flow's declared concerns — the single
|
|
29
|
+
* membership draw shared by planning, coverage, and requeue. A concern that is
|
|
30
|
+
* not a canonical lens is SKIPPED rather than thrown on, consistent with the
|
|
31
|
+
* filter-based guards elsewhere in the orchestrator: one stray non-canonical
|
|
32
|
+
* concern must not abort a whole flow's planning or requeue.
|
|
33
|
+
*/
|
|
34
|
+
export function selectFlowLenses(concerns) {
|
|
35
|
+
return concerns.filter((concern) => isLens(concern));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Task-ordering priority for a claimed flow block — lower sorts earlier.
|
|
39
|
+
* Derived from {@link LENS_REGISTRY}'s `order_weight` so no second hand-copied
|
|
40
|
+
* lens list backs the ordering. A non-canonical lens (which the membership draw
|
|
41
|
+
* above already excludes) sorts last.
|
|
42
|
+
*/
|
|
43
|
+
export function flowLensPriority(lens) {
|
|
44
|
+
return FLOW_LENS_ORDER.get(lens) ?? Number.MAX_SAFE_INTEGER;
|
|
45
|
+
}
|
|
10
46
|
function lensPathKey(lens, path) {
|
|
11
47
|
return `${lens}:${path}`;
|
|
12
48
|
}
|
|
13
|
-
function
|
|
14
|
-
|
|
15
|
-
|
|
49
|
+
function attachClaimContract(blocks, pending, assigned) {
|
|
50
|
+
return Object.defineProperties(blocks, {
|
|
51
|
+
blocks: { value: blocks, enumerable: false },
|
|
52
|
+
pending: { value: pending, enumerable: false },
|
|
53
|
+
assigned: { value: assigned, enumerable: false },
|
|
54
|
+
});
|
|
16
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Claim the highest-priority critical-flow review blocks out of the pending
|
|
58
|
+
* work set.
|
|
59
|
+
*
|
|
60
|
+
* PRECONDITION (seam audit-coverage-path-keyspace → here, caller to callee):
|
|
61
|
+
* every path in `criticalFlows`, in `pendingByLens`, and in the `lens:path`
|
|
62
|
+
* keys of `assigned` is already normalized into ONE key space by the caller.
|
|
63
|
+
* This module does no normalizing of its own — an unnormalized path simply
|
|
64
|
+
* fails to intersect and the flow is silently under-claimed. The sole caller,
|
|
65
|
+
* `buildChunkedAuditTasks`, now SATISFIES that precondition by normalizing every
|
|
66
|
+
* repo path once at its own boundary, rather than assuming it upstream.
|
|
67
|
+
*
|
|
68
|
+
* NO WRITE-BACK: the post-claim state is reported ONLY on the returned
|
|
69
|
+
* {@link FlowClaimContract}. The parameters are `Readonly` collections so
|
|
70
|
+
* reintroducing an in-place mutation is a compile error, not a convention —
|
|
71
|
+
* the by-reference channel this used to ALSO write through was a second,
|
|
72
|
+
* invisible return value that a caller had to know to look for.
|
|
73
|
+
*/
|
|
17
74
|
export function claimFlowReviewBlocks(criticalFlows, pendingByLens, assigned) {
|
|
18
75
|
const candidates = [];
|
|
19
76
|
for (const flow of criticalFlows.flows) {
|
|
20
77
|
const flowPaths = [...new Set(flow.paths)].sort((a, b) => a.localeCompare(b));
|
|
21
|
-
const desiredLenses = flow.concerns
|
|
22
|
-
.filter((concern) => FLOW_REVIEW_LENSES.includes(concern))
|
|
23
|
-
.sort((a, b) => flowLensPriority(a) - flowLensPriority(b));
|
|
78
|
+
const desiredLenses = selectFlowLenses(flow.concerns).sort((a, b) => flowLensPriority(a) - flowLensPriority(b));
|
|
24
79
|
for (const lens of desiredLenses) {
|
|
25
80
|
const pendingPaths = pendingByLens.get(lens);
|
|
26
81
|
if (!pendingPaths || pendingPaths.size === 0) {
|
|
@@ -46,20 +101,24 @@ export function claimFlowReviewBlocks(criticalFlows, pendingByLens, assigned) {
|
|
|
46
101
|
return lensDelta;
|
|
47
102
|
return a.flow_id.localeCompare(b.flow_id);
|
|
48
103
|
});
|
|
104
|
+
// Post-claim state, derived from the arguments into fresh collections.
|
|
105
|
+
const claimedKeys = new Set(assigned);
|
|
106
|
+
const remainingPending = new Map([...pendingByLens].map(([lens, paths]) => [lens, new Set(paths)]));
|
|
49
107
|
const blocks = [];
|
|
50
108
|
for (const candidate of candidates) {
|
|
51
|
-
const unclaimedPaths = candidate.file_paths.filter((path) => !
|
|
109
|
+
const unclaimedPaths = candidate.file_paths.filter((path) => !claimedKeys.has(lensPathKey(candidate.lens, path)));
|
|
52
110
|
if (unclaimedPaths.length === 0) {
|
|
53
111
|
continue;
|
|
54
112
|
}
|
|
55
113
|
for (const path of unclaimedPaths) {
|
|
56
|
-
|
|
114
|
+
claimedKeys.add(lensPathKey(candidate.lens, path));
|
|
115
|
+
remainingPending.get(candidate.lens)?.delete(path);
|
|
57
116
|
}
|
|
58
117
|
blocks.push({
|
|
59
118
|
...candidate,
|
|
60
119
|
file_paths: unclaimedPaths,
|
|
61
120
|
});
|
|
62
121
|
}
|
|
63
|
-
return blocks;
|
|
122
|
+
return attachClaimContract(blocks, remainingPending, claimedKeys);
|
|
64
123
|
}
|
|
65
124
|
//# sourceMappingURL=flowPlanning.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowPlanning.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/flowPlanning.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flowPlanning.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/flowPlanning.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGpD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,eAAe,GAAgC,IAAI,GAAG,CAC1D,aAAa,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,CAC5E,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAA4B;IAC3D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAmB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC;AAC9D,CAAC;AA6BD,SAAS,WAAW,CAAC,IAAY,EAAE,IAAY;IAC7C,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,mBAAmB,CAC1B,MAAyB,EACzB,OAAiD,EACjD,QAA6B;IAE7B,OAAO,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE;QACrC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE;QAC5C,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE;QAC9C,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE;KACjD,CAAoB,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qBAAqB,CACnC,aAAmC,EACnC,aAAuD,EACvD,QAA6B;IAE7B,MAAM,UAAU,GAAsB,EAAE,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACvD,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CACnB,CAAC;QACF,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACxD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CACpD,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBAC7C,SAAS;YACX,CAAC;YAED,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACrE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,SAAS;YACX,CAAC;YAED,UAAU,CAAC,IAAI,CAAC;gBACd,OAAO,EAAE,IAAI,CAAC,EAAE;gBAChB,IAAI;gBACJ,UAAU,EAAE,SAAS;aACtB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,MAAM,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAC5D,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACtC,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtE,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACtC,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,uEAAuE;IACvE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,QAAQ,CAAC,CAAC;IAC9C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAClE,CAAC;IAEF,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,cAAc,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAChD,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAC9D,CAAC;QACF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,SAAS;QACX,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAClC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACnD,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;YACV,GAAG,SAAS;YACZ,UAAU,EAAE,cAAc;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,EAAE,WAAW,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowRequeue.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/flowRequeue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAQ,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"flowRequeue.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/flowRequeue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAQ,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AA6B/D,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,oBAAoB,EACnC,YAAY,EAAE,oBAAoB,EAClC,cAAc,EAAE,cAAc,EAC9B,uBAAuB,CAAC,EAAE,uBAAuB,EAAE,GAClD,SAAS,EAAE,CAkEb"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { selectFlowLenses } from "./flowPlanning.js";
|
|
2
2
|
import { getExternalSignalPaths } from "./requeueUtils.js";
|
|
3
3
|
function taskPriority(hasExternalSignal, lens) {
|
|
4
4
|
if (hasExternalSignal &&
|
|
@@ -25,9 +25,11 @@ export function buildFlowRequeueTasks(criticalFlows, flowCoverage, coverageMatri
|
|
|
25
25
|
if (!flow) {
|
|
26
26
|
continue;
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
// Requeue follows the SAME flow-lens policy planning claims against and
|
|
29
|
+
// coverage marks required against — `selectFlowLenses`, drawn from the one
|
|
30
|
+
// lens registry. A non-canonical lens recorded in flow coverage is skipped
|
|
31
|
+
// (not thrown on): one stray value must not abort the whole requeue.
|
|
32
|
+
const requiredLenses = selectFlowLenses(Array.isArray(record.required_lenses) ? record.required_lenses : []);
|
|
31
33
|
const completedLenses = new Set(Array.isArray(record.completed_lenses)
|
|
32
34
|
? record.completed_lenses.filter((lens) => typeof lens === "string")
|
|
33
35
|
: []);
|
|
@@ -36,12 +38,6 @@ export function buildFlowRequeueTasks(criticalFlows, flowCoverage, coverageMatri
|
|
|
36
38
|
? flow.paths.filter((path) => typeof path === "string")
|
|
37
39
|
: [];
|
|
38
40
|
for (const lensName of missingLenses) {
|
|
39
|
-
// Skip (rather than throw on) an unsupported lens value, consistent with
|
|
40
|
-
// the filter-based lens guards elsewhere in the orchestrator: a stray
|
|
41
|
-
// non-canonical lens in flow coverage should not abort the whole requeue.
|
|
42
|
-
if (!isLens(lensName)) {
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
41
|
for (const path of flowPaths) {
|
|
46
42
|
if (!fileStillNeedsLens(coverageByPath, path, lensName)) {
|
|
47
43
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowRequeue.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/flowRequeue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flowRequeue.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/flowRequeue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"partitionTaskGraph.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/partitionTaskGraph.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"partitionTaskGraph.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/partitionTaskGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAEhC,qEAAqE;AACrE,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,qBAAqB,CAAC;IACvC,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AA4BD;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,iBAAiB,EACxB,GAAG,QAAQ,EAAE,SAAS,OAAO,EAAE,GAC9B,sBAAsB,CAkCxB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildContentCoherenceTrace, } from "../../shared/decompose/contentCoherence.js";
|
|
1
|
+
import { TASK_DRAW_COHERENCE_POLICY, buildContentCoherenceTrace, } from "../../shared/decompose/contentCoherence.js";
|
|
2
2
|
import { TaskAffinityGraphSchema, } from "./taskAffinityGraph.js";
|
|
3
3
|
function compareCodeUnits(left, right) {
|
|
4
4
|
return left < right ? -1 : left > right ? 1 : 0;
|
|
@@ -37,7 +37,7 @@ export function buildTaskCoherencePartition(input, ..._ignored) {
|
|
|
37
37
|
tags: node.lens.length > 0 ? [node.lens] : [],
|
|
38
38
|
})),
|
|
39
39
|
relationships: relationshipsFromGraph(graph),
|
|
40
|
-
});
|
|
40
|
+
}, TASK_DRAW_COHERENCE_POLICY);
|
|
41
41
|
const nodeById = new Map(graph.nodes.map((node) => [node.task_id, node]));
|
|
42
42
|
const packets = coherenceTrace.components.map((taskIds, index) => {
|
|
43
43
|
const nodes = taskIds.map((taskId) => nodeById.get(taskId));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"partitionTaskGraph.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/partitionTaskGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,GAG3B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EACL,uBAAuB,GAExB,MAAM,wBAAwB,CAAC;AAgBhC,SAAS,gBAAgB,CAAC,IAAY,EAAE,KAAa;IACnD,OAAO,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAwB;IAExB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAwC,CAAC;IAChE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG;YACZ,IAAI,CAAC,IAAI;YACT,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;SAC9D,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,YAAY,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,SAAS,YAAY,CAAC,KAAK,SAAS,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAChD,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;QACpE,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,KAAK,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC;QACxE,OAAO,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAAwB,EACxB,GAAG,QAA4B;IAE/B,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,cAAc,GAAG,0BAA0B,
|
|
1
|
+
{"version":3,"file":"partitionTaskGraph.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/partitionTaskGraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requeueFold.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/requeueFold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,SAAS,SAAS,EAAE,EAClC,UAAU,EAAE,SAAS,SAAS,EAAE,EAChC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,GAClC,SAAS,EAAE,CAkBb;
|
|
1
|
+
{"version":3,"file":"requeueFold.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/requeueFold.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7C;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,SAAS,SAAS,EAAE,EAClC,UAAU,EAAE,SAAS,SAAS,EAAE,EAChC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,GAClC,SAAS,EAAE,CAkBb;AA4BD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,QAAQ,CAAC,YAAY,EAAE,SAAS,SAAS,EAAE,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C,GAAG,SAAS,EAAE,CAUd"}
|
|
@@ -29,6 +29,23 @@ export function selectUncoveredRequeueTasks(requeueTasks, auditTasks, effectiveL
|
|
|
29
29
|
return !fullyCovered;
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* The requeue fold's `file_line_counts` enrichment (INV-PLAN-PERSIST-COMPLETE
|
|
34
|
+
* half 2) — a MEASURED-ONLY projection of the line index over a task's paths.
|
|
35
|
+
*
|
|
36
|
+
* `file_line_counts` is a `Record<string, number>`, schema-constrained downstream
|
|
37
|
+
* to `z.number().int().min(0)`. A path is therefore either present with a real
|
|
38
|
+
* count or ABSENT: an absent index key, a `null`, and the unmeasured sentinel
|
|
39
|
+
* (`UNMEASURED_LINE_COUNT`, NaN — which JSON-serializes as `null`) all drop the
|
|
40
|
+
* key rather than emit a value the contract cannot hold. This filter is the only
|
|
41
|
+
* thing standing between the diagnostic index's "unmeasured" concept and a
|
|
42
|
+
* persisted numeric contract, so it is stated once, here, as its own unit.
|
|
43
|
+
*/
|
|
44
|
+
function measuredLineCounts(filePaths, lineIndex) {
|
|
45
|
+
return Object.fromEntries(filePaths
|
|
46
|
+
.filter((path) => lineIndex[path] != null && !isUnmeasuredLineCount(lineIndex[path]))
|
|
47
|
+
.map((path) => [path, lineIndex[path]]));
|
|
48
|
+
}
|
|
32
49
|
/**
|
|
33
50
|
* Select the genuinely-uncovered requeue tasks and enrich the survivors with
|
|
34
51
|
* line-count hints — the whole fold, so neither draw re-derives half of it.
|
|
@@ -40,11 +57,7 @@ export function foldPendingRequeueTasks(params) {
|
|
|
40
57
|
const { lineIndex } = params;
|
|
41
58
|
return selectUncoveredRequeueTasks(params.requeueTasks, params.auditTasks, params.effectiveLenses).map((task) => ({
|
|
42
59
|
...task,
|
|
43
|
-
file_line_counts:
|
|
44
|
-
// Exclude the unmeasured sentinel (NaN) alongside absent keys: NaN would
|
|
45
|
-
// JSON-serialize as null and violate the numeric file_line_counts contract.
|
|
46
|
-
.filter((path) => lineIndex[path] != null && !isUnmeasuredLineCount(lineIndex[path]))
|
|
47
|
-
.map((path) => [path, lineIndex[path]])),
|
|
60
|
+
file_line_counts: measuredLineCounts(task.file_paths, lineIndex),
|
|
48
61
|
}));
|
|
49
62
|
}
|
|
50
63
|
//# sourceMappingURL=requeueFold.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requeueFold.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/requeueFold.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B,CACzC,YAAkC,EAClC,UAAgC,EAChC,eAAmC;IAEnC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;QACvE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtD,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,aAAa,GACjB,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IAClE,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAClC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC5C,IAAI,aAAa,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1E,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,YAAY,GAChB,OAAO,KAAK,SAAS;YACrB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,YAAY,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"requeueFold.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/requeueFold.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,UAAU,2BAA2B,CACzC,YAAkC,EAClC,UAAgC,EAChC,eAAmC;IAEnC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;QACvE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtD,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,aAAa,GACjB,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IAClE,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAClC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC5C,IAAI,aAAa,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1E,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,YAAY,GAChB,OAAO,KAAK,SAAS;YACrB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,YAAY,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,kBAAkB,CACzB,SAA4B,EAC5B,SAAiC;IAEjC,OAAO,MAAM,CAAC,WAAW,CACvB,SAAS;SACN,MAAM,CACL,CAAC,IAAI,EAAE,EAAE,CACP,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CACrE;SACA,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAC1C,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAKvC;IACC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAC7B,OAAO,2BAA2B,CAChC,MAAM,CAAC,YAAY,EACnB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,eAAe,CACvB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACf,GAAG,IAAI;QACP,gBAAgB,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;KACjE,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
import type { ArtifactBundle } from "../io/artifacts.js";
|
|
2
|
+
/**
|
|
3
|
+
* The staleness pass's result: the stale set, carrying the DEFERRED set beside
|
|
4
|
+
* it (INV-SSP-DEFERRED-SET-REPORTED).
|
|
5
|
+
*
|
|
6
|
+
* `deferred` names every present downstream whose staleness this call declined
|
|
7
|
+
* to decide because the edge from a stale-and-pending upstream is
|
|
8
|
+
* slice-projected — the compare only becomes meaningful once that upstream has
|
|
9
|
+
* actually re-derived and restamped its metadata (see the transitive-closure
|
|
10
|
+
* comment below). A deferral is NOT "not stale": it is "not decided yet", and a
|
|
11
|
+
* caller that treats a single result as the full truth while `deferred` is
|
|
12
|
+
* non-empty is under-reporting. Reporting it is what makes that visible instead
|
|
13
|
+
* of silent — the consolidated staleness record NAMES the deferred artifacts.
|
|
14
|
+
*
|
|
15
|
+
* It is a `Set<string>` SUBCLASS on purpose: every consumer that only wants the
|
|
16
|
+
* stale set (`deriveAuditState`, the drain boundary) keeps its `Set<string>`
|
|
17
|
+
* type and behaviour unchanged, so the deferred channel can never be dropped by
|
|
18
|
+
* a caller "forgetting" a second return value.
|
|
19
|
+
*/
|
|
20
|
+
export declare class StaleArtifactSet extends Set<string> {
|
|
21
|
+
/** Downstreams held behind a slice projection this call — always disjoint from the stale set. */
|
|
22
|
+
readonly deferred: ReadonlySet<string>;
|
|
23
|
+
constructor(stale?: Iterable<string>, deferred?: Iterable<string>);
|
|
24
|
+
}
|
|
2
25
|
/** Options controlling the staleness pass's observability side effect. */
|
|
3
26
|
export interface StalenessOptions {
|
|
4
27
|
/**
|
|
@@ -24,5 +47,5 @@ export declare function emitStalenessRecord(stale: Set<string>, reason?: string)
|
|
|
24
47
|
* consolidated record with the migration `reason`, matching the inline record.
|
|
25
48
|
*/
|
|
26
49
|
export declare function isMetadataMigrationStaleness(bundle: ArtifactBundle): boolean;
|
|
27
|
-
export declare function computeStaleArtifacts(bundle: ArtifactBundle, options?: StalenessOptions):
|
|
50
|
+
export declare function computeStaleArtifacts(bundle: ArtifactBundle, options?: StalenessOptions): StaleArtifactSet;
|
|
28
51
|
//# sourceMappingURL=staleness.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staleness.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/staleness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AA6BzD,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAgBD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,
|
|
1
|
+
{"version":3,"file":"staleness.d.ts","sourceRoot":"","sources":["../../../src/audit/orchestrator/staleness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AA6BzD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,gBAAiB,SAAQ,GAAG,CAAC,MAAM,CAAC;IAC/C,iGAAiG;IACjG,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;gBAE3B,KAAK,GAAE,QAAQ,CAAC,MAAM,CAAM,EAAE,QAAQ,GAAE,QAAQ,CAAC,MAAM,CAAM;CAM1E;AAgED,0EAA0E;AAC1E,MAAM,WAAW,gBAAgB;IAC/B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAgBD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAoBN;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAG5E;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,gBAAqB,GAC7B,gBAAgB,CAwMlB"}
|
|
@@ -13,6 +13,82 @@ function computeContentHash(artifactName, bundle) {
|
|
|
13
13
|
// The canonical "X depends on Y" table (ARC-cebe3421) — same single source of
|
|
14
14
|
// truth computeArtifactMetadata records against.
|
|
15
15
|
const ARTIFACT_DEPENDENCIES_MAP = ARTIFACT_DEPENDS_ON_MAP;
|
|
16
|
+
/**
|
|
17
|
+
* The staleness pass's result: the stale set, carrying the DEFERRED set beside
|
|
18
|
+
* it (INV-SSP-DEFERRED-SET-REPORTED).
|
|
19
|
+
*
|
|
20
|
+
* `deferred` names every present downstream whose staleness this call declined
|
|
21
|
+
* to decide because the edge from a stale-and-pending upstream is
|
|
22
|
+
* slice-projected — the compare only becomes meaningful once that upstream has
|
|
23
|
+
* actually re-derived and restamped its metadata (see the transitive-closure
|
|
24
|
+
* comment below). A deferral is NOT "not stale": it is "not decided yet", and a
|
|
25
|
+
* caller that treats a single result as the full truth while `deferred` is
|
|
26
|
+
* non-empty is under-reporting. Reporting it is what makes that visible instead
|
|
27
|
+
* of silent — the consolidated staleness record NAMES the deferred artifacts.
|
|
28
|
+
*
|
|
29
|
+
* It is a `Set<string>` SUBCLASS on purpose: every consumer that only wants the
|
|
30
|
+
* stale set (`deriveAuditState`, the drain boundary) keeps its `Set<string>`
|
|
31
|
+
* type and behaviour unchanged, so the deferred channel can never be dropped by
|
|
32
|
+
* a caller "forgetting" a second return value.
|
|
33
|
+
*/
|
|
34
|
+
export class StaleArtifactSet extends Set {
|
|
35
|
+
/** Downstreams held behind a slice projection this call — always disjoint from the stale set. */
|
|
36
|
+
deferred;
|
|
37
|
+
constructor(stale = [], deferred = []) {
|
|
38
|
+
super(stale);
|
|
39
|
+
// A downstream that ended up stale by some OTHER path was decided, not
|
|
40
|
+
// deferred — the two sets are disjoint by construction.
|
|
41
|
+
this.deferred = new Set([...deferred].filter((name) => !this.has(name)));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Classify one artifact's readability against its recorded metadata entry.
|
|
46
|
+
* An artifact the manifest does not track has nothing to compare against, so it
|
|
47
|
+
* reads as `intact` (the downstream-of-absent fail-safe below is what covers
|
|
48
|
+
* that case).
|
|
49
|
+
*
|
|
50
|
+
* `partial` is reported only for an artifact with declared upstreams: the
|
|
51
|
+
* exemption is literally the `.length === 0` gate on `ARTIFACT_DEPENDS_ON_MAP`
|
|
52
|
+
* below — a MAP-DECLARED LEAF, which is NOT a synonym for an input (several
|
|
53
|
+
* leaves are pipeline-produced). For a true host-append input the exemption is
|
|
54
|
+
* FORCED: an appended input stales only its DOWNSTREAM, pinned by
|
|
55
|
+
* agent-feedback-reflections.test.ts. For a leaf whose own producing obligation
|
|
56
|
+
* gates on its staleness (state.ts's `syntax_resolved`, `confirm_intent`) it is
|
|
57
|
+
* a recorded CHOICE, not a necessity — this pass simply never asserts `partial`
|
|
58
|
+
* for it. Either way a truncated leaf body is caught only through its
|
|
59
|
+
* dependents' hash compare, or at its producer's next restamp.
|
|
60
|
+
*/
|
|
61
|
+
function classifyArtifactPresence(bundle, metadata, artifactName) {
|
|
62
|
+
if (!present(bundle, artifactName))
|
|
63
|
+
return "absent";
|
|
64
|
+
const entry = metadata.artifacts[artifactName];
|
|
65
|
+
if (!entry)
|
|
66
|
+
return "intact";
|
|
67
|
+
if ((ARTIFACT_DEPENDENCIES_MAP[artifactName] ?? []).length === 0) {
|
|
68
|
+
return "intact";
|
|
69
|
+
}
|
|
70
|
+
// An UNHASHABLE body is `partial` too, and the classification must happen
|
|
71
|
+
// here rather than escaping: `hashArtifactValue`'s canonicalizer throws on a
|
|
72
|
+
// malformed `audit_tasks.json` / `task_affinity_graph.json`
|
|
73
|
+
// (shared/affinityArtifacts.ts — a dangling edge, a duplicate id, a missing
|
|
74
|
+
// field), and this pass reaches every tracked artifact unconditionally, so a
|
|
75
|
+
// truncated affinity body would otherwise take down the whole staleness
|
|
76
|
+
// computation — the shape-mismatch throw the migration fail-safe below
|
|
77
|
+
// forbids. A body that cannot be hashed is definitionally not what the
|
|
78
|
+
// manifest describes, which is exactly `partial`, and it converges the same
|
|
79
|
+
// way: the next `computeArtifactMetadata` restamps (or fails loudly in the
|
|
80
|
+
// producer, where a malformed body IS an error).
|
|
81
|
+
let currentHash;
|
|
82
|
+
try {
|
|
83
|
+
currentHash = computeContentHash(artifactName, bundle);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return "partial";
|
|
87
|
+
}
|
|
88
|
+
if (currentHash === undefined)
|
|
89
|
+
return "absent";
|
|
90
|
+
return entry.content_hash === currentHash ? "intact" : "partial";
|
|
91
|
+
}
|
|
16
92
|
/**
|
|
17
93
|
* Emit the single canonical staleness stderr record for a computed stale set.
|
|
18
94
|
* Kept separate from `computeStaleArtifacts` so the pure staleness computation
|
|
@@ -35,15 +111,21 @@ export function resetStalenessDedup() {
|
|
|
35
111
|
lastEmittedStalenessKey = null;
|
|
36
112
|
}
|
|
37
113
|
export function emitStalenessRecord(stale, reason) {
|
|
38
|
-
|
|
114
|
+
// INV-SSP-DEFERRED-SET-REPORTED: a stale set computed by this module carries
|
|
115
|
+
// its deferred downstreams; a bare `Set` (a caller reporting a hand-built set)
|
|
116
|
+
// simply has none. The record NAMES them — omitting a deferred downstream is
|
|
117
|
+
// exactly the silent under-report this reporting exists to make impossible.
|
|
118
|
+
const deferred = stale instanceof StaleArtifactSet ? [...stale.deferred].sort() : [];
|
|
119
|
+
if (stale.size === 0 && deferred.length === 0)
|
|
39
120
|
return;
|
|
40
|
-
const key = JSON.stringify([[...stale].sort(), reason ?? null]);
|
|
121
|
+
const key = JSON.stringify([[...stale].sort(), deferred, reason ?? null]);
|
|
41
122
|
if (key === lastEmittedStalenessKey)
|
|
42
123
|
return;
|
|
43
124
|
lastEmittedStalenessKey = key;
|
|
44
125
|
process.stderr.write(JSON.stringify({
|
|
45
126
|
kind: "staleness",
|
|
46
127
|
stale_artifacts: [...stale].sort(),
|
|
128
|
+
...(deferred.length > 0 ? { deferred_artifacts: deferred } : {}),
|
|
47
129
|
...(reason ? { reason } : {}),
|
|
48
130
|
ts: new Date().toISOString(),
|
|
49
131
|
}) + "\n");
|
|
@@ -61,6 +143,10 @@ export function isMetadataMigrationStaleness(bundle) {
|
|
|
61
143
|
export function computeStaleArtifacts(bundle, options = {}) {
|
|
62
144
|
const emit = options.emit ?? true;
|
|
63
145
|
const stale = new Set();
|
|
146
|
+
// Downstreams the transitive-closure walk declined to decide because a slice
|
|
147
|
+
// projection guards the edge from a stale-and-pending upstream — reported to
|
|
148
|
+
// the caller and named in the emitted record (INV-SSP-DEFERRED-SET-REPORTED).
|
|
149
|
+
const deferred = new Set();
|
|
64
150
|
const metadata = bundle.artifact_metadata;
|
|
65
151
|
// Metadata-migration fail-safe (CE-007): an old-shape (pre-F1) manifest —
|
|
66
152
|
// present but absent/older `metadata_schema_version`, or that would not decode
|
|
@@ -75,9 +161,13 @@ export function computeStaleArtifacts(bundle, options = {}) {
|
|
|
75
161
|
if (present(bundle, artifactName))
|
|
76
162
|
stale.add(artifactName);
|
|
77
163
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
164
|
+
// Everything present is already stale — nothing is held back, so the
|
|
165
|
+
// degrade reports an EMPTY deferred set (never an absent one).
|
|
166
|
+
const migrationStale = new StaleArtifactSet(stale);
|
|
167
|
+
if (emit) {
|
|
168
|
+
emitStalenessRecord(migrationStale, "metadata_schema_version_migration");
|
|
169
|
+
}
|
|
170
|
+
return migrationStale;
|
|
81
171
|
}
|
|
82
172
|
if (metadata) {
|
|
83
173
|
for (const [artifactName, entry] of Object.entries(metadata.artifacts)) {
|
|
@@ -142,18 +232,49 @@ export function computeStaleArtifacts(bundle, options = {}) {
|
|
|
142
232
|
}
|
|
143
233
|
}
|
|
144
234
|
if (metadata) {
|
|
145
|
-
|
|
146
|
-
|
|
235
|
+
// Presence pass over every artifact this manifest tracks (plus every DAG
|
|
236
|
+
// upstream), classifying each into the THREE states an ArtifactBundle can
|
|
237
|
+
// actually hold — `absent`, `partial`, `intact` — rather than the
|
|
238
|
+
// present/absent pair alone.
|
|
239
|
+
//
|
|
240
|
+
// `partial` is the one that used to be invisible: an artifact PRESENT in the
|
|
241
|
+
// bundle whose body no longer hashes to the `content_hash` recorded for it
|
|
242
|
+
// (a truncated / partially-written / externally-mutated copy). Present/absent
|
|
243
|
+
// logic misclassifies it as fully-fresh-and-present — its own obligation
|
|
244
|
+
// never re-fires, so a downstream re-derives against a body nobody re-derived
|
|
245
|
+
// and then RECORDS that corrupt input as its new baseline. It is stale: the
|
|
246
|
+
// manifest no longer describes what is there. Fail-safe direction, and it
|
|
247
|
+
// converges — the next `computeArtifactMetadata` restamps the entry.
|
|
248
|
+
//
|
|
249
|
+
// `absent` keeps the original downstream-of-absent fail-safe: a present
|
|
250
|
+
// downstream with NO metadata entry of its own has nothing to compare, so a
|
|
251
|
+
// vanished upstream must stale it directly.
|
|
252
|
+
const trackedArtifacts = new Set([
|
|
253
|
+
...Object.keys(metadata.artifacts),
|
|
254
|
+
...Object.keys(ARTIFACT_DEPENDENTS_MAP),
|
|
255
|
+
]);
|
|
256
|
+
for (const artifactName of [...trackedArtifacts].sort()) {
|
|
257
|
+
if (artifactName === "artifact_metadata.json")
|
|
147
258
|
continue;
|
|
148
|
-
|
|
259
|
+
const presence = classifyArtifactPresence(bundle, metadata, artifactName);
|
|
260
|
+
if (presence === "partial") {
|
|
261
|
+
stale.add(artifactName);
|
|
149
262
|
continue;
|
|
150
263
|
}
|
|
151
|
-
if (
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
264
|
+
if (presence === "intact")
|
|
265
|
+
continue;
|
|
266
|
+
// tooling_manifest.json is an OPTIONAL probe: its absence is the normal
|
|
267
|
+
// case, never an upstream that vanished.
|
|
268
|
+
// ORDERING: the `partial` branch above runs FIRST, so this exemption only
|
|
269
|
+
// ever sees `absent` — a tooling_manifest classified `partial` would be
|
|
270
|
+
// staled before reaching here, inert today only because it declares no
|
|
271
|
+
// upstreams and so short-circuits as `intact` at the leaf gate.
|
|
272
|
+
if (artifactName === "tooling_manifest.json")
|
|
273
|
+
continue;
|
|
274
|
+
for (const downstream of ARTIFACT_DEPENDENTS_MAP[artifactName] ?? []) {
|
|
275
|
+
const hasMetadataEntry = Boolean(metadata.artifacts[downstream]);
|
|
276
|
+
if (present(bundle, downstream) && !hasMetadataEntry) {
|
|
277
|
+
stale.add(downstream);
|
|
157
278
|
}
|
|
158
279
|
}
|
|
159
280
|
}
|
|
@@ -180,9 +301,18 @@ export function computeStaleArtifacts(bundle, options = {}) {
|
|
|
180
301
|
// downstream's, and staleness re-derives each drain iteration, so a
|
|
181
302
|
// slice moved by the upstream's re-derivation still fires the per-edge
|
|
182
303
|
// compare before the downstream's obligation is reached.
|
|
304
|
+
//
|
|
305
|
+
// That deferral is a DECISION POSTPONED, not a verdict of "fresh", so it
|
|
306
|
+
// is REPORTED rather than silent: the downstream is recorded as deferred
|
|
307
|
+
// and rides out on the result (INV-SSP-DEFERRED-SET-REPORTED). This
|
|
308
|
+
// module states the ordering it is safe under; it does not police it —
|
|
309
|
+
// the PRIORITY-ordering guarantee is the CALLER's precondition, owned and
|
|
310
|
+
// tested there. What this module owes the caller is that a held-back
|
|
311
|
+
// downstream is never mistaken for a decided-clean one.
|
|
183
312
|
const entry = metadata?.artifacts[downstream];
|
|
184
313
|
if (entry?.dependency_slices?.[upstream] !== undefined &&
|
|
185
314
|
hasDependencySliceProjection(downstream, upstream)) {
|
|
315
|
+
deferred.add(downstream);
|
|
186
316
|
continue;
|
|
187
317
|
}
|
|
188
318
|
stale.add(downstream);
|
|
@@ -190,8 +320,9 @@ export function computeStaleArtifacts(bundle, options = {}) {
|
|
|
190
320
|
}
|
|
191
321
|
}
|
|
192
322
|
}
|
|
323
|
+
const result = new StaleArtifactSet(stale, deferred);
|
|
193
324
|
if (emit)
|
|
194
|
-
emitStalenessRecord(
|
|
195
|
-
return
|
|
325
|
+
emitStalenessRecord(result);
|
|
326
|
+
return result;
|
|
196
327
|
}
|
|
197
328
|
//# sourceMappingURL=staleness.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staleness.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/staleness.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAE/B,SAAS,kBAAkB,CACzB,YAAoB,EACpB,MAAsB;IAEtB,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAO,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,8EAA8E;AAC9E,iDAAiD;AACjD,MAAM,yBAAyB,GAC7B,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"staleness.js","sourceRoot":"","sources":["../../../src/audit/orchestrator/staleness.ts"],"names":[],"mappings":"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"}
|