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,33 @@
1
+ matched pairs: OK (8 cases × 4 pairs × 2 languages × 2 trial(s) = 128 runs; origins: 14 en, 18 ru; 37 skills installed → 36 competitors per run)
2
+ Spent: 902,258 tokens (35 in · 5.1k out · 776.0k cache) · ~$1.04 API-equivalent
3
+ Billed to: your Claude subscription — $0 metered ✅
4
+ Spent: 808,469 tokens (31 in · 4.0k out · 685.2k cache) · ~$0.99 API-equivalent
5
+ Billed to: your Claude subscription — $0 metered ✅
6
+ Session so far: 1,710,727 tokens · ~$2.03 API-equivalent
7
+
8
+ === tighten-paper — structural bloat — cut/fold/merge, NOT sentence craft
9
+ en: 88% (8 runs)
10
+ 1.00 [ru] the paper has bloated and the middle sags — what do I cut?
11
+ 1.00 [en] this draft is 14 pages against a 9 page limit, what goes
12
+ 1.00 [ru] after three review rounds it is all filler and hedges, I need a cu
13
+ 0.50 [en] sections 4 and 5 say the same thing twice, and nobody would skim a
14
+ ru: 75% (8 runs)
15
+ 1.00 [ru] статья раздулась, середина провисает — что резать?
16
+ 1.00 [en] в черновике 14 страниц при лимите 9, что убираем
17
+ 1.00 [ru] после трёх раундов ревью там одна вода и хеджи, нужен план сокраще
18
+ 0.00 [en] секции 4 и 5 говорят одно и то же дважды, и это невозможно пролист
19
+
20
+ skill en ru delta
21
+ tighten-paper 88% 75% -13pp
22
+
23
+ OVERALL en 7/8 (88%) ru 6/8 (75%) delta -13pp
24
+
25
+ SPLIT BY ORIGIN — is the gap about language, or about which side was translated?
26
+ origin en ru delta
27
+ en-original 75% 50% -25pp (3/4 vs 2/4)
28
+ ru-original 100% 100% +0pp (4/4 vs 4/4)
29
+
30
+ No gate: this file measures an effect, it does not enforce one. Read OVERALL first, then SPLIT BY ORIGIN — a gap that appears only on translated Russian is a finding about translation, not about Russian.
31
+
32
+ total spend: $2.03 API-equivalent
33
+ no baseline at /home/user/mine/.claude/skills/paper-pipeline/pipeline-language.baseline.json — record one with --update-baseline
@@ -0,0 +1,166 @@
1
+ matched pairs: OK (8 cases × 4 pairs × 2 languages × 3 trial(s) = 192 runs; origins: 14 en, 18 ru; 37 skills installed → 36 competitors per run)
2
+ Spent: 1,347,349 tokens (53 in · 6.0k out · 1161.5k cache) · ~$1.53 API-equivalent
3
+ Billed to: your Claude subscription — $0 metered ✅
4
+ Spent: 1,263,264 tokens (51 in · 7.0k out · 1090.6k cache) · ~$1.43 API-equivalent
5
+ Billed to: your Claude subscription — $0 metered ✅
6
+ Session so far: 2,610,613 tokens · ~$2.96 API-equivalent
7
+
8
+ === tighten-paper — structural bloat — cut/fold/merge, NOT sentence craft
9
+ en: 92% (12 runs)
10
+ 1.00 [ru] the paper has bloated and the middle sags — what do I cut?
11
+ 1.00 [en] this draft is 14 pages against a 9 page limit, what goes
12
+ 1.00 [ru] after three review rounds it is all filler and hedges, I need a cu
13
+ 0.67 [en] sections 4 and 5 say the same thing twice, and nobody would skim a
14
+ ru: 67% (12 runs)
15
+ 1.00 [ru] статья раздулась, середина провисает — что резать?
16
+ 0.33 [en] в черновике 14 страниц при лимите 9, что убираем
17
+ 1.00 [ru] после трёх раундов ревью там одна вода и хеджи, нужен план сокраще
18
+ 0.33 [en] секции 4 и 5 говорят одно и то же дважды, и это невозможно пролист
19
+ Spent: 1,443,611 tokens (64 in · 7.7k out · 1254.6k cache) · ~$1.59 API-equivalent
20
+ Billed to: your Claude subscription — $0 metered ✅
21
+ Session so far: 4,054,224 tokens · ~$4.55 API-equivalent
22
+ Spent: 1,219,781 tokens (54 in · 11.1k out · 1029.4k cache) · ~$1.56 API-equivalent
23
+ Billed to: your Claude subscription — $0 metered ✅
24
+ Session so far: 5,274,005 tokens · ~$6.10 API-equivalent
25
+
26
+ === grade-paper-writing — prose craft — the sentence is the unit, NOT the section
27
+ en: 67% (12 runs)
28
+ 1.00 [ru] grade how it is written — it reads like a wall of jargon
29
+ 0.33 [en] is the writing any good or does it read like shit
30
+ 0.67 [ru] the abstract sounds clumsy even though the substance is fine, grad
31
+ 0.67 [en] grade the craft: title, abstract, sentence clarity, hedge stacking
32
+ ru: 25% (12 runs)
33
+ 0.33 [ru] оцени как написано — читается как стена жаргона
34
+ 0.00 [en] текст вообще нормальный или читается как дерьмо
35
+ 0.00 [ru] abstract звучит криво хотя по смыслу всё на месте, дай оценку проз
36
+ 0.67 [en] оцени ремесло: заголовок, аннотация, ясность предложений, нагромож
37
+ Spent: 1,165,006 tokens (47 in · 6.5k out · 980.5k cache) · ~$1.47 API-equivalent
38
+ Billed to: your Claude subscription — $0 metered ✅
39
+ Session so far: 6,439,011 tokens · ~$7.57 API-equivalent
40
+ Spent: 803,102 tokens (32 in · 3.8k out · 625.0k cache) · ~$1.30 API-equivalent
41
+ Billed to: your Claude subscription — $0 metered ✅
42
+ Session so far: 7,242,113 tokens · ~$8.87 API-equivalent
43
+
44
+ === argument-arc — argument architecture — does one conclusion become inevitable
45
+ en: 83% (12 runs)
46
+ 1.00 [ru] a reviewer has now said twice that we throw disconnected ideas at
47
+ 0.67 [en] does the paper actually carry a reader to one conclusion or just l
48
+ 0.67 [ru] we introduce five named things and three numbers — that feels like
49
+ 1.00 [en] before the big rewrite I want one sentence per section, bottom up
50
+ ru: 50% (12 runs)
51
+ 1.00 [ru] ревьюер второй раз пишет что мы кидаем в него идеи без связи
52
+ 0.00 [en] статья реально ведёт читателя к одному выводу или просто перечисля
53
+ 0.00 [ru] мы вводим пять именованных штук и три числа — по-моему это перебор
54
+ 1.00 [en] перед большой переписью хочу по одному предложению на секцию, сниз
55
+ Spent: 1,722,432 tokens (70 in · 9.9k out · 1528.1k cache) · ~$1.72 API-equivalent
56
+ Billed to: your Claude subscription — $0 metered ✅
57
+ Session so far: 8,964,545 tokens · ~$10.59 API-equivalent
58
+ Spent: 1,312,088 tokens (51 in · 9.5k out · 1121.6k cache) · ~$1.57 API-equivalent
59
+ Billed to: your Claude subscription — $0 metered ✅
60
+ Session so far: 10,276,633 tokens · ~$12.16 API-equivalent
61
+
62
+ === paper-adversarial-review — ONE hostile reviewer, fast
63
+ en: 83% (12 runs)
64
+ 1.00 [ru] red-team this paper, what will reviewer 2 hit it with
65
+ 0.33 [en] would reviewer 2 buy this claim about the hook finding
66
+ 1.00 [ru] find the weak spots before submission — one hostile but fair revie
67
+ 1.00 [en] what is our desk reject risk and where do we overclaim
68
+ ru: 75% (12 runs)
69
+ 1.00 [ru] red-team эту статью, чем будет бить reviewer 2
70
+ 0.00 [en] купится ли reviewer 2 на это утверждение про находку с хуком
71
+ 1.00 [ru] найди слабые места до сабмита — один злой но честный рецензент
72
+ 1.00 [en] какой у нас риск desk reject и где мы переобещаем
73
+ Spent: 2,371,996 tokens (101 in · 17.8k out · 2160.1k cache) · ~$2.09 API-equivalent
74
+ Billed to: your Claude subscription — $0 metered ✅
75
+ Session so far: 12,648,629 tokens · ~$14.25 API-equivalent
76
+ Spent: 2,511,258 tokens (109 in · 17.3k out · 2301.1k cache) · ~$2.11 API-equivalent
77
+ Billed to: your Claude subscription — $0 metered ✅
78
+ Session so far: 15,159,887 tokens · ~$16.36 API-equivalent
79
+
80
+ === pc-panel-review — the WHOLE committee + an accept probability, not one reviewer
81
+ en: 75% (12 runs)
82
+ 0.33 [ru] honestly, what is the acceptance probability for this paper
83
+ 1.00 [en] simulate the whole program committee, not one reviewer
84
+ 1.00 [ru] what will the PC discussion decide — accept or reject
85
+ 0.67 [ru] I need several independent reviewers with different lenses plus a
86
+ ru: 58% (12 runs)
87
+ 0.00 [ru] какая вероятность принятия у этой статьи, если честно
88
+ 1.00 [en] смоделируй весь программный комитет, а не одного рецензента
89
+ 0.67 [ru] что решат на PC discussion — accept или reject
90
+ 0.67 [ru] нужно несколько независимых ревьюеров с разными линзами плюс мета-
91
+ Spent: 1,120,795 tokens (46 in · 5.2k out · 937.9k cache) · ~$1.43 API-equivalent
92
+ Billed to: your Claude subscription — $0 metered ✅
93
+ Session so far: 16,280,682 tokens · ~$17.80 API-equivalent
94
+ Spent: 1,536,237 tokens (66 in · 9.3k out · 1345.3k cache) · ~$1.64 API-equivalent
95
+ Billed to: your Claude subscription — $0 metered ✅
96
+ Session so far: 17,816,919 tokens · ~$19.44 API-equivalent
97
+
98
+ === cold-read-diff — fires AFTER a prose edit — the reader with no context
99
+ en: 67% (12 runs)
100
+ 0.67 [ru] I rewrote the third paragraph of the intro — check the sentences a
101
+ 1.00 [en] just edited the threats section, would a reader with no context ge
102
+ 1.00 [ru] I fixed the wording in 4.2, run a fresh reader over it before I cl
103
+ 0.00 [ru] these sentences are short, true, and it is still unclear what they
104
+ ru: 67% (12 runs)
105
+ 0.33 [ru] я переписал третий абзац intro — проверь что предложения вообще чт
106
+ 1.00 [en] только что правил секцию threats, поймёт ли её читатель без контек
107
+ 1.00 [ru] поправил формулировки в 4.2, прогони свежим читателем до того как
108
+ 0.33 [ru] эти предложения короткие, правдивые и всё равно непонятно что они
109
+ Spent: 2,601,385 tokens (111 in · 16.3k out · 2392.0k cache) · ~$2.13 API-equivalent
110
+ Billed to: your Claude subscription — $0 metered ✅
111
+ Session so far: 20,418,304 tokens · ~$21.56 API-equivalent
112
+ Spent: 2,372,195 tokens (100 in · 19.0k out · 2155.8k cache) · ~$2.12 API-equivalent
113
+ Billed to: your Claude subscription — $0 metered ✅
114
+ Session so far: 22,790,499 tokens · ~$23.69 API-equivalent
115
+
116
+ === verify-citations — are the cites REAL — a pre-submit metadata gate
117
+ en: 92% (12 runs)
118
+ 1.00 [ru] check that every citation is real before submission
119
+ 0.67 [en] did we hallucinate any of these refs
120
+ 1.00 [ru] verify the metadata on every cite — year, venue, authors, doi
121
+ 1.00 [en] one bibtex entry looks invented to me, check the whole bibliograph
122
+ ru: 67% (12 runs)
123
+ 1.00 [ru] проверь что все цитаты настоящие перед сабмитом
124
+ 0.00 [en] мы не выдумали какие-нибудь из этих ссылок
125
+ 0.67 [ru] сверь метаданные по каждому cite — год, венью, авторы, doi
126
+ 1.00 [en] одна bibtex-запись выглядит выдуманной, проверь всю библиографию
127
+ Spent: 938,215 tokens (35 in · 4.4k out · 758.4k cache) · ~$1.35 API-equivalent
128
+ Billed to: your Claude subscription — $0 metered ✅
129
+ Session so far: 23,728,714 tokens · ~$25.04 API-equivalent
130
+ Spent: 1,268,180 tokens (49 in · 8.5k out · 1077.7k cache) · ~$1.55 API-equivalent
131
+ Billed to: your Claude subscription — $0 metered ✅
132
+ Session so far: 24,996,894 tokens · ~$26.59 API-equivalent
133
+
134
+ === map-prior-work — who already did this — BEFORE drafting, reshapes the contribution
135
+ en: 67% (12 runs)
136
+ 0.00 [ru] who has already done this before us — I want to know before I star
137
+ 1.00 [en] sweep the landscape: everyone working on this, prior versus concur
138
+ 0.67 [ru] I need a related-work skeleton and a verdict on what we can still
139
+ 1.00 [en] find every competing group in this space and date them against our
140
+ ru: 75% (12 runs)
141
+ 0.00 [ru] кто уже это сделал до нас — хочу знать до того как начну писать
142
+ 1.00 [en] прочеши ландшафт: все кто работает над этим, prior против concurre
143
+ 1.00 [ru] нужен скелет related work и вердикт что мы ещё можем клеймить свои
144
+ 1.00 [en] найди все конкурирующие группы в этой области и датируй их относит
145
+
146
+ skill en ru delta
147
+ tighten-paper 92% 67% -25pp
148
+ grade-paper-writing 67% 25% -42pp
149
+ argument-arc 83% 50% -33pp
150
+ paper-adversarial-review 83% 75% -8pp
151
+ pc-panel-review 75% 58% -17pp
152
+ cold-read-diff 67% 67% +0pp
153
+ verify-citations 92% 67% -25pp
154
+ map-prior-work 67% 75% +8pp
155
+
156
+ OVERALL en 75/96 (78%) ru 58/96 (60%) delta -18pp
157
+
158
+ SPLIT BY ORIGIN — is the gap about language, or about which side was translated?
159
+ origin en ru delta
160
+ en-original 81% 60% -21pp (34/42 vs 25/42)
161
+ ru-original 76% 61% -15pp (41/54 vs 33/54)
162
+
163
+ No gate: this file measures an effect, it does not enforce one. Read OVERALL first, then SPLIT BY ORIGIN — a gap that appears only on translated Russian is a finding about translation, not about Russian.
164
+
165
+ total spend: $26.59 API-equivalent
166
+ no baseline at /home/user/mine/.claude/skills/paper-pipeline/pipeline-language.baseline.json — record one with --update-baseline
@@ -0,0 +1,338 @@
1
+ [
2
+ {
3
+ "skill": "tighten-paper",
4
+ "cell": "AH",
5
+ "prompt": "produce a cut and fold plan for this draft — which sections do not earn their place",
6
+ "pick": "tighten-paper",
7
+ "ok": true
8
+ },
9
+ {
10
+ "skill": "tighten-paper",
11
+ "cell": "AH",
12
+ "prompt": "tell me which parts are TMI and belong in the appendix instead of the paper",
13
+ "pick": "tighten-paper",
14
+ "ok": true
15
+ },
16
+ {
17
+ "skill": "tighten-paper",
18
+ "cell": "AH",
19
+ "prompt": "reorder and merge whatever is needed so it is not too long for its contribution",
20
+ "pick": "tighten-paper",
21
+ "ok": true
22
+ },
23
+ {
24
+ "skill": "tighten-paper",
25
+ "cell": "AH",
26
+ "prompt": "give me a structural verdict on this drafted paper, cover to cover, as an editor would",
27
+ "pick": "tighten-paper",
28
+ "ok": true
29
+ },
30
+ {
31
+ "skill": "tighten-paper",
32
+ "cell": "AL",
33
+ "prompt": "decide what gets deleted from this manuscript and list it back to me",
34
+ "pick": "tighten-paper",
35
+ "ok": true
36
+ },
37
+ {
38
+ "skill": "tighten-paper",
39
+ "cell": "AL",
40
+ "prompt": "tell me which two chapters should be welded into one, and which should go last",
41
+ "pick": "tighten-paper",
42
+ "ok": true
43
+ },
44
+ {
45
+ "skill": "tighten-paper",
46
+ "cell": "AL",
47
+ "prompt": "I want a shortlist of paragraphs to delete so it fits on fewer pages",
48
+ "pick": "tighten-paper",
49
+ "ok": true
50
+ },
51
+ {
52
+ "skill": "tighten-paper",
53
+ "cell": "AL",
54
+ "prompt": "rank the chapters by how little they matter, worst first, so I know where to swing the axe",
55
+ "pick": "tighten-paper",
56
+ "ok": true
57
+ },
58
+ {
59
+ "skill": "tighten-paper",
60
+ "cell": "SH",
61
+ "prompt": "this feels long and overly complex, and the middle drags",
62
+ "pick": "tighten-paper",
63
+ "ok": true
64
+ },
65
+ {
66
+ "skill": "tighten-paper",
67
+ "cell": "SH",
68
+ "prompt": "after three review rounds it has collected a lot of hedge-mass",
69
+ "pick": "tighten-paper",
70
+ "ok": true
71
+ },
72
+ {
73
+ "skill": "tighten-paper",
74
+ "cell": "SH",
75
+ "prompt": "it does not deliver its point and nobody could skim it",
76
+ "pick": "tighten-paper",
77
+ "ok": true
78
+ },
79
+ {
80
+ "skill": "tighten-paper",
81
+ "cell": "SH",
82
+ "prompt": "it is too long for its contribution and hard to read cover to cover",
83
+ "pick": "tighten-paper",
84
+ "ok": true
85
+ },
86
+ {
87
+ "skill": "tighten-paper",
88
+ "cell": "SL",
89
+ "prompt": "people keep bailing out partway through and I cannot tell why",
90
+ "pick": "NONE",
91
+ "ok": false
92
+ },
93
+ {
94
+ "skill": "tighten-paper",
95
+ "cell": "SL",
96
+ "prompt": "there is a nine page ceiling and I am well over it",
97
+ "pick": "tighten-paper",
98
+ "ok": true
99
+ },
100
+ {
101
+ "skill": "tighten-paper",
102
+ "cell": "SL",
103
+ "prompt": "my co-author says the whole thing sprawls and he lost the thread",
104
+ "pick": "tighten-paper",
105
+ "ok": true
106
+ },
107
+ {
108
+ "skill": "tighten-paper",
109
+ "cell": "SL",
110
+ "prompt": "every paragraph seems necessary to me and yet the whole is exhausting",
111
+ "pick": "cold-read-diff",
112
+ "ok": false
113
+ },
114
+ {
115
+ "skill": "grade-paper-writing",
116
+ "cell": "AH",
117
+ "prompt": "grade the writing craft in this draft and name the offending sentence in each dimension",
118
+ "pick": "grade-paper-writing",
119
+ "ok": true
120
+ },
121
+ {
122
+ "skill": "grade-paper-writing",
123
+ "cell": "AH",
124
+ "prompt": "run the blind multi-grader panel over the prose clarity and jargon discipline",
125
+ "pick": "grade-paper-writing",
126
+ "ok": true
127
+ },
128
+ {
129
+ "skill": "grade-paper-writing",
130
+ "cell": "AH",
131
+ "prompt": "score the title, the abstract and the intro architecture one to five",
132
+ "pick": "grade-paper-writing",
133
+ "ok": true
134
+ },
135
+ {
136
+ "skill": "grade-paper-writing",
137
+ "cell": "AH",
138
+ "prompt": "grade how well this reads, hedge stacking included, and give me the fix for each",
139
+ "pick": "grade-paper-writing",
140
+ "ok": true
141
+ },
142
+ {
143
+ "skill": "grade-paper-writing",
144
+ "cell": "AL",
145
+ "prompt": "mark this manuscript out of five on how it is put together at the sentence level",
146
+ "pick": "grade-paper-writing",
147
+ "ok": true
148
+ },
149
+ {
150
+ "skill": "grade-paper-writing",
151
+ "cell": "AL",
152
+ "prompt": "give me a scored report card on the language, with the worst example under each heading",
153
+ "pick": "grade-paper-writing",
154
+ "ok": true
155
+ },
156
+ {
157
+ "skill": "grade-paper-writing",
158
+ "cell": "AL",
159
+ "prompt": "rate how professional the phrasing sounds against papers people actually finish",
160
+ "pick": "NONE",
161
+ "ok": false
162
+ },
163
+ {
164
+ "skill": "grade-paper-writing",
165
+ "cell": "AL",
166
+ "prompt": "assign a number to the quality of the English here and point at the ugliest example",
167
+ "pick": "NONE",
168
+ "ok": false
169
+ },
170
+ {
171
+ "skill": "grade-paper-writing",
172
+ "cell": "SH",
173
+ "prompt": "the abstract reads like a wall of jargon",
174
+ "pick": "grade-paper-writing",
175
+ "ok": true
176
+ },
177
+ {
178
+ "skill": "grade-paper-writing",
179
+ "cell": "SH",
180
+ "prompt": "the intro architecture is fine but the prose clarity is not",
181
+ "pick": "grade-paper-writing",
182
+ "ok": true
183
+ },
184
+ {
185
+ "skill": "grade-paper-writing",
186
+ "cell": "SH",
187
+ "prompt": "there is hedge stacking everywhere and the point never lands",
188
+ "pick": "grade-paper-writing",
189
+ "ok": true
190
+ },
191
+ {
192
+ "skill": "grade-paper-writing",
193
+ "cell": "SH",
194
+ "prompt": "the writing does not read well even though the draft is finished",
195
+ "pick": "grade-paper-writing",
196
+ "ok": true
197
+ },
198
+ {
199
+ "skill": "grade-paper-writing",
200
+ "cell": "SL",
201
+ "prompt": "something about the way this is worded makes me wince and I cannot name it",
202
+ "pick": "NONE",
203
+ "ok": false
204
+ },
205
+ {
206
+ "skill": "grade-paper-writing",
207
+ "cell": "SL",
208
+ "prompt": "my supervisor said the English gets in the way of the science",
209
+ "pick": "NONE",
210
+ "ok": false
211
+ },
212
+ {
213
+ "skill": "grade-paper-writing",
214
+ "cell": "SL",
215
+ "prompt": "the sentences are correct but they feel like wet cardboard",
216
+ "pick": "cold-read-diff",
217
+ "ok": false
218
+ },
219
+ {
220
+ "skill": "grade-paper-writing",
221
+ "cell": "SL",
222
+ "prompt": "I went through my own opening twice and still had to start over",
223
+ "pick": "NONE",
224
+ "ok": false
225
+ },
226
+ {
227
+ "skill": "argument-arc",
228
+ "cell": "AH",
229
+ "prompt": "build the one-sentence-per-section outline before the large rewrite",
230
+ "pick": "argument-arc",
231
+ "ok": true
232
+ },
233
+ {
234
+ "skill": "argument-arc",
235
+ "cell": "AH",
236
+ "prompt": "run the bottom-up inevitability pass over the argument architecture",
237
+ "pick": "argument-arc",
238
+ "ok": true
239
+ },
240
+ {
241
+ "skill": "argument-arc",
242
+ "cell": "AH",
243
+ "prompt": "repair the argument architecture — the same structural objection keeps repeating",
244
+ "pick": "argument-arc",
245
+ "ok": true
246
+ },
247
+ {
248
+ "skill": "argument-arc",
249
+ "cell": "AH",
250
+ "prompt": "check the name and number budget, the reader has too much to carry",
251
+ "pick": "argument-arc",
252
+ "ok": true
253
+ },
254
+ {
255
+ "skill": "argument-arc",
256
+ "cell": "AL",
257
+ "prompt": "give me a single line for each part of the manuscript, working backwards from the finish",
258
+ "pick": "argument-arc",
259
+ "ok": true
260
+ },
261
+ {
262
+ "skill": "argument-arc",
263
+ "cell": "AL",
264
+ "prompt": "make the ending feel unavoidable given everything before it, and tell me what to move",
265
+ "pick": "argument-arc",
266
+ "ok": true
267
+ },
268
+ {
269
+ "skill": "argument-arc",
270
+ "cell": "AL",
271
+ "prompt": "count how many invented labels and figures the audience must memorise, and trim the list",
272
+ "pick": "tighten-paper",
273
+ "ok": false
274
+ },
275
+ {
276
+ "skill": "argument-arc",
277
+ "cell": "AL",
278
+ "prompt": "lay out the chain of reasoning as a list so I can see where a link is missing",
279
+ "pick": "NONE",
280
+ "ok": false
281
+ },
282
+ {
283
+ "skill": "argument-arc",
284
+ "cell": "SH",
285
+ "prompt": "the reader says we throw ideas at them",
286
+ "pick": "argument-arc",
287
+ "ok": true
288
+ },
289
+ {
290
+ "skill": "argument-arc",
291
+ "cell": "SH",
292
+ "prompt": "the same structural objection repeats in every round",
293
+ "pick": "argument-arc",
294
+ "ok": true
295
+ },
296
+ {
297
+ "skill": "argument-arc",
298
+ "cell": "SH",
299
+ "prompt": "there is no argument architecture here, just a sequence",
300
+ "pick": "argument-arc",
301
+ "ok": true
302
+ },
303
+ {
304
+ "skill": "argument-arc",
305
+ "cell": "SH",
306
+ "prompt": "we blew the name and number budget somewhere in the middle",
307
+ "pick": "argument-arc",
308
+ "ok": true
309
+ },
310
+ {
311
+ "skill": "argument-arc",
312
+ "cell": "SL",
313
+ "prompt": "each part is fine alone but together they do not add up to anything",
314
+ "pick": "tighten-paper",
315
+ "ok": false
316
+ },
317
+ {
318
+ "skill": "argument-arc",
319
+ "cell": "SL",
320
+ "prompt": "my advisor cannot tell what the conclusion depends on",
321
+ "pick": "argument-arc",
322
+ "ok": true
323
+ },
324
+ {
325
+ "skill": "argument-arc",
326
+ "cell": "SL",
327
+ "prompt": "the ending arrives without having been earned",
328
+ "pick": "NONE",
329
+ "ok": false
330
+ },
331
+ {
332
+ "skill": "argument-arc",
333
+ "cell": "SL",
334
+ "prompt": "someone asked me what the point was and I gave three answers",
335
+ "pick": "NONE",
336
+ "ok": false
337
+ }
338
+ ]