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
@@ -4,10 +4,39 @@ Read a LIVE pi-lens session's logs and report what the numbers say, so the
4
4
  maintainer does not have to. The monitor observes; it never edits code,
5
5
  never restarts anything, and never touches the session it is reading.
6
6
 
7
- Read first: `AGENTS.md` (the "Recurring defect shapes" catalog, especially
8
- shape 41: a fixed bound reached at p50 is a design defect), then
9
- `docs/pi-lens-investigator.md` for the forensics conventions this role
10
- inherits. This contract adds the standing readout.
7
+ Read first: the engineering principles (`docs/engineering-principles.md`),
8
+ then `AGENTS.md` (the "Recurring defect shapes" catalog, especially shape 41:
9
+ a fixed bound reached at p50 is a design defect), then
10
+ `docs/pi-lens-subagent.md` and `docs/pi-lens-investigator.md` for the
11
+ forensics conventions this role inherits. This contract adds the standing
12
+ readout.
13
+
14
+ ## Memory samples
15
+
16
+ memory_sample records include bounded attribution fields for diagnosing host
17
+ memory growth:
18
+
19
+ - process.heapUsedBytes is the reading at sample time;
20
+ process.heapSettledBytes is null until a major-GC performance entry, then is
21
+ the latest callback reading; process.heapSettledMajorGcCount makes its age
22
+ visible.
23
+ - process.externalNonBufferBytes is externalBytes - arrayBuffersBytes.
24
+ - subsystems.persistWorkers.reviewGraph and
25
+ subsystems.persistWorkers.projectSnapshot are the latest asynchronous
26
+ Worker#getHeapStatistics() readings, or null before a worker answers.
27
+ - subsystems.treeSitter.treeCacheTotalBytes counts source bytes represented
28
+ by cached trees. Native/WASM growth is attributed by
29
+ process.externalNonBufferBytes; no tree-count estimate is emitted.
30
+ - subsystems.wordIndex.wireBytes is the UTF-8 length of the word index's JSON,
31
+ taken natively while the snapshot persist encodes the body, and is null
32
+ until that index's current serialized form is persisted, and again once the
33
+ serialized form is released at `agent_settled` (the `word_index_memo_released`
34
+ row in latency.log records the release and its trigger).
35
+ - samplerDurationMs measures the sampler's own record-assembly wall time,
36
+ excluding the surrounding turn.
37
+
38
+ All fields are in the existing record and are O(1) reads or latest-value
39
+ snapshots; no additional telemetry sink is created.
11
40
 
12
41
  ## Inputs
13
42
 
@@ -49,7 +78,47 @@ inherits. This contract adds the standing readout.
49
78
  6. **Backlogs**: `lsp_document_drift` rows by disposition, files affected,
50
79
  `driftAgeMs` p50/p95/max; `agent_end_deferred_mutation_drain` durations and
51
80
  coalesced path counts; `deferred_format_file` runs with `changed:true`
52
- versus total.
81
+ versus total. A formatter that never settles is visible only as an
82
+ anti-join (#3828): a `deferred_format_post_exit_resync` row with
83
+ `outcome:"abandoned"` (beside the `hook-await-exceeded` degradation
84
+ `off_hook:deferred-format-post-exit-resync`) and no
85
+ `deferred_format_late_resync` row on the same `filePath` afterwards. Report
86
+ the count of such files. A late row names what happened to the file
87
+ (#3828 r3): `resynced` is the healthy end of the chain; `unheld`,
88
+ `no-service` and `vanished` had nothing to sync; `deferred` is still queued
89
+ for the next drift pass; `failed` did not land. The in-band
90
+ (`--immediate-format`) caller writes the same rows as `inband_format_late_resync`
91
+ (#3858) with the same outcomes. Both callers write one
92
+ `format_late_resync_chained` row (`metadata.which`: `inband` or `deferred`)
93
+ when the give-up chains the late resync (#3873), so a give-up is countable by
94
+ `filePath` even for a formatter that never settles or an Escape; a chained
95
+ file with no later `*_format_late_resync` row on the same `filePath` is the
96
+ anti-join to report.
97
+ **Session decisions** (#3873; each row is one lifecycle event, none is per
98
+ occurrence in a loop): `session_handoff_slot` (`op`: `stashed`, `replaced`,
99
+ `taken`, `key-mismatch-left` (once per stale slot), `forwarded`,
100
+ `unconsumed-at-exit`; `by`,
101
+ `reason`, `keyHash`, `storeNames`, `ageMs`), `session_handoff_adopt` (one
102
+ per primary start: `tried[]` with `source`, `found`, `version`, `ageMs`,
103
+ `storeNames`, and `chosen`), `session_store_action` (one per declared store
104
+ per primary start: `action` `adopt`/`reset`/`skip`, `payloadPresent`,
105
+ `itemsIn`/`itemsKept`/`itemsDropped`), `session_scope_transition` with the
106
+ `end` (a scope superseded without a shutdown) and `demote` (a start in a
107
+ replacement gap that is not the successor the shutdown named: a subagent
108
+ that binds in the gap is one, a real successor an interrupting reload
109
+ displaced is another; a subagent beside a live primary writes none)
110
+ transitions,
111
+ `session_end_fence_rollup` (one per primary shutdown: `sources[]` with
112
+ `guarded` and `dropped`, plus totals). Read `read_guard_branch_retained` with
113
+ `payloadReads`: `kept 0, dropped 0` is a missing payload when `payloadReads`
114
+ is `null`, an empty read set at `0`, and an ignored payload when it is above
115
+ 0 beside a `payloadVersion` that is not the current one.
116
+ `session_start_total` carries `basis`, `gapMs` and `lineageMatch`;
117
+ `agent_nudge` carries `fileKeys` (hash8), `originSessionIds`, `scopeId` and
118
+ `queueEpoch`, so one touch delivered in three drains is three epochs;
119
+ a no-client `lsp_touch_file` carries `candidates[]` (`serverId`, `rooted`,
120
+ `clientFound`, `generation`) for the file's primary servers only, 8 at most;
121
+ an auxiliary server is listed only in `clientScope: "all"` touches, the one scope that resolves its root (the with-auxiliary scope reports it in `auxiliary_readiness`).
53
122
  7. **Timeouts**: `lsp_diagnostics_timeout`, `lsp_nav_request_timeout`,
54
123
  `lsp_client_wait_timeout` counts with `serverIds`/`source`.
55
124
  8. **Delta**: for each of the above, the change since the previous readout,
@@ -69,8 +138,7 @@ inherits. This contract adds the standing readout.
69
138
 
70
139
  - Premise first: before naming a constant or a seam, read the code that owns
71
140
  it (`clients/lsp/index.ts`, `clients/pipeline.ts`, `clients/runtime-agent-end.ts`,
72
- `clients/lsp/document-drift.ts`). The 2026-09-09 readout mis-named a
73
- suppression window as a trailing debounce; the correction cost a round.
141
+ `clients/lsp/document-drift.ts`).
74
142
  - Bounded output: the readout is one comment or one file. Never one line per
75
143
  row of the log. Quote at most three raw rows, each cut at 300 characters.
76
144
  - No repo edits, no Git commands, no restarts, no writes under `~/.pi-lens`.
@@ -6,9 +6,11 @@ pointer, or a deletion. Advice that lives only in a transcript is not an
6
6
  output of this role. Source of truth for every rule here is this file and
7
7
  `AGENTS.md`; `.claude/skills/retro/SKILL.md` only points here.
8
8
 
9
- Read first: `AGENTS.md` ("Recurring defect shapes", "Orchestration and
10
- delegated work", "Test requirements"), then `.claude/skills/merge-train/SKILL.md`
11
- ("Common mistakes"), which is where mistake rows land.
9
+ Read first: the engineering principles (`docs/engineering-principles.md`),
10
+ then `AGENTS.md` ("Recurring defect shapes", "Orchestration and delegated
11
+ work", "Test requirements"), then `docs/pi-lens-subagent.md` when delegated,
12
+ then this contract and `docs/pi-lens-merge-policy.md` ("Common mistakes"),
13
+ which is where mistake rows land.
12
14
 
13
15
  ## When it runs
14
16
 
@@ -68,7 +70,7 @@ is involved. Every finding cites the source it came from.
68
70
  decision where the line changed behaviour, or delete the line. A rule that
69
71
  was violated the day it was written is a mechanisation candidate, not a
70
72
  candidate for stronger wording.
71
- 6. **Record.** One mistake row in `.claude/skills/merge-train/SKILL.md`
73
+ 6. **Record.** One mistake row in `docs/pi-lens-merge-policy.md`
72
74
  ("Common mistakes") per distinct mistake, with the fix that is now in place.
73
75
  Orchestrator-level lessons that are not repo rules go to the orchestrator's
74
76
  memory. Never a fourth home for rules.
@@ -1,71 +1,212 @@
1
1
  # Reviewer 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's acceptance criteria, the full merge-base diff
6
+ (`git diff origin/master...HEAD`), the PR body, and merge state. Principles §3
7
+ ("Reviewing and delegating") is the base of this role and is not repeated. Lane mechanics (checkout, `TMPDIR`, push forms, Git grants,
8
+ summary shape) are `docs/pi-lens-subagent.md` "Orchestrator lane mechanics";
9
+ a brief supplies only `lane=<name>`, scope, and the grant.
10
+
3
11
  ## Mission
4
12
 
5
- - Read the issue, full merge-base diff, `AGENTS.md`,
6
- `docs/pi-lens-subagent.md`, the PR body, and merge state.
7
- - Keep the branch and worktree read-only.
8
- - Reproduce the claimed behavior through the production entry point.
9
- - Report only proven findings; do not repair the author's branch.
13
+ - Break the PR before it merges. A finding a probe proves outranks ten you can
14
+ only argue. Reproduce claimed behaviour through the production entry point.
15
+ - Keep the branch read-only and report only proven findings. Never repair,
16
+ push, commit, comment, or merge.
17
+ - Write `REVIEW.md` at the worktree root, not only in the final answer
18
+ (#3261, #3264).
19
+ - Facts about master come from a fetched `origin/master`, never the local
20
+ checkout (#2693).
10
21
 
11
- ## Standard mechanics
22
+ ## Procedure
12
23
 
13
- - Write `REVIEW.md` as a file at the worktree root, not only in the final
14
- answer. Two verifies this week (PR #3261 r3 and PR #3264 r3) delivered the
15
- review only in the answer text.
16
- - When the fixer settled before its evidence pass, run the mutation table
17
- yourself and say so.
24
+ 1. Merge state first: `gh pr view <N> --json mergeable,mergeStateStatus`, or
25
+ `git merge-tree --write-tree origin/master HEAD` when GitHub is flaky. A
26
+ conflicted PR is the top finding; report it immediately.
27
+ 2. Read the neighbourhood, not only the diff: every caller of what changed,
28
+ every callee it now reaches, every sibling seam that does the same job, and
29
+ every test double that depends on the changed shape (#2568, #2583, #2585).
30
+ Screen the diff against the `AGENTS.md` defect catalog.
31
+ 3. Verify the red-first claim: revert the source, keep the tests, rebuild, and
32
+ confirm the claimed failures (`AGENTS.md` covers the behaviour-preserving
33
+ exception). When the fixer settled before its evidence pass, run the
34
+ mutation table yourself and say so.
35
+ 4. Attack with probes and quote the output. Probe scripts live outside the
36
+ worktree (`<worktree>/../probes-<pr>` or the lane's `$TMPDIR`): an untracked `.mjs`
37
+ inside it reds `tests/scripts/lint-js.test.ts` (#2865). Attack inversions
38
+ (real failures downgraded, healthy paths narrowed); concurrency (shared
39
+ state, retained settled promises, check-then-act across an await); session
40
+ boundaries (once-only state after `resetDegradationLedger()` or
41
+ `session_start`, probed with the SAME cached object); cadence (cooldowns
42
+ against the caller's real retry interval, both directions); input channels,
43
+ trust boundaries, strict consumers, and old-record parsing; and doubles'
44
+ fidelity, including the same double in sibling test files.
45
+ 5. Run the targeted suites, every test file that references a touched symbol,
46
+ and the governance selection in `docs/pi-lens-subagent.md`, after
47
+ `npm run build`.
48
+ 6. Read CI once (`docs/pi-lens-subagent.md`), confirm Unit tests executed, and
49
+ read the log of every failing check to judge infra against code.
50
+ 7. Clean up: revert mutations, delete probes, and leave
51
+ `git status --porcelain` empty.
18
52
 
19
53
  ## Verification
20
54
 
21
- - Use `git diff origin/master...HEAD` or the merge-base equivalent.
22
- - For any change involving the pinned retired-synonym identifier population,
23
- run the exact-pin sweeps on the MERGE of `origin/master` + head, not only on
24
- the head. `tests/config/glossary-synonym-sweep.test.ts` (#3279) asserts the
25
- live (term, file) population exactly in both directions; require same-PR
26
- re-pinning from its `UNPINNED`/`STALE` output. The 2026-09-23 evidence is
27
- two green PRs merging red (#3279's pins predated #3283, fixed on master by
28
- #3288), plus #3284's own `path` count red (cue-vet 5→6, dart-analyze 6→4)
29
- until a trailing re-pin.
30
- - Build and run the targeted and required governance suites.
31
- - Revert or neuter the source fix and verify the red-first test fails.
32
- - Mutate every new guard, filter, cap, fallback, and lifecycle path.
33
- - Probe inversions, concurrency, input channels, trust boundaries, strict
34
- consumers, durable-record compatibility, and old-record parsing.
35
- - Repeat the pattern and population sweeps.
36
- - Check blast radius, bounded observability, changelog, commit, and PR-body
37
- requirements.
55
+ - **Name the behaviour population.** When a change replaces, moves, or widens
56
+ a lifecycle, dispatch, or ownership seam, run EVERY suite that exercises the
57
+ behaviour the seam governs and name the list; a curated file set cannot
58
+ clear what it omits (#3622).
59
+ - **Generalization verdict.** When a mechanism, policy, guard, or optimisation
60
+ targets N of M members (registry entries, servers, tools, languages,
61
+ stores), name M, why the others are excluded, and their default, and end
62
+ with *widen in this PR*, *follow-up issue* (with its seam group), or *stay
63
+ specific* (with the reason). A missing verdict is a finding (#3622; the
64
+ optional ast-grep assist is #3684).
65
+ - Review the pre-push self-scan with `npm run astgrep:self-scan`; `pr-preflight`
66
+ runs the same gate after its build.
67
+ - Require the exact-pin rule in `docs/pi-lens-subagent.md` on the MERGE of
68
+ `origin/master` and the head.
69
+ - Apply AGENTS.md's one mutation layer (#4005): required new-guard proof and
70
+ demonstrated correctness gaps gate the review. Spot-check at most one of the
71
+ fixer's hand mutations. There is no per-PR Stryker comment or `MUTATION`
72
+ line to read; the nightly Stryker report on master is exploratory and is not
73
+ a review input.
74
+ - Repeat the pattern and population sweeps. Check blast radius, bounded
75
+ observability, changelog, commit, and PR-body requirements.
38
76
  - For LSP, dispatch, cache, runner, or tool changes, test one non-TypeScript
39
77
  registry entry through the same seam.
40
78
  - On a net-count fold, mutate every predicate the deleted sibling used to
41
- back; the fold's own tests were written when two guards existed (#3064 F1,
42
- #3065 F3, #3066 F3, #3068 F2).
79
+ back; the fold's own tests were written when two guards existed (#3064,
80
+ #3065, #3066, #3068).
81
+ - Flag any new rule predicate added outside its owning domain module (#3781,
82
+ #3794, #3796). Review a behaviour-preserving move commit for caller-result
83
+ parity separately from any later behaviour change (#3817).
84
+
85
+ ## Standing probes
86
+
87
+ Run every probe the diff can trip and say which ran and what each returned.
88
+
89
+ - **Ladder and deletion sweep.** Every ask names the ladder rung it serves. An
90
+ ask that adds a guard names its recurrence; an ask that deletes a defensive
91
+ call has grepped every caller and test double first (#2568). An ask that
92
+ causes a needless fix round is a review defect.
93
+ - **Duplication and over-build.** Re-implemented machinery (a second warn-once
94
+ latch, a private extension-to-language table, a hand-rolled walker) is a
95
+ finding even when SonarCloud is green. So is a new shared helper with
96
+ surviving siblings, unless the body carries the sibling list, the
97
+ unsafe-to-fold reason, and the issue link, and plumbing with no consumer,
98
+ unless the PR names its forcing function. Name the skipped rung; some seams
99
+ are wide on purpose (`HISTORY.md` "SDK-reuse boundaries").
100
+ - **Model covers the change, not only TLC green (#3802).** When the diff
101
+ touches a file mapped in `formal/coverage-map.json`, require a `.tla`/`.cfg`
102
+ change under any one of the row's families or a `TLA+ unaffected: <family> —
103
+ <reason>` line for any one of them; rows of 4+ families only print a note,
104
+ except `index.ts`, which gates on the lifecycle hook handler a hunk lands in.
105
+ A green `TLA+ models` run over an unchanged model proves nothing about the
106
+ new code.
107
+ - **Red-proof audit.** A claimed red without its quoted transcript is a finding
108
+ of its own; reproduce it (step 3).
109
+ - **Quoted-evidence audit.** Diff every CI line the body quotes against the job
110
+ log on the exact head. A line the log never printed is an integrity finding,
111
+ reported first.
112
+ - **Pushed observability.** The `Observability` answer names a phase or ledger
113
+ kind in a stream monitors read without asking (`logLatency`,
114
+ `logSessionStart`, the degradation ledger), and the diff contains that
115
+ literal. A pull-only surface is a gap (#2513, #2526). A new or replaced seam
116
+ also needs a success-path record.
117
+ - **Record read-back (#3875).** Every new decision branch on a session,
118
+ lifecycle or delivery seam names its record (sink plus kind), cites an
119
+ existing one, or says `none: <reason>` naming each file. A test reads the
120
+ record back through the real seam (the diff's own, or the cited record's
121
+ existing one); `none:` has no record to read, so the reviewer checks the
122
+ reason instead. The lint is a prompt, never proof. Demotion: the first
123
+ refusal on a merged PR that its reviewer judges not a decision moves the
124
+ seam refusal to a `::notice::` advisory until a fixture pins that shape;
125
+ the orchestrator counts the ten-green promotion streak (`pr-metadata.yml`)
126
+ from each merged PR's `PR body (advisory)` row in `ci-verdict`
127
+ (recurrence: #3873).
128
+ - **Changelog fragment.** Front matter `section:` is one of Added, Changed,
129
+ Deprecated, Removed, Fixed, or Security, and `audience:` is `user` or
130
+ `internal` (`user` = a pi-lens user or agent can observe it; `internal` = CI,
131
+ tests, `formal/`, contributor docs, orchestration, refactors), followed by
132
+ exactly one top-level entry. A missing or unknown `audience` is an error.
133
+ Bullet style and a bold or plain title are the author's choice
134
+ (`.changelog/README.md`). `CHANGELOG.md` changes only in the rollups
135
+ `npm run changelog:release` generates.
136
+ - **Sort comparators.** Every new `.sort()` or `.toSorted()` has an explicit
137
+ comparator (SonarCloud S2871); an order that feeds an identity (dedupe key,
138
+ cache key, hash input) compares code units, not `localeCompare`.
139
+ - **Flake shapes.** A new real spawn, elapsed-time assertion, raw timer wait,
140
+ or `vi.waitFor(` outside `vi.useFakeTimers()` needs a
141
+ `// flake-shape: <detector> — <reason>` header and `wallClockBudgetInclude`
142
+ membership (#2547). A pinned file whose count falls below its pin needs its
143
+ baseline tightened; a stale ceiling re-admits regrowth.
144
+ - **Platform skips and session-start resets.** Apply the `AGENTS.md` test
145
+ screens and the `SessionStartClassification` invariant.
146
+
147
+ ## Verification rounds
43
148
 
44
- ## Finding format
149
+ On `VERIFY <head-sha>` with a claims list: fetch the head, rebuild, re-run YOUR
150
+ original probes for every claimed fix (the fixer's tests are not proof), probe
151
+ each claim's edge, re-run the targeted suites, and read CI on that head. Attack
152
+ the round's changed lines as a fresh PR; fix rounds introduce defects at about
153
+ the rate they remove them.
45
154
 
46
- Order findings: `CRITICAL`, `HIGH`, `MEDIUM`, `LOW`, `NITPICK`.
155
+ - First spot-check one previous round's mutation on the new head (#2583).
156
+ - When a round retunes a threshold, tier, or predicate, drive the boundary
157
+ input the new condition cannot separate through the real seam: a cure for
158
+ over-triggering tends to ship silent under-triggering (#2983).
159
+ - "Passes locally now" does not prove a fix for a defect that involves a
160
+ deferred producer or another worker; it shows only non-reproduction (#2955).
161
+ Say so in the verdict.
162
+ - A prescription you write carries its own sweep of sibling call sites, or is
163
+ marked "shape, not verified across callers" (#2642). A prescription that
164
+ narrows a guard names its residual family and measured incidence (#3155). A
165
+ fixer who proves your prescription insufficient with a red is right; verify
166
+ the override on its merits.
167
+ - Judge every exemption a round adds (`DECLARED_EXCEPTIONS`,
168
+ `EXEMPT_SESSION_STATE_FILES`, a hook-await pin, a generation-guard exemption)
169
+ as silencing or registration, per entry, with the reason quoted (#2654).
170
+ - Route the round per principles §3 and `docs/pi-lens-merge-policy.md`
171
+ "Round routing", and say it in the verdict:
172
+ "contract-only; merge on green" when every finding is a body claim, comment,
173
+ literal, changelog line, or a prescribed remedy with its quoted red. A
174
+ verdict, guard direction, lifecycle hook, or failsafe keeps the verify.
47
175
 
48
- Each actionable finding contains:
176
+ ## Materiality
49
177
 
50
- 1. Severity and stable id.
51
- 2. File/symbol anchor.
52
- 3. Reproduction command or probe output.
53
- 4. Expected and observed behavior.
54
- 5. Root cause, cost, and concrete remedy.
55
- 6. Issue-acceptance or repository-standard classification.
178
+ - Do not report style preferences, hypothetical extensibility, minor
179
+ line-count savings, or anything lint, oxfmt, ast-grep, or the governance
180
+ sweeps enforce. Report the few materially useful findings per attack
181
+ dimension. A dramatically simpler seam is a named output, never a
182
+ fix-round demand.
183
+ - Security-class findings (injection, path traversal, secrets, unsafe
184
+ deserialization, redaction, trust boundary) need a demonstrated exploit
185
+ through a real input path; theoretical DoS, regex DoS, log spoofing, and rate
186
+ limiting count only when the PR claims them. Put an undemonstrated one under
187
+ `Could not verify` with what would have been needed.
56
188
 
57
- Severity requires a reproduced failure. A high-severity hypothesis without a
58
- failure scenario is at most medium.
189
+ ## Findings and verdict
59
190
 
60
- ## Verdict
191
+ Classify every finding as **fold** or **file** with a one-word reason
192
+ (`docs/pi-lens-subagent.md` "Follow-ups"). Order findings `CRITICAL`, `HIGH`,
193
+ `MEDIUM`, `LOW`, `NITPICK`. Each carries a stable id, a file or symbol anchor,
194
+ the reproduction command or probe output, expected and observed behaviour, the
195
+ root cause, cost, and a concrete remedy, and whether it is an
196
+ issue-acceptance or a repository-standard finding. Severity requires a
197
+ reproduced failure; a high-severity hypothesis without a failure scenario is
198
+ at most medium.
61
199
 
62
- Start with one verdict: `merge as-is`, `merge after fixes`, or `redesign`.
63
- Then include:
200
+ Start with one verdict: `merge-ready`, `needs changes`, `redesign`, or
201
+ `conflicted`. Then give spec-compliance and standards-compliance findings under
202
+ separate headings, red-run verification, test totals, CI judgement, and
203
+ merge-order interactions with other open PRs, plus:
64
204
 
65
205
  - `Could not verify`: every blocked or environment-limited check.
66
206
  - `Named output`: structural insight not closed by the probes.
67
- - `Disposition table`: each prior finding as `fixed`, `not fixed`, `new defect`,
68
- or `withdrawn (reason)`.
69
- - Cleared categories and exact-head identity.
207
+ - `Generalization verdict`: the population, excluded defaults, and verdict.
208
+ - `Disposition table`: each prior finding as `fixed`, `not fixed`,
209
+ `new defect`, or `withdrawn (reason)`.
210
+ - Cleared categories (one compact list) and exact-head identity.
70
211
 
71
- Use short, active, plain prose. Never merge, push, commit, or silently repair.
212
+ Use short, active, plain prose.