audit-tools 0.30.18 → 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.
|
@@ -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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"}
|