audit-tools 0.30.17 → 0.30.19
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/dist/remediate/contractPipeline/derive.d.ts +15 -0
- package/dist/remediate/contractPipeline/derive.d.ts.map +1 -1
- package/dist/remediate/contractPipeline/derive.js +29 -2
- package/dist/remediate/contractPipeline/derive.js.map +1 -1
- package/dist/remediate/phases/triage.d.ts.map +1 -1
- package/dist/remediate/phases/triage.js +61 -2
- package/dist/remediate/phases/triage.js.map +1 -1
- package/dist/remediate/state/store.d.ts +22 -0
- package/dist/remediate/state/store.d.ts.map +1 -1
- package/dist/remediate/state/store.js.map +1 -1
- package/dist/remediate/steps/contractPipeline.d.ts +29 -0
- package/dist/remediate/steps/contractPipeline.d.ts.map +1 -1
- package/dist/remediate/steps/contractPipeline.js +36 -16
- package/dist/remediate/steps/contractPipeline.js.map +1 -1
- package/dist/remediate/steps/dispatch.d.ts.map +1 -1
- package/dist/remediate/steps/dispatch.js +5 -0
- package/dist/remediate/steps/dispatch.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts +28 -1
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +94 -37
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/package.json +1 -1
|
@@ -45,6 +45,21 @@ export interface DeriveOptions {
|
|
|
45
45
|
* ledger is acyclic by construction — `buildObligationLedger` cannot throw).
|
|
46
46
|
*/
|
|
47
47
|
export declare function deriveObligationLedger(finalizedModuleContracts: unknown, options?: DeriveOptions): ObligationLedger;
|
|
48
|
+
/**
|
|
49
|
+
* Shared obligation-membership predicates — the single source for which
|
|
50
|
+
* obligations each downstream scaffold covers.
|
|
51
|
+
*
|
|
52
|
+
* `isTestablePhaseObligation`: testable (invariant/behavioral) → true; the
|
|
53
|
+
* structural contract-conformance kind → false; an unknown/unexpected kind →
|
|
54
|
+
* conservatively true (fail-OPEN into the paired-test gate rather than silently
|
|
55
|
+
* skipping coverage).
|
|
56
|
+
*
|
|
57
|
+
* `isDagPhaseObligation`: every obligation is covered by the implementation DAG,
|
|
58
|
+
* so this is always true. It exists so both scaffolds derive their membership
|
|
59
|
+
* from a named predicate rather than an inline ad-hoc filter.
|
|
60
|
+
*/
|
|
61
|
+
export declare function isTestablePhaseObligation(kind: string): boolean;
|
|
62
|
+
export declare function isDagPhaseObligation(_kind: string): boolean;
|
|
48
63
|
export interface TestValidatorPlanScaffold {
|
|
49
64
|
test_specs: Array<{
|
|
50
65
|
obligation_id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive.d.ts","sourceRoot":"","sources":["../../../src/remediate/contractPipeline/derive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAqB5B,sFAAsF;AACtF,MAAM,WAAW,aAAa;IAC5B,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CACpC,wBAAwB,EAAE,OAAO,EACjC,OAAO,GAAE,aAAkB,GAC1B,gBAAgB,CA2DlB;
|
|
1
|
+
{"version":3,"file":"derive.d.ts","sourceRoot":"","sources":["../../../src/remediate/contractPipeline/derive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAqB5B,sFAAsF;AACtF,MAAM,WAAW,aAAa;IAC5B,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CACpC,wBAAwB,EAAE,OAAO,EACjC,OAAO,GAAE,aAAkB,GAC1B,gBAAgB,CA2DlB;AAmBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI/D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AASD,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,KAAK,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC,CAAC;CACJ;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,yBAAyB,CAY3B;AAED,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,yBAAyB,EAAE,MAAM,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,2BAA2B,EAAE,MAAM,EAAE,CAAC;IACtC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,6BAA6B,EAAE,CAAC;IACvC,KAAK,EAAE,KAAK,EAAE,CAAC;CAChB;AAED,gFAAgF;AAChF,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,OAAO,GAAG,MAAM,EAAE,CAgBxE;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,aAAa,EAAE,MAAM,EAAE,GACtB,yBAAyB,CAmC3B"}
|
|
@@ -103,7 +103,34 @@ export function deriveObligationLedger(finalizedModuleContracts, options = {}) {
|
|
|
103
103
|
// mis-reference an obligation. These are NOT writable artifacts: the blank
|
|
104
104
|
// fields fail validation by design (that is the point — the model must fill
|
|
105
105
|
// them). They are rendered into the dispatch prompt as a pre-filled skeleton.
|
|
106
|
+
// NOTE(follow-up unification): this testable-kind set is duplicated in
|
|
107
|
+
// `../validation/contractPipelineGates.ts` (~438, `TESTABLE_OBLIGATION_KINDS`).
|
|
108
|
+
// The two should be single-sourced; for now they are kept in parity by hand.
|
|
109
|
+
// Do NOT edit gates.ts here — that unification is tracked separately.
|
|
106
110
|
const TESTABLE_KINDS = new Set(["invariant", "behavioral"]);
|
|
111
|
+
/**
|
|
112
|
+
* Shared obligation-membership predicates — the single source for which
|
|
113
|
+
* obligations each downstream scaffold covers.
|
|
114
|
+
*
|
|
115
|
+
* `isTestablePhaseObligation`: testable (invariant/behavioral) → true; the
|
|
116
|
+
* structural contract-conformance kind → false; an unknown/unexpected kind →
|
|
117
|
+
* conservatively true (fail-OPEN into the paired-test gate rather than silently
|
|
118
|
+
* skipping coverage).
|
|
119
|
+
*
|
|
120
|
+
* `isDagPhaseObligation`: every obligation is covered by the implementation DAG,
|
|
121
|
+
* so this is always true. It exists so both scaffolds derive their membership
|
|
122
|
+
* from a named predicate rather than an inline ad-hoc filter.
|
|
123
|
+
*/
|
|
124
|
+
export function isTestablePhaseObligation(kind) {
|
|
125
|
+
if (TESTABLE_KINDS.has(kind))
|
|
126
|
+
return true;
|
|
127
|
+
if (kind === "structural")
|
|
128
|
+
return false;
|
|
129
|
+
return true; // unknown kind → conservatively testable
|
|
130
|
+
}
|
|
131
|
+
export function isDagPhaseObligation(_kind) {
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
107
134
|
/** A short, stable test name from an obligation description. */
|
|
108
135
|
function scaffoldName(obligation) {
|
|
109
136
|
const text = obligation.description.replace(/\s+/g, " ").trim();
|
|
@@ -121,7 +148,7 @@ export function buildTestValidatorPlanScaffold(ledger) {
|
|
|
121
148
|
const obligations = ledger?.obligations ?? [];
|
|
122
149
|
return {
|
|
123
150
|
test_specs: obligations
|
|
124
|
-
.filter((o) =>
|
|
151
|
+
.filter((o) => isTestablePhaseObligation(o.kind))
|
|
125
152
|
.map((o) => ({
|
|
126
153
|
obligation_id: o.id,
|
|
127
154
|
name: scaffoldName(o),
|
|
@@ -154,7 +181,7 @@ export function acceptedCounterexampleIds(judgeReport) {
|
|
|
154
181
|
* fills the blanks and may merge nodes as long as coverage is preserved.
|
|
155
182
|
*/
|
|
156
183
|
export function buildImplementationDagScaffold(ledger, acceptedCeIds) {
|
|
157
|
-
const obligations = ledger?.obligations ?? [];
|
|
184
|
+
const obligations = (ledger?.obligations ?? []).filter((o) => isDagPhaseObligation(o.kind));
|
|
158
185
|
const nodes = obligations.map((o, i) => ({
|
|
159
186
|
id: `CP-NODE-${i + 1}`,
|
|
160
187
|
title: "",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derive.js","sourceRoot":"","sources":["../../../src/remediate/contractPipeline/derive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AAuBnC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,sBAAsB,CACpC,wBAAiC,EACjC,UAAyB,EAAE;IAE3B,MAAM,SAAS,GAAG,sBAAsB,CAAC,wBAAwB,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,WAAW,GAAsB,EAAE,CAAC;IAE1C,8EAA8E;IAC9E,+EAA+E;IAC/E,wEAAwE;IACxE,+EAA+E;IAC/E,wDAAwD;IACxD,MAAM,eAAe,GAAG,yBAAyB,CAAC,wBAAwB,CAAC,CAAC;IAE5E,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;QAExC,uEAAuE;QACvE,yEAAyE;QACzE,WAAW,CAAC,IAAI,CAAC;YACf,EAAE,EAAE,YAAY,CAAC,OAAO,EAAE,OAAO,IAAI,WAAW,CAAC;YACjD,WAAW,EACT,qBAAqB,GAAG,CAAC,IAAI,+BAA+B;gBAC5D,YAAY,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI;gBACtE,wBAAwB,GAAG,CAAC,mBAAmB,IAAI,KAAK,IAAI;YAC9D,IAAI,EAAE,YAAY;YAClB,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QAEH,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;YACtC,WAAW,CAAC,IAAI,CAAC;gBACf,EAAE,EAAE,YAAY,CAAC,OAAO,EAAE,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrD,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,aAAa;gBACrB,qBAAqB,EAAE,wBAAwB,CAAC,SAAS,EAAE,eAAe,CAAC;aAC5E,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;YAC3C,WAAW,CAAC,IAAI,CAAC;gBACf,EAAE,EAAE,YAAY,CAAC,OAAO,EAAE,OAAO,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtD,WAAW,EAAE,wBAAwB,WAAW,EAAE;gBAClD,IAAI,EAAE,YAAY;gBAClB,UAAU,EAAE,EAAE;gBACd,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,aAAa;gBACrB,qBAAqB,EAAE,wBAAwB,CAAC,WAAW,EAAE,eAAe,CAAC;aAC9E,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,qBAAqB,CAAC;QAC3B,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,WAAW;QACX,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,EAAE;AACF,yEAAyE;AACzE,8EAA8E;AAC9E,yEAAyE;AACzE,+EAA+E;AAC/E,sEAAsE;AACtE,2EAA2E;AAC3E,4EAA4E;AAC5E,8EAA8E;AAE9E,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;AAE5D,gEAAgE;AAChE,SAAS,YAAY,CAAC,UAA2B;IAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAChE,IAAI,CAAC,IAAI;QAAE,OAAO,UAAU,CAAC,EAAE,CAAC;IAChC,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAWD;;;;;GAKG;AACH,MAAM,UAAU,8BAA8B,CAC5C,MAAoC;IAEpC,MAAM,WAAW,GAAG,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC;IAC9C,OAAO;QACL,UAAU,EAAE,WAAW;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"derive.js","sourceRoot":"","sources":["../../../src/remediate/contractPipeline/derive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../../src/remediate/phases/triage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../../src/remediate/phases/triage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAoK1D,wBAAsB,cAAc,CAClC,KAAK,EAAE,gBAAgB,EACvB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAyK3B"}
|
|
@@ -4,6 +4,7 @@ import { rename } from "node:fs/promises";
|
|
|
4
4
|
import { readOptionalJsonFile, writeJsonFile, formatValidationIssues, withFsRetry } from "audit-tools/shared";
|
|
5
5
|
import { validateTriageResolution } from "../validation/remediationState.js";
|
|
6
6
|
import { rationaleAsksForRetry } from "../steps/stepUtils.js";
|
|
7
|
+
import { verifyNodeInWorktree } from "../steps/dispatch.js";
|
|
7
8
|
function markRetry(item) {
|
|
8
9
|
item.started_at ??= new Date().toISOString();
|
|
9
10
|
delete item.completed_at;
|
|
@@ -47,6 +48,37 @@ function retryBlockedItem(item, failureClass) {
|
|
|
47
48
|
item.rework_count = (item.rework_count ?? 0) + 1;
|
|
48
49
|
}
|
|
49
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Re-verify a blocked item against the CURRENT working tree before retrying it.
|
|
53
|
+
*
|
|
54
|
+
* Runs the item's block's post-merge `targeted_commands` at the repo root. If
|
|
55
|
+
* they pass, the finding is already satisfied in the tree — e.g. a lean/hand lap
|
|
56
|
+
* landed the fix outside this run, or the run is being resumed after the work
|
|
57
|
+
* already shipped — so retrying would just re-hit an already-fixed state, burn
|
|
58
|
+
* the retry budget, and dump the item to human triage (the obsolete-run-resume
|
|
59
|
+
* bug). Reconcile it to `resolved_no_change` instead.
|
|
60
|
+
*
|
|
61
|
+
* This is deliberately NODE-GRANULAR, never a coarse whole-run abandon: an
|
|
62
|
+
* unrelated fix elsewhere cannot make an unrelated node's OWN verification pass,
|
|
63
|
+
* so only the specifically already-satisfied items close; everything genuinely
|
|
64
|
+
* open keeps retrying as before. Returns:
|
|
65
|
+
* - `"satisfied"` — commands present and ALL pass (already fixed in tree)
|
|
66
|
+
* - `"unsatisfied"` — commands present and at least one fails (still open)
|
|
67
|
+
* - `"indeterminate"` — no `targeted_commands` to check, so we cannot tell
|
|
68
|
+
* (caller falls back to the normal retry path)
|
|
69
|
+
*/
|
|
70
|
+
function reverifyBlockedItemAgainstTree(item, state, options) {
|
|
71
|
+
const block = (item.block_id
|
|
72
|
+
? state.plan?.blocks.find((b) => b.block_id === item.block_id)
|
|
73
|
+
: undefined) ??
|
|
74
|
+
state.plan?.blocks.find((b) => b.items.includes(item.finding_id));
|
|
75
|
+
const commands = block?.targeted_commands;
|
|
76
|
+
if (!commands || commands.length === 0)
|
|
77
|
+
return "indeterminate";
|
|
78
|
+
return verifyNodeInWorktree(options.root, commands).passed
|
|
79
|
+
? "satisfied"
|
|
80
|
+
: "unsatisfied";
|
|
81
|
+
}
|
|
50
82
|
async function archiveIfPresent(path, suffix) {
|
|
51
83
|
if (!existsSync(path))
|
|
52
84
|
return;
|
|
@@ -129,7 +161,24 @@ export async function runTriagePhase(state, options) {
|
|
|
129
161
|
// was approved at the review gate, so transient/contract failures retry
|
|
130
162
|
// autonomously; only budget-exhausted items fall through to a human prompt.
|
|
131
163
|
let autoRetried = false;
|
|
164
|
+
let reconciledSatisfied = false;
|
|
132
165
|
for (const item of blockedItems) {
|
|
166
|
+
// Re-verify against the CURRENT tree BEFORE retrying (takes precedence
|
|
167
|
+
// over the retry budget): if the node's own verification now passes, the
|
|
168
|
+
// finding is already satisfied — a lean/hand lap landed it, or this is an
|
|
169
|
+
// obsolete run being resumed after the work shipped — so reconcile to
|
|
170
|
+
// resolved_no_change rather than re-hitting an already-fixed state.
|
|
171
|
+
if (reverifyBlockedItemAgainstTree(item, state, options) === "satisfied") {
|
|
172
|
+
item.status = "resolved_no_change";
|
|
173
|
+
markTerminal(item);
|
|
174
|
+
// NB: do not write `last_successful_step` here — dispatch.ts is its
|
|
175
|
+
// single writer (CE-P3-001 / OBL-INV-RPS-05). The reconciliation is
|
|
176
|
+
// conveyed by the terminal `resolved_no_change` status + this log.
|
|
177
|
+
item.failure_reason = undefined;
|
|
178
|
+
console.log(`[triage] ${item.finding_id}: already satisfied in the working tree — reconciled to resolved_no_change (no retry).`);
|
|
179
|
+
reconciledSatisfied = true;
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
133
182
|
// Stop auto-retrying an item that has already been retried the cap
|
|
134
183
|
// number of times for its failure class — leaves it `blocked` so the
|
|
135
184
|
// fall-through below routes the run to a human triage prompt.
|
|
@@ -153,15 +202,25 @@ export async function runTriagePhase(state, options) {
|
|
|
153
202
|
console.log("Auto-retrying blocked findings within their retry budget.");
|
|
154
203
|
return { ...state, status: "implementing" };
|
|
155
204
|
}
|
|
205
|
+
// Re-verification may have reconciled some/all blocked items to
|
|
206
|
+
// resolved_no_change above; only the genuinely-still-open ones remain.
|
|
207
|
+
const stillBlocked = blockedItems.filter((item) => item.status === "blocked");
|
|
208
|
+
if (stillBlocked.length === 0) {
|
|
209
|
+
// Every blocked item was already satisfied in the tree — the run is an
|
|
210
|
+
// obsolete/already-landed one; close it cleanly instead of looping its
|
|
211
|
+
// stale nodes through human triage.
|
|
212
|
+
console.log("All blocked items already satisfied in the working tree — closing the reconciled run.");
|
|
213
|
+
return { ...state, status: "closing" };
|
|
214
|
+
}
|
|
156
215
|
const triageBatch = {
|
|
157
|
-
items:
|
|
216
|
+
items: stillBlocked.map((item) => ({
|
|
158
217
|
finding_id: item.finding_id,
|
|
159
218
|
failure_reason: item.failure_reason ?? "Unknown error",
|
|
160
219
|
last_successful_step: item.last_successful_step ?? "Unknown step",
|
|
161
220
|
})),
|
|
162
221
|
};
|
|
163
222
|
await writeJsonFile(join(options.artifactsDir, "triage_batch.json"), triageBatch);
|
|
164
|
-
console.error(`\nFound ${
|
|
223
|
+
console.error(`\nFound ${stillBlocked.length} blocked items. Wrote triage_batch.json.`);
|
|
165
224
|
console.error(`Please write triage_resolution.json and run again to continue.`);
|
|
166
225
|
return { ...state, status: "waiting_for_triage" };
|
|
167
226
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triage.js","sourceRoot":"","sources":["../../../src/remediate/phases/triage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9G,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"triage.js","sourceRoot":"","sources":["../../../src/remediate/phases/triage.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,28 @@ export interface RemediationState {
|
|
|
22
22
|
* a `user_halted` marker in the partial report.
|
|
23
23
|
*/
|
|
24
24
|
closing_context?: "user_halted";
|
|
25
|
+
/**
|
|
26
|
+
* Persisted host-capability handshake. Opaque to the state store: stored and
|
|
27
|
+
* round-tripped verbatim, never interpreted here (validateState only gates
|
|
28
|
+
* `status`). The dispatch-build site merges the explicitly-supplied host
|
|
29
|
+
* options into this so a later call that omits a flag reuses the persisted
|
|
30
|
+
* value rather than re-flooring it (C1). Fields: can-dispatch-subagents,
|
|
31
|
+
* max-concurrent, context/output token windows, and the model roster / id.
|
|
32
|
+
*/
|
|
33
|
+
host_capabilities?: HostCapabilities;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Opaque persisted host-capability handshake (C1). Every field optional — only
|
|
37
|
+
* the explicitly-supplied fields of a given call are persisted, so an omitted
|
|
38
|
+
* field never clobbers a previously-stored value.
|
|
39
|
+
*/
|
|
40
|
+
export interface HostCapabilities {
|
|
41
|
+
can_dispatch_subagents?: boolean;
|
|
42
|
+
max_concurrent?: number;
|
|
43
|
+
context_tokens?: number;
|
|
44
|
+
output_tokens?: number;
|
|
45
|
+
model_id?: string;
|
|
46
|
+
models?: unknown;
|
|
25
47
|
}
|
|
26
48
|
export declare const LOCK_TIMEOUT_MS: number;
|
|
27
49
|
export declare class StateStore {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/remediate/state/store.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,WAAW,EACX,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EACF,SAAS,GACT,UAAU,GACV,2BAA2B,GAC3B,cAAc,GACd,QAAQ,GACR,oBAAoB,GACpB,SAAS,GACT,UAAU,CAAC;IACf,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC7C,cAAc,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACxC,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B;;;;;OAKG;IACH,2BAA2B,CAAC,EAAE,yBAAyB,CAAC;IACxD;;;;OAIG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/remediate/state/store.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,WAAW,EACX,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EACF,SAAS,GACT,UAAU,GACV,2BAA2B,GAC3B,cAAc,GACd,QAAQ,GACR,oBAAoB,GACpB,SAAS,GACT,UAAU,CAAC;IACf,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC7C,cAAc,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACxC,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B;;;;;OAKG;IACH,2BAA2B,CAAC,EAAE,yBAAyB,CAAC;IACxD;;;;OAIG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;CACtC;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA0CD,eAAO,MAAM,eAAe,QAAyC,CAAC;AAUtE,qBAAa,UAAU;IAEnB,OAAO,CAAC,YAAY;IAEpB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;gBAFxB,YAAY,EAAE,MAAM,EAEX,cAAc,CAAC,EAAE,MAAM,YAAA;IAGpC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;;;;;;;OAQG;IACG,SAAS,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAmBnD;;;;;OAKG;IACG,MAAM,CACV,EAAE,EAAE,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,KAAK,OAAO,CAAC,gBAAgB,CAAC,GAClE,OAAO,CAAC,gBAAgB,CAAC;IA8B5B;;;;;;OAMG;IACG,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD;;;;;OAKG;YACW,iBAAiB;CAGhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/remediate/state/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,aAAa,GACd,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/remediate/state/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,35 @@ export interface CyclicSeamRepairState {
|
|
|
28
28
|
}
|
|
29
29
|
export declare function readCyclicSeamRepairState(artifactsDir: string): Promise<CyclicSeamRepairState>;
|
|
30
30
|
export declare function writeCyclicSeamRepairState(artifactsDir: string, state: CyclicSeamRepairState): Promise<void>;
|
|
31
|
+
/** Outcome of an archive attempt. */
|
|
32
|
+
export interface ArchiveOutcome {
|
|
33
|
+
/**
|
|
34
|
+
* Timestamped history path the original was moved to, or undefined when the
|
|
35
|
+
* source did not exist (nothing to archive).
|
|
36
|
+
*/
|
|
37
|
+
archivedPath?: string;
|
|
38
|
+
/**
|
|
39
|
+
* True when the original path is now free for a fresh Write (the move
|
|
40
|
+
* succeeded, or there was nothing to archive). False when the move failed and
|
|
41
|
+
* the original was preserved in place — the caller must NOT assume the path is
|
|
42
|
+
* re-authorable.
|
|
43
|
+
*/
|
|
44
|
+
originalFree: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Archive an artifact file into `<contract>/history/` instead of deleting it,
|
|
48
|
+
* so a repair loop never silently destroys an LLM output. On a successful move
|
|
49
|
+
* the original path is free (a fresh Write recreates it cleanly); if the move
|
|
50
|
+
* throws, the original is preserved in place (`originalFree: false`) rather than
|
|
51
|
+
* silently dropped. `renameFn` is a DI seam so a failed history move is testable.
|
|
52
|
+
*/
|
|
53
|
+
export declare function archiveContractArtifact(artifactsDir: string, name: ContractPipelineArtifactName, label: "stale" | "invalid", renameFn?: (from: string, to: string) => Promise<void>): Promise<ArchiveOutcome>;
|
|
54
|
+
/**
|
|
55
|
+
* The explicit re-author signpost appended to every inline rejection re-emit:
|
|
56
|
+
* the prior output was archived, so the worker must Write a fresh complete
|
|
57
|
+
* artifact at the ORIGINAL path — never Edit the previous (now-archived) file.
|
|
58
|
+
*/
|
|
59
|
+
export declare function rejectionRewriteInstruction(archivedPath: string | undefined): string;
|
|
31
60
|
export interface ContractIngestionResult {
|
|
32
61
|
/** Raw worker payloads that validated and were wrapped into envelopes. */
|
|
33
62
|
ingested: ContractPipelineArtifactName[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contractPipeline.d.ts","sourceRoot":"","sources":["../../../src/remediate/steps/contractPipeline.ts"],"names":[],"mappings":"AAwBA,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,WAAW,EAIhB,KAAK,aAAa,EAEnB,MAAM,oBAAoB,CAAC;AAqD5B,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAIzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAwClD;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,8EAA8E;AAC9E,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAuCrD,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,oEAAoE,CAAC;IACrF,qFAAqF;IACrF,QAAQ,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IACzE,qDAAqD;IACrD,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAMD,wBAAsB,yBAAyB,CAC7C,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,qBAAqB,CAAC,CAWhC;AAED,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAGf;
|
|
1
|
+
{"version":3,"file":"contractPipeline.d.ts","sourceRoot":"","sources":["../../../src/remediate/steps/contractPipeline.ts"],"names":[],"mappings":"AAwBA,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,WAAW,EAIhB,KAAK,aAAa,EAEnB,MAAM,oBAAoB,CAAC;AAqD5B,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAIzF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAwClD;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,8EAA8E;AAC9E,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAuCrD,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,oEAAoE,CAAC;IACrF,qFAAqF;IACrF,QAAQ,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IACzE,qDAAqD;IACrD,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAMD,wBAAsB,yBAAyB,CAC7C,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,qBAAqB,CAAC,CAWhC;AAED,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAGf;AAgED,qCAAqC;AACrC,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,4BAA4B,EAClC,KAAK,EAAE,OAAO,GAAG,SAAS,EAC1B,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAU,GAC7D,OAAO,CAAC,cAAc,CAAC,CAazB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGpF;AAED,MAAM,WAAW,uBAAuB;IACtC,0EAA0E;IAC1E,QAAQ,EAAE,4BAA4B,EAAE,CAAC;IACzC,+EAA+E;IAC/E,OAAO,EAAE;QAAE,IAAI,EAAE,4BAA4B,CAAC;QAAC,MAAM,EAAE,eAAe,EAAE,CAAA;KAAE,EAAE,CAAC;CAC9E;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,uBAAuB,CAAC,CA6BlC;AAID,MAAM,WAAW,2BAA2B;IAC1C,mEAAmE;IACnE,4BAA4B,EAAE,OAAO,CAAC;IACtC,6EAA6E;IAC7E,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,GAAG,SAAS,GACpC,2BAA2B,CAa7B;AAED,4EAA4E;AAC5E,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU5E;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC;;;;;;OAMG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAID,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,uDAAuD,CAAC;IACxE,4DAA4D;IAC5D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,gBAAgB,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,uEAAuE;IACvE,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,EACzB,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,IAAI,CAAC,CAsCf;AAID;;;;GAIG;AAGH,KAAK,oBAAoB,GAAG,4BAA4B,GAAG,mBAAmB,GAAG,4BAA4B,CAAC;AAE9G;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,WAAW,CAAC,iBAAiB,CAAC,GAC9C,oBAAoB,CAYtB;AAwDD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAsB,qCAAqC,CACzD,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,qBAAqB,CAAC,CA6ChC;AAID,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,wCAAwC,CAC5D,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,6BAA6B,CAAC,CAsCxC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,+BAA+B,CACnD,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,uBAAuB,GAAG,qBAAqB,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CAgDlG;AAgFD;;;GAGG;AACH,wBAAsB,qCAAqC,CACzD,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CAa1C;AAcD,8EAA8E;AAC9E,QAAA,MAAM,sBAAsB;;;CAGlB,CAAC;AAEX,KAAK,mBAAmB,GAAG,MAAM,OAAO,sBAAsB,CAAC;AAE/D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,mBAAmB,CAEjF;AA0JD;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAkhCjC;AAkED;;;GAGG;AACH,wBAAsB,uCAAuC,CAC3D,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAqJf"}
|
|
@@ -155,15 +155,35 @@ Self-check before next-step: \`${loaderCommand(`validate-artifact --name impleme
|
|
|
155
155
|
}
|
|
156
156
|
/**
|
|
157
157
|
* Archive an artifact file into `<contract>/history/` instead of deleting it,
|
|
158
|
-
* so a repair loop never silently destroys an LLM output.
|
|
158
|
+
* so a repair loop never silently destroys an LLM output. On a successful move
|
|
159
|
+
* the original path is free (a fresh Write recreates it cleanly); if the move
|
|
160
|
+
* throws, the original is preserved in place (`originalFree: false`) rather than
|
|
161
|
+
* silently dropped. `renameFn` is a DI seam so a failed history move is testable.
|
|
159
162
|
*/
|
|
160
|
-
async function archiveContractArtifact(artifactsDir, name, label) {
|
|
163
|
+
export async function archiveContractArtifact(artifactsDir, name, label, renameFn = rename) {
|
|
161
164
|
const source = contractArtifactFilePath(artifactsDir, name);
|
|
162
165
|
if (!existsSync(source))
|
|
163
|
-
return;
|
|
166
|
+
return { originalFree: true };
|
|
164
167
|
const historyDir = join(contractPipelineDir(artifactsDir), "history");
|
|
165
168
|
await mkdir(historyDir, { recursive: true });
|
|
166
|
-
|
|
169
|
+
const archivedPath = join(historyDir, `${name}.${label}-${Date.now()}.json`);
|
|
170
|
+
try {
|
|
171
|
+
await withFsRetry(() => renameFn(source, archivedPath));
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// Move failed: preserve the original in place rather than drop it.
|
|
175
|
+
return { archivedPath, originalFree: false };
|
|
176
|
+
}
|
|
177
|
+
return { archivedPath, originalFree: true };
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* The explicit re-author signpost appended to every inline rejection re-emit:
|
|
181
|
+
* the prior output was archived, so the worker must Write a fresh complete
|
|
182
|
+
* artifact at the ORIGINAL path — never Edit the previous (now-archived) file.
|
|
183
|
+
*/
|
|
184
|
+
export function rejectionRewriteInstruction(archivedPath) {
|
|
185
|
+
const where = archivedPath ? `\`${archivedPath}\`` : "the contract history directory";
|
|
186
|
+
return `\n\n> Prior output archived to ${where}; Write a fresh complete artifact at its original path — do NOT Edit the previous file.`;
|
|
167
187
|
}
|
|
168
188
|
/**
|
|
169
189
|
* Wrap raw worker-written artifact payloads into validated envelopes. Workers
|
|
@@ -876,14 +896,14 @@ The orchestrator verifies every module shard is present, merges them into \`${PH
|
|
|
876
896
|
const ingestion = await ingestContractArtifacts(artifactsDir);
|
|
877
897
|
if (ingestion.invalid.length > 0) {
|
|
878
898
|
const first = ingestion.invalid[0];
|
|
879
|
-
await archiveContractArtifact(artifactsDir, first.name, "invalid");
|
|
899
|
+
const archived = await archiveContractArtifact(artifactsDir, first.name, "invalid");
|
|
880
900
|
const phase = ARTIFACT_TO_PHASE[first.name] ?? "goal_normalization";
|
|
881
901
|
return buildPhaseStep(phase, `## Validation Errors From the Previous Attempt
|
|
882
902
|
|
|
883
903
|
The previous \`${first.name}\` output failed validation and was archived. Fix every issue below in the rewritten output:
|
|
884
904
|
|
|
885
905
|
${formatValidationIssues(first.issues)}
|
|
886
|
-
`);
|
|
906
|
+
${rejectionRewriteInstruction(archived.archivedPath)}`);
|
|
887
907
|
}
|
|
888
908
|
// 2. Archive stale artifacts so the staleness DAG re-derives everything
|
|
889
909
|
// downstream of a repaired (re-ingested) upstream artifact.
|
|
@@ -934,7 +954,7 @@ ${formatValidationIssues(first.issues)}
|
|
|
934
954
|
const firstPath = goalIdErrors[0]?.path ?? "";
|
|
935
955
|
const mismatchedArtifact = firstPath.replace(/\.goal_id$/, "");
|
|
936
956
|
const phase = ARTIFACT_TO_PHASE[mismatchedArtifact] ?? "goal_normalization";
|
|
937
|
-
await archiveContractArtifact(artifactsDir, mismatchedArtifact, "invalid");
|
|
957
|
+
const archived = await archiveContractArtifact(artifactsDir, mismatchedArtifact, "invalid");
|
|
938
958
|
return buildPhaseStep(phase, `## Goal-ID Consistency Error
|
|
939
959
|
|
|
940
960
|
Every contract-pipeline artifact must share the same goal_id. The following mismatch was detected:
|
|
@@ -942,7 +962,7 @@ Every contract-pipeline artifact must share the same goal_id. The following mism
|
|
|
942
962
|
${goalIdErrors.map((i) => `- [${i.path}] ${i.message}`).join("\n")}
|
|
943
963
|
|
|
944
964
|
Rewrite the output so its goal_id matches the goal_id established in goal_spec.json.
|
|
945
|
-
`);
|
|
965
|
+
${rejectionRewriteInstruction(archived.archivedPath)}`);
|
|
946
966
|
}
|
|
947
967
|
}
|
|
948
968
|
// 2.7. Deterministic artifact derivation (S1, contract-authoring determinism).
|
|
@@ -1032,13 +1052,13 @@ Report this to the user and stop. The contract pipeline cannot promote a plan wi
|
|
|
1032
1052
|
at: new Date().toISOString(),
|
|
1033
1053
|
});
|
|
1034
1054
|
await writeRepairState(artifactsDir, repairState);
|
|
1035
|
-
await archiveContractArtifact(artifactsDir, "implementation_dag", "invalid");
|
|
1055
|
+
const archived = await archiveContractArtifact(artifactsDir, "implementation_dag", "invalid");
|
|
1036
1056
|
return buildPhaseStep("implementation_planning", `## Referential Integrity Errors From the Previous Attempt
|
|
1037
1057
|
|
|
1038
1058
|
The previous implementation_dag was rejected and archived due to referential integrity violations. Fix every issue below:
|
|
1039
1059
|
|
|
1040
1060
|
${integrityErrors.map((i) => `- [${i.path}] ${i.message}`).join("\n")}
|
|
1041
|
-
`);
|
|
1061
|
+
${rejectionRewriteInstruction(archived.archivedPath)}`);
|
|
1042
1062
|
}
|
|
1043
1063
|
const traceability = await validateImplementationDagTraceability(artifactsDir);
|
|
1044
1064
|
if (!traceability.ok) {
|
|
@@ -1067,13 +1087,13 @@ Report this to the user and stop. The contract pipeline cannot promote an untrac
|
|
|
1067
1087
|
at: new Date().toISOString(),
|
|
1068
1088
|
});
|
|
1069
1089
|
await writeRepairState(artifactsDir, repairState);
|
|
1070
|
-
await archiveContractArtifact(artifactsDir, "implementation_dag", "invalid");
|
|
1090
|
+
const archived = await archiveContractArtifact(artifactsDir, "implementation_dag", "invalid");
|
|
1071
1091
|
return buildPhaseStep("implementation_planning", `## Traceability Errors From the Previous Attempt
|
|
1072
1092
|
|
|
1073
1093
|
The previous implementation_dag was rejected and archived. Every node must trace to at least one obligation from the obligation ledger or one judge-accepted counterexample:
|
|
1074
1094
|
|
|
1075
1095
|
${traceability.violations.map((v) => `- ${v}`).join("\n")}
|
|
1076
|
-
`);
|
|
1096
|
+
${rejectionRewriteInstruction(archived.archivedPath)}`);
|
|
1077
1097
|
}
|
|
1078
1098
|
// 4c. Contract-obligations promotion gates (CP-BLOCK-N-contract-obligations):
|
|
1079
1099
|
// fail-closed cross-artifact checks that must pass before a plan is
|
|
@@ -1110,13 +1130,13 @@ Report this to the user and stop. The contract pipeline cannot promote a plan th
|
|
|
1110
1130
|
at: new Date().toISOString(),
|
|
1111
1131
|
});
|
|
1112
1132
|
await writeRepairState(artifactsDir, repairState);
|
|
1113
|
-
await archiveContractArtifact(artifactsDir, "implementation_dag", "invalid");
|
|
1133
|
+
const archived = await archiveContractArtifact(artifactsDir, "implementation_dag", "invalid");
|
|
1114
1134
|
return buildPhaseStep("implementation_planning", `## Contract-Obligation Gate Errors From the Previous Attempt
|
|
1115
1135
|
|
|
1116
1136
|
The previous implementation_dag (and/or upstream contract artifacts) failed the fail-closed contract-obligation gates. Fix every issue below before the plan can be promoted:
|
|
1117
1137
|
|
|
1118
1138
|
${obligationGate.violations.map((v) => `- ${v}`).join("\n")}
|
|
1119
|
-
`);
|
|
1139
|
+
${rejectionRewriteInstruction(archived.archivedPath)}`);
|
|
1120
1140
|
}
|
|
1121
1141
|
await promoteImplementationDagToExtractedPlan(artifactsDir);
|
|
1122
1142
|
// 4d. M-B3 source-grounded citation gate (promotion backstop): ground every
|
|
@@ -1151,7 +1171,7 @@ Report this to the user and stop. The contract pipeline cannot promote a plan wh
|
|
|
1151
1171
|
at: new Date().toISOString(),
|
|
1152
1172
|
});
|
|
1153
1173
|
await writeRepairState(artifactsDir, repairState);
|
|
1154
|
-
await archiveContractArtifact(artifactsDir, "implementation_dag", "invalid");
|
|
1174
|
+
const archived = await archiveContractArtifact(artifactsDir, "implementation_dag", "invalid");
|
|
1155
1175
|
// The grounding-driven re-emit is a backend-observed step-boundary fact:
|
|
1156
1176
|
// route it through the single CE-005 chokepoint as phase_reemit.
|
|
1157
1177
|
await captureStepBoundaryFriction(artifactsDir, runId, {
|
|
@@ -1166,7 +1186,7 @@ Report this to the user and stop. The contract pipeline cannot promote a plan wh
|
|
|
1166
1186
|
The previous implementation_dag produced findings that cite components not present in the working tree. Every cited path or symbol must point at something real:
|
|
1167
1187
|
|
|
1168
1188
|
${citationGate.violations.map((v) => `- ${v}`).join("\n")}
|
|
1169
|
-
`);
|
|
1189
|
+
${rejectionRewriteInstruction(archived.archivedPath)}`);
|
|
1170
1190
|
}
|
|
1171
1191
|
return null;
|
|
1172
1192
|
}
|