@promptci/core 0.2.2 → 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.
Files changed (181) hide show
  1. package/dist/action-pinning.d.ts.map +1 -1
  2. package/dist/action-pinning.js +86 -55
  3. package/dist/action-pinning.js.map +1 -1
  4. package/dist/agent-practices.d.ts +5 -1
  5. package/dist/agent-practices.d.ts.map +1 -1
  6. package/dist/agent-practices.js +59 -34
  7. package/dist/agent-practices.js.map +1 -1
  8. package/dist/ai-config.d.ts +13 -6
  9. package/dist/ai-config.d.ts.map +1 -1
  10. package/dist/ai-config.js +25 -78
  11. package/dist/ai-config.js.map +1 -1
  12. package/dist/baseline.d.ts +8 -0
  13. package/dist/baseline.d.ts.map +1 -1
  14. package/dist/baseline.js +15 -0
  15. package/dist/baseline.js.map +1 -1
  16. package/dist/ci-alignment.d.ts +3 -1
  17. package/dist/ci-alignment.d.ts.map +1 -1
  18. package/dist/ci-alignment.js +8 -1
  19. package/dist/ci-alignment.js.map +1 -1
  20. package/dist/close-match.d.ts +97 -0
  21. package/dist/close-match.d.ts.map +1 -0
  22. package/dist/close-match.js +215 -0
  23. package/dist/close-match.js.map +1 -0
  24. package/dist/command-context.d.ts +67 -0
  25. package/dist/command-context.d.ts.map +1 -0
  26. package/dist/command-context.js +291 -0
  27. package/dist/command-context.js.map +1 -0
  28. package/dist/command-validity.d.ts.map +1 -1
  29. package/dist/command-validity.js +510 -32
  30. package/dist/command-validity.js.map +1 -1
  31. package/dist/context-optimizer.d.ts.map +1 -1
  32. package/dist/context-optimizer.js +9 -2
  33. package/dist/context-optimizer.js.map +1 -1
  34. package/dist/dead-references.d.ts +14 -1
  35. package/dist/dead-references.d.ts.map +1 -1
  36. package/dist/dead-references.js +264 -17
  37. package/dist/dead-references.js.map +1 -1
  38. package/dist/dependency-staleness.d.ts.map +1 -1
  39. package/dist/dependency-staleness.js +24 -38
  40. package/dist/dependency-staleness.js.map +1 -1
  41. package/dist/detectors.js +1 -1
  42. package/dist/detectors.js.map +1 -1
  43. package/dist/discovery.d.ts +138 -0
  44. package/dist/discovery.d.ts.map +1 -0
  45. package/dist/discovery.js +569 -0
  46. package/dist/discovery.js.map +1 -0
  47. package/dist/duplicates.d.ts +24 -2
  48. package/dist/duplicates.d.ts.map +1 -1
  49. package/dist/duplicates.js +313 -9
  50. package/dist/duplicates.js.map +1 -1
  51. package/dist/fix-engine.d.ts.map +1 -1
  52. package/dist/fix-engine.js +75 -1
  53. package/dist/fix-engine.js.map +1 -1
  54. package/dist/frameworks/dotnet.d.ts.map +1 -1
  55. package/dist/frameworks/dotnet.js +10 -11
  56. package/dist/frameworks/dotnet.js.map +1 -1
  57. package/dist/frameworks/go.d.ts.map +1 -1
  58. package/dist/frameworks/go.js +8 -4
  59. package/dist/frameworks/go.js.map +1 -1
  60. package/dist/frameworks/nextjs.d.ts.map +1 -1
  61. package/dist/frameworks/nextjs.js +8 -17
  62. package/dist/frameworks/nextjs.js.map +1 -1
  63. package/dist/frameworks/python.d.ts.map +1 -1
  64. package/dist/frameworks/python.js +5 -3
  65. package/dist/frameworks/python.js.map +1 -1
  66. package/dist/frameworks/rust.d.ts.map +1 -1
  67. package/dist/frameworks/rust.js +3 -3
  68. package/dist/frameworks/rust.js.map +1 -1
  69. package/dist/frameworks/unity.d.ts.map +1 -1
  70. package/dist/frameworks/unity.js +6 -5
  71. package/dist/frameworks/unity.js.map +1 -1
  72. package/dist/gitignore.d.ts +31 -2
  73. package/dist/gitignore.d.ts.map +1 -1
  74. package/dist/gitignore.js +33 -8
  75. package/dist/gitignore.js.map +1 -1
  76. package/dist/health-score.d.ts +15 -1
  77. package/dist/health-score.d.ts.map +1 -1
  78. package/dist/health-score.js +25 -2
  79. package/dist/health-score.js.map +1 -1
  80. package/dist/hooks-settings-detector.d.ts.map +1 -1
  81. package/dist/hooks-settings-detector.js +5 -1
  82. package/dist/hooks-settings-detector.js.map +1 -1
  83. package/dist/index.d.ts +10 -2
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +16 -2
  86. package/dist/index.js.map +1 -1
  87. package/dist/known-paths.d.ts +82 -0
  88. package/dist/known-paths.d.ts.map +1 -0
  89. package/dist/known-paths.js +152 -0
  90. package/dist/known-paths.js.map +1 -0
  91. package/dist/makefile.d.ts.map +1 -1
  92. package/dist/makefile.js +17 -13
  93. package/dist/makefile.js.map +1 -1
  94. package/dist/manifest-consistency.d.ts +1 -1
  95. package/dist/manifest-consistency.d.ts.map +1 -1
  96. package/dist/manifest-consistency.js +18 -8
  97. package/dist/manifest-consistency.js.map +1 -1
  98. package/dist/markdown-fences.d.ts.map +1 -1
  99. package/dist/markdown-fences.js +7 -3
  100. package/dist/markdown-fences.js.map +1 -1
  101. package/dist/mcp-config-detector.d.ts.map +1 -1
  102. package/dist/mcp-config-detector.js +5 -1
  103. package/dist/mcp-config-detector.js.map +1 -1
  104. package/dist/project-type.d.ts +2 -1
  105. package/dist/project-type.d.ts.map +1 -1
  106. package/dist/project-type.js +36 -48
  107. package/dist/project-type.js.map +1 -1
  108. package/dist/prompt-cache.d.ts.map +1 -1
  109. package/dist/prompt-cache.js +13 -2
  110. package/dist/prompt-cache.js.map +1 -1
  111. package/dist/provenance/check.d.ts +40 -0
  112. package/dist/provenance/check.d.ts.map +1 -0
  113. package/dist/provenance/check.js +157 -0
  114. package/dist/provenance/check.js.map +1 -0
  115. package/dist/provenance/index.d.ts +13 -0
  116. package/dist/provenance/index.d.ts.map +1 -0
  117. package/dist/provenance/index.js +21 -0
  118. package/dist/provenance/index.js.map +1 -0
  119. package/dist/provenance/instruction-advice.d.ts +3 -0
  120. package/dist/provenance/instruction-advice.d.ts.map +1 -0
  121. package/dist/provenance/instruction-advice.js +570 -0
  122. package/dist/provenance/instruction-advice.js.map +1 -0
  123. package/dist/provenance/repo-checks.d.ts +3 -0
  124. package/dist/provenance/repo-checks.d.ts.map +1 -0
  125. package/dist/provenance/repo-checks.js +644 -0
  126. package/dist/provenance/repo-checks.js.map +1 -0
  127. package/dist/provenance/tool-config.d.ts +3 -0
  128. package/dist/provenance/tool-config.d.ts.map +1 -0
  129. package/dist/provenance/tool-config.js +480 -0
  130. package/dist/provenance/tool-config.js.map +1 -0
  131. package/dist/provenance/types.d.ts +116 -0
  132. package/dist/provenance/types.d.ts.map +1 -0
  133. package/dist/provenance/types.js +17 -0
  134. package/dist/provenance/types.js.map +1 -0
  135. package/dist/repo-context.d.ts +9 -0
  136. package/dist/repo-context.d.ts.map +1 -1
  137. package/dist/repo-context.js +35 -41
  138. package/dist/repo-context.js.map +1 -1
  139. package/dist/repo-tree.d.ts +163 -9
  140. package/dist/repo-tree.d.ts.map +1 -1
  141. package/dist/repo-tree.js +226 -34
  142. package/dist/repo-tree.js.map +1 -1
  143. package/dist/report.d.ts.map +1 -1
  144. package/dist/report.js +6 -0
  145. package/dist/report.js.map +1 -1
  146. package/dist/sample-text.d.ts +36 -0
  147. package/dist/sample-text.d.ts.map +1 -0
  148. package/dist/sample-text.js +72 -0
  149. package/dist/sample-text.js.map +1 -0
  150. package/dist/sarif.d.ts +27 -0
  151. package/dist/sarif.d.ts.map +1 -0
  152. package/dist/sarif.js +357 -0
  153. package/dist/sarif.js.map +1 -0
  154. package/dist/scan.d.ts.map +1 -1
  155. package/dist/scan.js +8 -2
  156. package/dist/scan.js.map +1 -1
  157. package/dist/scanner.d.ts +4 -3
  158. package/dist/scanner.d.ts.map +1 -1
  159. package/dist/scanner.js +36 -77
  160. package/dist/scanner.js.map +1 -1
  161. package/dist/security-pack.d.ts.map +1 -1
  162. package/dist/security-pack.js +117 -35
  163. package/dist/security-pack.js.map +1 -1
  164. package/dist/skill-supply-chain.d.ts.map +1 -1
  165. package/dist/skill-supply-chain.js +29 -19
  166. package/dist/skill-supply-chain.js.map +1 -1
  167. package/dist/skills-detector.d.ts.map +1 -1
  168. package/dist/skills-detector.js +11 -3
  169. package/dist/skills-detector.js.map +1 -1
  170. package/dist/token-estimates.d.ts +42 -0
  171. package/dist/token-estimates.d.ts.map +1 -0
  172. package/dist/token-estimates.js +200 -0
  173. package/dist/token-estimates.js.map +1 -0
  174. package/dist/types.d.ts +99 -0
  175. package/dist/types.d.ts.map +1 -1
  176. package/dist/types.js.map +1 -1
  177. package/dist/workspace-manifests.d.ts +6 -0
  178. package/dist/workspace-manifests.d.ts.map +1 -1
  179. package/dist/workspace-manifests.js +13 -8
  180. package/dist/workspace-manifests.js.map +1 -1
  181. package/package.json +5 -2
@@ -0,0 +1,570 @@
1
+ /**
2
+ * Provenance for the instruction-advice checks (pcic-kvv3.1, issue #162): context-bloat,
3
+ * prompt-cache-friendliness, negative-instructions, buried-critical, vague-guidance,
4
+ * agent-practices, missing-context, within-section-dedup, duplicates, duplicate-headings,
5
+ * canonical-owner and custom-rules.
6
+ *
7
+ * Every source below is a page an agent fetched and read on the stated date; nothing is
8
+ * filled in from memory. A record with no source and `unverified: true` is a result: it
9
+ * means no page was found that supports the claim.
10
+ */
11
+ const BY = 'Claude agent backfill (pcic-kvv3.1), pending human review';
12
+ /** Verified on the day the first pages were read. */
13
+ const V13 = { date: '2026-11-13', by: BY };
14
+ /** Records that cite a page read on the following day. */
15
+ const V14 = { date: '2026-11-14', by: BY };
16
+ /** Pages read for this file. `readOn` is the day the page was actually fetched. */
17
+ const PAGES = {
18
+ ccMemory: { url: 'https://code.claude.com/docs/en/memory', title: 'Claude Code docs: How Claude remembers your project', readOn: '2026-11-13' },
19
+ ccBest: { url: 'https://code.claude.com/docs/en/best-practices', title: 'Claude Code docs: Best practices', readOn: '2026-11-13' },
20
+ ccCache: { url: 'https://code.claude.com/docs/en/prompt-caching', title: 'Claude Code docs: How Claude Code uses prompt caching', readOn: '2026-11-14' },
21
+ ccContext: { url: 'https://code.claude.com/docs/en/context-window', title: 'Claude Code docs: Explore the context window', readOn: '2026-11-14' },
22
+ apiCache: { url: 'https://platform.claude.com/docs/en/build-with-claude/prompt-caching', title: 'Claude API docs: Prompt caching', readOn: '2026-11-13' },
23
+ apiPrompt: {
24
+ url: 'https://platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices',
25
+ title: 'Claude API docs: Prompting best practices',
26
+ readOn: '2026-11-13',
27
+ },
28
+ anthContext: { url: 'https://www.anthropic.com/research/effective-context-engineering-for-ai-agents', title: 'Anthropic engineering: Effective context engineering for AI agents', readOn: '2026-11-14' },
29
+ codex: { url: 'https://learn.chatgpt.com/docs/agent-configuration/agents-md', title: 'Codex docs: AGENTS.md (redirect target of developers.openai.com/codex/guides/agents-md)', readOn: '2026-11-13' },
30
+ agentsMd: { url: 'https://agents.md/', title: 'agents.md: the AGENTS.md format', readOn: '2026-11-13' },
31
+ cursor: { url: 'https://cursor.com/docs/rules', title: 'Cursor docs: Rules', readOn: '2026-11-13' },
32
+ windsurf: { url: 'https://docs.devin.ai/desktop/devin-local/customizations', title: 'Devin Local docs: Customizations (docs.windsurf.com redirects here; Windsurf has no docs of its own to read, so this is another product\'s documentation)', readOn: '2026-11-13' },
33
+ ghRepo: {
34
+ url: 'https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions',
35
+ title: 'GitHub Docs: Adding repository custom instructions for GitHub Copilot',
36
+ readOn: '2026-11-13',
37
+ },
38
+ ghConcept: { url: 'https://docs.github.com/en/copilot/concepts/prompting-and-context/custom-instructions', title: 'GitHub Docs: About customizing GitHub Copilot responses', readOn: '2026-11-14' },
39
+ gemini: { url: 'https://geminicli.com/docs/cli/gemini-md/', title: 'Gemini CLI docs: GEMINI.md context files', readOn: '2026-11-13' },
40
+ };
41
+ const src = (page, stance, note) => ({ ...PAGES[page], stance, note });
42
+ /** A numeric cut-off that is the author's own heuristic: declared, not sourced. */
43
+ const heuristic = (name, value, unit, where) => ({
44
+ name,
45
+ value,
46
+ unit,
47
+ where,
48
+ source: 'unverified',
49
+ });
50
+ export const INSTRUCTION_ADVICE_PROVENANCE = [
51
+ // ───────────────────────────── context-bloat ─────────────────────────────
52
+ {
53
+ id: 'context-bloat/always-loaded-cost',
54
+ detector: 'context-bloat',
55
+ title: 'Instruction file size is a per-turn context cost',
56
+ kind: 'tool-fact',
57
+ claim: 'Instruction files are loaded into the model context at the start of every session or on every request, so each added line costs context on every turn and a long file reduces how well the rules in it are followed.',
58
+ appliesTo: ['claude-code', 'codex', 'cursor', 'copilot', 'gemini-cli', 'windsurf'],
59
+ sources: [
60
+ src('ccMemory', 'supports', 'Says CLAUDE.md is read at the start of every session and advises under 200 lines per file because longer files consume more context and reduce adherence, and that imports do not reduce the cost.'),
61
+ src('ccBest', 'supports', 'Says every CLAUDE.md line takes a little of the attention on every task and that a line gets lost once the file has grown long.'),
62
+ src('cursor', 'supports', 'Says rule contents are included at the start of the model context and advises keeping rules under 500 lines.'),
63
+ src('windsurf', 'context', 'Devin Local docs, not Windsurf docs: Says rules are injected at the start of every session and advises short specific rules because they cost tokens on every message; the page states no character limit.'),
64
+ src('ghConcept', 'supports', 'Says custom instructions are sent with every chat message, so they should be broadly applicable to most requests; the page states no length limit.'),
65
+ src('gemini', 'supports', 'Says the CLI concatenates all found context files and sends them to the model with every prompt; the page states no size limit.'),
66
+ src('codex', 'supports', 'Says Codex stops adding AGENTS.md files once their combined size reaches project_doc_max_bytes, 32 KiB by default.'),
67
+ src('anthContext', 'context', 'Treats context as a finite resource with diminishing marginal returns and a limited attention budget, which is the general mechanism behind the claim.'),
68
+ ],
69
+ thresholds: [
70
+ heuristic('fileWarning', 8000, 'characters per instruction file', 'context-bloat.ts:DEFAULTS.fileWarning'),
71
+ heuristic('fileHigh', 20000, 'characters per instruction file', 'context-bloat.ts:DEFAULTS.fileHigh'),
72
+ heuristic('totalWarning', 30000, 'characters across all instruction files', 'context-bloat.ts:DEFAULTS.totalWarning'),
73
+ heuristic('totalHigh', 60000, 'characters across all instruction files', 'context-bloat.ts:DEFAULTS.totalHigh'),
74
+ heuristic('contextBudget high multiplier', 2, 'times the configured contextBudget', 'detectors.ts:DETECTORS'),
75
+ heuristic('fileContextBudget high multiplier', 2.5, 'times the configured fileContextBudget', 'detectors.ts:DETECTORS'),
76
+ ],
77
+ caveat: 'geminicli.com carries a banner (read 2026-11-14): Gemini CLI was replaced by Antigravity CLI on June 18th, 2026 for unpaid-tier and Google One users, and it has not been optimized for Gemini 4 Argon; a claim about gemini-cli may not hold for the replacement.',
78
+ lastVerified: V14,
79
+ },
80
+ {
81
+ id: 'context-bloat/copilot-line-limit',
82
+ detector: 'context-bloat',
83
+ title: 'Copilot instructions file line limit',
84
+ kind: 'tool-fact',
85
+ claim: 'A Copilot instructions file of more than 1,000 lines may be truncated or degrade response quality.',
86
+ appliesTo: ['copilot'],
87
+ sources: [
88
+ src('ghRepo', 'context', 'The only length statement is in the sample prompt for generating the file, which says instructions must be no longer than 2 pages; the page does not mention 1,000 lines or 1,000 characters.'),
89
+ ],
90
+ unverified: true,
91
+ thresholds: [heuristic('copilotLineWarning', 1000, 'lines per copilot-instructions file', 'context-bloat.ts:DEFAULTS.copilotLineWarning')],
92
+ lastVerified: V13,
93
+ },
94
+ {
95
+ id: 'context-bloat/windsurf-truncation',
96
+ detector: 'context-bloat',
97
+ title: 'Windsurf rules file truncation',
98
+ kind: 'tool-fact',
99
+ claim: 'Windsurf silently truncates a rules file past about 6,000 characters and its combined global and workspace rules budget is about 12,000 characters.',
100
+ appliesTo: ['windsurf'],
101
+ sources: [],
102
+ unverified: true,
103
+ thresholds: [
104
+ heuristic('windsurfFileWarning', 6000, 'characters per .windsurfrules file', 'context-bloat.ts:DEFAULTS.windsurfFileWarning'),
105
+ heuristic('windsurfFileHigh', 12000, 'characters per .windsurfrules file', 'context-bloat.ts:DEFAULTS.windsurfFileHigh'),
106
+ ],
107
+ lastVerified: V13,
108
+ },
109
+ {
110
+ id: 'context-bloat/readme-dominance',
111
+ unverified: true,
112
+ detector: 'context-bloat',
113
+ title: 'README carrying most of the agent context',
114
+ kind: 'opinion',
115
+ claim: 'A README that makes up most of the scanned instruction text is carried into agent context on every turn although it is written for people, so AI-specific guidance is cheaper in a smaller canonical file such as AGENTS.md.',
116
+ appliesTo: 'all',
117
+ sources: [
118
+ src('agentsMd', 'context', 'Describes AGENTS.md as a README for agents and says the extra detail agents need, such as build steps and conventions, would clutter a README written for humans.'),
119
+ src('ccMemory', 'context', 'Lists the files Claude Code loads at start (CLAUDE.md, AGENTS.md, rules, auto memory) and mentions README only as an @README import example, so a README is not shown to be loaded on every turn; this is inferred from the page listing, not stated.'),
120
+ ],
121
+ thresholds: [
122
+ heuristic('README_DOMINANCE_RATIO', 0.5, 'share of scanned instruction tokens', 'context-bloat.ts:README_DOMINANCE_RATIO'),
123
+ heuristic('README_DOMINANCE_MIN_TOKENS', 1000, 'estimated tokens', 'context-bloat.ts:README_DOMINANCE_MIN_TOKENS'),
124
+ heuristic('readmeFileWarning', 15000, 'characters per README', 'context-bloat.ts:DEFAULTS.readmeFileWarning'),
125
+ heuristic('readmeFileHigh', 30000, 'characters per README', 'context-bloat.ts:DEFAULTS.readmeFileHigh'),
126
+ ],
127
+ lastVerified: V13,
128
+ },
129
+ // ───────────────────────── prompt-cache-friendliness ─────────────────────────
130
+ {
131
+ id: 'prompt-cache-friendliness/volatile-content',
132
+ detector: 'prompt-cache-friendliness',
133
+ title: 'Volatile content in always-loaded instructions',
134
+ kind: 'tool-fact',
135
+ claim: 'A date, timestamp, branch name, current-task line or pasted scan report in an always-loaded instruction file changes the prompt prefix whenever it is edited, so the cached prefix is rebuilt and the next request is slower and costlier.',
136
+ appliesTo: ['claude-code'],
137
+ refuted: true,
138
+ sources: [
139
+ src('ccCache', 'contradicts', 'Says that editing CLAUDE.md in the middle of a session does not invalidate the cache, because project-root and user-level CLAUDE.md files are read once at session start and the edit applies only after /clear, /compact or a restart.'),
140
+ src('apiCache', 'context', 'The Claude API (not a Claude Code page) says cache hits need identical prompt segments up to the breakpoint and that a change at one level invalidates that level and all later ones; see prompt-cache-friendliness/volatile-content-api.'),
141
+ ],
142
+ lastVerified: V14,
143
+ },
144
+ {
145
+ id: 'prompt-cache-friendliness/volatile-content-api',
146
+ detector: 'prompt-cache-friendliness',
147
+ title: 'A changed prompt prefix invalidates the Claude API cache',
148
+ kind: 'tool-fact',
149
+ claim: 'On the Claude API a cache hit requires every segment of the prompt up to the cache breakpoint to be identical, and a change at one level invalidates that level and every later one.',
150
+ appliesTo: 'n/a',
151
+ sources: [
152
+ src('apiCache', 'supports', 'Says cache hits require 100 percent identical prompt segments up to the cache breakpoint and that a change at one level invalidates that level and all later levels.'),
153
+ ],
154
+ lastVerified: V14,
155
+ },
156
+ {
157
+ id: 'prompt-cache-friendliness/local-paths',
158
+ refuted: true,
159
+ detector: 'prompt-cache-friendliness',
160
+ title: 'Absolute local machine paths in instructions',
161
+ kind: 'tool-fact',
162
+ claim: 'Absolute local machine paths in an always-loaded instruction file differ between environments and so prevent prompt-cache reuse across them.',
163
+ appliesTo: ['claude-code'],
164
+ sources: [
165
+ src('ccCache', 'contradicts', 'Says that in Claude Code the cache is effectively scoped to one machine and directory because the system prompt embeds the auto memory paths and the conversation opens with the working directory, platform and shell, so sessions on different machines or directories already miss each other cache whatever paths CLAUDE.md contains.'),
166
+ ],
167
+ lastVerified: V14,
168
+ },
169
+ {
170
+ id: 'prompt-cache-friendliness/large-table',
171
+ unverified: true,
172
+ detector: 'prompt-cache-friendliness',
173
+ title: 'Large table in always-loaded instructions',
174
+ kind: 'opinion',
175
+ claim: 'A Markdown table of more than 15 rows in an always-loaded instruction file bloats context and makes the prompt less cache-friendly than the same facts kept in a separate document read on demand.',
176
+ appliesTo: 'all',
177
+ sources: [
178
+ src('apiCache', 'contradicts', 'Says to place static content such as system instructions and context at the beginning of the prompt and cache it, and makes cache hits depend on identical prefix text and not on its size, so a large stable table does not reduce cache hits; it only costs tokens.'),
179
+ src('ccMemory', 'context', 'Advises moving entries that matter for only part of the codebase out of CLAUDE.md into skills or path-scoped rules because longer files consume more context.'),
180
+ ],
181
+ thresholds: [heuristic('maxTableRows', 15, 'table rows', 'prompt-cache.ts:detectPromptCacheFriendliness (maxTableRows > 15)')],
182
+ lastVerified: V13,
183
+ },
184
+ // ───────────────────────────── negative-instructions ─────────────────────────────
185
+ {
186
+ id: 'negative-instructions',
187
+ unverified: true,
188
+ detector: 'negative-instructions',
189
+ title: 'Mostly-prohibition instruction files',
190
+ kind: 'opinion',
191
+ claim: 'Models follow positive directives more reliably than prohibitions, so an instruction file whose directives are mostly prohibitions is harder to follow than the same guidance phrased positively.',
192
+ appliesTo: 'all',
193
+ sources: [
194
+ src('apiPrompt', 'context', 'Advises telling Claude what to do instead of what not to do, but only in an output-formatting example (do not use markdown versus flowing prose), and its own sample prompt for limiting over-engineering is written as prohibitions.'),
195
+ src('ccBest', 'context', 'Its recommended sample CLAUDE.md contains prohibitions (never throw raw strings, do not copy legacy patterns), so the page does not treat a prohibition as a defect.'),
196
+ ],
197
+ thresholds: [
198
+ heuristic('MIN_DIRECTIVES', 8, 'directive sentences', 'negative-instructions.ts:MIN_DIRECTIVES'),
199
+ heuristic('NEGATIVE_RATIO_THRESHOLD', 0.4, 'share of directives that are prohibitions', 'negative-instructions.ts:NEGATIVE_RATIO_THRESHOLD'),
200
+ ],
201
+ lastVerified: V13,
202
+ },
203
+ // ───────────────────────────── buried-critical ─────────────────────────────
204
+ {
205
+ id: 'buried-critical',
206
+ refuted: true,
207
+ detector: 'buried-critical',
208
+ title: 'Critical instructions near the bottom of a long file',
209
+ kind: 'opinion',
210
+ claim: 'Models weight earlier context more heavily than later context, so high-stakes instructions placed in the bottom half of a long instruction file are applied less reliably than the same lines near the top.',
211
+ appliesTo: 'all',
212
+ sources: [
213
+ src('apiPrompt', 'contradicts', 'In long-context guidance (20k-plus-token prompts) it says to put long documents at the top above the query, instructions and examples, and that queries at the end can improve response quality by up to 30 percent, which favours later instructions and not earlier ones.'),
214
+ src('ccMemory', 'context', 'About truncation, not weighting: says that when an on-demand subdirectory CLAUDE.md or rules file is over a per-file size limit Claude receives only the start of it, so later instructions are not in context.'),
215
+ src('ccContext', 'context', 'About truncation, not weighting: says truncation of an over-cap invoked skill keeps the start of the file, so the most important instructions belong near the top of SKILL.md.'),
216
+ src('ccBest', 'context', 'Attributes a CLAUDE.md line that keeps being missed to the file having grown long and says to shorten the file, and says nothing about where in the file a line sits.'),
217
+ ],
218
+ thresholds: [
219
+ heuristic('MIN_LINES', 100, 'lines in the file', 'buried-critical.ts:MIN_LINES'),
220
+ heuristic('BOTTOM_HALF_RATIO_THRESHOLD', 0.6, 'share of high-severity lines in the bottom half', 'buried-critical.ts:BOTTOM_HALF_RATIO_THRESHOLD'),
221
+ ],
222
+ lastVerified: V14,
223
+ },
224
+ // ───────────────────────────── vague-guidance ─────────────────────────────
225
+ {
226
+ id: 'vague-guidance/platitudes',
227
+ unverified: true,
228
+ detector: 'vague-guidance',
229
+ title: 'Non-actionable quality platitudes',
230
+ kind: 'opinion',
231
+ claim: 'Broad exhortations such as write clean code or follow best practices give an agent no constraint to act on, whereas concrete commands and checkable rules are followed more consistently.',
232
+ appliesTo: 'all',
233
+ sources: [
234
+ src('ccMemory', 'context', 'Says the more specific and concise the instructions the more consistently Claude follows them and contrasts Use 2-space indentation with Format code properly.'),
235
+ src('apiPrompt', 'context', 'Says Claude responds well to clear explicit instructions and gives a test of whether a colleague with no context would be confused.'),
236
+ src('anthContext', 'context', 'Names vague high-level guidance that fails to give concrete signals as one of two failure modes for prompt altitude.'),
237
+ src('cursor', 'context', 'Says rules should be focused, actionable and scoped and should avoid vague guidance.'),
238
+ src('windsurf', 'context', 'Devin Local docs, not Windsurf docs: Advises skipping generic rules such as write good code.'),
239
+ ],
240
+ thresholds: [heuristic('MAX_LINE_LENGTH_TO_FLAG', 120, 'characters in the matching line', 'vague-guidance.ts:MAX_LINE_LENGTH_TO_FLAG')],
241
+ lastVerified: V14,
242
+ },
243
+ {
244
+ id: 'vague-guidance/subjective-ui',
245
+ detector: 'vague-guidance',
246
+ title: 'Subjective UI and paradigm wording',
247
+ kind: 'opinion',
248
+ claim: 'Subjective UI and paradigm wording such as looks polished, feels native or idiomatic code names no criterion an agent could check, so it does not change what the agent produces.',
249
+ appliesTo: 'all',
250
+ sources: [],
251
+ unverified: true,
252
+ lastVerified: V13,
253
+ },
254
+ // ───────────────────────────── agent-practices ─────────────────────────────
255
+ {
256
+ id: 'agent-practices/verification-loop',
257
+ unverified: true,
258
+ detector: 'agent-practices',
259
+ title: 'Verification loop before reporting done',
260
+ kind: 'opinion',
261
+ claim: 'An instruction to run lint, typecheck and tests before reporting work done, or a documented command to run, makes an agent more likely to check its own work before it says it is finished.',
262
+ appliesTo: 'all',
263
+ sources: [
264
+ src('ccBest', 'context', 'Says to give Claude a check it can run and that the single most useful CLAUDE.md line is the command that runs it, while noting that a line such as Always typecheck before you finish works most of the time and not every time and that a Stop hook enforces it.'),
265
+ src('ghRepo', 'context', 'The onboarding prompt asks for build, test and lint steps with verified commands and the checks run before check-in.'),
266
+ ],
267
+ lastVerified: V13,
268
+ },
269
+ {
270
+ id: 'agent-practices/grounding',
271
+ unverified: true,
272
+ detector: 'agent-practices',
273
+ title: 'Read before edit and report failures honestly',
274
+ kind: 'opinion',
275
+ claim: 'Telling an agent to read a file before editing it and to report failures instead of claiming success reduces confidently wrong work and false completion reports.',
276
+ appliesTo: 'all',
277
+ sources: [
278
+ src('apiPrompt', 'context', 'Its sample prompts say never to speculate about code that was not opened and to read the file before answering, and to inform the user rather than work around incorrect tests; they are suggested prompts and not measured results.'),
279
+ src('ccBest', 'context', 'Attributes a Claude that said it was done when it was not mainly to having no way to check its own work, and not to a missing instruction to report honestly.'),
280
+ ],
281
+ lastVerified: V13,
282
+ },
283
+ {
284
+ id: 'agent-practices/ask-when-unsure',
285
+ detector: 'agent-practices',
286
+ title: 'Ask when unsure instead of guessing',
287
+ kind: 'opinion',
288
+ claim: 'An agent told to say so and ask when it is unsure produces fewer confidently wrong results than one left to guess.',
289
+ appliesTo: 'all',
290
+ sources: [],
291
+ unverified: true,
292
+ lastVerified: V13,
293
+ },
294
+ {
295
+ id: 'agent-practices/scope-control',
296
+ unverified: true,
297
+ detector: 'agent-practices',
298
+ title: 'Keep diffs focused',
299
+ kind: 'opinion',
300
+ claim: 'Unconstrained agents often refactor or rewrite code they were not asked to touch, and an instruction to prefer small focused diffs prevents it.',
301
+ appliesTo: 'all',
302
+ sources: [
303
+ src('apiPrompt', 'context', 'Its Overeagerness section says Claude Opus 4.5 and 4.6 tend to over-engineer with extra files and abstractions and gives a sample prompt to make only directly requested changes; the section names those two models.'),
304
+ src('ccBest', 'contradicts', 'Says Claude tends to read a request conservatively and build the smallest thing that satisfies it and that lines telling it to keep going are more likely to cause over-work than fix a stall, which runs against the premise that current Claude Code needs guidance to avoid sweeping changes.'),
305
+ ],
306
+ lastVerified: V13,
307
+ },
308
+ {
309
+ id: 'agent-practices/code-preservation',
310
+ detector: 'agent-practices',
311
+ title: 'Preserve existing code and unrelated edits',
312
+ kind: 'opinion',
313
+ claim: 'Without an instruction to preserve existing code, agents delete working code, drop tests or overwrite unrelated edits to reach a passing state.',
314
+ appliesTo: 'all',
315
+ sources: [],
316
+ unverified: true,
317
+ lastVerified: V13,
318
+ },
319
+ {
320
+ id: 'agent-practices/plan-first',
321
+ unverified: true,
322
+ detector: 'agent-practices',
323
+ title: 'Outline the approach before coding',
324
+ kind: 'opinion',
325
+ claim: 'Asking an agent to outline its approach before writing code on a complex or multi-file task significantly reduces wasted implementation effort.',
326
+ appliesTo: 'all',
327
+ sources: [
328
+ src('ccBest', 'context', 'Recommends having Claude interview you and write a SPEC.md before building from it in a fresh session, which is plan-before-implementing guidance, but gives no measurement of how much effort it saves.'),
329
+ ],
330
+ lastVerified: V13,
331
+ },
332
+ {
333
+ id: 'agent-practices/per-tool-file-gap',
334
+ detector: 'agent-practices',
335
+ title: 'Behavioural rules must be in the file each tool reads',
336
+ kind: 'tool-fact',
337
+ claim: 'Each of Claude Code, Cursor, Windsurf, Copilot and Gemini CLI reads only its own tool-specific instruction file, so behavioural rules that live only in AGENTS.md or another tool file are invisible to it.',
338
+ appliesTo: ['claude-code', 'cursor', 'windsurf', 'copilot', 'gemini-cli'],
339
+ sources: [
340
+ src('ccMemory', 'supports', 'Says Claude Code reads AGENTS.md by default only when there is no CLAUDE.md or CLAUDE.local.md in the working directory or above it, so a CLAUDE.md without the rules hides AGENTS.md.'),
341
+ src('gemini', 'context', 'Shows AGENTS.md only as a context.fileName configuration example and does not say it is read by default, so it neither supports nor contradicts the claim.'),
342
+ src('cursor', 'contradicts', 'Says AGENTS.md in the project root or subdirectories is read as an alternative to .cursor/rules, so Cursor does see rules that exist only in AGENTS.md.'),
343
+ src('windsurf', 'context', 'Devin Local docs, not Windsurf docs: Says AGENTS.md, AGENTS.local.md and AGENT.md are read as always-on rules at the workspace root and in directories down to the working directory, so Windsurf sees rules that exist only in AGENTS.md.'),
344
+ src('ghRepo', 'contradicts', 'Says Copilot uses the nearest AGENTS.md in the directory tree and alternatively a root CLAUDE.md or GEMINI.md besides copilot-instructions.md, so Copilot sees rules that exist only in those files.'),
345
+ ],
346
+ caveat: 'geminicli.com carries a banner (read 2026-11-14): Gemini CLI was replaced by Antigravity CLI on June 18th, 2026 for unpaid-tier and Google One users, and it has not been optimized for Gemini 4 Argon; a claim about gemini-cli may not hold for the replacement.',
347
+ lastVerified: V13,
348
+ },
349
+ {
350
+ id: 'agent-practices/forwarding-pointer',
351
+ refuted: true,
352
+ detector: 'agent-practices',
353
+ title: 'Prose forwarding pointer to AGENTS.md',
354
+ kind: 'tool-fact',
355
+ claim: 'A one-line prose pointer such as Follow AGENTS.md at the top of a tool-specific file makes that tool apply the rules in the file it points to.',
356
+ appliesTo: ['claude-code'],
357
+ sources: [
358
+ src('ccMemory', 'contradicts', 'Says a CLAUDE.md that tells Claude in words to read AGENTS.md works only if Claude decides to open the file, and recommends an @AGENTS.md import or a symlink so the content is actually loaded.'),
359
+ ],
360
+ thresholds: [
361
+ heuristic('forwarding pointer head window', 12, 'lines from the top of the file', 'agent-practices.ts:isForwardingFile (slice(0, 12))'),
362
+ heuristic('legacy forwarding file length', 20, 'lines (file shorter than this may point anywhere in the file)', 'agent-practices.ts:isForwardingFile (lineCount < 20)'),
363
+ ],
364
+ lastVerified: V13,
365
+ },
366
+ {
367
+ id: 'agent-practices/do-not-edit-header',
368
+ detector: 'agent-practices',
369
+ title: 'Do not edit header on a human-maintained file',
370
+ kind: 'opinion',
371
+ claim: 'A do not edit or auto-generated header on a hand-written instruction file stops the agents and people who must keep it current from updating it.',
372
+ appliesTo: 'all',
373
+ sources: [],
374
+ unverified: true,
375
+ thresholds: [
376
+ heuristic('header search window', 500, 'characters from the top of the file', 'agent-practices.ts:detectAgentPractices (content.slice(0, 500))'),
377
+ heuristic('auto-generated header misleading above', 5, 'lines in the file', 'agent-practices.ts:detectAgentPractices (lineCount > 5)'),
378
+ ],
379
+ lastVerified: V13,
380
+ },
381
+ {
382
+ id: 'agent-practices/claude-xml-tags',
383
+ unverified: true,
384
+ detector: 'agent-practices',
385
+ title: 'Claude-specific XML tags in other tools files',
386
+ kind: 'tool-fact',
387
+ claim: 'Claude-specific XML tags such as claude:thinking are meaningful only to Claude, so other tools treat them as literal text or ignore them.',
388
+ appliesTo: ['claude-code', 'cursor', 'copilot', 'windsurf', 'gemini-cli', 'codex'],
389
+ sources: [
390
+ src('apiPrompt', 'context', 'Presents XML tags as an author-chosen structuring technique with consistent descriptive names such as instructions, context and input, and mentions no claude: namespaced tag vocabulary; this is inferred from the page text, not stated.'),
391
+ ],
392
+ caveat: 'geminicli.com carries a banner (read 2026-11-14): Gemini CLI was replaced by Antigravity CLI on June 18th, 2026 for unpaid-tier and Google One users, and it has not been optimized for Gemini 4 Argon; a claim about gemini-cli may not hold for the replacement.',
393
+ lastVerified: V13,
394
+ },
395
+ // ───────────────────────────── missing-context ─────────────────────────────
396
+ {
397
+ id: 'missing-context/setup-commands',
398
+ unverified: true,
399
+ detector: 'missing-context',
400
+ title: 'Install, build, test commands and environment variables',
401
+ kind: 'opinion',
402
+ claim: 'Instruction files that omit install, build and test commands, or the environment variables a project needs, leave an agent unable to set up and verify the project reliably.',
403
+ appliesTo: 'all',
404
+ sources: [
405
+ src('ccBest', 'context', 'Lists the exact test, typecheck and lint commands as what CLAUDE.md should hold and its sample file notes that integration tests need DATABASE_URL set, see .env.example.'),
406
+ src('agentsMd', 'context', 'Suggests covering build and test commands in AGENTS.md.'),
407
+ src('ghRepo', 'context', 'The onboarding prompt asks for build, test and lint steps with verified commands and runtime versions.'),
408
+ ],
409
+ thresholds: [
410
+ heuristic('distinct environment variable names before flagging', 3, 'names', 'missing-context.ts:checkEnvVarList (envVarNames.size < 3)'),
411
+ heuristic('minimum environment variable name length', 4, 'characters', 'missing-context.ts:ENV_VAR_NAME_RE'),
412
+ ],
413
+ lastVerified: V13,
414
+ },
415
+ {
416
+ id: 'missing-context/project-type-keywords',
417
+ unverified: true,
418
+ detector: 'missing-context',
419
+ title: 'Stack-specific build and test context',
420
+ kind: 'opinion',
421
+ claim: 'Instruction files for a detected Unity, TypeScript, .NET, Next.js, Python, Go or Rust project that mention none of that stack build, test or tooling terms give agents too little project-specific context.',
422
+ appliesTo: 'all',
423
+ sources: [
424
+ src('ccBest', 'context', 'Says CLAUDE.md should hold the exact test, typecheck and lint commands, but its stop-doing table also says describing architecture and file layout in CLAUDE.md is advice to drop because Claude reads the repo itself, which is in tension with the recommendation to add common project patterns.'),
425
+ src('ccMemory', 'context', 'Says the /doctor checkup cuts directory layouts, dependency lists and architecture overviews that Claude can derive from the codebase and keeps pitfalls, rationale and conventions that differ from tool defaults.'),
426
+ ],
427
+ thresholds: [heuristic('minimumPresent', 1, 'matching keywords per project type', 'missing-context.ts:PROJECT_TYPE_RULES')],
428
+ lastVerified: V13,
429
+ },
430
+ {
431
+ id: 'missing-context/security-and-secrets',
432
+ unverified: true,
433
+ detector: 'missing-context',
434
+ title: 'Security and secret-handling guidance',
435
+ kind: 'opinion',
436
+ claim: 'Instruction files that never mention authentication, secrets or input validation, or that describe credential storage without scopes, validation, expiry or rotation, leave agents without the security rules they need.',
437
+ appliesTo: 'all',
438
+ sources: [src('agentsMd', 'context', 'Lists security considerations among the content AGENTS.md can cover; the page says nothing about token scopes, expiry or rotation.')],
439
+ lastVerified: V13,
440
+ },
441
+ {
442
+ id: 'missing-context/copilot-topic-silence',
443
+ refuted: true,
444
+ detector: 'missing-context',
445
+ title: 'Copilot reads only its own instruction files',
446
+ kind: 'tool-fact',
447
+ claim: 'GitHub Copilot reads only its own instruction files, so a naming convention documented in AGENTS.md or CLAUDE.md is invisible to it.',
448
+ appliesTo: ['copilot'],
449
+ sources: [
450
+ src('ghRepo', 'contradicts', 'Says Copilot uses the nearest AGENTS.md in the directory tree and alternatively a single CLAUDE.md or GEMINI.md in the repository root, and that all relevant instruction sets are provided to it, so a convention in AGENTS.md is visible to Copilot.'),
451
+ ],
452
+ lastVerified: V13,
453
+ },
454
+ // ───────────────────────────── within-section-dedup ─────────────────────────────
455
+ {
456
+ id: 'within-section-dedup',
457
+ detector: 'within-section-dedup',
458
+ title: 'Same point restated within one section',
459
+ kind: 'opinion',
460
+ claim: 'A section that restates the same point in two near-identical paragraphs costs context and can drift out of sync, so merging them helps an agent.',
461
+ appliesTo: 'all',
462
+ sources: [],
463
+ unverified: true,
464
+ thresholds: [
465
+ heuristic('MIN_PARAGRAPHS', 6, 'comparable paragraphs in the section', 'within-section-dedup.ts:MIN_PARAGRAPHS'),
466
+ heuristic('PARAGRAPH_JACCARD_THRESHOLD', 0.65, 'Jaccard similarity of word sets', 'within-section-dedup.ts:PARAGRAPH_JACCARD_THRESHOLD'),
467
+ heuristic('MIN_PARAGRAPH_CHARS', 40, 'normalised characters', 'within-section-dedup.ts:MIN_PARAGRAPH_CHARS'),
468
+ heuristic('MIN_PARAGRAPH_TOKENS', 8, 'distinct words', 'within-section-dedup.ts:MIN_PARAGRAPH_TOKENS'),
469
+ ],
470
+ lastVerified: V13,
471
+ },
472
+ // ───────────────────────────── duplicates ─────────────────────────────
473
+ {
474
+ id: 'duplicates/identical-sections',
475
+ detector: 'duplicates',
476
+ title: 'Sections repeated across instruction files',
477
+ kind: 'repo-fact',
478
+ claim: 'Two or more sections of the scanned instruction files have identical text or heavily overlapping word sets once markdown and whitespace are normalised.',
479
+ appliesTo: 'all',
480
+ sources: [],
481
+ thresholds: [
482
+ heuristic('MIN_SECTION_LENGTH', 150, 'normalised characters (cross-file)', 'duplicates.ts:MIN_SECTION_LENGTH'),
483
+ heuristic('WITHIN_FILE_MIN_SECTION_LENGTH', 80, 'normalised characters (same file)', 'duplicates.ts:WITHIN_FILE_MIN_SECTION_LENGTH'),
484
+ heuristic('MIN_TOKEN_COUNT', 10, 'distinct words', 'duplicates.ts:MIN_TOKEN_COUNT'),
485
+ heuristic('CROSS_FILE_JACCARD_THRESHOLD', 0.8, 'Jaccard similarity (warning)', 'duplicates.ts:CROSS_FILE_JACCARD_THRESHOLD'),
486
+ heuristic('CROSS_FILE_JACCARD_THRESHOLD_INFO', 0.6, 'Jaccard similarity (info)', 'duplicates.ts:CROSS_FILE_JACCARD_THRESHOLD_INFO'),
487
+ heuristic('WITHIN_FILE_JACCARD_THRESHOLD', 0.6, 'Jaccard similarity (same file)', 'duplicates.ts:WITHIN_FILE_JACCARD_THRESHOLD'),
488
+ ],
489
+ lastVerified: V13,
490
+ },
491
+ {
492
+ id: 'duplicates/cost-and-drift',
493
+ unverified: true,
494
+ detector: 'duplicates',
495
+ title: 'Duplicate sections cost context and drift apart',
496
+ kind: 'opinion',
497
+ claim: 'Near-identical sections kept in several instruction files are loaded more than once and can drift apart, so one canonical copy with a pointer is better.',
498
+ appliesTo: 'all',
499
+ sources: [
500
+ src('ccMemory', 'context', 'Says Claude Code skips an AGENTS.md it has already loaded so an imported or symlinked copy is not read twice, that a SessionStart hook printing AGENTS.md adds a second copy to the context, and that contradictory instructions across files may be resolved arbitrarily.'),
501
+ src('ccMemory', 'contradicts', 'Says a CLAUDE.md that tells Claude in words to read AGENTS.md works only if Claude decides to open the file, which undercuts the detector recommendation of a forwarding pointer to save tokens; an @AGENTS.md import or a symlink is the documented way.'),
502
+ src('codex', 'context', 'Says Codex concatenates AGENTS.md files from the root downward into one prompt, with files nearer the working directory appearing later.'),
503
+ src('ghRepo', 'context', 'Advises avoiding conflicting sets of instructions and says all relevant sets are provided to Copilot.'),
504
+ ],
505
+ lastVerified: V13,
506
+ },
507
+ // ───────────────────────────── duplicate-headings ─────────────────────────────
508
+ {
509
+ id: 'duplicate-headings',
510
+ detector: 'duplicate-headings',
511
+ title: 'Same heading twice in one instruction file',
512
+ kind: 'opinion',
513
+ claim: 'The same heading appearing twice at one level in an instruction file, or one heading being a whole-word prefix of another, almost always marks an accidental duplicate that should be merged.',
514
+ appliesTo: 'all',
515
+ sources: [],
516
+ unverified: true,
517
+ thresholds: [
518
+ heuristic('minimum normalised heading length', 3, 'characters', 'duplicates.ts:detectDuplicateHeadings (key.length < 3)'),
519
+ heuristic('minimum prefix heading length', 4, 'characters', 'duplicates.ts:detectDuplicateHeadings (shorter.length < 4)'),
520
+ ],
521
+ lastVerified: V13,
522
+ },
523
+ // ───────────────────────────── canonical-owner ─────────────────────────────
524
+ {
525
+ id: 'canonical-owner/ambiguous-authority',
526
+ unverified: true,
527
+ detector: 'canonical-owner',
528
+ title: 'Several files claim to be the canonical source',
529
+ kind: 'opinion',
530
+ claim: 'When several instruction files each declare themselves the canonical source of truth, agents cannot tell which one takes precedence.',
531
+ appliesTo: 'all',
532
+ sources: [
533
+ src('ccMemory', 'context', 'Says that when two instructions contradict each other Claude may pick one arbitrarily and that conflicting files should be removed or reconciled.'),
534
+ src('agentsMd', 'context', 'Says agents read the nearest AGENTS.md so the closest one takes precedence and explicit chat prompts override everything, which sets precedence by location and not by a canonical declaration inside a file.'),
535
+ src('codex', 'context', 'Says files closer to the current directory override earlier guidance and an AGENTS.override.md replaces AGENTS.md in the same directory, so precedence is positional.'),
536
+ ],
537
+ lastVerified: V13,
538
+ },
539
+ {
540
+ id: 'canonical-owner/duplicated-behavior',
541
+ unverified: true,
542
+ detector: 'canonical-owner',
543
+ title: 'Large duplicated behaviour in a tool-specific file',
544
+ kind: 'opinion',
545
+ claim: 'A section of more than 50 lines in a tool-specific instruction file that matches a section of AGENTS.md duplicates behaviour that a pointer could share, costing tokens every session and inviting drift.',
546
+ appliesTo: 'all',
547
+ sources: [
548
+ src('ccMemory', 'context', 'Documents keeping AGENTS.md as the one shared file and importing it with @AGENTS.md or symlinking so the content is read once, not twice.'),
549
+ src('ccMemory', 'contradicts', 'Says a CLAUDE.md that tells Claude in words to read AGENTS.md works only if Claude decides to open the file, which undercuts the detector recommendation of a forwarding pointer such as Follow AGENTS.md.'),
550
+ ],
551
+ thresholds: [
552
+ heuristic('tool-specific file minimum length', 50, 'lines (file.lineCount > 50)', 'canonical-owner.ts:detectCanonicalOwner'),
553
+ heuristic('duplicated section minimum length', 50, 'lines (endLine - startLine > 50)', 'canonical-owner.ts:detectCanonicalOwner'),
554
+ heuristic('long-section comparison prefix', 500, 'characters (bodies over 500 characters match on their first 500)', 'canonical-owner.ts:detectCanonicalOwner'),
555
+ ],
556
+ lastVerified: V13,
557
+ },
558
+ // ───────────────────────────── custom-rules ─────────────────────────────
559
+ {
560
+ id: 'custom-rules',
561
+ detector: 'custom-rules',
562
+ title: 'User-defined rules run as written',
563
+ kind: 'repo-fact',
564
+ claim: 'A rule in .promptci/custom-rules.json matched, or failed to match, the scanned instruction files exactly as its pattern, heading or targeted file globs state.',
565
+ appliesTo: 'all',
566
+ sources: [],
567
+ lastVerified: V13,
568
+ },
569
+ ];
570
+ //# sourceMappingURL=instruction-advice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instruction-advice.js","sourceRoot":"","sources":["../../src/provenance/instruction-advice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CheckProvenance } from './types.js';
2
+ export declare const REPO_CHECKS_PROVENANCE: readonly CheckProvenance[];
3
+ //# sourceMappingURL=repo-checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repo-checks.d.ts","sourceRoot":"","sources":["../../src/provenance/repo-checks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAkC,MAAM,YAAY,CAAC;AA+alF,eAAO,MAAM,sBAAsB,EAAE,SAAS,eAAe,EA+lB5D,CAAC"}