paperlint 2.0.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 (762) hide show
  1. package/.github/dependabot.yml +72 -0
  2. package/.github/workflows/ci.yml +297 -0
  3. package/.github/workflows/dependabot-automerge.yml +70 -0
  4. package/.github/workflows/pr-title.yml +59 -0
  5. package/.github/workflows/release.yml +54 -0
  6. package/CLAUDE.md +598 -0
  7. package/CONTRIBUTING.md +159 -0
  8. package/LICENSE +21 -0
  9. package/README.md +240 -0
  10. package/action.harness.mjs +287 -0
  11. package/action.mutations.mjs +162 -0
  12. package/action.yml +138 -0
  13. package/bin/rpp.mjs +43 -0
  14. package/dist/action-ref.d.ts +12 -0
  15. package/dist/action-ref.d.ts.map +1 -0
  16. package/dist/action-ref.js +16 -0
  17. package/dist/action-ref.js.map +1 -0
  18. package/dist/adapters/banal/failure.d.ts +73 -0
  19. package/dist/adapters/banal/failure.d.ts.map +1 -0
  20. package/dist/adapters/banal/failure.js +58 -0
  21. package/dist/adapters/banal/failure.js.map +1 -0
  22. package/dist/adapters/banal/index.d.ts +17 -0
  23. package/dist/adapters/banal/index.d.ts.map +1 -0
  24. package/dist/adapters/banal/index.js +56 -0
  25. package/dist/adapters/banal/index.js.map +1 -0
  26. package/dist/adapters/banal/install.d.ts +26 -0
  27. package/dist/adapters/banal/install.d.ts.map +1 -0
  28. package/dist/adapters/banal/install.js +15 -0
  29. package/dist/adapters/banal/install.js.map +1 -0
  30. package/dist/adapters/banal/invocation.d.ts +48 -0
  31. package/dist/adapters/banal/invocation.d.ts.map +1 -0
  32. package/dist/adapters/banal/invocation.js +43 -0
  33. package/dist/adapters/banal/invocation.js.map +1 -0
  34. package/dist/adapters/banal/locate.d.ts +50 -0
  35. package/dist/adapters/banal/locate.d.ts.map +1 -0
  36. package/dist/adapters/banal/locate.js +34 -0
  37. package/dist/adapters/banal/locate.js.map +1 -0
  38. package/dist/adapters/banal/output.d.ts +27 -0
  39. package/dist/adapters/banal/output.d.ts.map +1 -0
  40. package/dist/adapters/banal/output.js +112 -0
  41. package/dist/adapters/banal/output.js.map +1 -0
  42. package/dist/adapters/banal/pin.d.ts +19 -0
  43. package/dist/adapters/banal/pin.d.ts.map +1 -0
  44. package/dist/adapters/banal/pin.js +15 -0
  45. package/dist/adapters/banal/pin.js.map +1 -0
  46. package/dist/adapters/banal/probe.d.ts +12 -0
  47. package/dist/adapters/banal/probe.d.ts.map +1 -0
  48. package/dist/adapters/banal/probe.js +27 -0
  49. package/dist/adapters/banal/probe.js.map +1 -0
  50. package/dist/adapters/banal/run.d.ts +89 -0
  51. package/dist/adapters/banal/run.d.ts.map +1 -0
  52. package/dist/adapters/banal/run.js +104 -0
  53. package/dist/adapters/banal/run.js.map +1 -0
  54. package/dist/adapters/banal/settings.d.ts +18 -0
  55. package/dist/adapters/banal/settings.d.ts.map +1 -0
  56. package/dist/adapters/banal/settings.js +29 -0
  57. package/dist/adapters/banal/settings.js.map +1 -0
  58. package/dist/adapters/banal/xml.d.ts +48 -0
  59. package/dist/adapters/banal/xml.d.ts.map +1 -0
  60. package/dist/adapters/banal/xml.js +67 -0
  61. package/dist/adapters/banal/xml.js.map +1 -0
  62. package/dist/adapters/curl/download.io.d.ts +14 -0
  63. package/dist/adapters/curl/download.io.d.ts.map +1 -0
  64. package/dist/adapters/curl/download.io.js +69 -0
  65. package/dist/adapters/curl/download.io.js.map +1 -0
  66. package/dist/adapters/curl/index.d.ts +6 -0
  67. package/dist/adapters/curl/index.d.ts.map +1 -0
  68. package/dist/adapters/curl/index.js +6 -0
  69. package/dist/adapters/curl/index.js.map +1 -0
  70. package/dist/adapters/memory/index.d.ts +43 -0
  71. package/dist/adapters/memory/index.d.ts.map +1 -0
  72. package/dist/adapters/memory/index.js +79 -0
  73. package/dist/adapters/memory/index.js.map +1 -0
  74. package/dist/adapters/node/files.io.d.ts +3 -0
  75. package/dist/adapters/node/files.io.d.ts.map +1 -0
  76. package/dist/adapters/node/files.io.js +31 -0
  77. package/dist/adapters/node/files.io.js.map +1 -0
  78. package/dist/adapters/node/host.io.d.ts +3 -0
  79. package/dist/adapters/node/host.io.d.ts.map +1 -0
  80. package/dist/adapters/node/host.io.js +14 -0
  81. package/dist/adapters/node/host.io.js.map +1 -0
  82. package/dist/adapters/node/index.d.ts +25 -0
  83. package/dist/adapters/node/index.d.ts.map +1 -0
  84. package/dist/adapters/node/index.js +14 -0
  85. package/dist/adapters/node/index.js.map +1 -0
  86. package/dist/adapters/node/process.io.d.ts +14 -0
  87. package/dist/adapters/node/process.io.d.ts.map +1 -0
  88. package/dist/adapters/node/process.io.js +41 -0
  89. package/dist/adapters/node/process.io.js.map +1 -0
  90. package/dist/adapters/node/workspace.io.d.ts +4 -0
  91. package/dist/adapters/node/workspace.io.d.ts.map +1 -0
  92. package/dist/adapters/node/workspace.io.js +33 -0
  93. package/dist/adapters/node/workspace.io.js.map +1 -0
  94. package/dist/adapters/pdfjs/fill.d.ts +42 -0
  95. package/dist/adapters/pdfjs/fill.d.ts.map +1 -0
  96. package/dist/adapters/pdfjs/fill.js +91 -0
  97. package/dist/adapters/pdfjs/fill.js.map +1 -0
  98. package/dist/build-engine.d.ts +48 -0
  99. package/dist/build-engine.d.ts.map +1 -0
  100. package/dist/build-engine.js +148 -0
  101. package/dist/build-engine.js.map +1 -0
  102. package/dist/build.d.ts +163 -0
  103. package/dist/build.d.ts.map +1 -0
  104. package/dist/build.js +575 -0
  105. package/dist/build.js.map +1 -0
  106. package/dist/cli.d.ts +151 -0
  107. package/dist/cli.d.ts.map +1 -0
  108. package/dist/cli.js +951 -0
  109. package/dist/cli.js.map +1 -0
  110. package/dist/doctor.d.ts +42 -0
  111. package/dist/doctor.d.ts.map +1 -0
  112. package/dist/doctor.js +280 -0
  113. package/dist/doctor.js.map +1 -0
  114. package/dist/domain/geometry.d.ts +71 -0
  115. package/dist/domain/geometry.d.ts.map +1 -0
  116. package/dist/domain/geometry.js +35 -0
  117. package/dist/domain/geometry.js.map +1 -0
  118. package/dist/domain/host.d.ts +16 -0
  119. package/dist/domain/host.d.ts.map +1 -0
  120. package/dist/domain/host.js +8 -0
  121. package/dist/domain/host.js.map +1 -0
  122. package/dist/domain/page-layout.d.ts +34 -0
  123. package/dist/domain/page-layout.d.ts.map +1 -0
  124. package/dist/domain/page-layout.js +8 -0
  125. package/dist/domain/page-layout.js.map +1 -0
  126. package/dist/domain/paths.d.ts +5 -0
  127. package/dist/domain/paths.d.ts.map +1 -0
  128. package/dist/domain/paths.js +2 -0
  129. package/dist/domain/paths.js.map +1 -0
  130. package/dist/domain/result.d.ts +23 -0
  131. package/dist/domain/result.d.ts.map +1 -0
  132. package/dist/domain/result.js +10 -0
  133. package/dist/domain/result.js.map +1 -0
  134. package/dist/domain/sha256.d.ts +7 -0
  135. package/dist/domain/sha256.d.ts.map +1 -0
  136. package/dist/domain/sha256.js +14 -0
  137. package/dist/domain/sha256.js.map +1 -0
  138. package/dist/domain/text.d.ts +6 -0
  139. package/dist/domain/text.d.ts.map +1 -0
  140. package/dist/domain/text.js +7 -0
  141. package/dist/domain/text.js.map +1 -0
  142. package/dist/engine.d.ts +93 -0
  143. package/dist/engine.d.ts.map +1 -0
  144. package/dist/engine.js +119 -0
  145. package/dist/engine.js.map +1 -0
  146. package/dist/exit-code.d.ts +22 -0
  147. package/dist/exit-code.d.ts.map +1 -0
  148. package/dist/exit-code.js +10 -0
  149. package/dist/exit-code.js.map +1 -0
  150. package/dist/facts-file.d.ts +96 -0
  151. package/dist/facts-file.d.ts.map +1 -0
  152. package/dist/facts-file.js +134 -0
  153. package/dist/facts-file.js.map +1 -0
  154. package/dist/hooks-settings.d.ts +141 -0
  155. package/dist/hooks-settings.d.ts.map +1 -0
  156. package/dist/hooks-settings.js +306 -0
  157. package/dist/hooks-settings.js.map +1 -0
  158. package/dist/init.d.ts +201 -0
  159. package/dist/init.d.ts.map +1 -0
  160. package/dist/init.js +579 -0
  161. package/dist/init.js.map +1 -0
  162. package/dist/latex-log.d.ts +80 -0
  163. package/dist/latex-log.d.ts.map +1 -0
  164. package/dist/latex-log.js +187 -0
  165. package/dist/latex-log.js.map +1 -0
  166. package/dist/latex-loop.d.ts +129 -0
  167. package/dist/latex-loop.d.ts.map +1 -0
  168. package/dist/latex-loop.js +113 -0
  169. package/dist/latex-loop.js.map +1 -0
  170. package/dist/link-skills.d.ts +51 -0
  171. package/dist/link-skills.d.ts.map +1 -0
  172. package/dist/link-skills.js +199 -0
  173. package/dist/link-skills.js.map +1 -0
  174. package/dist/new-paper.d.ts +48 -0
  175. package/dist/new-paper.d.ts.map +1 -0
  176. package/dist/new-paper.js +110 -0
  177. package/dist/new-paper.js.map +1 -0
  178. package/dist/pdf-facts.d.ts +44 -0
  179. package/dist/pdf-facts.d.ts.map +1 -0
  180. package/dist/pdf-facts.js +239 -0
  181. package/dist/pdf-facts.js.map +1 -0
  182. package/dist/pdf-geometry.d.ts +170 -0
  183. package/dist/pdf-geometry.d.ts.map +1 -0
  184. package/dist/pdf-geometry.js +158 -0
  185. package/dist/pdf-geometry.js.map +1 -0
  186. package/dist/ports/download.d.ts +9 -0
  187. package/dist/ports/download.d.ts.map +1 -0
  188. package/dist/ports/download.js +2 -0
  189. package/dist/ports/download.js.map +1 -0
  190. package/dist/ports/files.d.ts +11 -0
  191. package/dist/ports/files.d.ts.map +1 -0
  192. package/dist/ports/files.js +2 -0
  193. package/dist/ports/files.js.map +1 -0
  194. package/dist/ports/measure-geometry.d.ts +8 -0
  195. package/dist/ports/measure-geometry.d.ts.map +1 -0
  196. package/dist/ports/measure-geometry.js +2 -0
  197. package/dist/ports/measure-geometry.js.map +1 -0
  198. package/dist/ports/process.d.ts +45 -0
  199. package/dist/ports/process.d.ts.map +1 -0
  200. package/dist/ports/process.js +2 -0
  201. package/dist/ports/process.js.map +1 -0
  202. package/dist/ports/tool-installer.d.ts +29 -0
  203. package/dist/ports/tool-installer.d.ts.map +1 -0
  204. package/dist/ports/tool-installer.js +2 -0
  205. package/dist/ports/tool-installer.js.map +1 -0
  206. package/dist/ports/workspace.d.ts +18 -0
  207. package/dist/ports/workspace.d.ts.map +1 -0
  208. package/dist/ports/workspace.js +2 -0
  209. package/dist/ports/workspace.js.map +1 -0
  210. package/dist/rules-config.d.ts +34 -0
  211. package/dist/rules-config.d.ts.map +1 -0
  212. package/dist/rules-config.js +132 -0
  213. package/dist/rules-config.js.map +1 -0
  214. package/dist/structure.d.ts +34 -0
  215. package/dist/structure.d.ts.map +1 -0
  216. package/dist/structure.js +149 -0
  217. package/dist/structure.js.map +1 -0
  218. package/dist/tex-requirements.d.ts +43 -0
  219. package/dist/tex-requirements.d.ts.map +1 -0
  220. package/dist/tex-requirements.js +127 -0
  221. package/dist/tex-requirements.js.map +1 -0
  222. package/dist/toolchain.d.ts +159 -0
  223. package/dist/toolchain.d.ts.map +1 -0
  224. package/dist/toolchain.js +542 -0
  225. package/dist/toolchain.js.map +1 -0
  226. package/dist/types.d.ts +110 -0
  227. package/dist/types.d.ts.map +1 -0
  228. package/dist/types.js +2 -0
  229. package/dist/types.js.map +1 -0
  230. package/docs/configuration.md +235 -0
  231. package/docs/e2e.md +152 -0
  232. package/docs/incidents.md +59 -0
  233. package/docs/install.md +170 -0
  234. package/docs/optional-rules.md +107 -0
  235. package/docs/package-shape-options.md +262 -0
  236. package/docs/prior-art/README.md +76 -0
  237. package/docs/prior-art/blocking-vs-advisory.md +83 -0
  238. package/docs/prior-art/content-delivery.md +124 -0
  239. package/docs/prior-art/multi-mode-tools.md +106 -0
  240. package/docs/prior-art/nondeterministic-checks.md +99 -0
  241. package/docs/prior-art/package-location.md +422 -0
  242. package/docs/prior-art/paper-folder-scaffolding.md +538 -0
  243. package/docs/prior-art/readme-structure.md +69 -0
  244. package/docs/prior-art/repro/README.md +92 -0
  245. package/docs/prior-art/repro/claim1-allowedtools.mjs +66 -0
  246. package/docs/prior-art/repro/claim1-at2.mjs +40 -0
  247. package/docs/prior-art/repro/claim1-crosschannel.mjs +54 -0
  248. package/docs/prior-art/repro/claim1-frontmatter.mjs +76 -0
  249. package/docs/prior-art/repro/claim1-hook-payload-reporter.mjs +10 -0
  250. package/docs/prior-art/repro/claim1-plugin-frontmatter.mjs +27 -0
  251. package/docs/prior-art/repro/claim1-plugin-skill.mjs +52 -0
  252. package/docs/prior-art/repro/claim1-project-skill.mjs +81 -0
  253. package/docs/prior-art/repro/claim2-marketplace-flat-asclaimed.json +1 -0
  254. package/docs/prior-art/repro/claim2-marketplace-negative-control.json +1 -0
  255. package/docs/prior-art/repro/claim2-marketplace-nested-exact.json +9 -0
  256. package/docs/prior-art/repro/claim2-marketplace-nested-noversion.json +9 -0
  257. package/docs/prior-art/repro/claim2-marketplace-nested-range.json +1 -0
  258. package/docs/prior-art/repro/claim3-imports.mjs +50 -0
  259. package/docs/prior-art/repro/claim4-find-package-json.mjs +8 -0
  260. package/docs/prior-art/repro/claim4-package-dir.mjs +39 -0
  261. package/docs/prior-art/repro/claim4-parent-arg.mjs +17 -0
  262. package/docs/prior-art/repro/claim4-resolve-apis.mjs +21 -0
  263. package/docs/prior-art/repro/claim4-setup-consumers.mjs +45 -0
  264. package/docs/prior-art/repro/claim4-yarn-pnp.mjs +70 -0
  265. package/docs/prior-art/repro/claim5-bin-launch.mjs +39 -0
  266. package/docs/prior-art/repro/claim5-exports-mutation.mjs +57 -0
  267. package/docs/prior-art/repro/claim5-resolved-location-and-bin.mjs +33 -0
  268. package/docs/prior-art/repro/claim6-candidate-ambiguity.mjs +17 -0
  269. package/docs/prior-art/repro/claim6-doc-path-candidates.mjs +27 -0
  270. package/docs/prior-art/test-tooling.md +131 -0
  271. package/docs/rules.md +58 -0
  272. package/docs/texlive-install-decision.md +230 -0
  273. package/docs/toolchain.md +152 -0
  274. package/eslint-rules/doc-fields.harness.mjs +336 -0
  275. package/eslint-rules/doc-fields.mjs +186 -0
  276. package/eslint-rules/doc-fields.mutations.mjs +96 -0
  277. package/eslint-rules/install-path-literals.harness.mjs +121 -0
  278. package/eslint-rules/install-path-literals.mjs +108 -0
  279. package/eslint-rules/install-path-literals.mutations.mjs +62 -0
  280. package/eslint-rules/latex-language.harness.mjs +599 -0
  281. package/eslint-rules/latex-language.mjs +591 -0
  282. package/eslint-rules/latex-language.mutations.mjs +196 -0
  283. package/eslint-rules/paper-research-question.harness.mjs +146 -0
  284. package/eslint-rules/paper-research-question.mjs +180 -0
  285. package/eslint-rules/paper-research-question.mutations.mjs +127 -0
  286. package/eslint-rules/paper-stages.harness.mjs +356 -0
  287. package/eslint-rules/paper-stages.mjs +455 -0
  288. package/eslint-rules/paper-stages.mutations.mjs +157 -0
  289. package/eslint-rules/paper-typography.harness.mjs +291 -0
  290. package/eslint-rules/paper-typography.mjs +313 -0
  291. package/eslint-rules/paper-typography.mutations.mjs +131 -0
  292. package/eslint-rules/papers.harness.mjs +259 -0
  293. package/eslint-rules/papers.mjs +166 -0
  294. package/eslint-rules/papers.mutations.mjs +186 -0
  295. package/eslint-rules/pdf-last-page-balance.harness.mjs +206 -0
  296. package/eslint-rules/pdf-last-page-balance.mjs +208 -0
  297. package/eslint-rules/review-findings-cause.harness.mjs +228 -0
  298. package/eslint-rules/review-findings-cause.mjs +135 -0
  299. package/eslint-rules/review-findings-cause.mutations.mjs +72 -0
  300. package/eslint-rules/temp-root-realpath.harness.mjs +176 -0
  301. package/eslint-rules/temp-root-realpath.mjs +129 -0
  302. package/eslint-rules/temp-root-realpath.mutations.mjs +99 -0
  303. package/eslint-rules/tex-build.harness.mjs +753 -0
  304. package/eslint-rules/tex-build.mjs +322 -0
  305. package/eslint-rules/tex-build.mutations.mjs +258 -0
  306. package/eslint.config.mjs +521 -0
  307. package/fixtures/build-e2e/acmart/PIPELINE-STATUS.md +3 -0
  308. package/fixtures/build-e2e/acmart/paper.tex +11 -0
  309. package/fixtures/build-e2e/acmart/venue.json +1 -0
  310. package/fixtures/build-e2e/broken/PIPELINE-STATUS.md +3 -0
  311. package/fixtures/build-e2e/broken/paper.tex +7 -0
  312. package/fixtures/build-e2e/cite/PIPELINE-STATUS.md +3 -0
  313. package/fixtures/build-e2e/cite/build.sh +5 -0
  314. package/fixtures/build-e2e/cite/paper.tex +10 -0
  315. package/fixtures/build-e2e/cite/refs.bib +9 -0
  316. package/fixtures/build-e2e/empty/PIPELINE-STATUS.md +3 -0
  317. package/fixtures/build-e2e/empty/paper.tex +6 -0
  318. package/fixtures/build-e2e/fallback/PIPELINE-STATUS.md +3 -0
  319. package/fixtures/build-e2e/fallback/paper.tex +11 -0
  320. package/fixtures/build-e2e/guards/PIPELINE-STATUS.md +3 -0
  321. package/fixtures/build-e2e/guards/paper.tex +10 -0
  322. package/fixtures/build-e2e/no-source/PIPELINE-STATUS.md +3 -0
  323. package/fixtures/build-e2e/unbalanced/PIPELINE-STATUS.md +3 -0
  324. package/fixtures/build-e2e/unbalanced/paper.tex +28 -0
  325. package/fixtures/build-e2e/unbalanced/refs.bib +269 -0
  326. package/fixtures/install-path-literals/clean.fixture.mjs +3 -0
  327. package/fixtures/install-path-literals/clean.md +15 -0
  328. package/fixtures/install-path-literals/defect.fixture.mjs +3 -0
  329. package/fixtures/install-path-literals/defect.md +14 -0
  330. package/fixtures/latex-language/clean.tex +50 -0
  331. package/fixtures/latex-language/defect.tex +52 -0
  332. package/fixtures/paper-research-question/comment-only/PIPELINE-STATUS.md +9 -0
  333. package/fixtures/paper-research-question/comment-only/paper.tex +7 -0
  334. package/fixtures/paper-research-question/declared-not-in-paper/PIPELINE-STATUS.md +10 -0
  335. package/fixtures/paper-research-question/declared-not-in-paper/paper.tex +6 -0
  336. package/fixtures/paper-research-question/draft/PIPELINE-STATUS.md +6 -0
  337. package/fixtures/paper-research-question/draft/paper.tex +2 -0
  338. package/fixtures/paper-research-question/markdown-no-rq/PIPELINE-STATUS.md +9 -0
  339. package/fixtures/paper-research-question/markdown-no-rq/paper.md +4 -0
  340. package/fixtures/paper-research-question/shipped-no-rq/PIPELINE-STATUS.md +12 -0
  341. package/fixtures/paper-research-question/shipped-no-rq/paper.tex +3 -0
  342. package/fixtures/paper-research-question/shipped-with-rq/PIPELINE-STATUS.md +10 -0
  343. package/fixtures/paper-research-question/shipped-with-rq/paper.tex +2 -0
  344. package/fixtures/paper-stages/authors-ran/PIPELINE-STATUS.md +16 -0
  345. package/fixtures/paper-stages/marker-in-prose/PIPELINE-STATUS.md +17 -0
  346. package/fixtures/paper-stages/nofile/PIPELINE-STATUS.md +8 -0
  347. package/fixtures/paper-stages/noheader/PIPELINE-STATUS.md +1 -0
  348. package/fixtures/paper-stages/noheader/versions/2026-07-22-submitted.pdf +0 -0
  349. package/fixtures/paper-stages/nothing/PIPELINE-STATUS.md +3 -0
  350. package/fixtures/paper-stages/ok/PIPELINE-STATUS.md +9 -0
  351. package/fixtures/paper-stages/ok/versions/2026-07-22-submitted.pdf +0 -0
  352. package/fixtures/paper-stages/stale/PIPELINE-STATUS.md +1 -0
  353. package/fixtures/paper-stages/stale/versions/2026-07-22-submitted.STALE-WRONG-FILE.pdf +0 -0
  354. package/fixtures/paper-stages/twice/PIPELINE-STATUS.md +14 -0
  355. package/fixtures/paper-stages/twice/versions/2026-08-06-submitted.pdf +0 -0
  356. package/fixtures/paper-stages/twice/versions/2026-10-24-submitted.pdf +0 -0
  357. package/fixtures/paper-stages/undeclared/PIPELINE-STATUS.md +8 -0
  358. package/fixtures/paper-stages/undeclared/versions/2026-07-22-submitted.pdf +0 -0
  359. package/fixtures/paper-stages/undeclared/versions/2026-08-29-camera-ready.pdf +0 -0
  360. package/fixtures/paper-stages/wrongsize/PIPELINE-STATUS.md +8 -0
  361. package/fixtures/paper-stages/wrongsize/versions/2026-07-22-submitted.pdf +0 -0
  362. package/fixtures/paper-typography/clean-paper/paper.tex +29 -0
  363. package/fixtures/paper-typography/messy-paper/paper.tex +27 -0
  364. package/fixtures/pdf-facts/README.md +22 -0
  365. package/fixtures/pdf-facts/corrupt-font.pdf +0 -0
  366. package/fixtures/pdf-facts/encrypted.pdf +0 -0
  367. package/fixtures/pdf-facts/hidden-text.pdf +0 -0
  368. package/fixtures/pdf-facts/hidden-text.tex +28 -0
  369. package/fixtures/pdf-facts/t3-all.pdf +0 -0
  370. package/fixtures/pdf-facts/t3-all.tex +8 -0
  371. package/fixtures/pdf-facts/t3-mixed.pdf +0 -0
  372. package/fixtures/pdf-facts/t3-mixed.tex +9 -0
  373. package/fixtures/pdf-facts/ttf.pdf +2240 -1
  374. package/fixtures/pdf-facts/ttf.tex +6 -0
  375. package/fixtures/real-markdown-paper/baseline.json +24 -0
  376. package/fixtures/real-markdown-paper/baseline.mjs +48 -0
  377. package/fixtures/render-paper/build-clean.sh +25 -0
  378. package/fixtures/render-paper/build-defect.sh +15 -0
  379. package/fixtures/review-findings-cause/clean.md +17 -0
  380. package/fixtures/review-findings-cause/defect.md +14 -0
  381. package/fixtures/review-findings-cause/old-debt.md +14 -0
  382. package/fixtures/review-findings-cause/quiet-in-fence.md +16 -0
  383. package/fixtures/tex-build/clean.tex +21 -0
  384. package/fixtures/tex-build/defect.tex +24 -0
  385. package/fixtures/tex-build/frontmatter-clean.tex +25 -0
  386. package/fixtures/tex-build/frontmatter-defect.tex +23 -0
  387. package/fixtures/toolchain-mirror/catalog.txt +5 -0
  388. package/fixtures/toolchain-mirror/install-tl +27 -0
  389. package/fixtures/toolchain-mirror/release-texlive.txt +3 -0
  390. package/fixtures/toolchain-mirror/release-year +1 -0
  391. package/fixtures/toolchain-mirror/stub-kpsewhich +8 -0
  392. package/fixtures/toolchain-mirror/stub-pdflatex +3 -0
  393. package/fixtures/toolchain-mirror/stub-tlmgr +44 -0
  394. package/hooks/hooks.harness.mjs +713 -0
  395. package/hooks/hooks.mutations.mjs +337 -0
  396. package/hooks/paper-edit-guard.hook.d.mts +13 -0
  397. package/hooks/paper-edit-guard.hook.mjs +457 -0
  398. package/hooks/paper-skills-nudge.hook.mjs +136 -0
  399. package/hooks/paper-status-gates.hook.mjs +156 -0
  400. package/hooks/paper-status-gates.sh +91 -0
  401. package/lib/agent-cli-version.harness.mjs +165 -0
  402. package/lib/agent-cli-version.mjs +106 -0
  403. package/lib/agent-cli-version.mutations.mjs +109 -0
  404. package/lib/markdown.mjs +386 -0
  405. package/lib/mutation-driver.harness.mjs +227 -0
  406. package/lib/mutation-driver.mjs +397 -0
  407. package/lib/mutation-driver.mutations.mjs +68 -0
  408. package/lib/paper-config.d.mts +34 -0
  409. package/lib/paper-config.harness.mjs +286 -0
  410. package/lib/paper-config.mjs +142 -0
  411. package/lib/paper-config.mutations.mjs +143 -0
  412. package/lib/skill-checks.mjs +701 -0
  413. package/lib/skill-corpus.mjs +403 -0
  414. package/lib/skill-eval-fixture.mjs +63 -0
  415. package/lib/skill-eval-kit.mjs +257 -0
  416. package/lib/skill-trigger-cases.harness.mjs +170 -0
  417. package/lib/skill-trigger-cases.mjs +446 -0
  418. package/lib/skill-trigger-cases.mutations.mjs +65 -0
  419. package/lib/trigger-ledger.mjs +215 -0
  420. package/package.json +97 -0
  421. package/plugin/.claude-plugin/plugin.json +8 -0
  422. package/plugin/hooks/hooks.json +30 -0
  423. package/scripts/check.harness.mjs +177 -0
  424. package/scripts/check.mjs +239 -0
  425. package/scripts/check.mutations.mjs +110 -0
  426. package/scripts/eslint-report-guard.mjs +82 -0
  427. package/scripts/exclusive.mjs +138 -0
  428. package/scripts/harness-api.frozen.json +76 -0
  429. package/scripts/harness-api.test.ts +175 -0
  430. package/scripts/layer-legacy-frozen.d.mts +28 -0
  431. package/scripts/layer-legacy-frozen.mjs +152 -0
  432. package/scripts/layer-legacy-frozen.test.ts +115 -0
  433. package/scripts/layer-legacy.frozen.json +50 -0
  434. package/scripts/mutation-batteries-frozen.harness.mjs +204 -0
  435. package/scripts/mutation-batteries-frozen.mjs +238 -0
  436. package/scripts/mutation-batteries.frozen.json +117 -0
  437. package/scripts/release-config.test.ts +90 -0
  438. package/scripts/rules-are-content-only.harness.mjs +113 -0
  439. package/scripts/rules-are-content-only.mjs +138 -0
  440. package/scripts/rules-are-content-only.mutations.mjs +81 -0
  441. package/scripts/rules-see-files.harness.mjs +115 -0
  442. package/scripts/rules-see-files.mjs +99 -0
  443. package/scripts/rules-see-files.mutations.mjs +131 -0
  444. package/scripts/run-mutations.mjs +100 -0
  445. package/scripts/semantic-release-plugins.d.ts +16 -0
  446. package/skills/README.md +15 -0
  447. package/skills/analyze-sibling-paper/SKILL.md +170 -0
  448. package/skills/analyze-sibling-paper/SKILL.md.spec.ts +186 -0
  449. package/skills/analyze-sibling-paper/analyze-sibling-paper.eval.mjs +19 -0
  450. package/skills/analyze-sibling-paper/analyze-sibling-paper.harness.mjs +23 -0
  451. package/skills/argument-arc/SKILL.md +177 -0
  452. package/skills/argument-arc/SKILL.md.spec.ts +192 -0
  453. package/skills/argument-arc/argument-arc.eval.mjs +19 -0
  454. package/skills/argument-arc/argument-arc.harness.mjs +23 -0
  455. package/skills/build-benchmark/SKILL.md +213 -0
  456. package/skills/build-benchmark/SKILL.md.spec.ts +220 -0
  457. package/skills/build-benchmark/build-benchmark.eval.mjs +19 -0
  458. package/skills/build-benchmark/build-benchmark.harness.mjs +23 -0
  459. package/skills/build-benchmark/references/adversarial-cold-repro.md +68 -0
  460. package/skills/camera-ready/SKILL.md +148 -0
  461. package/skills/camera-ready/SKILL.md.spec.ts +164 -0
  462. package/skills/camera-ready/camera-ready.eval.mjs +19 -0
  463. package/skills/camera-ready/camera-ready.harness.mjs +23 -0
  464. package/skills/cold-read-diff/SKILL.md +160 -0
  465. package/skills/cold-read-diff/SKILL.md.spec.ts +166 -0
  466. package/skills/cold-read-diff/cold-read-diff.eval.mjs +19 -0
  467. package/skills/cold-read-diff/cold-read-diff.harness.mjs +23 -0
  468. package/skills/draft-paper/SKILL.md +152 -0
  469. package/skills/draft-paper/SKILL.md.spec.ts +169 -0
  470. package/skills/draft-paper/draft-paper.eval.mjs +19 -0
  471. package/skills/draft-paper/draft-paper.harness.mjs +23 -0
  472. package/skills/extend-paper/SKILL.md +99 -0
  473. package/skills/extend-paper/SKILL.md.spec.ts +116 -0
  474. package/skills/extend-paper/extend-paper.eval.mjs +19 -0
  475. package/skills/extend-paper/extend-paper.harness.mjs +23 -0
  476. package/skills/find-venue/SKILL.md +128 -0
  477. package/skills/find-venue/SKILL.md.spec.ts +145 -0
  478. package/skills/find-venue/find-venue.eval.mjs +19 -0
  479. package/skills/find-venue/find-venue.harness.mjs +23 -0
  480. package/skills/grade-paper-writing/SKILL.md +436 -0
  481. package/skills/grade-paper-writing/SKILL.md.spec.ts +453 -0
  482. package/skills/grade-paper-writing/fixtures/control_gopen.txt +1 -0
  483. package/skills/grade-paper-writing/fixtures/control_human_paper.txt +1 -0
  484. package/skills/grade-paper-writing/fixtures/rewrite.txt +1 -0
  485. package/skills/grade-paper-writing/fixtures/specimen.txt +1 -0
  486. package/skills/grade-paper-writing/fixtures/structure-checks.md +22 -0
  487. package/skills/grade-paper-writing/grade-paper-writing.eval.mjs +19 -0
  488. package/skills/grade-paper-writing/grade-paper-writing.harness.mjs +23 -0
  489. package/skills/grade-paper-writing/prose-lint.mjs +713 -0
  490. package/skills/harden-paper/SKILL.md +318 -0
  491. package/skills/harden-paper/SKILL.md.spec.ts +336 -0
  492. package/skills/harden-paper/check-numbers.sh +33 -0
  493. package/skills/harden-paper/check-release-claims.sh +35 -0
  494. package/skills/harden-paper/fixtures/uncited-assertions-sample.md +43 -0
  495. package/skills/harden-paper/fixtures/uncited-assertions-sample.tex +77 -0
  496. package/skills/harden-paper/harden-paper.eval.mjs +19 -0
  497. package/skills/harden-paper/harden-paper.harness.mjs +23 -0
  498. package/skills/map-prior-work/SKILL.md +211 -0
  499. package/skills/map-prior-work/SKILL.md.spec.ts +227 -0
  500. package/skills/map-prior-work/map-prior-work.eval.mjs +19 -0
  501. package/skills/map-prior-work/map-prior-work.harness.mjs +23 -0
  502. package/skills/osf-artifact-upload/SKILL.md +52 -0
  503. package/skills/osf-artifact-upload/SKILL.md.spec.ts +59 -0
  504. package/skills/osf-artifact-upload/osf-artifact-upload.eval.mjs +22 -0
  505. package/skills/osf-artifact-upload/osf-artifact-upload.harness.mjs +103 -0
  506. package/skills/paper-adversarial-review/SKILL.md +126 -0
  507. package/skills/paper-adversarial-review/SKILL.md.spec.ts +142 -0
  508. package/skills/paper-adversarial-review/paper-adversarial-review.eval.mjs +19 -0
  509. package/skills/paper-adversarial-review/paper-adversarial-review.harness.mjs +23 -0
  510. package/skills/paper-pipeline/PIPELINE-MAP.md +371 -0
  511. package/skills/paper-pipeline/SKILL.md +499 -0
  512. package/skills/paper-pipeline/SKILL.md.spec.ts +517 -0
  513. package/skills/paper-pipeline/description-language.eval.mjs +347 -0
  514. package/skills/paper-pipeline/framing-vs-vocabulary.eval.mjs +891 -0
  515. package/skills/paper-pipeline/grade-paper-writing-ablation.eval.mjs +1254 -0
  516. package/skills/paper-pipeline/paper-pipeline.eval.mjs +22 -0
  517. package/skills/paper-pipeline/paper-pipeline.harness.mjs +143 -0
  518. package/skills/paper-pipeline/pipeline-firing.baseline.json +270 -0
  519. package/skills/paper-pipeline/pipeline-firing.eval.mjs +664 -0
  520. package/skills/paper-pipeline/pipeline-language.eval.mjs +672 -0
  521. package/skills/paper-pipeline/references/acceptance-gate.md +329 -0
  522. package/skills/paper-pipeline/references/acl-venue-rules.md +142 -0
  523. package/skills/paper-pipeline/references/anonymization.md +68 -0
  524. package/skills/paper-pipeline/references/artifact-checklist.md +93 -0
  525. package/skills/paper-pipeline/references/body-vs-appendix.md +97 -0
  526. package/skills/paper-pipeline/references/credit-criteria.md +69 -0
  527. package/skills/paper-pipeline/references/occupancy-2026-08-06-probe/README.md +35 -0
  528. package/skills/paper-pipeline/references/occupancy-2026-08-06-probe/run_retext.mjs +24 -0
  529. package/skills/paper-pipeline/references/occupancy-2026-08-06-probe/sentences.txt +11 -0
  530. package/skills/paper-pipeline/references/occupancy-2026-08-06-probe/test_sentences.py +25 -0
  531. package/skills/paper-pipeline/references/occupancy-2026-08-06-prose-checkers.md +538 -0
  532. package/skills/paper-pipeline/references/occupancy-2026-08-06-reproducible-tooling.md +431 -0
  533. package/skills/paper-pipeline/references/occupancy-2026-08-06-staleness-and-orchestration.md +592 -0
  534. package/skills/paper-pipeline/references/pipeline-status-template.md +162 -0
  535. package/skills/paper-pipeline/references/review-ratchet.md +36 -0
  536. package/skills/paper-pipeline/references/sweep-2026-08-09-ideal-pipeline.md +585 -0
  537. package/skills/paper-pipeline/references/writing-craft.md +448 -0
  538. package/skills/paper-pipeline/repro/2026-08-07-description-language-control.log +63 -0
  539. package/skills/paper-pipeline/repro/2026-08-07-fork-check.log +52 -0
  540. package/skills/paper-pipeline/repro/2026-08-07-fork-check2.log +33 -0
  541. package/skills/paper-pipeline/repro/2026-08-07-language-eval-pilot.log +33 -0
  542. package/skills/paper-pipeline/repro/2026-08-07-language-eval-raw.log +166 -0
  543. package/skills/paper-pipeline/repro/2026-08-08-framing-vs-vocabulary-oracle.json +338 -0
  544. package/skills/paper-pipeline/repro/2026-08-08-framing-vs-vocabulary-oracle.log +118 -0
  545. package/skills/paper-pipeline/repro/2026-08-08-framing-vs-vocabulary-raw.log +245 -0
  546. package/skills/paper-pipeline/repro/2026-08-08-framing-vs-vocabulary.json +776 -0
  547. package/skills/paper-pipeline/repro/2026-08-08-grade-paper-writing-ablation-A6-oracle.log +53 -0
  548. package/skills/paper-pipeline/repro/2026-08-08-grade-paper-writing-ablation-A6-raw.log +89 -0
  549. package/skills/paper-pipeline/repro/2026-08-08-grade-paper-writing-ablation-oracle.json +450 -0
  550. package/skills/paper-pipeline/repro/2026-08-08-grade-paper-writing-ablation-oracle.log +136 -0
  551. package/skills/paper-pipeline/repro/2026-08-08-grade-paper-writing-ablation-raw.log +242 -0
  552. package/skills/paper-pipeline/repro/2026-08-08-grade-paper-writing-ablation-setupdiff.log +59 -0
  553. package/skills/paper-pipeline/repro/2026-08-08-grade-paper-writing-ablation.json +1032 -0
  554. package/skills/paper-pipeline/repro/2026-08-08-parent-replication-gpw.json +139 -0
  555. package/skills/paper-pipeline/repro/2026-08-08-parent-replication-gpw.log +98 -0
  556. package/skills/paper-pipeline/repro/2026-08-08-parent-replication.mjs +92 -0
  557. package/skills/paper-pipeline/repro/README.md +129 -0
  558. package/skills/paper-pipeline/repro/analyze-language-eval.py +116 -0
  559. package/skills/paper-pipeline/scripts/README.md +344 -0
  560. package/skills/paper-pipeline/scripts/announce.mjs +67 -0
  561. package/skills/paper-pipeline/scripts/artifact-coverage.harness.mjs +496 -0
  562. package/skills/paper-pipeline/scripts/artifact-coverage.mjs +397 -0
  563. package/skills/paper-pipeline/scripts/artifact-coverage.mutations.mjs +218 -0
  564. package/skills/paper-pipeline/scripts/check-provenance.mjs +184 -0
  565. package/skills/paper-pipeline/scripts/consumer.d.mts +32 -0
  566. package/skills/paper-pipeline/scripts/consumer.harness.mjs +562 -0
  567. package/skills/paper-pipeline/scripts/consumer.mjs +535 -0
  568. package/skills/paper-pipeline/scripts/consumer.mutations.mjs +190 -0
  569. package/skills/paper-pipeline/scripts/extract-ref-facts.harness.mjs +457 -0
  570. package/skills/paper-pipeline/scripts/extract-ref-facts.mjs +656 -0
  571. package/skills/paper-pipeline/scripts/extract-ref-facts.mutations.mjs +54 -0
  572. package/skills/paper-pipeline/scripts/fixtures/clean/PIPELINE-STATUS.md +51 -0
  573. package/skills/paper-pipeline/scripts/fixtures/dirty/PIPELINE-STATUS.md +52 -0
  574. package/skills/paper-pipeline/scripts/fixtures/dirty/paper.md +6 -0
  575. package/skills/paper-pipeline/scripts/fixtures/real-bib/refs.bib +153 -0
  576. package/skills/paper-pipeline/scripts/generated-code.harness.mjs +466 -0
  577. package/skills/paper-pipeline/scripts/generated-code.mjs +338 -0
  578. package/skills/paper-pipeline/scripts/generated-code.mutations.mjs +254 -0
  579. package/skills/paper-pipeline/scripts/ledger.mjs +623 -0
  580. package/skills/paper-pipeline/scripts/ledger.selftest.mjs +286 -0
  581. package/skills/paper-pipeline/scripts/pipeline-check.harness.mjs +389 -0
  582. package/skills/paper-pipeline/scripts/pipeline-check.mjs +737 -0
  583. package/skills/paper-pipeline/scripts/pipeline-check.mutations.mjs +54 -0
  584. package/skills/paper-pipeline/scripts/pipeline-edges.mjs +169 -0
  585. package/skills/paper-pipeline/scripts/population-map.harness.mjs +178 -0
  586. package/skills/paper-pipeline/scripts/population-map.mjs +181 -0
  587. package/skills/paper-pipeline/scripts/population-map.mutations.mjs +65 -0
  588. package/skills/paper-pipeline/scripts/population-map.selftest.mjs +122 -0
  589. package/skills/paper-pipeline/scripts/provenance.harness.mjs +240 -0
  590. package/skills/paper-pipeline/scripts/provenance.mutations.mjs +59 -0
  591. package/skills/paper-pipeline/scripts/round-diff.harness.mjs +881 -0
  592. package/skills/paper-pipeline/scripts/round-diff.mjs +576 -0
  593. package/skills/paper-pipeline/scripts/round-diff.mutations.mjs +276 -0
  594. package/skills/paper-pipeline/scripts/run-mechanical.mjs +633 -0
  595. package/skills/paper-pipeline/scripts/status.mjs +295 -0
  596. package/skills/paper-status/SKILL.md +183 -0
  597. package/skills/paper-status/SKILL.md.spec.ts +190 -0
  598. package/skills/paper-status/paper-status.eval.mjs +22 -0
  599. package/skills/paper-status/paper-status.harness.mjs +25 -0
  600. package/skills/pc-panel-review/SKILL.md +263 -0
  601. package/skills/pc-panel-review/SKILL.md.spec.ts +280 -0
  602. package/skills/pc-panel-review/pc-panel-review.eval.mjs +19 -0
  603. package/skills/pc-panel-review/pc-panel-review.harness.mjs +23 -0
  604. package/skills/plan-paper-timeline/SKILL.md +182 -0
  605. package/skills/plan-paper-timeline/SKILL.md.spec.ts +200 -0
  606. package/skills/plan-paper-timeline/fixtures/fake-google-calendar.mjs +239 -0
  607. package/skills/plan-paper-timeline/plan-paper-timeline.effects.harness.mjs +431 -0
  608. package/skills/plan-paper-timeline/plan-paper-timeline.effects.mutations.mjs +65 -0
  609. package/skills/plan-paper-timeline/plan-paper-timeline.eval.mjs +19 -0
  610. package/skills/plan-paper-timeline/plan-paper-timeline.harness.mjs +23 -0
  611. package/skills/render-paper/SKILL.md +159 -0
  612. package/skills/render-paper/SKILL.md.spec.ts +166 -0
  613. package/skills/render-paper/check-render.sh +419 -0
  614. package/skills/render-paper/checkers-requirements.txt +55 -0
  615. package/skills/render-paper/ensure-checkers.sh +69 -0
  616. package/skills/render-paper/extract-pdf-facts.harness.mjs +166 -0
  617. package/skills/render-paper/extract-pdf-facts.mjs +144 -0
  618. package/skills/render-paper/render-paper.eval.mjs +19 -0
  619. package/skills/render-paper/render-paper.harness.mjs +339 -0
  620. package/skills/research-ideate/SKILL.md +136 -0
  621. package/skills/research-ideate/SKILL.md.spec.ts +152 -0
  622. package/skills/research-ideate/research-ideate.eval.mjs +19 -0
  623. package/skills/research-ideate/research-ideate.harness.mjs +23 -0
  624. package/skills/skill-contract.mutations.mjs +179 -0
  625. package/skills/study-accepted-papers/SKILL.md +206 -0
  626. package/skills/study-accepted-papers/SKILL.md.spec.ts +223 -0
  627. package/skills/study-accepted-papers/study-accepted-papers.eval.mjs +19 -0
  628. package/skills/study-accepted-papers/study-accepted-papers.harness.mjs +23 -0
  629. package/skills/submit-paper/SKILL.md +182 -0
  630. package/skills/submit-paper/SKILL.md.spec.ts +199 -0
  631. package/skills/submit-paper/check-deanon.sh +149 -0
  632. package/skills/submit-paper/references/publishers/acm.md +92 -0
  633. package/skills/submit-paper/references/venues/agenticdev.jsonc +108 -0
  634. package/skills/submit-paper/references/venues/agenticdev.md +139 -0
  635. package/skills/submit-paper/references/venues/agenticdev.tex +19 -0
  636. package/skills/submit-paper/references/venues/aisec.jsonc +101 -0
  637. package/skills/submit-paper/references/venues/aisec.md +105 -0
  638. package/skills/submit-paper/references/venues/paper-guards.tex +41 -0
  639. package/skills/submit-paper/references/venues/realm.jsonc +81 -0
  640. package/skills/submit-paper/references/venues/realm.md +155 -0
  641. package/skills/submit-paper/references/venues/tex-base.jsonc +50 -0
  642. package/skills/submit-paper/references/venues/venue-profile.schema.json +74 -0
  643. package/skills/submit-paper/submit-paper.eval.mjs +19 -0
  644. package/skills/submit-paper/submit-paper.harness.mjs +23 -0
  645. package/skills/sweep-design-space/SKILL.md +269 -0
  646. package/skills/sweep-design-space/SKILL.md.spec.ts +285 -0
  647. package/skills/sweep-design-space/sweep-design-space.eval.mjs +19 -0
  648. package/skills/sweep-design-space/sweep-design-space.harness.mjs +23 -0
  649. package/skills/tighten-paper/SKILL.md +368 -0
  650. package/skills/tighten-paper/SKILL.md.spec.ts +384 -0
  651. package/skills/tighten-paper/structure.mjs +371 -0
  652. package/skills/tighten-paper/tighten-paper.eval.mjs +19 -0
  653. package/skills/tighten-paper/tighten-paper.harness.mjs +23 -0
  654. package/skills/verify-citations/SKILL.md +328 -0
  655. package/skills/verify-citations/SKILL.md.spec.ts +345 -0
  656. package/skills/verify-citations/scripts/bib-authors.mjs +479 -0
  657. package/skills/verify-citations/scripts/bib-authors.test.mjs +175 -0
  658. package/skills/verify-citations/scripts/verify-cites.mjs +1108 -0
  659. package/skills/verify-citations/scripts/verify-cites.test.mjs +735 -0
  660. package/skills/verify-citations/verify-citations.eval.mjs +19 -0
  661. package/skills/verify-citations/verify-citations.harness.mjs +23 -0
  662. package/src/CLAUDE.md +51 -0
  663. package/src/action-ref.test.ts +26 -0
  664. package/src/action-ref.ts +15 -0
  665. package/src/adapters/banal/failure.test.ts +63 -0
  666. package/src/adapters/banal/failure.ts +118 -0
  667. package/src/adapters/banal/index.test.ts +119 -0
  668. package/src/adapters/banal/index.ts +100 -0
  669. package/src/adapters/banal/install.test.ts +20 -0
  670. package/src/adapters/banal/install.ts +41 -0
  671. package/src/adapters/banal/invocation.test.ts +74 -0
  672. package/src/adapters/banal/invocation.ts +95 -0
  673. package/src/adapters/banal/locate.test.ts +52 -0
  674. package/src/adapters/banal/locate.ts +84 -0
  675. package/src/adapters/banal/output.test.ts +140 -0
  676. package/src/adapters/banal/output.ts +141 -0
  677. package/src/adapters/banal/pin.ts +30 -0
  678. package/src/adapters/banal/probe.ts +35 -0
  679. package/src/adapters/banal/run.test.ts +191 -0
  680. package/src/adapters/banal/run.ts +244 -0
  681. package/src/adapters/banal/settings.test.ts +31 -0
  682. package/src/adapters/banal/settings.ts +55 -0
  683. package/src/adapters/banal/xml.test.ts +111 -0
  684. package/src/adapters/banal/xml.ts +112 -0
  685. package/src/adapters/curl/download.io.ts +73 -0
  686. package/src/adapters/curl/download.test.ts +55 -0
  687. package/src/adapters/curl/index.ts +5 -0
  688. package/src/adapters/memory/index.ts +131 -0
  689. package/src/adapters/node/files.io.ts +39 -0
  690. package/src/adapters/node/files.test.ts +28 -0
  691. package/src/adapters/node/host.io.ts +15 -0
  692. package/src/adapters/node/index.ts +36 -0
  693. package/src/adapters/node/process.io.ts +49 -0
  694. package/src/adapters/node/process.test.ts +46 -0
  695. package/src/adapters/node/workspace.io.ts +40 -0
  696. package/src/adapters/node/workspace.test.ts +58 -0
  697. package/src/adapters/pdfjs/fill.test.ts +111 -0
  698. package/src/adapters/pdfjs/fill.ts +141 -0
  699. package/src/build-engine.harness.mjs +314 -0
  700. package/src/build-engine.ts +219 -0
  701. package/src/build.harness.mjs +631 -0
  702. package/src/build.mutations.mjs +195 -0
  703. package/src/build.ts +793 -0
  704. package/src/cli.harness.mjs +2007 -0
  705. package/src/cli.mutations.mjs +448 -0
  706. package/src/cli.ts +1189 -0
  707. package/src/doctor.harness.mjs +396 -0
  708. package/src/doctor.mutations.mjs +175 -0
  709. package/src/doctor.ts +356 -0
  710. package/src/domain/geometry.ts +108 -0
  711. package/src/domain/host.ts +23 -0
  712. package/src/domain/page-layout.ts +32 -0
  713. package/src/domain/paths.ts +5 -0
  714. package/src/domain/result.test.ts +26 -0
  715. package/src/domain/result.ts +29 -0
  716. package/src/domain/sha256.test.ts +12 -0
  717. package/src/domain/sha256.ts +21 -0
  718. package/src/domain/text.ts +11 -0
  719. package/src/engine.harness.mjs +252 -0
  720. package/src/engine.ts +176 -0
  721. package/src/exit-code.test.ts +21 -0
  722. package/src/exit-code.ts +38 -0
  723. package/src/facts-file.test.ts +240 -0
  724. package/src/facts-file.ts +241 -0
  725. package/src/hooks-settings.harness.mjs +386 -0
  726. package/src/hooks-settings.mutations.mjs +116 -0
  727. package/src/hooks-settings.ts +434 -0
  728. package/src/init.ts +900 -0
  729. package/src/latex-log.harness.mjs +226 -0
  730. package/src/latex-log.ts +234 -0
  731. package/src/latex-loop.harness.mjs +449 -0
  732. package/src/latex-loop.ts +211 -0
  733. package/src/link-skills.harness.mjs +273 -0
  734. package/src/link-skills.mutations.mjs +136 -0
  735. package/src/link-skills.ts +258 -0
  736. package/src/new-paper.harness.mjs +216 -0
  737. package/src/new-paper.mutations.mjs +79 -0
  738. package/src/new-paper.ts +158 -0
  739. package/src/pdf-facts.harness.mjs +188 -0
  740. package/src/pdf-facts.ts +327 -0
  741. package/src/pdf-geometry.harness.mjs +254 -0
  742. package/src/pdf-geometry.ts +300 -0
  743. package/src/ports/download.ts +10 -0
  744. package/src/ports/files.ts +11 -0
  745. package/src/ports/measure-geometry.ts +8 -0
  746. package/src/ports/process.ts +46 -0
  747. package/src/ports/tool-installer.ts +33 -0
  748. package/src/ports/workspace.ts +20 -0
  749. package/src/rules-config.harness.mjs +114 -0
  750. package/src/rules-config.ts +178 -0
  751. package/src/structure.harness.mjs +179 -0
  752. package/src/structure.mutations.mjs +83 -0
  753. package/src/structure.ts +166 -0
  754. package/src/tex-requirements.harness.mjs +238 -0
  755. package/src/tex-requirements.ts +181 -0
  756. package/src/toolchain.harness.mjs +651 -0
  757. package/src/toolchain.ts +755 -0
  758. package/src/types.ts +106 -0
  759. package/templates/paper/PIPELINE-STATUS.md +72 -0
  760. package/templates/paper/paper.md +4 -0
  761. package/templates/paper/paper.tex +8 -0
  762. package/tsconfig.json +23 -0
@@ -0,0 +1,136 @@
1
+
2
+ 37 skills installed → 36 competitors per run
3
+
4
+ ARMS — description length, word-set delta vs A0, mean prompt overlap
5
+ arm label chars words − + ovAH ovSH
6
+ A0 baseline (verbatim) 1174 94 0 0 0.85 0.78
7
+ A1 short (sentences 1-2 only) 528 46 48 0 0.71 0.78
8
+ A2 no-subordination 992 85 9 0 0.85 0.78
9
+ A3 no-negation 965 81 13 0 0.85 0.78
10
+ A4 no-machinery 598 44 50 0 0.44 0.35
11
+ A5 renamed (description identical) 1174 94 0 0 0.85 0.78
12
+
13
+ ⚠ ovAH/ovSH FALL AS TEXT IS DELETED — caveat 2 in the header, quantified. The deletion arms carry
14
+ a vocabulary handicap against the parent's dominant factor. A rising deletion arm rose DESPITE it;
15
+ a flat one may be a real gain cancelled by it, and this design cannot tell. A5 is the only arm
16
+ with zero handicap (identical word set).
17
+
18
+ oracle: 6 arms x 8 closed-book picks over 37 descriptions
19
+
20
+ === A0 baseline (verbatim)
21
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
22
+ AH HIT grade-paper-writing grade the writing craft in this draft and name the offendi
23
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
24
+ AH HIT grade-paper-writing run the blind multi-grader panel over the prose clarity an
25
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
26
+ AH HIT grade-paper-writing score the title, the abstract and the intro architecture o
27
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
28
+ AH HIT grade-paper-writing grade how well this reads, hedge stacking included, and gi
29
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
30
+ SH HIT grade-paper-writing the abstract reads like a wall of jargon
31
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
32
+ SH HIT grade-paper-writing the intro architecture is fine but the prose clarity is no
33
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
34
+ SH miss tighten-paper there is hedge stacking everywhere and the point never lan
35
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
36
+ SH HIT grade-paper-writing the writing does not read well even though the draft is fi
37
+ === A1 short (sentences 1-2 only)
38
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
39
+ AH HIT grade-paper-writing grade the writing craft in this draft and name the offendi
40
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
41
+ AH HIT grade-paper-writing run the blind multi-grader panel over the prose clarity an
42
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
43
+ AH HIT grade-paper-writing score the title, the abstract and the intro architecture o
44
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
45
+ AH HIT grade-paper-writing grade how well this reads, hedge stacking included, and gi
46
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
47
+ SH HIT grade-paper-writing the abstract reads like a wall of jargon
48
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
49
+ SH HIT grade-paper-writing the intro architecture is fine but the prose clarity is no
50
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
51
+ SH miss tighten-paper there is hedge stacking everywhere and the point never lan
52
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
53
+ SH HIT grade-paper-writing the writing does not read well even though the draft is fi
54
+ === A2 no-subordination
55
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
56
+ AH HIT grade-paper-writing grade the writing craft in this draft and name the offendi
57
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
58
+ AH HIT grade-paper-writing run the blind multi-grader panel over the prose clarity an
59
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
60
+ AH HIT grade-paper-writing score the title, the abstract and the intro architecture o
61
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
62
+ AH HIT grade-paper-writing grade how well this reads, hedge stacking included, and gi
63
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
64
+ SH HIT grade-paper-writing the abstract reads like a wall of jargon
65
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
66
+ SH HIT grade-paper-writing the intro architecture is fine but the prose clarity is no
67
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
68
+ SH HIT grade-paper-writing there is hedge stacking everywhere and the point never lan
69
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
70
+ SH HIT grade-paper-writing the writing does not read well even though the draft is fi
71
+ === A3 no-negation
72
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
73
+ AH HIT grade-paper-writing grade the writing craft in this draft and name the offendi
74
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
75
+ AH HIT grade-paper-writing run the blind multi-grader panel over the prose clarity an
76
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
77
+ AH HIT grade-paper-writing score the title, the abstract and the intro architecture o
78
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
79
+ AH HIT grade-paper-writing grade how well this reads, hedge stacking included, and gi
80
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
81
+ SH HIT grade-paper-writing the abstract reads like a wall of jargon
82
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
83
+ SH HIT grade-paper-writing the intro architecture is fine but the prose clarity is no
84
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
85
+ SH miss cold-read-diff there is hedge stacking everywhere and the point never lan
86
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
87
+ SH HIT grade-paper-writing the writing does not read well even though the draft is fi
88
+ === A4 no-machinery
89
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
90
+ AH HIT grade-paper-writing grade the writing craft in this draft and name the offendi
91
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
92
+ AH HIT grade-paper-writing run the blind multi-grader panel over the prose clarity an
93
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
94
+ AH HIT grade-paper-writing score the title, the abstract and the intro architecture o
95
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
96
+ AH HIT grade-paper-writing grade how well this reads, hedge stacking included, and gi
97
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
98
+ SH HIT grade-paper-writing the abstract reads like a wall of jargon
99
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
100
+ SH HIT grade-paper-writing the intro architecture is fine but the prose clarity is no
101
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
102
+ SH HIT grade-paper-writing there is hedge stacking everywhere and the point never lan
103
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
104
+ SH HIT grade-paper-writing the writing does not read well even though the draft is fi
105
+ === A5 renamed (description identical)
106
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
107
+ AH miss ?grade-paper-writing grade the writing craft in this draft and name the offendi
108
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
109
+ AH miss ?grade-paper-writing run the blind multi-grader panel over the prose clarity an
110
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
111
+ AH miss ?grade-paper-writing score the title, the abstract and the intro architecture o
112
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
113
+ AH miss ?grade-paper-writing grade how well this reads, hedge stacking included, and gi
114
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
115
+ SH miss ?grade-paper-writing the abstract reads like a wall of jargon
116
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
117
+ SH miss ?grade-paper-writing the intro architecture is fine but the prose clarity is no
118
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
119
+ SH miss tighten-paper there is hedge stacking everywhere and the point never lan
120
+ Ignoring 24 permissions.allow entries from .claude/settings.json and .claude/settings.local.json: this workspace has not been trusted. Run Claude Code interactively here once and accept the trust dialog, or set projects["/home/user/mine"].hasTrustDialogAccepted: true in /root/.claude.json.
121
+ SH miss ?grade-paper-writing the writing does not read well even though the draft is fi
122
+
123
+ ORACLE ACCURACY BY ARM (closed book, 37 descriptions in context, 1 pick each)
124
+ arm label hit AH SH none wrong
125
+ A0 baseline (verbatim) 7/8 4/4 3/4 0 1
126
+ A1 short (sentences 1-2 only) 7/8 4/4 3/4 0 1
127
+ A2 no-subordination 8/8 4/4 4/4 0 0
128
+ A3 no-negation 7/8 4/4 3/4 0 1
129
+ A4 no-machinery 8/8 4/4 4/4 0 0
130
+ A5 renamed (description identical) 0/8 0/4 0/4 0 8
131
+
132
+ rows → repro/2026-08-08-grade-paper-writing-ablation-oracle.json
133
+
134
+ READ AS AN UPPER BOUND, NOT A HUMAN, and read it AGAINST the harness arms: an arm where the
135
+ oracle moves WITH the harness changed what is recoverable from the text; an arm where the oracle
136
+ is flat and the harness moves changed what the harness DOES with the same recoverable text.
@@ -0,0 +1,242 @@
1
+
2
+ 37 skills installed → 36 competitors per run
3
+
4
+ ARMS — description length, word-set delta vs A0, mean prompt overlap
5
+ arm label chars words − + ovAH ovSH
6
+ A0 baseline (verbatim) 1174 94 0 0 0.85 0.78
7
+ A1 short (sentences 1-2 only) 528 46 48 0 0.71 0.78
8
+ A2 no-subordination 992 85 9 0 0.85 0.78
9
+ A3 no-negation 965 81 13 0 0.85 0.78
10
+ A4 no-machinery 598 44 50 0 0.44 0.35
11
+ A5 renamed (description identical) 1174 94 0 0 0.85 0.78
12
+
13
+ ⚠ ovAH/ovSH FALL AS TEXT IS DELETED — caveat 2 in the header, quantified. The deletion arms carry
14
+ a vocabulary handicap against the parent's dominant factor. A rising deletion arm rose DESPITE it;
15
+ a flat one may be a real gain cancelled by it, and this design cannot tell. A5 is the only arm
16
+ with zero handicap (identical word set).
17
+
18
+ mode=main 6 arms x 8 prompts x 3 trials = 144 runs
19
+
20
+ ==============================================================================
21
+ === A0 baseline (verbatim) (1174 chars, id vigiles-loose-skills:grade-paper-writing)
22
+ Spent: 224,340 tokens (10 in · 1.2k out · 89.3k cache) · ~$0.85 API-equivalent
23
+ Billed to: your Claude subscription — $0 metered ✅
24
+ AH 0.33 T1 O0 S2 ov=0.88 grade the writing craft in this draft and name the offen
25
+ Spent: 495,963 tokens (22 in · 2.2k out · 447.6k cache) · ~$0.44 API-equivalent
26
+ Billed to: your Claude subscription — $0 metered ✅
27
+ Session so far: 720,303 tokens · ~$1.29 API-equivalent
28
+ AH 1.00 T3 O0 S0 ov=1.00 run the blind multi-grader panel over the prose clarity
29
+ Spent: 544,750 tokens (23 in · 4.1k out · 493.1k cache) · ~$0.50 API-equivalent
30
+ Billed to: your Claude subscription — $0 metered ✅
31
+ Session so far: 1,265,053 tokens · ~$1.79 API-equivalent
32
+ AH 1.00 T3 O0 S0 ov=0.67 score the title, the abstract and the intro architecture
33
+ AH 0.00 T0 O0 S3 ov=0.86 grade how well this reads, hedge stacking included, and
34
+ SH 0.00 T0 O0 S3 ov=1.00 the abstract reads like a wall of jargon
35
+ Spent: 735,999 tokens (32 in · 7.3k out · 676.1k cache) · ~$0.63 API-equivalent
36
+ Billed to: your Claude subscription — $0 metered ✅
37
+ Session so far: 2,001,052 tokens · ~$2.42 API-equivalent
38
+ SH 0.67 T2 O0 S1 ov=0.80 the intro architecture is fine but the prose clarity is
39
+ Spent: 453,454 tokens (20 in · 2.9k out · 404.6k cache) · ~$0.44 API-equivalent
40
+ Billed to: your Claude subscription — $0 metered ✅
41
+ Session so far: 2,454,506 tokens · ~$2.86 API-equivalent
42
+ SH 0.67 T2 O0 S1 ov=0.67 there is hedge stacking everywhere and the point never l
43
+ Spent: 314,649 tokens (14 in · 1.7k out · 268.4k cache) · ~$0.37 API-equivalent
44
+ Billed to: your Claude subscription — $0 metered ✅
45
+ Session so far: 2,769,155 tokens · ~$3.23 API-equivalent
46
+ SH 0.67 T2 O0 S1 ov=0.67 the writing does not read well even though the draft is
47
+
48
+ ==============================================================================
49
+ === A1 short (sentences 1-2 only) (528 chars, id vigiles-loose-skills:grade-paper-writing)
50
+ Spent: 313,715 tokens (14 in · 1.2k out · 268.1k cache) · ~$0.36 API-equivalent
51
+ Billed to: your Claude subscription — $0 metered ✅
52
+ Session so far: 3,082,870 tokens · ~$3.59 API-equivalent
53
+ AH 0.67 T2 O0 S1 ov=0.88 grade the writing craft in this draft and name the offen
54
+ Spent: 500,245 tokens (22 in · 3.3k out · 449.4k cache) · ~$0.47 API-equivalent
55
+ Billed to: your Claude subscription — $0 metered ✅
56
+ Session so far: 3,583,115 tokens · ~$4.06 API-equivalent
57
+ AH 1.00 T3 O0 S0 ov=0.44 run the blind multi-grader panel over the prose clarity
58
+ Spent: 271,331 tokens (12 in · 1.7k out · 225.0k cache) · ~$0.36 API-equivalent
59
+ Billed to: your Claude subscription — $0 metered ✅
60
+ Session so far: 3,854,446 tokens · ~$4.42 API-equivalent
61
+ AH 0.33 T1 O0 S2 ov=0.67 score the title, the abstract and the intro architecture
62
+ AH 0.00 T0 O0 S3 ov=0.86 grade how well this reads, hedge stacking included, and
63
+ SH 0.00 T0 O0 S3 ov=1.00 the abstract reads like a wall of jargon
64
+ Spent: 837,604 tokens (36 in · 11.8k out · 769.3k cache) · ~$0.85 API-equivalent
65
+ Billed to: your Claude subscription — $0 metered ✅
66
+ Session so far: 4,692,050 tokens · ~$5.27 API-equivalent
67
+ SH 0.33 T1 O1 S1 ov=0.80 the intro architecture is fine but the prose clarity is
68
+ instead: cold-read-diff
69
+ Spent: 501,767 tokens (22 in · 3.5k out · 450.4k cache) · ~$0.47 API-equivalent
70
+ Billed to: your Claude subscription — $0 metered ✅
71
+ Session so far: 5,193,817 tokens · ~$5.75 API-equivalent
72
+ SH 1.00 T3 O0 S0 ov=0.67 there is hedge stacking everywhere and the point never l
73
+ Spent: 359,007 tokens (16 in · 1.5k out · 313.0k cache) · ~$0.38 API-equivalent
74
+ Billed to: your Claude subscription — $0 metered ✅
75
+ Session so far: 5,552,824 tokens · ~$6.13 API-equivalent
76
+ SH 0.67 T2 O0 S1 ov=0.67 the writing does not read well even though the draft is
77
+
78
+ ==============================================================================
79
+ === A2 no-subordination (992 chars, id vigiles-loose-skills:grade-paper-writing)
80
+ Spent: 403,627 tokens (18 in · 1.3k out · 357.7k cache) · ~$0.39 API-equivalent
81
+ Billed to: your Claude subscription — $0 metered ✅
82
+ Session so far: 5,956,451 tokens · ~$6.53 API-equivalent
83
+ AH 0.67 T2 O0 S1 ov=0.88 grade the writing craft in this draft and name the offen
84
+ Spent: 541,999 tokens (24 in · 2.3k out · 493.2k cache) · ~$0.46 API-equivalent
85
+ Billed to: your Claude subscription — $0 metered ✅
86
+ Session so far: 6,498,450 tokens · ~$6.99 API-equivalent
87
+ AH 1.00 T3 O0 S0 ov=1.00 run the blind multi-grader panel over the prose clarity
88
+ Spent: 549,686 tokens (24 in · 8.2k out · 493.4k cache) · ~$0.56 API-equivalent
89
+ Billed to: your Claude subscription — $0 metered ✅
90
+ Session so far: 7,048,136 tokens · ~$7.55 API-equivalent
91
+ AH 0.67 T2 O0 S1 ov=0.67 score the title, the abstract and the intro architecture
92
+ Spent: 133,822 tokens (6 in · 954 out · 90.1k cache) · ~$0.30 API-equivalent
93
+ Billed to: your Claude subscription — $0 metered ✅
94
+ Session so far: 7,181,958 tokens · ~$7.85 API-equivalent
95
+ AH 0.00 T0 O0 S3 ov=0.86 grade how well this reads, hedge stacking included, and
96
+ Spent: 403,466 tokens (18 in · 1.7k out · 357.0k cache) · ~$0.40 API-equivalent
97
+ Billed to: your Claude subscription — $0 metered ✅
98
+ Session so far: 7,585,424 tokens · ~$8.25 API-equivalent
99
+ SH 0.33 T1 O0 S2 ov=1.00 the abstract reads like a wall of jargon
100
+ Spent: 371,018 tokens (16 in · 4.5k out · 333.6k cache) · ~$0.42 API-equivalent
101
+ Billed to: your Claude subscription — $0 metered ✅
102
+ Session so far: 7,956,442 tokens · ~$8.67 API-equivalent
103
+ SH 0.00 T0 O1 S2 ov=0.80 the intro architecture is fine but the prose clarity is
104
+ instead: cold-read-diff
105
+ Spent: 634,493 tokens (27 in · 2.9k out · 584.6k cache) · ~$0.50 API-equivalent
106
+ Billed to: your Claude subscription — $0 metered ✅
107
+ Session so far: 8,590,935 tokens · ~$9.17 API-equivalent
108
+ SH 0.67 T2 O1 S0 ov=0.67 there is hedge stacking everywhere and the point never l
109
+ instead: tighten-paper
110
+ Spent: 450,474 tokens (20 in · 2.0k out · 403.4k cache) · ~$0.42 API-equivalent
111
+ Billed to: your Claude subscription — $0 metered ✅
112
+ Session so far: 9,041,409 tokens · ~$9.59 API-equivalent
113
+ SH 0.67 T2 O0 S1 ov=0.67 the writing does not read well even though the draft is
114
+
115
+ ==============================================================================
116
+ === A3 no-negation (965 chars, id vigiles-loose-skills:grade-paper-writing)
117
+ Spent: 358,407 tokens (16 in · 1.2k out · 312.7k cache) · ~$0.38 API-equivalent
118
+ Billed to: your Claude subscription — $0 metered ✅
119
+ Session so far: 9,399,816 tokens · ~$9.97 API-equivalent
120
+ AH 0.67 T2 O0 S1 ov=0.88 grade the writing craft in this draft and name the offen
121
+ Spent: 313,797 tokens (14 in · 1.5k out · 267.5k cache) · ~$0.37 API-equivalent
122
+ Billed to: your Claude subscription — $0 metered ✅
123
+ Session so far: 9,713,613 tokens · ~$10.34 API-equivalent
124
+ AH 1.00 T3 O0 S0 ov=1.00 run the blind multi-grader panel over the prose clarity
125
+ Spent: 405,847 tokens (18 in · 2.3k out · 358.2k cache) · ~$0.41 API-equivalent
126
+ Billed to: your Claude subscription — $0 metered ✅
127
+ Session so far: 10,119,460 tokens · ~$10.75 API-equivalent
128
+ AH 0.67 T2 O0 S1 ov=0.67 score the title, the abstract and the intro architecture
129
+ AH 0.00 T0 O0 S3 ov=0.86 grade how well this reads, hedge stacking included, and
130
+ Spent: 268,334 tokens (11 in · 1.2k out · 222.8k cache) · ~$0.35 API-equivalent
131
+ Billed to: your Claude subscription — $0 metered ✅
132
+ Session so far: 10,387,794 tokens · ~$11.10 API-equivalent
133
+ SH 1.00 T3 O0 S0 ov=1.00 the abstract reads like a wall of jargon
134
+ Spent: 554,174 tokens (110 in · 6.2k out · 497.4k cache) · ~$0.54 API-equivalent
135
+ Billed to: your Claude subscription — $0 metered ✅
136
+ Session so far: 10,941,968 tokens · ~$11.65 API-equivalent
137
+ SH 0.33 T1 O0 S2 ov=0.80 the intro architecture is fine but the prose clarity is
138
+ SH 0.00 T0 O0 S3 ov=0.67 there is hedge stacking everywhere and the point never l
139
+ Spent: 223,224 tokens (9 in · 1.0k out · 178.6k cache) · ~$0.33 API-equivalent
140
+ Billed to: your Claude subscription — $0 metered ✅
141
+ Session so far: 11,165,192 tokens · ~$11.98 API-equivalent
142
+ SH 0.67 T2 O0 S1 ov=0.67 the writing does not read well even though the draft is
143
+
144
+ ==============================================================================
145
+ === A4 no-machinery (598 chars, id vigiles-loose-skills:grade-paper-writing)
146
+ Spent: 494,646 tokens (22 in · 1.8k out · 447.2k cache) · ~$0.43 API-equivalent
147
+ Billed to: your Claude subscription — $0 metered ✅
148
+ Session so far: 11,659,838 tokens · ~$12.41 API-equivalent
149
+ AH 1.00 T3 O0 S0 ov=0.88 grade the writing craft in this draft and name the offen
150
+ Spent: 637,466 tokens (28 in · 3.6k out · 586.2k cache) · ~$0.52 API-equivalent
151
+ Billed to: your Claude subscription — $0 metered ✅
152
+ Session so far: 12,297,304 tokens · ~$12.93 API-equivalent
153
+ AH 1.00 T3 O0 S0 ov=0.33 run the blind multi-grader panel over the prose clarity
154
+ AH 0.00 T0 O0 S3 ov=0.00 score the title, the abstract and the intro architecture
155
+ Spent: 133,988 tokens (6 in · 1.1k out · 90.1k cache) · ~$0.30 API-equivalent
156
+ Billed to: your Claude subscription — $0 metered ✅
157
+ Session so far: 12,431,292 tokens · ~$13.23 API-equivalent
158
+ AH 0.00 T0 O0 S3 ov=0.57 grade how well this reads, hedge stacking included, and
159
+ Spent: 314,207 tokens (14 in · 1.3k out · 268.4k cache) · ~$0.37 API-equivalent
160
+ Billed to: your Claude subscription — $0 metered ✅
161
+ Session so far: 12,745,499 tokens · ~$13.60 API-equivalent
162
+ SH 0.67 T2 O0 S1 ov=0.75 the abstract reads like a wall of jargon
163
+ Spent: 369,391 tokens (16 in · 4.3k out · 318.1k cache) · ~$0.55 API-equivalent
164
+ Billed to: your Claude subscription — $0 metered ✅
165
+ Session so far: 13,114,890 tokens · ~$14.14 API-equivalent
166
+ SH 0.00 T0 O1 S2 ov=0.00 the intro architecture is fine but the prose clarity is
167
+ instead: cold-read-diff
168
+ Spent: 315,041 tokens (13 in · 2.1k out · 268.6k cache) · ~$0.38 API-equivalent
169
+ Billed to: your Claude subscription — $0 metered ✅
170
+ Session so far: 13,429,931 tokens · ~$14.52 API-equivalent
171
+ SH 0.00 T0 O2 S1 ov=0.00 there is hedge stacking everywhere and the point never l
172
+ instead: tighten-paper
173
+ Spent: 359,178 tokens (15 in · 1.5k out · 312.7k cache) · ~$0.39 API-equivalent
174
+ Billed to: your Claude subscription — $0 metered ✅
175
+ Session so far: 13,789,109 tokens · ~$14.91 API-equivalent
176
+ SH 1.00 T3 O0 S0 ov=0.67 the writing does not read well even though the draft is
177
+
178
+ ==============================================================================
179
+ === A5 renamed (description identical) (1174 chars, id vigiles-loose-skills:paper-readability-review)
180
+ AH 0.00 T0 O0 S3 ov=0.88 grade the writing craft in this draft and name the offen
181
+ Spent: 358,723 tokens (16 in · 1.4k out · 312.6k cache) · ~$0.38 API-equivalent
182
+ Billed to: your Claude subscription — $0 metered ✅
183
+ Session so far: 14,147,832 tokens · ~$15.29 API-equivalent
184
+ AH 1.00 T3 O0 S0 ov=1.00 run the blind multi-grader panel over the prose clarity
185
+ Spent: 363,060 tokens (16 in · 4.0k out · 313.5k cache) · ~$0.43 API-equivalent
186
+ Billed to: your Claude subscription — $0 metered ✅
187
+ Session so far: 14,510,892 tokens · ~$15.72 API-equivalent
188
+ AH 0.33 T1 O0 S2 ov=0.67 score the title, the abstract and the intro architecture
189
+ AH 0.00 T0 O0 S3 ov=0.86 grade how well this reads, hedge stacking included, and
190
+ SH 0.00 T0 O0 S3 ov=1.00 the abstract reads like a wall of jargon
191
+ Spent: 596,707 tokens (26 in · 6.4k out · 540.2k cache) · ~$0.56 API-equivalent
192
+ Billed to: your Claude subscription — $0 metered ✅
193
+ Session so far: 15,107,599 tokens · ~$16.28 API-equivalent
194
+ SH 0.00 T0 O0 S3 ov=0.80 the intro architecture is fine but the prose clarity is
195
+ Spent: 634,313 tokens (28 in · 3.2k out · 583.8k cache) · ~$0.51 API-equivalent
196
+ Billed to: your Claude subscription — $0 metered ✅
197
+ Session so far: 15,741,912 tokens · ~$16.78 API-equivalent
198
+ SH 0.67 T2 O1 S0 ov=0.67 there is hedge stacking everywhere and the point never l
199
+ instead: tighten-paper
200
+ Spent: 179,241 tokens (8 in · 1.4k out · 134.4k cache) · ~$0.32 API-equivalent
201
+ Billed to: your Claude subscription — $0 metered ✅
202
+ Session so far: 15,921,153 tokens · ~$17.10 API-equivalent
203
+ SH 0.00 T0 O0 S3 ov=0.67 the writing does not read well even though the draft is
204
+
205
+ ==============================================================================
206
+ THE ABLATION — target trigger rate by arm
207
+
208
+ arm label chars fired AH SH Δ vs A0
209
+ A0 baseline (verbatim) 1174 54% (13/24) 58% 50% —
210
+ A1 short (sentences 1-2 only) 528 50% (12/24) 50% 50% -4pp
211
+ A2 no-subordination 992 50% (12/24) 58% 42% -4pp
212
+ A3 no-negation 965 54% (13/24) 58% 50% 0pp
213
+ A4 no-machinery 598 46% (11/24) 50% 42% -8pp
214
+ A5 renamed (description identical) 1174 25% (6/24) 33% 17% -29pp
215
+
216
+ ==============================================================================
217
+ TARGET / OTHER / SILENT — the parent's discriminator
218
+
219
+ arm label target other silent
220
+ A0 baseline (verbatim) 54% 0% 46%
221
+ A1 short (sentences 1-2 only) 50% 4% 46%
222
+ A2 no-subordination 50% 8% 42%
223
+ A3 no-negation 54% 0% 46%
224
+ A4 no-machinery 46% 13% 42%
225
+ A5 renamed (description identical) 25% 4% 71%
226
+
227
+ OTHER = a competitor was selected and the target was not. The parent saw ONE in 144 runs.
228
+ SILENT = nothing resolved. 42 of this skill's 48 parent runs were SILENT; that is the number
229
+ an arm has to move. See caveat 4: a run that simply answered is also SILENT.
230
+
231
+ WHICH competitors took the runs (all arms):
232
+ 4 tighten-paper
233
+ 3 cold-read-diff
234
+
235
+ 🔴 n = 24 PER ARM. At ~20% baseline the 95% interval is roughly ±16pp. A factor of two is
236
+ readable; fifteen points is not. If every arm lands within noise of A0, the finding is that the
237
+ cause is NOT IN THE DESCRIPTION TEXT — report that, do not pick the largest number.
238
+
239
+ per-run rows → repro/2026-08-08-grade-paper-writing-ablation.json
240
+
241
+ Run --mode oracle before reading any arm as a mechanism: a harness move with a matching oracle
242
+ move is a change in what the TEXT supports, not in what the harness does with it.
@@ -0,0 +1,59 @@
1
+
2
+ 37 skills installed → 36 competitors per run
3
+
4
+ ARMS — description length, word-set delta vs A0, mean prompt overlap
5
+ arm label chars words − + ovAH ovSH
6
+ A0 baseline (verbatim) 1174 94 0 0 0.85 0.78
7
+ A1 short (sentences 1-2 only) 528 46 48 0 0.71 0.78
8
+ A2 no-subordination 992 85 9 0 0.85 0.78
9
+ A3 no-negation 965 81 13 0 0.85 0.78
10
+ A4 no-machinery 598 44 50 0 0.44 0.35
11
+ A5 renamed (description identical) 1174 94 0 0 0.85 0.78
12
+ A6 persona-only (A1's mirror) 225 22 72 0 0.19 0.35
13
+
14
+ ⚠ ovAH/ovSH FALL AS TEXT IS DELETED — caveat 2 in the header, quantified. The deletion arms carry
15
+ a vocabulary handicap against the parent's dominant factor. A rising deletion arm rose DESPITE it;
16
+ a flat one may be a real gain cancelled by it, and this design cannot tell. A5 is the only arm
17
+ with zero handicap (identical word set).
18
+
19
+ HARNESS OPTIONS — this file vs the parent (extracted from both sources)
20
+ option ablation parent
21
+ allowedTools ["Skill" ["Skill"
22
+ trials TRIALS TRIALS
23
+ concurrency 3 3
24
+ spacingSec 2 2
25
+ timeoutMs 180000 180000
26
+ minPrompts 4 4
27
+ fixture /.exec(src)?.[0] ?? "").replace( FIXTURE
28
+ skillsDir dir SKILLS_DIR
29
+
30
+ fixture sha256/16 ablation 1cee4e4c8fc95e59
31
+ FIXTURE source block identical to the parent's: YES
32
+ fired predicate identical (modulo the id it matches): YES
33
+ firedSkills() helper identical: YES
34
+
35
+ ARM DIR INTEGRITY — sha256/16 of each SKILL.md frontmatter vs the real .claude/skills
36
+ A0 37 skills · unintended frontmatter diffs: none
37
+ A1 37 skills · unintended frontmatter diffs: none
38
+ A2 37 skills · unintended frontmatter diffs: none
39
+ A3 37 skills · unintended frontmatter diffs: none
40
+ A4 37 skills · unintended frontmatter diffs: none
41
+ A5 37 skills · unintended frontmatter diffs: none
42
+ A6 37 skills · unintended frontmatter diffs: none
43
+
44
+ ROW BY ROW — parent (8 prompts) vs this file's A0 (8 prompts)
45
+ cell parent A0 Δ prompt
46
+ AH 0/3 1/3 +1 grade the writing craft in this draft and name the off
47
+ AH 3/3 3/3 0 run the blind multi-grader panel over the prose clarit
48
+ AH 0/3 3/3 +3 score the title, the abstract and the intro architectu
49
+ AH 0/3 0/3 0 grade how well this reads, hedge stacking included, an
50
+ SH 0/3 0/3 0 the abstract reads like a wall of jargon
51
+ SH 0/3 2/3 +2 the intro architecture is fine but the prose clarity i
52
+ SH 0/3 2/3 +2 there is hedge stacking everywhere and the point never
53
+ SH 2/3 2/3 0 the writing does not read well even though the draft i
54
+ 5/24 13/24 +8 TOTAL
55
+
56
+ 3 of 8 prompts moved by ≥2 of 3 trials. Spread across many prompts ⇒ a global shift
57
+ (session, load, model routing). Concentrated in one or two ⇒ something prompt-specific.
58
+
59
+ SETUPDIFF COMPLETE. No tokens spent.