audit-tools 0.50.21 → 0.51.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/dist/audit/cli/auditStep.d.ts +1 -1
- package/dist/audit/cli/charterExtractionPrompt.d.ts.map +1 -1
- package/dist/audit/cli/charterExtractionPrompt.js +14 -1
- package/dist/audit/cli/charterExtractionPrompt.js.map +1 -1
- package/dist/audit/cli/conceptualDispatch.d.ts.map +1 -1
- package/dist/audit/cli/conceptualDispatch.js +30 -5
- package/dist/audit/cli/conceptualDispatch.js.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.d.ts.map +1 -1
- package/dist/audit/cli/dispatch/hostHandoff.js +10 -0
- package/dist/audit/cli/dispatch/hostHandoff.js.map +1 -1
- package/dist/audit/cli/fanoutLanes.d.ts +7 -0
- package/dist/audit/cli/fanoutLanes.d.ts.map +1 -1
- package/dist/audit/cli/fanoutLanes.js +9 -1
- package/dist/audit/cli/fanoutLanes.js.map +1 -1
- package/dist/audit/cli/laneSubmissions.d.ts +38 -27
- package/dist/audit/cli/laneSubmissions.d.ts.map +1 -1
- package/dist/audit/cli/laneSubmissions.js +129 -2
- package/dist/audit/cli/laneSubmissions.js.map +1 -1
- package/dist/audit/cli/nextStepCommand.d.ts.map +1 -1
- package/dist/audit/cli/nextStepCommand.js +27 -7
- package/dist/audit/cli/nextStepCommand.js.map +1 -1
- package/dist/audit/cli/nextStepHelpers.d.ts.map +1 -1
- package/dist/audit/cli/nextStepHelpers.js +34 -4
- package/dist/audit/cli/nextStepHelpers.js.map +1 -1
- package/dist/audit/cli/sampleRunCommand.d.ts +2 -1
- package/dist/audit/cli/sampleRunCommand.d.ts.map +1 -1
- package/dist/audit/contracts/workerSchemas.d.ts +4 -4
- package/dist/audit/contracts/workerSchemas.d.ts.map +1 -1
- package/dist/audit/contracts/workerSchemas.js +12 -6
- package/dist/audit/contracts/workerSchemas.js.map +1 -1
- package/dist/audit/contracts/wrapperResponse.d.ts +7 -7
- package/dist/audit/contracts/wrapperResponse.d.ts.map +1 -1
- package/dist/audit/contracts/wrapperResponse.js +9 -1
- package/dist/audit/contracts/wrapperResponse.js.map +1 -1
- package/dist/audit/extractors/commentDecomposition.d.ts +28 -0
- package/dist/audit/extractors/commentDecomposition.d.ts.map +1 -1
- package/dist/audit/extractors/commentDecomposition.js +117 -0
- package/dist/audit/extractors/commentDecomposition.js.map +1 -1
- package/dist/audit/orchestrator/charterDeltaExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/charterDeltaExecutor.js +14 -0
- package/dist/audit/orchestrator/charterDeltaExecutor.js.map +1 -1
- package/dist/audit/orchestrator/charterExtractionExecutor.d.ts +16 -6
- package/dist/audit/orchestrator/charterExtractionExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/charterExtractionExecutor.js +127 -9
- package/dist/audit/orchestrator/charterExtractionExecutor.js.map +1 -1
- package/dist/audit/orchestrator/charterPacketArchive.d.ts +51 -0
- package/dist/audit/orchestrator/charterPacketArchive.d.ts.map +1 -0
- package/dist/audit/orchestrator/charterPacketArchive.js +173 -0
- package/dist/audit/orchestrator/charterPacketArchive.js.map +1 -0
- package/dist/audit/orchestrator/charterPackets.d.ts +31 -13
- package/dist/audit/orchestrator/charterPackets.d.ts.map +1 -1
- package/dist/audit/orchestrator/charterPackets.js +433 -79
- package/dist/audit/orchestrator/charterPackets.js.map +1 -1
- package/dist/audit/orchestrator/designReviewPrompt.d.ts +20 -4
- package/dist/audit/orchestrator/designReviewPrompt.d.ts.map +1 -1
- package/dist/audit/orchestrator/designReviewPrompt.js +89 -12
- package/dist/audit/orchestrator/designReviewPrompt.js.map +1 -1
- package/dist/audit/orchestrator/executorRunners.d.ts.map +1 -1
- package/dist/audit/orchestrator/executorRunners.js +17 -1
- package/dist/audit/orchestrator/executorRunners.js.map +1 -1
- package/dist/audit/orchestrator/graphEnrichmentExecutor.d.ts.map +1 -1
- package/dist/audit/orchestrator/graphEnrichmentExecutor.js +8 -1
- package/dist/audit/orchestrator/graphEnrichmentExecutor.js.map +1 -1
- package/dist/audit/orchestrator/state.d.ts.map +1 -1
- package/dist/audit/orchestrator/state.js +21 -14
- package/dist/audit/orchestrator/state.js.map +1 -1
- package/dist/audit/orchestrator/synthesisExecutors.d.ts +8 -0
- package/dist/audit/orchestrator/synthesisExecutors.d.ts.map +1 -1
- package/dist/audit/orchestrator/synthesisExecutors.js +10 -0
- package/dist/audit/orchestrator/synthesisExecutors.js.map +1 -1
- package/dist/audit/reporting/synthesis.d.ts +42 -2
- package/dist/audit/reporting/synthesis.d.ts.map +1 -1
- package/dist/audit/reporting/synthesis.js +265 -12
- package/dist/audit/reporting/synthesis.js.map +1 -1
- package/dist/audit/supervisor/operatorHandoff.d.ts.map +1 -1
- package/dist/audit/supervisor/operatorHandoff.js +14 -6
- package/dist/audit/supervisor/operatorHandoff.js.map +1 -1
- package/dist/audit/systemic/secondOrderAdversaryPrompt.d.ts.map +1 -1
- package/dist/audit/systemic/secondOrderAdversaryPrompt.js +7 -0
- package/dist/audit/systemic/secondOrderAdversaryPrompt.js.map +1 -1
- package/dist/audit/types/analyzerCapability.d.ts +35 -11
- package/dist/audit/types/analyzerCapability.d.ts.map +1 -1
- package/dist/audit/types/analyzerCapability.js +83 -5
- package/dist/audit/types/analyzerCapability.js.map +1 -1
- package/dist/audit/types/auditState.d.ts +8 -8
- package/dist/audit/types/charterRegister.d.ts +33 -3
- package/dist/audit/types/charterRegister.d.ts.map +1 -1
- package/dist/audit/types/charterRegister.js +11 -1
- package/dist/audit/types/charterRegister.js.map +1 -1
- package/dist/audit/types/conceptualAdjudication.d.ts +383 -4
- package/dist/audit/types/conceptualAdjudication.d.ts.map +1 -1
- package/dist/audit/types/conceptualAdjudication.js +109 -5
- package/dist/audit/types/conceptualAdjudication.js.map +1 -1
- package/dist/audit/types/designAssessment.d.ts +1 -1
- package/dist/audit/types/designAssessment.d.ts.map +1 -1
- package/dist/audit/types.d.ts +7 -2
- package/dist/audit/types.d.ts.map +1 -1
- package/dist/remediate/intent/intentOrdering.d.ts.map +1 -1
- package/dist/remediate/intent/intentOrdering.js +29 -1
- package/dist/remediate/intent/intentOrdering.js.map +1 -1
- package/dist/remediate/phases/grounding.d.ts +12 -4
- package/dist/remediate/phases/grounding.d.ts.map +1 -1
- package/dist/remediate/phases/grounding.js +23 -60
- package/dist/remediate/phases/grounding.js.map +1 -1
- package/dist/remediate/state/types.d.ts +5 -0
- package/dist/remediate/state/types.d.ts.map +1 -1
- package/dist/shared/analyzers/types.d.ts +17 -6
- package/dist/shared/analyzers/types.d.ts.map +1 -1
- package/dist/shared/analyzers/types.js +6 -15
- package/dist/shared/analyzers/types.js.map +1 -1
- package/dist/shared/decompose/systemicChallenge.d.ts +5 -0
- package/dist/shared/decompose/systemicChallenge.d.ts.map +1 -1
- package/dist/shared/engine/obligationEngine.d.ts +23 -6
- package/dist/shared/engine/obligationEngine.d.ts.map +1 -1
- package/dist/shared/engine/obligationEngine.js +38 -3
- package/dist/shared/engine/obligationEngine.js.map +1 -1
- package/dist/shared/findings/dedupe.d.ts +10 -0
- package/dist/shared/findings/dedupe.d.ts.map +1 -1
- package/dist/shared/findings/dedupe.js +15 -0
- package/dist/shared/findings/dedupe.js.map +1 -1
- package/dist/shared/index.d.ts +14 -6
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +12 -5
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/measurement/measuredOutcome.d.ts +61 -0
- package/dist/shared/measurement/measuredOutcome.d.ts.map +1 -0
- package/dist/shared/measurement/measuredOutcome.js +109 -0
- package/dist/shared/measurement/measuredOutcome.js.map +1 -0
- package/dist/shared/reporting/findingDisplay.d.ts +14 -2
- package/dist/shared/reporting/findingDisplay.d.ts.map +1 -1
- package/dist/shared/reporting/findingDisplay.js +29 -2
- package/dist/shared/reporting/findingDisplay.js.map +1 -1
- package/dist/shared/reporting/lensCoverage.d.ts +70 -0
- package/dist/shared/reporting/lensCoverage.d.ts.map +1 -0
- package/dist/shared/reporting/lensCoverage.js +108 -0
- package/dist/shared/reporting/lensCoverage.js.map +1 -0
- package/dist/shared/submission/submissionLedger.d.ts +24 -1
- package/dist/shared/submission/submissionLedger.d.ts.map +1 -1
- package/dist/shared/submission/submissionLedger.js +61 -0
- package/dist/shared/submission/submissionLedger.js.map +1 -1
- package/dist/shared/types/charterPacket.d.ts +155 -0
- package/dist/shared/types/charterPacket.d.ts.map +1 -0
- package/dist/shared/types/charterPacket.js +9 -0
- package/dist/shared/types/charterPacket.js.map +1 -0
- package/dist/shared/types/finding.d.ts +275 -40
- package/dist/shared/types/finding.d.ts.map +1 -1
- package/dist/shared/types/finding.js +87 -0
- package/dist/shared/types/finding.js.map +1 -1
- package/dist/shared/validation/citationGrounding.d.ts +115 -0
- package/dist/shared/validation/citationGrounding.d.ts.map +1 -0
- package/dist/shared/validation/citationGrounding.js +347 -0
- package/dist/shared/validation/citationGrounding.js.map +1 -0
- package/dist/shared/validation/findingsReport.d.ts.map +1 -1
- package/dist/shared/validation/findingsReport.js +62 -0
- package/dist/shared/validation/findingsReport.js.map +1 -1
- package/package.json +1 -1
- package/schemas/audit-code-v1alpha1.schema.json +2 -1
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import { z } from "zod";
|
|
13
13
|
import { AnalyzerLeadProvenanceSchema } from "../analyzers/provenance.js";
|
|
14
14
|
import { ContentCoherenceTraceSchema } from "../decompose/contentCoherence.js";
|
|
15
|
+
import { MeasuredOutcomeSchema } from "../measurement/measuredOutcome.js";
|
|
15
16
|
/** Canonical finding severity vocabulary (most-severe-first). */
|
|
16
17
|
export const FindingSeveritySchema = z.enum([
|
|
17
18
|
"critical",
|
|
@@ -125,6 +126,36 @@ export const FindingGroundingSchema = z.object({
|
|
|
125
126
|
/** When ungrounded/refuted, which cited span(s) failed and why. */
|
|
126
127
|
reason: z.string().optional(),
|
|
127
128
|
});
|
|
129
|
+
/**
|
|
130
|
+
* Whether the DEFECT a conceptual finding names is present at HEAD — the third
|
|
131
|
+
* axis, orthogonal to `grounding` (does it cite something real) and to the
|
|
132
|
+
* remediation outcome (what did we do about it). Grounding on the conceptual
|
|
133
|
+
* path certifies only that a cited component path exists, so it reads as
|
|
134
|
+
* confirmation while certifying far less; this field carries the presence claim.
|
|
135
|
+
*
|
|
136
|
+
* EVERY value here is JUDGE-AUTHORED. `judge_confirmed` is deliberately NOT
|
|
137
|
+
* spelled `confirmed`: the bare word is already taken by the executable-anchor
|
|
138
|
+
* contract above, where "the confirmed bit is the tool's run, never the model's
|
|
139
|
+
* word". This one is the opposite provenance — a judge's reading of HEAD, never
|
|
140
|
+
* a tool run — and the name must say so wherever it is read.
|
|
141
|
+
*
|
|
142
|
+
* - `judge_confirmed`: the judge checked the named defect against current code
|
|
143
|
+
* and it holds. The tool guarantees the claim is PRESENT, CONSISTENT and
|
|
144
|
+
* PUBLISHED (and that a non-`asserted` claim carries a note); never that it is
|
|
145
|
+
* true.
|
|
146
|
+
* - `asserted`: not checked. The default, and it is stated explicitly rather
|
|
147
|
+
* than left absent — an optional field defaults to silence, which is the
|
|
148
|
+
* failure this vocabulary exists to end.
|
|
149
|
+
* - `refuted_at_head`: the judge checked and the defect is absent or already
|
|
150
|
+
* remediated. It can NEVER appear on an admitted finding: the adjudication
|
|
151
|
+
* validator forces a `refuted_at_head` candidate to `rejected`, and a rejected
|
|
152
|
+
* candidate maps to no final finding.
|
|
153
|
+
*/
|
|
154
|
+
export const FindingVerificationStatusSchema = z.enum([
|
|
155
|
+
"judge_confirmed",
|
|
156
|
+
"asserted",
|
|
157
|
+
"refuted_at_head",
|
|
158
|
+
]);
|
|
128
159
|
/**
|
|
129
160
|
* What outcome of an executable anchor's command CONFIRMS the finding's claim.
|
|
130
161
|
* The worker declares the falsifiable condition; the tool runs the command and
|
|
@@ -193,6 +224,15 @@ export const FindingSchema = z.object({
|
|
|
193
224
|
* grounding pass runs at ingest.
|
|
194
225
|
*/
|
|
195
226
|
grounding: FindingGroundingSchema.optional(),
|
|
227
|
+
/**
|
|
228
|
+
* Whether the defect this finding names is present at HEAD. TOOL-DERIVED at
|
|
229
|
+
* conceptual ingest from the judge's per-candidate verification claims — host
|
|
230
|
+
* supply is REFUSED, exactly as for `grounding`, so the value can always be
|
|
231
|
+
* cross-checked against the adjudication record. Optional because the per-file
|
|
232
|
+
* audit workers have no verification concept; absent outside the conceptual
|
|
233
|
+
* design-review path.
|
|
234
|
+
*/
|
|
235
|
+
verification_status: FindingVerificationStatusSchema.optional(),
|
|
196
236
|
/**
|
|
197
237
|
* Optional executable anchor for a behavior claim (S7 tier-2). The tool runs
|
|
198
238
|
* the read-only `command` at ingest and folds the verdict into `grounding`: a
|
|
@@ -312,6 +352,30 @@ export function findingIdentity(finding) {
|
|
|
312
352
|
summary: finding.summary,
|
|
313
353
|
};
|
|
314
354
|
}
|
|
355
|
+
/**
|
|
356
|
+
* What ONE lens the operator selected actually delivered.
|
|
357
|
+
*
|
|
358
|
+
* `lens_breakdown` is a `countBy` over what was PRODUCED, so a selected lens
|
|
359
|
+
* that produced nothing has no key at all — and the render suppressed the whole
|
|
360
|
+
* line on an empty map. A run therefore advertised the operator's chosen scope,
|
|
361
|
+
* delivered a fraction of it, and nothing could distinguish "reviewed, nothing
|
|
362
|
+
* found" from "never reviewed". This states the difference:
|
|
363
|
+
*
|
|
364
|
+
* • `findings` — asked, and it found something.
|
|
365
|
+
* • `clean` — asked through a lens-open channel that was ingested, and there
|
|
366
|
+
* was nothing there. The ONLY value that may be read as "no defect".
|
|
367
|
+
* • `not_run` — selected, and no lens-open channel was ever ingested. Absence
|
|
368
|
+
* of a finding is not absence of a defect.
|
|
369
|
+
*/
|
|
370
|
+
export const LensCoverageEntrySchema = z
|
|
371
|
+
.object({
|
|
372
|
+
lens: z.string(),
|
|
373
|
+
/** True when the operator's resolved selection includes this lens. */
|
|
374
|
+
selected: z.boolean(),
|
|
375
|
+
findings_count: z.number().int().min(0),
|
|
376
|
+
outcome: MeasuredOutcomeSchema,
|
|
377
|
+
})
|
|
378
|
+
.strict();
|
|
315
379
|
export const AuditFindingsSummarySchema = z.object({
|
|
316
380
|
finding_count: z.number(),
|
|
317
381
|
work_block_count: z.number(),
|
|
@@ -329,6 +393,29 @@ export const AuditFindingsSummarySchema = z.object({
|
|
|
329
393
|
* dropped from the admitted set. Absent when no finding carried a verdict.
|
|
330
394
|
*/
|
|
331
395
|
grounding_status_breakdown: z.record(z.string(), z.number()).optional(),
|
|
396
|
+
/**
|
|
397
|
+
* Per-status counts of the judge's defect-presence claim, over the FINDINGS —
|
|
398
|
+
* `judge_confirmed` versus `asserted`, which is what lets a remediator rank
|
|
399
|
+
* one above the other. `refuted_at_head` never appears here: the adjudication
|
|
400
|
+
* validator forces a refuted candidate to `rejected`, and a rejected candidate
|
|
401
|
+
* maps to no final finding. Absent when no finding carried a status.
|
|
402
|
+
*
|
|
403
|
+
* Finding-scoped, and deliberately NOT reconciled with the CANDIDATE-scoped
|
|
404
|
+
* counts on `conceptual_review_adjudication.json`: the post-adjudication
|
|
405
|
+
* grounding quarantine can drop a merged candidate's final finding, so the two
|
|
406
|
+
* populations legitimately differ. One reconciled number would have to pick a
|
|
407
|
+
* population and would hide the quarantine.
|
|
408
|
+
*/
|
|
409
|
+
verification_status_breakdown: z.record(z.string(), z.number()).optional(),
|
|
410
|
+
/**
|
|
411
|
+
* What EVERY lens the operator selected delivered — the statement that makes
|
|
412
|
+
* an absent `lens_breakdown` key legible. Optional because a run that carried
|
|
413
|
+
* no lens selection has no coverage claim to make, and because the recovery
|
|
414
|
+
* deliverable mints a summary from a flat finding set with no checkpoint at
|
|
415
|
+
* all. PRESENCE is guaranteed at the synthesis boundary, which holds the
|
|
416
|
+
* checkpoint; this schema and its validator own only internal consistency.
|
|
417
|
+
*/
|
|
418
|
+
lens_coverage: z.array(LensCoverageEntrySchema).optional(),
|
|
332
419
|
});
|
|
333
420
|
/**
|
|
334
421
|
* The canonical `audit-findings.json` contract. Deterministic fields are always
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finding.js","sourceRoot":"","sources":["../../../src/shared/types/finding.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"finding.js","sourceRoot":"","sources":["../../../src/shared/types/finding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/** Reads a source file's text synchronously; injectable so the core is testable without fs. */
|
|
2
|
+
export type SyncSourceReader = (absolutePath: string) => string;
|
|
3
|
+
/**
|
|
4
|
+
* A {@link SyncSourceReader} memoized by absolute path, for ONE checking pass: a
|
|
5
|
+
* batch of citations into the same file reads that file once. Failures are cached
|
|
6
|
+
* too, so an unreadable path is not retried per citation.
|
|
7
|
+
*
|
|
8
|
+
* Scope it to a single pass and discard it — a reader that outlived the pass
|
|
9
|
+
* would serve stale bytes after a later edit, which is exactly what re-checking
|
|
10
|
+
* a citation against disk exists to catch.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createMemoizedSyncSourceReader(): SyncSourceReader;
|
|
13
|
+
/**
|
|
14
|
+
* The number of TRUE lines in a source text.
|
|
15
|
+
*
|
|
16
|
+
* Two corrections over a bare `split("\n").length`, both of which produced a
|
|
17
|
+
* silent off-by-one that let `path:<n+1>` ground into an n-line file:
|
|
18
|
+
* - a single TRAILING empty segment is dropped — a file that ends with a line
|
|
19
|
+
* terminator has n lines, not n+1;
|
|
20
|
+
* - carriage returns are stripped first, so a CRLF checkout counts the same as
|
|
21
|
+
* an LF one (`OS/platform-agnostic`: the same file must not have two lengths
|
|
22
|
+
* depending on who checked it out).
|
|
23
|
+
* Empty content is zero lines.
|
|
24
|
+
*/
|
|
25
|
+
export declare function countSourceLines(content: string): number;
|
|
26
|
+
/** A parsed citation reference. `end_line` is absent for a single-line citation. */
|
|
27
|
+
export interface ParsedCitation {
|
|
28
|
+
/** The reference exactly as it was written — never rewritten, never repaired. */
|
|
29
|
+
raw: string;
|
|
30
|
+
path: string;
|
|
31
|
+
start_line?: number;
|
|
32
|
+
end_line?: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Parse `path`, `path:12`, or `path:12-19` into its parts. Returns `undefined`
|
|
36
|
+
* when the reference carries no path at all (empty, or a bare line suffix).
|
|
37
|
+
* The path half is taken verbatim: resolving it is a separate step, so a
|
|
38
|
+
* component id or a checkpoint field parses here and fails to resolve later,
|
|
39
|
+
* which is the honest split.
|
|
40
|
+
*/
|
|
41
|
+
export declare function parseCitationRef(ref: string): ParsedCitation | undefined;
|
|
42
|
+
/** Every citation reference embedded in a prose string, in source order. */
|
|
43
|
+
export declare function extractCitationRefs(text: string): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Strip the emitted `NNN| ` line prefix from every line of a quoted span,
|
|
46
|
+
* POSITIONALLY — by the fixed character width the emitter recorded, never by a
|
|
47
|
+
* regex. A regex (`^\s*\d+\| `) collides with the markdown table rows the doc
|
|
48
|
+
* evidence class delivers verbatim (`| 12 | value |`), silently mutilating a
|
|
49
|
+
* quoted cell before it is matched. A line shorter than the prefix carries no
|
|
50
|
+
* prefix and is left alone.
|
|
51
|
+
*/
|
|
52
|
+
export declare function stripEmittedLinePrefix(text: string, prefixWidth: number): string;
|
|
53
|
+
/** One contiguous run of TRUE 1-based source lines. */
|
|
54
|
+
export interface DeliveredLineRun {
|
|
55
|
+
start: number;
|
|
56
|
+
end: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* One excerpt as it was actually delivered to the author: which file it came
|
|
60
|
+
* from, which contiguous line runs of that file it contained, and how wide the
|
|
61
|
+
* emitted per-line prefix was. A first-to-last SPAN would be a lie for a
|
|
62
|
+
* deliberately non-contiguous excerpt (extracted comment blocks, declaration
|
|
63
|
+
* lines) — the runs are what was delivered, so the runs are what is checked.
|
|
64
|
+
*/
|
|
65
|
+
export interface DeliveredExcerpt {
|
|
66
|
+
source_path: string;
|
|
67
|
+
line_runs: readonly DeliveredLineRun[];
|
|
68
|
+
prefix_width: number;
|
|
69
|
+
}
|
|
70
|
+
export type CitationVerdict = "ok" | "unparseable" | "unknown_path" | "inverted_range" | "line_out_of_range" | "outside_delivered_evidence" | "quote_not_found";
|
|
71
|
+
export interface CitationCheck {
|
|
72
|
+
owner_id: string;
|
|
73
|
+
/** The submitted reference, byte-identical — reported, never rewritten. */
|
|
74
|
+
ref: string;
|
|
75
|
+
verdict: CitationVerdict;
|
|
76
|
+
resolved_path?: string;
|
|
77
|
+
file_lines?: number;
|
|
78
|
+
detail?: string;
|
|
79
|
+
}
|
|
80
|
+
export interface CitationInput {
|
|
81
|
+
/** Whatever the caller uses to attribute the citation (a charter id, a lane). */
|
|
82
|
+
owner_id: string;
|
|
83
|
+
ref: string;
|
|
84
|
+
quote?: string;
|
|
85
|
+
}
|
|
86
|
+
export interface CheckCitationsParams {
|
|
87
|
+
root: string;
|
|
88
|
+
/** Tracked repo paths, case-preserving — for bare-basename resolution. */
|
|
89
|
+
corpus: ReadonlySet<string>;
|
|
90
|
+
citations: readonly CitationInput[];
|
|
91
|
+
readSource?: SyncSourceReader;
|
|
92
|
+
/**
|
|
93
|
+
* What the author was actually handed. When supplied, a citation whose lines
|
|
94
|
+
* lie in no delivered run is `outside_delivered_evidence`. When ABSENT the
|
|
95
|
+
* check is skipped entirely and {@link CitationCheckResult.delivered_evidence_checked}
|
|
96
|
+
* says so — an unavailable manifest must read as "not checked", never as a pass.
|
|
97
|
+
*/
|
|
98
|
+
delivered?: readonly DeliveredExcerpt[];
|
|
99
|
+
}
|
|
100
|
+
export interface CitationCheckResult {
|
|
101
|
+
/** Citations that parsed into a path and were checked. */
|
|
102
|
+
checked_count: number;
|
|
103
|
+
/** Every citation's verdict, sorted by (owner_id, ref). */
|
|
104
|
+
checks: CitationCheck[];
|
|
105
|
+
/** Whether the delivered-evidence leg ran (a `delivered` index was supplied). */
|
|
106
|
+
delivered_evidence_checked: boolean;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Check every citation and return a verdict for each. Deterministic and
|
|
110
|
+
* order-stable: the result array is sorted by `(owner_id, ref)`, so a re-run over
|
|
111
|
+
* the same inputs produces a byte-identical array and cannot churn the content
|
|
112
|
+
* hash of an artifact that carries it.
|
|
113
|
+
*/
|
|
114
|
+
export declare function checkCitations(params: CheckCitationsParams): CitationCheckResult;
|
|
115
|
+
//# sourceMappingURL=citationGrounding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citationGrounding.d.ts","sourceRoot":"","sources":["../../../src/shared/validation/citationGrounding.ts"],"names":[],"mappings":"AAuCA,+FAA+F;AAC/F,MAAM,MAAM,gBAAgB,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;AAKhE;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,IAAI,gBAAgB,CAgBjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,iFAAiF;IACjF,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAYxE;AAYD,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAgB1D;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAMhF;AAED,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACvC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,eAAe,GACvB,IAAI,GACJ,aAAa,GACb,cAAc,GACd,gBAAgB,GAChB,mBAAmB,GACnB,4BAA4B,GAC5B,iBAAiB,CAAC;AAEtB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,eAAe,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,iFAAiF;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IACpC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,mBAAmB;IAClC,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,iFAAiF;IACjF,0BAA0B,EAAE,OAAO,CAAC;CACrC;AA2CD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,oBAAoB,GAC3B,mBAAmB,CA6KrB"}
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Citation grounding — ONE core, two draws.
|
|
3
|
+
*
|
|
4
|
+
* A citation is `path`, `path:line`, or `path:start-end`. This module is the
|
|
5
|
+
* single authority that parses one, resolves its path against the repository,
|
|
6
|
+
* checks its line range against the file's REAL length, optionally re-verifies a
|
|
7
|
+
* quoted span, and — when the caller can say what evidence was actually handed to
|
|
8
|
+
* the author — checks that the cited lines lie inside evidence that was delivered.
|
|
9
|
+
*
|
|
10
|
+
* Two draws consume it:
|
|
11
|
+
* - the REMEDIATE draw asks the existential question ("does this evidence
|
|
12
|
+
* string cite at least one real, in-range location?") through
|
|
13
|
+
* `evidenceCitesRealPath`, a thin wrapper in `src/remediate/phases/grounding.ts`;
|
|
14
|
+
* - the AUDIT draw asks the per-citation question over a charter register's
|
|
15
|
+
* `provenance[].ref` / `.quote` and records each verdict.
|
|
16
|
+
*
|
|
17
|
+
* **The core is SYNCHRONOUS**, over an injected {@link SyncSourceReader}. That is
|
|
18
|
+
* a deliberate constraint, not an oversight: the remediate draw's callers
|
|
19
|
+
* (`evidenceCitesRealPath`, `groundEvidence`) are synchronous predicates called
|
|
20
|
+
* inside `.some()` over every finding's evidence, and making them async would
|
|
21
|
+
* cascade through the whole grounding pass for no gain — the reads are small,
|
|
22
|
+
* memoized per pass, and already synchronous today.
|
|
23
|
+
*
|
|
24
|
+
* **It REJECTS, it never REPAIRS.** A wrong line number is reported unchanged;
|
|
25
|
+
* there is no nearest-enclosing-declaration resolution. That pass was tried and
|
|
26
|
+
* rejected repo-wide on 2026-07-28 (see `docs/backlog/durable-traps.md`, "Cite a
|
|
27
|
+
* SYMBOL, never a bare line number"): it swapped an honest stale number for a
|
|
28
|
+
* confident wrong one. The verdict enum has no repair state, so the exclusion is
|
|
29
|
+
* by construction rather than by intent.
|
|
30
|
+
*/
|
|
31
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
32
|
+
import { isAbsolute, join } from "node:path";
|
|
33
|
+
import { compareCodeUnits } from "../compareCodeUnits.js";
|
|
34
|
+
import { isBareBasename, quoteMatches, resolveBasenameToTrackedPath, } from "./findingGrounding.js";
|
|
35
|
+
const defaultSyncSourceReader = (absolutePath) => readFileSync(absolutePath, "utf8");
|
|
36
|
+
/**
|
|
37
|
+
* A {@link SyncSourceReader} memoized by absolute path, for ONE checking pass: a
|
|
38
|
+
* batch of citations into the same file reads that file once. Failures are cached
|
|
39
|
+
* too, so an unreadable path is not retried per citation.
|
|
40
|
+
*
|
|
41
|
+
* Scope it to a single pass and discard it — a reader that outlived the pass
|
|
42
|
+
* would serve stale bytes after a later edit, which is exactly what re-checking
|
|
43
|
+
* a citation against disk exists to catch.
|
|
44
|
+
*/
|
|
45
|
+
export function createMemoizedSyncSourceReader() {
|
|
46
|
+
const hits = new Map();
|
|
47
|
+
const misses = new Map();
|
|
48
|
+
return (absolutePath) => {
|
|
49
|
+
const cached = hits.get(absolutePath);
|
|
50
|
+
if (cached !== undefined)
|
|
51
|
+
return cached;
|
|
52
|
+
if (misses.has(absolutePath))
|
|
53
|
+
throw misses.get(absolutePath);
|
|
54
|
+
try {
|
|
55
|
+
const text = defaultSyncSourceReader(absolutePath);
|
|
56
|
+
hits.set(absolutePath, text);
|
|
57
|
+
return text;
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
misses.set(absolutePath, error);
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The number of TRUE lines in a source text.
|
|
67
|
+
*
|
|
68
|
+
* Two corrections over a bare `split("\n").length`, both of which produced a
|
|
69
|
+
* silent off-by-one that let `path:<n+1>` ground into an n-line file:
|
|
70
|
+
* - a single TRAILING empty segment is dropped — a file that ends with a line
|
|
71
|
+
* terminator has n lines, not n+1;
|
|
72
|
+
* - carriage returns are stripped first, so a CRLF checkout counts the same as
|
|
73
|
+
* an LF one (`OS/platform-agnostic`: the same file must not have two lengths
|
|
74
|
+
* depending on who checked it out).
|
|
75
|
+
* Empty content is zero lines.
|
|
76
|
+
*/
|
|
77
|
+
export function countSourceLines(content) {
|
|
78
|
+
if (content.length === 0)
|
|
79
|
+
return 0;
|
|
80
|
+
const segments = content.replace(/\r/g, "").split("\n");
|
|
81
|
+
if (segments.length > 1 && segments[segments.length - 1] === "") {
|
|
82
|
+
segments.pop();
|
|
83
|
+
}
|
|
84
|
+
return segments.length;
|
|
85
|
+
}
|
|
86
|
+
/** The `:<start>[-<end>]` suffix, anchored at the end of a reference. */
|
|
87
|
+
const LINE_SUFFIX_RE = /:(\d+)(?:-(\d+))?$/;
|
|
88
|
+
/**
|
|
89
|
+
* Parse `path`, `path:12`, or `path:12-19` into its parts. Returns `undefined`
|
|
90
|
+
* when the reference carries no path at all (empty, or a bare line suffix).
|
|
91
|
+
* The path half is taken verbatim: resolving it is a separate step, so a
|
|
92
|
+
* component id or a checkpoint field parses here and fails to resolve later,
|
|
93
|
+
* which is the honest split.
|
|
94
|
+
*/
|
|
95
|
+
export function parseCitationRef(ref) {
|
|
96
|
+
const trimmed = ref.trim();
|
|
97
|
+
if (trimmed.length === 0)
|
|
98
|
+
return undefined;
|
|
99
|
+
const suffix = LINE_SUFFIX_RE.exec(trimmed);
|
|
100
|
+
if (!suffix)
|
|
101
|
+
return { raw: ref, path: trimmed };
|
|
102
|
+
const path = trimmed.slice(0, suffix.index);
|
|
103
|
+
if (path.length === 0)
|
|
104
|
+
return undefined;
|
|
105
|
+
const start = Number(suffix[1]);
|
|
106
|
+
const end = suffix[2] === undefined ? undefined : Number(suffix[2]);
|
|
107
|
+
return end === undefined
|
|
108
|
+
? { raw: ref, path, start_line: start }
|
|
109
|
+
: { raw: ref, path, start_line: start, end_line: end };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Candidate `path[:start[-end]]` citations inside a prose string. A token must
|
|
113
|
+
* look like a path (contains a separator or a dot-extension) to be considered;
|
|
114
|
+
* bare prose words never match. THE one home of the embedded-citation grammar —
|
|
115
|
+
* the range half is what a `(?::(\d+))?` grammar silently dropped, validating a
|
|
116
|
+
* citation's start while its end overshot the file by 50x.
|
|
117
|
+
*/
|
|
118
|
+
const EVIDENCE_PATH_TOKEN_RE = /(?<path>[A-Za-z0-9_@.-]*[/\\][A-Za-z0-9_@./\\-]+|[A-Za-z0-9_@-]+\.[A-Za-z0-9_-]+)(?::(?<start>\d+)(?:-(?<end>\d+))?)?/g;
|
|
119
|
+
/** Every citation reference embedded in a prose string, in source order. */
|
|
120
|
+
export function extractCitationRefs(text) {
|
|
121
|
+
const refs = [];
|
|
122
|
+
for (const match of text.matchAll(EVIDENCE_PATH_TOKEN_RE)) {
|
|
123
|
+
const path = match.groups?.path;
|
|
124
|
+
if (!path)
|
|
125
|
+
continue;
|
|
126
|
+
const start = match.groups?.start;
|
|
127
|
+
const end = match.groups?.end;
|
|
128
|
+
refs.push(start === undefined
|
|
129
|
+
? path
|
|
130
|
+
: end === undefined
|
|
131
|
+
? `${path}:${start}`
|
|
132
|
+
: `${path}:${start}-${end}`);
|
|
133
|
+
}
|
|
134
|
+
return refs;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Strip the emitted `NNN| ` line prefix from every line of a quoted span,
|
|
138
|
+
* POSITIONALLY — by the fixed character width the emitter recorded, never by a
|
|
139
|
+
* regex. A regex (`^\s*\d+\| `) collides with the markdown table rows the doc
|
|
140
|
+
* evidence class delivers verbatim (`| 12 | value |`), silently mutilating a
|
|
141
|
+
* quoted cell before it is matched. A line shorter than the prefix carries no
|
|
142
|
+
* prefix and is left alone.
|
|
143
|
+
*/
|
|
144
|
+
export function stripEmittedLinePrefix(text, prefixWidth) {
|
|
145
|
+
if (prefixWidth <= 0)
|
|
146
|
+
return text;
|
|
147
|
+
return text
|
|
148
|
+
.split("\n")
|
|
149
|
+
.map((line) => (line.length >= prefixWidth ? line.slice(prefixWidth) : line))
|
|
150
|
+
.join("\n");
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Resolve a cited path to an existing absolute path plus the repo-relative form
|
|
154
|
+
* it resolved through. A full/dotfile path resolves by the `root` join; a bare
|
|
155
|
+
* basename that is not a top-level file resolves against the tracked-path corpus
|
|
156
|
+
* (INV-B3-3) so a nested `advance.ts` is not false-negatived.
|
|
157
|
+
*/
|
|
158
|
+
function resolveCitedPath(root, citedPath, corpus) {
|
|
159
|
+
const trimmed = citedPath.trim();
|
|
160
|
+
const direct = isAbsolute(trimmed) ? trimmed : join(root, trimmed);
|
|
161
|
+
if (existsSync(direct)) {
|
|
162
|
+
return { absolutePath: direct, repoRelativePath: trimmed.replace(/\\/g, "/") };
|
|
163
|
+
}
|
|
164
|
+
if (isBareBasename(trimmed)) {
|
|
165
|
+
const tracked = resolveBasenameToTrackedPath(trimmed, corpus);
|
|
166
|
+
if (tracked) {
|
|
167
|
+
const resolved = isAbsolute(tracked) ? tracked : join(root, tracked);
|
|
168
|
+
if (existsSync(resolved)) {
|
|
169
|
+
return { absolutePath: resolved, repoRelativePath: tracked };
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
function runContains(runs, start, end) {
|
|
176
|
+
return runs.some((run) => start >= run.start && end <= run.end);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Check every citation and return a verdict for each. Deterministic and
|
|
180
|
+
* order-stable: the result array is sorted by `(owner_id, ref)`, so a re-run over
|
|
181
|
+
* the same inputs produces a byte-identical array and cannot churn the content
|
|
182
|
+
* hash of an artifact that carries it.
|
|
183
|
+
*/
|
|
184
|
+
export function checkCitations(params) {
|
|
185
|
+
const readSource = params.readSource ?? createMemoizedSyncSourceReader();
|
|
186
|
+
const deliveredByPath = new Map();
|
|
187
|
+
for (const excerpt of params.delivered ?? []) {
|
|
188
|
+
const existing = deliveredByPath.get(excerpt.source_path);
|
|
189
|
+
if (existing)
|
|
190
|
+
existing.push(excerpt);
|
|
191
|
+
else
|
|
192
|
+
deliveredByPath.set(excerpt.source_path, [excerpt]);
|
|
193
|
+
}
|
|
194
|
+
const deliveredChecked = params.delivered !== undefined;
|
|
195
|
+
const checks = [];
|
|
196
|
+
let checkedCount = 0;
|
|
197
|
+
for (const citation of params.citations) {
|
|
198
|
+
const parsed = parseCitationRef(citation.ref);
|
|
199
|
+
if (!parsed) {
|
|
200
|
+
checks.push({
|
|
201
|
+
owner_id: citation.owner_id,
|
|
202
|
+
ref: citation.ref,
|
|
203
|
+
verdict: "unparseable",
|
|
204
|
+
detail: "no path could be read from the reference",
|
|
205
|
+
});
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
checkedCount += 1;
|
|
209
|
+
const resolved = resolveCitedPath(params.root, parsed.path, params.corpus);
|
|
210
|
+
if (!resolved) {
|
|
211
|
+
checks.push({
|
|
212
|
+
owner_id: citation.owner_id,
|
|
213
|
+
ref: citation.ref,
|
|
214
|
+
verdict: "unknown_path",
|
|
215
|
+
detail: `'${parsed.path}' does not resolve in the repository`,
|
|
216
|
+
});
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
const excerpts = deliveredByPath.get(resolved.repoRelativePath) ?? [];
|
|
220
|
+
let fileLines;
|
|
221
|
+
if (parsed.start_line !== undefined) {
|
|
222
|
+
const end = parsed.end_line ?? parsed.start_line;
|
|
223
|
+
if (parsed.start_line > end) {
|
|
224
|
+
checks.push({
|
|
225
|
+
owner_id: citation.owner_id,
|
|
226
|
+
ref: citation.ref,
|
|
227
|
+
verdict: "inverted_range",
|
|
228
|
+
resolved_path: resolved.repoRelativePath,
|
|
229
|
+
detail: `start line ${parsed.start_line} is after end line ${end}`,
|
|
230
|
+
});
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
let isFile = false;
|
|
234
|
+
try {
|
|
235
|
+
isFile = statSync(resolved.absolutePath).isFile();
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
isFile = false;
|
|
239
|
+
}
|
|
240
|
+
if (!isFile) {
|
|
241
|
+
checks.push({
|
|
242
|
+
owner_id: citation.owner_id,
|
|
243
|
+
ref: citation.ref,
|
|
244
|
+
verdict: "unknown_path",
|
|
245
|
+
resolved_path: resolved.repoRelativePath,
|
|
246
|
+
detail: "cited lines in something that is not a readable file",
|
|
247
|
+
});
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
let content;
|
|
251
|
+
try {
|
|
252
|
+
content = readSource(resolved.absolutePath);
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
checks.push({
|
|
256
|
+
owner_id: citation.owner_id,
|
|
257
|
+
ref: citation.ref,
|
|
258
|
+
verdict: "unknown_path",
|
|
259
|
+
resolved_path: resolved.repoRelativePath,
|
|
260
|
+
detail: "file could not be read on disk",
|
|
261
|
+
});
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
fileLines = countSourceLines(content);
|
|
265
|
+
if (parsed.start_line < 1 || end > fileLines) {
|
|
266
|
+
checks.push({
|
|
267
|
+
owner_id: citation.owner_id,
|
|
268
|
+
ref: citation.ref,
|
|
269
|
+
verdict: "line_out_of_range",
|
|
270
|
+
resolved_path: resolved.repoRelativePath,
|
|
271
|
+
file_lines: fileLines,
|
|
272
|
+
detail: `cited lines ${parsed.start_line}-${end} in a ${fileLines}-line file`,
|
|
273
|
+
});
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
if (deliveredChecked) {
|
|
277
|
+
const inside = excerpts.some((excerpt) => runContains(excerpt.line_runs, parsed.start_line, end));
|
|
278
|
+
if (!inside) {
|
|
279
|
+
checks.push({
|
|
280
|
+
owner_id: citation.owner_id,
|
|
281
|
+
ref: citation.ref,
|
|
282
|
+
verdict: "outside_delivered_evidence",
|
|
283
|
+
resolved_path: resolved.repoRelativePath,
|
|
284
|
+
file_lines: fileLines,
|
|
285
|
+
detail: excerpts.length === 0
|
|
286
|
+
? "no excerpt of this file was delivered to the author"
|
|
287
|
+
: `lines ${parsed.start_line}-${end} lie in no delivered run of this file`,
|
|
288
|
+
});
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// A PATH-ONLY citation makes no line claim, so it is not checked against the
|
|
294
|
+
// delivered runs. Some channels legitimately name a file they delivered no
|
|
295
|
+
// excerpt of — the structural packet lists every member in its file tree
|
|
296
|
+
// while a member with no top-level declarations yields no excerpt — and
|
|
297
|
+
// refusing those would be a false red, not a caught defect.
|
|
298
|
+
const quote = citation.quote?.trim() ?? "";
|
|
299
|
+
if (quote.length > 0) {
|
|
300
|
+
let content;
|
|
301
|
+
try {
|
|
302
|
+
content = readSource(resolved.absolutePath);
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
checks.push({
|
|
306
|
+
owner_id: citation.owner_id,
|
|
307
|
+
ref: citation.ref,
|
|
308
|
+
verdict: "unknown_path",
|
|
309
|
+
resolved_path: resolved.repoRelativePath,
|
|
310
|
+
detail: "file could not be read on disk",
|
|
311
|
+
});
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
// The RAW quote first — a correctly de-prefixed quote must never be
|
|
315
|
+
// mutilated by a strip it did not need. Only when that fails is the
|
|
316
|
+
// positional strip tried, using the width the emitter recorded.
|
|
317
|
+
const widths = new Set(excerpts.map((excerpt) => excerpt.prefix_width));
|
|
318
|
+
const matched = quoteMatches(content, citation.quote) ||
|
|
319
|
+
[...widths].some((width) => quoteMatches(content, stripEmittedLinePrefix(citation.quote, width)));
|
|
320
|
+
if (!matched) {
|
|
321
|
+
checks.push({
|
|
322
|
+
owner_id: citation.owner_id,
|
|
323
|
+
ref: citation.ref,
|
|
324
|
+
verdict: "quote_not_found",
|
|
325
|
+
resolved_path: resolved.repoRelativePath,
|
|
326
|
+
file_lines: fileLines,
|
|
327
|
+
detail: "the quoted span does not appear in the cited file",
|
|
328
|
+
});
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
checks.push({
|
|
333
|
+
owner_id: citation.owner_id,
|
|
334
|
+
ref: citation.ref,
|
|
335
|
+
verdict: "ok",
|
|
336
|
+
resolved_path: resolved.repoRelativePath,
|
|
337
|
+
...(fileLines === undefined ? {} : { file_lines: fileLines }),
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
checks.sort((a, b) => compareCodeUnits(a.owner_id, b.owner_id) || compareCodeUnits(a.ref, b.ref));
|
|
341
|
+
return {
|
|
342
|
+
checked_count: checkedCount,
|
|
343
|
+
checks,
|
|
344
|
+
delivered_evidence_checked: deliveredChecked,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=citationGrounding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"citationGrounding.js","sourceRoot":"","sources":["../../../src/shared/validation/citationGrounding.ts"],"names":[],"mappings":"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"}
|