pi-lens 4.3.0 → 4.4.1

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 (659) hide show
  1. package/CHANGELOG.md +1159 -0
  2. package/README.md +116 -25
  3. package/config/dependency-cruiser-eager-allowlist.json +6 -2
  4. package/dist/chunk-2BEMIWEW.js +51 -0
  5. package/dist/chunk-2EECBNC5.js +89 -0
  6. package/dist/chunk-2FQ62SPM.js +83 -0
  7. package/dist/chunk-2UMYMRI3.js +118 -0
  8. package/dist/chunk-34OCDWOS.js +48 -0
  9. package/dist/chunk-3FERWMCH.js +144 -0
  10. package/dist/chunk-3JL6IFD7.js +97 -0
  11. package/dist/chunk-3JSEWUWI.js +327 -0
  12. package/dist/chunk-3MED75HT.js +37 -0
  13. package/dist/chunk-3MRXIJ6I.js +79 -0
  14. package/dist/chunk-3P4PF2BX.js +2250 -0
  15. package/dist/chunk-3PNFWVHT.js +201 -0
  16. package/dist/chunk-3TTPKMEF.js +162 -0
  17. package/dist/chunk-5JHXUETW.js +326 -0
  18. package/dist/chunk-5W3R6LFT.js +24 -0
  19. package/dist/chunk-64LU2OVH.js +341 -0
  20. package/dist/chunk-6B5I6ICN.js +44 -0
  21. package/dist/chunk-6P54TMWL.js +274 -0
  22. package/dist/chunk-6UYA642J.js +145 -0
  23. package/dist/chunk-6XX5HCLK.js +398 -0
  24. package/dist/chunk-7AXO3ZDF.js +30 -0
  25. package/dist/chunk-7BX5DWSA.js +1907 -0
  26. package/dist/chunk-7ELY2CSM.js +902 -0
  27. package/dist/chunk-7M4T5N3V.js +38 -0
  28. package/dist/chunk-7U2IDNXN.js +37 -0
  29. package/dist/chunk-ABBOA7UD.js +157 -0
  30. package/dist/chunk-AFZYMAIV.js +756 -0
  31. package/dist/chunk-ALQRYH6O.js +112 -0
  32. package/dist/chunk-AXKPQ6ZI.js +1610 -0
  33. package/dist/chunk-BHWHXMQ2.js +62 -0
  34. package/dist/chunk-BJF25SUG.js +22 -0
  35. package/dist/chunk-BNKLYOOO.js +18 -0
  36. package/dist/chunk-BW5KFIQC.js +59 -0
  37. package/dist/chunk-CBD2B5CP.js +599 -0
  38. package/dist/chunk-CFYISHUW.js +42 -0
  39. package/dist/chunk-CMU4RMJB.js +30 -0
  40. package/dist/chunk-CULQYFLU.js +14 -0
  41. package/dist/chunk-D65GOCJB.js +289 -0
  42. package/dist/chunk-D6YF5HKX.js +59 -0
  43. package/dist/chunk-DMS52BEP.js +342 -0
  44. package/dist/chunk-ELVWJYRV.js +211 -0
  45. package/dist/chunk-EUT3B22Y.js +27 -0
  46. package/dist/chunk-F5VLZHUW.js +146 -0
  47. package/dist/chunk-FC4RP4I2.js +12 -0
  48. package/dist/chunk-FGALODG3.js +55 -0
  49. package/dist/chunk-G3RLJYA2.js +2358 -0
  50. package/dist/chunk-GAYGGICG.js +32 -0
  51. package/dist/chunk-H2W2AXD3.js +419 -0
  52. package/dist/chunk-H5EV3VMF.js +114 -0
  53. package/dist/chunk-HREZQCT3.js +106 -0
  54. package/dist/chunk-HSIRMK2D.js +517 -0
  55. package/dist/chunk-IMSQR4WO.js +184 -0
  56. package/dist/chunk-IQZXOZ7S.js +4816 -0
  57. package/dist/chunk-IR6XFA5P.js +37 -0
  58. package/dist/chunk-IUKPRZER.js +78 -0
  59. package/dist/chunk-IUR76K6A.js +262 -0
  60. package/dist/chunk-J3FZR3YY.js +98 -0
  61. package/dist/chunk-J6DFZDFA.js +562 -0
  62. package/dist/chunk-J7WJZ6W7.js +50 -0
  63. package/dist/chunk-JONGANYH.js +202 -0
  64. package/dist/chunk-KJCWXUUS.js +425 -0
  65. package/dist/chunk-KJN4IOEJ.js +17 -0
  66. package/dist/chunk-KMGPUKFD.js +25 -0
  67. package/dist/chunk-LD7WFTRX.js +4533 -0
  68. package/dist/chunk-LJDODBBZ.js +78 -0
  69. package/dist/chunk-LNOMA3MP.js +169 -0
  70. package/dist/chunk-MGIWSROG.js +2334 -0
  71. package/dist/chunk-MQA2YBAH.js +308 -0
  72. package/dist/chunk-MTDRLSI7.js +21720 -0
  73. package/dist/chunk-N2IRDBZI.js +2355 -0
  74. package/dist/chunk-N77WFUL7.js +50 -0
  75. package/dist/chunk-N7YNJE5R.js +466 -0
  76. package/dist/chunk-NABLC7W3.js +148 -0
  77. package/dist/chunk-NFXP47RV.js +999 -0
  78. package/dist/chunk-NJF2X5XF.js +45 -0
  79. package/dist/chunk-NXL4FFQQ.js +47 -0
  80. package/dist/chunk-O7HZX7CA.js +309 -0
  81. package/dist/chunk-OC7LYAU5.js +708 -0
  82. package/dist/chunk-OEX24ECI.js +348 -0
  83. package/dist/chunk-OYOB3ZFG.js +78 -0
  84. package/dist/chunk-OYTMZXRF.js +41 -0
  85. package/dist/chunk-OZJINN4O.js +84 -0
  86. package/dist/chunk-PCHDGUKT.js +23 -0
  87. package/dist/chunk-QOZXJ4NA.js +3364 -0
  88. package/dist/chunk-QYF5S6P6.js +45 -0
  89. package/dist/chunk-RJFED73B.js +79 -0
  90. package/dist/chunk-RTQNRM5X.js +27 -0
  91. package/dist/chunk-S6AMWKPC.js +189 -0
  92. package/dist/chunk-T4QZ6FEH.js +308 -0
  93. package/dist/chunk-T54VJRAD.js +5456 -0
  94. package/dist/chunk-TA5L5KWQ.js +167 -0
  95. package/dist/chunk-TQFBZVCG.js +27 -0
  96. package/dist/chunk-U52SAGRM.js +62 -0
  97. package/dist/chunk-UEAHAMEI.js +5814 -0
  98. package/dist/chunk-UGSMCQ4D.js +327 -0
  99. package/dist/chunk-UOPVJQ4N.js +103 -0
  100. package/dist/chunk-USHG4DLH.js +459 -0
  101. package/dist/chunk-UXVNL3D7.js +23 -0
  102. package/dist/chunk-V5MEBST3.js +4139 -0
  103. package/dist/chunk-VGEVL5EQ.js +29 -0
  104. package/dist/chunk-VPWKF3GN.js +87 -0
  105. package/dist/chunk-VSMJK3ZJ.js +1250 -0
  106. package/dist/chunk-VYKKMYVT.js +560 -0
  107. package/dist/chunk-VZHJS6DR.js +442 -0
  108. package/dist/chunk-WATC3IQR.js +213 -0
  109. package/dist/chunk-WPE5FPGR.js +54 -0
  110. package/dist/chunk-WSEWKCXU.js +188 -0
  111. package/dist/chunk-WW5BLB74.js +659 -0
  112. package/dist/chunk-XGUL4SLQ.js +406 -0
  113. package/dist/chunk-XHSCVSOL.js +170 -0
  114. package/dist/chunk-XIMYZ3JA.js +27 -0
  115. package/dist/chunk-YLN4K6WD.js +385 -0
  116. package/dist/chunk-Z3CCVDUB.js +76 -0
  117. package/dist/chunk-Z54ZSOBZ.js +61 -0
  118. package/dist/chunk-Z6BB4JLQ.js +478 -0
  119. package/dist/chunk-Z7QQA2KT.js +27 -0
  120. package/dist/chunk-ZETYB3XG.js +2626 -0
  121. package/dist/chunk-ZMOMPX2Z.js +87 -0
  122. package/dist/chunk-ZOEYVXSV.js +149 -0
  123. package/dist/chunk-ZZUFZUQZ.js +12120 -0
  124. package/dist/index.js +39712 -29876
  125. package/dist/mcp/analyze-cli.js +186 -232
  126. package/dist/mcp/cli.js +137 -98
  127. package/dist/mcp/server.js +22688 -1573
  128. package/dist/mcp/worker.js +97 -38
  129. package/dist/probes/installer.js +135 -0
  130. package/dist/workers/project-snapshot-persist-worker.js +22 -0
  131. package/dist/workers/review-graph-persist-worker.js +15 -0
  132. package/docs/agent-guide.md +13 -4
  133. package/docs/agent-tools.md +42 -0
  134. package/docs/ast-grep_rules_catalog.md +5 -4
  135. package/docs/configuration.md +28 -2
  136. package/docs/custom-rules.md +25 -2
  137. package/docs/environment-variables.md +86 -8
  138. package/docs/features.md +45 -5
  139. package/docs/globalconfig.md +2 -1
  140. package/docs/io-bridge-v2-migration.md +94 -0
  141. package/docs/lsp-capability-matrix.md +37 -4
  142. package/docs/lsp-idle-eviction.md +124 -0
  143. package/docs/mcp.md +21 -5
  144. package/docs/merge-queue-rollout.md +77 -0
  145. package/docs/pi-lens-fixer.md +160 -88
  146. package/docs/pi-lens-investigator.md +74 -26
  147. package/docs/pi-lens-merge-policy.md +736 -0
  148. package/docs/pi-lens-monitor.md +75 -7
  149. package/docs/pi-lens-retro.md +6 -4
  150. package/docs/pi-lens-reviewer.md +189 -48
  151. package/docs/pi-lens-subagent.md +246 -45
  152. package/docs/pi-lens-warden.md +18 -7
  153. package/docs/public-api-stability.md +55 -0
  154. package/docs/release-qa-baseline.md +84 -17
  155. package/docs/rfcs/3654-unified-io-bridge-v2.md +316 -0
  156. package/docs/schema/pi-lens-config-v1.json +530 -0
  157. package/docs/servercapabilities.md +56 -49
  158. package/docs/settings.md +1 -0
  159. package/docs/usage.md +5 -1
  160. package/docs/word-index.md +6 -0
  161. package/grammars/tree-sitter-bash.wasm +0 -0
  162. package/grammars/tree-sitter-bash.wasm.json +3 -3
  163. package/package.json +19 -7
  164. package/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
  165. package/rules/ast-grep-rules/rule-tests/no-identity-operator-on-literals-test.yml +12 -2
  166. package/rules/ast-grep-rules/rule-tests/throw-new-error-js-test.yml +2 -0
  167. package/rules/ast-grep-rules/rule-tests/throw-new-error-test.yml +2 -0
  168. package/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
  169. package/rules/ast-grep-rules/rules/no-identity-operator-on-literals.yml +20 -12
  170. package/rules/ast-grep-rules/rules/throw-new-error-js.yml +2 -2
  171. package/rules/ast-grep-rules/rules/throw-new-error.yml +2 -2
  172. package/scripts/analyze-pi-lens-logs.mjs +1275 -62
  173. package/scripts/download-grammars.js +5 -0
  174. package/scripts/grammars.lock.json +6 -1
  175. package/scripts/install-selftest.mjs +33 -34
  176. package/scripts/lib/host-provided-deps.mjs +13 -4
  177. package/scripts/lib/web-tree-sitter-dir.mjs +18 -0
  178. package/dist/clients/actionable-warnings-logger.js +0 -35
  179. package/dist/clients/actionable-warnings.js +0 -1610
  180. package/dist/clients/advisory-provenance.js +0 -593
  181. package/dist/clients/agent-behavior-client.js +0 -147
  182. package/dist/clients/agent-nudge.js +0 -325
  183. package/dist/clients/analysed-root.js +0 -1
  184. package/dist/clients/ast-grep-client.js +0 -731
  185. package/dist/clients/ast-grep-rule-manager.js +0 -146
  186. package/dist/clients/ast-grep-tool-logger.js +0 -118
  187. package/dist/clients/ast-grep-types.js +0 -10
  188. package/dist/clients/ast-grep-yaml-synth.js +0 -154
  189. package/dist/clients/atomic-write-staging.js +0 -75
  190. package/dist/clients/atomic-write.js +0 -189
  191. package/dist/clients/availability-probe-flight.js +0 -12
  192. package/dist/clients/bash-file-access.js +0 -1056
  193. package/dist/clients/biome-client.js +0 -357
  194. package/dist/clients/blocker-freshness.js +0 -837
  195. package/dist/clients/blocker-past-eof.js +0 -129
  196. package/dist/clients/bootstrap.js +0 -569
  197. package/dist/clients/bounded-cache.js +0 -190
  198. package/dist/clients/bounded-pid-file-lock.js +0 -202
  199. package/dist/clients/bounded-telemetry.js +0 -295
  200. package/dist/clients/build-identity.js +0 -95
  201. package/dist/clients/bundled-resource-health.js +0 -113
  202. package/dist/clients/bus-events-logger.js +0 -105
  203. package/dist/clients/bus-publish.js +0 -171
  204. package/dist/clients/cache/rule-cache.js +0 -190
  205. package/dist/clients/cache-manager.js +0 -524
  206. package/dist/clients/cache-observability.js +0 -1313
  207. package/dist/clients/call-graph.js +0 -852
  208. package/dist/clients/cargo-manifest.js +0 -422
  209. package/dist/clients/cascade-budget.js +0 -196
  210. package/dist/clients/cascade-format.js +0 -315
  211. package/dist/clients/cascade-logger.js +0 -31
  212. package/dist/clients/cascade-types.js +0 -9
  213. package/dist/clients/child-unref.js +0 -124
  214. package/dist/clients/code-quality-warnings.js +0 -286
  215. package/dist/clients/codebase-model.js +0 -173
  216. package/dist/clients/collateral-test-role.js +0 -40
  217. package/dist/clients/complexity-client.js +0 -462
  218. package/dist/clients/config-core/deny.js +0 -221
  219. package/dist/clients/config-core/index.js +0 -50
  220. package/dist/clients/config-core/merge.js +0 -357
  221. package/dist/clients/config-core/normalize.js +0 -340
  222. package/dist/clients/config-core/process-spec.js +0 -248
  223. package/dist/clients/config-core/provenance.js +0 -164
  224. package/dist/clients/config-core/records.js +0 -218
  225. package/dist/clients/config-core/resolve.js +0 -125
  226. package/dist/clients/config-core/safe-object.js +0 -78
  227. package/dist/clients/config-core/schema.js +0 -165
  228. package/dist/clients/config-diagnostic-codes.js +0 -285
  229. package/dist/clients/config-locations.js +0 -388
  230. package/dist/clients/config-resolve.js +0 -798
  231. package/dist/clients/config-schema.js +0 -251
  232. package/dist/clients/config-warn.js +0 -407
  233. package/dist/clients/console-guard-install.js +0 -26
  234. package/dist/clients/cooperative-budget.js +0 -42
  235. package/dist/clients/dead-code-client.js +0 -510
  236. package/dist/clients/dead-code-logger.js +0 -30
  237. package/dist/clients/deadline-utils.js +0 -280
  238. package/dist/clients/debug-handles.js +0 -211
  239. package/dist/clients/debug-heap.js +0 -174
  240. package/dist/clients/deferred-lsp-work.js +0 -106
  241. package/dist/clients/degradation-ledger.js +0 -426
  242. package/dist/clients/demoted-finding-render.js +0 -169
  243. package/dist/clients/dependency-checker.js +0 -885
  244. package/dist/clients/deps/ast-grep-napi.js +0 -22
  245. package/dist/clients/deps/js-yaml.js +0 -9
  246. package/dist/clients/deps/minimatch.js +0 -4
  247. package/dist/clients/deps/pi-tui.js +0 -14
  248. package/dist/clients/deps/typebox.js +0 -14
  249. package/dist/clients/deps/vscode-jsonrpc.js +0 -1
  250. package/dist/clients/deps/web-tree-sitter.js +0 -24
  251. package/dist/clients/diagnostic-dispositions.js +0 -630
  252. package/dist/clients/diagnostic-line-freshness.js +0 -305
  253. package/dist/clients/diagnostic-logger.js +0 -73
  254. package/dist/clients/diagnostic-tracker.js +0 -105
  255. package/dist/clients/diagnostics-publish.js +0 -230
  256. package/dist/clients/dispatch/ast-grep-catalog.js +0 -65
  257. package/dist/clients/dispatch/auxiliary-lsp.js +0 -343
  258. package/dist/clients/dispatch/collect-later-tier.js +0 -35
  259. package/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
  260. package/dist/clients/dispatch/dispatcher.js +0 -1269
  261. package/dist/clients/dispatch/fact-provider-types.js +0 -1
  262. package/dist/clients/dispatch/fact-rule-runner.js +0 -17
  263. package/dist/clients/dispatch/fact-runner.js +0 -30
  264. package/dist/clients/dispatch/fact-scheduler.js +0 -68
  265. package/dist/clients/dispatch/fact-store.js +0 -377
  266. package/dist/clients/dispatch/facts/comment-facts.js +0 -22
  267. package/dist/clients/dispatch/facts/file-content.js +0 -19
  268. package/dist/clients/dispatch/facts/function-facts.js +0 -348
  269. package/dist/clients/dispatch/facts/import-facts.js +0 -204
  270. package/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
  271. package/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
  272. package/dist/clients/dispatch/finding-policy.js +0 -339
  273. package/dist/clients/dispatch/indent-detect.js +0 -417
  274. package/dist/clients/dispatch/inline-suppressions.js +0 -89
  275. package/dist/clients/dispatch/integration.js +0 -2377
  276. package/dist/clients/dispatch/lazy.js +0 -11
  277. package/dist/clients/dispatch/pending-runner-findings.js +0 -87
  278. package/dist/clients/dispatch/plan.js +0 -278
  279. package/dist/clients/dispatch/priorities.js +0 -20
  280. package/dist/clients/dispatch/rule-id-normalize.js +0 -50
  281. package/dist/clients/dispatch/rule-ignores.js +0 -69
  282. package/dist/clients/dispatch/rule-policy.js +0 -135
  283. package/dist/clients/dispatch/rules/async-noise.js +0 -40
  284. package/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
  285. package/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
  286. package/dist/clients/dispatch/rules/error-obscuring.js +0 -32
  287. package/dist/clients/dispatch/rules/error-swallowing.js +0 -31
  288. package/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
  289. package/dist/clients/dispatch/rules/high-complexity.js +0 -72
  290. package/dist/clients/dispatch/rules/high-fan-out.js +0 -74
  291. package/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
  292. package/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
  293. package/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
  294. package/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
  295. package/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
  296. package/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
  297. package/dist/clients/dispatch/runner-context.js +0 -52
  298. package/dist/clients/dispatch/runners/actionlint.js +0 -111
  299. package/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
  300. package/dist/clients/dispatch/runners/biome-check.js +0 -296
  301. package/dist/clients/dispatch/runners/cpp-check.js +0 -219
  302. package/dist/clients/dispatch/runners/credo.js +0 -82
  303. package/dist/clients/dispatch/runners/cue-vet.js +0 -416
  304. package/dist/clients/dispatch/runners/dart-analyze.js +0 -183
  305. package/dist/clients/dispatch/runners/detekt.js +0 -176
  306. package/dist/clients/dispatch/runners/dotnet-build.js +0 -164
  307. package/dist/clients/dispatch/runners/elixir-check.js +0 -195
  308. package/dist/clients/dispatch/runners/eslint.js +0 -137
  309. package/dist/clients/dispatch/runners/fact-rules.js +0 -29
  310. package/dist/clients/dispatch/runners/fish-indent.js +0 -69
  311. package/dist/clients/dispatch/runners/gleam-check.js +0 -167
  312. package/dist/clients/dispatch/runners/go-vet.js +0 -104
  313. package/dist/clients/dispatch/runners/golangci-lint.js +0 -135
  314. package/dist/clients/dispatch/runners/hadolint.js +0 -91
  315. package/dist/clients/dispatch/runners/helm-lint.js +0 -171
  316. package/dist/clients/dispatch/runners/helm-render.js +0 -940
  317. package/dist/clients/dispatch/runners/htmlhint.js +0 -117
  318. package/dist/clients/dispatch/runners/index.js +0 -108
  319. package/dist/clients/dispatch/runners/javac.js +0 -99
  320. package/dist/clients/dispatch/runners/ktlint.js +0 -110
  321. package/dist/clients/dispatch/runners/lsp.js +0 -379
  322. package/dist/clients/dispatch/runners/markdownlint.js +0 -167
  323. package/dist/clients/dispatch/runners/mypy.js +0 -102
  324. package/dist/clients/dispatch/runners/oxlint.js +0 -414
  325. package/dist/clients/dispatch/runners/php-lint.js +0 -85
  326. package/dist/clients/dispatch/runners/phpstan.js +0 -120
  327. package/dist/clients/dispatch/runners/prisma-validate.js +0 -62
  328. package/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
  329. package/dist/clients/dispatch/runners/pyright.js +0 -169
  330. package/dist/clients/dispatch/runners/rubocop.js +0 -99
  331. package/dist/clients/dispatch/runners/ruff.js +0 -88
  332. package/dist/clients/dispatch/runners/rust-clippy.js +0 -256
  333. package/dist/clients/dispatch/runners/shellcheck.js +0 -173
  334. package/dist/clients/dispatch/runners/shfmt.js +0 -102
  335. package/dist/clients/dispatch/runners/spellcheck.js +0 -128
  336. package/dist/clients/dispatch/runners/spotbugs.js +0 -259
  337. package/dist/clients/dispatch/runners/sqlfluff.js +0 -183
  338. package/dist/clients/dispatch/runners/stylelint.js +0 -166
  339. package/dist/clients/dispatch/runners/swiftlint.js +0 -163
  340. package/dist/clients/dispatch/runners/taplo.js +0 -174
  341. package/dist/clients/dispatch/runners/terragrunt.js +0 -168
  342. package/dist/clients/dispatch/runners/tflint.js +0 -125
  343. package/dist/clients/dispatch/runners/tree-sitter.js +0 -643
  344. package/dist/clients/dispatch/runners/trivy-config.js +0 -253
  345. package/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
  346. package/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
  347. package/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
  348. package/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
  349. package/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
  350. package/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
  351. package/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
  352. package/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
  353. package/dist/clients/dispatch/runners/utils.js +0 -15
  354. package/dist/clients/dispatch/runners/vale.js +0 -128
  355. package/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
  356. package/dist/clients/dispatch/runners/yamllint.js +0 -95
  357. package/dist/clients/dispatch/runners/zig-check.js +0 -79
  358. package/dist/clients/dispatch/suppress-writer.js +0 -79
  359. package/dist/clients/dispatch/tool-profile.js +0 -30
  360. package/dist/clients/dispatch/types.js +0 -21
  361. package/dist/clients/dispatch/utils/format-utils.js +0 -45
  362. package/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
  363. package/dist/clients/disposition-logger.js +0 -32
  364. package/dist/clients/disposition-publish.js +0 -124
  365. package/dist/clients/durable-store.js +0 -97
  366. package/dist/clients/effective-config.js +0 -415
  367. package/dist/clients/env-utils.js +0 -83
  368. package/dist/clients/error-class.js +0 -23
  369. package/dist/clients/eval-timestamp.js +0 -17
  370. package/dist/clients/event-loop-hold.js +0 -274
  371. package/dist/clients/event-loop-monitor.js +0 -250
  372. package/dist/clients/extension-log.js +0 -504
  373. package/dist/clients/extension-mode.js +0 -73
  374. package/dist/clients/feature-hints.js +0 -103
  375. package/dist/clients/file-kinds.js +0 -412
  376. package/dist/clients/file-role.js +0 -134
  377. package/dist/clients/file-time.js +0 -160
  378. package/dist/clients/file-utils.js +0 -1032
  379. package/dist/clients/finding-delivery-gate.js +0 -494
  380. package/dist/clients/finding-identity.js +0 -88
  381. package/dist/clients/fix-worklog.js +0 -103
  382. package/dist/clients/format-events-publish.js +0 -343
  383. package/dist/clients/format-service.js +0 -222
  384. package/dist/clients/formatters-lazy.js +0 -9
  385. package/dist/clients/formatters.js +0 -2032
  386. package/dist/clients/freshness-cadence.js +0 -17
  387. package/dist/clients/freshness.js +0 -38
  388. package/dist/clients/generated-artifacts.js +0 -394
  389. package/dist/clients/generation-guard.js +0 -215
  390. package/dist/clients/git-guard.js +0 -1136
  391. package/dist/clients/git-tracked-ignore.js +0 -243
  392. package/dist/clients/gitleaks-client.js +0 -509
  393. package/dist/clients/go-client.js +0 -104
  394. package/dist/clients/govulncheck-client.js +0 -605
  395. package/dist/clients/gradle-ktfmt-style.js +0 -348
  396. package/dist/clients/grammar-source.js +0 -465
  397. package/dist/clients/gzip-stage-write.js +0 -135
  398. package/dist/clients/hashline-anchor.js +0 -424
  399. package/dist/clients/hook-budgets.js +0 -76
  400. package/dist/clients/host-edit-normalize.js +0 -140
  401. package/dist/clients/host-ports.js +0 -39
  402. package/dist/clients/indent-retarget.js +0 -154
  403. package/dist/clients/inline-blocker-dispositions.js +0 -186
  404. package/dist/clients/install-diagnostics.js +0 -156
  405. package/dist/clients/installer/index.js +0 -5416
  406. package/dist/clients/installer/managed-tool-refresh-session.js +0 -58
  407. package/dist/clients/installer/managed-tool-refresh.js +0 -783
  408. package/dist/clients/instance-reaper-state.js +0 -7
  409. package/dist/clients/instance-reaper.js +0 -1137
  410. package/dist/clients/instance-registry-lock.js +0 -145
  411. package/dist/clients/instance-registry.js +0 -773
  412. package/dist/clients/jscpd-client.js +0 -378
  413. package/dist/clients/json-cache-read.js +0 -65
  414. package/dist/clients/knip-client.js +0 -788
  415. package/dist/clients/language-policy.js +0 -252
  416. package/dist/clients/language-profile.js +0 -361
  417. package/dist/clients/language-registry.js +0 -603
  418. package/dist/clients/latency-logger.js +0 -727
  419. package/dist/clients/lazy-import.js +0 -21
  420. package/dist/clients/ledger-bounds.js +0 -54
  421. package/dist/clients/lens-config.js +0 -404
  422. package/dist/clients/lens-engine.js +0 -358
  423. package/dist/clients/lens-events.js +0 -125
  424. package/dist/clients/lens-flag-registry.js +0 -467
  425. package/dist/clients/lens-map.js +0 -1156
  426. package/dist/clients/live-bus-emitter.js +0 -74
  427. package/dist/clients/log-cleanup.js +0 -222
  428. package/dist/clients/lsp/aggregation.js +0 -178
  429. package/dist/clients/lsp/cascade-tier.js +0 -421
  430. package/dist/clients/lsp/client.js +0 -4593
  431. package/dist/clients/lsp/config.js +0 -691
  432. package/dist/clients/lsp/content-limits.js +0 -41
  433. package/dist/clients/lsp/diagnostic-binding.js +0 -225
  434. package/dist/clients/lsp/document-drift.js +0 -467
  435. package/dist/clients/lsp/edits.js +0 -1219
  436. package/dist/clients/lsp/index.js +0 -8305
  437. package/dist/clients/lsp/inferred-project.js +0 -216
  438. package/dist/clients/lsp/jvm-runtime.js +0 -298
  439. package/dist/clients/lsp/language.js +0 -63
  440. package/dist/clients/lsp/launch.js +0 -746
  441. package/dist/clients/lsp/lombok.js +0 -158
  442. package/dist/clients/lsp/path-utils.js +0 -5
  443. package/dist/clients/lsp/pending-aux-coverage.js +0 -251
  444. package/dist/clients/lsp/position-encoding.js +0 -61
  445. package/dist/clients/lsp/ruby-drive-dirs.js +0 -83
  446. package/dist/clients/lsp/server.js +0 -3290
  447. package/dist/clients/lsp/session-roots.js +0 -192
  448. package/dist/clients/lsp/spawn-history.js +0 -17
  449. package/dist/clients/lsp/sync-kind.js +0 -56
  450. package/dist/clients/lsp/tsserver-sync.js +0 -332
  451. package/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
  452. package/dist/clients/lsp/wait-policy/classification.js +0 -85
  453. package/dist/clients/lsp/wait-policy/index.js +0 -10
  454. package/dist/clients/lsp/wait-policy/strategies.js +0 -392
  455. package/dist/clients/lsp/watch-queue.js +0 -61
  456. package/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
  457. package/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
  458. package/dist/clients/lsp/workspace-sweep-hold.js +0 -184
  459. package/dist/clients/lsp-budget.js +0 -186
  460. package/dist/clients/lsp-document-symbols.js +0 -110
  461. package/dist/clients/lsp-lazy.js +0 -9
  462. package/dist/clients/lsp-mutation.js +0 -396
  463. package/dist/clients/lsp-status.js +0 -59
  464. package/dist/clients/map-with-concurrency.js +0 -40
  465. package/dist/clients/mcp/analyze.js +0 -420
  466. package/dist/clients/mcp/host-shim.js +0 -31
  467. package/dist/clients/mcp/ipc.js +0 -523
  468. package/dist/clients/mcp/review.js +0 -197
  469. package/dist/clients/mcp/session.js +0 -412
  470. package/dist/clients/memory-sampler.js +0 -208
  471. package/dist/clients/message-end-attribution.js +0 -30
  472. package/dist/clients/metrics-client.js +0 -107
  473. package/dist/clients/metrics-history.js +0 -327
  474. package/dist/clients/middle-man-analysis.js +0 -263
  475. package/dist/clients/model-provider.js +0 -53
  476. package/dist/clients/module-report-lsp.js +0 -189
  477. package/dist/clients/module-report.js +0 -2150
  478. package/dist/clients/mutating-tool.js +0 -651
  479. package/dist/clients/mutation-attribution.js +0 -368
  480. package/dist/clients/mutation-bridge.js +0 -240
  481. package/dist/clients/ndjson-logger.js +0 -734
  482. package/dist/clients/observed-mutation-sources.js +0 -101
  483. package/dist/clients/observed-mutation.js +0 -1253
  484. package/dist/clients/oldtext-autopatch.js +0 -128
  485. package/dist/clients/opaque-mutation-scan.js +0 -496
  486. package/dist/clients/opengrep-client.js +0 -333
  487. package/dist/clients/opengrep-config.js +0 -76
  488. package/dist/clients/package-manager.js +0 -607
  489. package/dist/clients/package-root.js +0 -38
  490. package/dist/clients/partial-edit-apply.js +0 -439
  491. package/dist/clients/path-attribution-telemetry.js +0 -43
  492. package/dist/clients/path-keyed-map.js +0 -108
  493. package/dist/clients/path-utils.js +0 -1244
  494. package/dist/clients/performance-report.js +0 -331
  495. package/dist/clients/persist-debounce.js +0 -70
  496. package/dist/clients/persistent-reverify.js +0 -271
  497. package/dist/clients/php-cs-fixer-config.js +0 -119
  498. package/dist/clients/pipeline.js +0 -1480
  499. package/dist/clients/post-autofix-notice.js +0 -37
  500. package/dist/clients/print-mode.js +0 -21
  501. package/dist/clients/probe-home-state.js +0 -228
  502. package/dist/clients/process-bridge.js +0 -66
  503. package/dist/clients/process-singletons.js +0 -210
  504. package/dist/clients/process-snapshot.js +0 -68
  505. package/dist/clients/project-changes.js +0 -181
  506. package/dist/clients/project-conventions.js +0 -171
  507. package/dist/clients/project-diagnostics/cache.js +0 -137
  508. package/dist/clients/project-diagnostics/extractors.js +0 -109
  509. package/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
  510. package/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
  511. package/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
  512. package/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
  513. package/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
  514. package/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
  515. package/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
  516. package/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
  517. package/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
  518. package/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
  519. package/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
  520. package/dist/clients/project-diagnostics/scanner.js +0 -520
  521. package/dist/clients/project-diagnostics/types.js +0 -1
  522. package/dist/clients/project-lens-config.js +0 -807
  523. package/dist/clients/project-report.js +0 -701
  524. package/dist/clients/project-scale.js +0 -237
  525. package/dist/clients/project-scan-policy.js +0 -11
  526. package/dist/clients/project-snapshot-fingerprint.js +0 -48
  527. package/dist/clients/project-snapshot-persist-worker.js +0 -20
  528. package/dist/clients/project-snapshot.js +0 -1653
  529. package/dist/clients/project-trust.js +0 -181
  530. package/dist/clients/python-environment.js +0 -217
  531. package/dist/clients/python-provenance.js +0 -639
  532. package/dist/clients/quiet-window-config.js +0 -47
  533. package/dist/clients/quiet-window.js +0 -236
  534. package/dist/clients/read-bridge.js +0 -139
  535. package/dist/clients/read-expansion.js +0 -266
  536. package/dist/clients/read-guard-logger.js +0 -251
  537. package/dist/clients/read-guard-tool-lines.js +0 -1306
  538. package/dist/clients/read-guard.js +0 -1561
  539. package/dist/clients/recent-touches.js +0 -240
  540. package/dist/clients/redact/secrets.js +0 -449
  541. package/dist/clients/resource-sampler.js +0 -628
  542. package/dist/clients/reverse-deps.js +0 -270
  543. package/dist/clients/review-graph/builder.js +0 -5126
  544. package/dist/clients/review-graph/format.js +0 -33
  545. package/dist/clients/review-graph/git-identity.js +0 -163
  546. package/dist/clients/review-graph/import-resolvers.js +0 -481
  547. package/dist/clients/review-graph/persist-worker.js +0 -10
  548. package/dist/clients/review-graph/query.js +0 -244
  549. package/dist/clients/review-graph/revision-drift.js +0 -21
  550. package/dist/clients/review-graph/service.js +0 -96
  551. package/dist/clients/review-graph/shared-extraction-ir.js +0 -82
  552. package/dist/clients/review-graph/symbol-id.js +0 -103
  553. package/dist/clients/review-graph/tsconfig-paths.js +0 -299
  554. package/dist/clients/review-graph/types.js +0 -1
  555. package/dist/clients/review-graph/workspace-modules.js +0 -449
  556. package/dist/clients/review-graph-logger.js +0 -81
  557. package/dist/clients/ruff-client.js +0 -179
  558. package/dist/clients/rules-scanner.js +0 -131
  559. package/dist/clients/run-duration.js +0 -55
  560. package/dist/clients/runtime-agent-end.js +0 -746
  561. package/dist/clients/runtime-config.js +0 -77
  562. package/dist/clients/runtime-context.js +0 -211
  563. package/dist/clients/runtime-coordinator.js +0 -1324
  564. package/dist/clients/runtime-session.js +0 -2485
  565. package/dist/clients/runtime-tool-call.js +0 -1295
  566. package/dist/clients/runtime-tool-result.js +0 -2049
  567. package/dist/clients/runtime-turn.js +0 -3767
  568. package/dist/clients/rust-client.js +0 -97
  569. package/dist/clients/safe-spawn.js +0 -2357
  570. package/dist/clients/sanitize.js +0 -286
  571. package/dist/clients/scan-utils.js +0 -25
  572. package/dist/clients/scratch-tree-policy.js +0 -165
  573. package/dist/clients/search-read-registration.js +0 -94
  574. package/dist/clients/secret-findings.js +0 -114
  575. package/dist/clients/security-scan-client.js +0 -352
  576. package/dist/clients/session-event-guard.js +0 -297
  577. package/dist/clients/session-lifecycle.js +0 -484
  578. package/dist/clients/session-start-observability.js +0 -94
  579. package/dist/clients/session-state-store.js +0 -101
  580. package/dist/clients/session-summary.js +0 -15
  581. package/dist/clients/sessionstart-logger.js +0 -27
  582. package/dist/clients/sg-runner.js +0 -876
  583. package/dist/clients/sgconfig.js +0 -347
  584. package/dist/clients/shared-checkout-guard.js +0 -338
  585. package/dist/clients/single-flight.js +0 -158
  586. package/dist/clients/situational-tool-telemetry.js +0 -108
  587. package/dist/clients/skills-resolver.js +0 -141
  588. package/dist/clients/slow-fs.js +0 -138
  589. package/dist/clients/smells-rollup.js +0 -231
  590. package/dist/clients/source-filter.js +0 -596
  591. package/dist/clients/source-walker.js +0 -211
  592. package/dist/clients/spawn-output-cap.js +0 -120
  593. package/dist/clients/spawn-timeout-cooldown.js +0 -110
  594. package/dist/clients/stale-marker.js +0 -17
  595. package/dist/clients/startup-scan.js +0 -400
  596. package/dist/clients/startup-timing.js +0 -130
  597. package/dist/clients/string-utils.js +0 -33
  598. package/dist/clients/subagent-mode.js +0 -111
  599. package/dist/clients/symbol-containment.js +0 -24
  600. package/dist/clients/symbol-types.js +0 -5
  601. package/dist/clients/test-runner-client.js +0 -2507
  602. package/dist/clients/test-runner-delivery.js +0 -287
  603. package/dist/clients/todo-scanner.js +0 -229
  604. package/dist/clients/tool-agreement.js +0 -423
  605. package/dist/clients/tool-config.js +0 -249
  606. package/dist/clients/tool-cwd.js +0 -270
  607. package/dist/clients/tool-definition.js +0 -47
  608. package/dist/clients/tool-event.js +0 -105
  609. package/dist/clients/tool-policy.js +0 -2755
  610. package/dist/clients/tool-probe.js +0 -53
  611. package/dist/clients/tool-render.js +0 -156
  612. package/dist/clients/tool-set-policy.js +0 -118
  613. package/dist/clients/tree-sitter-cache.js +0 -364
  614. package/dist/clients/tree-sitter-client.js +0 -4195
  615. package/dist/clients/tree-sitter-logger.js +0 -100
  616. package/dist/clients/tree-sitter-navigator.js +0 -269
  617. package/dist/clients/tree-sitter-query-loader.js +0 -569
  618. package/dist/clients/tree-sitter-shared.js +0 -158
  619. package/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
  620. package/dist/clients/trivy-client.js +0 -467
  621. package/dist/clients/tui-fit.js +0 -50
  622. package/dist/clients/turn-context.js +0 -52
  623. package/dist/clients/turn-end/lane.js +0 -51
  624. package/dist/clients/turn-end/lanes/govulncheck.js +0 -112
  625. package/dist/clients/turn-end/lanes/secrets.js +0 -204
  626. package/dist/clients/turn-summary-render.js +0 -72
  627. package/dist/clients/turn-summary.js +0 -132
  628. package/dist/clients/typos-config.js +0 -29
  629. package/dist/clients/user-notify.js +0 -51
  630. package/dist/clients/vanished-instance-marker.js +0 -57
  631. package/dist/clients/warm-attach.js +0 -305
  632. package/dist/clients/widget-state.js +0 -1808
  633. package/dist/clients/word-index-logger.js +0 -49
  634. package/dist/clients/word-index-store.js +0 -459
  635. package/dist/clients/word-index.js +0 -2080
  636. package/dist/clients/workspace-topology.js +0 -443
  637. package/dist/clients/write-ordering-guard.js +0 -65
  638. package/dist/clients/zizmor-config.js +0 -340
  639. package/dist/i18n.js +0 -69
  640. package/dist/mcp/build-staleness.js +0 -124
  641. package/dist/scripts/lib/process-scan.mjs +0 -583
  642. package/dist/scripts/lib/skills-predicate.mjs +0 -129
  643. package/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
  644. package/dist/tools/activate-tools.js +0 -87
  645. package/dist/tools/ast-grep-outline.js +0 -137
  646. package/dist/tools/ast-grep-replace.js +0 -244
  647. package/dist/tools/ast-grep-search.js +0 -762
  648. package/dist/tools/effective-config.js +0 -90
  649. package/dist/tools/lens-diagnostic-mark.js +0 -375
  650. package/dist/tools/lens-diagnostics.js +0 -2571
  651. package/dist/tools/lsp-diagnostics.js +0 -1745
  652. package/dist/tools/lsp-navigation.js +0 -1367
  653. package/dist/tools/lsp-structured-output.js +0 -294
  654. package/dist/tools/module-report.js +0 -382
  655. package/dist/tools/project-report.js +0 -86
  656. package/dist/tools/render-compact.js +0 -374
  657. package/dist/tools/scan-progress.js +0 -53
  658. package/dist/tools/shared.js +0 -29
  659. package/dist/tools/symbol-search.js +0 -155
@@ -1,109 +1,181 @@
1
1
  # Fixer contract
2
2
 
3
- ## Mission
4
-
5
- - Read the issue, `AGENTS.md`, `docs/pi-lens-subagent.md`, and this contract.
6
- - Trace the production entry point before naming a seam.
7
- - Reproduce the defect on the current tree.
8
- - Implement the smallest root-caused fix.
9
- - Preserve contributor authorship and leave Git authority to the orchestrator
10
- unless the delegation grants it explicitly.
11
-
12
- ## Standing procedure
13
-
14
- ### Standard mechanics
15
-
16
- - Commit the code as soon as the targeted suite is green, then add evidence in
17
- a later commit. A worker can be settled mid-evidence-pass; on PR #3268 the
18
- orchestrator had to commit the tree.
19
- - A whole-module `vi.mock` of a production module must spread `importOriginal`.
20
- Run `tests/config/vi-mock-export-sweep.test.ts`.
21
- - Exact-pin sweeps and merge state: `tests/config/glossary-synonym-sweep.test.ts`
22
- (#3279) pins the live retired-synonym identifier population per (term, file)
23
- exactly, in both directions. If a change adds or removes one of the pinned
24
- identifier uses, run the sweep on the head and on the merge of
25
- `origin/master` + head before pushing, then re-pin in the same PR using the
26
- sweep's own `UNPINNED`/`STALE` output. On 2026-09-23, two green PRs merged
27
- red (#3279's pins predated #3283, leaving master red until #3288), and #3284
28
- was red on its own `path` count changes (cue-vet 5→6, dart-analyze 6→4)
29
- until an orchestrator trailing commit re-pinned.
30
-
31
- ### Failure list before code
32
-
33
- Before the first edit of any fix, write the list of ways the change could fail
34
- (the directions the mutation table will later prove) in the PR body. The
35
- mutation table is that list with transcripts, never a list invented after the
36
- code. This week's evidence: #3252 r1 shipped an exit table whose inverse
37
- direction (nonzero WITH findings) was never listed and was caught by the
38
- reviewer.
39
-
40
- Seams are named in the brief before the round; no test is written at an
41
- unconfirmed seam — a fixer that needs a new seam stops and reports it as a
42
- finding, not as a test.
43
-
44
- A fix round does not deepen: no refactor, no helper extraction, no rename
45
- beyond the fix's own lines; deepening is its own slice under the owning
46
- umbrella. #3254 and #3256 stayed inside their briefs; #3178's four rounds show
47
- the cost of not doing so.
3
+ Read first: the engineering principles (`docs/engineering-principles.md`), then
4
+ `AGENTS.md`, then `docs/pi-lens-subagent.md`, then this contract. Then read the
5
+ issue with its comments (`gh issue view <N> --comments`): its acceptance
6
+ criteria are the contract. Rules the principles or `AGENTS.md` already state
7
+ are not repeated here. Lane mechanics (checkout, `TMPDIR`, push forms, Git
8
+ grants, summary shape) are `docs/pi-lens-subagent.md` "Orchestrator lane
9
+ mechanics"; a brief supplies only `lane=<name>`, scope, and the grant.
10
+
11
+ ## Before code
12
+
13
+ - Trace the production entry point and reproduce the defect through it
14
+ (principles §1, "Premise first"). Name no seam before the reproduction; the
15
+ red reproduction is your feedback loop, built before any theory of the fix.
16
+ - Climb the minimalism ladder before screening against the `AGENTS.md`
17
+ catalog: the catalog says what must not break, never what to add.
18
+ - Check which open PRs touch your files (`gh pr list`, `gh pr diff`), design to
19
+ compose, and flag merge order in the PR body. Branch `fix/<N>-<slug>` from
20
+ `origin/master` unless the brief names a branch. Preserve contributor
21
+ authorship on a contributor's branch.
22
+ - Write the failure list in the PR body before the first edit (principles §2):
23
+ inputs, states, orderings, and platforms; a space with two axes is a table.
24
+ The tests cover that list, not only the happy path. For a change to N of M
25
+ members, the list also names M, the excluded default, and the planned
26
+ generalization verdict: *widen in this PR*, *follow-up issue* with its seam
27
+ group, or *stay specific* with the reason (#3622).
28
+ - When a gate becomes fail-closed, sweep every construction site that reaches
29
+ it, test doubles included, and prove the sweep with the behaviour suites
30
+ (#3622).
31
+ - A change on a lifecycle, timing, or identity seam extends or adds a TLA+
32
+ model in this step (#3802; the rule itself is in `AGENTS.md`). Find the
33
+ family in `formal/coverage-map.json`, write the invariant the change
34
+ preserves or tightens, and show the violating config red on the pre-fix model
35
+ and green after, or carry `TLA+ unaffected: <family> — <reason>` in the PR
36
+ body. A row is any-of (one listed family's model move or declaration
37
+ satisfies it); a row of 4+ families only prints a note, except `index.ts`,
38
+ whose row gates on the lifecycle hook handler a hunk lands in (#3878). The
39
+ map owner is the lane that adds a `formal/<family>/`: it adds the family and
40
+ its map row in the same PR, and `validateCoverageMap` reds the Unit tests lane
41
+ otherwise.
42
+ - Seams are named in the brief before the round. A fixer that needs an
43
+ unconfirmed seam stops and reports it as a finding, not as a test.
44
+
45
+ ## Scope
46
+
47
+ - A fix round does not deepen: no refactor, helper extraction, or rename
48
+ beyond the fix's own lines; deepening is its own slice under the owning
49
+ umbrella (#3178). Every hunk serves a finding or an acceptance box. Orphans
50
+ your change created come out; dead code you only noticed goes to the
51
+ follow-up section.
52
+ - A behaviour-preserving move is its own commit: callers keep exact results and
53
+ tests stay green; put any behaviour change in a separate commit (#3817).
54
+ - Delete vacuous tests in the files you touch (a case that reds on no
55
+ mutation, asserts a constant, or duplicates a sibling), with the sweep
56
+ transcript quoted in `Test assessment`. A redundant test that still guards
57
+ goes only with the named survivor that covers it.
58
+ - Apply folded review follow-ups per `docs/pi-lens-subagent.md`
59
+ "Follow-ups", and list filed residuals in one **Residuals** section of the
60
+ PR body.
48
61
 
49
62
  ## Evidence
50
63
 
64
+ - Use `scripts/mutate.mjs` for bounded hand mutations; it restores the target automatically, but only while the file still holds the mutated bytes. A leftover journal (`<file>.mutate-backup`) blocks the next run on that file; recover with `--restore`, which refuses and prints the three hashes when the file was edited since. If a crash left the file already at its original bytes, `--restore` also refuses; check the printed hashes and delete the journal by hand. `--restore` is crash recovery only: run against a live `mutate.mjs` run on the same file, it pulls that run's mutation, and that run then reports ERROR (exit 4).
65
+
51
66
  - Witness rule (ADR 0007): #1605 owns the witness lanes, and their fixtures
52
67
  live under `tests/fixtures/witness/<slice>/`.
53
-
54
- - Add a regression test through the production path.
55
- - Capture the pre-fix assertion failure.
56
- - Prove the fixed test passes.
57
- - Mutate or remove every new guard, branch, filter, cap, and fallback; quote the
58
- compile-valid red result.
59
- - Sweep the whole codebase for the defect shape and every enumerable member.
60
- - Record per-member verdicts, blast radius, affected callers, and bounded
61
- observability.
68
+ - A PR claiming it "reduces failures" runs `node scripts/ci-test-diff.mjs <jobA> <jobB>`, quotes its summary, and explains any NEW failures before claiming a reduction.
69
+ - Red-first has one stated exception: when the only red-first path needs broad
70
+ harness setup, brittle mocks, or a test you would delete right after it
71
+ proves the fix (shape 7: #1114, #1759), state the exception in `Tests`, name
72
+ the closest executable check you used, and expect the reviewer to dispute it.
73
+ A silent omission is a defect.
74
+ - With Git authority, commit the code once the targeted suite is green and
75
+ after every proven step, before any checkout-based proof; add evidence in a
76
+ later commit (#3268). Produce a red by restoring only the mutated source path
77
+ from the pre-fix SHA (`git checkout <sha> -- clients/…`), never `tests`
78
+ (#3166) and never uncommitted work, and run `git status` after any bulk
79
+ restore. Without Git authority, use a saved patch.
80
+ - Hand-mutate only the NEW guard, branch, filter, or cap the PR is about, both
81
+ directions, one row per direction, and quote the compile-valid red. The new
82
+ test is the only red under at least one mutation. This is the whole PR
83
+ mutation layer (AGENTS.md, #4005): there is no per-PR Stryker job, comment, or
84
+ `MUTATION` line, and no survivor triage. The nightly Stryker report on master
85
+ is exploratory and is not read here. Use bounded hand probes locally; never
86
+ run a full Stryker campaign in a worktree.
87
+ - Every record the `Observability` section names is asserted by a test in the
88
+ diff and quoted in the body (#2642, #2647, #2649, #2654).
89
+ - Every behavioural sentence (a docstring invariant, a memo, a registry
90
+ justification) maps to a test or a probe, or is deleted (#2643, #2654).
91
+ - Name where new state sits in its ladder and what happens to it at
92
+ `session_start` (#2649, #2654).
93
+ - A measured constant names its measuring command and keeps raw output as a
94
+ tracked artifact pinned by a test (#3648). Run `git check-ignore -v` on every
95
+ new artifact path before citing it (#3648).
96
+ - A CI-lane or workflow fix is accepted only when that lane's own run on the
97
+ exact head completes inside its `timeout-minutes`, with the acceptance
98
+ surface quoted from its log; any self-bound sits below the job cap by a
99
+ stated margin.
62
100
 
63
101
  ## Required checks
64
102
 
65
- - Run `npm run build` before tests and rebuild between mutations.
66
- - Run targeted tests through the repository's pinned environment. Include every
67
- test that mocks or deep-equals a changed module or record.
68
- - Add `tests/config/` and spawn-heavy lanes for real child or LSP tests.
103
+ - Run every test that mocks or deep-equals a changed module or record, and the
104
+ spawn-heavy lanes for real child or LSP tests.
105
+ - Before pushing, run `npm run astgrep:self-scan`; the pre-push hook runs the
106
+ same scan over tracked files, after its build.
69
107
  - Reproduce CI-only failures in the CI command shape.
70
- - Use the exact npm pin in `package.json` for lockfile changes.
71
- - Add one `.changelog/<slug>.md` fragment for code changes. Never edit
72
- `CHANGELOG.md`.
108
+ - Run `npx oxfmt --check` on every touched file with the symlinked pinned
109
+ devDependency. Never `npm install oxfmt --no-save`: it replaces the linked
110
+ `node_modules`.
73
111
  - Run release-QA end to end when a release-QA row changes.
74
-
75
- ## Test screens
76
-
77
- - Enter through the real production function.
78
- - Do not use setup-echoing, implementation-mirroring, or mock-only assertions.
79
- - Do not use ambient stack/caller inspection in doubles.
80
- - Restore env, timers, cwd, and module state.
81
- - Make skips explicit and visible.
82
- - Use independent expected values and behavioral assertions.
83
- - Keep timing bounds near measured fixed and regressed values.
84
- - Make every PR-body test id grepable in the tree.
112
+ - Run the reviewer's standing probes (`docs/pi-lens-reviewer.md`) that the diff
113
+ can trip, and quote their output in the PR body.
114
+
115
+ ## Fix rounds
116
+
117
+ - On `FIX ROUND` findings, reproduce each finding before fixing it, add a
118
+ red-first test for every behavioural fix, rebuild, re-run the targeted suites
119
+ plus anything the findings touched, and push the same branch. If the PR reads
120
+ DIRTY, merge `origin/master` with additive resolutions and screen the merged
121
+ result semantically: master may have moved the seam you built on.
122
+ - A reviewer's prescribed remedy is a hypothesis. Test it against your own
123
+ table of the seam; if it is insufficient, ship the correct shape and quote
124
+ the red the prescription alone leaves (#2642).
125
+ - When a verify finds a NEW defect on your fix, the next round carries a table
126
+ enumerated from grep: every writer and reader of the key with the exact
127
+ expression that derives it, and every call into an external sink or timer
128
+ with "if it throws" and "if it never returns" columns (#2642, #2649). Fix
129
+ everything the table exposes; a table that finds nothing is quoted too.
130
+ - Name every governance exemption a round adds, with the reason and whether it
131
+ is a registration or silencing; it is a finding until the reviewer clears it
132
+ (#2654).
133
+ - Spot-check one prior round's mutation on the new head (#2583).
134
+ - Re-read the changelog fragment for any claim the round retracts (#3155), then
135
+ add an honest review-round section to the PR body.
136
+
137
+ ## Before the report
138
+
139
+ Re-climb the minimalism ladder on what you built. Challenge anything
140
+ unnecessary or unverified with a probe, delete what can go, and simplify what
141
+ remains: prefer deleting over simplifying, simplifying over optimizing, and
142
+ optimizing over automating. If the diff survives, leave it alone; churn is not
143
+ rigor (#2599).
85
144
 
86
145
  ## Handoff
87
146
 
88
- - Without Git authority, leave changes uncommitted.
89
- - Write root-level `PR_BODY.md` and `COMMIT_MSG.txt`; keep both untracked.
90
147
  - The PR body is the whole `.github/PULL_REQUEST_TEMPLATE.md`, every
91
148
  heading present in order: `## Why` (one sentence), `## Notes for the
92
149
  reviewer`, `## Change outline`, `## Summary`, `## Type of change`,
93
150
  `## Area`, `## Checklist`, `## Tests`, `## Blast radius`,
94
- `## Observability` (a record literal from the runtime diff, or exactly
95
- `No new failure path; no record added.`), `## Class sweep`, and
96
- `## Test assessment`. A brief that names only some headings does not
97
- shorten this list.
151
+ `## Observability` (a record literal from the runtime diff, `none: <reason>`,
152
+ or exactly `No new failure path; no record added.`, which a new decision
153
+ branch on a session, lifecycle or delivery seam refuses, #3875),
154
+ `## Class sweep`, and `## Test assessment`. A brief that names only some
155
+ headings does not shorten this list. The closing keyword lives in the body;
156
+ GitHub ignores it in a title.
98
157
  - Run `node scripts/check-pr-body.mjs --lint-local PR_BODY.md` and
99
158
  `node scripts/check-changelog-fragments.mjs` before the hand-back; both
100
- must pass, and the hand-back quotes them. A changelog fragment is
101
- `---` / `section: <Added|Changed|Deprecated|Removed|Fixed|Security>` /
102
- `---` / blank / one `- ` bullet. (Four of six Luna PRs on 2026-09-23
103
- redded the PR-body and changelog gates on the first head; the fixes were
104
- all mechanical.)
105
- - The hand-back carries the commit SHA; a dirty tree is an incomplete
106
- round.
107
- - Include every red, mutation result, skipped check, and environment block.
108
- - Answer each finding id with `fixed`, `not fixed`, or `withdrawn (reason)`.
109
- - Report verdict, changed files, totals, and unverifiable checks.
159
+ must pass, and the hand-back quotes them. A red `PR body (advisory)` check is
160
+ a fix-before-review item. A changelog fragment is `---` /
161
+ `section: <Added|Changed|Deprecated|Removed|Fixed|Security>` /
162
+ `audience: <user|internal>` / `---` / blank / one `- ` bullet. New
163
+ `audience: user` fragments must begin with a bold lead of at most 100
164
+ characters, excluding issue references; internal fragments are exempt.
165
+ `audience` is
166
+ required: `user` is anything a pi-lens user or agent can observe (tools,
167
+ diagnostics, messages, config, install, performance, a fixed bug they could
168
+ hit); `internal` is CI, tests, `formal/`, contributor docs, orchestration, and
169
+ refactors with no observable change. `npm run changelog:check` checks the
170
+ rollup, not fragments (#2456).
171
+ - Every code fact in the PR body is a `` `path:line` `` citation the check
172
+ verifies: the file must be in the committed tree (never an untracked or
173
+ git-ignored path, which CI cannot read), and a fenced quote after it must
174
+ match within ±20 lines. Every test, probe, or fixture id in a body table is a
175
+ grep-able `it(` title or file name in the tree (#2868, #2877).
176
+ - With Git authority, the hand-back carries the commit SHA; a dirty tree is an
177
+ incomplete round.
178
+ - Report outcome first: branch, PR URL, the root cause in two sentences,
179
+ red-run evidence, test totals, every mutation result, skipped check, and
180
+ environment block, and what the orchestrator must decide (merge order,
181
+ deferred scope, follow-up issues).
@@ -1,54 +1,102 @@
1
1
  # Investigator contract
2
2
 
3
+ Read first: the engineering principles (`docs/engineering-principles.md`), then
4
+ `AGENTS.md`, then `docs/pi-lens-subagent.md`, then this contract. Then read the
5
+ issue and the requested evidence surface.
6
+
3
7
  ## Mission
4
8
 
5
- - Read `AGENTS.md`, `docs/pi-lens-subagent.md`, the issue, and the requested
6
- evidence surface.
7
9
  - Keep the worktree and Git state read-only.
8
10
  - Define the symptom as an answerable question with time window, sessions, and
9
11
  build in scope.
10
12
  - Reproduce through the reporter's production entry point before naming a seam.
11
- - Deliver a proven diagnosis and one concrete next step; do not implement a fix.
13
+ - Deliver a proven diagnosis and one concrete next step; a plausible story is
14
+ not a diagnosis. Implement only a contained fix the brief asks for, under
15
+ `docs/pi-lens-fixer.md`; otherwise, or when the root cause is architectural,
16
+ stop and return a fixer brief.
17
+
18
+ ## Evidence sources
19
+
20
+ - `~/.pi-lens/latency.log` and its `.1` rotation: per-touch records
21
+ (`lsp_touch_file`, `lsp_aux_wait_outcome`, `availability_decision`,
22
+ `lsp_scanner_coverage_gap`, breaker and deferral events). Rotation is by size:
23
+ `PI_LENS_MAX_LOG_SIZE_MB` defaults to 10 (`clients/log-cleanup.ts`), which is
24
+ hours under active dogfooding. Read the oldest timestamp in `.1` before
25
+ trusting the pair to span your window.
26
+ - `~/.pi-lens/cascade.log`, `sessionstart.log`, and `tree-sitter.log`: cascade
27
+ runs, lifecycle, and grammar events.
28
+ - Per-project `worklog.jsonl` and `~/.pi/agent/sessions/`: what the agent was
29
+ told and did, and when.
30
+ - `pi-analyze` `timeline.ndjson`, when the run produced one: the host-side
31
+ view.
32
+ - The repository: grep the producer of any record before trusting its fields.
12
33
 
13
34
  ## Investigation method
14
35
 
15
- - Correlate telemetry with `turnId` or another stable identifier, never time
16
- alone.
17
- - Read the producer before trusting a record's label.
18
- - Separate worker, daemon, host, cache, build, and environment behavior.
19
- - Rank falsifiable hypotheses with evidence for and against each.
20
- - State the observation that would settle each remaining hypothesis.
21
- - Count a representative population and sweep every member of the root-cause
22
- pattern.
23
- - State blast radius, missing observability, and any unbounded resource.
36
+ - Correlate telemetry with `turnId`, the session id, or the run or boot id the
37
+ records carry, never wall-clock proximity alone.
38
+ - Attribute the build: date-map evidence against merge times, since the
39
+ installed pi-lens may predate the fix under evaluation. A record type only one
40
+ build emits is the cheapest vintage marker.
41
+ - Read the producer before trusting a record's label; a record's `filePath` is
42
+ not always the subject that produced the reason (#1550).
43
+ - The dispatch record outranks an agent's self-report; the transcript is
44
+ hearsay.
45
+ - Separate worker, daemon, host, cache, build, and environment behavior, and
46
+ model-side from host-side failure. For a blocked edit,
47
+ `hostWouldApplyOldText` (`clients/host-edit-normalize.ts`) records the
48
+ counterfactual: `wouldApply: true` is a false block by pi-lens, `false` is a
49
+ genuine miss by the model.
50
+ - Count rates over the window with the denominator named. A missing field is
51
+ a finding: name the record that would prove it.
52
+ - Classify known against new: check the `AGENTS.md` catalog, open umbrella
53
+ issues, and recent merges. "Known, fixed, awaiting deploy", "known, open, new
54
+ instance", and "new bug" carry different next steps.
55
+ - Rank falsifiable hypotheses with evidence for and against each, and state
56
+ the observation that would settle each one.
57
+ - Sweep a representative population and every member of the root-cause
58
+ pattern. State blast radius, missing observability, and any unbounded
59
+ resource.
24
60
  - For LSP, dispatch, cache, runner, or tool findings, name the covered registry
25
61
  entries and include one non-TypeScript case when the rule is language-neutral.
26
62
 
63
+ ## Reproducible behavior
64
+
65
+ When the symptom reproduces, the loop comes before the reading. Build the
66
+ tightest loop that goes red on the symptom (a failing test, a minimal driver, a
67
+ differential run), confirm it matches the reporter's exact symptom, and
68
+ minimize it until every element is load-bearing. Tighten it for speed, signal,
69
+ and determinism; raise the reproduction rate of a nondeterministic symptom by
70
+ looping, parallel drivers, or stress. Write three to five falsifiable hypotheses with predictions
71
+ before testing any. Instrument surgically, tag the instrumentation, and remove
72
+ all of it before reporting; loops live in your worktree and are reverted. The
73
+ report recommends the regression test's seam: the one that captures the bug's
74
+ pattern, not the spot where it surfaced.
75
+
27
76
  ## Evidence rules
28
77
 
29
78
  - **Already-shipped check before naming a slice:** for every umbrella member the
30
79
  brief cites as remaining work, grep the current tree and the closing PRs and
31
80
  state shipped, partially shipped, or not shipped with `file:line`; a first
32
- slice may name only work whose absence was verified on the current head.
33
- The 2026-09-22 primitives brief named three scanner filter blocks as the
34
- #1461 first slice even though #1622/#1625/#1628 had already removed them;
35
- the fixer found the premise error in PR #3264 and the #1892 comment on
36
- 2026-09-23.
37
-
81
+ slice may name only work whose absence was verified on the current head
82
+ (#1461, #3264, #1892).
38
83
  - A reported defect is not confirmed until the production-path probe is red on
39
84
  the current tree for the reported reason.
40
85
  - A probe must distinguish competing hypotheses, use independent observations,
41
86
  and avoid setup-echoing or mirrored predicates.
42
- - Prefer real stores, sinks, coordinators, binaries, and host harnesses. Mock
43
- only true process or host boundaries.
44
87
  - Preserve commands, outputs, exact paths, build identity, and timestamps.
45
88
  - Use concise, active, plain prose.
46
89
 
47
90
  ## Handoff
48
91
 
49
- - Write the diagnosis to the requested root-level artifact.
50
- - If issue access is granted, post the diagnosis to the tracking issue; a file
51
- alone is not durable evidence.
52
- - Report `confirmed`, `refuted`, or `blocked` for each hypothesis.
53
- - If implementation becomes necessary, stop and return a fixer brief to the
54
- orchestrator.
92
+ - Verdict first: the root cause, or the ranked hypotheses when the evidence
93
+ does not settle it, with the two or three trimmed log lines that prove it.
94
+ Then rates and counts, build attribution, known-versus-new mapped to issue
95
+ numbers, and `confirmed`, `refuted`, or `blocked` for each hypothesis.
96
+ - Write the diagnosis to the requested root-level artifact. With issue access
97
+ granted, post it on the tracking issue; a file alone is not durable evidence.
98
+ - The next step is one of: an issue to file (title, body, labels, and
99
+ acceptance criteria ready to post, after showing no open issue covers the
100
+ shape), a fix to dispatch, or a measurement to wait for. Without `gh` write
101
+ access, the orchestrator posts it. Write an issue so a fixer needs no further
102
+ investigation.