@promptci/core 0.0.1 → 0.2.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/LICENSE +201 -201
- package/README.md +29 -30
- package/dist/action-pinning.d.ts +37 -0
- package/dist/action-pinning.d.ts.map +1 -0
- package/dist/action-pinning.js +277 -0
- package/dist/action-pinning.js.map +1 -0
- package/dist/agent-practices.d.ts +3 -1
- package/dist/agent-practices.d.ts.map +1 -1
- package/dist/agent-practices.js +198 -94
- package/dist/agent-practices.js.map +1 -1
- package/dist/ai-config.d.ts +178 -0
- package/dist/ai-config.d.ts.map +1 -0
- package/dist/ai-config.js +721 -0
- package/dist/ai-config.js.map +1 -0
- package/dist/alias-files.d.ts +33 -0
- package/dist/alias-files.d.ts.map +1 -0
- package/dist/alias-files.js +60 -0
- package/dist/alias-files.js.map +1 -0
- package/dist/baseline.d.ts +17 -1
- package/dist/baseline.d.ts.map +1 -1
- package/dist/baseline.js +5 -1
- package/dist/baseline.js.map +1 -1
- package/dist/buried-critical.d.ts +17 -0
- package/dist/buried-critical.d.ts.map +1 -0
- package/dist/buried-critical.js +107 -0
- package/dist/buried-critical.js.map +1 -0
- package/dist/canonical-owner.d.ts.map +1 -1
- package/dist/canonical-owner.js +60 -30
- package/dist/canonical-owner.js.map +1 -1
- package/dist/ci-alignment.d.ts.map +1 -1
- package/dist/ci-alignment.js +3 -2
- package/dist/ci-alignment.js.map +1 -1
- package/dist/command-validity.d.ts +16 -0
- package/dist/command-validity.d.ts.map +1 -1
- package/dist/command-validity.js +387 -134
- package/dist/command-validity.js.map +1 -1
- package/dist/conflicts.d.ts.map +1 -1
- package/dist/conflicts.js +4 -44
- package/dist/conflicts.js.map +1 -1
- package/dist/context-analysis.d.ts.map +1 -1
- package/dist/context-analysis.js +13 -2
- package/dist/context-analysis.js.map +1 -1
- package/dist/context-bloat.d.ts +20 -1
- package/dist/context-bloat.d.ts.map +1 -1
- package/dist/context-bloat.js +99 -15
- package/dist/context-bloat.js.map +1 -1
- package/dist/context-optimizer.d.ts.map +1 -1
- package/dist/context-optimizer.js +18 -54
- package/dist/context-optimizer.js.map +1 -1
- package/dist/copilot-instructions-detector.d.ts +24 -0
- package/dist/copilot-instructions-detector.d.ts.map +1 -0
- package/dist/copilot-instructions-detector.js +145 -0
- package/dist/copilot-instructions-detector.js.map +1 -0
- package/dist/cursor-rules-detector.d.ts +17 -0
- package/dist/cursor-rules-detector.d.ts.map +1 -0
- package/dist/cursor-rules-detector.js +110 -0
- package/dist/cursor-rules-detector.js.map +1 -0
- package/dist/custom-rules.d.ts +52 -0
- package/dist/custom-rules.d.ts.map +1 -0
- package/dist/custom-rules.js +303 -0
- package/dist/custom-rules.js.map +1 -0
- package/dist/dead-references.d.ts +8 -2
- package/dist/dead-references.d.ts.map +1 -1
- package/dist/dead-references.js +315 -68
- package/dist/dead-references.js.map +1 -1
- package/dist/dependency-staleness.d.ts +35 -0
- package/dist/dependency-staleness.d.ts.map +1 -0
- package/dist/dependency-staleness.js +1001 -0
- package/dist/dependency-staleness.js.map +1 -0
- package/dist/detectors.d.ts +1 -3
- package/dist/detectors.d.ts.map +1 -1
- package/dist/detectors.js +74 -56
- package/dist/detectors.js.map +1 -1
- package/dist/duplicates.d.ts.map +1 -1
- package/dist/duplicates.js +15 -9
- package/dist/duplicates.js.map +1 -1
- package/dist/evidence.d.ts +39 -0
- package/dist/evidence.d.ts.map +1 -0
- package/dist/evidence.js +78 -0
- package/dist/evidence.js.map +1 -0
- package/dist/finding-id.d.ts +21 -0
- package/dist/finding-id.d.ts.map +1 -0
- package/dist/finding-id.js +31 -0
- package/dist/finding-id.js.map +1 -0
- package/dist/fix-engine.d.ts +11 -0
- package/dist/fix-engine.d.ts.map +1 -1
- package/dist/fix-engine.js +88 -71
- package/dist/fix-engine.js.map +1 -1
- package/dist/frameworks/dotnet.js +2 -2
- package/dist/frameworks/dotnet.js.map +1 -1
- package/dist/frameworks/python.d.ts.map +1 -1
- package/dist/frameworks/python.js +5 -2
- package/dist/frameworks/python.js.map +1 -1
- package/dist/frameworks/rust.d.ts.map +1 -1
- package/dist/frameworks/rust.js +2 -1
- package/dist/frameworks/rust.js.map +1 -1
- package/dist/git-symlinks.d.ts +30 -0
- package/dist/git-symlinks.d.ts.map +1 -0
- package/dist/git-symlinks.js +161 -0
- package/dist/git-symlinks.js.map +1 -0
- package/dist/gitignore.d.ts +22 -0
- package/dist/gitignore.d.ts.map +1 -0
- package/dist/gitignore.js +157 -0
- package/dist/gitignore.js.map +1 -0
- package/dist/health-score.d.ts.map +1 -1
- package/dist/health-score.js +35 -5
- package/dist/health-score.js.map +1 -1
- package/dist/hooks-settings-detector.d.ts +17 -0
- package/dist/hooks-settings-detector.d.ts.map +1 -0
- package/dist/hooks-settings-detector.js +228 -0
- package/dist/hooks-settings-detector.js.map +1 -0
- package/dist/index.d.ts +29 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -6
- package/dist/index.js.map +1 -1
- package/dist/makefile.d.ts +37 -0
- package/dist/makefile.d.ts.map +1 -0
- package/dist/makefile.js +156 -0
- package/dist/makefile.js.map +1 -0
- package/dist/manifest-consistency.d.ts +6 -0
- package/dist/manifest-consistency.d.ts.map +1 -1
- package/dist/manifest-consistency.js +75 -10
- package/dist/manifest-consistency.js.map +1 -1
- package/dist/markdown-fences.d.ts +112 -0
- package/dist/markdown-fences.d.ts.map +1 -0
- package/dist/markdown-fences.js +174 -0
- package/dist/markdown-fences.js.map +1 -0
- package/dist/mcp-config-detector.d.ts +20 -0
- package/dist/mcp-config-detector.d.ts.map +1 -0
- package/dist/mcp-config-detector.js +237 -0
- package/dist/mcp-config-detector.js.map +1 -0
- package/dist/missing-context.d.ts.map +1 -1
- package/dist/missing-context.js +2 -52
- package/dist/missing-context.js.map +1 -1
- package/dist/model-budgets.d.ts +69 -0
- package/dist/model-budgets.d.ts.map +1 -0
- package/dist/model-budgets.js +110 -0
- package/dist/model-budgets.js.map +1 -0
- package/dist/negative-instructions.d.ts +26 -0
- package/dist/negative-instructions.d.ts.map +1 -0
- package/dist/negative-instructions.js +169 -0
- package/dist/negative-instructions.js.map +1 -0
- package/dist/path-containment.d.ts +41 -0
- package/dist/path-containment.d.ts.map +1 -0
- package/dist/path-containment.js +123 -0
- package/dist/path-containment.js.map +1 -0
- package/dist/project-type.d.ts +12 -2
- package/dist/project-type.d.ts.map +1 -1
- package/dist/project-type.js +25 -12
- package/dist/project-type.js.map +1 -1
- package/dist/prompt-cache.d.ts.map +1 -1
- package/dist/prompt-cache.js +33 -24
- package/dist/prompt-cache.js.map +1 -1
- package/dist/promptci-gitignore.d.ts +34 -0
- package/dist/promptci-gitignore.d.ts.map +1 -0
- package/dist/promptci-gitignore.js +42 -0
- package/dist/promptci-gitignore.js.map +1 -0
- package/dist/repo-context.d.ts +80 -0
- package/dist/repo-context.d.ts.map +1 -1
- package/dist/repo-context.js +170 -16
- package/dist/repo-context.js.map +1 -1
- package/dist/report.d.ts +8 -0
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +163 -63
- package/dist/report.js.map +1 -1
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +47 -4
- package/dist/scan.js.map +1 -1
- package/dist/scanner.d.ts +61 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +367 -70
- package/dist/scanner.js.map +1 -1
- package/dist/security-pack.d.ts +20 -0
- package/dist/security-pack.d.ts.map +1 -1
- package/dist/security-pack.js +33 -14
- package/dist/security-pack.js.map +1 -1
- package/dist/skill-supply-chain.d.ts +132 -0
- package/dist/skill-supply-chain.d.ts.map +1 -0
- package/dist/skill-supply-chain.js +2954 -0
- package/dist/skill-supply-chain.js.map +1 -0
- package/dist/skills-detector.d.ts +23 -0
- package/dist/skills-detector.d.ts.map +1 -0
- package/dist/skills-detector.js +279 -0
- package/dist/skills-detector.js.map +1 -0
- package/dist/stale-instructions.d.ts +4 -1
- package/dist/stale-instructions.d.ts.map +1 -1
- package/dist/stale-instructions.js +53 -55
- package/dist/stale-instructions.js.map +1 -1
- package/dist/subagents-detector.d.ts +19 -0
- package/dist/subagents-detector.d.ts.map +1 -0
- package/dist/subagents-detector.js +155 -0
- package/dist/subagents-detector.js.map +1 -0
- package/dist/suppression.d.ts +2 -0
- package/dist/suppression.d.ts.map +1 -1
- package/dist/suppression.js +16 -47
- package/dist/suppression.js.map +1 -1
- package/dist/types.d.ts +62 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +47 -1
- package/dist/types.js.map +1 -1
- package/dist/vague-guidance.d.ts +15 -2
- package/dist/vague-guidance.d.ts.map +1 -1
- package/dist/vague-guidance.js +44 -41
- package/dist/vague-guidance.js.map +1 -1
- package/dist/windsurf-detector.d.ts +22 -0
- package/dist/windsurf-detector.d.ts.map +1 -0
- package/dist/windsurf-detector.js +96 -0
- package/dist/windsurf-detector.js.map +1 -0
- package/dist/within-section-dedup.d.ts +16 -0
- package/dist/within-section-dedup.d.ts.map +1 -0
- package/dist/within-section-dedup.js +148 -0
- package/dist/within-section-dedup.js.map +1 -0
- package/dist/workspace-manifests.d.ts +80 -0
- package/dist/workspace-manifests.d.ts.map +1 -0
- package/dist/workspace-manifests.js +333 -0
- package/dist/workspace-manifests.js.map +1 -0
- package/package.json +11 -8
- package/dist/cheap-model-routing.d.ts +0 -4
- package/dist/cheap-model-routing.d.ts.map +0 -1
- package/dist/cheap-model-routing.js +0 -43
- package/dist/cheap-model-routing.js.map +0 -1
- package/dist/cli-output-filter.d.ts +0 -16
- package/dist/cli-output-filter.d.ts.map +0 -1
- package/dist/cli-output-filter.js +0 -88
- package/dist/cli-output-filter.js.map +0 -1
- package/dist/context-cost.d.ts +0 -4
- package/dist/context-cost.d.ts.map +0 -1
- package/dist/context-cost.js +0 -70
- package/dist/context-cost.js.map +0 -1
- package/dist/context-recommender.d.ts +0 -3
- package/dist/context-recommender.d.ts.map +0 -1
- package/dist/context-recommender.js +0 -329
- package/dist/context-recommender.js.map +0 -1
- package/dist/llm.d.ts +0 -6
- package/dist/llm.d.ts.map +0 -1
- package/dist/llm.js +0 -67
- package/dist/llm.js.map +0 -1
- package/dist/mcp-detector.d.ts +0 -4
- package/dist/mcp-detector.d.ts.map +0 -1
- package/dist/mcp-detector.js +0 -131
- package/dist/mcp-detector.js.map +0 -1
- package/dist/native-tool-preference.d.ts +0 -20
- package/dist/native-tool-preference.d.ts.map +0 -1
- package/dist/native-tool-preference.js +0 -94
- package/dist/native-tool-preference.js.map +0 -1
- package/dist/output-verbosity.d.ts +0 -3
- package/dist/output-verbosity.d.ts.map +0 -1
- package/dist/output-verbosity.js +0 -83
- package/dist/output-verbosity.js.map +0 -1
- package/dist/product-boundary.d.ts +0 -11
- package/dist/product-boundary.d.ts.map +0 -1
- package/dist/product-boundary.js +0 -301
- package/dist/product-boundary.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-config.js","sourceRoot":"","sources":["../src/ai-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Symlink aliases for file-type-specific checks.
|
|
3
|
+
*
|
|
4
|
+
* A symlinked instruction file (`CLAUDE.md -> AGENTS.md`, `.windsurfrules ->
|
|
5
|
+
* AGENTS.md`) is scanned once, as the real file; the symlink name is kept as an
|
|
6
|
+
* ALIAS (`RepoContext.aliasFiles`, each with `aliasOf` and the real content).
|
|
7
|
+
* The tool that reads the alias name still reads that content, so a check that
|
|
8
|
+
* belongs to ONE tool's file type has to run against the alias under the
|
|
9
|
+
* alias's own type — `.windsurfrules -> AGENTS.md` is a Windsurf rules file.
|
|
10
|
+
*
|
|
11
|
+
* Generic checks must not run again: an alias qualifies only when the real
|
|
12
|
+
* file's type does NOT (otherwise the same content would be reported twice, once
|
|
13
|
+
* per name). The same helper serves the generic detectors that are gated by a
|
|
14
|
+
* set of types (`INSTRUCTION_FILE_TYPES`): an alias whose type is in the set
|
|
15
|
+
* while the real file's is not (`CLAUDE.md -> README.md`) is the only way that
|
|
16
|
+
* content reaches them.
|
|
17
|
+
*/
|
|
18
|
+
import type { FileType, InstructionFile } from './types.js';
|
|
19
|
+
/**
|
|
20
|
+
* Aliases whose own `fileType` passes `qualifies` while the file they alias
|
|
21
|
+
* does not. A real file that is not among `files` (an on-demand skill or agent
|
|
22
|
+
* body, or a file outside the scanned set) does not qualify, so the alias does.
|
|
23
|
+
*/
|
|
24
|
+
export declare function aliasesWithNewType(files: InstructionFile[], aliases: InstructionFile[], qualifies: (fileType: FileType) => boolean): InstructionFile[];
|
|
25
|
+
/** The aliases of each real file together, in path order: `[[CLAUDE.md, GEMINI.md], …]` for two links to AGENTS.md. */
|
|
26
|
+
export declare function groupAliasesByTarget(aliases: InstructionFile[]): InstructionFile[][];
|
|
27
|
+
/**
|
|
28
|
+
* `files` plus the aliases from {@link aliasesWithNewType}, ONE per real file (the
|
|
29
|
+
* first by path): a generic check reads the content once however many links
|
|
30
|
+
* point at it. The same array when there is nothing to add.
|
|
31
|
+
*/
|
|
32
|
+
export declare function withTypeAliases(files: InstructionFile[], aliases: InstructionFile[] | undefined, qualifies: (fileType: FileType) => boolean): InstructionFile[];
|
|
33
|
+
//# sourceMappingURL=alias-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alias-files.d.ts","sourceRoot":"","sources":["../src/alias-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,eAAe,EAAE,EACxB,OAAO,EAAE,eAAe,EAAE,EAC1B,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,GACzC,eAAe,EAAE,CAWnB;AAED,uHAAuH;AACvH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,EAAE,CASpF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,eAAe,EAAE,EACxB,OAAO,EAAE,eAAe,EAAE,GAAG,SAAS,EACtC,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,GACzC,eAAe,EAAE,CAGnB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Symlink aliases for file-type-specific checks.
|
|
3
|
+
*
|
|
4
|
+
* A symlinked instruction file (`CLAUDE.md -> AGENTS.md`, `.windsurfrules ->
|
|
5
|
+
* AGENTS.md`) is scanned once, as the real file; the symlink name is kept as an
|
|
6
|
+
* ALIAS (`RepoContext.aliasFiles`, each with `aliasOf` and the real content).
|
|
7
|
+
* The tool that reads the alias name still reads that content, so a check that
|
|
8
|
+
* belongs to ONE tool's file type has to run against the alias under the
|
|
9
|
+
* alias's own type — `.windsurfrules -> AGENTS.md` is a Windsurf rules file.
|
|
10
|
+
*
|
|
11
|
+
* Generic checks must not run again: an alias qualifies only when the real
|
|
12
|
+
* file's type does NOT (otherwise the same content would be reported twice, once
|
|
13
|
+
* per name). The same helper serves the generic detectors that are gated by a
|
|
14
|
+
* set of types (`INSTRUCTION_FILE_TYPES`): an alias whose type is in the set
|
|
15
|
+
* while the real file's is not (`CLAUDE.md -> README.md`) is the only way that
|
|
16
|
+
* content reaches them.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Aliases whose own `fileType` passes `qualifies` while the file they alias
|
|
20
|
+
* does not. A real file that is not among `files` (an on-demand skill or agent
|
|
21
|
+
* body, or a file outside the scanned set) does not qualify, so the alias does.
|
|
22
|
+
*/
|
|
23
|
+
export function aliasesWithNewType(files, aliases, qualifies) {
|
|
24
|
+
if (aliases.length === 0)
|
|
25
|
+
return [];
|
|
26
|
+
const byRelativePath = new Map();
|
|
27
|
+
for (const file of files) {
|
|
28
|
+
if (file.relativePath !== undefined)
|
|
29
|
+
byRelativePath.set(file.relativePath, file);
|
|
30
|
+
}
|
|
31
|
+
return aliases.filter((alias) => {
|
|
32
|
+
if (!qualifies(alias.fileType))
|
|
33
|
+
return false;
|
|
34
|
+
const real = alias.aliasOf === undefined ? undefined : byRelativePath.get(alias.aliasOf);
|
|
35
|
+
return real === undefined || !qualifies(real.fileType);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/** The aliases of each real file together, in path order: `[[CLAUDE.md, GEMINI.md], …]` for two links to AGENTS.md. */
|
|
39
|
+
export function groupAliasesByTarget(aliases) {
|
|
40
|
+
const groups = new Map();
|
|
41
|
+
for (const alias of [...aliases].sort((a, b) => a.path.localeCompare(b.path))) {
|
|
42
|
+
const key = alias.aliasOf ?? alias.path;
|
|
43
|
+
const group = groups.get(key);
|
|
44
|
+
if (group)
|
|
45
|
+
group.push(alias);
|
|
46
|
+
else
|
|
47
|
+
groups.set(key, [alias]);
|
|
48
|
+
}
|
|
49
|
+
return [...groups.values()];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* `files` plus the aliases from {@link aliasesWithNewType}, ONE per real file (the
|
|
53
|
+
* first by path): a generic check reads the content once however many links
|
|
54
|
+
* point at it. The same array when there is nothing to add.
|
|
55
|
+
*/
|
|
56
|
+
export function withTypeAliases(files, aliases, qualifies) {
|
|
57
|
+
const extra = groupAliasesByTarget(aliasesWithNewType(files, aliases ?? [], qualifies)).map((group) => group[0]);
|
|
58
|
+
return extra.length === 0 ? files : [...files, ...extra];
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=alias-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alias-files.js","sourceRoot":"","sources":["../src/alias-files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAwB,EACxB,OAA0B,EAC1B,SAA0C;IAE1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,cAAc,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACzF,OAAO,IAAI,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,uHAAuH;AACvH,MAAM,UAAU,oBAAoB,CAAC,OAA0B;IAC7D,MAAM,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;IACpD,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAwB,EACxB,OAAsC,EACtC,SAA0C;IAE1C,MAAM,KAAK,GAAG,oBAAoB,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IAClH,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC;AAC3D,CAAC"}
|
package/dist/baseline.d.ts
CHANGED
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
import type { PromptCiIssue, Baseline } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* The fields identity is computed from. Structural rather than
|
|
4
|
+
* `PromptCiIssue`, so an issue rehydrated from a report's JSON — where
|
|
5
|
+
* `category` is a plain string — fingerprints identically to the live one.
|
|
6
|
+
*/
|
|
7
|
+
export type FingerprintableIssue = {
|
|
8
|
+
category: string;
|
|
9
|
+
title: string;
|
|
10
|
+
filePaths: string[];
|
|
11
|
+
evidence: string[];
|
|
12
|
+
};
|
|
2
13
|
/**
|
|
3
14
|
* Computes a stable fingerprint for an issue.
|
|
4
15
|
*
|
|
16
|
+
* This is the ONE answer to "are these two findings the same issue?" — the
|
|
17
|
+
* report's trend section used to carry a second, incompatible one that keyed
|
|
18
|
+
* on severity, so a severity bump read as "resolved + new" in the trend while
|
|
19
|
+
* the baseline correctly reported one issue that had worsened.
|
|
20
|
+
*
|
|
5
21
|
* Excluded from fingerprint:
|
|
6
22
|
* - `id` (may change between versions)
|
|
7
23
|
* - `severity` (tracked separately for worsening detection)
|
|
@@ -11,7 +27,7 @@ import type { PromptCiIssue, Baseline } from './types.js';
|
|
|
11
27
|
* Included:
|
|
12
28
|
* - `category`, `title`, sorted `filePaths`, sorted `evidence`
|
|
13
29
|
*/
|
|
14
|
-
export declare function computeFingerprint(issue:
|
|
30
|
+
export declare function computeFingerprint(issue: FingerprintableIssue, repoRoot?: string): string;
|
|
15
31
|
/**
|
|
16
32
|
* Creates a baseline from a list of active issues.
|
|
17
33
|
* Produces deterministic JSON when sorted by fingerprint.
|
package/dist/baseline.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,aAAa,EAAiB,QAAQ,EAAE,MAAM,YAAY,CAAC;AA4ExF
|
|
1
|
+
{"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,aAAa,EAAiB,QAAQ,EAAE,MAAM,YAAY,CAAC;AA4ExF;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBzF;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAWnF;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,QAAQ,CAiB7E;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EAAE,EACvB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,SAAS,EAAE,aAAa,EAAE,CAAC;IAAC,eAAe,EAAE,aAAa,EAAE,CAAA;CAAE,CA2BlE"}
|
package/dist/baseline.js
CHANGED
|
@@ -63,10 +63,14 @@ function normalizeEvidenceForRoot(evidence, repoRoot) {
|
|
|
63
63
|
];
|
|
64
64
|
return rootCandidates.reduce((current, normalizedRoot) => current.replaceAll(normalizedRoot, '<repo>'), normalizedEvidence);
|
|
65
65
|
}
|
|
66
|
-
// ── Fingerprinting ────────────────────────────────────────────────────────────
|
|
67
66
|
/**
|
|
68
67
|
* Computes a stable fingerprint for an issue.
|
|
69
68
|
*
|
|
69
|
+
* This is the ONE answer to "are these two findings the same issue?" — the
|
|
70
|
+
* report's trend section used to carry a second, incompatible one that keyed
|
|
71
|
+
* on severity, so a severity bump read as "resolved + new" in the trend while
|
|
72
|
+
* the baseline correctly reported one issue that had worsened.
|
|
73
|
+
*
|
|
70
74
|
* Excluded from fingerprint:
|
|
71
75
|
* - `id` (may change between versions)
|
|
72
76
|
* - `severity` (tracked separately for worsening detection)
|
package/dist/baseline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC;;;;;;;;;;;;;GAaG;AAEH,iFAAiF;AAEjF,MAAM,cAAc,GAAkC;IACpD,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;IACP,QAAQ,EAAE,CAAC;CACZ,CAAC;AAEF,SAAS,aAAa,CAAC,CAAS;IAC9B,OAAO,cAAc,CAAC,CAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB,EAAE,QAAiB;IAC/D,IAAI,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzE,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;IAED,MAAM,cAAc,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG;QACrB,gBAAgB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAC9C,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;KAC7D,CAAC;IACF,KAAK,MAAM,cAAc,IAAI,cAAc,EAAE,CAAC;QAC5C,IAAI,cAAc,KAAK,cAAc;YAAE,OAAO,GAAG,CAAC;QAClD,IAAI,cAAc,CAAC,UAAU,CAAC,GAAG,cAAc,GAAG,CAAC,EAAE,CAAC;YACpD,OAAO,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAgB,EAAE,QAAiB;IACnE,IAAI,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE/B,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG;QACrB,gBAAgB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAC9C,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;KAC7D,CAAC;IACF,OAAO,cAAc,CAAC,MAAM,CAC1B,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,EACzE,kBAAkB,CACnB,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buried critical-instruction detector (FEAT-011).
|
|
3
|
+
*
|
|
4
|
+
* Models weight earlier context more heavily than later context. A long file
|
|
5
|
+
* that puts its highest-stakes instructions ("never", "critical", "MUST NOT",
|
|
6
|
+
* "security", "dangerous") at the very bottom risks having them under-weighted.
|
|
7
|
+
*
|
|
8
|
+
* Heuristic: for files longer than 100 lines, find the lines carrying a
|
|
9
|
+
* high-severity keyword. If more than 60% of those lines sit in the bottom half
|
|
10
|
+
* of the file, emit an info finding suggesting the critical guidance be
|
|
11
|
+
* promoted toward the top.
|
|
12
|
+
*
|
|
13
|
+
* Deterministic and rule-based: no clock, network, or randomness.
|
|
14
|
+
*/
|
|
15
|
+
import type { InstructionFile, PromptCiIssue } from './types.js';
|
|
16
|
+
export declare function detectBuriedCriticalInstructions(files: InstructionFile[]): PromptCiIssue[];
|
|
17
|
+
//# sourceMappingURL=buried-critical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buried-critical.d.ts","sourceRoot":"","sources":["../src/buried-critical.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAiCjE,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAqE1F"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buried critical-instruction detector (FEAT-011).
|
|
3
|
+
*
|
|
4
|
+
* Models weight earlier context more heavily than later context. A long file
|
|
5
|
+
* that puts its highest-stakes instructions ("never", "critical", "MUST NOT",
|
|
6
|
+
* "security", "dangerous") at the very bottom risks having them under-weighted.
|
|
7
|
+
*
|
|
8
|
+
* Heuristic: for files longer than 100 lines, find the lines carrying a
|
|
9
|
+
* high-severity keyword. If more than 60% of those lines sit in the bottom half
|
|
10
|
+
* of the file, emit an info finding suggesting the critical guidance be
|
|
11
|
+
* promoted toward the top.
|
|
12
|
+
*
|
|
13
|
+
* Deterministic and rule-based: no clock, network, or randomness.
|
|
14
|
+
*/
|
|
15
|
+
import * as crypto from 'node:crypto';
|
|
16
|
+
import * as path from 'node:path';
|
|
17
|
+
import { INSTRUCTION_FILE_TYPES } from './types.js';
|
|
18
|
+
import { snippet } from './evidence.js';
|
|
19
|
+
import { fileIdPath } from './finding-id.js';
|
|
20
|
+
/** Persistent, always-loaded instruction files this detector applies to. */
|
|
21
|
+
const TARGET_FILE_TYPES = INSTRUCTION_FILE_TYPES;
|
|
22
|
+
/**
|
|
23
|
+
* High-severity keywords. Word-boundary matched, case-insensitive, so "MUST
|
|
24
|
+
* NOT" matches regardless of casing and "security" does not match inside an
|
|
25
|
+
* unrelated longer token.
|
|
26
|
+
*/
|
|
27
|
+
const HIGH_SEVERITY_KEYWORDS = [
|
|
28
|
+
/\bnever\b/i,
|
|
29
|
+
/\bcritical\b/i,
|
|
30
|
+
/\bmust\s+not\b/i,
|
|
31
|
+
/\bsecurity\b/i,
|
|
32
|
+
/\bdangerous\b/i,
|
|
33
|
+
];
|
|
34
|
+
const MIN_LINES = 100; // only long files can meaningfully "bury" content
|
|
35
|
+
const BOTTOM_HALF_RATIO_THRESHOLD = 0.6; // > 60% of keyword lines in bottom half
|
|
36
|
+
function lineHasKeyword(line) {
|
|
37
|
+
return HIGH_SEVERITY_KEYWORDS.some((re) => re.test(line));
|
|
38
|
+
}
|
|
39
|
+
function issueId(filePath) {
|
|
40
|
+
const hash = crypto.createHash('sha1').update(`buried-critical:${filePath}`).digest('hex').slice(0, 12);
|
|
41
|
+
return `buried-critical-${hash}`;
|
|
42
|
+
}
|
|
43
|
+
export function detectBuriedCriticalInstructions(files) {
|
|
44
|
+
const issues = [];
|
|
45
|
+
for (const file of files) {
|
|
46
|
+
if (!TARGET_FILE_TYPES.has(file.fileType))
|
|
47
|
+
continue;
|
|
48
|
+
const lines = file.content.split(/\r?\n/);
|
|
49
|
+
// Drop a single trailing empty line from a file-final newline so the
|
|
50
|
+
// midpoint reflects real content lines.
|
|
51
|
+
if (lines.length > 0 && lines[lines.length - 1] === '')
|
|
52
|
+
lines.pop();
|
|
53
|
+
const lineCount = lines.length;
|
|
54
|
+
if (lineCount <= MIN_LINES)
|
|
55
|
+
continue;
|
|
56
|
+
const midpoint = Math.floor(lineCount / 2);
|
|
57
|
+
const keywordLines = []; // 1-based line numbers
|
|
58
|
+
let bottomHalfCount = 0;
|
|
59
|
+
let inFence = false;
|
|
60
|
+
for (let i = 0; i < lineCount; i++) {
|
|
61
|
+
const line = lines[i] ?? '';
|
|
62
|
+
if (/^\s*(```|~~~)/.test(line)) {
|
|
63
|
+
inFence = !inFence;
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (inFence)
|
|
67
|
+
continue;
|
|
68
|
+
if (!lineHasKeyword(line))
|
|
69
|
+
continue;
|
|
70
|
+
keywordLines.push(i + 1);
|
|
71
|
+
if (i >= midpoint)
|
|
72
|
+
bottomHalfCount++;
|
|
73
|
+
}
|
|
74
|
+
if (keywordLines.length === 0)
|
|
75
|
+
continue;
|
|
76
|
+
const bottomRatio = bottomHalfCount / keywordLines.length;
|
|
77
|
+
if (bottomRatio <= BOTTOM_HALF_RATIO_THRESHOLD)
|
|
78
|
+
continue;
|
|
79
|
+
const fileName = path.basename(file.path);
|
|
80
|
+
const pct = Math.round(bottomRatio * 100);
|
|
81
|
+
const bottomLineNumbers = keywordLines.filter((ln) => ln > midpoint);
|
|
82
|
+
const sampleLine = lines[(bottomLineNumbers[0] ?? keywordLines[0]) - 1] ?? '';
|
|
83
|
+
issues.push({
|
|
84
|
+
id: issueId(fileIdPath(file)),
|
|
85
|
+
severity: 'info',
|
|
86
|
+
category: 'structure',
|
|
87
|
+
title: 'Critical instructions near the bottom of a long file',
|
|
88
|
+
summary: `${pct}% of the high-severity lines in "${fileName}" (${bottomHalfCount} of ` +
|
|
89
|
+
`${keywordLines.length}) sit in the bottom half of a ${lineCount}-line file. Models ` +
|
|
90
|
+
`weight earlier context more heavily, so critical guidance placed late may be applied ` +
|
|
91
|
+
`less reliably.`,
|
|
92
|
+
filePaths: [file.path],
|
|
93
|
+
locations: bottomLineNumbers.slice(0, 5).map((ln) => ({ filePath: file.path, startLine: ln, endLine: ln })),
|
|
94
|
+
evidence: [
|
|
95
|
+
`Keyword lines in bottom half: ${bottomLineNumbers.slice(0, 8).join(', ')}` +
|
|
96
|
+
(bottomLineNumbers.length > 8 ? ', …' : ''),
|
|
97
|
+
`e.g. line ${bottomLineNumbers[0] ?? keywordLines[0]}: "${snippet(sampleLine, 100)}"`,
|
|
98
|
+
],
|
|
99
|
+
recommendation: 'Promote the highest-stakes instructions (security rules, "never"/"must not" ' +
|
|
100
|
+
'constraints) toward the top of the file, or add a short summary of them near the ' +
|
|
101
|
+
'top that points to the detail below.',
|
|
102
|
+
confidence: 0.5,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return issues;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=buried-critical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buried-critical.js","sourceRoot":"","sources":["../src/buried-critical.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-owner.d.ts","sourceRoot":"","sources":["../src/canonical-owner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"canonical-owner.d.ts","sourceRoot":"","sources":["../src/canonical-owner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA8CjE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAoI9E"}
|
package/dist/canonical-owner.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as crypto from 'node:crypto';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
|
+
import { snippet } from './evidence.js';
|
|
4
|
+
import { fileIdPath } from './finding-id.js';
|
|
3
5
|
/**
|
|
4
6
|
* Canonical Owner and Forwarding Detector.
|
|
5
7
|
*/
|
|
@@ -10,16 +12,46 @@ const AUTHORITY_PHRASES = [
|
|
|
10
12
|
/source\s+of\s+truth\s+for\s+all\s+agents/i,
|
|
11
13
|
/master\s+instruction\s+file/i,
|
|
12
14
|
];
|
|
15
|
+
const NAMED_INSTRUCTION_FILE_RE = /\b(AGENTS|CLAUDE)\.md\b/gi;
|
|
16
|
+
/**
|
|
17
|
+
* The text of the first phrase in which `file` claims authority FOR ITSELF,
|
|
18
|
+
* or undefined. A line like "`AGENTS.md` is the single source of truth for all
|
|
19
|
+
* agents" inside GEMINI.md or CLAUDE.md is a forwarding pointer — it hands
|
|
20
|
+
* authority to another file — so it is skipped, and the search continues over
|
|
21
|
+
* EVERY occurrence of every phrase: a delegation line cannot hide a genuine
|
|
22
|
+
* self-claim further down. Only the line holding a phrase is checked, so an
|
|
23
|
+
* unrelated mention elsewhere cannot cancel a real claim.
|
|
24
|
+
*
|
|
25
|
+
* Patterns are tried in AUTHORITY_PHRASES order and occurrences in document
|
|
26
|
+
* order, so a file with no delegation lines yields the same evidence text as
|
|
27
|
+
* before (baseline fingerprints hash evidence).
|
|
28
|
+
*/
|
|
29
|
+
function authorityClaim(file) {
|
|
30
|
+
const own = path.basename(file.path).toLowerCase();
|
|
31
|
+
for (const phrase of AUTHORITY_PHRASES) {
|
|
32
|
+
for (const m of file.content.matchAll(new RegExp(phrase.source, 'gi'))) {
|
|
33
|
+
const lineStart = file.content.lastIndexOf('\n', m.index) + 1;
|
|
34
|
+
const lineEnd = file.content.indexOf('\n', m.index + m[0].length);
|
|
35
|
+
const line = file.content.slice(lineStart, lineEnd === -1 ? undefined : lineEnd);
|
|
36
|
+
const named = [...line.matchAll(NAMED_INSTRUCTION_FILE_RE)].map((n) => `${n[1].toLowerCase()}.md`);
|
|
37
|
+
const delegates = named.length > 0 && named.every((n) => n !== own);
|
|
38
|
+
if (!delegates)
|
|
39
|
+
return m[0];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
13
44
|
export function detectCanonicalOwner(files) {
|
|
14
45
|
if (files.length === 0)
|
|
15
46
|
return [];
|
|
16
47
|
const issues = [];
|
|
17
|
-
const
|
|
48
|
+
const claims = new Map();
|
|
18
49
|
for (const file of files) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
50
|
+
const claim = authorityClaim(file);
|
|
51
|
+
if (claim !== undefined)
|
|
52
|
+
claims.set(file, claim);
|
|
22
53
|
}
|
|
54
|
+
const filesWithAuthority = [...claims.keys()];
|
|
23
55
|
function issueId(name) {
|
|
24
56
|
const hash = crypto.createHash('sha1').update(name).digest('hex').slice(0, 12);
|
|
25
57
|
return `canonical-${name}-${hash}`;
|
|
@@ -35,25 +67,13 @@ export function detectCanonicalOwner(files) {
|
|
|
35
67
|
`This leads to confusion about which instructions take precedence.`,
|
|
36
68
|
filePaths: filesWithAuthority.map((f) => f.path),
|
|
37
69
|
locations: filesWithAuthority.map((f) => ({ filePath: f.path })),
|
|
38
|
-
// CO1:
|
|
39
|
-
//
|
|
40
|
-
//
|
|
41
|
-
//
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
|
|
45
|
-
evidence: filesWithAuthority.map((f) => {
|
|
46
|
-
let matchText;
|
|
47
|
-
for (const re of AUTHORITY_PHRASES) {
|
|
48
|
-
const m = re.exec(f.content);
|
|
49
|
-
if (m) {
|
|
50
|
-
matchText = m[0];
|
|
51
|
-
break;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
const snippet = (matchText ?? '').replace(/\s+/g, ' ').trim();
|
|
55
|
-
return `${path.basename(f.path)}: "${snippet}"`;
|
|
56
|
-
}),
|
|
70
|
+
// CO1: evidence is the SAME whole-content match the gate used (not a
|
|
71
|
+
// line-by-line re-scan: `\s` in the phrases matches newlines, so a
|
|
72
|
+
// phrase wrapped across two lines has no single line containing it).
|
|
73
|
+
// It quotes the genuine self-claim, never a skipped delegation line.
|
|
74
|
+
// Authority phrases are short fixed strings — well under the shared
|
|
75
|
+
// snippet's default clip — so this only collapses whitespace + trims.
|
|
76
|
+
evidence: filesWithAuthority.map((f) => `${path.basename(f.path)}: "${snippet(claims.get(f))}"`),
|
|
57
77
|
recommendation: 'Designate ONE file (usually AGENTS.md) as the canonical source. ' +
|
|
58
78
|
'Other files should use forwarding pointers and only contain tool-specific reminders.',
|
|
59
79
|
confidence: 0.9,
|
|
@@ -72,14 +92,24 @@ export function detectCanonicalOwner(files) {
|
|
|
72
92
|
for (const file of files) {
|
|
73
93
|
if (file === primaryCanonical)
|
|
74
94
|
continue;
|
|
95
|
+
// BUG-006: classify by the scanner-computed fileType (derived from the
|
|
96
|
+
// repo-RELATIVE path) plus the location-independent basename — never by a
|
|
97
|
+
// directory substring of the ABSOLUTE path. Matching `/.claude/` against
|
|
98
|
+
// the absolute path let the checkout location leak in, so a repo checked
|
|
99
|
+
// out under a Claude Code worktree (`.../.claude/worktrees/<branch>/`)
|
|
100
|
+
// treated every file as tool-specific. deriveFileType already maps the
|
|
101
|
+
// in-repo `.claude/`, `.cursor/rules/`, and `.github/instructions/`
|
|
102
|
+
// directories, so fileType is the authoritative signal.
|
|
75
103
|
const baseName = path.basename(file.path).toLowerCase();
|
|
76
|
-
const
|
|
77
|
-
|
|
104
|
+
const isToolSpecific = file.fileType === 'claude' ||
|
|
105
|
+
file.fileType === 'cursor' ||
|
|
106
|
+
file.fileType === 'windsurf' ||
|
|
107
|
+
file.fileType === 'copilot' ||
|
|
108
|
+
file.fileType === 'gemini' ||
|
|
109
|
+
file.fileType === 'cline' ||
|
|
110
|
+
baseName === 'claude.md' ||
|
|
78
111
|
baseName === '.cursorrules' ||
|
|
79
|
-
|
|
80
|
-
normalizedPath.includes('/.cursor/rules/') ||
|
|
81
|
-
normalizedPath.includes('/.github/copilot-instructions.md') ||
|
|
82
|
-
normalizedPath.includes('/.github/instructions/');
|
|
112
|
+
baseName === '.windsurfrules';
|
|
83
113
|
if (!isToolSpecific)
|
|
84
114
|
continue;
|
|
85
115
|
if (file.lineCount > 50) {
|
|
@@ -99,7 +129,7 @@ export function detectCanonicalOwner(files) {
|
|
|
99
129
|
// (mirroring the fix on the agent-practices.ts side) so ids
|
|
100
130
|
// stay distinct even for the same file path; the public id
|
|
101
131
|
// PREFIX is unchanged.
|
|
102
|
-
const hash = crypto.createHash('sha1').update(`canonical-owner:behavior-duplication:${file
|
|
132
|
+
const hash = crypto.createHash('sha1').update(`canonical-owner:behavior-duplication:${fileIdPath(file)}`).digest('hex').slice(0, 12);
|
|
103
133
|
const canonicalLabel = path.basename(primaryCanonical.path);
|
|
104
134
|
const duplicateTokens = Math.round(section.text.length / 4);
|
|
105
135
|
issues.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-owner.js","sourceRoot":"","sources":["../src/canonical-owner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"canonical-owner.js","sourceRoot":"","sources":["../src/canonical-owner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci-alignment.d.ts","sourceRoot":"","sources":["../src/ci-alignment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ci-alignment.d.ts","sourceRoot":"","sources":["../src/ci-alignment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,YAAY,CAAC;AAwWjE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CAQvE"}
|
package/dist/ci-alignment.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as crypto from 'node:crypto';
|
|
2
|
+
import { fileIdPath } from './finding-id.js';
|
|
2
3
|
/**
|
|
3
4
|
* CI and Workflow Alignment Detector
|
|
4
5
|
*
|
|
@@ -228,7 +229,7 @@ function checkCiPackageManagerMismatch(context) {
|
|
|
228
229
|
if (!positiveHit)
|
|
229
230
|
continue;
|
|
230
231
|
issues.push({
|
|
231
|
-
id: issueId(`pm-mismatch-ci:${file
|
|
232
|
+
id: issueId(`pm-mismatch-ci:${fileIdPath(file)}:${pm}`),
|
|
232
233
|
severity: 'warning',
|
|
233
234
|
category: 'conflict',
|
|
234
235
|
title: `Possible package manager mismatch: instructions use \`${pm}\` but CI uses \`${preferredPm}\``,
|
|
@@ -301,7 +302,7 @@ function checkOrphanedInstructionScripts(context) {
|
|
|
301
302
|
continue;
|
|
302
303
|
reported.add(dedupeKey);
|
|
303
304
|
issues.push({
|
|
304
|
-
id: issueId(`orphan-script:${file
|
|
305
|
+
id: issueId(`orphan-script:${fileIdPath(file)}:${scriptName}`),
|
|
305
306
|
severity: 'warning',
|
|
306
307
|
category: 'stale_instruction',
|
|
307
308
|
title: `Possible reference to missing script: \`${scriptName}\` (not in CI or package.json)`,
|