@shllg/emend 0.0.0-stage → 0.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 (447) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +144 -2
  3. package/bin/emend +27 -0
  4. package/dist/emend.mjs +83479 -0
  5. package/dist/publish-worker.mjs +55744 -0
  6. package/dist/skills/emend-feedback/SKILL.md +242 -0
  7. package/dist/skills/emend-publish/SKILL.md +82 -0
  8. package/dist/skills/emend-review/SKILL.md +404 -0
  9. package/dist/skills/emend-review/references/manifest.md +272 -0
  10. package/dist/web/assets/App-DmCsRMr_.js +4 -0
  11. package/dist/web/assets/DiffPane-DV6oIbim.js +238 -0
  12. package/dist/web/assets/abap-CLvhMVsD.js +1 -0
  13. package/dist/web/assets/actionscript-3-Cs6JJXT5.js +1 -0
  14. package/dist/web/assets/ada-X3Y2mlq2.js +1 -0
  15. package/dist/web/assets/ahk-DwADkxyd.js +1 -0
  16. package/dist/web/assets/ahk2-_6rzW9BS.js +1 -0
  17. package/dist/web/assets/andromeeda-vGVdxbeo.js +1 -0
  18. package/dist/web/assets/angular-html-BswFT_28.js +1 -0
  19. package/dist/web/assets/angular-html-DOLkzBtu.js +1 -0
  20. package/dist/web/assets/angular-ts-DOMhGxLQ.js +1 -0
  21. package/dist/web/assets/apache-U0d_L8uA.js +1 -0
  22. package/dist/web/assets/apex-KFGFyKwG.js +1 -0
  23. package/dist/web/assets/apl-Dio8Ke0X.js +1 -0
  24. package/dist/web/assets/app-Bzpxikx1.js +10 -0
  25. package/dist/web/assets/app-DItdWcRc.css +2 -0
  26. package/dist/web/assets/applescript-CCn79oCD.js +1 -0
  27. package/dist/web/assets/ara-4CJ0cIlV.js +1 -0
  28. package/dist/web/assets/asciidoc-SCjQUq34.js +1 -0
  29. package/dist/web/assets/asm-Cmm7eHzH.js +1 -0
  30. package/dist/web/assets/astro-CN6YWUG3.js +1 -0
  31. package/dist/web/assets/aurora-x-CDeNXAV0.js +1 -0
  32. package/dist/web/assets/awk-BWXHIvNe.js +1 -0
  33. package/dist/web/assets/ayu-dark-DluEY0Gj.js +1 -0
  34. package/dist/web/assets/ayu-light-C3h-C4tm.js +1 -0
  35. package/dist/web/assets/ayu-mirage-Bqwy1Gya.js +1 -0
  36. package/dist/web/assets/ballerina-B7ZEbQpA.js +1 -0
  37. package/dist/web/assets/bat-C7sJWglS.js +1 -0
  38. package/dist/web/assets/bat-HFWzIrao.js +1 -0
  39. package/dist/web/assets/beancount-C2IN4Vk8.js +1 -0
  40. package/dist/web/assets/berry-DKpUyyne.js +1 -0
  41. package/dist/web/assets/bibtex-Conh3HYz.js +1 -0
  42. package/dist/web/assets/bibtex-DUQXB5kJ.js +1 -0
  43. package/dist/web/assets/bicep-CUHmPFLl.js +1 -0
  44. package/dist/web/assets/bird2-CYIUgYqB.js +1 -0
  45. package/dist/web/assets/blade-BrDpNfUX.js +1 -0
  46. package/dist/web/assets/bsl-gRq8cI6V.js +1 -0
  47. package/dist/web/assets/c-Cz4nF6n_.js +1 -0
  48. package/dist/web/assets/c-SSSlmE39.js +1 -0
  49. package/dist/web/assets/c3-D0apG41V.js +1 -0
  50. package/dist/web/assets/cadence-CQ2zXKGN.js +1 -0
  51. package/dist/web/assets/cairo-D66nqRlU.js +1 -0
  52. package/dist/web/assets/catppuccin-frappe-C9Q5zVZY.js +1 -0
  53. package/dist/web/assets/catppuccin-latte-CtsyrtPq.js +1 -0
  54. package/dist/web/assets/catppuccin-macchiato-R8nAf1vR.js +1 -0
  55. package/dist/web/assets/catppuccin-mocha-DjuaAJKi.js +1 -0
  56. package/dist/web/assets/chapel-C1sUNn9S.js +1 -0
  57. package/dist/web/assets/clarity-CtfBBspg.js +1 -0
  58. package/dist/web/assets/clojure-CAE6QLVB.js +1 -0
  59. package/dist/web/assets/clojure-zIjcJonk.js +1 -0
  60. package/dist/web/assets/cmake-Cpsd-0Y4.js +1 -0
  61. package/dist/web/assets/cmake-T_kMSWuN.js +1 -0
  62. package/dist/web/assets/cobol-BvqUwMCV.js +1 -0
  63. package/dist/web/assets/codeowners-C8r90Shi.js +1 -0
  64. package/dist/web/assets/codeql-oeQT6MSM.js +1 -0
  65. package/dist/web/assets/coffee-BSYIIMkB.js +1 -0
  66. package/dist/web/assets/coffee-NEqv5HL5.js +1 -0
  67. package/dist/web/assets/common-lisp-Cv5bFMCO.js +1 -0
  68. package/dist/web/assets/coq-CGaSfhwR.js +1 -0
  69. package/dist/web/assets/core-DeNxjJfs.js +4 -0
  70. package/dist/web/assets/core-Do9T5j9E.js +1 -0
  71. package/dist/web/assets/core-pJdRfnbv.js +1 -0
  72. package/dist/web/assets/cpp-BDT6bThX.js +1 -0
  73. package/dist/web/assets/cpp-vothkh01.js +1 -0
  74. package/dist/web/assets/crystal-DEF7AEJQ.js +1 -0
  75. package/dist/web/assets/csharp-B3DbjJyj.js +1 -0
  76. package/dist/web/assets/csharp-CFKDkFDZ.js +1 -0
  77. package/dist/web/assets/css-BGIxQoYs.js +1 -0
  78. package/dist/web/assets/css-DgaLhXQH.js +1 -0
  79. package/dist/web/assets/csv-B_R7vXwK.js +1 -0
  80. package/dist/web/assets/csv-k4CB9lhx.js +1 -0
  81. package/dist/web/assets/cue-CE9AQfxI.js +1 -0
  82. package/dist/web/assets/cypher-ClKdZ_lG.js +1 -0
  83. package/dist/web/assets/d-qD-0Kul2.js +1 -0
  84. package/dist/web/assets/dark-plus-Cs2F2srj.js +1 -0
  85. package/dist/web/assets/dart-DjhkpiWP.js +1 -0
  86. package/dist/web/assets/dart-_dH3dQdM.js +1 -0
  87. package/dist/web/assets/dax-BkyTk9wS.js +1 -0
  88. package/dist/web/assets/desktop-Dlh5hvp9.js +1 -0
  89. package/dist/web/assets/diff-CR4ZX0DC.js +1 -0
  90. package/dist/web/assets/diff-counts-BjEBBpbE.js +95 -0
  91. package/dist/web/assets/diff-counts-CdprTo7g.css +1 -0
  92. package/dist/web/assets/diff-eeGLjE2V.js +1 -0
  93. package/dist/web/assets/docker-CAzcIhYn.js +1 -0
  94. package/dist/web/assets/docker-D0LTq72f.js +1 -0
  95. package/dist/web/assets/dotenv-CuH5my32.js +1 -0
  96. package/dist/web/assets/dracula-BHWKrbxM.js +1 -0
  97. package/dist/web/assets/dracula-soft-5eyTD99u.js +1 -0
  98. package/dist/web/assets/dream-maker-DW3nJb8Q.js +1 -0
  99. package/dist/web/assets/edge-B_SBzXGF.js +1 -0
  100. package/dist/web/assets/elixir-BL8v4QDr.js +1 -0
  101. package/dist/web/assets/elixir-BN3BkYei.js +1 -0
  102. package/dist/web/assets/elm-CC1TmzeR.js +1 -0
  103. package/dist/web/assets/emacs-lisp-DR2vtWaj.js +1 -0
  104. package/dist/web/assets/engine-javascript-DKxkqixV.js +141 -0
  105. package/dist/web/assets/engine-javascript-DgfjoSY2.js +141 -0
  106. package/dist/web/assets/erb-BjlLGk-_.js +1 -0
  107. package/dist/web/assets/erlang-CCXss5H6.js +1 -0
  108. package/dist/web/assets/erlang-ir39Pet8.js +1 -0
  109. package/dist/web/assets/everforest-dark-sB-x3p7T.js +1 -0
  110. package/dist/web/assets/everforest-light-Df2xbC6M.js +1 -0
  111. package/dist/web/assets/fennel-DQxkIbk2.js +1 -0
  112. package/dist/web/assets/fish-BJitypiv.js +1 -0
  113. package/dist/web/assets/fluent-C03EYrpw.js +1 -0
  114. package/dist/web/assets/fortran-fixed-form-1cK5gXa1.js +1 -0
  115. package/dist/web/assets/fortran-free-form-C5q_0aPq.js +1 -0
  116. package/dist/web/assets/fortran-free-form-uHOymLAb.js +1 -0
  117. package/dist/web/assets/fsharp-C37UASp4.js +1 -0
  118. package/dist/web/assets/fsharp-SO2Zcqp5.js +1 -0
  119. package/dist/web/assets/gdresource-LxjHb83i.js +1 -0
  120. package/dist/web/assets/gdscript-CJEqcM-5.js +1 -0
  121. package/dist/web/assets/gdscript-DJFPOtzS.js +1 -0
  122. package/dist/web/assets/gdshader-BNp4G147.js +1 -0
  123. package/dist/web/assets/gdshader-kiBtQlv1.js +1 -0
  124. package/dist/web/assets/genie-CV2tkWYe.js +1 -0
  125. package/dist/web/assets/gherkin-DExj1W_8.js +1 -0
  126. package/dist/web/assets/git-commit-BAuDFD-1.js +1 -0
  127. package/dist/web/assets/git-commit-DaNUDv1O.js +1 -0
  128. package/dist/web/assets/git-rebase-Bh7mDoAc.js +1 -0
  129. package/dist/web/assets/git-rebase-qxk4jQ_Z.js +1 -0
  130. package/dist/web/assets/github-dark-C-LZuMrd.js +1 -0
  131. package/dist/web/assets/github-dark-default-DXG-b-1a.js +1 -0
  132. package/dist/web/assets/github-dark-dimmed-Bx1FflLF.js +1 -0
  133. package/dist/web/assets/github-dark-high-contrast-B_tTalzw.js +1 -0
  134. package/dist/web/assets/github-light-EUqPIrTm.js +1 -0
  135. package/dist/web/assets/github-light-default-BXViO-2h.js +1 -0
  136. package/dist/web/assets/github-light-high-contrast-B68TUdTA.js +1 -0
  137. package/dist/web/assets/gleam-CSRkHgEL.js +1 -0
  138. package/dist/web/assets/glimmer-js-CIdbWayl.js +1 -0
  139. package/dist/web/assets/glimmer-ts-B16xCo2k.js +1 -0
  140. package/dist/web/assets/glsl-CaPTrB3a.js +1 -0
  141. package/dist/web/assets/glsl-D01ELkOo.js +1 -0
  142. package/dist/web/assets/gn-CAXYAgV-.js +1 -0
  143. package/dist/web/assets/gnuplot-7GGW24-e.js +1 -0
  144. package/dist/web/assets/go-CC6EVc1J.js +1 -0
  145. package/dist/web/assets/go-CFMhVTkq.js +1 -0
  146. package/dist/web/assets/graphql-BZEhxNwM.js +1 -0
  147. package/dist/web/assets/graphql-DEIChqxY.js +1 -0
  148. package/dist/web/assets/groovy-Dj7WCBJM.js +1 -0
  149. package/dist/web/assets/groovy-_MokPXAr.js +1 -0
  150. package/dist/web/assets/gruvbox-dark-hard-C820rvS2.js +1 -0
  151. package/dist/web/assets/gruvbox-dark-medium-BPjhmG05.js +1 -0
  152. package/dist/web/assets/gruvbox-dark-soft-MrdJrrXF.js +1 -0
  153. package/dist/web/assets/gruvbox-light-hard-BC_s9l72.js +1 -0
  154. package/dist/web/assets/gruvbox-light-medium-BAWPOn9u.js +1 -0
  155. package/dist/web/assets/gruvbox-light-soft-BSMLrYjP.js +1 -0
  156. package/dist/web/assets/hack-C30D-q0p.js +1 -0
  157. package/dist/web/assets/haml-BU6KMePS.js +1 -0
  158. package/dist/web/assets/haml-C1zHJAQt.js +1 -0
  159. package/dist/web/assets/handlebars-WZCg7K7Q.js +1 -0
  160. package/dist/web/assets/handlebars-g-3gLrXt.js +1 -0
  161. package/dist/web/assets/hanken-grotesk-latin-ext-wght-normal-Dg-wlmqe.woff2 +0 -0
  162. package/dist/web/assets/hanken-grotesk-latin-wght-italic-ChtpyDsL.woff2 +0 -0
  163. package/dist/web/assets/hanken-grotesk-latin-wght-normal-CaVRRdDk.woff2 +0 -0
  164. package/dist/web/assets/haskell-D8IpX4py.js +1 -0
  165. package/dist/web/assets/hastToHtml-ptNQFKyE.js +3 -0
  166. package/dist/web/assets/haxe-B0BMDyun.js +1 -0
  167. package/dist/web/assets/haxe-CD8O8Ul0.js +1 -0
  168. package/dist/web/assets/hcl-Dh228itO.js +1 -0
  169. package/dist/web/assets/hjson-CxZEssPk.js +1 -0
  170. package/dist/web/assets/hlsl-DQJgUA8P.js +1 -0
  171. package/dist/web/assets/hlsl-ajL2FB-w.js +1 -0
  172. package/dist/web/assets/horizon-CE9ld1lL.js +1 -0
  173. package/dist/web/assets/horizon-bright-DSNQnXHK.js +1 -0
  174. package/dist/web/assets/houston-CsvMBhTu.js +1 -0
  175. package/dist/web/assets/html-BCy9P6D2.js +1 -0
  176. package/dist/web/assets/html-DSw1lh5G.js +1 -0
  177. package/dist/web/assets/html-derivative-DyzJkWO6.js +1 -0
  178. package/dist/web/assets/html-derivative-ekTk9Unt.js +1 -0
  179. package/dist/web/assets/http-BjrBtiM6.js +1 -0
  180. package/dist/web/assets/hurl-B4P9s9G3.js +1 -0
  181. package/dist/web/assets/hxml-DPF7XkXa.js +1 -0
  182. package/dist/web/assets/hy-CZbG8q4J.js +1 -0
  183. package/dist/web/assets/imba-DsUTQ-LC.js +1 -0
  184. package/dist/web/assets/ini-0B7NLFlx.js +1 -0
  185. package/dist/web/assets/ini-DiZ1IqbV.js +1 -0
  186. package/dist/web/assets/java-BtIQNnN0.js +1 -0
  187. package/dist/web/assets/java-_ATy9zCa.js +1 -0
  188. package/dist/web/assets/javascript-BzbQS41l.js +1 -0
  189. package/dist/web/assets/javascript-CpIGwZ_Y.js +1 -0
  190. package/dist/web/assets/jinja-dRcm23Ea.js +1 -0
  191. package/dist/web/assets/jison-D3aJooqo.js +1 -0
  192. package/dist/web/assets/json-B88Oqtu5.js +1 -0
  193. package/dist/web/assets/json-C3WlssX3.js +1 -0
  194. package/dist/web/assets/json5-BR5RXkoi.js +1 -0
  195. package/dist/web/assets/jsonc-BzJ54Uh_.js +1 -0
  196. package/dist/web/assets/jsonc-dcnCvL0G.js +1 -0
  197. package/dist/web/assets/jsonl-CmCQp5Yx.js +1 -0
  198. package/dist/web/assets/jsonnet-CJTPZ8u_.js +1 -0
  199. package/dist/web/assets/jssm-DXw9l8Rf.js +1 -0
  200. package/dist/web/assets/jsx-C4yDKi0A.js +1 -0
  201. package/dist/web/assets/jsx-D3KKoC5L.js +1 -0
  202. package/dist/web/assets/jsx-runtime-BwolrYx8.js +1 -0
  203. package/dist/web/assets/julia-C8a5hZkp.js +1 -0
  204. package/dist/web/assets/julia-hqywDEUR.js +1 -0
  205. package/dist/web/assets/just-CP_wDfXI.js +1 -0
  206. package/dist/web/assets/kanagawa-dragon-Bozd7klA.js +1 -0
  207. package/dist/web/assets/kanagawa-lotus-BmuOG9ZW.js +1 -0
  208. package/dist/web/assets/kanagawa-wave-BML5mF2J.js +1 -0
  209. package/dist/web/assets/kdl-CsD5j6eV.js +1 -0
  210. package/dist/web/assets/kotlin-DhhofPvG.js +1 -0
  211. package/dist/web/assets/kusto-C7mF5XQf.js +1 -0
  212. package/dist/web/assets/langs-XfjJeIZX.js +2 -0
  213. package/dist/web/assets/laserwave-C_8bwKvT.js +1 -0
  214. package/dist/web/assets/latex-B_Ztlc7G.js +1 -0
  215. package/dist/web/assets/latex-Bn9nYtub.js +1 -0
  216. package/dist/web/assets/lean-CewbzKMR.js +1 -0
  217. package/dist/web/assets/less-B64L-FWb.js +1 -0
  218. package/dist/web/assets/less-CXhFgJ4v.js +1 -0
  219. package/dist/web/assets/lib-6HYXi0_j.js +9 -0
  220. package/dist/web/assets/light-plus-DVQuIRkW.js +1 -0
  221. package/dist/web/assets/liquid-CQNtsgCr.js +1 -0
  222. package/dist/web/assets/llvm-DqHOMS-s.js +1 -0
  223. package/dist/web/assets/log-Bu1ZtrH6.js +1 -0
  224. package/dist/web/assets/log-BvtJ4bSl.js +1 -0
  225. package/dist/web/assets/logo-Cluzi2Zq.js +1 -0
  226. package/dist/web/assets/lua-DjuecEsk.js +1 -0
  227. package/dist/web/assets/lua-fPRBWD-V.js +1 -0
  228. package/dist/web/assets/luau-VGWVLoqX.js +1 -0
  229. package/dist/web/assets/make-B54cR2A1.js +1 -0
  230. package/dist/web/assets/make-URElk0GJ.js +1 -0
  231. package/dist/web/assets/markdown-CboqBxpY.js +1 -0
  232. package/dist/web/assets/markdown-CjQmuOi1.js +1 -0
  233. package/dist/web/assets/marko-DPS0EkZ1.js +1 -0
  234. package/dist/web/assets/martian-mono-latin-ext-standard-normal-DeTdBbNh.woff2 +0 -0
  235. package/dist/web/assets/martian-mono-latin-standard-normal-1TqSgyfh.woff2 +0 -0
  236. package/dist/web/assets/material-theme-Bm3Qr25_.js +1 -0
  237. package/dist/web/assets/material-theme-darker-2IIEA8gg.js +1 -0
  238. package/dist/web/assets/material-theme-lighter-uhdI0v04.js +1 -0
  239. package/dist/web/assets/material-theme-ocean-CHQ94UKr.js +1 -0
  240. package/dist/web/assets/material-theme-palenight-B5W6OYN7.js +1 -0
  241. package/dist/web/assets/matlab-D7qyCx1q.js +1 -0
  242. package/dist/web/assets/mdc-C6srEd4p.js +1 -0
  243. package/dist/web/assets/mdx-DQZ5AkYe.js +1 -0
  244. package/dist/web/assets/mermaid-BxpfTIzt.js +1 -0
  245. package/dist/web/assets/mermaid-frame-CynTjgCI.js +4255 -0
  246. package/dist/web/assets/min-dark-BSWPekZh.js +1 -0
  247. package/dist/web/assets/min-light-DDpmG2fV.js +1 -0
  248. package/dist/web/assets/mipsasm-BMqwQI7S.js +1 -0
  249. package/dist/web/assets/mojo-fg40_ntQ.js +1 -0
  250. package/dist/web/assets/monokai-BscAjiQZ.js +1 -0
  251. package/dist/web/assets/moonbit-D9W784E_.js +1 -0
  252. package/dist/web/assets/move-BYnGhZoM.js +1 -0
  253. package/dist/web/assets/narrat-_X_XdTYD.js +1 -0
  254. package/dist/web/assets/nextflow-groovy-C770ykRh.js +1 -0
  255. package/dist/web/assets/nextflow-groovy-D5vAge1Z.js +1 -0
  256. package/dist/web/assets/nextflow-uA5IJerx.js +1 -0
  257. package/dist/web/assets/nginx-BxRBJ-Af.js +1 -0
  258. package/dist/web/assets/night-owl-DhmEMT88.js +1 -0
  259. package/dist/web/assets/night-owl-light-eJ-hLW7d.js +1 -0
  260. package/dist/web/assets/nim-DN3EGtL-.js +1 -0
  261. package/dist/web/assets/nim-ZjzS1dcU.js +1 -0
  262. package/dist/web/assets/nix-IvuFDN5E.js +1 -0
  263. package/dist/web/assets/nord-Cb4Vim4T.js +1 -0
  264. package/dist/web/assets/nsis-CjNLYCLg.js +1 -0
  265. package/dist/web/assets/nushell--0fT3PI1.js +1 -0
  266. package/dist/web/assets/objective-c-CsonrGpd.js +1 -0
  267. package/dist/web/assets/objective-c-D_ECFp-D.js +1 -0
  268. package/dist/web/assets/objective-cpp-BsSzOQcm.js +1 -0
  269. package/dist/web/assets/ocaml-BuP2SoBQ.js +1 -0
  270. package/dist/web/assets/ocaml-D6dNsUd0.js +1 -0
  271. package/dist/web/assets/odin-B1RWQWA5.js +1 -0
  272. package/dist/web/assets/one-dark-pro-C6YyR8OD.js +1 -0
  273. package/dist/web/assets/one-light-D7Lr4KcI.js +1 -0
  274. package/dist/web/assets/openscad-BUDT5pXO.js +1 -0
  275. package/dist/web/assets/org-BRAbLUOJ.js +1 -0
  276. package/dist/web/assets/pairing-secret-YzFjEOKw.js +2 -0
  277. package/dist/web/assets/parse.worker-DkIMf7Rx.js +23 -0
  278. package/dist/web/assets/pascal-4ZHwLPI5.js +1 -0
  279. package/dist/web/assets/perl-Ciba4h2-.js +1 -0
  280. package/dist/web/assets/perl-sgZsTtaf.js +1 -0
  281. package/dist/web/assets/php-D9QpVhjP.js +1 -0
  282. package/dist/web/assets/php-DBfnyu6d.js +1 -0
  283. package/dist/web/assets/pierre-dark-CpLgRqie.js +1 -0
  284. package/dist/web/assets/pierre-dark-protanopia-deuteranopia-B35FxJx-.js +1 -0
  285. package/dist/web/assets/pierre-dark-soft-kZQmAZld.js +1 -0
  286. package/dist/web/assets/pierre-dark-tritanopia-CpjhbsIL.js +1 -0
  287. package/dist/web/assets/pierre-dark-vibrant-CpQYzh95.js +1 -0
  288. package/dist/web/assets/pierre-light-CoaEpmwp.js +1 -0
  289. package/dist/web/assets/pierre-light-protanopia-deuteranopia-0fSaH845.js +1 -0
  290. package/dist/web/assets/pierre-light-soft-lWLdNTOI.js +1 -0
  291. package/dist/web/assets/pierre-light-tritanopia-CEbqgOJL.js +1 -0
  292. package/dist/web/assets/pierre-light-vibrant-D80Fkn33.js +1 -0
  293. package/dist/web/assets/pkl-ot-7Btpt.js +1 -0
  294. package/dist/web/assets/plastic-DQwYfKfQ.js +1 -0
  295. package/dist/web/assets/plsql-DGHpHOYJ.js +1 -0
  296. package/dist/web/assets/po-BiJDBrnU.js +1 -0
  297. package/dist/web/assets/poimandres-DRFjx7u4.js +1 -0
  298. package/dist/web/assets/polar-C7UOKdEL.js +1 -0
  299. package/dist/web/assets/postcss-D_Wz94rJ.js +1 -0
  300. package/dist/web/assets/postcss-DkKB82OS.js +1 -0
  301. package/dist/web/assets/powerquery-DNMTfnFr.js +1 -0
  302. package/dist/web/assets/powershell-Blb2ISmZ.js +1 -0
  303. package/dist/web/assets/powershell-CItYMEtV.js +1 -0
  304. package/dist/web/assets/preload-helper-BLdHbfdN.js +1 -0
  305. package/dist/web/assets/prisma-DMgNhnYS.js +1 -0
  306. package/dist/web/assets/prolog-iXnhIJG7.js +1 -0
  307. package/dist/web/assets/proto-DB4EqR-F.js +1 -0
  308. package/dist/web/assets/pug-C_nSP9Mg.js +1 -0
  309. package/dist/web/assets/pug-nGRwXpob.js +1 -0
  310. package/dist/web/assets/puppet-CDv2pdJW.js +1 -0
  311. package/dist/web/assets/purescript-9MfHhQsQ.js +1 -0
  312. package/dist/web/assets/python-C5TF47hQ.js +1 -0
  313. package/dist/web/assets/python-CzFU0dpx.js +1 -0
  314. package/dist/web/assets/qml-BxleM7bJ.js +1 -0
  315. package/dist/web/assets/qmldir-DCQb3MpD.js +1 -0
  316. package/dist/web/assets/qss-Fe1Jh2GI.js +1 -0
  317. package/dist/web/assets/r-BXEss897.js +1 -0
  318. package/dist/web/assets/r-DWzjseEo.js +1 -0
  319. package/dist/web/assets/racket-DcIDlBhZ.js +1 -0
  320. package/dist/web/assets/raku-BtFKomnU.js +1 -0
  321. package/dist/web/assets/raku-Cj6OV6qV.js +1 -0
  322. package/dist/web/assets/razor-UAq-8THt.js +1 -0
  323. package/dist/web/assets/rbs-C0MpOrj4.js +1 -0
  324. package/dist/web/assets/red-CYlAq2b0.js +1 -0
  325. package/dist/web/assets/reg-CRGYupPL.js +1 -0
  326. package/dist/web/assets/regexp-BWpGejPw.js +1 -0
  327. package/dist/web/assets/regexp-wOX-4MEz.js +1 -0
  328. package/dist/web/assets/rel-BtDbiS_P.js +1 -0
  329. package/dist/web/assets/riscv-Ckw8ddFX.js +1 -0
  330. package/dist/web/assets/rolldown-runtime-XKyaHtl9.js +1 -0
  331. package/dist/web/assets/ron-VUp2lXgN.js +1 -0
  332. package/dist/web/assets/rose-pine-aMsaMD1D.js +1 -0
  333. package/dist/web/assets/rose-pine-dawn-8PwUyIlP.js +1 -0
  334. package/dist/web/assets/rose-pine-moon-DO-qXg-I.js +1 -0
  335. package/dist/web/assets/rosmsg-CAekHB0j.js +1 -0
  336. package/dist/web/assets/rst-BCaXiUC4.js +1 -0
  337. package/dist/web/assets/ruby-C4ARPOX3.js +1 -0
  338. package/dist/web/assets/ruby-Dl3oLoVp.js +1 -0
  339. package/dist/web/assets/rust-Ch0zZBV0.js +1 -0
  340. package/dist/web/assets/rust-DBZE5Si3.js +1 -0
  341. package/dist/web/assets/sas-BowjnAvi.js +1 -0
  342. package/dist/web/assets/sass-DXrisJhu.js +1 -0
  343. package/dist/web/assets/scala-CTTBu_35.js +1 -0
  344. package/dist/web/assets/scala-o2NiCLJc.js +1 -0
  345. package/dist/web/assets/scheme-DQCgrYNe.js +1 -0
  346. package/dist/web/assets/scss-CWs8DVSa.js +1 -0
  347. package/dist/web/assets/scss-D3wBkj3d.js +1 -0
  348. package/dist/web/assets/sdbl-CpzYUp7e.js +1 -0
  349. package/dist/web/assets/sdbl-CyKdwm0B.js +1 -0
  350. package/dist/web/assets/shaderlab-DY7g_Ava.js +1 -0
  351. package/dist/web/assets/shellscript-CVTB3cr6.js +1 -0
  352. package/dist/web/assets/shellscript-CqHdAlCp.js +1 -0
  353. package/dist/web/assets/shellsession-DDrivR0a.js +1 -0
  354. package/dist/web/assets/shiki-Ci4cdHsM-CaeoOzAb.js +15 -0
  355. package/dist/web/assets/shiki-Clxf4L3p.js +4 -0
  356. package/dist/web/assets/slack-dark-DnToyrRv.js +1 -0
  357. package/dist/web/assets/slack-ochin-B2OO5cIa.js +1 -0
  358. package/dist/web/assets/smalltalk-BHpQb5nM.js +1 -0
  359. package/dist/web/assets/smithy-Dgaz7aur.js +1 -0
  360. package/dist/web/assets/snazzy-light-4G7pJPwS.js +1 -0
  361. package/dist/web/assets/solarized-dark-b97czJOk.js +1 -0
  362. package/dist/web/assets/solarized-light-DFPxpIYQ.js +1 -0
  363. package/dist/web/assets/solidity-Bj7E1mRn.js +1 -0
  364. package/dist/web/assets/soy-CUUUw2U6.js +1 -0
  365. package/dist/web/assets/sparql-Dy5Sx-zJ.js +1 -0
  366. package/dist/web/assets/splunk-BC2Px7Mm.js +1 -0
  367. package/dist/web/assets/sql-CNu3Or2W.js +1 -0
  368. package/dist/web/assets/sql-CfM2IJm3.js +1 -0
  369. package/dist/web/assets/ssh-config-BgfXC-Er.js +1 -0
  370. package/dist/web/assets/stata-Dj4sbAEx.js +1 -0
  371. package/dist/web/assets/stylus-LiTfbrWi.js +1 -0
  372. package/dist/web/assets/stylus-y-ZXgJGq.js +1 -0
  373. package/dist/web/assets/surrealql-NoXzmj18.js +1 -0
  374. package/dist/web/assets/svelte-BaCIHHWd.js +1 -0
  375. package/dist/web/assets/swift-CCLoYZtx.js +1 -0
  376. package/dist/web/assets/swift-DQ24oLw9.js +1 -0
  377. package/dist/web/assets/synthwave-84-nFMaYfgc.js +1 -0
  378. package/dist/web/assets/system-verilog-DFpyZzg3.js +1 -0
  379. package/dist/web/assets/system-verilog-Dp2k_mze.js +1 -0
  380. package/dist/web/assets/systemd-BxMlprV5.js +1 -0
  381. package/dist/web/assets/talonscript-CohzipZa.js +1 -0
  382. package/dist/web/assets/tasl-DMoTqEGO.js +1 -0
  383. package/dist/web/assets/tcl-CZd0xW_V.js +1 -0
  384. package/dist/web/assets/templ-BfgLc4ra.js +1 -0
  385. package/dist/web/assets/terraform-DswuEJGm.js +1 -0
  386. package/dist/web/assets/tex-C9L8xJex.js +1 -0
  387. package/dist/web/assets/tex-CNYz7bLJ.js +1 -0
  388. package/dist/web/assets/themes-DmprMKgK.js +2 -0
  389. package/dist/web/assets/tokyo-night-oM2G3aXe.js +1 -0
  390. package/dist/web/assets/toml-CcmNWLt0.js +1 -0
  391. package/dist/web/assets/ts-tags-DLz2GTd3.js +1 -0
  392. package/dist/web/assets/tsv-sltzmVWM.js +1 -0
  393. package/dist/web/assets/tsx-BOvsFOI6.js +1 -0
  394. package/dist/web/assets/tsx-CGosfAUg.js +1 -0
  395. package/dist/web/assets/turtle-CQ9kcy0m.js +1 -0
  396. package/dist/web/assets/turtle-CcN57yC0.js +1 -0
  397. package/dist/web/assets/twig-HaHkB3PH.js +1 -0
  398. package/dist/web/assets/twig-lMQ09cjh.js +1 -0
  399. package/dist/web/assets/typescript-Bb1J8qyy.js +1 -0
  400. package/dist/web/assets/typescript-j_1H8WHN.js +1 -0
  401. package/dist/web/assets/typespec-BGhR2SqG.js +1 -0
  402. package/dist/web/assets/typst-DDNSzYFN.js +1 -0
  403. package/dist/web/assets/unused-diff-backend-D509CnpY.js +1 -0
  404. package/dist/web/assets/unwrapDefault-ByDmBtHB.js +1 -0
  405. package/dist/web/assets/v-DBj4K9d_.js +1 -0
  406. package/dist/web/assets/vala-zf12oZj6.js +1 -0
  407. package/dist/web/assets/vb-3nVziYZS.js +1 -0
  408. package/dist/web/assets/vb-CP6Ec8nh.js +1 -0
  409. package/dist/web/assets/verilog-1j7BQk-h.js +1 -0
  410. package/dist/web/assets/verilog-kL8Dwv27.js +1 -0
  411. package/dist/web/assets/vesper-DdrHHSXu.js +1 -0
  412. package/dist/web/assets/vhdl-BroJfC0k.js +1 -0
  413. package/dist/web/assets/viml-DvXPmvsu.js +1 -0
  414. package/dist/web/assets/vitesse-black-fwtXNY1n.js +1 -0
  415. package/dist/web/assets/vitesse-dark-BZCL-v6S.js +1 -0
  416. package/dist/web/assets/vitesse-light-VbXTXTou.js +1 -0
  417. package/dist/web/assets/vue-html-CGMs_6qn.js +1 -0
  418. package/dist/web/assets/vue-qH43U_rv.js +1 -0
  419. package/dist/web/assets/vue-vine-6XI2pIvQ.js +1 -0
  420. package/dist/web/assets/vyper-CgoNMtux.js +1 -0
  421. package/dist/web/assets/wasm-ByWQv1Qj.js +1 -0
  422. package/dist/web/assets/wenyan-C8pVoKbM.js +1 -0
  423. package/dist/web/assets/wgsl-BsKzXJz4.js +1 -0
  424. package/dist/web/assets/wikitext-ClFFjSW2.js +1 -0
  425. package/dist/web/assets/wit-DdvCle-K.js +1 -0
  426. package/dist/web/assets/wolfram-DLL8P-h_.js +1 -0
  427. package/dist/web/assets/worker-DL-XNG9N.js +13 -0
  428. package/dist/web/assets/worker-registries-DNgFn7hx.js +1 -0
  429. package/dist/web/assets/xml-DuKfbPI6.js +1 -0
  430. package/dist/web/assets/xml-WY0zc4PG.js +1 -0
  431. package/dist/web/assets/xsl-CW58cerL.js +1 -0
  432. package/dist/web/assets/xsl-Czhm44Ae.js +1 -0
  433. package/dist/web/assets/yaml-DDA_XMNu.js +1 -0
  434. package/dist/web/assets/yaml-DijMHRDA.js +1 -0
  435. package/dist/web/assets/zenscript-BnlCZFoB.js +1 -0
  436. package/dist/web/assets/zig-B7sSDI6F.js +1 -0
  437. package/dist/web/assets/zig-cFafUZna.js +1 -0
  438. package/dist/web/icons/apple-touch-icon.png +0 -0
  439. package/dist/web/icons/icon-192.png +0 -0
  440. package/dist/web/icons/icon-512.png +0 -0
  441. package/dist/web/index.html +20 -0
  442. package/dist/web/licenses/hanken-grotesk-OFL.txt +93 -0
  443. package/dist/web/licenses/martian-mono-OFL.txt +93 -0
  444. package/dist/web/manifest.webmanifest +13 -0
  445. package/dist/web/mermaid-frame.html +13 -0
  446. package/dist/web/sw.js +1 -0
  447. package/package.json +31 -3
@@ -0,0 +1,272 @@
1
+ # First review manifest
2
+
3
+ Create one private temporary folder per review, outside the worktree, using a POSIX shell:
4
+
5
+ ```sh
6
+ review_dir=$(mktemp -d "${TMPDIR:-/tmp}/emend-review.XXXXXX")
7
+ printf '%s\n' "$review_dir"
8
+ ```
9
+
10
+ GNU and BSD `mktemp` give it mode 0700. On Windows, create an equivalent private, unique folder
11
+ in the user's temporary directory. Before reusing an existing review folder, replace `<folder>` with its literal path.
12
+ Write the literal path without a trailing slash; a trailing slash makes `find` follow a symlink.
13
+ Run:
14
+
15
+ ```sh
16
+ find "<folder>" -maxdepth 0 -type d -user "$(id -u)" -perm 700
17
+ ```
18
+
19
+ Reuse it only when the command prints the folder path. GNU and BSD `find` check ownership and exact mode 0700.
20
+ The `-type d` check excludes symlinks. If the check fails, tell the user its literal path and that its saved results were not read.
21
+ Then create a new folder with the same `mktemp` command and rebuild the manifest.
22
+ Save a manifest like this as `review.json` there. Report the literal folder path with the review id;
23
+ shell variables do not survive between tool calls. Substitute that path for `<review-folder>` below.
24
+ For code, run `emend publish --manifest "<review-folder>/review.json"` from the repository being reviewed.
25
+ Keep saved wait output and reply body files in that same folder. Never read or write any of these
26
+ files at a fixed shared path or inside the worktree.
27
+ Use a review folder from one session at a time.
28
+ A second session on the same review creates its own folder only after the first has stopped.
29
+ Nothing enforces this rule.
30
+ Any session may read saved wait output after the folder passes the check.
31
+ Before reading saved results and before every `emend wait` or `emend feedback`, run this GNU or BSD `find` check.
32
+ Write the literal path without a trailing slash; a trailing slash makes `find` follow a symlink.
33
+
34
+ ```sh
35
+ find "<review-folder>" -mindepth 1 -maxdepth 1 \( ! -user "$(id -u)" -o ! -type f \)
36
+ ```
37
+
38
+ It prints every entry this user does not own and every entry that is not a regular file.
39
+ If it prints anything, tell the user each name, take no new hand-off in this folder, and stop.
40
+ The folder is no longer private.
41
+ Otherwise, list saved results and the handled record with GNU or BSD `find`, again without a trailing slash:
42
+
43
+ ```sh
44
+ find "<review-folder>" -maxdepth 1 -type f -user "$(id -u)" \( -name 'wait-*.json' -o -name handled.txt \) | sort
45
+ ```
46
+
47
+ Read only files this command prints: regular files owned by this user; `-type f` excludes symlinks.
48
+ Do not check group permissions in this listing.
49
+ An older `wait.json` also counts as saved output. List it with the same ownership and regular-file checks:
50
+
51
+ ```sh
52
+ find "<review-folder>" -maxdepth 1 -type f -user "$(id -u)" -name wait.json
53
+ ```
54
+
55
+ Use the literal path without a trailing slash here too. Read legacy `wait.json` only if this command prints it.
56
+ Otherwise, if it exists, do not read it and tell the user its name.
57
+ Never delete a saved file you did not see fail.
58
+ When listing, skip a `wait-*.json` that is empty or not complete JSON.
59
+ A wait may still be writing it, in this session or another.
60
+ Do not read or delete it; list it again later.
61
+ Tell the user its name if it stays empty after the waits you started have finished.
62
+ Apply the same rule to legacy `wait.json`.
63
+ Before running `emend wait` or `emend feedback`, handle every saved `go` whose `deliveryId` is absent from `handled.txt`.
64
+ Handle them oldest first: legacy `wait.json` first, then timestamped names in plain `ls` order (text order is time order).
65
+ If `handled.txt` is absent, no deliveries are recorded as handled.
66
+ Check comment ids and earlier outcomes; repeat a reply rather than skip one when resuming partly handled feedback.
67
+ The CLI confirms receipt only after the full JSON is written; a confirmed hand-off will not be offered again.
68
+
69
+ Save each new `emend wait` or `emend feedback` result with `--save "<review-folder>"`.
70
+ emend writes it as `wait-<UTC time>.json` in that folder, with mode 0600, and never replaces an existing file.
71
+ The file is complete or absent. emend confirms receipt only after it saved the file and printed the JSON.
72
+ A command that exits non-zero may have saved a file without confirming it; the server then offers the same feedback again later under a new `deliveryId`.
73
+ After any non-zero exit, list the folder again, read any new file like any saved result, and skip comments you already answered.
74
+
75
+ Use the command the loop needs:
76
+
77
+ ```sh
78
+ emend wait <review-id> --timeout 540 --save "<review-folder>"
79
+ emend feedback <review-id> --save "<review-folder>"
80
+ ```
81
+
82
+ Run `emend wait` the way your harness allows a long command. Start one only when no `emend wait`
83
+ you started on this folder is still running; a delegated sub-agent never starts one.
84
+
85
+ - Claude Code: run `emend wait <review-id> --timeout 86400 --save "<review-folder>"` in the
86
+ background (`run_in_background`), then end your turn. A background command is not held to the
87
+ 10 minutes of a foreground one, and its completion notification wakes you. If you stop the
88
+ review loop before the wait ends, stop that command.
89
+ - Codex: run it with `exec_command`. While the wait runs, `exec_command` returns a `session_id`;
90
+ call `write_stdin` on it with empty `chars` and `yield_time_ms` 300000 until the command exits.
91
+ If your shell tool takes `timeout_ms` instead, set it above the wait, such as 600000.
92
+ - Anything else: in the foreground. If your shell tool stops commands sooner than 9 minutes, pass
93
+ a `--timeout` below that limit.
94
+
95
+ When the command ends, read its output first: the exit code, any error line and any warning.
96
+
97
+ On success, repeat the folder-entry check and ownership listing above, then read the file you just wrote.
98
+ After reading a `pending` result, delete that file; only `go`, `approve` and `closed` results stay.
99
+ `pending` means no hand-off is waiting now; wait again while the session can stay active.
100
+ If the session must end, tell the user the review id and literal folder path.
101
+ The emend-feedback skill continues from them.
102
+ Handle a `go` through emend-feedback. After its last reply and any new revision, append its `deliveryId` as one line.
103
+ For a new or saved `approve`, report the approved revision, append its `deliveryId`, and stop.
104
+
105
+ `closed` means the reviewer retired or snoozed the review. Save and confirm it like `approve`, record its `deliveryId` as below, and never start another wait after it.
106
+
107
+ - `reason: "retired"`: stop the loop and tell the user the reviewer retired review <review-id>.
108
+ - `reason: "snoozed"`: stop the loop and tell the user: "The reviewer moved review <review-id> down until <time>. When they send feedback, resume with `/emend:emend-feedback <review-id>`." When `until` is `null`, say "until its next revision" in place of the time.
109
+
110
+ If an error line reads `review <review-id> was deleted or never existed` or `review <review-id> was deleted on the hub`, stop the loop and report that line.
111
+
112
+ Use the verified `handled.txt`, or create it if absent, replacing `<deliveryId>` with that result's field:
113
+
114
+ ```sh
115
+ (set +C; umask 077; printf '%s\n' '<deliveryId>' >> "<review-folder>/handled.txt")
116
+ ```
117
+
118
+ This subshell turns noclobber off so zsh can append even when `handled.txt` does not exist yet.
119
+ It sets `umask 077` so a newly created record is mode 0600.
120
+ A saved result whose `deliveryId` is listed there is handled. Keep the original JSON intact.
121
+ Before waiting again, repeat the folder-entry check and ownership listing above, then handle every remaining saved `go` oldest first.
122
+
123
+ With `head: "worktree"`, a manifest inside the worktree publishes itself under Other changes.
124
+ This example is entirely synthetic. Replace its base with the full merge-base commit hash,
125
+ and use real changed paths and accurate writeup text. `head` may also be a full commit hash.
126
+
127
+ The PRD is included as a diff because it changed, and as a doc because the reviewer needs to
128
+ read it. The cited ADR did not change, so it has only a `doc` entry.
129
+ Both docs name the topic whose prose leans on them. The topic cites the ADR's heading in words.
130
+ A doc's `path` is its published name. When the local filename differs, set `source`
131
+ to its local filename.
132
+ Relative `source` paths resolve from the repository root or, outside a git repository, from the folder publish runs in.
133
+ Outside a git repository, every doc source must sit in a folder listed in `docRoots`.
134
+ If one does not, ask the user to run `emend config add docRoots <folder>`; never run `emend config` or edit emend's configuration yourself.
135
+ It must end in the same kind of extension as `path`.
136
+ A doc's `source` must be inside the repository's worktree or inside a folder the user listed in
137
+ `docRoots` in emend's own configuration.
138
+ When publish prints `source is outside the allowed doc roots`, stop and ask the user to run `emend config add docRoots <folder>` for that folder, or to move the doc into the repository. Never run `emend config` or edit emend's configuration yourself.
139
+ Markdown docs render as safe blocks. Use Markdown for the writeup, not an HTML page.
140
+
141
+ Set optional `main` to `"writeup"` or a declared doc path to choose the opening page, even with an empty writeup.
142
+ Without `main`, the app opens a nonempty writeup, then the first doc in manifest order, then the diff, or Writeup if nothing exists.
143
+ An explicit visible URL tab wins; a main doc opens Docs scrolled to that document.
144
+
145
+ `decisions: null` means the decisions section was not written because the original request is
146
+ unavailable. When that request is known first-hand, replace null with Markdown describing how
147
+ the change runs, assumptions, drift, and independent review findings. A docs-only review omits
148
+ both `base` and `head`, includes only doc entries, and needs `--key` for its first publication.
149
+ A code review on a detached HEAD also needs `--key` for its first publication.
150
+ `--key` is only for a first publish; later revisions use `--review <review-id>`.
151
+ Pick a key unique to this review, such as the doc's name and today's date
152
+ (`offline-sync-plan-2026-11-02`). A key names one review: publishing with a key that is already in use adds
153
+ a revision to that review.
154
+
155
+ Screenshots and other images for the writeup go in `media`, a list next to `files`.
156
+ Each entry is `{ "path": "media/before.png", "source": ".shots/before.png" }`.
157
+
158
+ - `path` is the published name and `source` the local file. Without `source`, publish reads `path`.
159
+ - Save the file in the worktree, in a folder git ignores, or in a `docRoots` folder.
160
+ - Reference it from any writeup section with `![Alt](path)`. The alt text becomes the caption.
161
+ - Put a before and an after image in one paragraph, with alt text "Before" and "After", to show them side by side.
162
+ - Use PNG, JPEG, GIF, WebP or AVIF only. The source must end in the same extension as `path`.
163
+ - Each file is at most 8 MiB. A review holds at most 50.
164
+ - `path` has no segment that starts with `.`, has no `:` and is unique.
165
+ - Remote image URLs do not show. List the file under `media` instead.
166
+ - Only listed paths render. Images do not render in Markdown docs.
167
+
168
+ Use these constraints when writing the manifest:
169
+
170
+ - Topic slugs use lowercase letters, digits and `-`, at most 64 characters. Start with a letter or digit.
171
+ - `scope` is one word, at most 32 characters.
172
+ - Set `attention` on every topic: `critical`, `review`, or `skim`.
173
+ - `critical`: a security boundary, an irreversible effect, data loss, or a decision only the reviewer can make.
174
+ - `review`: behaviour worth reading line by line.
175
+ - `skim`: mechanical changes, renames, tests that only follow the code, or wording.
176
+ - A `skim` topic starts folded. Never give a topic with real risk `skim`.
177
+ - Tests that only follow the code, when there are any, go into one topic after every other topic
178
+ you declare: slug `tests` (`routine-tests` if `tests` is taken), title "Tests that follow the
179
+ code", attention `skim`, importance 99, which no other topic uses. A test file stays in its
180
+ feature topic only when it holds an edge case, a tricky setup, a changed expectation, or a
181
+ removed or weakened assertion, with a note on those lines that says why.
182
+ - Attention never changes order. `importance` alone sorts.
183
+ - `door` is `one-way` or `two-way`.
184
+ - `title` is at most 200 characters; `summary` is at most 2000.
185
+ - `links` is optional: at most 8 entries of `url`, `label` and `kind`. `url` is an `https:` URL
186
+ without a user name or password, at most 2048 characters. `label` has 1 to 60 characters.
187
+ `kind` is `pr`, `issue` or `other`. Leave `links` out when there are none. An invalid link
188
+ fails the publish; fix it and publish again.
189
+ - For a code review, emend takes the repository's web address from its `origin` remote, which
190
+ links `#123`. Set `repoUrl` only when that remote is not where the issues live. It must be
191
+ exactly `https://host/owner/name`, with no trailing slash, path, query or fragment; an invalid
192
+ `repoUrl` is ignored. Set `"repoUrl": null` when the user does not want the repository's
193
+ address stored with the review.
194
+ - `base` and `head` are full commit hashes. `head` may be `worktree`.
195
+ - `importance` is 0 to 99. The reserved Other changes topic uses 100.
196
+
197
+ Spell every key exactly as in the example, because unknown keys are dropped silently.
198
+ Only `diff` files accept `notes`. Use single-digit notes on a large change, at most eight per file and 64 per revision.
199
+ Each note earns its place with a decision, trade-off, risk, or something easy to get wrong.
200
+ Never write “this adds a method”. Write `summary` as one sentence of 15 words or fewer, at most 160 characters.
201
+ It must fit on one line. Optional `rationale` has at most 1200 characters. Both fields are plain text, never Markdown or HTML.
202
+ Set `side` to `old` or `new`. Take `start` and `end` from the patch's `@@` headers or the file; never guess.
203
+ They are positive integers, with `end` at least `start`.
204
+ Publish refuses a range outside the stored diff side, a missing side, or a flagged file, naming the file and note index.
205
+ Unchanged stored lines are valid in a file with changed content.
206
+ Publish and import refuse notes when the file's old and new content is identical.
207
+ Notes are read-only revision content, carried by export and import.
208
+ Use `ref` only when a writeup bullet cites the note with `<span class="ref">ref A</span>`.
209
+ Assign `A`, `B`, `C`… in file order, restarting per topic. Refs must be unique within the topic.
210
+
211
+ For an invalid manifest, the CLI names the failing fields.
212
+ If it says the manifest is not found, check the path. If it says the manifest is not valid JSON,
213
+ fix the syntax at the line it names, if any; with no line, check for an empty or cut-off file.
214
+ An unescaped quote or line break inside a string is the usual cause.
215
+ Fix those fields and publish again.
216
+
217
+ ```json
218
+ {
219
+ "version": 1,
220
+ "title": "Bound the retry budget",
221
+ "base": "1111111111111111111111111111111111111111",
222
+ "head": "worktree",
223
+ "links": [
224
+ { "url": "https://github.com/example/app/pull/42", "label": "PR #42", "kind": "pr" },
225
+ { "url": "https://github.com/example/app/issues/17", "label": "Issue #17", "kind": "issue" }
226
+ ],
227
+ "topics": [
228
+ {
229
+ "slug": "retry-budget",
230
+ "title": "Retry budget",
231
+ "importance": 10,
232
+ "attention": "review",
233
+ "summary": "Requests stop retrying after three attempts.",
234
+ "door": "two-way",
235
+ "blastRadius": { "scope": "user", "note": "A failed request could stop before a later attempt succeeds." }
236
+ }
237
+ ],
238
+ "files": [
239
+ {
240
+ "path": "src/retry.ts",
241
+ "role": "diff",
242
+ "topic": "retry-budget",
243
+ "notes": [
244
+ {
245
+ "side": "new",
246
+ "start": 38,
247
+ "end": 44,
248
+ "summary": "The first call consumes one attempt, keeping the retry budget finite.",
249
+ "rationale": "Counting only retries would allow a fourth call.",
250
+ "ref": "A"
251
+ }
252
+ ]
253
+ },
254
+ { "path": "docs/retry-prd.md", "role": "diff", "topic": "retry-budget" },
255
+ { "path": "docs/retry-prd.md", "role": "doc", "topic": "retry-budget" },
256
+ { "path": "docs/adr/2026-07-01-retries.md", "role": "doc", "topic": "retry-budget" }
257
+ ],
258
+ "writeup": {
259
+ "overview": "- **Goal:** Failed requests must stop retrying.\n- **Change:** Each request gets three attempts.\n- **Scope:** The request loop and its design doc change.",
260
+ "tldr": "- **Biggest risk:** An early stop could discard the final attempt.\n- **Check first:** Read `src/retry.ts` in Retry budget.",
261
+ "decisions": null,
262
+ "glossary": "- **Retry budget:** The total number of attempts allowed for one request.",
263
+ "topics": {
264
+ "retry-budget": {
265
+ "why": "**What it is:** The request loop retries temporary failures.\n\n**Problem:** Repeated failures kept the loop running.\n\n**Fix:** The loop stops after three attempts.",
266
+ "example": "A request fails on every attempt.\n\n| Input | Before | After |\n| --- | --- | --- |\n| Repeated temporary failure | Retries continue | Stops after attempt three |",
267
+ "body": "- The first call counts as attempt one. <span class=\"ref\">ref A</span>\n- A successful attempt ends the loop immediately.\n- Check that the third attempt can still succeed.\n- The retry budget follows `docs/adr/2026-07-01-retries.md`, section Consistency model."
268
+ }
269
+ }
270
+ }
271
+ }
272
+ ```