pi-lens 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (650) hide show
  1. package/CHANGELOG.md +1064 -0
  2. package/README.md +115 -25
  3. package/config/dependency-cruiser-eager-allowlist.json +6 -2
  4. package/dist/chunk-22AVIGXS.js +560 -0
  5. package/dist/chunk-27BBHSZC.js +106 -0
  6. package/dist/chunk-2BEMIWEW.js +51 -0
  7. package/dist/chunk-2EECBNC5.js +89 -0
  8. package/dist/chunk-34U7PLGE.js +23 -0
  9. package/dist/chunk-3I5QFT3N.js +181 -0
  10. package/dist/chunk-3MED75HT.js +37 -0
  11. package/dist/chunk-47D2BO4S.js +87 -0
  12. package/dist/chunk-4RERDEXR.js +348 -0
  13. package/dist/chunk-4W2PLC4J.js +27 -0
  14. package/dist/chunk-52H5B5TC.js +202 -0
  15. package/dist/chunk-54B42YRX.js +27 -0
  16. package/dist/chunk-5RXBNSW2.js +266 -0
  17. package/dist/chunk-5THXD6X5.js +201 -0
  18. package/dist/chunk-5W3R6LFT.js +24 -0
  19. package/dist/chunk-5ZEJHV35.js +341 -0
  20. package/dist/chunk-6P62QVEA.js +118 -0
  21. package/dist/chunk-6QIUX4EP.js +459 -0
  22. package/dist/chunk-6VCD4VKZ.js +78 -0
  23. package/dist/chunk-7F72PXY2.js +326 -0
  24. package/dist/chunk-7FBF7NPR.js +998 -0
  25. package/dist/chunk-7U2IDNXN.js +37 -0
  26. package/dist/chunk-ABBOA7UD.js +157 -0
  27. package/dist/chunk-AHDW3GPE.js +50 -0
  28. package/dist/chunk-AJ3QXTRQ.js +756 -0
  29. package/dist/chunk-AJVLWNFN.js +1610 -0
  30. package/dist/chunk-AJXODZY6.js +112 -0
  31. package/dist/chunk-ARFCXG7S.js +84 -0
  32. package/dist/chunk-AS44CFQ4.js +708 -0
  33. package/dist/chunk-AWE5TMPO.js +38 -0
  34. package/dist/chunk-B3I2UUT4.js +4692 -0
  35. package/dist/chunk-BRJKOBZP.js +331 -0
  36. package/dist/chunk-BW5KFIQC.js +59 -0
  37. package/dist/chunk-C2AUYXQH.js +149 -0
  38. package/dist/chunk-CGGAIP7J.js +29 -0
  39. package/dist/chunk-D6QS3U6M.js +30 -0
  40. package/dist/chunk-DFVMIKMQ.js +349 -0
  41. package/dist/chunk-DIULIWKU.js +169 -0
  42. package/dist/chunk-DQ2NZ7C4.js +2317 -0
  43. package/dist/chunk-E2WFBRHM.js +213 -0
  44. package/dist/chunk-E4MAEDPM.js +50 -0
  45. package/dist/chunk-EOKRQ3SA.js +30 -0
  46. package/dist/chunk-F3AU2TMM.js +2626 -0
  47. package/dist/chunk-F3P7VQ7H.js +170 -0
  48. package/dist/chunk-FC4RP4I2.js +12 -0
  49. package/dist/chunk-FJNKANOS.js +32 -0
  50. package/dist/chunk-GUOGVTCQ.js +146 -0
  51. package/dist/chunk-GVXA6CCE.js +18 -0
  52. package/dist/chunk-HHYAELLJ.js +2334 -0
  53. package/dist/chunk-HMFXILPV.js +83 -0
  54. package/dist/chunk-HVUZXSWK.js +421 -0
  55. package/dist/chunk-HWBZIGMJ.js +62 -0
  56. package/dist/chunk-I3R7GKDR.js +17 -0
  57. package/dist/chunk-I7SPGOWI.js +55 -0
  58. package/dist/chunk-IIXOAGHR.js +38 -0
  59. package/dist/chunk-IVP5KAB7.js +2250 -0
  60. package/dist/chunk-IXEBJSUE.js +22 -0
  61. package/dist/chunk-JOLITGCC.js +27 -0
  62. package/dist/chunk-K6VYLB2U.js +145 -0
  63. package/dist/chunk-LJDODBBZ.js +78 -0
  64. package/dist/chunk-LNAKEO63.js +78 -0
  65. package/dist/chunk-LSMJ6KBE.js +4139 -0
  66. package/dist/chunk-LW6XKDZQ.js +5565 -0
  67. package/dist/chunk-N3YQJI6O.js +899 -0
  68. package/dist/chunk-NABLC7W3.js +148 -0
  69. package/dist/chunk-NKOUFPQF.js +659 -0
  70. package/dist/chunk-NL5GLMFI.js +211 -0
  71. package/dist/chunk-NMABWBZN.js +327 -0
  72. package/dist/chunk-NTHH2J74.js +27 -0
  73. package/dist/chunk-NTUJEGDZ.js +59 -0
  74. package/dist/chunk-NXL4FFQQ.js +47 -0
  75. package/dist/chunk-NXPS2L6U.js +466 -0
  76. package/dist/chunk-O5WILGMI.js +42 -0
  77. package/dist/chunk-O6TQT6RI.js +48 -0
  78. package/dist/chunk-OAXNDZJ7.js +323 -0
  79. package/dist/chunk-ODEEOXPH.js +44 -0
  80. package/dist/chunk-OQGFCZJ4.js +4533 -0
  81. package/dist/chunk-ORTMY4Q4.js +282 -0
  82. package/dist/chunk-OS32RNR2.js +442 -0
  83. package/dist/chunk-PAK6IDME.js +189 -0
  84. package/dist/chunk-PWFHBTSF.js +406 -0
  85. package/dist/chunk-Q5U6FMDI.js +2352 -0
  86. package/dist/chunk-QOZXJ4NA.js +3364 -0
  87. package/dist/chunk-QYF5S6P6.js +45 -0
  88. package/dist/chunk-RIISMHKN.js +36 -0
  89. package/dist/chunk-RPD4ZSB7.js +25 -0
  90. package/dist/chunk-RPD5K5NC.js +79 -0
  91. package/dist/chunk-RUOG5D2C.js +262 -0
  92. package/dist/chunk-T4ERT73Y.js +599 -0
  93. package/dist/chunk-T6D4Q4AQ.js +54 -0
  94. package/dist/chunk-TGPXLY2J.js +391 -0
  95. package/dist/chunk-TLGFBM3F.js +12116 -0
  96. package/dist/chunk-TO6WL3GM.js +88 -0
  97. package/dist/chunk-TT22N74J.js +517 -0
  98. package/dist/chunk-TVN5N6GY.js +21216 -0
  99. package/dist/chunk-U3VGR4VU.js +308 -0
  100. package/dist/chunk-UK3CMEAL.js +1250 -0
  101. package/dist/chunk-UOPVJQ4N.js +103 -0
  102. package/dist/chunk-UXVNL3D7.js +23 -0
  103. package/dist/chunk-UY752QSN.js +45 -0
  104. package/dist/chunk-V5PXFSZK.js +188 -0
  105. package/dist/chunk-V7R425XG.js +398 -0
  106. package/dist/chunk-VCSRSYLF.js +81 -0
  107. package/dist/chunk-VD4JQCQC.js +162 -0
  108. package/dist/chunk-VDBPVIKD.js +62 -0
  109. package/dist/chunk-VHQLPIRJ.js +114 -0
  110. package/dist/chunk-VN2AXLEX.js +5414 -0
  111. package/dist/chunk-VNMT7C64.js +478 -0
  112. package/dist/chunk-WONERJTP.js +309 -0
  113. package/dist/chunk-XECLWQZN.js +85 -0
  114. package/dist/chunk-XIMYZ3JA.js +27 -0
  115. package/dist/chunk-XK4CIILI.js +144 -0
  116. package/dist/chunk-Y4T27COV.js +562 -0
  117. package/dist/chunk-YGVYKNSN.js +1860 -0
  118. package/dist/chunk-YLF3PPT5.js +308 -0
  119. package/dist/chunk-YSNFMJKN.js +14 -0
  120. package/dist/chunk-Z3CCVDUB.js +76 -0
  121. package/dist/chunk-Z54ZSOBZ.js +61 -0
  122. package/dist/chunk-ZAWW3AF6.js +97 -0
  123. package/dist/chunk-ZMOL6RQC.js +167 -0
  124. package/dist/index.js +16456 -8335
  125. package/dist/mcp/analyze-cli.js +186 -232
  126. package/dist/mcp/cli.js +137 -98
  127. package/dist/mcp/server.js +22589 -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 +3 -2
  135. package/docs/configuration.md +20 -1
  136. package/docs/environment-variables.md +52 -2
  137. package/docs/features.md +8 -4
  138. package/docs/globalconfig.md +1 -0
  139. package/docs/io-bridge-v2-migration.md +94 -0
  140. package/docs/lsp-capability-matrix.md +36 -4
  141. package/docs/lsp-idle-eviction.md +124 -0
  142. package/docs/mcp.md +21 -5
  143. package/docs/merge-queue-rollout.md +77 -0
  144. package/docs/pi-lens-fixer.md +156 -88
  145. package/docs/pi-lens-investigator.md +74 -26
  146. package/docs/pi-lens-merge-policy.md +694 -0
  147. package/docs/pi-lens-monitor.md +73 -7
  148. package/docs/pi-lens-retro.md +6 -4
  149. package/docs/pi-lens-reviewer.md +188 -48
  150. package/docs/pi-lens-subagent.md +246 -45
  151. package/docs/pi-lens-warden.md +18 -7
  152. package/docs/public-api-stability.md +55 -0
  153. package/docs/release-qa-baseline.md +84 -17
  154. package/docs/rfcs/3654-unified-io-bridge-v2.md +316 -0
  155. package/docs/servercapabilities.md +53 -49
  156. package/docs/settings.md +1 -0
  157. package/docs/usage.md +5 -1
  158. package/grammars/tree-sitter-bash.wasm +0 -0
  159. package/grammars/tree-sitter-bash.wasm.json +3 -3
  160. package/package.json +19 -7
  161. package/rules/ast-grep-rules/rule-tests/advisory-registry-subset-test.yml +41 -0
  162. package/rules/ast-grep-rules/rules/advisory-registry-subset.yml +50 -0
  163. package/scripts/analyze-pi-lens-logs.mjs +1275 -62
  164. package/scripts/download-grammars.js +5 -0
  165. package/scripts/grammars.lock.json +6 -1
  166. package/scripts/install-selftest.mjs +33 -34
  167. package/scripts/lib/host-provided-deps.mjs +13 -4
  168. package/scripts/lib/web-tree-sitter-dir.mjs +18 -0
  169. package/dist/clients/actionable-warnings-logger.js +0 -35
  170. package/dist/clients/actionable-warnings.js +0 -1610
  171. package/dist/clients/advisory-provenance.js +0 -593
  172. package/dist/clients/agent-behavior-client.js +0 -147
  173. package/dist/clients/agent-nudge.js +0 -325
  174. package/dist/clients/analysed-root.js +0 -1
  175. package/dist/clients/ast-grep-client.js +0 -731
  176. package/dist/clients/ast-grep-rule-manager.js +0 -146
  177. package/dist/clients/ast-grep-tool-logger.js +0 -118
  178. package/dist/clients/ast-grep-types.js +0 -10
  179. package/dist/clients/ast-grep-yaml-synth.js +0 -154
  180. package/dist/clients/atomic-write-staging.js +0 -75
  181. package/dist/clients/atomic-write.js +0 -189
  182. package/dist/clients/availability-probe-flight.js +0 -12
  183. package/dist/clients/bash-file-access.js +0 -1056
  184. package/dist/clients/biome-client.js +0 -357
  185. package/dist/clients/blocker-freshness.js +0 -837
  186. package/dist/clients/blocker-past-eof.js +0 -129
  187. package/dist/clients/bootstrap.js +0 -569
  188. package/dist/clients/bounded-cache.js +0 -190
  189. package/dist/clients/bounded-pid-file-lock.js +0 -202
  190. package/dist/clients/bounded-telemetry.js +0 -295
  191. package/dist/clients/build-identity.js +0 -95
  192. package/dist/clients/bundled-resource-health.js +0 -113
  193. package/dist/clients/bus-events-logger.js +0 -105
  194. package/dist/clients/bus-publish.js +0 -171
  195. package/dist/clients/cache/rule-cache.js +0 -190
  196. package/dist/clients/cache-manager.js +0 -524
  197. package/dist/clients/cache-observability.js +0 -1313
  198. package/dist/clients/call-graph.js +0 -852
  199. package/dist/clients/cargo-manifest.js +0 -422
  200. package/dist/clients/cascade-budget.js +0 -196
  201. package/dist/clients/cascade-format.js +0 -315
  202. package/dist/clients/cascade-logger.js +0 -31
  203. package/dist/clients/cascade-types.js +0 -9
  204. package/dist/clients/child-unref.js +0 -124
  205. package/dist/clients/code-quality-warnings.js +0 -286
  206. package/dist/clients/codebase-model.js +0 -173
  207. package/dist/clients/collateral-test-role.js +0 -40
  208. package/dist/clients/complexity-client.js +0 -462
  209. package/dist/clients/config-core/deny.js +0 -221
  210. package/dist/clients/config-core/index.js +0 -50
  211. package/dist/clients/config-core/merge.js +0 -357
  212. package/dist/clients/config-core/normalize.js +0 -340
  213. package/dist/clients/config-core/process-spec.js +0 -248
  214. package/dist/clients/config-core/provenance.js +0 -164
  215. package/dist/clients/config-core/records.js +0 -218
  216. package/dist/clients/config-core/resolve.js +0 -125
  217. package/dist/clients/config-core/safe-object.js +0 -78
  218. package/dist/clients/config-core/schema.js +0 -165
  219. package/dist/clients/config-diagnostic-codes.js +0 -285
  220. package/dist/clients/config-locations.js +0 -388
  221. package/dist/clients/config-resolve.js +0 -798
  222. package/dist/clients/config-schema.js +0 -251
  223. package/dist/clients/config-warn.js +0 -407
  224. package/dist/clients/console-guard-install.js +0 -26
  225. package/dist/clients/cooperative-budget.js +0 -42
  226. package/dist/clients/dead-code-client.js +0 -510
  227. package/dist/clients/dead-code-logger.js +0 -30
  228. package/dist/clients/deadline-utils.js +0 -280
  229. package/dist/clients/debug-handles.js +0 -211
  230. package/dist/clients/debug-heap.js +0 -174
  231. package/dist/clients/deferred-lsp-work.js +0 -106
  232. package/dist/clients/degradation-ledger.js +0 -426
  233. package/dist/clients/demoted-finding-render.js +0 -169
  234. package/dist/clients/dependency-checker.js +0 -885
  235. package/dist/clients/deps/ast-grep-napi.js +0 -22
  236. package/dist/clients/deps/js-yaml.js +0 -9
  237. package/dist/clients/deps/minimatch.js +0 -4
  238. package/dist/clients/deps/pi-tui.js +0 -14
  239. package/dist/clients/deps/typebox.js +0 -14
  240. package/dist/clients/deps/vscode-jsonrpc.js +0 -1
  241. package/dist/clients/deps/web-tree-sitter.js +0 -24
  242. package/dist/clients/diagnostic-dispositions.js +0 -630
  243. package/dist/clients/diagnostic-line-freshness.js +0 -305
  244. package/dist/clients/diagnostic-logger.js +0 -73
  245. package/dist/clients/diagnostic-tracker.js +0 -105
  246. package/dist/clients/diagnostics-publish.js +0 -230
  247. package/dist/clients/dispatch/ast-grep-catalog.js +0 -65
  248. package/dist/clients/dispatch/auxiliary-lsp.js +0 -343
  249. package/dist/clients/dispatch/collect-later-tier.js +0 -35
  250. package/dist/clients/dispatch/diagnostic-taxonomy.js +0 -66
  251. package/dist/clients/dispatch/dispatcher.js +0 -1269
  252. package/dist/clients/dispatch/fact-provider-types.js +0 -1
  253. package/dist/clients/dispatch/fact-rule-runner.js +0 -17
  254. package/dist/clients/dispatch/fact-runner.js +0 -30
  255. package/dist/clients/dispatch/fact-scheduler.js +0 -68
  256. package/dist/clients/dispatch/fact-store.js +0 -377
  257. package/dist/clients/dispatch/facts/comment-facts.js +0 -22
  258. package/dist/clients/dispatch/facts/file-content.js +0 -19
  259. package/dist/clients/dispatch/facts/function-facts.js +0 -348
  260. package/dist/clients/dispatch/facts/import-facts.js +0 -204
  261. package/dist/clients/dispatch/facts/tree-sitter-facts.js +0 -34
  262. package/dist/clients/dispatch/facts/try-catch-facts.js +0 -119
  263. package/dist/clients/dispatch/finding-policy.js +0 -339
  264. package/dist/clients/dispatch/indent-detect.js +0 -417
  265. package/dist/clients/dispatch/inline-suppressions.js +0 -89
  266. package/dist/clients/dispatch/integration.js +0 -2377
  267. package/dist/clients/dispatch/lazy.js +0 -11
  268. package/dist/clients/dispatch/pending-runner-findings.js +0 -87
  269. package/dist/clients/dispatch/plan.js +0 -278
  270. package/dist/clients/dispatch/priorities.js +0 -20
  271. package/dist/clients/dispatch/rule-id-normalize.js +0 -50
  272. package/dist/clients/dispatch/rule-ignores.js +0 -69
  273. package/dist/clients/dispatch/rule-policy.js +0 -135
  274. package/dist/clients/dispatch/rules/async-noise.js +0 -40
  275. package/dist/clients/dispatch/rules/async-unnecessary-wrapper.js +0 -27
  276. package/dist/clients/dispatch/rules/cors-wildcard.js +0 -54
  277. package/dist/clients/dispatch/rules/error-obscuring.js +0 -32
  278. package/dist/clients/dispatch/rules/error-swallowing.js +0 -31
  279. package/dist/clients/dispatch/rules/framework-call-noise.js +0 -67
  280. package/dist/clients/dispatch/rules/high-complexity.js +0 -72
  281. package/dist/clients/dispatch/rules/high-fan-out.js +0 -74
  282. package/dist/clients/dispatch/rules/high-import-coupling.js +0 -37
  283. package/dist/clients/dispatch/rules/missing-error-propagation.js +0 -62
  284. package/dist/clients/dispatch/rules/no-commented-credentials.js +0 -52
  285. package/dist/clients/dispatch/rules/pass-through-wrappers.js +0 -42
  286. package/dist/clients/dispatch/rules/placeholder-comments.js +0 -40
  287. package/dist/clients/dispatch/rules/unsafe-boundary.js +0 -126
  288. package/dist/clients/dispatch/runner-context.js +0 -52
  289. package/dist/clients/dispatch/runners/actionlint.js +0 -111
  290. package/dist/clients/dispatch/runners/ast-grep-napi.js +0 -1196
  291. package/dist/clients/dispatch/runners/biome-check.js +0 -296
  292. package/dist/clients/dispatch/runners/cpp-check.js +0 -219
  293. package/dist/clients/dispatch/runners/credo.js +0 -82
  294. package/dist/clients/dispatch/runners/cue-vet.js +0 -416
  295. package/dist/clients/dispatch/runners/dart-analyze.js +0 -183
  296. package/dist/clients/dispatch/runners/detekt.js +0 -176
  297. package/dist/clients/dispatch/runners/dotnet-build.js +0 -164
  298. package/dist/clients/dispatch/runners/elixir-check.js +0 -195
  299. package/dist/clients/dispatch/runners/eslint.js +0 -137
  300. package/dist/clients/dispatch/runners/fact-rules.js +0 -29
  301. package/dist/clients/dispatch/runners/fish-indent.js +0 -69
  302. package/dist/clients/dispatch/runners/gleam-check.js +0 -167
  303. package/dist/clients/dispatch/runners/go-vet.js +0 -104
  304. package/dist/clients/dispatch/runners/golangci-lint.js +0 -135
  305. package/dist/clients/dispatch/runners/hadolint.js +0 -91
  306. package/dist/clients/dispatch/runners/helm-lint.js +0 -171
  307. package/dist/clients/dispatch/runners/helm-render.js +0 -940
  308. package/dist/clients/dispatch/runners/htmlhint.js +0 -117
  309. package/dist/clients/dispatch/runners/index.js +0 -108
  310. package/dist/clients/dispatch/runners/javac.js +0 -99
  311. package/dist/clients/dispatch/runners/ktlint.js +0 -110
  312. package/dist/clients/dispatch/runners/lsp.js +0 -379
  313. package/dist/clients/dispatch/runners/markdownlint.js +0 -167
  314. package/dist/clients/dispatch/runners/mypy.js +0 -102
  315. package/dist/clients/dispatch/runners/oxlint.js +0 -414
  316. package/dist/clients/dispatch/runners/php-lint.js +0 -85
  317. package/dist/clients/dispatch/runners/phpstan.js +0 -120
  318. package/dist/clients/dispatch/runners/prisma-validate.js +0 -62
  319. package/dist/clients/dispatch/runners/psscriptanalyzer.js +0 -445
  320. package/dist/clients/dispatch/runners/pyright.js +0 -169
  321. package/dist/clients/dispatch/runners/rubocop.js +0 -99
  322. package/dist/clients/dispatch/runners/ruff.js +0 -88
  323. package/dist/clients/dispatch/runners/rust-clippy.js +0 -256
  324. package/dist/clients/dispatch/runners/shellcheck.js +0 -173
  325. package/dist/clients/dispatch/runners/shfmt.js +0 -102
  326. package/dist/clients/dispatch/runners/spellcheck.js +0 -128
  327. package/dist/clients/dispatch/runners/spotbugs.js +0 -259
  328. package/dist/clients/dispatch/runners/sqlfluff.js +0 -183
  329. package/dist/clients/dispatch/runners/stylelint.js +0 -166
  330. package/dist/clients/dispatch/runners/swiftlint.js +0 -163
  331. package/dist/clients/dispatch/runners/taplo.js +0 -174
  332. package/dist/clients/dispatch/runners/terragrunt.js +0 -168
  333. package/dist/clients/dispatch/runners/tflint.js +0 -125
  334. package/dist/clients/dispatch/runners/tree-sitter.js +0 -643
  335. package/dist/clients/dispatch/runners/trivy-config.js +0 -253
  336. package/dist/clients/dispatch/runners/utils/availability-policy.js +0 -496
  337. package/dist/clients/dispatch/runners/utils/candidate-probe.js +0 -90
  338. package/dist/clients/dispatch/runners/utils/diagnostic-parsers.js +0 -95
  339. package/dist/clients/dispatch/runners/utils/lazy-installer.js +0 -274
  340. package/dist/clients/dispatch/runners/utils/runner-helpers.js +0 -1701
  341. package/dist/clients/dispatch/runners/utils/spawn-outcome.js +0 -101
  342. package/dist/clients/dispatch/runners/utils/tool-failure.js +0 -235
  343. package/dist/clients/dispatch/runners/utils/toolchain-availability.js +0 -169
  344. package/dist/clients/dispatch/runners/utils.js +0 -15
  345. package/dist/clients/dispatch/runners/vale.js +0 -128
  346. package/dist/clients/dispatch/runners/yaml-rule-parser.js +0 -242
  347. package/dist/clients/dispatch/runners/yamllint.js +0 -95
  348. package/dist/clients/dispatch/runners/zig-check.js +0 -79
  349. package/dist/clients/dispatch/suppress-writer.js +0 -79
  350. package/dist/clients/dispatch/tool-profile.js +0 -30
  351. package/dist/clients/dispatch/types.js +0 -21
  352. package/dist/clients/dispatch/utils/format-utils.js +0 -45
  353. package/dist/clients/dispatch/utils/lsp-diagnostics.js +0 -35
  354. package/dist/clients/disposition-logger.js +0 -32
  355. package/dist/clients/disposition-publish.js +0 -124
  356. package/dist/clients/durable-store.js +0 -97
  357. package/dist/clients/effective-config.js +0 -415
  358. package/dist/clients/env-utils.js +0 -83
  359. package/dist/clients/error-class.js +0 -23
  360. package/dist/clients/eval-timestamp.js +0 -17
  361. package/dist/clients/event-loop-hold.js +0 -274
  362. package/dist/clients/event-loop-monitor.js +0 -250
  363. package/dist/clients/extension-log.js +0 -504
  364. package/dist/clients/extension-mode.js +0 -73
  365. package/dist/clients/feature-hints.js +0 -103
  366. package/dist/clients/file-kinds.js +0 -412
  367. package/dist/clients/file-role.js +0 -134
  368. package/dist/clients/file-time.js +0 -160
  369. package/dist/clients/file-utils.js +0 -1032
  370. package/dist/clients/finding-delivery-gate.js +0 -494
  371. package/dist/clients/finding-identity.js +0 -88
  372. package/dist/clients/fix-worklog.js +0 -103
  373. package/dist/clients/format-events-publish.js +0 -343
  374. package/dist/clients/format-service.js +0 -222
  375. package/dist/clients/formatters-lazy.js +0 -9
  376. package/dist/clients/formatters.js +0 -2032
  377. package/dist/clients/freshness-cadence.js +0 -17
  378. package/dist/clients/freshness.js +0 -38
  379. package/dist/clients/generated-artifacts.js +0 -394
  380. package/dist/clients/generation-guard.js +0 -215
  381. package/dist/clients/git-guard.js +0 -1136
  382. package/dist/clients/git-tracked-ignore.js +0 -243
  383. package/dist/clients/gitleaks-client.js +0 -509
  384. package/dist/clients/go-client.js +0 -104
  385. package/dist/clients/govulncheck-client.js +0 -605
  386. package/dist/clients/gradle-ktfmt-style.js +0 -348
  387. package/dist/clients/grammar-source.js +0 -465
  388. package/dist/clients/gzip-stage-write.js +0 -135
  389. package/dist/clients/hashline-anchor.js +0 -424
  390. package/dist/clients/hook-budgets.js +0 -76
  391. package/dist/clients/host-edit-normalize.js +0 -140
  392. package/dist/clients/host-ports.js +0 -39
  393. package/dist/clients/indent-retarget.js +0 -154
  394. package/dist/clients/inline-blocker-dispositions.js +0 -186
  395. package/dist/clients/install-diagnostics.js +0 -156
  396. package/dist/clients/installer/index.js +0 -5416
  397. package/dist/clients/installer/managed-tool-refresh-session.js +0 -58
  398. package/dist/clients/installer/managed-tool-refresh.js +0 -783
  399. package/dist/clients/instance-reaper-state.js +0 -7
  400. package/dist/clients/instance-reaper.js +0 -1137
  401. package/dist/clients/instance-registry-lock.js +0 -145
  402. package/dist/clients/instance-registry.js +0 -773
  403. package/dist/clients/jscpd-client.js +0 -378
  404. package/dist/clients/json-cache-read.js +0 -65
  405. package/dist/clients/knip-client.js +0 -788
  406. package/dist/clients/language-policy.js +0 -252
  407. package/dist/clients/language-profile.js +0 -361
  408. package/dist/clients/language-registry.js +0 -603
  409. package/dist/clients/latency-logger.js +0 -727
  410. package/dist/clients/lazy-import.js +0 -21
  411. package/dist/clients/ledger-bounds.js +0 -54
  412. package/dist/clients/lens-config.js +0 -404
  413. package/dist/clients/lens-engine.js +0 -358
  414. package/dist/clients/lens-events.js +0 -125
  415. package/dist/clients/lens-flag-registry.js +0 -467
  416. package/dist/clients/lens-map.js +0 -1156
  417. package/dist/clients/live-bus-emitter.js +0 -74
  418. package/dist/clients/log-cleanup.js +0 -222
  419. package/dist/clients/lsp/aggregation.js +0 -178
  420. package/dist/clients/lsp/cascade-tier.js +0 -421
  421. package/dist/clients/lsp/client.js +0 -4593
  422. package/dist/clients/lsp/config.js +0 -691
  423. package/dist/clients/lsp/content-limits.js +0 -41
  424. package/dist/clients/lsp/diagnostic-binding.js +0 -225
  425. package/dist/clients/lsp/document-drift.js +0 -467
  426. package/dist/clients/lsp/edits.js +0 -1219
  427. package/dist/clients/lsp/index.js +0 -8305
  428. package/dist/clients/lsp/inferred-project.js +0 -216
  429. package/dist/clients/lsp/jvm-runtime.js +0 -298
  430. package/dist/clients/lsp/language.js +0 -63
  431. package/dist/clients/lsp/launch.js +0 -746
  432. package/dist/clients/lsp/lombok.js +0 -158
  433. package/dist/clients/lsp/path-utils.js +0 -5
  434. package/dist/clients/lsp/pending-aux-coverage.js +0 -251
  435. package/dist/clients/lsp/position-encoding.js +0 -61
  436. package/dist/clients/lsp/ruby-drive-dirs.js +0 -83
  437. package/dist/clients/lsp/server.js +0 -3290
  438. package/dist/clients/lsp/session-roots.js +0 -192
  439. package/dist/clients/lsp/spawn-history.js +0 -17
  440. package/dist/clients/lsp/sync-kind.js +0 -56
  441. package/dist/clients/lsp/tsserver-sync.js +0 -332
  442. package/dist/clients/lsp/wait-policy/capability-snapshot.js +0 -1
  443. package/dist/clients/lsp/wait-policy/classification.js +0 -85
  444. package/dist/clients/lsp/wait-policy/index.js +0 -10
  445. package/dist/clients/lsp/wait-policy/strategies.js +0 -392
  446. package/dist/clients/lsp/watch-queue.js +0 -61
  447. package/dist/clients/lsp/workspace-diagnostics-cache.js +0 -639
  448. package/dist/clients/lsp/workspace-diagnostics-session.js +0 -30
  449. package/dist/clients/lsp/workspace-sweep-hold.js +0 -184
  450. package/dist/clients/lsp-budget.js +0 -186
  451. package/dist/clients/lsp-document-symbols.js +0 -110
  452. package/dist/clients/lsp-lazy.js +0 -9
  453. package/dist/clients/lsp-mutation.js +0 -396
  454. package/dist/clients/lsp-status.js +0 -59
  455. package/dist/clients/map-with-concurrency.js +0 -40
  456. package/dist/clients/mcp/analyze.js +0 -420
  457. package/dist/clients/mcp/host-shim.js +0 -31
  458. package/dist/clients/mcp/ipc.js +0 -523
  459. package/dist/clients/mcp/review.js +0 -197
  460. package/dist/clients/mcp/session.js +0 -412
  461. package/dist/clients/memory-sampler.js +0 -208
  462. package/dist/clients/message-end-attribution.js +0 -30
  463. package/dist/clients/metrics-client.js +0 -107
  464. package/dist/clients/metrics-history.js +0 -327
  465. package/dist/clients/middle-man-analysis.js +0 -263
  466. package/dist/clients/model-provider.js +0 -53
  467. package/dist/clients/module-report-lsp.js +0 -189
  468. package/dist/clients/module-report.js +0 -2150
  469. package/dist/clients/mutating-tool.js +0 -651
  470. package/dist/clients/mutation-attribution.js +0 -368
  471. package/dist/clients/mutation-bridge.js +0 -240
  472. package/dist/clients/ndjson-logger.js +0 -734
  473. package/dist/clients/observed-mutation-sources.js +0 -101
  474. package/dist/clients/observed-mutation.js +0 -1253
  475. package/dist/clients/oldtext-autopatch.js +0 -128
  476. package/dist/clients/opaque-mutation-scan.js +0 -496
  477. package/dist/clients/opengrep-client.js +0 -333
  478. package/dist/clients/opengrep-config.js +0 -76
  479. package/dist/clients/package-manager.js +0 -607
  480. package/dist/clients/package-root.js +0 -38
  481. package/dist/clients/partial-edit-apply.js +0 -439
  482. package/dist/clients/path-attribution-telemetry.js +0 -43
  483. package/dist/clients/path-keyed-map.js +0 -108
  484. package/dist/clients/path-utils.js +0 -1244
  485. package/dist/clients/performance-report.js +0 -331
  486. package/dist/clients/persist-debounce.js +0 -70
  487. package/dist/clients/persistent-reverify.js +0 -271
  488. package/dist/clients/php-cs-fixer-config.js +0 -119
  489. package/dist/clients/pipeline.js +0 -1480
  490. package/dist/clients/post-autofix-notice.js +0 -37
  491. package/dist/clients/print-mode.js +0 -21
  492. package/dist/clients/probe-home-state.js +0 -228
  493. package/dist/clients/process-bridge.js +0 -66
  494. package/dist/clients/process-singletons.js +0 -210
  495. package/dist/clients/process-snapshot.js +0 -68
  496. package/dist/clients/project-changes.js +0 -181
  497. package/dist/clients/project-conventions.js +0 -171
  498. package/dist/clients/project-diagnostics/cache.js +0 -137
  499. package/dist/clients/project-diagnostics/extractors.js +0 -109
  500. package/dist/clients/project-diagnostics/fresh-fetch.js +0 -668
  501. package/dist/clients/project-diagnostics/runner-adapters/call-graph-impact.js +0 -118
  502. package/dist/clients/project-diagnostics/runner-adapters/dead-code.js +0 -47
  503. package/dist/clients/project-diagnostics/runner-adapters/gitleaks.js +0 -40
  504. package/dist/clients/project-diagnostics/runner-adapters/govulncheck.js +0 -34
  505. package/dist/clients/project-diagnostics/runner-adapters/jscpd.js +0 -38
  506. package/dist/clients/project-diagnostics/runner-adapters/knip.js +0 -47
  507. package/dist/clients/project-diagnostics/runner-adapters/madge.js +0 -48
  508. package/dist/clients/project-diagnostics/runner-adapters/opengrep.js +0 -40
  509. package/dist/clients/project-diagnostics/runner-adapters/runner-findings.js +0 -127
  510. package/dist/clients/project-diagnostics/runner-adapters/trivy.js +0 -81
  511. package/dist/clients/project-diagnostics/scanner.js +0 -520
  512. package/dist/clients/project-diagnostics/types.js +0 -1
  513. package/dist/clients/project-lens-config.js +0 -807
  514. package/dist/clients/project-report.js +0 -701
  515. package/dist/clients/project-scale.js +0 -237
  516. package/dist/clients/project-scan-policy.js +0 -11
  517. package/dist/clients/project-snapshot-fingerprint.js +0 -48
  518. package/dist/clients/project-snapshot-persist-worker.js +0 -20
  519. package/dist/clients/project-snapshot.js +0 -1653
  520. package/dist/clients/project-trust.js +0 -181
  521. package/dist/clients/python-environment.js +0 -217
  522. package/dist/clients/python-provenance.js +0 -639
  523. package/dist/clients/quiet-window-config.js +0 -47
  524. package/dist/clients/quiet-window.js +0 -236
  525. package/dist/clients/read-bridge.js +0 -139
  526. package/dist/clients/read-expansion.js +0 -266
  527. package/dist/clients/read-guard-logger.js +0 -251
  528. package/dist/clients/read-guard-tool-lines.js +0 -1306
  529. package/dist/clients/read-guard.js +0 -1561
  530. package/dist/clients/recent-touches.js +0 -240
  531. package/dist/clients/redact/secrets.js +0 -449
  532. package/dist/clients/resource-sampler.js +0 -628
  533. package/dist/clients/reverse-deps.js +0 -270
  534. package/dist/clients/review-graph/builder.js +0 -5126
  535. package/dist/clients/review-graph/format.js +0 -33
  536. package/dist/clients/review-graph/git-identity.js +0 -163
  537. package/dist/clients/review-graph/import-resolvers.js +0 -481
  538. package/dist/clients/review-graph/persist-worker.js +0 -10
  539. package/dist/clients/review-graph/query.js +0 -244
  540. package/dist/clients/review-graph/revision-drift.js +0 -21
  541. package/dist/clients/review-graph/service.js +0 -96
  542. package/dist/clients/review-graph/shared-extraction-ir.js +0 -82
  543. package/dist/clients/review-graph/symbol-id.js +0 -103
  544. package/dist/clients/review-graph/tsconfig-paths.js +0 -299
  545. package/dist/clients/review-graph/types.js +0 -1
  546. package/dist/clients/review-graph/workspace-modules.js +0 -449
  547. package/dist/clients/review-graph-logger.js +0 -81
  548. package/dist/clients/ruff-client.js +0 -179
  549. package/dist/clients/rules-scanner.js +0 -131
  550. package/dist/clients/run-duration.js +0 -55
  551. package/dist/clients/runtime-agent-end.js +0 -746
  552. package/dist/clients/runtime-config.js +0 -77
  553. package/dist/clients/runtime-context.js +0 -211
  554. package/dist/clients/runtime-coordinator.js +0 -1324
  555. package/dist/clients/runtime-session.js +0 -2485
  556. package/dist/clients/runtime-tool-call.js +0 -1295
  557. package/dist/clients/runtime-tool-result.js +0 -2049
  558. package/dist/clients/runtime-turn.js +0 -3767
  559. package/dist/clients/rust-client.js +0 -97
  560. package/dist/clients/safe-spawn.js +0 -2357
  561. package/dist/clients/sanitize.js +0 -286
  562. package/dist/clients/scan-utils.js +0 -25
  563. package/dist/clients/scratch-tree-policy.js +0 -165
  564. package/dist/clients/search-read-registration.js +0 -94
  565. package/dist/clients/secret-findings.js +0 -114
  566. package/dist/clients/security-scan-client.js +0 -352
  567. package/dist/clients/session-event-guard.js +0 -297
  568. package/dist/clients/session-lifecycle.js +0 -484
  569. package/dist/clients/session-start-observability.js +0 -94
  570. package/dist/clients/session-state-store.js +0 -101
  571. package/dist/clients/session-summary.js +0 -15
  572. package/dist/clients/sessionstart-logger.js +0 -27
  573. package/dist/clients/sg-runner.js +0 -876
  574. package/dist/clients/sgconfig.js +0 -347
  575. package/dist/clients/shared-checkout-guard.js +0 -338
  576. package/dist/clients/single-flight.js +0 -158
  577. package/dist/clients/situational-tool-telemetry.js +0 -108
  578. package/dist/clients/skills-resolver.js +0 -141
  579. package/dist/clients/slow-fs.js +0 -138
  580. package/dist/clients/smells-rollup.js +0 -231
  581. package/dist/clients/source-filter.js +0 -596
  582. package/dist/clients/source-walker.js +0 -211
  583. package/dist/clients/spawn-output-cap.js +0 -120
  584. package/dist/clients/spawn-timeout-cooldown.js +0 -110
  585. package/dist/clients/stale-marker.js +0 -17
  586. package/dist/clients/startup-scan.js +0 -400
  587. package/dist/clients/startup-timing.js +0 -130
  588. package/dist/clients/string-utils.js +0 -33
  589. package/dist/clients/subagent-mode.js +0 -111
  590. package/dist/clients/symbol-containment.js +0 -24
  591. package/dist/clients/symbol-types.js +0 -5
  592. package/dist/clients/test-runner-client.js +0 -2507
  593. package/dist/clients/test-runner-delivery.js +0 -287
  594. package/dist/clients/todo-scanner.js +0 -229
  595. package/dist/clients/tool-agreement.js +0 -423
  596. package/dist/clients/tool-config.js +0 -249
  597. package/dist/clients/tool-cwd.js +0 -270
  598. package/dist/clients/tool-definition.js +0 -47
  599. package/dist/clients/tool-event.js +0 -105
  600. package/dist/clients/tool-policy.js +0 -2755
  601. package/dist/clients/tool-probe.js +0 -53
  602. package/dist/clients/tool-render.js +0 -156
  603. package/dist/clients/tool-set-policy.js +0 -118
  604. package/dist/clients/tree-sitter-cache.js +0 -364
  605. package/dist/clients/tree-sitter-client.js +0 -4195
  606. package/dist/clients/tree-sitter-logger.js +0 -100
  607. package/dist/clients/tree-sitter-navigator.js +0 -269
  608. package/dist/clients/tree-sitter-query-loader.js +0 -569
  609. package/dist/clients/tree-sitter-shared.js +0 -158
  610. package/dist/clients/tree-sitter-symbol-extractor.js +0 -1265
  611. package/dist/clients/trivy-client.js +0 -467
  612. package/dist/clients/tui-fit.js +0 -50
  613. package/dist/clients/turn-context.js +0 -52
  614. package/dist/clients/turn-end/lane.js +0 -51
  615. package/dist/clients/turn-end/lanes/govulncheck.js +0 -112
  616. package/dist/clients/turn-end/lanes/secrets.js +0 -204
  617. package/dist/clients/turn-summary-render.js +0 -72
  618. package/dist/clients/turn-summary.js +0 -132
  619. package/dist/clients/typos-config.js +0 -29
  620. package/dist/clients/user-notify.js +0 -51
  621. package/dist/clients/vanished-instance-marker.js +0 -57
  622. package/dist/clients/warm-attach.js +0 -305
  623. package/dist/clients/widget-state.js +0 -1808
  624. package/dist/clients/word-index-logger.js +0 -49
  625. package/dist/clients/word-index-store.js +0 -459
  626. package/dist/clients/word-index.js +0 -2080
  627. package/dist/clients/workspace-topology.js +0 -443
  628. package/dist/clients/write-ordering-guard.js +0 -65
  629. package/dist/clients/zizmor-config.js +0 -340
  630. package/dist/i18n.js +0 -69
  631. package/dist/mcp/build-staleness.js +0 -124
  632. package/dist/scripts/lib/process-scan.mjs +0 -583
  633. package/dist/scripts/lib/skills-predicate.mjs +0 -129
  634. package/dist/scripts/lib/web-tree-sitter-dir.mjs +0 -123
  635. package/dist/tools/activate-tools.js +0 -87
  636. package/dist/tools/ast-grep-outline.js +0 -137
  637. package/dist/tools/ast-grep-replace.js +0 -244
  638. package/dist/tools/ast-grep-search.js +0 -762
  639. package/dist/tools/effective-config.js +0 -90
  640. package/dist/tools/lens-diagnostic-mark.js +0 -375
  641. package/dist/tools/lens-diagnostics.js +0 -2571
  642. package/dist/tools/lsp-diagnostics.js +0 -1745
  643. package/dist/tools/lsp-navigation.js +0 -1367
  644. package/dist/tools/lsp-structured-output.js +0 -294
  645. package/dist/tools/module-report.js +0 -382
  646. package/dist/tools/project-report.js +0 -86
  647. package/dist/tools/render-compact.js +0 -374
  648. package/dist/tools/scan-progress.js +0 -53
  649. package/dist/tools/shared.js +0 -29
  650. package/dist/tools/symbol-search.js +0 -155
@@ -4,10 +4,37 @@ 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.
33
+ - samplerDurationMs measures the sampler's own record-assembly wall time,
34
+ excluding the surrounding turn.
35
+
36
+ All fields are in the existing record and are O(1) reads or latest-value
37
+ snapshots; no additional telemetry sink is created.
11
38
 
12
39
  ## Inputs
13
40
 
@@ -49,7 +76,47 @@ inherits. This contract adds the standing readout.
49
76
  6. **Backlogs**: `lsp_document_drift` rows by disposition, files affected,
50
77
  `driftAgeMs` p50/p95/max; `agent_end_deferred_mutation_drain` durations and
51
78
  coalesced path counts; `deferred_format_file` runs with `changed:true`
52
- versus total.
79
+ versus total. A formatter that never settles is visible only as an
80
+ anti-join (#3828): a `deferred_format_post_exit_resync` row with
81
+ `outcome:"abandoned"` (beside the `hook-await-exceeded` degradation
82
+ `off_hook:deferred-format-post-exit-resync`) and no
83
+ `deferred_format_late_resync` row on the same `filePath` afterwards. Report
84
+ the count of such files. A late row names what happened to the file
85
+ (#3828 r3): `resynced` is the healthy end of the chain; `unheld`,
86
+ `no-service` and `vanished` had nothing to sync; `deferred` is still queued
87
+ for the next drift pass; `failed` did not land. The in-band
88
+ (`--immediate-format`) caller writes the same rows as `inband_format_late_resync`
89
+ (#3858) with the same outcomes. Both callers write one
90
+ `format_late_resync_chained` row (`metadata.which`: `inband` or `deferred`)
91
+ when the give-up chains the late resync (#3873), so a give-up is countable by
92
+ `filePath` even for a formatter that never settles or an Escape; a chained
93
+ file with no later `*_format_late_resync` row on the same `filePath` is the
94
+ anti-join to report.
95
+ **Session decisions** (#3873; each row is one lifecycle event, none is per
96
+ occurrence in a loop): `session_handoff_slot` (`op`: `stashed`, `replaced`,
97
+ `taken`, `key-mismatch-left` (once per stale slot), `forwarded`,
98
+ `unconsumed-at-exit`; `by`,
99
+ `reason`, `keyHash`, `storeNames`, `ageMs`), `session_handoff_adopt` (one
100
+ per primary start: `tried[]` with `source`, `found`, `version`, `ageMs`,
101
+ `storeNames`, and `chosen`), `session_store_action` (one per declared store
102
+ per primary start: `action` `adopt`/`reset`/`skip`, `payloadPresent`,
103
+ `itemsIn`/`itemsKept`/`itemsDropped`), `session_scope_transition` with the
104
+ `end` (a scope superseded without a shutdown) and `demote` (a start in a
105
+ replacement gap that is not the successor the shutdown named: a subagent
106
+ that binds in the gap is one, a real successor an interrupting reload
107
+ displaced is another; a subagent beside a live primary writes none)
108
+ transitions,
109
+ `session_end_fence_rollup` (one per primary shutdown: `sources[]` with
110
+ `guarded` and `dropped`, plus totals). Read `read_guard_branch_retained` with
111
+ `payloadReads`: `kept 0, dropped 0` is a missing payload when `payloadReads`
112
+ is `null`, an empty read set at `0`, and an ignored payload when it is above
113
+ 0 beside a `payloadVersion` that is not the current one.
114
+ `session_start_total` carries `basis`, `gapMs` and `lineageMatch`;
115
+ `agent_nudge` carries `fileKeys` (hash8), `originSessionIds`, `scopeId` and
116
+ `queueEpoch`, so one touch delivered in three drains is three epochs;
117
+ a no-client `lsp_touch_file` carries `candidates[]` (`serverId`, `rooted`,
118
+ `clientFound`, `generation`) for the file's primary servers only, 8 at most;
119
+ 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
120
  7. **Timeouts**: `lsp_diagnostics_timeout`, `lsp_nav_request_timeout`,
54
121
  `lsp_client_wait_timeout` counts with `serverIds`/`source`.
55
122
  8. **Delta**: for each of the above, the change since the previous readout,
@@ -69,8 +136,7 @@ inherits. This contract adds the standing readout.
69
136
 
70
137
  - Premise first: before naming a constant or a seam, read the code that owns
71
138
  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.
139
+ `clients/lsp/document-drift.ts`).
74
140
  - Bounded output: the readout is one comment or one file. Never one line per
75
141
  row of the log. Quote at most three raw rows, each cut at 300 characters.
76
142
  - 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,211 @@
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. A
104
+ green `TLA+ models` run over an unchanged model proves nothing about the new
105
+ code.
106
+ - **Red-proof audit.** A claimed red without its quoted transcript is a finding
107
+ of its own; reproduce it (step 3).
108
+ - **Quoted-evidence audit.** Diff every CI line the body quotes against the job
109
+ log on the exact head. A line the log never printed is an integrity finding,
110
+ reported first.
111
+ - **Pushed observability.** The `Observability` answer names a phase or ledger
112
+ kind in a stream monitors read without asking (`logLatency`,
113
+ `logSessionStart`, the degradation ledger), and the diff contains that
114
+ literal. A pull-only surface is a gap (#2513, #2526). A new or replaced seam
115
+ also needs a success-path record.
116
+ - **Record read-back (#3875).** Every new decision branch on a session,
117
+ lifecycle or delivery seam names its record (sink plus kind), cites an
118
+ existing one, or says `none: <reason>` naming each file. A test reads the
119
+ record back through the real seam (the diff's own, or the cited record's
120
+ existing one); `none:` has no record to read, so the reviewer checks the
121
+ reason instead. The lint is a prompt, never proof. Demotion: the first
122
+ refusal on a merged PR that its reviewer judges not a decision moves the
123
+ seam refusal to a `::notice::` advisory until a fixture pins that shape;
124
+ the orchestrator counts the ten-green promotion streak (`pr-metadata.yml`)
125
+ from each merged PR's `PR body (advisory)` row in `ci-verdict`
126
+ (recurrence: #3873).
127
+ - **Changelog fragment.** Front matter `section:` is one of Added, Changed,
128
+ Deprecated, Removed, Fixed, or Security, and `audience:` is `user` or
129
+ `internal` (`user` = a pi-lens user or agent can observe it; `internal` = CI,
130
+ tests, `formal/`, contributor docs, orchestration, refactors), followed by
131
+ exactly one top-level entry. A missing or unknown `audience` is an error.
132
+ Bullet style and a bold or plain title are the author's choice
133
+ (`.changelog/README.md`). `CHANGELOG.md` changes only in the rollups
134
+ `npm run changelog:release` generates.
135
+ - **Sort comparators.** Every new `.sort()` or `.toSorted()` has an explicit
136
+ comparator (SonarCloud S2871); an order that feeds an identity (dedupe key,
137
+ cache key, hash input) compares code units, not `localeCompare`.
138
+ - **Flake shapes.** A new real spawn, elapsed-time assertion, raw timer wait,
139
+ or `vi.waitFor(` outside `vi.useFakeTimers()` needs a
140
+ `// flake-shape: <detector> — <reason>` header and `wallClockBudgetInclude`
141
+ membership (#2547). A pinned file whose count falls below its pin needs its
142
+ baseline tightened; a stale ceiling re-admits regrowth.
143
+ - **Platform skips and session-start resets.** Apply the `AGENTS.md` test
144
+ screens and the `SessionStartClassification` invariant.
145
+
146
+ ## Verification rounds
43
147
 
44
- ## Finding format
148
+ On `VERIFY <head-sha>` with a claims list: fetch the head, rebuild, re-run YOUR
149
+ original probes for every claimed fix (the fixer's tests are not proof), probe
150
+ each claim's edge, re-run the targeted suites, and read CI on that head. Attack
151
+ the round's changed lines as a fresh PR; fix rounds introduce defects at about
152
+ the rate they remove them.
45
153
 
46
- Order findings: `CRITICAL`, `HIGH`, `MEDIUM`, `LOW`, `NITPICK`.
154
+ - First spot-check one previous round's mutation on the new head (#2583).
155
+ - When a round retunes a threshold, tier, or predicate, drive the boundary
156
+ input the new condition cannot separate through the real seam: a cure for
157
+ over-triggering tends to ship silent under-triggering (#2983).
158
+ - "Passes locally now" does not prove a fix for a defect that involves a
159
+ deferred producer or another worker; it shows only non-reproduction (#2955).
160
+ Say so in the verdict.
161
+ - A prescription you write carries its own sweep of sibling call sites, or is
162
+ marked "shape, not verified across callers" (#2642). A prescription that
163
+ narrows a guard names its residual family and measured incidence (#3155). A
164
+ fixer who proves your prescription insufficient with a red is right; verify
165
+ the override on its merits.
166
+ - Judge every exemption a round adds (`DECLARED_EXCEPTIONS`,
167
+ `EXEMPT_SESSION_STATE_FILES`, a hook-await pin, a generation-guard exemption)
168
+ as silencing or registration, per entry, with the reason quoted (#2654).
169
+ - Route the round per principles §3 and `docs/pi-lens-merge-policy.md`
170
+ "Round routing", and say it in the verdict:
171
+ "contract-only; merge on green" when every finding is a body claim, comment,
172
+ literal, changelog line, or a prescribed remedy with its quoted red. A
173
+ verdict, guard direction, lifecycle hook, or failsafe keeps the verify.
47
174
 
48
- Each actionable finding contains:
175
+ ## Materiality
49
176
 
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.
177
+ - Do not report style preferences, hypothetical extensibility, minor
178
+ line-count savings, or anything lint, oxfmt, ast-grep, or the governance
179
+ sweeps enforce. Report the few materially useful findings per attack
180
+ dimension. A dramatically simpler seam is a named output, never a
181
+ fix-round demand.
182
+ - Security-class findings (injection, path traversal, secrets, unsafe
183
+ deserialization, redaction, trust boundary) need a demonstrated exploit
184
+ through a real input path; theoretical DoS, regex DoS, log spoofing, and rate
185
+ limiting count only when the PR claims them. Put an undemonstrated one under
186
+ `Could not verify` with what would have been needed.
56
187
 
57
- Severity requires a reproduced failure. A high-severity hypothesis without a
58
- failure scenario is at most medium.
188
+ ## Findings and verdict
59
189
 
60
- ## Verdict
190
+ Classify every finding as **fold** or **file** with a one-word reason
191
+ (`docs/pi-lens-subagent.md` "Follow-ups"). Order findings `CRITICAL`, `HIGH`,
192
+ `MEDIUM`, `LOW`, `NITPICK`. Each carries a stable id, a file or symbol anchor,
193
+ the reproduction command or probe output, expected and observed behaviour, the
194
+ root cause, cost, and a concrete remedy, and whether it is an
195
+ issue-acceptance or a repository-standard finding. Severity requires a
196
+ reproduced failure; a high-severity hypothesis without a failure scenario is
197
+ at most medium.
61
198
 
62
- Start with one verdict: `merge as-is`, `merge after fixes`, or `redesign`.
63
- Then include:
199
+ Start with one verdict: `merge-ready`, `needs changes`, `redesign`, or
200
+ `conflicted`. Then give spec-compliance and standards-compliance findings under
201
+ separate headings, red-run verification, test totals, CI judgement, and
202
+ merge-order interactions with other open PRs, plus:
64
203
 
65
204
  - `Could not verify`: every blocked or environment-limited check.
66
205
  - `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.
206
+ - `Generalization verdict`: the population, excluded defaults, and verdict.
207
+ - `Disposition table`: each prior finding as `fixed`, `not fixed`,
208
+ `new defect`, or `withdrawn (reason)`.
209
+ - Cleared categories (one compact list) and exact-head identity.
70
210
 
71
- Use short, active, plain prose. Never merge, push, commit, or silently repair.
211
+ Use short, active, plain prose.