paperlint 7.2.0 → 9.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 (474) hide show
  1. package/CLAUDE.md +9 -25
  2. package/CONTRIBUTING.md +5 -4
  3. package/README.md +4 -3
  4. package/dist/adapters/bibtex/index.d.ts +3 -0
  5. package/dist/adapters/bibtex/index.d.ts.map +1 -0
  6. package/dist/adapters/bibtex/index.js +103 -0
  7. package/dist/adapters/bibtex/index.js.map +1 -0
  8. package/dist/adapters/latex/filecontents.d.ts +33 -0
  9. package/dist/adapters/latex/filecontents.d.ts.map +1 -0
  10. package/dist/adapters/latex/filecontents.js +65 -0
  11. package/dist/adapters/latex/filecontents.js.map +1 -0
  12. package/dist/adapters/latex/includes.d.ts +3 -3
  13. package/dist/adapters/latex/includes.d.ts.map +1 -1
  14. package/dist/adapters/latex/includes.js +18 -10
  15. package/dist/adapters/latex/includes.js.map +1 -1
  16. package/dist/adapters/latex/index.d.ts.map +1 -1
  17. package/dist/adapters/latex/index.js +2 -0
  18. package/dist/adapters/latex/index.js.map +1 -1
  19. package/dist/adapters/latex/nodes.d.ts +12 -0
  20. package/dist/adapters/latex/nodes.d.ts.map +1 -1
  21. package/dist/adapters/latex/nodes.js +39 -0
  22. package/dist/adapters/latex/nodes.js.map +1 -1
  23. package/dist/adapters/latex/parse.d.ts +7 -1
  24. package/dist/adapters/latex/parse.d.ts.map +1 -1
  25. package/dist/adapters/latex/parse.js +55 -6
  26. package/dist/adapters/latex/parse.js.map +1 -1
  27. package/dist/adapters/memory/index.d.ts +3 -0
  28. package/dist/adapters/memory/index.d.ts.map +1 -1
  29. package/dist/adapters/memory/index.js +9 -0
  30. package/dist/adapters/memory/index.js.map +1 -1
  31. package/dist/adapters/references/index.d.ts.map +1 -1
  32. package/dist/adapters/references/index.js +27 -24
  33. package/dist/adapters/references/index.js.map +1 -1
  34. package/dist/adapters/sources-record/index.d.ts +9 -0
  35. package/dist/adapters/sources-record/index.d.ts.map +1 -0
  36. package/dist/adapters/sources-record/index.js +68 -0
  37. package/dist/adapters/sources-record/index.js.map +1 -0
  38. package/dist/adapters/tex-output/blg.d.ts +9 -0
  39. package/dist/adapters/tex-output/blg.d.ts.map +1 -0
  40. package/dist/adapters/tex-output/blg.js +20 -0
  41. package/dist/adapters/tex-output/blg.js.map +1 -0
  42. package/dist/adapters/tex-output/fls.d.ts +8 -0
  43. package/dist/adapters/tex-output/fls.d.ts.map +1 -0
  44. package/dist/adapters/tex-output/fls.js +16 -0
  45. package/dist/adapters/tex-output/fls.js.map +1 -0
  46. package/dist/adapters/tex-output/index.d.ts +7 -0
  47. package/dist/adapters/tex-output/index.d.ts.map +1 -0
  48. package/dist/adapters/tex-output/index.js +7 -0
  49. package/dist/adapters/tex-output/index.js.map +1 -0
  50. package/dist/bib-rules.d.ts +47 -0
  51. package/dist/bib-rules.d.ts.map +1 -0
  52. package/dist/bib-rules.js +127 -0
  53. package/dist/bib-rules.js.map +1 -0
  54. package/dist/build.d.ts +29 -1
  55. package/dist/build.d.ts.map +1 -1
  56. package/dist/build.js +41 -30
  57. package/dist/build.js.map +1 -1
  58. package/dist/claim-provenance.d.ts +2 -2
  59. package/dist/cli.d.ts +9 -5
  60. package/dist/cli.d.ts.map +1 -1
  61. package/dist/cli.js +43 -68
  62. package/dist/cli.js.map +1 -1
  63. package/dist/domain/paper-source.d.ts +1 -10
  64. package/dist/domain/paper-source.d.ts.map +1 -1
  65. package/dist/domain/paper-source.js +34 -24
  66. package/dist/domain/paper-source.js.map +1 -1
  67. package/dist/domain/paper-sources.d.ts +72 -0
  68. package/dist/domain/paper-sources.d.ts.map +1 -0
  69. package/dist/domain/paper-sources.js +18 -0
  70. package/dist/domain/paper-sources.js.map +1 -0
  71. package/dist/domain/sources-record.d.ts +102 -0
  72. package/dist/domain/sources-record.d.ts.map +1 -0
  73. package/dist/domain/sources-record.js +38 -0
  74. package/dist/domain/sources-record.js.map +1 -0
  75. package/dist/domain/tex-run.d.ts +25 -0
  76. package/dist/domain/tex-run.d.ts.map +1 -0
  77. package/dist/domain/tex-run.js +79 -0
  78. package/dist/domain/tex-run.js.map +1 -0
  79. package/dist/eslint-rules/latex-language.d.ts.map +1 -1
  80. package/dist/eslint-rules/latex-language.js +10 -13
  81. package/dist/eslint-rules/latex-language.js.map +1 -1
  82. package/dist/eslint-rules/paper-context.d.ts.map +1 -1
  83. package/dist/eslint-rules/paper-context.js +6 -5
  84. package/dist/eslint-rules/paper-context.js.map +1 -1
  85. package/dist/eslint-rules/paper-typography.d.ts +0 -9
  86. package/dist/eslint-rules/paper-typography.d.ts.map +1 -1
  87. package/dist/eslint-rules/paper-typography.js +34 -96
  88. package/dist/eslint-rules/paper-typography.js.map +1 -1
  89. package/dist/eslint-rules/papers.d.ts +1 -3
  90. package/dist/eslint-rules/papers.d.ts.map +1 -1
  91. package/dist/eslint-rules/papers.js +2 -4
  92. package/dist/eslint-rules/papers.js.map +1 -1
  93. package/dist/eslint-rules/tex-build.d.ts.map +1 -1
  94. package/dist/eslint-rules/tex-build.js +8 -25
  95. package/dist/eslint-rules/tex-build.js.map +1 -1
  96. package/dist/init.d.ts +1 -4
  97. package/dist/init.d.ts.map +1 -1
  98. package/dist/init.js +3 -9
  99. package/dist/init.js.map +1 -1
  100. package/dist/latex-log.d.ts +10 -0
  101. package/dist/latex-log.d.ts.map +1 -1
  102. package/dist/latex-log.js +10 -0
  103. package/dist/latex-log.js.map +1 -1
  104. package/dist/latex-loop.d.ts +2 -0
  105. package/dist/latex-loop.d.ts.map +1 -1
  106. package/dist/latex-loop.js.map +1 -1
  107. package/dist/lib/markdown.d.ts +5 -81
  108. package/dist/lib/markdown.d.ts.map +1 -1
  109. package/dist/lib/markdown.js +5 -116
  110. package/dist/lib/markdown.js.map +1 -1
  111. package/dist/lib/paper-config.d.ts.map +1 -1
  112. package/dist/lib/paper-config.js +0 -2
  113. package/dist/lib/paper-config.js.map +1 -1
  114. package/dist/lib/skill-eval-fixture.d.ts +6 -4
  115. package/dist/lib/skill-eval-fixture.d.ts.map +1 -1
  116. package/dist/lib/skill-eval-fixture.js +25 -18
  117. package/dist/lib/skill-eval-fixture.js.map +1 -1
  118. package/dist/new-paper.d.ts +5 -11
  119. package/dist/new-paper.d.ts.map +1 -1
  120. package/dist/new-paper.js +12 -23
  121. package/dist/new-paper.js.map +1 -1
  122. package/dist/package-dirs.d.ts.map +1 -1
  123. package/dist/package-dirs.js +3 -2
  124. package/dist/package-dirs.js.map +1 -1
  125. package/dist/paper-files.d.ts +4 -4
  126. package/dist/paper-includes.d.ts +4 -7
  127. package/dist/paper-includes.d.ts.map +1 -1
  128. package/dist/paper-includes.js +29 -21
  129. package/dist/paper-includes.js.map +1 -1
  130. package/dist/paper-prose.d.ts +17 -0
  131. package/dist/paper-prose.d.ts.map +1 -0
  132. package/dist/paper-prose.js +46 -0
  133. package/dist/paper-prose.js.map +1 -0
  134. package/dist/paper-record.d.ts +25 -0
  135. package/dist/paper-record.d.ts.map +1 -0
  136. package/dist/paper-record.js +39 -0
  137. package/dist/paper-record.js.map +1 -0
  138. package/dist/paper-sources.d.ts +66 -0
  139. package/dist/paper-sources.d.ts.map +1 -0
  140. package/dist/paper-sources.js +92 -0
  141. package/dist/paper-sources.js.map +1 -0
  142. package/dist/ports/bib-reader.d.ts +18 -0
  143. package/dist/ports/bib-reader.d.ts.map +1 -0
  144. package/dist/ports/bib-reader.js +2 -0
  145. package/dist/ports/bib-reader.js.map +1 -0
  146. package/dist/ports/check-references.d.ts +9 -4
  147. package/dist/ports/check-references.d.ts.map +1 -1
  148. package/dist/ports/latex.d.ts +15 -0
  149. package/dist/ports/latex.d.ts.map +1 -1
  150. package/dist/ports/sources-codec.d.ts +11 -0
  151. package/dist/ports/sources-codec.d.ts.map +1 -0
  152. package/dist/ports/sources-codec.js +2 -0
  153. package/dist/ports/sources-codec.js.map +1 -0
  154. package/dist/ports/tex-output.d.ts +17 -0
  155. package/dist/ports/tex-output.d.ts.map +1 -0
  156. package/dist/ports/tex-output.js +2 -0
  157. package/dist/ports/tex-output.js.map +1 -0
  158. package/dist/recorded-bibliography.d.ts +89 -0
  159. package/dist/recorded-bibliography.d.ts.map +1 -0
  160. package/dist/recorded-bibliography.js +136 -0
  161. package/dist/recorded-bibliography.js.map +1 -0
  162. package/dist/reference-rules.d.ts +5 -5
  163. package/dist/reference-rules.d.ts.map +1 -1
  164. package/dist/reference-rules.js +150 -77
  165. package/dist/reference-rules.js.map +1 -1
  166. package/dist/references.d.ts +71 -16
  167. package/dist/references.d.ts.map +1 -1
  168. package/dist/references.js +110 -26
  169. package/dist/references.js.map +1 -1
  170. package/dist/register-bands.d.ts +3 -3
  171. package/dist/register-bands.d.ts.map +1 -1
  172. package/dist/register-bands.js.map +1 -1
  173. package/dist/register.d.ts +2 -2
  174. package/dist/sources-record.d.ts +38 -0
  175. package/dist/sources-record.d.ts.map +1 -0
  176. package/dist/sources-record.js +123 -0
  177. package/dist/sources-record.js.map +1 -0
  178. package/dist/sources-rules.d.ts +44 -0
  179. package/dist/sources-rules.d.ts.map +1 -0
  180. package/dist/sources-rules.js +76 -0
  181. package/dist/sources-rules.js.map +1 -0
  182. package/dist/structure.d.ts.map +1 -1
  183. package/dist/structure.js +4 -3
  184. package/dist/structure.js.map +1 -1
  185. package/dist/tex-paper.d.ts +10 -15
  186. package/dist/tex-paper.d.ts.map +1 -1
  187. package/dist/tex-paper.js +24 -40
  188. package/dist/tex-paper.js.map +1 -1
  189. package/dist/tex-venue-rules.d.ts +3 -3
  190. package/dist/tex-venue-rules.d.ts.map +1 -1
  191. package/dist/tex-venue-rules.js.map +1 -1
  192. package/dist/types.d.ts +0 -2
  193. package/dist/types.d.ts.map +1 -1
  194. package/docs/configuration.md +18 -12
  195. package/docs/design/paper-sources.md +197 -0
  196. package/docs/e2e.md +4 -6
  197. package/docs/package-shape-options.md +1 -1
  198. package/docs/prior-art/paper-folder-scaffolding.md +24 -29
  199. package/docs/references.md +34 -8
  200. package/docs/rules/bib/reachable-entry.md +64 -0
  201. package/docs/rules/paper/sources-fresh.md +81 -0
  202. package/docs/rules/tex/claim-provenance.md +0 -1
  203. package/docs/rules.md +62 -61
  204. package/eslint-rules/latex-language.harness.mjs +3 -3
  205. package/eslint-rules/latex-language.ts +10 -13
  206. package/eslint-rules/paper-context.ts +6 -5
  207. package/eslint-rules/paper-typography.test.mjs +29 -157
  208. package/eslint-rules/paper-typography.ts +35 -104
  209. package/eslint-rules/papers.harness.mjs +1 -1
  210. package/eslint-rules/papers.ts +2 -4
  211. package/eslint-rules/tex-build.harness.mjs +2 -2
  212. package/eslint-rules/tex-build.ts +8 -25
  213. package/eslint.config.mjs +22 -1
  214. package/fixtures/build-e2e/aidc/paper.tex +1 -1
  215. package/fixtures/build-e2e/anon-ack/paper.tex +1 -1
  216. package/fixtures/build-e2e/anon-author/paper.tex +1 -1
  217. package/fixtures/build-e2e/anon-bib/paper.tex +1 -1
  218. package/fixtures/build-e2e/anon-href/paper.tex +1 -1
  219. package/fixtures/build-e2e/anon-macro/paper.tex +1 -1
  220. package/fixtures/build-e2e/anon-pdfauthor/paper.tex +1 -1
  221. package/fixtures/paper-sources/p1/paper.tex +30 -0
  222. package/fixtures/paper-sources/p1/refs.bib +6 -0
  223. package/fixtures/paper-sources/p1/sections/dead.tex +6 -0
  224. package/fixtures/paper-sources/p1/sections/intro.tex +7 -0
  225. package/fixtures/paper-sources/p1/sections/parked.tex +6 -0
  226. package/fixtures/paper-sources/p1/tex-truth.json +37 -0
  227. package/fixtures/paper-sources/p1/versions/2026-01-01-review.tex +4 -0
  228. package/fixtures/paper-sources/v1-stale/paper.tex +14 -0
  229. package/fixtures/paper-sources/v1-stale/refs.bib +6 -0
  230. package/fixtures/paper-sources/v1-stale/tex-truth.json +32 -0
  231. package/fixtures/paper-sources/v10-ifthenelse/anon.bib +1 -0
  232. package/fixtures/paper-sources/v10-ifthenelse/paper.tex +9 -0
  233. package/fixtures/paper-sources/v10-ifthenelse/real.bib +1 -0
  234. package/fixtures/paper-sources/v10-ifthenelse/tex-truth.json +28 -0
  235. package/fixtures/paper-sources/v11-two-blocks/paper.tex +12 -0
  236. package/fixtures/paper-sources/v11-two-blocks/tex-truth.json +30 -0
  237. package/fixtures/paper-sources/v13-percent-text/paper.tex +6 -0
  238. package/fixtures/paper-sources/v13-percent-text/refs.bib +3 -0
  239. package/fixtures/paper-sources/v13-percent-text/tex-truth.json +30 -0
  240. package/fixtures/paper-sources/v15-after-end/paper.tex +6 -0
  241. package/fixtures/paper-sources/v15-after-end/refs.bib +1 -0
  242. package/fixtures/paper-sources/v15-after-end/tex-truth.json +17 -0
  243. package/fixtures/paper-sources/v16-included-block/bibblock.tex +3 -0
  244. package/fixtures/paper-sources/v16-included-block/paper.tex +7 -0
  245. package/fixtures/paper-sources/v16-included-block/refs.bib +1 -0
  246. package/fixtures/paper-sources/v16-included-block/tex-truth.json +35 -0
  247. package/fixtures/paper-sources/v17-include-order/bibsetup.tex +1 -0
  248. package/fixtures/paper-sources/v17-include-order/first.bib +1 -0
  249. package/fixtures/paper-sources/v17-include-order/later.bib +1 -0
  250. package/fixtures/paper-sources/v17-include-order/paper.tex +7 -0
  251. package/fixtures/paper-sources/v17-include-order/tex-truth.json +40 -0
  252. package/fixtures/paper-sources/v2-overwrite/paper.tex +14 -0
  253. package/fixtures/paper-sources/v2-overwrite/refs.bib +6 -0
  254. package/fixtures/paper-sources/v2-overwrite/tex-truth.json +30 -0
  255. package/fixtures/paper-sources/v22-parked-thebibliography/paper.tex +7 -0
  256. package/fixtures/paper-sources/v22-parked-thebibliography/tex-truth.json +17 -0
  257. package/fixtures/paper-sources/v23-parked-include/old.bib +1 -0
  258. package/fixtures/paper-sources/v23-parked-include/paper.tex +7 -0
  259. package/fixtures/paper-sources/v23-parked-include/parked.tex +1 -0
  260. package/fixtures/paper-sources/v23-parked-include/refs.bib +1 -0
  261. package/fixtures/paper-sources/v23-parked-include/tex-truth.json +28 -0
  262. package/fixtures/paper-sources/v24-quoted-fields/paper.tex +6 -0
  263. package/fixtures/paper-sources/v24-quoted-fields/refs.bib +5 -0
  264. package/fixtures/paper-sources/v24-quoted-fields/tex-truth.json +32 -0
  265. package/fixtures/paper-sources/v25-string-differs/paper.tex +10 -0
  266. package/fixtures/paper-sources/v25-string-differs/refs.bib +2 -0
  267. package/fixtures/paper-sources/v25-string-differs/tex-truth.json +32 -0
  268. package/fixtures/paper-sources/v26-comment-in-names/one.bib +1 -0
  269. package/fixtures/paper-sources/v26-comment-in-names/paper.tex +7 -0
  270. package/fixtures/paper-sources/v26-comment-in-names/tex-truth.json +32 -0
  271. package/fixtures/paper-sources/v26-comment-in-names/two.bib +1 -0
  272. package/fixtures/paper-sources/v27-shared-string/abbreviations.bib +2 -0
  273. package/fixtures/paper-sources/v27-shared-string/paper.tex +6 -0
  274. package/fixtures/paper-sources/v27-shared-string/references.bib +6 -0
  275. package/fixtures/paper-sources/v27-shared-string/tex-truth.json +31 -0
  276. package/fixtures/paper-sources/v28-shared-string-block/abbreviations.bib +2 -0
  277. package/fixtures/paper-sources/v28-shared-string-block/paper.tex +14 -0
  278. package/fixtures/paper-sources/v28-shared-string-block/tex-truth.json +33 -0
  279. package/fixtures/paper-sources/v29-generated-input/paper.tex +9 -0
  280. package/fixtures/paper-sources/v29-generated-input/tex-truth.json +24 -0
  281. package/fixtures/paper-sources/v3-declared/paper.bib +6 -0
  282. package/fixtures/paper-sources/v3-declared/paper.tex +6 -0
  283. package/fixtures/paper-sources/v3-declared/tex-truth.json +28 -0
  284. package/fixtures/paper-sources/v30-name-next-line/paper.tex +14 -0
  285. package/fixtures/paper-sources/v30-name-next-line/tex-truth.json +30 -0
  286. package/fixtures/paper-sources/v4-commented/paper.tex +14 -0
  287. package/fixtures/paper-sources/v4-commented/refs.bib +6 -0
  288. package/fixtures/paper-sources/v4-commented/tex-truth.json +28 -0
  289. package/fixtures/paper-sources/v5-percent-entry/paper.tex +20 -0
  290. package/fixtures/paper-sources/v5-percent-entry/tex-truth.json +37 -0
  291. package/fixtures/paper-sources/v6-unclosed/paper.tex +6 -0
  292. package/fixtures/paper-sources/v6-unclosed/refs.bib +5 -0
  293. package/fixtures/paper-sources/v6-unclosed/tex-truth.json +37 -0
  294. package/fixtures/paper-sources/v8-jobname/paper.tex +9 -0
  295. package/fixtures/paper-sources/v8-jobname/tex-truth.json +30 -0
  296. package/fixtures/paper-sources/v9-two-bibliographies/one.bib +1 -0
  297. package/fixtures/paper-sources/v9-two-bibliographies/paper.tex +7 -0
  298. package/fixtures/paper-sources/v9-two-bibliographies/tex-truth.json +35 -0
  299. package/fixtures/paper-sources/v9-two-bibliographies/two.bib +1 -0
  300. package/fixtures/paper-typography/clean-paper/paper.tex +1 -1
  301. package/fixtures/paper-typography/messy-paper/paper.tex +1 -1
  302. package/hooks/hooks.harness.ts +15 -15
  303. package/hooks/paper-edit-guard.hook.mjs +5 -8
  304. package/hooks/paper-edit-guard.test.ts +12 -3
  305. package/hooks/paper-skills-nudge.hook.mjs +2 -3
  306. package/hooks/paper-skills-nudge.test.ts +13 -3
  307. package/hooks/paper-status-gates.hook.mjs +2 -2
  308. package/hooks/paper-status-gates.test.ts +14 -2
  309. package/lib/markdown.test.mjs +5 -60
  310. package/lib/markdown.ts +9 -136
  311. package/lib/paper-config.ts +0 -2
  312. package/lib/skill-checks.test.mjs +4 -1
  313. package/lib/skill-eval-fixture.ts +25 -18
  314. package/package.json +2 -12
  315. package/presets/realm.jsonc +1 -1
  316. package/scripts/check.test.ts +23 -1
  317. package/scripts/check.ts +7 -3
  318. package/scripts/coverage-config.test.ts +19 -10
  319. package/scripts/harness-api.frozen.json +0 -5
  320. package/scripts/layer-legacy-frozen.test.ts +41 -2
  321. package/scripts/layer-legacy-frozen.ts +31 -2
  322. package/skills/cold-read-diff/SKILL.md +3 -3
  323. package/skills/cold-read-diff/SKILL.md.spec.ts +2 -2
  324. package/skills/grade-paper-writing/SKILL.md +15 -22
  325. package/skills/grade-paper-writing/SKILL.md.spec.ts +14 -21
  326. package/skills/grade-paper-writing/__snapshots__/prose-lint.test.ts.snap +40 -26
  327. package/skills/grade-paper-writing/prose-lint.mjs +117 -278
  328. package/skills/grade-paper-writing/prose-lint.test.ts +230 -79
  329. package/skills/paper-adversarial-review/SKILL.md +2 -2
  330. package/skills/paper-adversarial-review/SKILL.md.spec.ts +1 -1
  331. package/skills/paper-pipeline/SKILL.md +9 -12
  332. package/skills/paper-pipeline/SKILL.md.spec.ts +8 -11
  333. package/skills/paper-pipeline/description-language.eval.mjs +25 -15
  334. package/skills/paper-pipeline/framing-vs-vocabulary.eval.mjs +25 -15
  335. package/skills/paper-pipeline/grade-paper-writing-ablation.eval.mjs +25 -15
  336. package/skills/paper-pipeline/pipeline-firing.eval.mjs +27 -16
  337. package/skills/paper-pipeline/pipeline-language.eval.mjs +25 -15
  338. package/skills/paper-pipeline/references/acceptance-gate.md +16 -20
  339. package/skills/paper-pipeline/references/artifact-checklist.md +4 -5
  340. package/skills/paper-pipeline/references/pipeline-status-template.md +1 -1
  341. package/skills/paper-pipeline/scripts/README.md +0 -4
  342. package/skills/paper-pipeline/scripts/extract-ref-facts.harness.mjs +91 -105
  343. package/skills/paper-pipeline/scripts/extract-ref-facts.mjs +85 -241
  344. package/skills/paper-pipeline/scripts/extract-ref-facts.test.mjs +166 -153
  345. package/skills/paper-pipeline/scripts/generated-code.harness.mjs +3 -3
  346. package/skills/paper-status/SKILL.md +2 -2
  347. package/skills/paper-status/SKILL.md.spec.ts +1 -1
  348. package/skills/render-paper/SKILL.md +2 -2
  349. package/skills/render-paper/SKILL.md.spec.ts +1 -1
  350. package/skills/render-paper/extract-pdf-facts.mjs +2 -2
  351. package/skills/tighten-paper/SKILL.md +29 -42
  352. package/skills/tighten-paper/SKILL.md.spec.ts +28 -41
  353. package/skills/verify-citations/SKILL.md +7 -4
  354. package/skills/verify-citations/SKILL.md.spec.ts +6 -3
  355. package/skills/verify-citations/scripts/bib-authors.check.test.mjs +17 -32
  356. package/skills/verify-citations/scripts/bib-authors.cli.test.ts +138 -43
  357. package/skills/verify-citations/scripts/bib-authors.d.mts +22 -2
  358. package/skills/verify-citations/scripts/bib-authors.mjs +54 -193
  359. package/skills/verify-citations/scripts/bib-authors.test.mjs +1 -44
  360. package/skills/verify-citations/scripts/verify-cites.cli.test.ts +16 -0
  361. package/skills/verify-citations/scripts/verify-cites.d.mts +19 -3
  362. package/skills/verify-citations/scripts/verify-cites.mjs +42 -108
  363. package/skills/verify-citations/scripts/verify-cites.test.mjs +23 -36
  364. package/src/adapters/bibtex/index.test.ts +163 -0
  365. package/src/adapters/bibtex/index.ts +155 -0
  366. package/src/adapters/latex/filecontents.ts +114 -0
  367. package/src/adapters/latex/includes.ts +18 -10
  368. package/src/adapters/latex/index.test.ts +73 -0
  369. package/src/adapters/latex/index.ts +2 -0
  370. package/src/adapters/latex/nodes.ts +64 -0
  371. package/src/adapters/latex/parse.test.ts +38 -0
  372. package/src/adapters/latex/parse.ts +67 -6
  373. package/src/adapters/memory/index.ts +17 -0
  374. package/src/adapters/references/index.test.ts +75 -21
  375. package/src/adapters/references/index.ts +37 -32
  376. package/src/adapters/sources-record/index.test.ts +87 -0
  377. package/src/adapters/sources-record/index.ts +82 -0
  378. package/src/adapters/tex-output/blg.ts +27 -0
  379. package/src/adapters/tex-output/fls.ts +24 -0
  380. package/src/adapters/tex-output/index.test.ts +171 -0
  381. package/src/adapters/tex-output/index.ts +12 -0
  382. package/src/bib-rules.test.ts +356 -0
  383. package/src/bib-rules.ts +228 -0
  384. package/src/bibliography-at.test.ts +286 -0
  385. package/src/build.harness.mjs +2 -2
  386. package/src/build.test.ts +211 -1
  387. package/src/build.ts +101 -41
  388. package/src/claim-provenance.test.ts +33 -7
  389. package/src/claim-provenance.ts +2 -2
  390. package/src/cli.harness.mjs +46 -56
  391. package/src/cli.test.ts +44 -48
  392. package/src/cli.ts +51 -82
  393. package/src/domain/paper-source.test.ts +58 -20
  394. package/src/domain/paper-source.ts +38 -42
  395. package/src/domain/paper-sources.ts +94 -0
  396. package/src/domain/sources-record.test.ts +71 -0
  397. package/src/domain/sources-record.ts +136 -0
  398. package/src/domain/tex-run.test.ts +228 -0
  399. package/src/domain/tex-run.ts +139 -0
  400. package/src/folder-venue-rule.test.ts +1 -1
  401. package/src/heading-case.test.ts +24 -10
  402. package/src/init.test.ts +6 -7
  403. package/src/init.ts +3 -22
  404. package/src/latex-log.ts +20 -0
  405. package/src/latex-loop.harness.ts +1 -0
  406. package/src/latex-loop.ts +2 -0
  407. package/src/lint-fix.test.ts +10 -4
  408. package/src/linted-set.test.ts +9 -1
  409. package/src/new-paper.harness.mjs +12 -30
  410. package/src/new-paper.test.ts +15 -11
  411. package/src/new-paper.ts +11 -30
  412. package/src/package-dirs.ts +3 -2
  413. package/src/paper-files.test.ts +5 -4
  414. package/src/paper-files.ts +4 -4
  415. package/src/paper-includes.test.ts +157 -38
  416. package/src/paper-includes.ts +39 -35
  417. package/src/paper-prose.test.ts +78 -0
  418. package/src/paper-prose.ts +67 -0
  419. package/src/paper-record.test.ts +173 -0
  420. package/src/paper-record.ts +66 -0
  421. package/src/paper-settings-commands.test.ts +5 -2
  422. package/src/paper-sources.ts +151 -0
  423. package/src/parse-args.test.ts +0 -1
  424. package/src/ports/bib-reader.ts +27 -0
  425. package/src/ports/check-references.ts +7 -3
  426. package/src/ports/latex.ts +19 -0
  427. package/src/ports/sources-codec.ts +11 -0
  428. package/src/ports/tex-output.ts +17 -0
  429. package/src/recorded-bibliography.ts +297 -0
  430. package/src/reference-rules.ts +217 -104
  431. package/src/references.test.ts +520 -177
  432. package/src/references.ts +185 -37
  433. package/src/register-bands.test.ts +5 -1
  434. package/src/register-bands.ts +3 -5
  435. package/src/register.test.ts +6 -1
  436. package/src/register.ts +2 -2
  437. package/src/rule-cases.test.ts +68 -12
  438. package/src/rule-docs.test.ts +0 -1
  439. package/src/sources-record.test.ts +308 -0
  440. package/src/sources-record.ts +231 -0
  441. package/src/sources-rules.test.ts +152 -0
  442. package/src/sources-rules.ts +117 -0
  443. package/src/structure.harness.ts +5 -11
  444. package/src/structure.ts +4 -3
  445. package/src/tex-paper.test.ts +148 -78
  446. package/src/tex-paper.ts +31 -61
  447. package/src/tex-venue-rules.test.ts +36 -8
  448. package/src/tex-venue-rules.ts +3 -5
  449. package/src/types.ts +0 -2
  450. package/dist/eslint-rules/bib-reachable-entry.d.ts +0 -22
  451. package/dist/eslint-rules/bib-reachable-entry.d.ts.map +0 -1
  452. package/dist/eslint-rules/bib-reachable-entry.js +0 -75
  453. package/dist/eslint-rules/bib-reachable-entry.js.map +0 -1
  454. package/eslint-rules/bib-reachable-entry.ts +0 -76
  455. package/fixtures/real-markdown-paper/baseline.json +0 -22
  456. package/fixtures/real-markdown-paper/baseline.ts +0 -70
  457. package/skills/paper-pipeline/PIPELINE-MAP.md +0 -381
  458. package/skills/paper-pipeline/pipeline-firing.baseline.json +0 -270
  459. package/skills/paper-pipeline/references/sweep-2026-08-09-ideal-pipeline.md +0 -585
  460. package/skills/paper-pipeline/scripts/artifact-coverage.harness.mjs +0 -492
  461. package/skills/paper-pipeline/scripts/artifact-coverage.mjs +0 -397
  462. package/skills/paper-pipeline/scripts/artifact-coverage.test.ts +0 -86
  463. package/skills/paper-pipeline/scripts/check-provenance.mjs +0 -184
  464. package/skills/paper-pipeline/scripts/population-map.harness.mjs +0 -135
  465. package/skills/paper-pipeline/scripts/population-map.mjs +0 -188
  466. package/skills/paper-pipeline/scripts/population-map.test.mjs +0 -154
  467. package/skills/paper-pipeline/scripts/provenance.harness.mjs +0 -266
  468. package/skills/paper-pipeline/scripts/round-diff.harness.ts +0 -907
  469. package/skills/paper-pipeline/scripts/round-diff.mjs +0 -583
  470. package/skills/paper-pipeline/scripts/round-diff.test.mjs +0 -159
  471. package/skills/tighten-paper/__snapshots__/structure.test.ts.snap +0 -133
  472. package/skills/tighten-paper/structure.mjs +0 -364
  473. package/skills/tighten-paper/structure.test.ts +0 -117
  474. package/templates/paper/paper.md +0 -4
@@ -1,7 +1,7 @@
1
1
  % C: a self-citation: the name only in a .bib author field, printed by IEEEtran.bst as "A. Example".
2
2
  % The declared identity is invented: "Ada Example", handle "adaexample" (paperlint.json).
3
3
  \documentclass[conference,compsoc]{IEEEtran}
4
- \begin{filecontents*}{refs.bib}
4
+ \begin{filecontents*}[overwrite]{refs.bib}
5
5
  @article{knuth84,
6
6
  title = {Literate Programming},
7
7
  author = {Knuth, Donald E.},
@@ -2,7 +2,7 @@
2
2
  % The declared identity is invented: "Ada Example", handle "adaexample" (paperlint.json).
3
3
  \documentclass[conference,compsoc]{IEEEtran}
4
4
  \usepackage{hyperref}
5
- \begin{filecontents*}{refs.bib}
5
+ \begin{filecontents*}[overwrite]{refs.bib}
6
6
  @article{knuth84,
7
7
  title = {Literate Programming},
8
8
  author = {Knuth, Donald E.},
@@ -2,7 +2,7 @@
2
2
  % The declared identity is invented: "Ada Example", handle "adaexample" (paperlint.json).
3
3
  \documentclass[conference,compsoc]{IEEEtran}
4
4
  \newcommand{\me}{Ada Example}
5
- \begin{filecontents*}{refs.bib}
5
+ \begin{filecontents*}[overwrite]{refs.bib}
6
6
  @article{knuth84,
7
7
  title = {Literate Programming},
8
8
  author = {Knuth, Donald E.},
@@ -3,7 +3,7 @@
3
3
  \documentclass[conference,compsoc]{IEEEtran}
4
4
  \usepackage{hyperref}
5
5
  \hypersetup{pdfauthor={Ada Example}}
6
- \begin{filecontents*}{refs.bib}
6
+ \begin{filecontents*}[overwrite]{refs.bib}
7
7
  @article{knuth84,
8
8
  title = {Literate Programming},
9
9
  author = {Knuth, Donald E.},
@@ -0,0 +1,30 @@
1
+ \documentclass{article}
2
+ \begin{filecontents*}{refs.bib}
3
+ @misc{inline2024,
4
+ title = {The Inline Entry},
5
+ author = {Doe, Jane},
6
+ year = {2024},
7
+ url = {https://example.org/inline}
8
+ }
9
+ \end{filecontents*}
10
+ \begin{document}
11
+ \section{Introduction}
12
+ We cite the inline entry~\cite{inline2024} and the stale one~\cite{stale2020}.
13
+ % We cite~\cite{commented2020}. The harness will be released at camera-ready.
14
+ \input{sections/intro}
15
+ % \input{sections/dead}
16
+ \iffalse
17
+ \input{sections/parked}
18
+ \begin{figure}[t]
19
+ \caption{Parked caption this sentence keeps going with ordinary words so that it reaches the length a long caption has in a real paper and then it keeps going a little longer still until the count is right this sentence keeps going with ordinary words so that it reaches the length a long caption has in a real.}
20
+ \end{figure}
21
+ The harness will be released at camera-ready.
22
+ \fi
23
+ \begin{figure}[t]
24
+ \centering
25
+ \fbox{x}
26
+ \caption[Short]{Optional-arg caption this sentence keeps going with ordinary words so that it reaches the length a long caption has in a real paper and then it keeps going a little longer still until the count is right this sentence keeps going with ordinary words so that it reaches the length a long caption has in a real.}
27
+ \end{figure}
28
+ \bibliographystyle{plain}
29
+ \bibliography{refs}
30
+ \end{document}
@@ -0,0 +1,6 @@
1
+ @misc{stale2020,
2
+ title = {The Stale Entry},
3
+ author = {Roe, Rich},
4
+ year = {2020},
5
+ url = {https://example.org/stale}
6
+ }
@@ -0,0 +1,6 @@
1
+ \section{Dead section}
2
+ \begin{figure}[t]
3
+ \centering
4
+ \fbox{z}
5
+ \caption{Dead caption this sentence keeps going with ordinary words so that it reaches the length a long caption has in a real paper and then it keeps going a little longer still until the count is right this sentence keeps going with ordinary words so that it reaches the length a long caption has in a real.}
6
+ \end{figure}
@@ -0,0 +1,7 @@
1
+ \section{Results}
2
+ We release the harness with this paper. It cuts the cost by 42\% on the benchmark.
3
+ \begin{figure}[t]
4
+ \centering
5
+ \fbox{y}
6
+ \caption{Included caption this sentence keeps going with ordinary words so that it reaches the length a long caption has in a real paper and then it keeps going a little longer still until the count is right this sentence keeps going with ordinary words so that it reaches the length a long caption has in a real.}
7
+ \end{figure}
@@ -0,0 +1,6 @@
1
+ \section{Parked section}
2
+ \begin{figure}[t]
3
+ \centering
4
+ \fbox{z}
5
+ \caption{Parked caption this sentence keeps going with ordinary words so that it reaches the length a long caption has in a real paper and then it keeps going a little longer still until the count is right this sentence keeps going with ordinary words so that it reaches the length a long caption has in a real.}
6
+ \end{figure}
@@ -0,0 +1,37 @@
1
+ {
2
+ "schema": 1,
3
+ "inputs": [
4
+ {
5
+ "path": "paper.tex",
6
+ "role": "body"
7
+ },
8
+ {
9
+ "path": "refs.bib",
10
+ "role": "preamble"
11
+ },
12
+ {
13
+ "path": "sections/intro.tex",
14
+ "role": "body"
15
+ }
16
+ ],
17
+ "written": [],
18
+ "bibdata": [
19
+ "refs"
20
+ ],
21
+ "bibtex": {
22
+ "ran": true,
23
+ "databases": [
24
+ "refs.bib"
25
+ ],
26
+ "keys": [
27
+ "stale2020"
28
+ ],
29
+ "exit": 0,
30
+ "errors": []
31
+ },
32
+ "sha256": {
33
+ "paper.tex": "52ab53ff01ae6dee061f4f674764dc5f5e38f8f6710a3b1c418b1bf07cb46196",
34
+ "refs.bib": "7a720777755f3dd727c2428f66f06d5f818f367e41fe4c47543aa9f55adfebb4",
35
+ "sections/intro.tex": "bf7cdcd18d243940cc13a9a9281b7a61446a693f3a49fbd551a69f8a87a98f89"
36
+ }
37
+ }
@@ -0,0 +1,4 @@
1
+ \documentclass{article}
2
+ \begin{document}
3
+ A frozen snapshot of the paper as it was sent for review.
4
+ \end{document}
@@ -0,0 +1,14 @@
1
+ \documentclass{article}
2
+ \begin{filecontents*}{refs.bib}
3
+ @misc{inline2024,
4
+ title = {The Inline Entry},
5
+ author = {Doe, Jane},
6
+ year = {2024},
7
+ url = {https://example.org/inline}
8
+ }
9
+ \end{filecontents*}
10
+ \begin{document}
11
+ Text that cites~\cite{inline2024} and~\cite{stale2020}.
12
+ \bibliographystyle{plain}
13
+ \bibliography{refs}
14
+ \end{document}
@@ -0,0 +1,6 @@
1
+ @misc{stale2020,
2
+ title = {The Stale Entry},
3
+ author = {Roe, Rich},
4
+ year = {2020},
5
+ url = {https://example.org/stale}
6
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "schema": 1,
3
+ "inputs": [
4
+ {
5
+ "path": "paper.tex",
6
+ "role": "body"
7
+ },
8
+ {
9
+ "path": "refs.bib",
10
+ "role": "preamble"
11
+ }
12
+ ],
13
+ "written": [],
14
+ "bibdata": [
15
+ "refs"
16
+ ],
17
+ "bibtex": {
18
+ "ran": true,
19
+ "databases": [
20
+ "refs.bib"
21
+ ],
22
+ "keys": [
23
+ "stale2020"
24
+ ],
25
+ "exit": 0,
26
+ "errors": []
27
+ },
28
+ "sha256": {
29
+ "paper.tex": "54f0abc51bdc3df728907c7d4bcc90af43b0e3678d6e2ab1fa4c817a2c20f29d",
30
+ "refs.bib": "7a720777755f3dd727c2428f66f06d5f818f367e41fe4c47543aa9f55adfebb4"
31
+ }
32
+ }
@@ -0,0 +1 @@
1
+ @misc{anonkey, title={Anon}, author={A, B}, year={2020}}
@@ -0,0 +1,9 @@
1
+ \documentclass{article}
2
+ \usepackage{ifthen}
3
+ \newboolean{anon}
4
+ \setboolean{anon}{true}
5
+ \begin{document}
6
+ \nocite{*}
7
+ \bibliographystyle{plain}
8
+ \ifthenelse{\boolean{anon}}{\bibliography{anon}}{\bibliography{real}}
9
+ \end{document}
@@ -0,0 +1 @@
1
+ @misc{realkey, title={Real}, author={A, B}, year={2020}}
@@ -0,0 +1,28 @@
1
+ {
2
+ "schema": 1,
3
+ "inputs": [
4
+ {
5
+ "path": "paper.tex",
6
+ "role": "body"
7
+ }
8
+ ],
9
+ "written": [],
10
+ "bibdata": [
11
+ "anon"
12
+ ],
13
+ "bibtex": {
14
+ "ran": true,
15
+ "databases": [
16
+ "anon.bib"
17
+ ],
18
+ "keys": [
19
+ "anonkey"
20
+ ],
21
+ "exit": 0,
22
+ "errors": []
23
+ },
24
+ "sha256": {
25
+ "paper.tex": "33fd7452738f9968e48e6f454b21338a79c6d236597bf2be0e8e128db1452aad",
26
+ "anon.bib": "e56856cc2aa71a1277cdee0b941843de7e64216a47690d62850ca657835232d4"
27
+ }
28
+ }
@@ -0,0 +1,12 @@
1
+ \documentclass{article}
2
+ \begin{filecontents*}{refs.bib}
3
+ @misc{first, title={First}, author={A, B}, year={2020}}
4
+ \end{filecontents*}
5
+ \begin{filecontents*}[overwrite]{refs.bib}
6
+ @misc{second, title={Second}, author={A, B}, year={2020}}
7
+ \end{filecontents*}
8
+ \begin{document}
9
+ \nocite{*}
10
+ \bibliographystyle{plain}
11
+ \bibliography{refs}
12
+ \end{document}
@@ -0,0 +1,30 @@
1
+ {
2
+ "schema": 1,
3
+ "inputs": [
4
+ {
5
+ "path": "paper.tex",
6
+ "role": "body"
7
+ }
8
+ ],
9
+ "written": [
10
+ "refs.bib"
11
+ ],
12
+ "bibdata": [
13
+ "refs"
14
+ ],
15
+ "bibtex": {
16
+ "ran": true,
17
+ "databases": [
18
+ "refs.bib"
19
+ ],
20
+ "keys": [
21
+ "second"
22
+ ],
23
+ "exit": 0,
24
+ "errors": []
25
+ },
26
+ "sha256": {
27
+ "paper.tex": "acc16c14b42b3dae2b5d3423df50e8a278f36edb491c0968c71f0f8a51e7e035",
28
+ "refs.bib": "471a01de99336a938d152648fe0b104427229317fa3e3be092bd9dd2a0fe1e8e"
29
+ }
30
+ }
@@ -0,0 +1,6 @@
1
+ \documentclass{article}
2
+ \begin{document}
3
+ \nocite{*}
4
+ \bibliographystyle{plain}
5
+ \bibliography{refs}
6
+ \end{document}
@@ -0,0 +1,3 @@
1
+ % see @misc{pt1, title={Behind a note}, author={A, B}, year={2020}}
2
+ @comment{ @misc{k2inComment, title={Inside comment}, author={A, B}, year={2020}} }
3
+ @misc{ok1, title={Ok}, author={A, B}, year={2020}, url={https://e.org/ok}}
@@ -0,0 +1,30 @@
1
+ {
2
+ "schema": 1,
3
+ "inputs": [
4
+ {
5
+ "path": "paper.tex",
6
+ "role": "body"
7
+ }
8
+ ],
9
+ "written": [],
10
+ "bibdata": [
11
+ "refs"
12
+ ],
13
+ "bibtex": {
14
+ "ran": true,
15
+ "databases": [
16
+ "refs.bib"
17
+ ],
18
+ "keys": [
19
+ "pt1",
20
+ "k2inComment",
21
+ "ok1"
22
+ ],
23
+ "exit": 0,
24
+ "errors": []
25
+ },
26
+ "sha256": {
27
+ "paper.tex": "9ad22f9c50070c2620c5bf8885ed53cee4b0901e7bfdc83c61f70902686ac5e0",
28
+ "refs.bib": "3ec4425ebfa90481935c3c26bd1539ff833ba3ba6053c6aba748e05132c479c8"
29
+ }
30
+ }
@@ -0,0 +1,6 @@
1
+ \documentclass{article}
2
+ \begin{document}
3
+ \nocite{*}
4
+ \bibliographystyle{plain}
5
+ \end{document}
6
+ \bibliography{refs}
@@ -0,0 +1 @@
1
+ @misc{afterkey, title={After}, author={A, B}, year={2020}}
@@ -0,0 +1,17 @@
1
+ {
2
+ "schema": 1,
3
+ "inputs": [
4
+ {
5
+ "path": "paper.tex",
6
+ "role": "body"
7
+ }
8
+ ],
9
+ "written": [],
10
+ "bibdata": [],
11
+ "bibtex": {
12
+ "ran": false
13
+ },
14
+ "sha256": {
15
+ "paper.tex": "2a6a4bb4ab74f6895e5f45d2428eac4adda535a2d56232ebaa03cd9fb1cada35"
16
+ }
17
+ }
@@ -0,0 +1,3 @@
1
+ \begin{filecontents*}{refs.bib}
2
+ @misc{fresh, title={Fresh}, author={A, B}, year={2020}}
3
+ \end{filecontents*}
@@ -0,0 +1,7 @@
1
+ \documentclass{article}
2
+ \input{bibblock}
3
+ \begin{document}
4
+ Text~\cite{fresh}.
5
+ \bibliographystyle{plain}
6
+ \bibliography{refs}
7
+ \end{document}
@@ -0,0 +1 @@
1
+ @misc{stale, title={Stale}, author={A, B}, year={2020}}
@@ -0,0 +1,35 @@
1
+ {
2
+ "schema": 1,
3
+ "inputs": [
4
+ {
5
+ "path": "paper.tex",
6
+ "role": "body"
7
+ },
8
+ {
9
+ "path": "bibblock.tex",
10
+ "role": "preamble"
11
+ },
12
+ {
13
+ "path": "refs.bib",
14
+ "role": "preamble"
15
+ }
16
+ ],
17
+ "written": [],
18
+ "bibdata": [
19
+ "refs"
20
+ ],
21
+ "bibtex": {
22
+ "ran": true,
23
+ "databases": [
24
+ "refs.bib"
25
+ ],
26
+ "keys": [],
27
+ "exit": 0,
28
+ "errors": []
29
+ },
30
+ "sha256": {
31
+ "paper.tex": "c58b895f4bb215019a85af42df7a80eb1df12030a1b87c8b22765035a17f0777",
32
+ "bibblock.tex": "f17173d581a3e65cf174770ef259f4ac5e91adf5deeaf679410613c652eb6f86",
33
+ "refs.bib": "9537774c99fb9df278b23c8fb506cdc72ab514deb926f69d2c88780e71dcc8d4"
34
+ }
35
+ }
@@ -0,0 +1 @@
1
+ \bibliography{first}
@@ -0,0 +1 @@
1
+ @misc{firstkey, title={First}, author={A, B}, year={2020}}
@@ -0,0 +1 @@
1
+ @misc{laterkey, title={Later}, author={A, B}, year={2020}}
@@ -0,0 +1,7 @@
1
+ \documentclass{article}
2
+ \begin{document}
3
+ \nocite{*}
4
+ \bibliographystyle{plain}
5
+ \input{bibsetup}
6
+ \bibliography{later}
7
+ \end{document}
@@ -0,0 +1,40 @@
1
+ {
2
+ "schema": 1,
3
+ "inputs": [
4
+ {
5
+ "path": "paper.tex",
6
+ "role": "body"
7
+ },
8
+ {
9
+ "path": "bibsetup.tex",
10
+ "role": "body"
11
+ }
12
+ ],
13
+ "written": [],
14
+ "bibdata": [
15
+ "first",
16
+ "later"
17
+ ],
18
+ "bibtex": {
19
+ "ran": true,
20
+ "databases": [
21
+ "first.bib"
22
+ ],
23
+ "keys": [
24
+ "firstkey"
25
+ ],
26
+ "exit": 2,
27
+ "errors": [
28
+ {
29
+ "message": "Illegal, another \\bibdata command",
30
+ "file": "paper.aux",
31
+ "line": 5
32
+ }
33
+ ]
34
+ },
35
+ "sha256": {
36
+ "paper.tex": "6dfd240b12ad235906f6c28f184f0b64bdb5b4134c757caae639eb17f1e067aa",
37
+ "bibsetup.tex": "4c54f878fd33b8a0d3c1c91cbf9dc2910c9599f9ec8fbdc51186a0087ecd65e3",
38
+ "first.bib": "657a37350055ed17b619131230a750ecb95b6362d84ab20426101c8bed6d8ec6"
39
+ }
40
+ }
@@ -0,0 +1,14 @@
1
+ \documentclass{article}
2
+ \begin{filecontents*}[overwrite]{refs.bib}
3
+ @misc{inline2024,
4
+ title = {The Inline Entry},
5
+ author = {Doe, Jane},
6
+ year = {2024},
7
+ url = {https://example.org/inline}
8
+ }
9
+ \end{filecontents*}
10
+ \begin{document}
11
+ Text that cites~\cite{inline2024} and~\cite{stale2020}.
12
+ \bibliographystyle{plain}
13
+ \bibliography{refs}
14
+ \end{document}
@@ -0,0 +1,6 @@
1
+ @misc{stale2020,
2
+ title = {The Stale Entry},
3
+ author = {Roe, Rich},
4
+ year = {2020},
5
+ url = {https://example.org/stale}
6
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "schema": 1,
3
+ "inputs": [
4
+ {
5
+ "path": "paper.tex",
6
+ "role": "body"
7
+ }
8
+ ],
9
+ "written": [
10
+ "refs.bib"
11
+ ],
12
+ "bibdata": [
13
+ "refs"
14
+ ],
15
+ "bibtex": {
16
+ "ran": true,
17
+ "databases": [
18
+ "refs.bib"
19
+ ],
20
+ "keys": [
21
+ "inline2024"
22
+ ],
23
+ "exit": 0,
24
+ "errors": []
25
+ },
26
+ "sha256": {
27
+ "paper.tex": "db8644594d98a18b718881012edbc90d01c5b28ee9fed693d28a399554f453e2",
28
+ "refs.bib": "f49b1030659e0fa7b6141a27fa812cee3aa74f3640f8897fe55c44c7ef51cda5"
29
+ }
30
+ }
@@ -0,0 +1,7 @@
1
+ \documentclass{article}
2
+ \begin{document}
3
+ Text.
4
+ \end{document}
5
+ \begin{thebibliography}{1}
6
+ \bibitem{parked} Parked.
7
+ \end{thebibliography}
@@ -0,0 +1,17 @@
1
+ {
2
+ "schema": 1,
3
+ "inputs": [
4
+ {
5
+ "path": "paper.tex",
6
+ "role": "body"
7
+ }
8
+ ],
9
+ "written": [],
10
+ "bibdata": [],
11
+ "bibtex": {
12
+ "ran": false
13
+ },
14
+ "sha256": {
15
+ "paper.tex": "f571ea101e0421467a9ef3fdc3a9a3f45b2dbfeec580493c934027ab2d10ed0e"
16
+ }
17
+ }
@@ -0,0 +1 @@
1
+ @misc{old, title={Old}, author={A, B}, year={2020}}
@@ -0,0 +1,7 @@
1
+ \documentclass{article}
2
+ \begin{document}
3
+ Text~\cite{real}.
4
+ \bibliographystyle{plain}
5
+ \bibliography{refs}
6
+ \end{document}
7
+ \input{parked}
@@ -0,0 +1 @@
1
+ \bibliography{old}
@@ -0,0 +1 @@
1
+ @misc{real, title={Real}, author={A, B}, year={2020}}
@@ -0,0 +1,28 @@
1
+ {
2
+ "schema": 1,
3
+ "inputs": [
4
+ {
5
+ "path": "paper.tex",
6
+ "role": "body"
7
+ }
8
+ ],
9
+ "written": [],
10
+ "bibdata": [
11
+ "refs"
12
+ ],
13
+ "bibtex": {
14
+ "ran": true,
15
+ "databases": [
16
+ "refs.bib"
17
+ ],
18
+ "keys": [
19
+ "real"
20
+ ],
21
+ "exit": 0,
22
+ "errors": []
23
+ },
24
+ "sha256": {
25
+ "paper.tex": "92bc05c175bdb81fcbdbbcaf8474b615057286ad25512604a77bfeae25feea23",
26
+ "refs.bib": "d12525c1fd7a83fc089581b1df7820a9b2ee92fc8a4daebff8b848eca3c4c698"
27
+ }
28
+ }
@@ -0,0 +1,6 @@
1
+ \documentclass{article}
2
+ \begin{document}
3
+ \nocite{*}
4
+ \bibliographystyle{plain}
5
+ \bibliography{refs}
6
+ \end{document}
@@ -0,0 +1,5 @@
1
+ @misc{q1, note = "mail a@b.org", url = {https://example.org/q1}, title = {T1}}
2
+ @misc{q2, note = "see @misc{ghostone, title={G}} too", title = {T2}}
3
+ @misc(q3, note = "a ) @misc{ghosttwo, title={H}} b", title = {T3})
4
+ @misc{q4, note = "x {"} @misc{ghostthree, title={I}} y", title = {T4}}
5
+ @misc{q5, title = {T5}}
@@ -0,0 +1,32 @@
1
+ {
2
+ "schema": 1,
3
+ "inputs": [
4
+ {
5
+ "path": "paper.tex",
6
+ "role": "body"
7
+ }
8
+ ],
9
+ "written": [],
10
+ "bibdata": [
11
+ "refs"
12
+ ],
13
+ "bibtex": {
14
+ "ran": true,
15
+ "databases": [
16
+ "refs.bib"
17
+ ],
18
+ "keys": [
19
+ "q1",
20
+ "q2",
21
+ "q3",
22
+ "q4",
23
+ "q5"
24
+ ],
25
+ "exit": 0,
26
+ "errors": []
27
+ },
28
+ "sha256": {
29
+ "paper.tex": "9ad22f9c50070c2620c5bf8885ed53cee4b0901e7bfdc83c61f70902686ac5e0",
30
+ "refs.bib": "40a76ab3e66acf89da571f914ee2d63f2163868c2df80a8258d06fbb5ee18774"
31
+ }
32
+ }