@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.
Files changed (253) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +29 -30
  3. package/dist/action-pinning.d.ts +37 -0
  4. package/dist/action-pinning.d.ts.map +1 -0
  5. package/dist/action-pinning.js +277 -0
  6. package/dist/action-pinning.js.map +1 -0
  7. package/dist/agent-practices.d.ts +3 -1
  8. package/dist/agent-practices.d.ts.map +1 -1
  9. package/dist/agent-practices.js +198 -94
  10. package/dist/agent-practices.js.map +1 -1
  11. package/dist/ai-config.d.ts +178 -0
  12. package/dist/ai-config.d.ts.map +1 -0
  13. package/dist/ai-config.js +721 -0
  14. package/dist/ai-config.js.map +1 -0
  15. package/dist/alias-files.d.ts +33 -0
  16. package/dist/alias-files.d.ts.map +1 -0
  17. package/dist/alias-files.js +60 -0
  18. package/dist/alias-files.js.map +1 -0
  19. package/dist/baseline.d.ts +17 -1
  20. package/dist/baseline.d.ts.map +1 -1
  21. package/dist/baseline.js +5 -1
  22. package/dist/baseline.js.map +1 -1
  23. package/dist/buried-critical.d.ts +17 -0
  24. package/dist/buried-critical.d.ts.map +1 -0
  25. package/dist/buried-critical.js +107 -0
  26. package/dist/buried-critical.js.map +1 -0
  27. package/dist/canonical-owner.d.ts.map +1 -1
  28. package/dist/canonical-owner.js +60 -30
  29. package/dist/canonical-owner.js.map +1 -1
  30. package/dist/ci-alignment.d.ts.map +1 -1
  31. package/dist/ci-alignment.js +3 -2
  32. package/dist/ci-alignment.js.map +1 -1
  33. package/dist/command-validity.d.ts +16 -0
  34. package/dist/command-validity.d.ts.map +1 -1
  35. package/dist/command-validity.js +387 -134
  36. package/dist/command-validity.js.map +1 -1
  37. package/dist/conflicts.d.ts.map +1 -1
  38. package/dist/conflicts.js +4 -44
  39. package/dist/conflicts.js.map +1 -1
  40. package/dist/context-analysis.d.ts.map +1 -1
  41. package/dist/context-analysis.js +13 -2
  42. package/dist/context-analysis.js.map +1 -1
  43. package/dist/context-bloat.d.ts +20 -1
  44. package/dist/context-bloat.d.ts.map +1 -1
  45. package/dist/context-bloat.js +99 -15
  46. package/dist/context-bloat.js.map +1 -1
  47. package/dist/context-optimizer.d.ts.map +1 -1
  48. package/dist/context-optimizer.js +18 -54
  49. package/dist/context-optimizer.js.map +1 -1
  50. package/dist/copilot-instructions-detector.d.ts +24 -0
  51. package/dist/copilot-instructions-detector.d.ts.map +1 -0
  52. package/dist/copilot-instructions-detector.js +145 -0
  53. package/dist/copilot-instructions-detector.js.map +1 -0
  54. package/dist/cursor-rules-detector.d.ts +17 -0
  55. package/dist/cursor-rules-detector.d.ts.map +1 -0
  56. package/dist/cursor-rules-detector.js +110 -0
  57. package/dist/cursor-rules-detector.js.map +1 -0
  58. package/dist/custom-rules.d.ts +52 -0
  59. package/dist/custom-rules.d.ts.map +1 -0
  60. package/dist/custom-rules.js +303 -0
  61. package/dist/custom-rules.js.map +1 -0
  62. package/dist/dead-references.d.ts +8 -2
  63. package/dist/dead-references.d.ts.map +1 -1
  64. package/dist/dead-references.js +315 -68
  65. package/dist/dead-references.js.map +1 -1
  66. package/dist/dependency-staleness.d.ts +35 -0
  67. package/dist/dependency-staleness.d.ts.map +1 -0
  68. package/dist/dependency-staleness.js +1001 -0
  69. package/dist/dependency-staleness.js.map +1 -0
  70. package/dist/detectors.d.ts +1 -3
  71. package/dist/detectors.d.ts.map +1 -1
  72. package/dist/detectors.js +74 -56
  73. package/dist/detectors.js.map +1 -1
  74. package/dist/duplicates.d.ts.map +1 -1
  75. package/dist/duplicates.js +15 -9
  76. package/dist/duplicates.js.map +1 -1
  77. package/dist/evidence.d.ts +39 -0
  78. package/dist/evidence.d.ts.map +1 -0
  79. package/dist/evidence.js +78 -0
  80. package/dist/evidence.js.map +1 -0
  81. package/dist/finding-id.d.ts +21 -0
  82. package/dist/finding-id.d.ts.map +1 -0
  83. package/dist/finding-id.js +31 -0
  84. package/dist/finding-id.js.map +1 -0
  85. package/dist/fix-engine.d.ts +11 -0
  86. package/dist/fix-engine.d.ts.map +1 -1
  87. package/dist/fix-engine.js +88 -71
  88. package/dist/fix-engine.js.map +1 -1
  89. package/dist/frameworks/dotnet.js +2 -2
  90. package/dist/frameworks/dotnet.js.map +1 -1
  91. package/dist/frameworks/python.d.ts.map +1 -1
  92. package/dist/frameworks/python.js +5 -2
  93. package/dist/frameworks/python.js.map +1 -1
  94. package/dist/frameworks/rust.d.ts.map +1 -1
  95. package/dist/frameworks/rust.js +2 -1
  96. package/dist/frameworks/rust.js.map +1 -1
  97. package/dist/git-symlinks.d.ts +30 -0
  98. package/dist/git-symlinks.d.ts.map +1 -0
  99. package/dist/git-symlinks.js +161 -0
  100. package/dist/git-symlinks.js.map +1 -0
  101. package/dist/gitignore.d.ts +22 -0
  102. package/dist/gitignore.d.ts.map +1 -0
  103. package/dist/gitignore.js +157 -0
  104. package/dist/gitignore.js.map +1 -0
  105. package/dist/health-score.d.ts.map +1 -1
  106. package/dist/health-score.js +35 -5
  107. package/dist/health-score.js.map +1 -1
  108. package/dist/hooks-settings-detector.d.ts +17 -0
  109. package/dist/hooks-settings-detector.d.ts.map +1 -0
  110. package/dist/hooks-settings-detector.js +228 -0
  111. package/dist/hooks-settings-detector.js.map +1 -0
  112. package/dist/index.d.ts +29 -8
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +21 -6
  115. package/dist/index.js.map +1 -1
  116. package/dist/makefile.d.ts +37 -0
  117. package/dist/makefile.d.ts.map +1 -0
  118. package/dist/makefile.js +156 -0
  119. package/dist/makefile.js.map +1 -0
  120. package/dist/manifest-consistency.d.ts +6 -0
  121. package/dist/manifest-consistency.d.ts.map +1 -1
  122. package/dist/manifest-consistency.js +75 -10
  123. package/dist/manifest-consistency.js.map +1 -1
  124. package/dist/markdown-fences.d.ts +112 -0
  125. package/dist/markdown-fences.d.ts.map +1 -0
  126. package/dist/markdown-fences.js +174 -0
  127. package/dist/markdown-fences.js.map +1 -0
  128. package/dist/mcp-config-detector.d.ts +20 -0
  129. package/dist/mcp-config-detector.d.ts.map +1 -0
  130. package/dist/mcp-config-detector.js +237 -0
  131. package/dist/mcp-config-detector.js.map +1 -0
  132. package/dist/missing-context.d.ts.map +1 -1
  133. package/dist/missing-context.js +2 -52
  134. package/dist/missing-context.js.map +1 -1
  135. package/dist/model-budgets.d.ts +69 -0
  136. package/dist/model-budgets.d.ts.map +1 -0
  137. package/dist/model-budgets.js +110 -0
  138. package/dist/model-budgets.js.map +1 -0
  139. package/dist/negative-instructions.d.ts +26 -0
  140. package/dist/negative-instructions.d.ts.map +1 -0
  141. package/dist/negative-instructions.js +169 -0
  142. package/dist/negative-instructions.js.map +1 -0
  143. package/dist/path-containment.d.ts +41 -0
  144. package/dist/path-containment.d.ts.map +1 -0
  145. package/dist/path-containment.js +123 -0
  146. package/dist/path-containment.js.map +1 -0
  147. package/dist/project-type.d.ts +12 -2
  148. package/dist/project-type.d.ts.map +1 -1
  149. package/dist/project-type.js +25 -12
  150. package/dist/project-type.js.map +1 -1
  151. package/dist/prompt-cache.d.ts.map +1 -1
  152. package/dist/prompt-cache.js +33 -24
  153. package/dist/prompt-cache.js.map +1 -1
  154. package/dist/promptci-gitignore.d.ts +34 -0
  155. package/dist/promptci-gitignore.d.ts.map +1 -0
  156. package/dist/promptci-gitignore.js +42 -0
  157. package/dist/promptci-gitignore.js.map +1 -0
  158. package/dist/repo-context.d.ts +80 -0
  159. package/dist/repo-context.d.ts.map +1 -1
  160. package/dist/repo-context.js +170 -16
  161. package/dist/repo-context.js.map +1 -1
  162. package/dist/report.d.ts +8 -0
  163. package/dist/report.d.ts.map +1 -1
  164. package/dist/report.js +163 -63
  165. package/dist/report.js.map +1 -1
  166. package/dist/scan.d.ts.map +1 -1
  167. package/dist/scan.js +47 -4
  168. package/dist/scan.js.map +1 -1
  169. package/dist/scanner.d.ts +61 -1
  170. package/dist/scanner.d.ts.map +1 -1
  171. package/dist/scanner.js +367 -70
  172. package/dist/scanner.js.map +1 -1
  173. package/dist/security-pack.d.ts +20 -0
  174. package/dist/security-pack.d.ts.map +1 -1
  175. package/dist/security-pack.js +33 -14
  176. package/dist/security-pack.js.map +1 -1
  177. package/dist/skill-supply-chain.d.ts +132 -0
  178. package/dist/skill-supply-chain.d.ts.map +1 -0
  179. package/dist/skill-supply-chain.js +2954 -0
  180. package/dist/skill-supply-chain.js.map +1 -0
  181. package/dist/skills-detector.d.ts +23 -0
  182. package/dist/skills-detector.d.ts.map +1 -0
  183. package/dist/skills-detector.js +279 -0
  184. package/dist/skills-detector.js.map +1 -0
  185. package/dist/stale-instructions.d.ts +4 -1
  186. package/dist/stale-instructions.d.ts.map +1 -1
  187. package/dist/stale-instructions.js +53 -55
  188. package/dist/stale-instructions.js.map +1 -1
  189. package/dist/subagents-detector.d.ts +19 -0
  190. package/dist/subagents-detector.d.ts.map +1 -0
  191. package/dist/subagents-detector.js +155 -0
  192. package/dist/subagents-detector.js.map +1 -0
  193. package/dist/suppression.d.ts +2 -0
  194. package/dist/suppression.d.ts.map +1 -1
  195. package/dist/suppression.js +16 -47
  196. package/dist/suppression.js.map +1 -1
  197. package/dist/types.d.ts +62 -4
  198. package/dist/types.d.ts.map +1 -1
  199. package/dist/types.js +47 -1
  200. package/dist/types.js.map +1 -1
  201. package/dist/vague-guidance.d.ts +15 -2
  202. package/dist/vague-guidance.d.ts.map +1 -1
  203. package/dist/vague-guidance.js +44 -41
  204. package/dist/vague-guidance.js.map +1 -1
  205. package/dist/windsurf-detector.d.ts +22 -0
  206. package/dist/windsurf-detector.d.ts.map +1 -0
  207. package/dist/windsurf-detector.js +96 -0
  208. package/dist/windsurf-detector.js.map +1 -0
  209. package/dist/within-section-dedup.d.ts +16 -0
  210. package/dist/within-section-dedup.d.ts.map +1 -0
  211. package/dist/within-section-dedup.js +148 -0
  212. package/dist/within-section-dedup.js.map +1 -0
  213. package/dist/workspace-manifests.d.ts +80 -0
  214. package/dist/workspace-manifests.d.ts.map +1 -0
  215. package/dist/workspace-manifests.js +333 -0
  216. package/dist/workspace-manifests.js.map +1 -0
  217. package/package.json +11 -8
  218. package/dist/cheap-model-routing.d.ts +0 -4
  219. package/dist/cheap-model-routing.d.ts.map +0 -1
  220. package/dist/cheap-model-routing.js +0 -43
  221. package/dist/cheap-model-routing.js.map +0 -1
  222. package/dist/cli-output-filter.d.ts +0 -16
  223. package/dist/cli-output-filter.d.ts.map +0 -1
  224. package/dist/cli-output-filter.js +0 -88
  225. package/dist/cli-output-filter.js.map +0 -1
  226. package/dist/context-cost.d.ts +0 -4
  227. package/dist/context-cost.d.ts.map +0 -1
  228. package/dist/context-cost.js +0 -70
  229. package/dist/context-cost.js.map +0 -1
  230. package/dist/context-recommender.d.ts +0 -3
  231. package/dist/context-recommender.d.ts.map +0 -1
  232. package/dist/context-recommender.js +0 -329
  233. package/dist/context-recommender.js.map +0 -1
  234. package/dist/llm.d.ts +0 -6
  235. package/dist/llm.d.ts.map +0 -1
  236. package/dist/llm.js +0 -67
  237. package/dist/llm.js.map +0 -1
  238. package/dist/mcp-detector.d.ts +0 -4
  239. package/dist/mcp-detector.d.ts.map +0 -1
  240. package/dist/mcp-detector.js +0 -131
  241. package/dist/mcp-detector.js.map +0 -1
  242. package/dist/native-tool-preference.d.ts +0 -20
  243. package/dist/native-tool-preference.d.ts.map +0 -1
  244. package/dist/native-tool-preference.js +0 -94
  245. package/dist/native-tool-preference.js.map +0 -1
  246. package/dist/output-verbosity.d.ts +0 -3
  247. package/dist/output-verbosity.d.ts.map +0 -1
  248. package/dist/output-verbosity.js +0 -83
  249. package/dist/output-verbosity.js.map +0 -1
  250. package/dist/product-boundary.d.ts +0 -11
  251. package/dist/product-boundary.d.ts.map +0 -1
  252. package/dist/product-boundary.js +0 -301
  253. 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"}
@@ -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: PromptCiIssue, repoRoot?: string): string;
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.
@@ -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;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBlF;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"}
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)
@@ -1 +1 @@
1
- {"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"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"}
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;AAgBD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAA2B,EAAE,QAAiB;IAC/E,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS;SACxC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAC3D,IAAI,EAAE,CAAC;IACV,MAAM,kBAAkB,GAAG,KAAK,CAAC,QAAQ;SACtC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAC/D,IAAI,EAAE,CAAC;IAEV,MAAM,OAAO,GAAG;QACd,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,KAAK;QACX,GAAG,mBAAmB;QACtB,GAAG,kBAAkB;KACtB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAuB,EAAE,QAAiB;IACvE,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,KAAK,EAAiB,EAAE,CAAC,CAAC;QAC9B,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE;QAC7F,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,WAAW,EAAE,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC;KACjD,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,iFAAiF;AAEjF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,oBAAoB,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,CAAC,GAAG,KAAgC,CAAC;QAC3C,IAAI,OAAO,CAAC,CAAC,aAAa,CAAC,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,2CAA2C,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,wCAAwC,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAuB,EACvB,QAAkB,EAClB,QAAiB;IAEjB,wEAAwE;IACxE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,SAAS,GAAoB,EAAE,CAAC;IACtC,MAAM,eAAe,GAAoB,EAAE,CAAC;IAE5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE9C,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACpC,+BAA+B;YAC/B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC5E,4CAA4C;YAC5C,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,0CAA0C;YAC1C,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;AACxC,CAAC"}
@@ -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;AAcjE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,aAAa,EAAE,CAsI9E"}
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"}
@@ -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 filesWithAuthority = [];
48
+ const claims = new Map();
18
49
  for (const file of files) {
19
- if (AUTHORITY_PHRASES.some((re) => re.test(file.content))) {
20
- filesWithAuthority.push(file);
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: extract evidence from the SAME whole-content match the gate
39
- // used, instead of re-scanning line-by-line. The gate tests against
40
- // `\s`-containing patterns (e.g. "canonical\s+source of truth"), and
41
- // `\s` matches newlines — so a phrase wrapped across two lines
42
- // ("canonical\nsource of truth") passes the gate but no SINGLE line
43
- // contains the whole phrase, so `lines.find(...)` returned `undefined`
44
- // and evidence literally rendered the string "undefined".
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 normalizedPath = file.path.replace(/\\/g, '/').toLowerCase();
77
- const isToolSpecific = baseName === 'claude.md' ||
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
- normalizedPath.includes('/.claude/') ||
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.path}`).digest('hex').slice(0, 12);
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":"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"}
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;AAuWjE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,EAAE,CAQvE"}
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"}
@@ -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.path}:${pm}`),
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.path}:${scriptName}`),
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)`,