@promptci/core 0.3.0 → 0.4.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/action-pinning.d.ts.map +1 -1
- package/dist/action-pinning.js +86 -55
- package/dist/action-pinning.js.map +1 -1
- package/dist/agent-practices.d.ts +5 -1
- package/dist/agent-practices.d.ts.map +1 -1
- package/dist/agent-practices.js +59 -34
- package/dist/agent-practices.js.map +1 -1
- package/dist/baseline.d.ts +8 -0
- package/dist/baseline.d.ts.map +1 -1
- package/dist/baseline.js +15 -0
- package/dist/baseline.js.map +1 -1
- package/dist/ci-alignment.d.ts +3 -1
- package/dist/ci-alignment.d.ts.map +1 -1
- package/dist/ci-alignment.js +8 -1
- package/dist/ci-alignment.js.map +1 -1
- package/dist/command-context.d.ts +67 -0
- package/dist/command-context.d.ts.map +1 -0
- package/dist/command-context.js +291 -0
- package/dist/command-context.js.map +1 -0
- package/dist/command-validity.d.ts.map +1 -1
- package/dist/command-validity.js +404 -32
- package/dist/command-validity.js.map +1 -1
- package/dist/dead-references.d.ts +6 -0
- package/dist/dead-references.d.ts.map +1 -1
- package/dist/dead-references.js +120 -7
- package/dist/dead-references.js.map +1 -1
- package/dist/duplicates.d.ts +24 -2
- package/dist/duplicates.d.ts.map +1 -1
- package/dist/duplicates.js +313 -9
- package/dist/duplicates.js.map +1 -1
- package/dist/health-score.d.ts +15 -1
- package/dist/health-score.d.ts.map +1 -1
- package/dist/health-score.js +25 -2
- package/dist/health-score.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/manifest-consistency.d.ts.map +1 -1
- package/dist/manifest-consistency.js +6 -0
- package/dist/manifest-consistency.js.map +1 -1
- package/dist/markdown-fences.d.ts.map +1 -1
- package/dist/markdown-fences.js +7 -3
- package/dist/markdown-fences.js.map +1 -1
- package/dist/provenance/check.d.ts +40 -0
- package/dist/provenance/check.d.ts.map +1 -0
- package/dist/provenance/check.js +157 -0
- package/dist/provenance/check.js.map +1 -0
- package/dist/provenance/index.d.ts +13 -0
- package/dist/provenance/index.d.ts.map +1 -0
- package/dist/provenance/index.js +21 -0
- package/dist/provenance/index.js.map +1 -0
- package/dist/provenance/instruction-advice.d.ts +3 -0
- package/dist/provenance/instruction-advice.d.ts.map +1 -0
- package/dist/provenance/instruction-advice.js +570 -0
- package/dist/provenance/instruction-advice.js.map +1 -0
- package/dist/provenance/repo-checks.d.ts +3 -0
- package/dist/provenance/repo-checks.d.ts.map +1 -0
- package/dist/provenance/repo-checks.js +644 -0
- package/dist/provenance/repo-checks.js.map +1 -0
- package/dist/provenance/tool-config.d.ts +3 -0
- package/dist/provenance/tool-config.d.ts.map +1 -0
- package/dist/provenance/tool-config.js +480 -0
- package/dist/provenance/tool-config.js.map +1 -0
- package/dist/provenance/types.d.ts +116 -0
- package/dist/provenance/types.d.ts.map +1 -0
- package/dist/provenance/types.js +17 -0
- package/dist/provenance/types.js.map +1 -0
- package/dist/repo-context.d.ts.map +1 -1
- package/dist/repo-context.js +3 -6
- package/dist/repo-context.js.map +1 -1
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +3 -0
- package/dist/report.js.map +1 -1
- package/dist/sample-text.d.ts +36 -0
- package/dist/sample-text.d.ts.map +1 -0
- package/dist/sample-text.js +72 -0
- package/dist/sample-text.js.map +1 -0
- package/dist/security-pack.d.ts.map +1 -1
- package/dist/security-pack.js +83 -0
- package/dist/security-pack.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/workspace-manifests.d.ts +6 -0
- package/dist/workspace-manifests.d.ts.map +1 -1
- package/dist/workspace-manifests.js +13 -8
- package/dist/workspace-manifests.js.map +1 -1
- package/package.json +1 -1
package/dist/duplicates.d.ts
CHANGED
|
@@ -5,13 +5,35 @@
|
|
|
5
5
|
* exact matches or near-duplicates (Jaccard ≥ 0.8).
|
|
6
6
|
*
|
|
7
7
|
* When the same section appears in N files, ONE issue is emitted listing
|
|
8
|
-
* all N files — not N*(N-1)/2 pairwise issues.
|
|
8
|
+
* all N files — not N*(N-1)/2 pairwise issues. When whole files mirror each
|
|
9
|
+
* other (most sections match), ONE warning is emitted for the group of files
|
|
10
|
+
* in place of the per-section findings between them (pcic-1ik0.5).
|
|
9
11
|
*
|
|
10
12
|
* Wording is intentionally cautious — all findings are heuristic.
|
|
11
13
|
*/
|
|
12
|
-
import type { InstructionFile, PromptCiIssue } from './types.js';
|
|
14
|
+
import type { InstructionFile, InstructionSection, PromptCiIssue } from './types.js';
|
|
13
15
|
/** Normalise text for comparison: lowercase, collapse whitespace, strip markdown syntax. */
|
|
14
16
|
export declare function normalizeSection(text: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* The ONE definition of "the same text" for an UNATTENDED consolidation edit,
|
|
19
|
+
* shared by per-section duplicate findings, mirrored-file findings and the
|
|
20
|
+
* import recipe (pcic-1ik0.5, pcic-1ik0.10). Two sections are the same text
|
|
21
|
+
* only when they are byte-identical after normalising exactly these, and
|
|
22
|
+
* nothing else:
|
|
23
|
+
*
|
|
24
|
+
* - line endings (CRLF and CR become LF);
|
|
25
|
+
* - trailing whitespace at the end of each line;
|
|
26
|
+
* - a leading byte-order mark;
|
|
27
|
+
* - leading and trailing blank lines of the section.
|
|
28
|
+
*
|
|
29
|
+
* No interior whitespace is collapsed, no indentation is trimmed, no reflow is
|
|
30
|
+
* treated as equal and no Markdown is modelled: a nested list, `<pre>` or
|
|
31
|
+
* inline-code spacing, a reflowed paragraph, tabs versus spaces, or a
|
|
32
|
+
* different Unicode normalisation all count as different, and the finding is
|
|
33
|
+
* then advisory. That costs a few auto-fixes and removes the whole class of
|
|
34
|
+
* "equal after normalising, different in meaning" wrong edits.
|
|
35
|
+
*/
|
|
36
|
+
export declare function sameSectionText(section: Pick<InstructionSection, 'text'>): string;
|
|
15
37
|
/**
|
|
16
38
|
* Detect duplicate or near-duplicate sections across all instruction files.
|
|
17
39
|
*
|
package/dist/duplicates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicates.d.ts","sourceRoot":"","sources":["../src/duplicates.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"duplicates.d.ts","sourceRoot":"","sources":["../src/duplicates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAyDrF,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQrD;AA+BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG,MAAM,CASjF;AA2CD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAoO1E;AA4QD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAsHjF"}
|
package/dist/duplicates.js
CHANGED
|
@@ -5,11 +5,14 @@
|
|
|
5
5
|
* exact matches or near-duplicates (Jaccard ≥ 0.8).
|
|
6
6
|
*
|
|
7
7
|
* When the same section appears in N files, ONE issue is emitted listing
|
|
8
|
-
* all N files — not N*(N-1)/2 pairwise issues.
|
|
8
|
+
* all N files — not N*(N-1)/2 pairwise issues. When whole files mirror each
|
|
9
|
+
* other (most sections match), ONE warning is emitted for the group of files
|
|
10
|
+
* in place of the per-section findings between them (pcic-1ik0.5).
|
|
9
11
|
*
|
|
10
12
|
* Wording is intentionally cautious — all findings are heuristic.
|
|
11
13
|
*/
|
|
12
14
|
import * as crypto from 'node:crypto';
|
|
15
|
+
import * as path from 'node:path';
|
|
13
16
|
import { snippet } from './evidence.js';
|
|
14
17
|
import { fileIdPath, sectionIdPath } from './finding-id.js';
|
|
15
18
|
/**
|
|
@@ -104,6 +107,41 @@ function isBoilerplateHeading(heading) {
|
|
|
104
107
|
}
|
|
105
108
|
return false;
|
|
106
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* The ONE definition of "the same text" for an UNATTENDED consolidation edit,
|
|
112
|
+
* shared by per-section duplicate findings, mirrored-file findings and the
|
|
113
|
+
* import recipe (pcic-1ik0.5, pcic-1ik0.10). Two sections are the same text
|
|
114
|
+
* only when they are byte-identical after normalising exactly these, and
|
|
115
|
+
* nothing else:
|
|
116
|
+
*
|
|
117
|
+
* - line endings (CRLF and CR become LF);
|
|
118
|
+
* - trailing whitespace at the end of each line;
|
|
119
|
+
* - a leading byte-order mark;
|
|
120
|
+
* - leading and trailing blank lines of the section.
|
|
121
|
+
*
|
|
122
|
+
* No interior whitespace is collapsed, no indentation is trimmed, no reflow is
|
|
123
|
+
* treated as equal and no Markdown is modelled: a nested list, `<pre>` or
|
|
124
|
+
* inline-code spacing, a reflowed paragraph, tabs versus spaces, or a
|
|
125
|
+
* different Unicode normalisation all count as different, and the finding is
|
|
126
|
+
* then advisory. That costs a few auto-fixes and removes the whole class of
|
|
127
|
+
* "equal after normalising, different in meaning" wrong edits.
|
|
128
|
+
*/
|
|
129
|
+
export function sameSectionText(section) {
|
|
130
|
+
const lines = section.text
|
|
131
|
+
.replace(/^\uFEFF/, '')
|
|
132
|
+
.replace(/\r\n?/g, '\n')
|
|
133
|
+
.split('\n')
|
|
134
|
+
.map((line) => line.replace(/[ \t\f\v]+$/, ''));
|
|
135
|
+
while (lines.length > 0 && lines[0] === '')
|
|
136
|
+
lines.shift();
|
|
137
|
+
while (lines.length > 0 && lines[lines.length - 1] === '')
|
|
138
|
+
lines.pop();
|
|
139
|
+
return lines.join('\n');
|
|
140
|
+
}
|
|
141
|
+
/** True when every section in the list has the same text (see {@link sameSectionText}). */
|
|
142
|
+
function allSameText(sections) {
|
|
143
|
+
return new Set(sections.map(sameSectionText)).size === 1;
|
|
144
|
+
}
|
|
107
145
|
function normalizedHeading(heading) {
|
|
108
146
|
return heading?.toLowerCase().replace(/\s+/g, ' ').trim() ?? '';
|
|
109
147
|
}
|
|
@@ -265,11 +303,28 @@ export function detectDuplicates(files) {
|
|
|
265
303
|
clusterConfidence.set(root, edge.confidence);
|
|
266
304
|
}
|
|
267
305
|
}
|
|
306
|
+
// pcic-1ik0.5: clusters entirely inside a group of mirrored files are
|
|
307
|
+
// reported once for the group (below), not once per section.
|
|
308
|
+
const mirrors = findMirrorGroups(files, edges, sectionByKey);
|
|
309
|
+
const absorbed = new Map(); // mirror group index → its clusters
|
|
310
|
+
for (const [, keys] of clusters) {
|
|
311
|
+
if (keys.length < 2)
|
|
312
|
+
continue;
|
|
313
|
+
const group = mirrorGroupOf(keys.map((k) => sectionByKey.get(k).filePath), mirrors);
|
|
314
|
+
if (group === undefined)
|
|
315
|
+
continue;
|
|
316
|
+
const list = absorbed.get(group) ?? [];
|
|
317
|
+
list.push(keys);
|
|
318
|
+
absorbed.set(group, list);
|
|
319
|
+
}
|
|
320
|
+
const absorbedKeys = new Set([...absorbed.values()].flat(2));
|
|
268
321
|
// Emit one issue per cluster
|
|
269
322
|
const issues = [];
|
|
270
323
|
for (const [root, keys] of clusters) {
|
|
271
324
|
if (keys.length < 2)
|
|
272
325
|
continue;
|
|
326
|
+
if (absorbedKeys.has(keys[0]))
|
|
327
|
+
continue;
|
|
273
328
|
const sections = keys.map((k) => sectionByKey.get(k));
|
|
274
329
|
const severity = clusterSeverity.get(root) ?? 'warning';
|
|
275
330
|
const confidence = clusterConfidence.get(root) ?? 0.75;
|
|
@@ -285,9 +340,15 @@ export function detectDuplicates(files) {
|
|
|
285
340
|
? `Possible duplicate: ${headingLabel} (${fileCount} files)`
|
|
286
341
|
: `Possible duplicate: ${headingLabel}`;
|
|
287
342
|
const duplicateTokens = sections.slice(1).reduce((sum, s) => sum + Math.round(s.text.length / 4), 0);
|
|
288
|
-
|
|
343
|
+
// Copies that are similar but not the same text (near-duplicates) must not
|
|
344
|
+
// be consolidated unattended: the pointer would replace the text that
|
|
345
|
+
// differs, and with it the evidence of a conflict. Same text = equal after
|
|
346
|
+
// collapsing whitespace and line endings (pcic-1ik0.5, PromptCI#160).
|
|
347
|
+
const identical = allSameText(sections);
|
|
348
|
+
const summary = (fileCount > 2
|
|
289
349
|
? `This section appears highly similar in ${fileCount} files. Consider consolidating into one canonical location.`
|
|
290
|
-
: 'These sections appear highly similar. Consider consolidating them into one canonical location.'
|
|
350
|
+
: 'These sections appear highly similar. Consider consolidating them into one canonical location.') +
|
|
351
|
+
(identical ? '' : ' The copies are not identical: they differ in places, so compare them before consolidating.');
|
|
291
352
|
issues.push({
|
|
292
353
|
id: clusterIssueId(keys),
|
|
293
354
|
severity,
|
|
@@ -306,18 +367,261 @@ export function detectDuplicates(files) {
|
|
|
306
367
|
snippet(sections[0].normalizedText, 200),
|
|
307
368
|
`Duplicated size: ~${duplicateTokens} tokens`,
|
|
308
369
|
],
|
|
309
|
-
recommendation:
|
|
370
|
+
recommendation: (identical
|
|
371
|
+
? ''
|
|
372
|
+
: 'The copies differ: decide which text is right before consolidating, since a pointer would discard the other. Then ') +
|
|
373
|
+
`${identical ? 'Consolidate' : 'consolidate'} these sections into one canonical location (e.g. AGENTS.md) and use forwarding pointers to save ~${duplicateTokens} tokens per session. If both are intentional, add a comment clarifying the distinction.`,
|
|
310
374
|
// `applyFixRecipe` can consolidate a duplicate that spans MULTIPLE files
|
|
311
|
-
// (pick a canonical file, replace the copies with a forwarding pointer)
|
|
312
|
-
//
|
|
313
|
-
//
|
|
314
|
-
//
|
|
315
|
-
|
|
375
|
+
// (pick a canonical file, replace the copies with a forwarding pointer),
|
|
376
|
+
// but only copies that are the same text: a near-duplicate stays
|
|
377
|
+
// advisory. A cluster confined to one file has no other file to point
|
|
378
|
+
// at, so it stays advisory too. Same-file duplicate *headings* are
|
|
379
|
+
// handled by the other detectors below and are never auto-applied.
|
|
380
|
+
autoApplySafe: fileCount >= 2 && identical,
|
|
316
381
|
confidence,
|
|
317
382
|
});
|
|
318
383
|
}
|
|
384
|
+
for (const [group, groupClusters] of [...absorbed].sort((a, b) => a[0] - b[0])) {
|
|
385
|
+
issues.push(mirrorIssue(mirrors.groups[group], groupClusters, sectionByKey, mirrors));
|
|
386
|
+
}
|
|
319
387
|
return issues;
|
|
320
388
|
}
|
|
389
|
+
// ── Mirrored instruction files (pcic-1ik0.5) ─────────────────────────────────
|
|
390
|
+
/**
|
|
391
|
+
* Two files mirror each other when their matching sections (exact, or at the
|
|
392
|
+
* near-duplicate threshold) make up at least MIRROR_SHARE of BOTH files'
|
|
393
|
+
* comparable sections, or at least MIRROR_COPY_SHARE of EITHER file's (one
|
|
394
|
+
* file is mostly a copy of parts of the other, e.g. an AGENTS.md cut down
|
|
395
|
+
* from a longer CLAUDE.md). Below both, the shared sections stay ordinary
|
|
396
|
+
* per-section findings: two files that merely repeat a few sections are not
|
|
397
|
+
* copies of each other.
|
|
398
|
+
*/
|
|
399
|
+
const MIRROR_SHARE = 0.5;
|
|
400
|
+
const MIRROR_COPY_SHARE = 0.8;
|
|
401
|
+
/**
|
|
402
|
+
* A pair needs at least this many matching sections, unless each file is a
|
|
403
|
+
* single section and the two match (a whole one-section file copied).
|
|
404
|
+
*/
|
|
405
|
+
const MIRROR_MIN_SHARED = 2;
|
|
406
|
+
/**
|
|
407
|
+
* Id of a mirror-group finding: sha1 of `mirror:` plus the group's
|
|
408
|
+
* repo-relative file paths in canonical order, joined by `|`. It depends only
|
|
409
|
+
* on which files form the group, so it is the same in every checkout and does
|
|
410
|
+
* not change when the copied sections inside the files do.
|
|
411
|
+
*/
|
|
412
|
+
function mirrorIssueId(relativePaths) {
|
|
413
|
+
const hash = crypto.createHash('sha1').update(`mirror:${relativePaths.join('|')}`).digest('hex').slice(0, 12);
|
|
414
|
+
return `duplicate-${hash}`;
|
|
415
|
+
}
|
|
416
|
+
/** The canonical file of a group: AGENTS.md when present, else the first path. */
|
|
417
|
+
function canonicalFirst(files) {
|
|
418
|
+
const sorted = [...files].sort();
|
|
419
|
+
const agents = sorted.find((f) => path.basename(f).toLowerCase() === 'agents.md');
|
|
420
|
+
return agents ? [agents, ...sorted.filter((f) => f !== agents)] : sorted;
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Groups of instruction files that mirror one another: every pair linked in a
|
|
424
|
+
* group shares at least MIRROR_SHARE of each file's comparable sections.
|
|
425
|
+
* Repositories keep AGENTS.md, CLAUDE.md and GEMINI.md (or per-tool rule
|
|
426
|
+
* files) identical on purpose, or generate them; reported per section, one
|
|
427
|
+
* mirror was dozens of high-severity findings.
|
|
428
|
+
*/
|
|
429
|
+
function findMirrorGroups(files, edges, sectionByKey) {
|
|
430
|
+
// The share's denominator: EVERY section of the file that has body text,
|
|
431
|
+
// short ones included. Counting only the sections long enough to compare
|
|
432
|
+
// made two files whose one long section matched read as "1 of 1" mirrors
|
|
433
|
+
// however many short sections each had of its own.
|
|
434
|
+
const comparableKeys = new Map();
|
|
435
|
+
for (const file of files) {
|
|
436
|
+
for (const s of file.sections) {
|
|
437
|
+
if (!hasBody(s))
|
|
438
|
+
continue;
|
|
439
|
+
const set = comparableKeys.get(s.filePath) ?? new Set();
|
|
440
|
+
set.add(`${sectionIdPath(s)}:${s.startLine}`);
|
|
441
|
+
comparableKeys.set(s.filePath, set);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
// For each ordered file pair, the sections of the first that match the second.
|
|
445
|
+
const matched = new Map();
|
|
446
|
+
const exactPairs = new Set();
|
|
447
|
+
const note = (from, to, key) => {
|
|
448
|
+
const byTarget = matched.get(from) ?? new Map();
|
|
449
|
+
const keys = byTarget.get(to) ?? new Set();
|
|
450
|
+
keys.add(key);
|
|
451
|
+
byTarget.set(to, keys);
|
|
452
|
+
matched.set(from, byTarget);
|
|
453
|
+
};
|
|
454
|
+
for (const edge of edges) {
|
|
455
|
+
if (edge.severity !== 'high' && edge.severity !== 'warning')
|
|
456
|
+
continue; // borderline matches do not count
|
|
457
|
+
const a = sectionByKey.get(edge.keyA).filePath;
|
|
458
|
+
const b = sectionByKey.get(edge.keyB).filePath;
|
|
459
|
+
if (a === b)
|
|
460
|
+
continue;
|
|
461
|
+
note(a, b, edge.keyA);
|
|
462
|
+
note(b, a, edge.keyB);
|
|
463
|
+
if (edge.severity === 'high')
|
|
464
|
+
exactPairs.add([a, b].sort().join('\u0000'));
|
|
465
|
+
}
|
|
466
|
+
const denominator = (file, keys) => new Set([...(comparableKeys.get(file) ?? []), ...keys]).size;
|
|
467
|
+
const parent = new Map();
|
|
468
|
+
const mirrored = new Set();
|
|
469
|
+
const mirrorPairs = new Set();
|
|
470
|
+
for (const [a, byTarget] of matched) {
|
|
471
|
+
for (const [b, aKeys] of byTarget) {
|
|
472
|
+
if (a >= b)
|
|
473
|
+
continue; // each unordered pair once
|
|
474
|
+
const bKeys = matched.get(b)?.get(a) ?? new Set();
|
|
475
|
+
const aShare = aKeys.size / denominator(a, aKeys);
|
|
476
|
+
const bShare = bKeys.size / denominator(b, bKeys);
|
|
477
|
+
// A one-section file counts only as an EXACT copy: near-identical
|
|
478
|
+
// single-section files (sibling slash commands sharing a template)
|
|
479
|
+
// are separate files on purpose.
|
|
480
|
+
const wholeFiles = aShare === 1 && bShare === 1 && exactPairs.has([a, b].sort().join('\u0000'));
|
|
481
|
+
if (Math.min(aKeys.size, bKeys.size) < MIRROR_MIN_SHARED && !wholeFiles)
|
|
482
|
+
continue;
|
|
483
|
+
if (Math.min(aShare, bShare) < MIRROR_SHARE && Math.max(aShare, bShare) < MIRROR_COPY_SHARE)
|
|
484
|
+
continue;
|
|
485
|
+
union(parent, a, b);
|
|
486
|
+
mirrored.add(a);
|
|
487
|
+
mirrored.add(b);
|
|
488
|
+
mirrorPairs.add(pairKey(a, b));
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
const members = new Map();
|
|
492
|
+
for (const file of mirrored) {
|
|
493
|
+
const root = find(parent, file);
|
|
494
|
+
members.set(root, [...(members.get(root) ?? []), file]);
|
|
495
|
+
}
|
|
496
|
+
// Every pair in a group must itself be a mirror pair. Connected components
|
|
497
|
+
// alone would chain A~B and B~C into one group although A and C share
|
|
498
|
+
// nothing, and the consolidation fix would then point C's own text at A.
|
|
499
|
+
const groups = [...members.values()]
|
|
500
|
+
.flatMap((component) => splitIntoCliques(component, (x, y) => mirrorPairs.has(pairKey(x, y))))
|
|
501
|
+
.map(canonicalFirst)
|
|
502
|
+
.sort((x, y) => x[0].localeCompare(y[0]));
|
|
503
|
+
const comparable = new Map();
|
|
504
|
+
const groupOfFile = new Map();
|
|
505
|
+
groups.forEach((files, i) => {
|
|
506
|
+
for (const file of files) {
|
|
507
|
+
groupOfFile.set(file, i);
|
|
508
|
+
comparable.set(file, comparableKeys.get(file)?.size ?? 0);
|
|
509
|
+
}
|
|
510
|
+
});
|
|
511
|
+
return { groups, groupOfFile, comparable };
|
|
512
|
+
}
|
|
513
|
+
const pairKey = (a, b) => (a < b ? `${a}\u0000${b}` : `${b}\u0000${a}`);
|
|
514
|
+
/**
|
|
515
|
+
* Split a connected set of files into groups in which every two files are
|
|
516
|
+
* linked, deterministically: seed each group with the canonical remaining file
|
|
517
|
+
* (AGENTS.md first, else the first path), add each other remaining file, in
|
|
518
|
+
* path order, that is linked to every member so far, and repeat with what is
|
|
519
|
+
* left. Groups of one file are dropped.
|
|
520
|
+
*/
|
|
521
|
+
function splitIntoCliques(files, linked) {
|
|
522
|
+
const groups = [];
|
|
523
|
+
let remaining = canonicalFirst(files);
|
|
524
|
+
while (remaining.length > 1) {
|
|
525
|
+
const group = [remaining[0]];
|
|
526
|
+
for (const file of remaining.slice(1)) {
|
|
527
|
+
if (group.every((member) => linked(member, file)))
|
|
528
|
+
group.push(file);
|
|
529
|
+
}
|
|
530
|
+
if (group.length > 1)
|
|
531
|
+
groups.push(group);
|
|
532
|
+
remaining = canonicalFirst(remaining.filter((f) => !group.includes(f)));
|
|
533
|
+
}
|
|
534
|
+
return groups;
|
|
535
|
+
}
|
|
536
|
+
/** True when a section has text beyond its heading line. */
|
|
537
|
+
function hasBody(section) {
|
|
538
|
+
const body = section.text.replace(/^\s*#{1,6}\s+[^\n]*\n?/, '');
|
|
539
|
+
return normalizeSection(body).length > 0;
|
|
540
|
+
}
|
|
541
|
+
/** The mirror group holding every one of these files (at least two distinct), if any. */
|
|
542
|
+
function mirrorGroupOf(files, mirrors) {
|
|
543
|
+
const distinct = [...new Set(files)];
|
|
544
|
+
if (distinct.length < 2)
|
|
545
|
+
return undefined;
|
|
546
|
+
const group = mirrors.groupOfFile.get(distinct[0]);
|
|
547
|
+
if (group === undefined)
|
|
548
|
+
return undefined;
|
|
549
|
+
return distinct.every((f) => mirrors.groupOfFile.get(f) === group) ? group : undefined;
|
|
550
|
+
}
|
|
551
|
+
/** ONE warning for a group of mirrored files, replacing its per-section duplicate findings. */
|
|
552
|
+
function mirrorIssue(files, groupClusters, sectionByKey, mirrors) {
|
|
553
|
+
const canonical = files[0];
|
|
554
|
+
const sectionsOf = (keys) => keys.map((k) => sectionByKey.get(k));
|
|
555
|
+
const all = groupClusters.flatMap(sectionsOf);
|
|
556
|
+
const label = new Map();
|
|
557
|
+
const idPath = new Map();
|
|
558
|
+
for (const s of all) {
|
|
559
|
+
label.set(s.filePath, s.relativePath ?? path.basename(s.filePath));
|
|
560
|
+
// A section's id path is its FILE's repo-relative path (finding-id.ts).
|
|
561
|
+
idPath.set(s.filePath, sectionIdPath(s));
|
|
562
|
+
}
|
|
563
|
+
const names = files.map((f) => label.get(f) ?? path.basename(f));
|
|
564
|
+
const canonicalName = names[0];
|
|
565
|
+
// Tokens a session pays for the copies: every section of a cluster but one
|
|
566
|
+
// (the canonical file's, when it holds one).
|
|
567
|
+
let duplicateTokens = 0;
|
|
568
|
+
for (const keys of groupClusters) {
|
|
569
|
+
const sections = sectionsOf(keys);
|
|
570
|
+
const keep = sections.find((s) => s.filePath === canonical) ?? sections[0];
|
|
571
|
+
duplicateTokens += sections.filter((s) => s !== keep).reduce((sum, s) => sum + Math.round(s.text.length / 4), 0);
|
|
572
|
+
}
|
|
573
|
+
const shared = (file) => new Set(all.filter((s) => s.filePath === file).map((s) => s.startLine)).size;
|
|
574
|
+
const order = new Map(files.map((f, i) => [f, i]));
|
|
575
|
+
const locations = [...all]
|
|
576
|
+
.sort((a, b) => order.get(a.filePath) - order.get(b.filePath) || a.startLine - b.startLine)
|
|
577
|
+
.map((s) => ({ filePath: s.filePath, startLine: s.startLine, endLine: s.endLine }));
|
|
578
|
+
const heading = (keys) => sectionsOf(keys)[0].heading ?? '(untitled)';
|
|
579
|
+
const headings = [...new Set(groupClusters.map(heading))];
|
|
580
|
+
// Copies that have DRIFTED (near-duplicates, not the same text) must not be
|
|
581
|
+
// replaced unattended: the pointer would delete the text that differs, and
|
|
582
|
+
// with it the evidence of a conflict. Same rule as per-section findings.
|
|
583
|
+
const drifted = groupClusters.filter((keys) => !allSameText(sectionsOf(keys))).map(heading);
|
|
584
|
+
const counts = files
|
|
585
|
+
.map((f, i) => `${names[i]} ${shared(f)} of ${Math.max(shared(f), mirrors.comparable.get(f) ?? 0)}`)
|
|
586
|
+
.join(', ');
|
|
587
|
+
return {
|
|
588
|
+
id: mirrorIssueId(files.map((f) => idPath.get(f) ?? f)),
|
|
589
|
+
severity: 'warning',
|
|
590
|
+
category: 'duplicate',
|
|
591
|
+
title: `Possible mirrored instruction files: ${names.join(', ')}`,
|
|
592
|
+
summary: `These ${files.length} instruction files appear to be copies of one another: ${groupClusters.length} ` +
|
|
593
|
+
'section(s) have the same or nearly the same text in more than one of them, covering most of at least one ' +
|
|
594
|
+
`file (shared sections per file: ${counts}). That is common when copies are kept in step for tools that ` +
|
|
595
|
+
'read different files, or generated. Reported once for the group rather than once per section. Every tool ' +
|
|
596
|
+
`that loads more than one of them pays about ${duplicateTokens} extra tokens per session, and copies tend ` +
|
|
597
|
+
'to drift apart.' +
|
|
598
|
+
(drifted.length > 0
|
|
599
|
+
? ` The copies already differ in ${drifted.length} section(s): ${snippet(drifted.join(', '), 200)}.`
|
|
600
|
+
: ''),
|
|
601
|
+
filePaths: files,
|
|
602
|
+
locations,
|
|
603
|
+
// The member files and shared headings. Counts and sizes live in the
|
|
604
|
+
// summary; identity is `fingerprintKey`, so neither moves the fingerprint.
|
|
605
|
+
evidence: [...names.map((n) => `Mirrored file: ${n}`), `Shared sections: ${snippet(headings.join(', '), 200)}`],
|
|
606
|
+
recommendation: (drifted.length > 0
|
|
607
|
+
? `Reconcile the sections that differ (${snippet(drifted.join(', '), 120)}) first: decide which text is ` +
|
|
608
|
+
'right, since a pointer would discard the other. Then consider '
|
|
609
|
+
: 'Consider ') +
|
|
610
|
+
`keeping one canonical file (here ${canonicalName}) and replacing the others with a short pointer ` +
|
|
611
|
+
`such as "Follow ${path.basename(canonicalName)}", or a symlink where the tool follows one. If a generator ` +
|
|
612
|
+
'writes these files, configure it to write the pointer instead. Keep only genuinely tool-specific guidance ' +
|
|
613
|
+
'in the other files.',
|
|
614
|
+
// The consolidation recipe replaces each copied section outside the
|
|
615
|
+
// canonical (first-listed) file with a pointer to it. Only safe when every
|
|
616
|
+
// copy is the same text; otherwise advisory.
|
|
617
|
+
autoApplySafe: drifted.length === 0,
|
|
618
|
+
// One identity per mirror group, keyed on its canonical file: editing a
|
|
619
|
+
// copied section, or the group gaining or losing a member, is the same
|
|
620
|
+
// finding (baseline, trend, SARIF), not "resolved + new".
|
|
621
|
+
fingerprintKey: `duplicate-mirror:${idPath.get(canonical) ?? canonical}`,
|
|
622
|
+
confidence: 0.8,
|
|
623
|
+
};
|
|
624
|
+
}
|
|
321
625
|
// ── BUG-004: Same-heading duplicate within a single file ─────────────────────
|
|
322
626
|
/**
|
|
323
627
|
* Detect when the same section heading appears more than once in a single
|
package/dist/duplicates.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicates.js","sourceRoot":"","sources":["../src/duplicates.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"duplicates.js","sourceRoot":"","sources":["../src/duplicates.ts"],"names":[],"mappings":"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"}
|
package/dist/health-score.d.ts
CHANGED
|
@@ -5,12 +5,24 @@
|
|
|
5
5
|
* for the same input regardless of call order.
|
|
6
6
|
*/
|
|
7
7
|
import type { PromptCiIssue, TopFix } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Tag on a finding that is reported but costs no health-score points
|
|
10
|
+
* (pcic-1ik0.3, PromptCI#158). Used for checks that fire on nearly every
|
|
11
|
+
* repository and so say little about any one of them: the repository-level
|
|
12
|
+
* "agent-practice guidance not found" finding and the per-workflow unpinned
|
|
13
|
+
* GitHub Actions finding. They still appear in the report, the JSON and SARIF,
|
|
14
|
+
* the baseline and `--fail-on`; they rank after every scored finding in top
|
|
15
|
+
* fixes.
|
|
16
|
+
*/
|
|
17
|
+
export declare const UNSCORED_TAG = "unscored";
|
|
18
|
+
/** False for a finding tagged {@link UNSCORED_TAG}, which the health score skips. */
|
|
19
|
+
export declare function isScored(issue: PromptCiIssue): boolean;
|
|
8
20
|
/**
|
|
9
21
|
* Compute a health score from 0–100 based on issue severity and confidence.
|
|
10
22
|
*
|
|
11
23
|
* Starts at 100. Each issue subtracts (severityWeight × confidence), subject to
|
|
12
24
|
* per-category caps so a single noisy detector cannot drive the score to zero on
|
|
13
|
-
* its own.
|
|
25
|
+
* its own. A finding tagged {@link UNSCORED_TAG} subtracts nothing.
|
|
14
26
|
*
|
|
15
27
|
* Result is clamped to [0, 100] and rounded to the nearest integer.
|
|
16
28
|
*/
|
|
@@ -23,6 +35,8 @@ export declare function getIssueImpact(issue: PromptCiIssue): 'high' | 'medium'
|
|
|
23
35
|
* Select up to 3 top fixes from the issue list.
|
|
24
36
|
*
|
|
25
37
|
* Priority order (descending):
|
|
38
|
+
* 0. Scored before unscored (an unscored finding is a top fix only when
|
|
39
|
+
* fewer than three categories have a scored one)
|
|
26
40
|
* 1. Severity weight (critical → high → warning → info)
|
|
27
41
|
* 2. Confidence (higher first)
|
|
28
42
|
* 3. Blast-radius impact (high → medium → low)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health-score.d.ts","sourceRoot":"","sources":["../src/health-score.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"health-score.d.ts","sourceRoot":"","sources":["../src/health-score.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAgC,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AA+CtF;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,aAAa,CAAC;AAEvC,qFAAqF;AACrF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAEtD;AAYD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAqBlE;AAQD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAiE9E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CA0ChE"}
|
package/dist/health-score.js
CHANGED
|
@@ -32,7 +32,9 @@ const CATEGORY_DEDUCTION_CAP = {
|
|
|
32
32
|
* - `supply-chain` (8): unpinned GitHub Actions are `security` findings, but
|
|
33
33
|
* they describe CI configuration, not instruction health: uncapped, one
|
|
34
34
|
* finding per unpinned action took ~25 points off an otherwise healthy repo
|
|
35
|
-
* that simply uses tag-pinned third-party actions.
|
|
35
|
+
* that simply uses tag-pinned third-party actions. Since pcic-1ik0.3 they are
|
|
36
|
+
* unscored as well; the cap still bounds an action-pin finding from an
|
|
37
|
+
* earlier release that a consumer re-scores (it carries no unscored tag).
|
|
36
38
|
* - `skill-supply-chain` (15): findings about installed third-party skills,
|
|
37
39
|
* not the repo's own instruction health: uncapped, one noisy skill could
|
|
38
40
|
* zero an otherwise healthy score.
|
|
@@ -44,6 +46,20 @@ const TAG_DEDUCTION_CAP = {
|
|
|
44
46
|
'supply-chain': 8,
|
|
45
47
|
'skill-supply-chain': 15,
|
|
46
48
|
};
|
|
49
|
+
/**
|
|
50
|
+
* Tag on a finding that is reported but costs no health-score points
|
|
51
|
+
* (pcic-1ik0.3, PromptCI#158). Used for checks that fire on nearly every
|
|
52
|
+
* repository and so say little about any one of them: the repository-level
|
|
53
|
+
* "agent-practice guidance not found" finding and the per-workflow unpinned
|
|
54
|
+
* GitHub Actions finding. They still appear in the report, the JSON and SARIF,
|
|
55
|
+
* the baseline and `--fail-on`; they rank after every scored finding in top
|
|
56
|
+
* fixes.
|
|
57
|
+
*/
|
|
58
|
+
export const UNSCORED_TAG = 'unscored';
|
|
59
|
+
/** False for a finding tagged {@link UNSCORED_TAG}, which the health score skips. */
|
|
60
|
+
export function isScored(issue) {
|
|
61
|
+
return !(issue.tags ?? []).includes(UNSCORED_TAG);
|
|
62
|
+
}
|
|
47
63
|
/** The cap bucket an issue's deduction counts against, if any. */
|
|
48
64
|
function deductionBucket(issue) {
|
|
49
65
|
for (const tag of issue.tags ?? []) {
|
|
@@ -59,7 +75,7 @@ function deductionBucket(issue) {
|
|
|
59
75
|
*
|
|
60
76
|
* Starts at 100. Each issue subtracts (severityWeight × confidence), subject to
|
|
61
77
|
* per-category caps so a single noisy detector cannot drive the score to zero on
|
|
62
|
-
* its own.
|
|
78
|
+
* its own. A finding tagged {@link UNSCORED_TAG} subtracts nothing.
|
|
63
79
|
*
|
|
64
80
|
* Result is clamped to [0, 100] and rounded to the nearest integer.
|
|
65
81
|
*/
|
|
@@ -67,6 +83,8 @@ export function computeHealthScore(issues) {
|
|
|
67
83
|
let score = 100;
|
|
68
84
|
const categoryDeductions = new Map();
|
|
69
85
|
for (const issue of issues) {
|
|
86
|
+
if (!isScored(issue))
|
|
87
|
+
continue;
|
|
70
88
|
const deduction = (SEVERITY_WEIGHT[issue.severity] ?? 0) * issue.confidence;
|
|
71
89
|
const bucket = deductionBucket(issue);
|
|
72
90
|
if (bucket !== undefined) {
|
|
@@ -145,6 +163,8 @@ export function getIssueImpact(issue) {
|
|
|
145
163
|
* Select up to 3 top fixes from the issue list.
|
|
146
164
|
*
|
|
147
165
|
* Priority order (descending):
|
|
166
|
+
* 0. Scored before unscored (an unscored finding is a top fix only when
|
|
167
|
+
* fewer than three categories have a scored one)
|
|
148
168
|
* 1. Severity weight (critical → high → warning → info)
|
|
149
169
|
* 2. Confidence (higher first)
|
|
150
170
|
* 3. Blast-radius impact (high → medium → low)
|
|
@@ -157,6 +177,9 @@ export function getIssueImpact(issue) {
|
|
|
157
177
|
*/
|
|
158
178
|
export function selectTopFixes(issues) {
|
|
159
179
|
const sorted = [...issues].sort((a, b) => {
|
|
180
|
+
const scoredDiff = Number(isScored(b)) - Number(isScored(a));
|
|
181
|
+
if (scoredDiff !== 0)
|
|
182
|
+
return scoredDiff;
|
|
160
183
|
const weightDiff = (SEVERITY_WEIGHT[b.severity] ?? 0) - (SEVERITY_WEIGHT[a.severity] ?? 0);
|
|
161
184
|
if (weightDiff !== 0)
|
|
162
185
|
return weightDiff;
|
package/dist/health-score.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health-score.js","sourceRoot":"","sources":["../src/health-score.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,eAAe,GAAkC;IACrD,QAAQ,EAAE,EAAE;IACZ,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;CACR,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,sBAAsB,GAA2C;IACrE,SAAS,EAAE,EAAE,EAAW,kBAAkB;IAC1C,iBAAiB,EAAE,EAAE;IACrB,SAAS,EAAE,EAAE;IACb,cAAc,EAAE,EAAE;IAClB,SAAS,EAAE,EAAE,EAAW,kDAAkD;CAC3E,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"health-score.js","sourceRoot":"","sources":["../src/health-score.ts"],"names":[],"mappings":"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"}
|