audit-tools 0.54.0 → 0.55.1
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/audit/cli/auditStep.js +2 -2
- package/dist/audit/cli/auditStep.js.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.js +70 -10
- package/dist/audit/cli/dispatch/hostHandoff.js.map +1 -1
- package/dist/audit/contracts/findingContractPrompt.d.ts.map +1 -1
- package/dist/audit/contracts/findingContractPrompt.js +13 -11
- package/dist/audit/contracts/findingContractPrompt.js.map +1 -1
- package/dist/audit/contracts/workerSchemas.d.ts +21 -124
- package/dist/audit/contracts/workerSchemas.d.ts.map +1 -1
- package/dist/audit/contracts/workerSchemas.js +19 -3
- package/dist/audit/contracts/workerSchemas.js.map +1 -1
- package/dist/remediate/phases/close.d.ts.map +1 -1
- package/dist/remediate/phases/close.js +52 -2
- package/dist/remediate/phases/close.js.map +1 -1
- package/dist/remediate/steps/nextStep.d.ts.map +1 -1
- package/dist/remediate/steps/nextStep.js +17 -5
- package/dist/remediate/steps/nextStep.js.map +1 -1
- package/dist/shared/findings/dedupe.d.ts.map +1 -1
- package/dist/shared/findings/dedupe.js +14 -2
- package/dist/shared/findings/dedupe.js.map +1 -1
- package/dist/shared/git.d.ts.map +1 -1
- package/dist/shared/git.js +6 -2
- package/dist/shared/git.js.map +1 -1
- package/dist/shared/index.d.ts +2 -2
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +2 -2
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/types/finding.d.ts +4 -14
- package/dist/shared/types/finding.d.ts.map +1 -1
- package/dist/shared/types/finding.js +6 -16
- package/dist/shared/types/finding.js.map +1 -1
- package/dist/shared/validation/designFindingGrounding.d.ts +3 -2
- package/dist/shared/validation/designFindingGrounding.d.ts.map +1 -1
- package/dist/shared/validation/designFindingGrounding.js +12 -2
- package/dist/shared/validation/designFindingGrounding.js.map +1 -1
- package/dist/shared/validation/findingGrounding.d.ts +18 -6
- package/dist/shared/validation/findingGrounding.d.ts.map +1 -1
- package/dist/shared/validation/findingGrounding.js +107 -24
- package/dist/shared/validation/findingGrounding.js.map +1 -1
- package/package.json +1 -1
- package/schemas/audit_result.schema.json +0 -8
- package/schemas/audit_results.schema.json +0 -8
- package/schemas/finding.schema.json +0 -8
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// sites-pinned: tests/audit/quote-grounding.test.ts, tests/shared/finding-grounding.test.ts, tests/audit/host-ingest-grounding.test.ts
|
|
1
2
|
/**
|
|
2
3
|
* Finding grounding primitives — single source for both orchestrators.
|
|
3
4
|
*
|
|
@@ -10,11 +11,13 @@
|
|
|
10
11
|
*
|
|
11
12
|
* Matching is on *content*, normalized for whitespace/CRLF, not on line numbers
|
|
12
13
|
* — later edits that shift line numbers do not false-fail a still-valid quote,
|
|
13
|
-
* while a quote naming code that does not exist cannot match.
|
|
14
|
+
* while a quote naming code that does not exist cannot match. The line numbers
|
|
15
|
+
* a finding carries are DERIVED from where its quote occurs (`groundFinding`),
|
|
16
|
+
* never taken from the reviewer.
|
|
14
17
|
*
|
|
15
18
|
* Before this module the auditor (`quoteGrounding.ts`) and the conceptual-review
|
|
16
19
|
* grounding (`designFindingGrounding.ts`) each carried their own copy of
|
|
17
|
-
* `normalizeForMatch` / `quoteMatches` /
|
|
20
|
+
* `normalizeForMatch` / `quoteMatches` / the quote verifier and a near-
|
|
18
21
|
* identical path normalizer; this is the one authority both consume (drift-plan
|
|
19
22
|
* E3 + P7).
|
|
20
23
|
*/
|
|
@@ -32,7 +35,7 @@ export function normalizeForMatch(text) {
|
|
|
32
35
|
* The single path normalizer (drift-plan P7) shared by the conceptual-review
|
|
33
36
|
* grounding and any other consumer that matches a cited `affected_files` path
|
|
34
37
|
* against a repo manifest. (Quote-and-verify resolves a cited path against the
|
|
35
|
-
* filesystem instead, so it does not lowercase — see `
|
|
38
|
+
* filesystem instead, so it does not lowercase — see `groundFinding`.)
|
|
36
39
|
*
|
|
37
40
|
* INV-B3-1: strips a leading `./` ONLY — it must NEVER strip the leading dot of a
|
|
38
41
|
* dotfile-directory segment (`.claude/…`, `.github/…`). The regex is anchored to
|
|
@@ -135,15 +138,59 @@ export async function enumerateTrackedFilePaths(root) {
|
|
|
135
138
|
}
|
|
136
139
|
return known;
|
|
137
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Every place the (normalized) quote occurs in the (normalized) file content,
|
|
143
|
+
* each mapped back to the raw file's lines. Overlapping occurrences count: the
|
|
144
|
+
* question is how many LOCATIONS the quote could name, and `aa` names two places
|
|
145
|
+
* in `aaa`. An empty quote occurs nowhere (an empty quote grounds nothing).
|
|
146
|
+
*
|
|
147
|
+
* The normalized text is built here character by character, recording the raw
|
|
148
|
+
* line of each kept character, and it is the same text {@link normalizeForMatch}
|
|
149
|
+
* returns: CR dropped first (so `a\rb` joins to `ab`, exactly as the regex
|
|
150
|
+
* pass does), each whitespace run collapsed to one space, the ends trimmed. A
|
|
151
|
+
* collapsed run takes the line of its first character; an occurrence never
|
|
152
|
+
* starts or ends on a space, because the trimmed needle cannot.
|
|
153
|
+
*/
|
|
154
|
+
function locateQuote(fileContent, quotedText) {
|
|
155
|
+
const needle = normalizeForMatch(quotedText);
|
|
156
|
+
if (needle.length === 0)
|
|
157
|
+
return [];
|
|
158
|
+
let text = "";
|
|
159
|
+
const lineOf = [];
|
|
160
|
+
let line = 1;
|
|
161
|
+
let pendingSpaceLine;
|
|
162
|
+
for (const char of fileContent) {
|
|
163
|
+
if (char === "\r")
|
|
164
|
+
continue;
|
|
165
|
+
if (/\s/u.test(char)) {
|
|
166
|
+
if (pendingSpaceLine === undefined && text.length > 0)
|
|
167
|
+
pendingSpaceLine = line;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
if (pendingSpaceLine !== undefined) {
|
|
171
|
+
text += " ";
|
|
172
|
+
lineOf.push(pendingSpaceLine);
|
|
173
|
+
pendingSpaceLine = undefined;
|
|
174
|
+
}
|
|
175
|
+
text += char;
|
|
176
|
+
for (let unit = 0; unit < char.length; unit += 1)
|
|
177
|
+
lineOf.push(line);
|
|
178
|
+
}
|
|
179
|
+
if (char === "\n")
|
|
180
|
+
line += 1;
|
|
181
|
+
}
|
|
182
|
+
const spans = [];
|
|
183
|
+
for (let at = text.indexOf(needle); at !== -1; at = text.indexOf(needle, at + 1)) {
|
|
184
|
+
spans.push({ line_start: lineOf[at], line_end: lineOf[at + needle.length - 1] });
|
|
185
|
+
}
|
|
186
|
+
return spans;
|
|
187
|
+
}
|
|
138
188
|
/**
|
|
139
189
|
* True when the (normalized) quoted span appears anywhere in the (normalized)
|
|
140
190
|
* file content. An empty quote never matches (an empty quote grounds nothing).
|
|
141
191
|
*/
|
|
142
192
|
export function quoteMatches(fileContent, quotedText) {
|
|
143
|
-
|
|
144
|
-
if (needle.length === 0)
|
|
145
|
-
return false;
|
|
146
|
-
return normalizeForMatch(fileContent).includes(needle);
|
|
193
|
+
return locateQuote(fileContent, quotedText).length > 0;
|
|
147
194
|
}
|
|
148
195
|
const defaultSourceReader = (absolutePath) => readFile(absolutePath, "utf8");
|
|
149
196
|
/**
|
|
@@ -168,21 +215,39 @@ export function createMemoizedSourceReader() {
|
|
|
168
215
|
};
|
|
169
216
|
}
|
|
170
217
|
/**
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
*
|
|
218
|
+
* Ground a finding against disk: re-read each cited verbatim span, and let the
|
|
219
|
+
* code it quotes — never a number the reviewer typed — say where it is.
|
|
220
|
+
*
|
|
221
|
+
* Line numbers are TOOL-OWNED. Every `affected_files` entry loses whatever
|
|
222
|
+
* `line_start`/`line_end` it arrived with; an entry whose quote occurs exactly
|
|
223
|
+
* once in its file gets that occurrence's lines written back. A quote that
|
|
224
|
+
* occurs nowhere names nothing, and one that occurs more than once names no
|
|
225
|
+
* single place, so neither carries lines. A typed number used to pass every
|
|
226
|
+
* check while pointing anywhere in the file; a span derived from content the
|
|
227
|
+
* tool has just found cannot.
|
|
228
|
+
*
|
|
229
|
+
* The finding is `grounded` as soon as ONE entry's quote occurs exactly once;
|
|
230
|
+
* otherwise `ungrounded`, with a reason naming each entry that failed and why.
|
|
231
|
+
* The verdict is written to `finding.grounding` and also returned. It never
|
|
232
|
+
* refuses: an unlocatable quote is surfaced as unconfirmed, not discarded with
|
|
233
|
+
* its sibling findings.
|
|
175
234
|
*/
|
|
176
|
-
export async function
|
|
177
|
-
const
|
|
178
|
-
if (quoted.length === 0) {
|
|
179
|
-
return {
|
|
180
|
-
status: "ungrounded",
|
|
181
|
-
reason: "no affected_files entry carries a verbatim quoted_text span to re-verify",
|
|
182
|
-
};
|
|
183
|
-
}
|
|
235
|
+
export async function groundFinding(repoRoot, finding, readSource = defaultSourceReader) {
|
|
236
|
+
const entries = Array.isArray(finding.affected_files) ? finding.affected_files : [];
|
|
184
237
|
const misses = [];
|
|
185
|
-
|
|
238
|
+
let quotedCount = 0;
|
|
239
|
+
let located = false;
|
|
240
|
+
for (const loc of entries) {
|
|
241
|
+
if (typeof loc !== "object" || loc === null)
|
|
242
|
+
continue;
|
|
243
|
+
delete loc.line_start;
|
|
244
|
+
delete loc.line_end;
|
|
245
|
+
if (typeof loc.path !== "string" ||
|
|
246
|
+
typeof loc.quoted_text !== "string" ||
|
|
247
|
+
loc.quoted_text.trim().length === 0) {
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
quotedCount += 1;
|
|
186
251
|
const absolutePath = isAbsolute(loc.path) ? loc.path : join(repoRoot, loc.path);
|
|
187
252
|
let content;
|
|
188
253
|
try {
|
|
@@ -192,12 +257,30 @@ export async function verifyFindingGrounding(repoRoot, finding, readSource = def
|
|
|
192
257
|
misses.push(`${loc.path}: file could not be read on disk`);
|
|
193
258
|
continue;
|
|
194
259
|
}
|
|
195
|
-
|
|
196
|
-
|
|
260
|
+
const spans = locateQuote(content, loc.quoted_text);
|
|
261
|
+
if (spans.length === 1) {
|
|
262
|
+
loc.line_start = spans[0].line_start;
|
|
263
|
+
loc.line_end = spans[0].line_end;
|
|
264
|
+
located = true;
|
|
265
|
+
}
|
|
266
|
+
else if (spans.length === 0) {
|
|
267
|
+
misses.push(`${loc.path}: quoted_text not found on disk`);
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
misses.push(`${loc.path}: quoted_text occurs ${spans.length} times, so it names no single ` +
|
|
271
|
+
"location; quote a span that occurs once");
|
|
197
272
|
}
|
|
198
|
-
misses.push(`${loc.path}: quoted_text not found on disk`);
|
|
199
273
|
}
|
|
200
|
-
|
|
274
|
+
const grounding = quotedCount === 0
|
|
275
|
+
? {
|
|
276
|
+
status: "ungrounded",
|
|
277
|
+
reason: "no affected_files entry carries a verbatim quoted_text span to re-verify",
|
|
278
|
+
}
|
|
279
|
+
: located
|
|
280
|
+
? { status: "grounded" }
|
|
281
|
+
: { status: "ungrounded", reason: misses.join("; ") };
|
|
282
|
+
finding.grounding = grounding;
|
|
283
|
+
return grounding;
|
|
201
284
|
}
|
|
202
285
|
/**
|
|
203
286
|
* INV-GND-02 (total function): classify a finding's grounding as a verdict that
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"findingGrounding.js","sourceRoot":"","sources":["../../../src/shared/validation/findingGrounding.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"findingGrounding.js","sourceRoot":"","sources":["../../../src/shared/validation/findingGrounding.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED