@quickchatai/pi-quickreview 0.0.0-stage → 1.1.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 (689) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +75 -2
  3. package/assets/agents/pass-abstraction.md +64 -0
  4. package/assets/agents/pass-ask-human.md +134 -0
  5. package/assets/agents/pass-backcompat.md +67 -0
  6. package/assets/agents/pass-baseline.md +61 -0
  7. package/assets/agents/pass-behaviour-delta.md +64 -0
  8. package/assets/agents/pass-bounds.md +36 -0
  9. package/assets/agents/pass-claims.md +31 -0
  10. package/assets/agents/pass-concurrency.md +168 -0
  11. package/assets/agents/pass-consistency.md +57 -0
  12. package/assets/agents/pass-contracts.md +30 -0
  13. package/assets/agents/pass-data-safety.md +54 -0
  14. package/assets/agents/pass-deferred.md +35 -0
  15. package/assets/agents/pass-delivery.md +37 -0
  16. package/assets/agents/pass-duplication.md +60 -0
  17. package/assets/agents/pass-intent.md +63 -0
  18. package/assets/agents/pass-lint-conformance.md +46 -0
  19. package/assets/agents/pass-maintainability.md +67 -0
  20. package/assets/agents/pass-placement.md +68 -0
  21. package/assets/agents/pass-prod-risk.md +24 -0
  22. package/assets/agents/pass-rollout.md +32 -0
  23. package/assets/agents/pass-roundtrip.md +46 -0
  24. package/assets/agents/pass-security.md +31 -0
  25. package/assets/agents/pass-simplicity.md +68 -0
  26. package/assets/agents/pass-statelessness.md +27 -0
  27. package/assets/agents/pass-style.md +37 -0
  28. package/assets/agents/pass-sweep.md +57 -0
  29. package/assets/agents/pass-tests.md +58 -0
  30. package/assets/agents/pass-ui.md +23 -0
  31. package/assets/agents/pass-validate.md +50 -0
  32. package/assets/agents/pass-widened.md +46 -0
  33. package/assets/agents/scan/pass-scan.md +86 -0
  34. package/assets/config.example.toml +1067 -0
  35. package/assets/deploy/reviewer/AGENTS.override.md +12 -0
  36. package/assets/profiles/default/README.md +21 -0
  37. package/assets/profiles/default/addenda/.gitkeep +0 -0
  38. package/assets/profiles/default/profile.toml +17 -0
  39. package/assets/profiles/example-django/README.md +21 -0
  40. package/assets/profiles/example-django/addenda/10-migration-discipline.md +13 -0
  41. package/assets/profiles/example-django/addenda/20-new-column-nullability.md +12 -0
  42. package/assets/profiles/example-django/addenda/30-test-doctrine.md +12 -0
  43. package/assets/profiles/example-django/addenda/40-orm-usage.md +19 -0
  44. package/assets/profiles/example-django/addenda/50-declared-shape.md +10 -0
  45. package/assets/profiles/example-django/addenda/60-config-placement.md +14 -0
  46. package/assets/profiles/example-django/heuristics.toml +24 -0
  47. package/assets/profiles/example-django/profile.toml +9 -0
  48. package/assets/profiles/fast/README.md +24 -0
  49. package/assets/profiles/fast/profile.toml +59 -0
  50. package/assets/profiles/minimal/README.md +17 -0
  51. package/assets/profiles/minimal/addenda/.gitkeep +0 -0
  52. package/assets/profiles/minimal/profile.toml +8 -0
  53. package/assets/profiles/snappy/README.md +24 -0
  54. package/assets/profiles/snappy/addenda/10-race-as-question.md +6 -0
  55. package/assets/profiles/snappy/profile.toml +46 -0
  56. package/assets/prompts/companion-day-open.md +46 -0
  57. package/assets/prompts/companion-first-run.md +104 -0
  58. package/assets/prompts/companion.md +821 -0
  59. package/assets/prompts/conversation-system.md +117 -0
  60. package/assets/prompts/eod-sweep.md +120 -0
  61. package/assets/prompts/onboarding.md +74 -0
  62. package/assets/prompts/pass-common.md +52 -0
  63. package/assets/prompts/pass-quality-common.md +22 -0
  64. package/assets/prompts/round-first.md +874 -0
  65. package/assets/prompts/round-follow-up.md +991 -0
  66. package/assets/prompts/round-re-review.md +889 -0
  67. package/assets/prompts/round-recheck.md +196 -0
  68. package/assets/prompts/round-staleness.md +856 -0
  69. package/assets/schemas/review-result.v1.json +391 -0
  70. package/assets/schemas/scan-result.v1.json +421 -0
  71. package/assets/schemas/version.v1.json +57 -0
  72. package/assets/seed-manifest.json +19 -0
  73. package/assets/seeds/agents/pass-baseline.md +61 -0
  74. package/assets/seeds/agents/pass-contracts.md +30 -0
  75. package/assets/seeds/agents/pass-data-safety.md +54 -0
  76. package/assets/seeds/agents/pass-delivery.md +37 -0
  77. package/assets/seeds/agents/pass-prod-risk.md +24 -0
  78. package/assets/seeds/agents/pass-security.md +31 -0
  79. package/assets/seeds/agents/pass-statelessness.md +27 -0
  80. package/assets/seeds/agents/pass-ui.md +23 -0
  81. package/assets/seeds/agents/pass-validate.md +50 -0
  82. package/assets/seeds/prompts/conversation-system.md +117 -0
  83. package/assets/seeds/prompts/eod-sweep.md +120 -0
  84. package/assets/seeds/prompts/pass-common.md +52 -0
  85. package/dist/extensions/bash-guard.d.ts +467 -0
  86. package/dist/extensions/bash-guard.d.ts.map +1 -0
  87. package/dist/extensions/bash-guard.js +3058 -0
  88. package/dist/extensions/bash-guard.js.map +1 -0
  89. package/dist/extensions/finding-clusters.d.ts +33 -0
  90. package/dist/extensions/finding-clusters.d.ts.map +1 -0
  91. package/dist/extensions/finding-clusters.js +218 -0
  92. package/dist/extensions/finding-clusters.js.map +1 -0
  93. package/dist/extensions/ledger-pin.d.ts +76 -0
  94. package/dist/extensions/ledger-pin.d.ts.map +1 -0
  95. package/dist/extensions/ledger-pin.js +331 -0
  96. package/dist/extensions/ledger-pin.js.map +1 -0
  97. package/dist/extensions/lens.d.ts +43 -0
  98. package/dist/extensions/lens.d.ts.map +1 -0
  99. package/dist/extensions/lens.js +150 -0
  100. package/dist/extensions/lens.js.map +1 -0
  101. package/dist/extensions/pi-tool.d.ts +22 -0
  102. package/dist/extensions/pi-tool.d.ts.map +1 -0
  103. package/dist/extensions/pi-tool.js +20 -0
  104. package/dist/extensions/pi-tool.js.map +1 -0
  105. package/dist/extensions/quickreview.d.ts +21 -0
  106. package/dist/extensions/quickreview.d.ts.map +1 -0
  107. package/dist/extensions/quickreview.js +132 -0
  108. package/dist/extensions/quickreview.js.map +1 -0
  109. package/dist/src/anchors.d.ts +54 -0
  110. package/dist/src/anchors.d.ts.map +1 -0
  111. package/dist/src/anchors.js +127 -0
  112. package/dist/src/anchors.js.map +1 -0
  113. package/dist/src/assetroot.d.ts +16 -0
  114. package/dist/src/assetroot.d.ts.map +1 -0
  115. package/dist/src/assetroot.js +77 -0
  116. package/dist/src/assetroot.js.map +1 -0
  117. package/dist/src/authwatch.d.ts +61 -0
  118. package/dist/src/authwatch.d.ts.map +1 -0
  119. package/dist/src/authwatch.js +210 -0
  120. package/dist/src/authwatch.js.map +1 -0
  121. package/dist/src/budget.d.ts +15 -0
  122. package/dist/src/budget.d.ts.map +1 -0
  123. package/dist/src/budget.js +32 -0
  124. package/dist/src/budget.js.map +1 -0
  125. package/dist/src/casebudget.d.ts +3 -0
  126. package/dist/src/casebudget.d.ts.map +1 -0
  127. package/dist/src/casebudget.js +3 -0
  128. package/dist/src/casebudget.js.map +1 -0
  129. package/dist/src/cigate.d.ts +116 -0
  130. package/dist/src/cigate.d.ts.map +1 -0
  131. package/dist/src/cigate.js +176 -0
  132. package/dist/src/cigate.js.map +1 -0
  133. package/dist/src/codespan.d.ts +46 -0
  134. package/dist/src/codespan.d.ts.map +1 -0
  135. package/dist/src/codespan.js +75 -0
  136. package/dist/src/codespan.js.map +1 -0
  137. package/dist/src/contextpack.d.ts +56 -0
  138. package/dist/src/contextpack.d.ts.map +1 -0
  139. package/dist/src/contextpack.js +195 -0
  140. package/dist/src/contextpack.js.map +1 -0
  141. package/dist/src/contract.d.ts +8 -0
  142. package/dist/src/contract.d.ts.map +1 -0
  143. package/dist/src/contract.js +21 -0
  144. package/dist/src/contract.js.map +1 -0
  145. package/dist/src/coverage.d.ts +32 -0
  146. package/dist/src/coverage.d.ts.map +1 -0
  147. package/dist/src/coverage.js +85 -0
  148. package/dist/src/coverage.js.map +1 -0
  149. package/dist/src/datafence.d.ts +19 -0
  150. package/dist/src/datafence.d.ts.map +1 -0
  151. package/dist/src/datafence.js +60 -0
  152. package/dist/src/datafence.js.map +1 -0
  153. package/dist/src/dedup.d.ts +65 -0
  154. package/dist/src/dedup.d.ts.map +1 -0
  155. package/dist/src/dedup.js +459 -0
  156. package/dist/src/dedup.js.map +1 -0
  157. package/dist/src/depsources.d.ts +304 -0
  158. package/dist/src/depsources.d.ts.map +1 -0
  159. package/dist/src/depsources.js +3367 -0
  160. package/dist/src/depsources.js.map +1 -0
  161. package/dist/src/diffinput.d.ts +10 -0
  162. package/dist/src/diffinput.d.ts.map +1 -0
  163. package/dist/src/diffinput.js +172 -0
  164. package/dist/src/diffinput.js.map +1 -0
  165. package/dist/src/doubtwords.d.ts +10 -0
  166. package/dist/src/doubtwords.d.ts.map +1 -0
  167. package/dist/src/doubtwords.js +13 -0
  168. package/dist/src/doubtwords.js.map +1 -0
  169. package/dist/src/ecosystem.d.ts +148 -0
  170. package/dist/src/ecosystem.d.ts.map +1 -0
  171. package/dist/src/ecosystem.js +338 -0
  172. package/dist/src/ecosystem.js.map +1 -0
  173. package/dist/src/engine/agentdir.d.ts +5 -0
  174. package/dist/src/engine/agentdir.d.ts.map +1 -0
  175. package/dist/src/engine/agentdir.js +21 -0
  176. package/dist/src/engine/agentdir.js.map +1 -0
  177. package/dist/src/engine/auth.d.ts +214 -0
  178. package/dist/src/engine/auth.d.ts.map +1 -0
  179. package/dist/src/engine/auth.js +374 -0
  180. package/dist/src/engine/auth.js.map +1 -0
  181. package/dist/src/engine/budget.d.ts +60 -0
  182. package/dist/src/engine/budget.d.ts.map +1 -0
  183. package/dist/src/engine/budget.js +113 -0
  184. package/dist/src/engine/budget.js.map +1 -0
  185. package/dist/src/engine/capfd.d.ts +6 -0
  186. package/dist/src/engine/capfd.d.ts.map +1 -0
  187. package/dist/src/engine/capfd.js +21 -0
  188. package/dist/src/engine/capfd.js.map +1 -0
  189. package/dist/src/engine/caseout.d.ts +66 -0
  190. package/dist/src/engine/caseout.d.ts.map +1 -0
  191. package/dist/src/engine/caseout.js +107 -0
  192. package/dist/src/engine/caseout.js.map +1 -0
  193. package/dist/src/engine/context.d.ts +57 -0
  194. package/dist/src/engine/context.d.ts.map +1 -0
  195. package/dist/src/engine/context.js +212 -0
  196. package/dist/src/engine/context.js.map +1 -0
  197. package/dist/src/engine/envmap.d.ts +13 -0
  198. package/dist/src/engine/envmap.d.ts.map +1 -0
  199. package/dist/src/engine/envmap.js +372 -0
  200. package/dist/src/engine/envmap.js.map +1 -0
  201. package/dist/src/engine/extfiles.d.ts +7 -0
  202. package/dist/src/engine/extfiles.d.ts.map +1 -0
  203. package/dist/src/engine/extfiles.js +23 -0
  204. package/dist/src/engine/extfiles.js.map +1 -0
  205. package/dist/src/engine/keyroute.d.ts +21 -0
  206. package/dist/src/engine/keyroute.d.ts.map +1 -0
  207. package/dist/src/engine/keyroute.js +58 -0
  208. package/dist/src/engine/keyroute.js.map +1 -0
  209. package/dist/src/engine/lens/cache-group.d.ts +20 -0
  210. package/dist/src/engine/lens/cache-group.d.ts.map +1 -0
  211. package/dist/src/engine/lens/cache-group.js +31 -0
  212. package/dist/src/engine/lens/cache-group.js.map +1 -0
  213. package/dist/src/engine/lens/cache-run.d.ts +65 -0
  214. package/dist/src/engine/lens/cache-run.d.ts.map +1 -0
  215. package/dist/src/engine/lens/cache-run.js +159 -0
  216. package/dist/src/engine/lens/cache-run.js.map +1 -0
  217. package/dist/src/engine/lens/deadline.d.ts +54 -0
  218. package/dist/src/engine/lens/deadline.d.ts.map +1 -0
  219. package/dist/src/engine/lens/deadline.js +111 -0
  220. package/dist/src/engine/lens/deadline.js.map +1 -0
  221. package/dist/src/engine/lens/engine-tools.d.ts +13 -0
  222. package/dist/src/engine/lens/engine-tools.d.ts.map +1 -0
  223. package/dist/src/engine/lens/engine-tools.js +37 -0
  224. package/dist/src/engine/lens/engine-tools.js.map +1 -0
  225. package/dist/src/engine/lens/env.d.ts +23 -0
  226. package/dist/src/engine/lens/env.d.ts.map +1 -0
  227. package/dist/src/engine/lens/env.js +42 -0
  228. package/dist/src/engine/lens/env.js.map +1 -0
  229. package/dist/src/engine/lens/launch-plan.d.ts +63 -0
  230. package/dist/src/engine/lens/launch-plan.d.ts.map +1 -0
  231. package/dist/src/engine/lens/launch-plan.js +203 -0
  232. package/dist/src/engine/lens/launch-plan.js.map +1 -0
  233. package/dist/src/engine/lens/leaf-cache.d.ts +22 -0
  234. package/dist/src/engine/lens/leaf-cache.d.ts.map +1 -0
  235. package/dist/src/engine/lens/leaf-cache.js +115 -0
  236. package/dist/src/engine/lens/leaf-cache.js.map +1 -0
  237. package/dist/src/engine/lens/permits.d.ts +14 -0
  238. package/dist/src/engine/lens/permits.d.ts.map +1 -0
  239. package/dist/src/engine/lens/permits.js +18 -0
  240. package/dist/src/engine/lens/permits.js.map +1 -0
  241. package/dist/src/engine/lens/registry.d.ts +55 -0
  242. package/dist/src/engine/lens/registry.d.ts.map +1 -0
  243. package/dist/src/engine/lens/registry.js +140 -0
  244. package/dist/src/engine/lens/registry.js.map +1 -0
  245. package/dist/src/engine/lens/round-lens.d.ts +16 -0
  246. package/dist/src/engine/lens/round-lens.d.ts.map +1 -0
  247. package/dist/src/engine/lens/round-lens.js +46 -0
  248. package/dist/src/engine/lens/round-lens.js.map +1 -0
  249. package/dist/src/engine/lens/runlens.d.ts +103 -0
  250. package/dist/src/engine/lens/runlens.d.ts.map +1 -0
  251. package/dist/src/engine/lens/runlens.js +538 -0
  252. package/dist/src/engine/lens/runlens.js.map +1 -0
  253. package/dist/src/engine/lens/section.d.ts +19 -0
  254. package/dist/src/engine/lens/section.d.ts.map +1 -0
  255. package/dist/src/engine/lens/section.js +40 -0
  256. package/dist/src/engine/lens/section.js.map +1 -0
  257. package/dist/src/engine/lens/semaphore.d.ts +13 -0
  258. package/dist/src/engine/lens/semaphore.d.ts.map +1 -0
  259. package/dist/src/engine/lens/semaphore.js +44 -0
  260. package/dist/src/engine/lens/semaphore.js.map +1 -0
  261. package/dist/src/engine/lens/tool.d.ts +34 -0
  262. package/dist/src/engine/lens/tool.d.ts.map +1 -0
  263. package/dist/src/engine/lens/tool.js +345 -0
  264. package/dist/src/engine/lens/tool.js.map +1 -0
  265. package/dist/src/engine/lens/wave.d.ts +63 -0
  266. package/dist/src/engine/lens/wave.d.ts.map +1 -0
  267. package/dist/src/engine/lens/wave.js +95 -0
  268. package/dist/src/engine/lens/wave.js.map +1 -0
  269. package/dist/src/engine/livesessions.d.ts +21 -0
  270. package/dist/src/engine/livesessions.d.ts.map +1 -0
  271. package/dist/src/engine/livesessions.js +57 -0
  272. package/dist/src/engine/livesessions.js.map +1 -0
  273. package/dist/src/engine/livewire.d.ts +18 -0
  274. package/dist/src/engine/livewire.d.ts.map +1 -0
  275. package/dist/src/engine/livewire.js +31 -0
  276. package/dist/src/engine/livewire.js.map +1 -0
  277. package/dist/src/engine/openable.d.ts +37 -0
  278. package/dist/src/engine/openable.d.ts.map +1 -0
  279. package/dist/src/engine/openable.js +120 -0
  280. package/dist/src/engine/openable.js.map +1 -0
  281. package/dist/src/engine/pisdk.d.ts +226 -0
  282. package/dist/src/engine/pisdk.d.ts.map +1 -0
  283. package/dist/src/engine/pisdk.js +552 -0
  284. package/dist/src/engine/pisdk.js.map +1 -0
  285. package/dist/src/engine/port.d.ts +144 -0
  286. package/dist/src/engine/port.d.ts.map +1 -0
  287. package/dist/src/engine/port.js +16 -0
  288. package/dist/src/engine/port.js.map +1 -0
  289. package/dist/src/engine/prompts.d.ts +159 -0
  290. package/dist/src/engine/prompts.d.ts.map +1 -0
  291. package/dist/src/engine/prompts.js +339 -0
  292. package/dist/src/engine/prompts.js.map +1 -0
  293. package/dist/src/engine/render.d.ts +10 -0
  294. package/dist/src/engine/render.d.ts.map +1 -0
  295. package/dist/src/engine/render.js +23 -0
  296. package/dist/src/engine/render.js.map +1 -0
  297. package/dist/src/engine/reviewruntime.d.ts +13 -0
  298. package/dist/src/engine/reviewruntime.d.ts.map +1 -0
  299. package/dist/src/engine/reviewruntime.js +35 -0
  300. package/dist/src/engine/reviewruntime.js.map +1 -0
  301. package/dist/src/engine/reviewsdk.d.ts +75 -0
  302. package/dist/src/engine/reviewsdk.d.ts.map +1 -0
  303. package/dist/src/engine/reviewsdk.js +180 -0
  304. package/dist/src/engine/reviewsdk.js.map +1 -0
  305. package/dist/src/engine/round.d.ts +166 -0
  306. package/dist/src/engine/round.d.ts.map +1 -0
  307. package/dist/src/engine/round.js +543 -0
  308. package/dist/src/engine/round.js.map +1 -0
  309. package/dist/src/engine/roundagents.d.ts +17 -0
  310. package/dist/src/engine/roundagents.d.ts.map +1 -0
  311. package/dist/src/engine/roundagents.js +49 -0
  312. package/dist/src/engine/roundagents.js.map +1 -0
  313. package/dist/src/engine/roundevents.d.ts +110 -0
  314. package/dist/src/engine/roundevents.d.ts.map +1 -0
  315. package/dist/src/engine/roundevents.js +276 -0
  316. package/dist/src/engine/roundevents.js.map +1 -0
  317. package/dist/src/engine/roundsdk.d.ts +33 -0
  318. package/dist/src/engine/roundsdk.d.ts.map +1 -0
  319. package/dist/src/engine/roundsdk.js +76 -0
  320. package/dist/src/engine/roundsdk.js.map +1 -0
  321. package/dist/src/engine/sdkruntime.d.ts +23 -0
  322. package/dist/src/engine/sdkruntime.d.ts.map +1 -0
  323. package/dist/src/engine/sdkruntime.js +340 -0
  324. package/dist/src/engine/sdkruntime.js.map +1 -0
  325. package/dist/src/engine/select.d.ts +16 -0
  326. package/dist/src/engine/select.d.ts.map +1 -0
  327. package/dist/src/engine/select.js +32 -0
  328. package/dist/src/engine/select.js.map +1 -0
  329. package/dist/src/engine/sessionwrap.d.ts +4 -0
  330. package/dist/src/engine/sessionwrap.d.ts.map +1 -0
  331. package/dist/src/engine/sessionwrap.js +31 -0
  332. package/dist/src/engine/sessionwrap.js.map +1 -0
  333. package/dist/src/engine/toolfence.d.ts +90 -0
  334. package/dist/src/engine/toolfence.d.ts.map +1 -0
  335. package/dist/src/engine/toolfence.js +378 -0
  336. package/dist/src/engine/toolfence.js.map +1 -0
  337. package/dist/src/engine/tooluid.d.ts +128 -0
  338. package/dist/src/engine/tooluid.d.ts.map +1 -0
  339. package/dist/src/engine/tooluid.js +401 -0
  340. package/dist/src/engine/tooluid.js.map +1 -0
  341. package/dist/src/envstrip.d.ts +10 -0
  342. package/dist/src/envstrip.d.ts.map +1 -0
  343. package/dist/src/envstrip.js +15 -0
  344. package/dist/src/envstrip.js.map +1 -0
  345. package/dist/src/escalationprompt.d.ts +22 -0
  346. package/dist/src/escalationprompt.d.ts.map +1 -0
  347. package/dist/src/escalationprompt.js +54 -0
  348. package/dist/src/escalationprompt.js.map +1 -0
  349. package/dist/src/execfn.d.ts +29 -0
  350. package/dist/src/execfn.d.ts.map +1 -0
  351. package/dist/src/execfn.js +55 -0
  352. package/dist/src/execfn.js.map +1 -0
  353. package/dist/src/finding-chain.d.ts +40 -0
  354. package/dist/src/finding-chain.d.ts.map +1 -0
  355. package/dist/src/finding-chain.js +76 -0
  356. package/dist/src/finding-chain.js.map +1 -0
  357. package/dist/src/finding-row.d.ts +24 -0
  358. package/dist/src/finding-row.d.ts.map +1 -0
  359. package/dist/src/finding-row.js +26 -0
  360. package/dist/src/finding-row.js.map +1 -0
  361. package/dist/src/findingkey.d.ts +99 -0
  362. package/dist/src/findingkey.d.ts.map +1 -0
  363. package/dist/src/findingkey.js +210 -0
  364. package/dist/src/findingkey.js.map +1 -0
  365. package/dist/src/findingsrecord.d.ts +175 -0
  366. package/dist/src/findingsrecord.d.ts.map +1 -0
  367. package/dist/src/findingsrecord.js +410 -0
  368. package/dist/src/findingsrecord.js.map +1 -0
  369. package/dist/src/followup-mode.d.ts +4 -0
  370. package/dist/src/followup-mode.d.ts.map +1 -0
  371. package/dist/src/followup-mode.js +6 -0
  372. package/dist/src/followup-mode.js.map +1 -0
  373. package/dist/src/gate.d.ts +199 -0
  374. package/dist/src/gate.d.ts.map +1 -0
  375. package/dist/src/gate.js +315 -0
  376. package/dist/src/gate.js.map +1 -0
  377. package/dist/src/ghcred.d.ts +58 -0
  378. package/dist/src/ghcred.d.ts.map +1 -0
  379. package/dist/src/ghcred.js +139 -0
  380. package/dist/src/ghcred.js.map +1 -0
  381. package/dist/src/githubAuth.d.ts +32 -0
  382. package/dist/src/githubAuth.d.ts.map +1 -0
  383. package/dist/src/githubAuth.js +116 -0
  384. package/dist/src/githubAuth.js.map +1 -0
  385. package/dist/src/githubcore.d.ts +20 -0
  386. package/dist/src/githubcore.d.ts.map +1 -0
  387. package/dist/src/githubcore.js +20 -0
  388. package/dist/src/githubcore.js.map +1 -0
  389. package/dist/src/glob.d.ts +11 -0
  390. package/dist/src/glob.d.ts.map +1 -0
  391. package/dist/src/glob.js +69 -0
  392. package/dist/src/glob.js.map +1 -0
  393. package/dist/src/guards.d.ts +93 -0
  394. package/dist/src/guards.d.ts.map +1 -0
  395. package/dist/src/guards.js +306 -0
  396. package/dist/src/guards.js.map +1 -0
  397. package/dist/src/heartbeat.d.ts +29 -0
  398. package/dist/src/heartbeat.d.ts.map +1 -0
  399. package/dist/src/heartbeat.js +87 -0
  400. package/dist/src/heartbeat.js.map +1 -0
  401. package/dist/src/heuristics.d.ts +247 -0
  402. package/dist/src/heuristics.d.ts.map +1 -0
  403. package/dist/src/heuristics.js +927 -0
  404. package/dist/src/heuristics.js.map +1 -0
  405. package/dist/src/homes.d.ts +181 -0
  406. package/dist/src/homes.d.ts.map +1 -0
  407. package/dist/src/homes.js +242 -0
  408. package/dist/src/homes.js.map +1 -0
  409. package/dist/src/hunkheader.d.ts +11 -0
  410. package/dist/src/hunkheader.d.ts.map +1 -0
  411. package/dist/src/hunkheader.js +18 -0
  412. package/dist/src/hunkheader.js.map +1 -0
  413. package/dist/src/include.d.ts +435 -0
  414. package/dist/src/include.d.ts.map +1 -0
  415. package/dist/src/include.js +1692 -0
  416. package/dist/src/include.js.map +1 -0
  417. package/dist/src/launchvocab.d.ts +36 -0
  418. package/dist/src/launchvocab.d.ts.map +1 -0
  419. package/dist/src/launchvocab.js +59 -0
  420. package/dist/src/launchvocab.js.map +1 -0
  421. package/dist/src/ledgercarry.d.ts +24 -0
  422. package/dist/src/ledgercarry.d.ts.map +1 -0
  423. package/dist/src/ledgercarry.js +109 -0
  424. package/dist/src/ledgercarry.js.map +1 -0
  425. package/dist/src/lensids.d.ts +7 -0
  426. package/dist/src/lensids.d.ts.map +1 -0
  427. package/dist/src/lensids.js +53 -0
  428. package/dist/src/lensids.js.map +1 -0
  429. package/dist/src/lensplanning.d.ts +8 -0
  430. package/dist/src/lensplanning.d.ts.map +1 -0
  431. package/dist/src/lensplanning.js +126 -0
  432. package/dist/src/lensplanning.js.map +1 -0
  433. package/dist/src/lensresult.d.ts +94 -0
  434. package/dist/src/lensresult.d.ts.map +1 -0
  435. package/dist/src/lensresult.js +162 -0
  436. package/dist/src/lensresult.js.map +1 -0
  437. package/dist/src/lenstuning.d.ts +97 -0
  438. package/dist/src/lenstuning.d.ts.map +1 -0
  439. package/dist/src/lenstuning.js +326 -0
  440. package/dist/src/lenstuning.js.map +1 -0
  441. package/dist/src/lintconfig.d.ts +31 -0
  442. package/dist/src/lintconfig.d.ts.map +1 -0
  443. package/dist/src/lintconfig.js +543 -0
  444. package/dist/src/lintconfig.js.map +1 -0
  445. package/dist/src/live/events.d.ts +188 -0
  446. package/dist/src/live/events.d.ts.map +1 -0
  447. package/dist/src/live/events.js +136 -0
  448. package/dist/src/live/events.js.map +1 -0
  449. package/dist/src/live/writer.d.ts +54 -0
  450. package/dist/src/live/writer.d.ts.map +1 -0
  451. package/dist/src/live/writer.js +516 -0
  452. package/dist/src/live/writer.js.map +1 -0
  453. package/dist/src/localreview.d.ts +128 -0
  454. package/dist/src/localreview.d.ts.map +1 -0
  455. package/dist/src/localreview.js +426 -0
  456. package/dist/src/localreview.js.map +1 -0
  457. package/dist/src/loosenedtests.d.ts +13 -0
  458. package/dist/src/loosenedtests.d.ts.map +1 -0
  459. package/dist/src/loosenedtests.js +188 -0
  460. package/dist/src/loosenedtests.js.map +1 -0
  461. package/dist/src/memoryport.d.ts +264 -0
  462. package/dist/src/memoryport.d.ts.map +1 -0
  463. package/dist/src/memoryport.js +445 -0
  464. package/dist/src/memoryport.js.map +1 -0
  465. package/dist/src/migrations.d.ts +106 -0
  466. package/dist/src/migrations.d.ts.map +1 -0
  467. package/dist/src/migrations.js +373 -0
  468. package/dist/src/migrations.js.map +1 -0
  469. package/dist/src/oneshot.d.ts +12 -0
  470. package/dist/src/oneshot.d.ts.map +1 -0
  471. package/dist/src/oneshot.js +8 -0
  472. package/dist/src/oneshot.js.map +1 -0
  473. package/dist/src/packing.d.ts +11 -0
  474. package/dist/src/packing.d.ts.map +1 -0
  475. package/dist/src/packing.js +31 -0
  476. package/dist/src/packing.js.map +1 -0
  477. package/dist/src/passes.d.ts +16 -0
  478. package/dist/src/passes.d.ts.map +1 -0
  479. package/dist/src/passes.js +104 -0
  480. package/dist/src/passes.js.map +1 -0
  481. package/dist/src/passtasks.d.ts +68 -0
  482. package/dist/src/passtasks.d.ts.map +1 -0
  483. package/dist/src/passtasks.js +360 -0
  484. package/dist/src/passtasks.js.map +1 -0
  485. package/dist/src/pathinside.d.ts +5 -0
  486. package/dist/src/pathinside.d.ts.map +1 -0
  487. package/dist/src/pathinside.js +9 -0
  488. package/dist/src/pathinside.js.map +1 -0
  489. package/dist/src/pibuiltins.d.ts +36 -0
  490. package/dist/src/pibuiltins.d.ts.map +1 -0
  491. package/dist/src/pibuiltins.js +83 -0
  492. package/dist/src/pibuiltins.js.map +1 -0
  493. package/dist/src/plankey.d.ts +4 -0
  494. package/dist/src/plankey.d.ts.map +1 -0
  495. package/dist/src/plankey.js +10 -0
  496. package/dist/src/plankey.js.map +1 -0
  497. package/dist/src/planner.d.ts +375 -0
  498. package/dist/src/planner.d.ts.map +1 -0
  499. package/dist/src/planner.js +722 -0
  500. package/dist/src/planner.js.map +1 -0
  501. package/dist/src/plugin/args.d.ts +19 -0
  502. package/dist/src/plugin/args.d.ts.map +1 -0
  503. package/dist/src/plugin/args.js +107 -0
  504. package/dist/src/plugin/args.js.map +1 -0
  505. package/dist/src/plugin/index.d.ts +3 -0
  506. package/dist/src/plugin/index.d.ts.map +1 -0
  507. package/dist/src/plugin/index.js +14 -0
  508. package/dist/src/plugin/index.js.map +1 -0
  509. package/dist/src/plugin/login.d.ts +39 -0
  510. package/dist/src/plugin/login.d.ts.map +1 -0
  511. package/dist/src/plugin/login.js +73 -0
  512. package/dist/src/plugin/login.js.map +1 -0
  513. package/dist/src/plugin/review.d.ts +27 -0
  514. package/dist/src/plugin/review.d.ts.map +1 -0
  515. package/dist/src/plugin/review.js +298 -0
  516. package/dist/src/plugin/review.js.map +1 -0
  517. package/dist/src/plugin/runner.d.ts +6 -0
  518. package/dist/src/plugin/runner.d.ts.map +1 -0
  519. package/dist/src/plugin/runner.js +65 -0
  520. package/dist/src/plugin/runner.js.map +1 -0
  521. package/dist/src/plugin/scan.d.ts +79 -0
  522. package/dist/src/plugin/scan.d.ts.map +1 -0
  523. package/dist/src/plugin/scan.js +348 -0
  524. package/dist/src/plugin/scan.js.map +1 -0
  525. package/dist/src/plugin/session.d.ts +56 -0
  526. package/dist/src/plugin/session.d.ts.map +1 -0
  527. package/dist/src/plugin/session.js +2 -0
  528. package/dist/src/plugin/session.js.map +1 -0
  529. package/dist/src/plugin/setup.d.ts +19 -0
  530. package/dist/src/plugin/setup.d.ts.map +1 -0
  531. package/dist/src/plugin/setup.js +142 -0
  532. package/dist/src/plugin/setup.js.map +1 -0
  533. package/dist/src/plugin/versiongate.d.ts +26 -0
  534. package/dist/src/plugin/versiongate.d.ts.map +1 -0
  535. package/dist/src/plugin/versiongate.js +83 -0
  536. package/dist/src/plugin/versiongate.js.map +1 -0
  537. package/dist/src/postingkey.d.ts +8 -0
  538. package/dist/src/postingkey.d.ts.map +1 -0
  539. package/dist/src/postingkey.js +25 -0
  540. package/dist/src/postingkey.js.map +1 -0
  541. package/dist/src/postingpolicy.d.ts +108 -0
  542. package/dist/src/postingpolicy.d.ts.map +1 -0
  543. package/dist/src/postingpolicy.js +341 -0
  544. package/dist/src/postingpolicy.js.map +1 -0
  545. package/dist/src/pr-identity.d.ts +3 -0
  546. package/dist/src/pr-identity.d.ts.map +1 -0
  547. package/dist/src/pr-identity.js +9 -0
  548. package/dist/src/pr-identity.js.map +1 -0
  549. package/dist/src/prdelta.d.ts +181 -0
  550. package/dist/src/prdelta.d.ts.map +1 -0
  551. package/dist/src/prdelta.js +501 -0
  552. package/dist/src/prdelta.js.map +1 -0
  553. package/dist/src/pricing.d.ts +94 -0
  554. package/dist/src/pricing.d.ts.map +1 -0
  555. package/dist/src/pricing.js +209 -0
  556. package/dist/src/pricing.js.map +1 -0
  557. package/dist/src/priorfindings.d.ts +167 -0
  558. package/dist/src/priorfindings.d.ts.map +1 -0
  559. package/dist/src/priorfindings.js +445 -0
  560. package/dist/src/priorfindings.js.map +1 -0
  561. package/dist/src/priortasks.d.ts +31 -0
  562. package/dist/src/priortasks.d.ts.map +1 -0
  563. package/dist/src/priortasks.js +119 -0
  564. package/dist/src/priortasks.js.map +1 -0
  565. package/dist/src/profilelookup.d.ts +59 -0
  566. package/dist/src/profilelookup.d.ts.map +1 -0
  567. package/dist/src/profilelookup.js +98 -0
  568. package/dist/src/profilelookup.js.map +1 -0
  569. package/dist/src/profileoverrides.d.ts +91 -0
  570. package/dist/src/profileoverrides.d.ts.map +1 -0
  571. package/dist/src/profileoverrides.js +313 -0
  572. package/dist/src/profileoverrides.js.map +1 -0
  573. package/dist/src/profiles.d.ts +144 -0
  574. package/dist/src/profiles.d.ts.map +1 -0
  575. package/dist/src/profiles.js +604 -0
  576. package/dist/src/profiles.js.map +1 -0
  577. package/dist/src/promptdoc.d.ts +3 -0
  578. package/dist/src/promptdoc.d.ts.map +1 -0
  579. package/dist/src/promptdoc.js +18 -0
  580. package/dist/src/promptdoc.js.map +1 -0
  581. package/dist/src/prtarget.d.ts +70 -0
  582. package/dist/src/prtarget.d.ts.map +1 -0
  583. package/dist/src/prtarget.js +181 -0
  584. package/dist/src/prtarget.js.map +1 -0
  585. package/dist/src/recheckorder.d.ts +32 -0
  586. package/dist/src/recheckorder.d.ts.map +1 -0
  587. package/dist/src/recheckorder.js +5 -0
  588. package/dist/src/recheckorder.js.map +1 -0
  589. package/dist/src/reviewapi.d.ts +207 -0
  590. package/dist/src/reviewapi.d.ts.map +1 -0
  591. package/dist/src/reviewapi.js +939 -0
  592. package/dist/src/reviewapi.js.map +1 -0
  593. package/dist/src/reviewbotfindings.d.ts +33 -0
  594. package/dist/src/reviewbotfindings.d.ts.map +1 -0
  595. package/dist/src/reviewbotfindings.js +80 -0
  596. package/dist/src/reviewbotfindings.js.map +1 -0
  597. package/dist/src/reviewconfig.d.ts +741 -0
  598. package/dist/src/reviewconfig.d.ts.map +1 -0
  599. package/dist/src/reviewconfig.js +797 -0
  600. package/dist/src/reviewconfig.js.map +1 -0
  601. package/dist/src/reviewdelta.d.ts +51 -0
  602. package/dist/src/reviewdelta.d.ts.map +1 -0
  603. package/dist/src/reviewdelta.js +119 -0
  604. package/dist/src/reviewdelta.js.map +1 -0
  605. package/dist/src/reviewdest.d.ts +86 -0
  606. package/dist/src/reviewdest.d.ts.map +1 -0
  607. package/dist/src/reviewdest.js +142 -0
  608. package/dist/src/reviewdest.js.map +1 -0
  609. package/dist/src/reviewerstub.d.ts +12 -0
  610. package/dist/src/reviewerstub.d.ts.map +1 -0
  611. package/dist/src/reviewerstub.js +28 -0
  612. package/dist/src/reviewerstub.js.map +1 -0
  613. package/dist/src/reviewhost.d.ts +58 -0
  614. package/dist/src/reviewhost.d.ts.map +1 -0
  615. package/dist/src/reviewhost.js +135 -0
  616. package/dist/src/reviewhost.js.map +1 -0
  617. package/dist/src/reviewpost.d.ts +79 -0
  618. package/dist/src/reviewpost.d.ts.map +1 -0
  619. package/dist/src/reviewpost.js +233 -0
  620. package/dist/src/reviewpost.js.map +1 -0
  621. package/dist/src/reviewrender.d.ts +154 -0
  622. package/dist/src/reviewrender.d.ts.map +1 -0
  623. package/dist/src/reviewrender.js +480 -0
  624. package/dist/src/reviewrender.js.map +1 -0
  625. package/dist/src/reviewstate.d.ts +62 -0
  626. package/dist/src/reviewstate.d.ts.map +1 -0
  627. package/dist/src/reviewstate.js +167 -0
  628. package/dist/src/reviewstate.js.map +1 -0
  629. package/dist/src/reviewstore.d.ts +17 -0
  630. package/dist/src/reviewstore.d.ts.map +1 -0
  631. package/dist/src/reviewstore.js +105 -0
  632. package/dist/src/reviewstore.js.map +1 -0
  633. package/dist/src/round-progress.d.ts +120 -0
  634. package/dist/src/round-progress.d.ts.map +1 -0
  635. package/dist/src/round-progress.js +172 -0
  636. package/dist/src/round-progress.js.map +1 -0
  637. package/dist/src/round-stage-deadlines.d.ts +12 -0
  638. package/dist/src/round-stage-deadlines.d.ts.map +1 -0
  639. package/dist/src/round-stage-deadlines.js +10 -0
  640. package/dist/src/round-stage-deadlines.js.map +1 -0
  641. package/dist/src/session-command.d.ts +19 -0
  642. package/dist/src/session-command.d.ts.map +1 -0
  643. package/dist/src/session-command.js +20 -0
  644. package/dist/src/session-command.js.map +1 -0
  645. package/dist/src/settledread.d.ts +61 -0
  646. package/dist/src/settledread.d.ts.map +1 -0
  647. package/dist/src/settledread.js +135 -0
  648. package/dist/src/settledread.js.map +1 -0
  649. package/dist/src/severity.d.ts +167 -0
  650. package/dist/src/severity.d.ts.map +1 -0
  651. package/dist/src/severity.js +364 -0
  652. package/dist/src/severity.js.map +1 -0
  653. package/dist/src/severityrank.d.ts +8 -0
  654. package/dist/src/severityrank.d.ts.map +1 -0
  655. package/dist/src/severityrank.js +16 -0
  656. package/dist/src/severityrank.js.map +1 -0
  657. package/dist/src/standing-review.d.ts +45 -0
  658. package/dist/src/standing-review.d.ts.map +1 -0
  659. package/dist/src/standing-review.js +43 -0
  660. package/dist/src/standing-review.js.map +1 -0
  661. package/dist/src/storerows.d.ts +225 -0
  662. package/dist/src/storerows.d.ts.map +1 -0
  663. package/dist/src/storerows.js +7 -0
  664. package/dist/src/storerows.js.map +1 -0
  665. package/dist/src/styleguide.d.ts +25 -0
  666. package/dist/src/styleguide.d.ts.map +1 -0
  667. package/dist/src/styleguide.js +272 -0
  668. package/dist/src/styleguide.js.map +1 -0
  669. package/dist/src/sweepstatus.d.ts +42 -0
  670. package/dist/src/sweepstatus.d.ts.map +1 -0
  671. package/dist/src/sweepstatus.js +97 -0
  672. package/dist/src/sweepstatus.js.map +1 -0
  673. package/dist/src/templates.d.ts +243 -0
  674. package/dist/src/templates.d.ts.map +1 -0
  675. package/dist/src/templates.js +847 -0
  676. package/dist/src/templates.js.map +1 -0
  677. package/dist/src/types.d.ts +639 -0
  678. package/dist/src/types.d.ts.map +1 -0
  679. package/dist/src/types.js +90 -0
  680. package/dist/src/types.js.map +1 -0
  681. package/dist/src/unifieddiff.d.ts +22 -0
  682. package/dist/src/unifieddiff.d.ts.map +1 -0
  683. package/dist/src/unifieddiff.js +176 -0
  684. package/dist/src/unifieddiff.js.map +1 -0
  685. package/dist/src/yieldloop.d.ts +2 -0
  686. package/dist/src/yieldloop.d.ts.map +1 -0
  687. package/dist/src/yieldloop.js +14 -0
  688. package/dist/src/yieldloop.js.map +1 -0
  689. package/package.json +60 -4
package/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Quickchat AI
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+
package/README.md CHANGED
@@ -1,3 +1,76 @@
1
- # Temporary Holding Version
1
+ # QuickReview for pi
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ The QuickReview code reviewer as a pi package: the same review core the
4
+ QuickReview bot runs, in your own pi session.
5
+
6
+ ```sh
7
+ pi install npm:@quickchatai/pi-quickreview
8
+ ```
9
+
10
+ ## Commands
11
+
12
+ - `/review` reviews the current branch against its base. `/review 123` (or a
13
+ pull request URL) reviews a PR, and `/review --uncommitted` the uncommitted
14
+ tree. `--preview` shows the plan and the price without running anything.
15
+ The result is shown in the session, saved as markdown and JSON, or posted
16
+ to the PR as a comment-only review (`--to pr`); pi asks each time, unless
17
+ you keep an answer as the repo's default.
18
+ - `/scan` scans the whole repo for defects, priced first and started only on
19
+ your yes. It runs the `qcr` CLI on your machine; `--sandbox docker` runs it
20
+ in the scan sandbox instead.
21
+ - `/selfimprove` scans the repo, then hands the findings to this session's
22
+ agent with a fix loop: triage, fix with tests, review, and a re-scan of
23
+ what changed.
24
+ - `/qcr-setup` checks the pi version, the login, git, GitHub access for PR
25
+ targets and the `qcr` CLI, and offers to install `qcr`
26
+ (`npm i -g @quickchatai/quickreview`).
27
+
28
+ ## Which pi
29
+
30
+ The package declares `^1.4.0` for pi (`peerDependencies`): pi 1.4.0 and any
31
+ later 1.x. At load the plugin reads the running pi's version, and outside
32
+ that range it registers no command at all and says why, once. A review
33
+ engine written against one pi's SDK never half-runs on another. Only pi
34
+ versions the plugin's offline canaries ran on belong in the range.
35
+
36
+ The `qcr` CLI (`@quickchatai/quickreview`) and the QuickReview image pin pi
37
+ exactly instead; `qcr pi` starts that pinned pi with this plugin preloaded.
38
+
39
+ ## What it needs
40
+
41
+ - pi in the range above.
42
+ - A pi login for the review's models (`/login` in pi). The review borrows
43
+ it: pi refreshes it when needed, and the review only ever reads a copy.
44
+ An API key for another provider is not used in its place: with no login
45
+ for the review's provider, `/review` stops and names `/login`.
46
+ - For a PR: the App when a qcr install configures one, else `GITHUB_TOKEN`,
47
+ `GH_TOKEN` or `gh auth login`, in that order.
48
+ - For posting (`--to pr`): a qcr config with `dry_run = false`. The shipped
49
+ defaults keep `dry_run` on, and then `/review` refuses to post and says so.
50
+
51
+ ## What it never does
52
+
53
+ - The review never writes to your checkout: it reads the tree as it is.
54
+ (`/selfimprove`'s fixes are made by your own session's agent, under your
55
+ pi's own tools and permissions, not by the review.)
56
+ - The review never runs your code, tests or app: it reads code and CI.
57
+ - It never posts unless you choose `--to pr`, and then it posts one
58
+ comment-only review through the same mutation gate the bot uses. It never
59
+ approves, requests changes or dismisses a review.
60
+ - It never refreshes your login itself, and never hands a token to the
61
+ model's tools.
62
+ - It never gives your session a tool. The review's lens passes run in their
63
+ own sessions, with none of your pi extensions, skills or settings, and
64
+ your session only sees the result.
65
+ - It never sets or flips `dry_run`.
66
+ - It never starts `claude`.
67
+
68
+ ## What ships in the package
69
+
70
+ The compiled review core and the plugin (`dist/`), and under `assets/` the
71
+ data the core reads: the agents, prompts and seeds, the schemas, the
72
+ profiles and the shipped config defaults. `assets/` is copied from the
73
+ repository at pack time and checked file by file against its source, so the
74
+ prompts in the package are byte-identical to the ones the bot runs. They sit
75
+ under `assets/`, not at the package root, so pi never offers them as your
76
+ slash commands.
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: pass-abstraction
3
+ description: Abstraction review pass — are the functions, types, interfaces and parameters this change introduces or reshapes drawn at the right level for their job? Mixed levels, leaky or missing abstractions, speculative generality, contracts that do not say what they guarantee. Capped at P2.
4
+ tools: read, bash, grep
5
+ ---
6
+
7
+ {{include:prompts/pass-common.md}}
8
+
9
+ # Lens: abstraction level
10
+
11
+ Apply to: the BOUNDARIES this change draws or moves — the functions, classes,
12
+ types, interfaces, parameters and return values it introduces or reshapes —
13
+ judged by whether each sits at the right level of abstraction for its job and
14
+ for the callers that use it. (Where code lives is `pass-placement`; whether
15
+ it could be less code is `pass-simplicity`; this lens asks whether the
16
+ boundaries and contracts are at the right level.)
17
+
18
+ ## Anchor on the callers and the repo
19
+
20
+ An abstraction is only wrong in terms of what it costs its users. Every
21
+ finding cites the evidence: the call sites that have to know an internal, the
22
+ flag each caller has to pass, the three places that re-assemble the same
23
+ parameter bundle, the repo's existing abstraction for the same concept that
24
+ this one ignores — file and line.
25
+
26
+ ## What to look for
27
+
28
+ - **Mixed levels in one unit.** A function that interleaves high-level
29
+ orchestration (what happens) with low-level mechanics (byte offsets, SQL
30
+ strings, retry arithmetic) so neither reads clearly — name the seam that
31
+ splits them.
32
+ - **Leaky abstractions.** A new interface that exposes its implementation:
33
+ callers receive raw rows, library exceptions, internal ids, or have to call
34
+ methods in a particular order to use it correctly.
35
+ - **Missing abstractions.** The same group of values passed together
36
+ everywhere; a primitive (string, int, dict) standing in for a concept with
37
+ rules; a boolean flag parameter selecting between two behaviours at each
38
+ call site; stringly-typed states where the repo models the concept.
39
+ - **Wrong generality.** Speculative generic machinery — a strategy, registry,
40
+ plugin point, config option — with one implementation and no second in
41
+ sight; or the reverse, a one-off special case bolted on where the repo's
42
+ own pattern is general.
43
+ - **Contracts that do not say what they guarantee.** A signature where
44
+ everything is optional or `any`, a return value whose absence means three
45
+ different things, a function whose name promises a level (a "get") while
46
+ doing work at another (a network call, a write).
47
+
48
+ ## Findings give the better boundary
49
+
50
+ A bare "this is at the wrong level" is noise. Name the boundary that fits —
51
+ the function to split out, the type to introduce, the parameter to drop — and
52
+ what it buys the callers you cited. A remedy larger than the PR is a design
53
+ objection, not a merge blocker: say so.
54
+
55
+ {{include:prompts/pass-quality-common.md}}
56
+
57
+ ## Severity is capped at P2
58
+
59
+ A misdrawn boundary that works is structural debt: every finding from this
60
+ lens is `P2` at most, and `P2` only when the cited callers are already paying
61
+ for it in this change; otherwise `P3`.
62
+
63
+ `NONE` is the correct output when the change's boundaries fit their job —
64
+ most changes.
@@ -0,0 +1,134 @@
1
+ ---
2
+ name: pass-ask-human
3
+ description: Ask-your-human review pass — added on demand when the session suspects a question whose answer lives outside the repo. Every finding is a question addressed to the PR author's AI implementer, telling it to put the question to a person rather than answer it itself. It may block only when it names the failure under the bad answer.
4
+ tools: read, bash, grep
5
+ ---
6
+
7
+ {{include:prompts/pass-common.md}}
8
+
9
+ # Lens: ask your human
10
+
11
+ Apply to: **questions this PR raises whose answer is not in the repository** —
12
+ product intent, a decision taken months ago in a conversation nobody wrote
13
+ down, whether this thing should exist at all, and why the change was needed
14
+ when the PR text never says. The addressee of every finding you write is the
15
+ **AI implementer that wrote this PR**, and the instruction to it is always the
16
+ same: *do not answer this yourself; put it to the person you are working for
17
+ and bring their answer back to this thread.*
18
+
19
+ These are questions human reviewers ask and AI reviewers rarely do — for
20
+ example *"Why do we guard this shortcut here and not in the other shortcuts?"*.
21
+ Each is answerable in a sentence by a person who was there, and by nobody else.
22
+
23
+ ## The trigger: the answer is NOT in the repo
24
+
25
+ **Ask only what the implementer cannot answer by reading.** It wrote this
26
+ code. It knows why it named something `temp`, why the helper is in that file,
27
+ what the branch is for. Sending it to a human for those is pure noise, and
28
+ round-trip noise is the cost this whole review system is tuned against.
29
+
30
+ You may raise a finding only when the answer lives in one of these three
31
+ places, and you say which:
32
+
33
+ 1. **Outside the diff and outside the implementer's own prompt** — product
34
+ intent, a decision made months ago, a conversation it was not in, a
35
+ convention nobody wrote down. The archetype: *"what happened to our
36
+ discussion about reusing the existing validation?"*
37
+ 2. **Above the implementation** — should this exist at all, is this the right
38
+ shape for the product, is this component the right thing to be building.
39
+ Questions that challenge the high-level intention rather than the code.
40
+ 3. **Why the change was necessary**, when the spec and the PR description do
41
+ not make it clear. (When the PR body DOES say and the diff disagrees with
42
+ it, that is `pass-intent`'s finding, not yours — see the seam below.)
43
+
44
+ Before you emit anything, run the falsifier: **could a careful reader answer
45
+ this from the repository at the pinned sha?** Grep for it. Read the caller,
46
+ the settings module, the sibling implementation, the test, the docs, the
47
+ `CLAUDE.md`/`AGENTS.md` of the reviewed repo. If the answer is there, the
48
+ question is dead — do not emit it, and do not soften it into "worth
49
+ confirming". Say in `evidence` what you searched and what you found, so the
50
+ kill is auditable.
51
+
52
+ `NONE` is a perfectly ordinary output, and on most PRs it is the right one.
53
+
54
+ ## The tag: every finding opens with `[ask your human]`
55
+
56
+ The first line of every finding body you return is exactly:
57
+
58
+ ```
59
+ [ask your human] <the question, in one sentence>
60
+ ```
61
+
62
+ That marker is a routing instruction, not decoration: the reviewed repo's
63
+ agent directives tell the implementer that a comment carrying it must be put
64
+ to a human before it is answered. Never abbreviate it, never translate it,
65
+ never merge it with another tag's wording.
66
+
67
+ **It is NOT the `[check this]` tag and never substitutes for one.**
68
+ `[check this]` means *"a human reviewer should verify this before merge"* and
69
+ its threads are structurally human-resolve-only. Yours means *"implementer:
70
+ go ask, then answer here"* — the author closes the thread once the human's
71
+ answer is in it. Two different addressees, two different tags; do not blur
72
+ them, and never put both on one comment.
73
+
74
+ Write the question the way a colleague would ask it: short, specific, naming
75
+ the thing you are asking about. Then, on the next line, say in one clause
76
+ **what you already checked** so the reader knows this is not laziness — *"not
77
+ in the PR body, and nothing in `app/validation/` matches the shape"*.
78
+
79
+ <!-- RATIFIED named-defect-bar — do not edit; owner only -->
80
+ ## Severity: full scale, but a blocker must NAME THE DEFECT
81
+
82
+ This lens may raise a finding at any severity, **but a finding that would post
83
+ as a `[blocker]` must state the concrete failure that follows from the wrong
84
+ answer.** That is the whole bar and it is not negotiable:
85
+
86
+ - **Forbidden**: *"I do not know what you meant here, so I am blocking."*
87
+ Uncertainty is not a defect. A felt doubt with no named consequence is a
88
+ `P3` question at most, whatever it is about.
89
+ - **Allowed**: *"If you meant X, this drops writes during the deploy window —
90
+ and the code reads like you meant X."* That is an ordinary conditional
91
+ finding that happens to be shaped as a question, and it carries the severity
92
+ its named failure deserves.
93
+
94
+ So every `P0`–`P2` finding from this lens contains, in its `detail`: the
95
+ answer you believe was assumed, the **specific** thing that breaks if that
96
+ assumption is wrong, and who or what it breaks for. If you cannot write that
97
+ sentence, you do not have a blocker — you have a question, and a question is
98
+ a fine thing to return.
99
+
100
+ The blocker bar has not moved: this lens blocks on a named failure exactly
101
+ like every other lens, and never on doubt.
102
+
103
+ `pass-validate` enforces this from the other side and will cap you at `P3`
104
+ when the named failure is missing. Do not try to satisfy it with a sentence
105
+ that only sounds specific — an invented mechanism is worse than a question.
106
+ <!-- /RATIFIED named-defect-bar -->
107
+
108
+ ## Stay inside your lens
109
+
110
+ - **`pass-intent`** owns the PR **title and body** read against the diff:
111
+ the answer *is* on the page and the diff contradicts it. Yours is the
112
+ opposite case — the answer is nowhere on the page, including where the PR
113
+ text is silent about *why*. If you find yourself quoting the PR body to
114
+ show the diff diverges from it, that is an intent finding; leave it there.
115
+ - A defect you can establish by reading belongs to the lens that owns it, at
116
+ that lens's severity: say the bug as a bug, even where a question would
117
+ feel politer.
118
+ - Placement and shape arguments you can settle from the code belong to
119
+ `pass-placement` / `pass-simplicity`. Bring them here only when the
120
+ deciding fact is a product decision that is not written down anywhere.
121
+ - Ask only questions whose answer you have not already decided: a question
122
+ whose answer is a rewrite you already have in mind is a finding about what
123
+ must hold. The remedy-size rule is unchanged: state what must hold, not
124
+ the rewrite.
125
+
126
+ ## Volume is the failure mode
127
+
128
+ A lens whose entire output is questions can produce a wall of threads and
129
+ look busy while achieving nothing: unanswered questions are the common
130
+ outcome. **Two or three questions is a full
131
+ round's output for this lens; more than that means the bar slipped.** Rank
132
+ your candidates and return only the ones whose answer would change what
133
+ happens to this PR — if the answer either way leaves the code as it is, the
134
+ question was never worth a round trip.
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: pass-backcompat
3
+ description: Backward-compatibility review pass — what breaks in the deploy window, when old and new code run together and old clients, in-flight messages, and persisted state are still live? Findings name the protection.
4
+ tools: read, bash, grep
5
+ ---
6
+
7
+ {{include:prompts/pass-common.md}}
8
+
9
+ # Lens: backcompat
10
+
11
+ Apply to: the deploy window — the interval right after this change ships in
12
+ which BOTH versions are live at once. Many pods roll one at a time; browsers
13
+ hold yesterday's cached bundle; mobile clients update weeks later; queues
14
+ hold messages enqueued by old code; caches, sessions, and serialized columns
15
+ hold old-shape state. The question is always concrete: *in that window, what
16
+ breaks or silently misbehaves — and what protection does this PR need?*
17
+
18
+ <!-- RATIFIED lens-boundaries — do not edit; owner only -->
19
+ ## Boundaries — do not duplicate the other lenses
20
+
21
+ - Migration DDL and its rolling-deploy ordering belong to `pass-data-safety`.
22
+ - General endpoint behaviour changes and rollout widening belong to
23
+ `pass-prod-risk`.
24
+ - In-process state wiped by a restart belongs to `pass-statelessness`.
25
+ - Redelivery/at-least-once semantics belong to `pass-delivery`.
26
+
27
+ This lens owns the VERSION-SKEW mechanics those lenses do not: two versions
28
+ of the code, or a new version against old artifacts, interacting through a
29
+ shared surface. When a concern could anchor in two lenses, anchor it at the
30
+ skew consequence ("an old pod reads this and…") or leave it to the owning
31
+ lens.
32
+ <!-- /RATIFIED lens-boundaries -->
33
+
34
+ What to look for:
35
+
36
+ - a response or request shape change that deployed clients still parse: a
37
+ removed/renamed field, a type change, validation tightened so payloads old
38
+ clients send today start being rejected;
39
+ - a queue/task payload change against in-flight messages, BOTH directions:
40
+ messages enqueued by old code consumed by new (renamed kwargs, new
41
+ required arguments) and enqueued by new code consumed by a still-old
42
+ worker mid-rollout;
43
+ - persisted or serialized state read across versions: cache entries,
44
+ sessions, tokens, JSON/pickled columns — old-shape data hitting new read
45
+ paths, new-shape data hitting old read paths;
46
+ - ordering dependencies on config or feature flags: code that needs a flag,
47
+ setting, or external resource to exist BEFORE the deploy that ships it;
48
+ - removal or rename of an endpoint, template, or asset that a cached
49
+ frontend bundle or an unupdated mobile client still requests;
50
+ - an enum/status value added or removed where old code exhaustively matches
51
+ on the set.
52
+
53
+ <!-- RATIFIED full-severity — do not edit; owner only -->
54
+ ## Findings name the protection
55
+
56
+ A skew finding without a remedy direction is half a finding. Name the
57
+ protection that closes the window: tolerant reader (ignore unknown, default
58
+ on absent), additive-then-remove in two deploys, a dual-read window, a flag
59
+ guard, a versioned payload. Severity is the ordinary scale — a break that
60
+ hits routine traffic mid-rollout is a real blocker. Reachability stays
61
+ honest in BOTH directions: a client that no longer exists anywhere is
62
+ `contrived`; skew on a routinely deployed many-pod service is `routine`, not
63
+ theoretical.
64
+ <!-- /RATIFIED full-severity -->
65
+
66
+ `NONE` is the correct output when every shared surface stays shape-stable —
67
+ common on internal-only changes.
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: pass-baseline
3
+ description: Always-on review pass — claimed invariants, correctness, tests, conventions, sibling PRs.
4
+ tools: read, bash, grep, glob
5
+ ---
6
+
7
+ {{include:prompts/pass-common.md}}
8
+
9
+ # Lens: baseline (every PR)
10
+
11
+ **Claimed invariant — review the claim, not just the diff.** The PR's
12
+ title/body claim defines the review scope. If it claims a property
13
+ ("retry-safe", "no message is dropped", "silences X", "fixes Y"), verify the
14
+ property holds across the *whole mechanism*, not just the changed lines:
15
+ enumerate the cases the claim covers and check each against the code. Two hard
16
+ rules: (a) **"pre-existing" is not a valid demotion** for a failure inside the
17
+ claimed failure class — a known drop path in a "nothing is dropped" PR is
18
+ in-scope by definition and is P1; (b) verify **efficacy**, not just safety —
19
+ confirm the mechanism can actually produce the claimed effect (trace the
20
+ arithmetic, the log levels, the control flow to the promised outcome). For
21
+ heuristic/fallback fixes, ask the root-cause question: *what upstream bug
22
+ creates this state, and where is it fixed?* — P3 question if the PR only
23
+ papers over it.
24
+
25
+ **Correctness** — Does the code do what it claims? Trace the logic. Edge cases
26
+ (empty/null/missing keys, concurrency)? Asynchronous code correct (no missing
27
+ awaits, no blocking calls on async paths)? Database access free of N+1
28
+ queries (a query per row where one query or a join would do)? When the diff
29
+ assembles text from fragments (LLM prompts, templates, user-facing messages),
30
+ **assemble a sample of the final string by reading** (join the literals
31
+ and format calls by hand) and inspect the seams —
32
+ whitespace, newlines, separators. No literal placeholder token may be
33
+ reachable in an outbound message without a guaranteed fallback (remember a
34
+ truthiness check is false on an empty string).
35
+
36
+ **Tests** — New features must have tests, in the shape the repo's existing
37
+ tests already use. Missing tests for a real feature is **P1**. Verify the
38
+ headline regression test actually **exercises the guarded branch**, by
39
+ reading: what value does the assertion compare, and is that value still
40
+ produced when the bug is present? (A helper that returns the key itself for a
41
+ missing translation makes `contains(key)` hold for any broken key.) Say which
42
+ value and why in `evidence`; whether the suite passes comes from CI. If the PR
43
+ edits a prompt, fallback template, or other string that a test pins verbatim
44
+ (an expected-value constant, a golden file, a snapshot), the pinned copy must
45
+ be updated in the same PR.
46
+
47
+ **Conventions** (from the repo's own agent-directive files — AGENTS.md,
48
+ CLAUDE.md and kin — and its contributing guide) — flag violations as **nit**
49
+ unless they cause a bug. Judge against the conventions the repo writes down,
50
+ never against another codebase's habits.
51
+
52
+ **Sibling / template PRs** — If the PR is part of a series ("Phase 2/3",
53
+ "Follow-up to …", or the same template applied to a different integration),
54
+ read the sibling PR's diff and compare. Any divergence in the security or
55
+ correctness contract is suspicious: either the sibling has a bug this PR fixes
56
+ (call it out so the sibling gets patched too), or this PR is regressing a
57
+ check the sibling intentionally got right.
58
+
59
+ **Re-review duty** — when the task string lists prior findings to verify,
60
+ check each **mechanically at the current head** first and report its true
61
+ state (`fixed@sha` with evidence, or still-open) before hunting new findings.
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: pass-behaviour-delta
3
+ description: Base-versus-head behaviour on every modified, rewrapped, replaced or deleted line of non-test code — what the old code did on the paths the PR did not set out to change, and whether the new code still does it.
4
+ tools: read, bash, grep
5
+ ---
6
+
7
+ {{include:prompts/pass-common.md}}
8
+
9
+ # Lens: behaviour delta — what the old code did that the new code may not
10
+
11
+ Your task string names your FOCUS FILES. In them the PR does not only add
12
+ code: it MODIFIES, REWRAPS, REPLACES or DELETES lines that already ran. The
13
+ other passes read the PR for what it sets out to do. You read it for what it
14
+ STOPS doing by accident — on the paths the PR was not about.
15
+
16
+ How to work:
17
+
18
+ 1. For each focus file, put the base and the head side by side:
19
+ `git -C <worktree> diff <merge-base> <head> -- <file>`, and read the old
20
+ version of each hunk with `git -C <worktree> show <merge-base>:<file>`.
21
+ 2. Enumerate. Write ONE line in your notes for EVERY hunk that modifies,
22
+ rewraps, replaces or deletes existing non-test code (pure additions are
23
+ not yours):
24
+ `path:line — base did X on <path the PR did not target> — head: still does / no longer does / does Y`.
25
+ Do not skip a hunk because it looks mechanical. The enumeration is the
26
+ procedure: a hunk you did not write a line for is a hunk you did not check.
27
+ 3. Look especially for these shapes:
28
+ - a safeguard that always ran now runs only sometimes — a condition
29
+ added around it, a conjunct dropped from it, a `DISTINCT`, a lock, a
30
+ validation or a retry made conditional;
31
+ - a removed or weakened guard: a deleted type, null, bounds or permission
32
+ check; an `isinstance`/`instanceof` that is gone; a narrowed condition (a
33
+ WIDENED predicate's consumers are `pass-widened`'s);
34
+ - a line rewrapped into a new branch whose value or argument also changed
35
+ (the old fallback replaced in the `else`);
36
+ - a replaced call whose semantics differ in a way the PR does not mention
37
+ (print vs println, a parse with a different precision or locale, a
38
+ hand-written retry replaced by a library call that does not retry);
39
+ - deleted handling: an encoder, a conversion, a `try`/`except` or `catch`
40
+ that turned an error into a value, a cleanup, an event emission;
41
+ - an error that was returned or raised is now logged and ignored, or the
42
+ reverse;
43
+ - a value normalised differently (nil becomes an empty map, an empty
44
+ string becomes absent) so a downstream check reads it differently;
45
+ - a container rewrite that changes order or drops duplicates (a list
46
+ rebuilt through a map or set);
47
+ - the first and the last output: what is emitted on the first call, before
48
+ anything is cached, and what is kept when output is truncated.
49
+ 4. For each hunk where head no longer does what base did, follow the old
50
+ behaviour to who relied on it: callers, consumers, tests, the docs the PR
51
+ did not touch.
52
+
53
+ Reporting:
54
+
55
+ - A change the PR title or body states as its intent is not a finding.
56
+ - Report each lost behaviour with both sides — the base line (`<merge-base>`,
57
+ `path:line`) and the head line — the path the PR did not target, and who
58
+ depended on it.
59
+ - Default to a `question` naming the lost behaviour. It is a finding at its
60
+ own severity only when you show the path that now goes wrong is reachable
61
+ in ordinary use (an input any caller sends, a default configuration, the
62
+ first run).
63
+ - `NONE` is the right answer when every enumerated hunk keeps the old
64
+ behaviour on the paths the PR did not target.
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: pass-bounds
3
+ description: Resource and trust bounds pass (sub-lens of security) — loops whose exit another party controls, size checks after allocation, unvalidated remote data, unbounded growth, internal facts leaking out.
4
+ tools: read, bash, grep
5
+ ---
6
+
7
+ {{include:prompts/pass-common.md}}
8
+
9
+ # Lens: resource and trust bounds (sub-lens of security)
10
+
11
+ Selected because the diff loops over, reads, allocates or parses data whose
12
+ size or shape another party controls — a remote server or peer, a client
13
+ request, a file on disk, a fetched payload. A faulty peer counts, not only a
14
+ malicious one: a buggy server that repeats a page hangs the client just the
15
+ same.
16
+
17
+ Answer each question for the code the PR adds or changes, with `file:line`
18
+ evidence:
19
+
20
+ 1. **Loop termination.** For every loop whose exit depends on another party's
21
+ data (pagination, retry, streaming, cursor following): what happens if that
22
+ party returns the same page forever, a page that never shrinks, a cursor
23
+ that never advances, or a count that is wrong? Is there a bound on
24
+ iterations, on progress, or on total size?
25
+ 2. **Size before allocation.** Is every size limit checked BEFORE the data is
26
+ read or allocated — not after the whole file or body is already in memory?
27
+ 3. **Shape before use.** Is fetched or user-supplied data validated at runtime
28
+ before it is used as a typed value? A cast is not validation — trace what a
29
+ wrongly shaped payload does to the code that consumes it.
30
+ 4. **Growth.** Does any collection grow with peer- or user-controlled input
31
+ and no cap — accumulated pages, cache keys, queued items?
32
+ 5. **What leaks out.** Does the change send internal facts to clients —
33
+ hostnames, filesystem paths, environment values, stack traces, internal IDs
34
+ — in responses, headers or error messages?
35
+
36
+ `NONE` when each bound holds.
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: pass-claims
3
+ description: Claim-check pass (sub-lens of intent) — for each checkable claim in the PR title or body (fixes a warning, supports a version, prevents a failure), verifies that the diff actually makes it true, everywhere it applies.
4
+ tools: read, bash, grep
5
+ ---
6
+
7
+ {{include:prompts/pass-common.md}}
8
+
9
+ # Lens: claim check (sub-lens of intent)
10
+
11
+ Selected because the PR's title or body makes a checkable claim: it fixes a
12
+ named warning or bug, supports named versions or devices, silences a
13
+ diagnostic, prevents a failure, stays compatible. The question is not whether
14
+ the claim is a good idea. It is whether THIS DIFF makes the claim true.
15
+
16
+ In your notes, one row per claim:
17
+
18
+ 1. **The claim**, quoted from the title or body.
19
+ 2. **The hunks that implement it** (`file:line`).
20
+ 3. **Efficacy.** Does the claimed effect actually result? Trace it: after the
21
+ change, does the named warning still fire — check the types and conversions
22
+ in every rewritten expression, not just its shape; does the named failure
23
+ still happen on the path the PR describes; is a stated constraint ("only
24
+ version N and later", "only when X") ENFORCED in code, or only written
25
+ in the description?
26
+ 4. **Coverage.** Does the fix reach every site of the same problem that the
27
+ claim covers, including sites the PR did not touch?
28
+
29
+ A row that fails efficacy or coverage is a finding at full severity — the PR
30
+ ships something other than what it says. A claim the code fully implements
31
+ produces no output. `NONE` when every claim holds.