paperlint 6.3.0 โ†’ 7.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 (144) hide show
  1. package/CONTRIBUTING.md +4 -2
  2. package/README.md +2 -2
  3. package/dist/adapters/latex/conditionals.d.ts +21 -0
  4. package/dist/adapters/latex/conditionals.d.ts.map +1 -0
  5. package/dist/adapters/latex/conditionals.js +75 -0
  6. package/dist/adapters/latex/conditionals.js.map +1 -0
  7. package/dist/adapters/latex/headings.d.ts +10 -0
  8. package/dist/adapters/latex/headings.d.ts.map +1 -0
  9. package/dist/adapters/latex/headings.js +129 -0
  10. package/dist/adapters/latex/headings.js.map +1 -0
  11. package/dist/adapters/latex/index.d.ts +1 -0
  12. package/dist/adapters/latex/index.d.ts.map +1 -1
  13. package/dist/adapters/latex/index.js +3 -0
  14. package/dist/adapters/latex/index.js.map +1 -1
  15. package/dist/adapters/latex/parse.d.ts +1 -1
  16. package/dist/adapters/latex/parse.d.ts.map +1 -1
  17. package/dist/adapters/latex/parse.js +3 -2
  18. package/dist/adapters/latex/parse.js.map +1 -1
  19. package/dist/build.d.ts +1 -1
  20. package/dist/build.d.ts.map +1 -1
  21. package/dist/build.js +1 -1
  22. package/dist/build.js.map +1 -1
  23. package/dist/cli.d.ts +1 -1
  24. package/dist/cli.d.ts.map +1 -1
  25. package/dist/cli.js +17 -3
  26. package/dist/cli.js.map +1 -1
  27. package/dist/domain/heading-case.d.ts +100 -0
  28. package/dist/domain/heading-case.d.ts.map +1 -0
  29. package/dist/domain/heading-case.js +365 -0
  30. package/dist/domain/heading-case.js.map +1 -0
  31. package/dist/domain/tex-document.d.ts +32 -0
  32. package/dist/domain/tex-document.d.ts.map +1 -1
  33. package/dist/domain/tex-document.js +11 -0
  34. package/dist/domain/tex-document.js.map +1 -1
  35. package/dist/eslint-rules/latex-language.d.ts.map +1 -1
  36. package/dist/eslint-rules/latex-language.js +16 -3
  37. package/dist/eslint-rules/latex-language.js.map +1 -1
  38. package/dist/facts-file.d.ts +3 -3
  39. package/dist/facts-file.d.ts.map +1 -1
  40. package/dist/facts-file.js +3 -3
  41. package/dist/facts-file.js.map +1 -1
  42. package/dist/folder-venue-rule.js +6 -6
  43. package/dist/folder-venue-rule.js.map +1 -1
  44. package/dist/heading-case.d.ts +48 -0
  45. package/dist/heading-case.d.ts.map +1 -0
  46. package/dist/heading-case.js +191 -0
  47. package/dist/heading-case.js.map +1 -0
  48. package/dist/ports/latex.d.ts +7 -1
  49. package/dist/ports/latex.d.ts.map +1 -1
  50. package/dist/preset-card-rule.d.ts +100 -0
  51. package/dist/preset-card-rule.d.ts.map +1 -0
  52. package/dist/preset-card-rule.js +221 -0
  53. package/dist/preset-card-rule.js.map +1 -0
  54. package/dist/presets.d.ts +19 -2
  55. package/dist/presets.d.ts.map +1 -1
  56. package/dist/presets.js +97 -62
  57. package/dist/presets.js.map +1 -1
  58. package/dist/tex-requirements.d.ts +33 -3
  59. package/dist/tex-requirements.d.ts.map +1 -1
  60. package/dist/tex-requirements.js +27 -2
  61. package/dist/tex-requirements.js.map +1 -1
  62. package/dist/tex-venue-rules.d.ts +1 -1
  63. package/dist/tex-venue-rules.d.ts.map +1 -1
  64. package/dist/tex-venue-rules.js.map +1 -1
  65. package/docs/configuration.md +13 -1
  66. package/docs/optional-rules.md +4 -3
  67. package/docs/rules/format/page-limit.md +1 -1
  68. package/docs/rules/paper/folder-venue-leftover.md +1 -1
  69. package/docs/rules/talk/profile.md +1 -1
  70. package/docs/rules/tex/heading-case.md +424 -0
  71. package/docs/rules.md +62 -53
  72. package/eslint-rules/latex-language.test.mjs +12 -0
  73. package/eslint-rules/latex-language.ts +17 -4
  74. package/eslint-rules/paper-typography.test.mjs +12 -0
  75. package/eslint.config.mjs +59 -1
  76. package/fixtures/build-e2e/acmart/paper.tex +1 -1
  77. package/fixtures/build-e2e/fallback/expect.json +3 -3
  78. package/lib/skill-checks.mjs +31 -0
  79. package/package.json +7 -1
  80. package/presets/acm-sigconf.jsonc +5 -0
  81. package/presets/acm-sigconf.md +43 -0
  82. package/presets/agenticdev.jsonc +27 -6
  83. package/presets/agenticdev.md +151 -0
  84. package/presets/aidc.jsonc +6 -0
  85. package/presets/aidc.md +75 -0
  86. package/presets/aisec.jsonc +5 -1
  87. package/presets/aisec.md +117 -0
  88. package/presets/ieee-conference.jsonc +5 -0
  89. package/presets/ieee-conference.md +38 -0
  90. package/presets/realm.jsonc +7 -2
  91. package/presets/realm.md +166 -0
  92. package/presets/tex/agenticdev.tex +1 -1
  93. package/presets/tex-base.jsonc +6 -0
  94. package/presets/tex-base.md +30 -0
  95. package/presets/venue-profile.schema.json +40 -1
  96. package/skills/find-venue/SKILL.md +6 -5
  97. package/skills/find-venue/SKILL.md.spec.ts +5 -4
  98. package/skills/paper-pipeline/SKILL.md +5 -6
  99. package/skills/paper-pipeline/SKILL.md.spec.ts +4 -5
  100. package/skills/paper-pipeline/references/acl-venue-rules.md +1 -1
  101. package/skills/study-accepted-papers/SKILL.md +3 -3
  102. package/skills/study-accepted-papers/SKILL.md.spec.ts +2 -2
  103. package/skills/submit-paper/SKILL.md +26 -22
  104. package/skills/submit-paper/SKILL.md.spec.ts +25 -21
  105. package/skills/submit-paper/references/publishers/acm.md +1 -1
  106. package/src/adapters/latex/conditionals.ts +130 -0
  107. package/src/adapters/latex/headings.ts +163 -0
  108. package/src/adapters/latex/index.test.ts +65 -0
  109. package/src/adapters/latex/index.ts +3 -0
  110. package/src/adapters/latex/parse.ts +3 -2
  111. package/src/build.ts +2 -2
  112. package/src/cli.test.ts +50 -7
  113. package/src/cli.ts +21 -4
  114. package/src/domain/heading-case.test.ts +660 -0
  115. package/src/domain/heading-case.ts +538 -0
  116. package/src/domain/tex-document.ts +36 -0
  117. package/src/domain/venue-name.test.ts +13 -7
  118. package/src/facts-file.test.ts +4 -4
  119. package/src/facts-file.ts +6 -6
  120. package/src/folder-venue-rule.test.ts +10 -10
  121. package/src/folder-venue-rule.ts +6 -6
  122. package/src/heading-case.test.ts +500 -0
  123. package/src/heading-case.ts +275 -0
  124. package/src/init.test.ts +1 -1
  125. package/src/new-paper.test.ts +10 -6
  126. package/src/paper-settings-commands.test.ts +25 -10
  127. package/src/ports/latex.ts +7 -0
  128. package/src/preset-card-rule.test.ts +266 -0
  129. package/src/preset-card-rule.ts +384 -0
  130. package/src/presets.test.ts +193 -40
  131. package/src/presets.ts +139 -70
  132. package/src/rule-cases.test.ts +136 -50
  133. package/src/submission.test.ts +2 -1
  134. package/src/talk-rules.test.ts +6 -3
  135. package/src/tex-requirements.harness.ts +25 -11
  136. package/src/tex-requirements.test.ts +127 -1
  137. package/src/tex-requirements.ts +70 -8
  138. package/src/tex-venue-rules.test.ts +35 -21
  139. package/src/tex-venue-rules.ts +2 -1
  140. package/src/venue-rules.test.ts +7 -6
  141. package/templates/paper/paper.tex +1 -1
  142. package/skills/submit-paper/references/venues/agenticdev.md +0 -171
  143. package/skills/submit-paper/references/venues/aisec.md +0 -105
  144. package/skills/submit-paper/references/venues/realm.md +0 -155
@@ -0,0 +1,166 @@
1
+ ---
2
+ title: "REALM @ EMNLP โ€” venue card"
3
+ ---
4
+
5
+ # REALM @ EMNLP
6
+
7
+ The card of the venue preset `paperlint:realm` ([`realm.jsonc`](realm.jsonc)): what the venue asks
8
+ for, in prose. The numbers a machine checks live in the preset; the section at the end is generated
9
+ from it. The `submit-paper` skill reads this card for the venue's specifics.
10
+
11
+ **Family: ACL.** What is ACL-wide (the appendix rule, Limitations and Ethics outside the limit,
12
+ anonymity, OpenReview mechanics) lives in `paper-pipeline/references/acl-venue-rules.md`; only
13
+ REALM's own facts are here. ACL's template is not a class โ€” `acl_latex.tex` loads `acl.sty` into
14
+ `\documentclass[11pt]{article}` โ€” so this preset extends no family and carries the template's
15
+ numbers itself.
16
+
17
+ Sources: the call for papers,
18
+ [realm-workshop.github.io/call_for_papers](https://realm-workshop.github.io/call_for_papers)
19
+ (fetched 2026-08-02 and 2026-08-03), and the OpenReview invitation schema.
20
+ ๐Ÿ”ด **Re-verify every cycle** โ€” dates, limits and tracks move between editions.
21
+
22
+ ## The venue (2026 edition, the 2nd)
23
+
24
+ | field | value |
25
+ | -------------------------- | ------------------------------------------------------------------------------------------------------------- |
26
+ | full name | REALM โ€” workshop at EMNLP 2026 |
27
+ | edition | **2nd** (the 1st edition's accepted papers exist โ€” mine them with `study-accepted-papers`) |
28
+ | direct submission deadline | **Wednesday 5 August 2026**, 23:59 **AoE** (= 6 August 11:59 UTC) |
29
+ | ARR commitment deadline | 31 August 2026, same AoE convention |
30
+ | archival | optional at submission; archival โ†’ **ACL Anthology proceedings** |
31
+ | blind | **double-blind** โ€” names and affiliations omitted |
32
+ | preprints | allowed at any time, provided the PDF does not link to de-anonymized information |
33
+ | portal | `openreview.net/group?id=EMNLP/2026/Workshop/REALM` |
34
+ | format | **PDF only** |
35
+ | mandatory sections | none beyond ACL's Limitations; _"authors are expected to attest to the ethical considerations in their work"_ |
36
+ | venue mode | hybrid; Thursday 29 October, 9:00โ€“17:30, Room P1 |
37
+
38
+ ## Paper kinds and limits
39
+
40
+ | kind | at submission | at camera-ready | references and appendices |
41
+ | ------- | ------------: | --------------: | ------------------------: |
42
+ | `long` | 8 pages | 9 pages | unlimited |
43
+ | `short` | 4 pages | 5 pages | unlimited |
44
+
45
+ ๐Ÿ”ด **The page limit is not gated by the preset**, and that is a measurement: banal counts
46
+ Limitations and Ethics as body, which ACL excludes from the limit, so a gate on its count reports a
47
+ paper inside the limit. The numbers sit in the preset's `page_limits_not_gated`, as data for a
48
+ counter that knows where the body ends; the two kinds exist so a paper can name its own.
49
+
50
+ ## What else the preset encodes
51
+
52
+ - **The template**: `\documentclass[11pt]{article}` (`tex/template`), A4, two columns, Times at
53
+ 11 pt, references between 9 and 11 pt โ€” measured on a build, not copied from ACL's text.
54
+ - **TeX packages** `acl.sty` needs: lineno, and the Times, Helvetica, Courier, Symbol and Zapf
55
+ Dingbats fonts (without them: "Font ptmr8t not loadable" and no PDF).
56
+ - **Names**: `REALM` and `EMNLP`, what `tex/venue-leftover` looks for in another venue's paper.
57
+
58
+ ## ๐Ÿ”ด The submission form has no supplementary field
59
+
60
+ From `api2.openreview.net/invitations?id=EMNLP/2026/Workshop/REALM/-/Submission`, the form's
61
+ **complete** field list:
62
+
63
+ ```
64
+ title ยท authors ยท authorids ยท keywords ยท TLDR ยท abstract ยท pdf ยท
65
+ archival ยท cross_submission_to ยท serve_as_reviewer ยท venue ยท venueid
66
+ ```
67
+
68
+ There is no Responsible NLP Checklist and no supplementary upload. So:
69
+
70
+ 1. **Host the artifact externally and anonymously**, with the URL inside the PDF โ€” a submission
71
+ blocker, and an artifact reviewer refuses the Available badge without a resolving URL.
72
+ 2. **Do not confuse this route with ARR**, whose portal does have the checklist and separate
73
+ software and data uploads.
74
+ 3. **No checklist means no LLM-disclosure field here**: put the disclosure in Limitations or Ethical
75
+ considerations, both outside the page limit
76
+ (`paper-pipeline/references/acl-venue-rules.md`, ยงGenAI / LLM disclosure).
77
+
78
+ `keywords` is a form field, so a keyword line does **not** belong in the typeset PDF.
79
+
80
+ ## The submission form, field by field
81
+
82
+ What the live form shows, in order. Help text is quoted.
83
+
84
+ | # | field | required | type | what goes in |
85
+ | --- | ----------------------- | -------- | -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
86
+ | 1 | **Title** | โœฑ | one line | _"Add TeX formulas using $In-line$ or $$Block$$"_ โ€” plain text otherwise. **Must match the PDF's title exactly**; a late title edit in the paper means re-uploading the PDF _and_ retyping this |
87
+ | 2 | **Authors** | โœฑ | profile search | pre-filled with the submitting author. _"All authors must have an OpenReview profile prior to submitting"_ โ€” a co-author without an active profile blocks the whole submission |
88
+ | 3 | **Keywords** | โœฑ | comma-separated | free text, no controlled vocabulary. ๐Ÿ”ด **Because this is a form field, the keyword line does NOT belong in the typeset PDF** |
89
+ | 4 | **TL;DR** | โ€” | one sentence, ๐Ÿ”ด **hard max 250 characters** | _"a short sentence describing your paper"_. The limit is **not in the help text** โ€” it rejects on submit. Optional, but it is the first thing a bidding reviewer reads: name the mechanism, not the topic. Count the characters before pasting |
90
+ | 5 | **Abstract** | โœฑ | markdown + TeX, Write/Preview tabs | paste the paper's abstract. Markdown emphasis renders; `**bold**` survives. Backticks render as code |
91
+ | 6 | **PDF** | โœฑ | file upload | _"Upload a PDF file that ends with .pdf"_. No supplementary field anywhere on the form โ€” see above |
92
+ | 7 | **Archival** | โœฑ | radio: Archival / Non-archival | Archival โ†’ **ACL Anthology**. _"If your paper is a cross-submission (currently under review or already published at another venue), it cannot be archival, per ACL policies."_ Changeable at camera-ready |
93
+ | 8 | **Cross Submission To** | โ€” | one line | leave **empty** unless the paper is genuinely under review elsewhere. Filling it forfeits archival |
94
+ | 9 | **Serve As Reviewer** | โœฑ | profile search | _"reciprocal reviewing practiceโ€ฆ nominate at least one author to serve as a reviewer using their OpenReview profile ID (e.g. ~First_Last1)"_. **A solo author nominates themself** โ€” the field is required and there is nobody else |
95
+ | 10 | License | โœฑ | fixed chip | **CC BY 4.0**, not editable |
96
+ | 11 | Readers | โœฑ | fixed chips | `EMNLP 2026 Workshop REALM` + `authorids` |
97
+ | 12 | Signatures | โœฑ | fixed chip | the submitting author |
98
+
99
+ Then **Submit** / Cancel.
100
+
101
+ ๐Ÿ”ด **The displayed deadline is not when writes stop.** An OpenReview invitation carries two dates
102
+ and the interface shows only the first:
103
+
104
+ | field | 2026 edition, UTC |
105
+ | -------------------------------------------------------------- | ----------------- |
106
+ | `duedate` โ€” printed everywhere as the deadline | 2026-08-06 11:59 |
107
+ | `expdate` โ€” when the invitation actually stops accepting edits | 2026-08-06 12:29 |
108
+
109
+ A 30-minute window, undocumented in the call and invisible on the form. Read it before the last
110
+ hour:
111
+
112
+ ```
113
+ curl -sS "https://api2.openreview.net/invitations?id=<VENUE-PATH>/-/Submission" \
114
+ | python3 -c "import json,sys,datetime;[print(k, datetime.datetime.utcfromtimestamp(i[k]/1000)) \
115
+ for i in json.load(sys.stdin)['invitations'] for k in ('duedate','expdate') if i.get(k)]"
116
+ ```
117
+
118
+ Do not plan around it โ€” a venue may set `expdate == duedate`. It is room to recover from a defect
119
+ found at the deadline, not a schedule.
120
+
121
+ ## Traps
122
+
123
+ - **The title lives in two places, and they diverge silently.** Change the paper first, rebuild,
124
+ then fill the form โ€” never the other way round.
125
+ - **"Serve As Reviewer" enrols the nominee.** The day after submission the program chairs assign
126
+ papers and set a review deadline (2026: submissions 5 August, reviews due 21 August AoE, sixteen
127
+ days). ACL's AI policy applies to the reviews, verbatim from the chairs' email: _"the use of
128
+ generative AI tools to write an entire review is prohibited. While such tools may be used for
129
+ minor editing (e.g., grammar or clarity), the content and assessment must be the reviewer's
130
+ own."_ The sanction lands on submissions to the next ARR cycle. Price the reviewing window in
131
+ before submitting, and check whether a decision about reviewing was already made before filling
132
+ a required field.
133
+ - **Keywords are a form field, not paper content.** Keep the list in a non-typeset comment in the
134
+ source and paste it here.
135
+ - **The abstract field accepts markdown**, so paste the source abstract. Extracting it from the
136
+ built PDF is a mistake: on a line-numbered build the extractor interleaves the margin numbers and
137
+ drops paragraphs.
138
+ - **The deadline's time zone is stated in a different sentence** of the call than the date. Read
139
+ the whole page, then convert.
140
+ - **OpenReview profile moderation is the critical path.** An author with no institutional email and
141
+ no DBLP record has no expedite route; start the profile weeks ahead.
142
+ - The workshop's hybrid status comes from REALM's own root page, not EMNLP's general one.
143
+
144
+ ## The ARR route is not a free fallback
145
+
146
+ The 31 August "ARR commitment" deadline commits a paper **already reviewed by ACL Rolling Review**.
147
+ A paper never submitted to ARR needs an ARR submission first, on ARR's own cycle.
148
+
149
+ ## Sources
150
+
151
+ - `realm-workshop.github.io/call_for_papers` โ€” the call (fetched 2026-08-02, 2026-08-03)
152
+ - `realm-workshop.github.io/` โ€” the root page, hybrid confirmation
153
+ - `api2.openreview.net/invitations?id=โ€ฆ/-/Submission` โ€” the live form schema
154
+
155
+ ## What the preset resolves to
156
+
157
+ <!-- paperlint:preset-rules -->
158
+ <!-- prettier-ignore-start -->
159
+ <!-- Generated from realm.jsonc by `npx eslint --fix` (rule preset/card-rules). Edit the preset, not this section. -->
160
+
161
+ **`paperlint:realm`** โ€” venue preset for REALM ยท call for papers: <https://realm-workshop.github.io/call_for_papers>
162
+
163
+ No preset of this chain sets a rule: under it, every rule keeps paperlint's default.
164
+
165
+ <!-- prettier-ignore-end -->
166
+ <!-- /paperlint:preset-rules -->
@@ -1,5 +1,5 @@
1
1
  % agenticdev.tex โ€” venue numbers for the guards IN THE PREAMBLE. LaTeX doesn't read YAML, so the
2
- % values are duplicated from venues/agenticdev.jsonc (the source of truth โ€” read by the
2
+ % values are duplicated from presets/agenticdev.jsonc (the source of truth โ€” read by the
3
3
  % `pdf/profile` rule, see eslint-rules/pdf-facts.mjs:128). in = inches.
4
4
  %
5
5
  % ๐Ÿ”ด THIS USED TO SAY `venues/agenticdev.yaml`, AND NO SUCH FILE EXISTS (fixed 2026-09-12). The
@@ -14,7 +14,13 @@
14
14
  // cm-super โ€” without it pdflatex silently RASTERIZES Computer Modern in some contexts (a Type 3
15
15
  // bitmap font in the PDF; measured 2026-09-01 on an ACL paper: 1 Type 3 font before, 0 after).
16
16
  // ACM and ACL both reject such a PDF, and the build does not complain.
17
+ //
18
+ // Its card, in prose: `tex-base.md` beside this file.
17
19
  {
20
+ // The base set: not a venue and not a template family. No preset extends it โ€” every paper gets it
21
+ // anyway, under whatever it extends โ€” so it holds `tex` and nothing else (the schema says so).
22
+ "type": "base",
23
+
18
24
  "tex": {
19
25
  "packages": {
20
26
  "latex": ["latex.ltx", "article.cls"],
@@ -0,0 +1,30 @@
1
+ ---
2
+ title: "The TeX base set โ€” card"
3
+ ---
4
+
5
+ # The TeX base set
6
+
7
+ The card of [`tex-base.jsonc`](tex-base.jsonc): the TeX Live packages **every** paper gets, and all
8
+ a paper gets when it extends no preset. It is neither a venue nor a template family, and no preset
9
+ extends it โ€” a venue's or a family's `tex.packages` is added on top of it, never instead of it.
10
+ `paperlint toolchain` installs it with every preset's packages; `paperlint build` checks it is
11
+ present before building.
12
+
13
+ What it is for: a plain `article` paper with the usual tools, typeset in Type 1 fonts. Each package
14
+ names the files that prove it is installed โ€” `kpsewhich` must find them after an install, because
15
+ an installer's exit code is not the criterion. `cm-super` is there because without it pdflatex
16
+ silently rasterizes Computer Modern in some contexts, a bitmap font that ACM and ACL both reject.
17
+ `texcount` and `checkcites` are programs the skills run, not files LaTeX loads.
18
+
19
+ ## What the preset resolves to
20
+
21
+ <!-- paperlint:preset-rules -->
22
+ <!-- prettier-ignore-start -->
23
+ <!-- Generated from tex-base.jsonc by `npx eslint --fix` (rule preset/card-rules). Edit the preset, not this section. -->
24
+
25
+ **`tex-base.jsonc`** โ€” the TeX base set: every paper gets it, whatever it extends, and no preset extends it
26
+
27
+ No preset of this chain sets a rule: under it, every rule keeps paperlint's default.
28
+
29
+ <!-- prettier-ignore-end -->
30
+ <!-- /paperlint:preset-rules -->
@@ -11,11 +11,21 @@
11
11
  "type": "string",
12
12
  "minLength": 1
13
13
  },
14
+ "type": {
15
+ "description": "What this file is. `venue`: one venue's call for papers, and it must say which venue (`name`) and where its call is (`url`). `family`: a publisher's template (acm-sigconf, ieee-conference) that venue presets extend; it names no venue, so it has neither `name` nor `url`. `base`: the TeX packages every paper gets (tex-base.jsonc); it holds only `tex` and nothing extends it.",
16
+ "type": "string",
17
+ "enum": ["venue", "family", "base"]
18
+ },
14
19
  "name": {
15
- "description": "A display name for messages; the file name otherwise.",
20
+ "description": "A venue's name as its call for papers spells it (`AgenticDev`). Required on a venue, refused on a family. The label of messages, and one of the names `tex/venue-leftover` looks for.",
16
21
  "type": "string",
17
22
  "minLength": 1
18
23
  },
24
+ "url": {
25
+ "description": "A venue's call for papers or author instructions: the page its numbers are quoted from. Required on a venue, refused on a family.",
26
+ "type": "string",
27
+ "pattern": "^https://[^\\s/]+[^\\s]*$"
28
+ },
19
29
  "tex": {
20
30
  "$ref": "#/definitions/tex"
21
31
  },
@@ -336,6 +346,7 @@
336
346
  }
337
347
  }
338
348
  },
349
+ "required": ["type"],
339
350
  "allOf": [
340
351
  {
341
352
  "if": {
@@ -346,6 +357,34 @@
346
357
  "then": {
347
358
  "required": ["tex"]
348
359
  }
360
+ },
361
+ {
362
+ "if": {
363
+ "required": ["type"],
364
+ "properties": { "type": { "const": "venue" } }
365
+ },
366
+ "then": {
367
+ "required": ["name", "url"]
368
+ }
369
+ },
370
+ {
371
+ "if": {
372
+ "required": ["type"],
373
+ "properties": { "type": { "const": "family" } }
374
+ },
375
+ "then": {
376
+ "properties": { "name": false, "url": false }
377
+ }
378
+ },
379
+ {
380
+ "if": {
381
+ "required": ["type"],
382
+ "properties": { "type": { "const": "base" } }
383
+ },
384
+ "then": {
385
+ "required": ["type", "tex"],
386
+ "maxProperties": 2
387
+ }
349
388
  }
350
389
  ],
351
390
  "definitions": {
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: find-venue
3
- description: "Discover and rank real venues for a given paper, scored by authorship credit not just prestige. Fetch candidate CFPs (WebSearch/WebFetch), capture deadline / page limit / paper-type fit / indexing (ACM DL / IEEE Xplore / archival vs non-archival) / double-blind / remote-attendance / selectivity, then rank by credit-weight (peer-reviewed + indexed + parent-venue prestige) ร— topic fit ร— accept-probability ร— deadline feasibility ร— remote-friendliness. Emit a comparison table and a keep/switch recommendation. Encodes: workshop newness does NOT hurt authorship; non-archival workshops rank LOW; the prestige move is to EXTEND the accepted paper later, not hold out. Compose with research-ideate (upstream), plan-paper-timeline, the submit-paper venue data cards (submit-paper/references/venues/<venue>.md), and extend-paper."
3
+ description: "Discover and rank real venues for a given paper, scored by authorship credit not just prestige. Fetch candidate CFPs (WebSearch/WebFetch), capture deadline / page limit / paper-type fit / indexing (ACM DL / IEEE Xplore / archival vs non-archival) / double-blind / remote-attendance / selectivity, then rank by credit-weight (peer-reviewed + indexed + parent-venue prestige) ร— topic fit ร— accept-probability ร— deadline feasibility ร— remote-friendliness. Emit a comparison table and a keep/switch recommendation. Encodes: workshop newness does NOT hurt authorship; non-archival workshops rank LOW; the prestige move is to EXTEND the accepted paper later, not hold out. Compose with research-ideate (upstream), plan-paper-timeline, the venue cards (presets/<venue>.md in the paperlint package), and extend-paper."
4
4
  allowed-tools: [Read, Write, Grep, Glob, WebSearch, WebFetch, Agent]
5
5
  ---
6
6
 
7
- <!-- vigiles:sha256:bfda3e840d81d95d compiled from skills/find-venue/SKILL.md.spec.ts -->
7
+ <!-- vigiles:sha256:8b332cbc072b46ee compiled from skills/find-venue/SKILL.md.spec.ts -->
8
8
 
9
9
  # find-venue โ€” rank real venues by what earns the credit, then keep or switch
10
10
 
@@ -81,9 +81,10 @@ rank = credit-weight ร— topic-fit ร— accept-probability ร— deadline-feasibility
81
81
  `{ "extends": "paperlint:<venue>", "kind": "<kind>" }` โ€” a shipped preset, else a family
82
82
  (`paperlint:acm-sigconf`) or the project's own `./venues/<name>.jsonc`; the `pdf/*` rules then
83
83
  check the built PDF against its page limit and format.
84
- - `submit-paper` venue data cards (`submit-paper/references/venues/<venue>.md`, e.g. `agenticdev.md`,
85
- `aisec.md`) โ€” the winner gets a venue-specific data card with its HotCRP quirks; save a new one per
86
- venue as plain data, not a new skill.
84
+ - the venue cards, `presets/<venue>.md` in the paperlint package beside each venue preset (e.g.
85
+ `agenticdev.md`, `aisec.md`) โ€” the winner gets a card with its HotCRP quirks beside its preset;
86
+ for a venue with no shipped preset, the project's own `./venues/<name>.md` beside its
87
+ `./venues/<name>.jsonc`. Plain data, not a new skill.
87
88
  - `extend-paper` โ€” the prestige-upgrade target this skill names but defers.
88
89
 
89
90
  ## Provenance
@@ -9,7 +9,7 @@ import { experimental_skill } from "vigiles/spec";
9
9
  export default experimental_skill({
10
10
  name: "find-venue",
11
11
  description:
12
- "Discover and rank real venues for a given paper, scored by authorship credit not just prestige. Fetch candidate CFPs (WebSearch/WebFetch), capture deadline / page limit / paper-type fit / indexing (ACM DL / IEEE Xplore / archival vs non-archival) / double-blind / remote-attendance / selectivity, then rank by credit-weight (peer-reviewed + indexed + parent-venue prestige) ร— topic fit ร— accept-probability ร— deadline feasibility ร— remote-friendliness. Emit a comparison table and a keep/switch recommendation. Encodes: workshop newness does NOT hurt authorship; non-archival workshops rank LOW; the prestige move is to EXTEND the accepted paper later, not hold out. Compose with research-ideate (upstream), plan-paper-timeline, the submit-paper venue data cards (submit-paper/references/venues/<venue>.md), and extend-paper.",
12
+ "Discover and rank real venues for a given paper, scored by authorship credit not just prestige. Fetch candidate CFPs (WebSearch/WebFetch), capture deadline / page limit / paper-type fit / indexing (ACM DL / IEEE Xplore / archival vs non-archival) / double-blind / remote-attendance / selectivity, then rank by credit-weight (peer-reviewed + indexed + parent-venue prestige) ร— topic fit ร— accept-probability ร— deadline feasibility ร— remote-friendliness. Emit a comparison table and a keep/switch recommendation. Encodes: workshop newness does NOT hurt authorship; non-archival workshops rank LOW; the prestige move is to EXTEND the accepted paper later, not hold out. Compose with research-ideate (upstream), plan-paper-timeline, the venue cards (presets/<venue>.md in the paperlint package), and extend-paper.",
13
13
  tools: ["Read", "Write", "Grep", "Glob", "WebSearch", "WebFetch", "Agent"],
14
14
  body: `
15
15
  # find-venue โ€” rank real venues by what earns the credit, then keep or switch
@@ -87,9 +87,10 @@ rank = credit-weight ร— topic-fit ร— accept-probability ร— deadline-feasibility
87
87
  \`{ "extends": "paperlint:<venue>", "kind": "<kind>" }\` โ€” a shipped preset, else a family
88
88
  (\`paperlint:acm-sigconf\`) or the project's own \`./venues/<name>.jsonc\`; the \`pdf/*\` rules then
89
89
  check the built PDF against its page limit and format.
90
- - \`submit-paper\` venue data cards (\`submit-paper/references/venues/<venue>.md\`, e.g. \`agenticdev.md\`,
91
- \`aisec.md\`) โ€” the winner gets a venue-specific data card with its HotCRP quirks; save a new one per
92
- venue as plain data, not a new skill.
90
+ - the venue cards, \`presets/<venue>.md\` in the paperlint package beside each venue preset (e.g.
91
+ \`agenticdev.md\`, \`aisec.md\`) โ€” the winner gets a card with its HotCRP quirks beside its preset;
92
+ for a venue with no shipped preset, the project's own \`./venues/<name>.md\` beside its
93
+ \`./venues/<name>.jsonc\`. Plain data, not a new skill.
93
94
  - \`extend-paper\` โ€” the prestige-upgrade target this skill names but defers.
94
95
 
95
96
  ## Provenance
@@ -4,7 +4,7 @@ description: The orchestrator for writing a research paper end-to-end, from idea
4
4
  allowed-tools: [Read, Write, Edit, Grep, Glob, Bash, WebSearch, WebFetch, Agent, Skill]
5
5
  ---
6
6
 
7
- <!-- vigiles:sha256:805b94a3515406d7 compiled from skills/paper-pipeline/SKILL.md.spec.ts -->
7
+ <!-- vigiles:sha256:a8a20289badf1fa8 compiled from skills/paper-pipeline/SKILL.md.spec.ts -->
8
8
 
9
9
  # paper-pipeline โ€” the conductor for the whole organism
10
10
 
@@ -27,10 +27,9 @@ of that โ€” who is filing what, and when โ€” stays in the author's own private n
27
27
  grades, open findings, submit-ready verdict). Copied into `<paper-dir>/PIPELINE-STATUS.md`.
28
28
  - `references/acl-venue-rules.md` โ€” what holds at **every** ACL-family venue and workshop: the
29
29
  page-limit map, the appendix rule and the trap inside it, Limitations/Ethics as free-but-restricted
30
- space, anonymity, OpenReview mechanics. Fetch once, not per paper. Venue-specific facts stay in
31
- `submit-paper/references/venues/<venue>.md`. (No prose equivalent yet for ACM or IEEE โ€” write one
32
- when the next paper goes there. ACM's machine-checked format already exists: the
33
- `paperlint:acm-sigconf` preset, `presets/acm-sigconf.jsonc` in the package.)
30
+ space, anonymity, OpenReview mechanics. Fetch once, not per paper. Venue-specific facts stay in the
31
+ venue's card, `presets/<venue>.md` in the package. The ACM and IEEE templates have family cards
32
+ beside their presets, `presets/acm-sigconf.md` and `presets/ieee-conference.md`.
34
33
 
35
34
  ## The readiness scorecard (which boxes are checked)
36
35
  Stages run in subagents and report into chat, which evaporates โ€” so "did everything run?" becomes
@@ -151,7 +150,7 @@ Ordered, because each really does gate the next. Two pairs run in parallel; that
151
150
  | **Validate the idea** | **`research-ideate`** | Is it a reusable method (survives review) in your lane, and does it feed the credit criteria? Go/no-go + the MVP finding. |
152
151
  | **Map the competition** โ€– | **`map-prior-work`** | ๐Ÿ”ด **Who already did this?** Multi-angle sweep; date each hit against your submission (5 months = prior, not concurrent); triage by which layer of your claim it threatens; deep-read the dangerous ones. Output: **what you can still claim** + a related-work skeleton. *Added 2026-07-27 after a five-month-older paper surfaced at Tโˆ’10 days on a finished draft.* |
153
152
  | **Pick the venue** โ€– | **`find-venue`** | Rank by credit-weight (peer-reviewed + indexed) ร— fit ร— accept-odds ร— deadline ร— remote. |
154
- | **Learn the venue's bar** | **`study-accepted-papers`** | ๐Ÿ”ด **What does an ACCEPTED paper look like HERE?** Measure the venue's whole accepted volume, deep-read 8โ€“12 of your contribution type, and extract what made them strong: evidence scale, figures, artifact release, how the abstract is built. File the venue card (`submit-paper/references/venues/<venue>.md`) and confirm family rules (`references/acl-venue-rules.md`). *Promoted to its own step 2026-08-03: on `compile-rules-2026` every judgement of the paper's quality โ€” rubric, persona, simulated panel, accept probability โ€” came from instruments this pipeline itself generated, with no external grounding, and the author had to say so at Tโˆ’3 days. A closed loop optimises against its own model of a reviewer.* |
153
+ | **Learn the venue's bar** | **`study-accepted-papers`** | ๐Ÿ”ด **What does an ACCEPTED paper look like HERE?** Measure the venue's whole accepted volume, deep-read 8โ€“12 of your contribution type, and extract what made them strong: evidence scale, figures, artifact release, how the abstract is built. File the venue card (`presets/<venue>.md` in the package, or the project's own beside its preset) and confirm family rules (`references/acl-venue-rules.md`). *Promoted to its own step 2026-08-03: on `compile-rules-2026` every judgement of the paper's quality โ€” rubric, persona, simulated panel, accept probability โ€” came from instruments this pipeline itself generated, with no external grounding, and the author had to say so at Tโˆ’3 days. A closed loop optimises against its own model of a reviewer.* |
155
154
  | ๐Ÿ”ด **Can you physically submit?** | **`plan-paper-timeline`** | **The step that owns the question no stage used to own.** Create the portal account NOW; drive the profile to **ACTIVE**, not "pending moderation"; confirm the form's fields and the artifact-hosting requirement. OpenReview moderation runs **up to two weeks**, and an author with no institutional email has no expedite route. Scorecard row `access`. *Added 2026-08-03, when this was the sole critical-path item on a finished paper at Tโˆ’4 days: the science was done and there was nowhere to put it.* |
156
155
  | **Schedule it** | **`plan-paper-timeline`** | Deadlines โ†’ calendar with buffers, in the author's own zone (AoE โˆ’ 12h โ‰  your clock). Space papers apart. |
157
156
  | ๐Ÿ”ด **State the claim** | **`argument-arc`** (frame mode) | **One paragraph: what will this paper claim, and what would have to be true?** Before any run. The frame decides which results matter, and reframing after the data is collected is how experiments get thrown away โ€” observed on `compile-rules-2026`, and the reason `argument-arc` has a rebuild mode at all. Costs a paragraph; saves a study. Scorecard row `frame`. |
@@ -44,10 +44,9 @@ of that โ€” who is filing what, and when โ€” stays in the author's own private n
44
44
  grades, open findings, submit-ready verdict). Copied into \`<paper-dir>/PIPELINE-STATUS.md\`.
45
45
  - \`references/acl-venue-rules.md\` โ€” what holds at **every** ACL-family venue and workshop: the
46
46
  page-limit map, the appendix rule and the trap inside it, Limitations/Ethics as free-but-restricted
47
- space, anonymity, OpenReview mechanics. Fetch once, not per paper. Venue-specific facts stay in
48
- \`submit-paper/references/venues/<venue>.md\`. (No prose equivalent yet for ACM or IEEE โ€” write one
49
- when the next paper goes there. ACM's machine-checked format already exists: the
50
- \`paperlint:acm-sigconf\` preset, \`presets/acm-sigconf.jsonc\` in the package.)
47
+ space, anonymity, OpenReview mechanics. Fetch once, not per paper. Venue-specific facts stay in the
48
+ venue's card, \`presets/<venue>.md\` in the package. The ACM and IEEE templates have family cards
49
+ beside their presets, \`presets/acm-sigconf.md\` and \`presets/ieee-conference.md\`.
51
50
 
52
51
  ## The readiness scorecard (which boxes are checked)
53
52
  Stages run in subagents and report into chat, which evaporates โ€” so "did everything run?" becomes
@@ -168,7 +167,7 @@ Ordered, because each really does gate the next. Two pairs run in parallel; that
168
167
  | **Validate the idea** | **\`research-ideate\`** | Is it a reusable method (survives review) in your lane, and does it feed the credit criteria? Go/no-go + the MVP finding. |
169
168
  | **Map the competition** โ€– | **\`map-prior-work\`** | ๐Ÿ”ด **Who already did this?** Multi-angle sweep; date each hit against your submission (5 months = prior, not concurrent); triage by which layer of your claim it threatens; deep-read the dangerous ones. Output: **what you can still claim** + a related-work skeleton. *Added 2026-07-27 after a five-month-older paper surfaced at Tโˆ’10 days on a finished draft.* |
170
169
  | **Pick the venue** โ€– | **\`find-venue\`** | Rank by credit-weight (peer-reviewed + indexed) ร— fit ร— accept-odds ร— deadline ร— remote. |
171
- | **Learn the venue's bar** | **\`study-accepted-papers\`** | ๐Ÿ”ด **What does an ACCEPTED paper look like HERE?** Measure the venue's whole accepted volume, deep-read 8โ€“12 of your contribution type, and extract what made them strong: evidence scale, figures, artifact release, how the abstract is built. File the venue card (\`submit-paper/references/venues/<venue>.md\`) and confirm family rules (\`references/acl-venue-rules.md\`). *Promoted to its own step 2026-08-03: on \`compile-rules-2026\` every judgement of the paper's quality โ€” rubric, persona, simulated panel, accept probability โ€” came from instruments this pipeline itself generated, with no external grounding, and the author had to say so at Tโˆ’3 days. A closed loop optimises against its own model of a reviewer.* |
170
+ | **Learn the venue's bar** | **\`study-accepted-papers\`** | ๐Ÿ”ด **What does an ACCEPTED paper look like HERE?** Measure the venue's whole accepted volume, deep-read 8โ€“12 of your contribution type, and extract what made them strong: evidence scale, figures, artifact release, how the abstract is built. File the venue card (\`presets/<venue>.md\` in the package, or the project's own beside its preset) and confirm family rules (\`references/acl-venue-rules.md\`). *Promoted to its own step 2026-08-03: on \`compile-rules-2026\` every judgement of the paper's quality โ€” rubric, persona, simulated panel, accept probability โ€” came from instruments this pipeline itself generated, with no external grounding, and the author had to say so at Tโˆ’3 days. A closed loop optimises against its own model of a reviewer.* |
172
171
  | ๐Ÿ”ด **Can you physically submit?** | **\`plan-paper-timeline\`** | **The step that owns the question no stage used to own.** Create the portal account NOW; drive the profile to **ACTIVE**, not "pending moderation"; confirm the form's fields and the artifact-hosting requirement. OpenReview moderation runs **up to two weeks**, and an author with no institutional email has no expedite route. Scorecard row \`access\`. *Added 2026-08-03, when this was the sole critical-path item on a finished paper at Tโˆ’4 days: the science was done and there was nowhere to put it.* |
173
172
  | **Schedule it** | **\`plan-paper-timeline\`** | Deadlines โ†’ calendar with buffers, in the author's own zone (AoE โˆ’ 12h โ‰  your clock). Space papers apart. |
174
173
  | ๐Ÿ”ด **State the claim** | **\`argument-arc\`** (frame mode) | **One paragraph: what will this paper claim, and what would have to be true?** Before any run. The frame decides which results matter, and reframing after the data is collected is how experiments get thrown away โ€” observed on \`compile-rules-2026\`, and the reason \`argument-arc\` has a rebuild mode at all. Costs a paragraph; saves a study. Scorecard row \`frame\`. |
@@ -139,4 +139,4 @@ year.
139
139
 
140
140
  Page counts per track ยท archival vs non-archival ยท ARR commitment route and its deadline ยท the
141
141
  submission portal URL and its form fields ยท anonymity period ยท attendance requirements ยท the review
142
- criteria. All of that lives in `submit-paper/references/venues/<venue>.md`.
142
+ criteria. All of that lives in the venue's card, `presets/<venue>.md` in the paperlint package.
@@ -5,7 +5,7 @@ context: fork
5
5
  allowed-tools: [Read, Write, Edit, Grep, Glob, Bash, WebSearch, WebFetch, Agent]
6
6
  ---
7
7
 
8
- <!-- vigiles:sha256:e199b342e4e98338 compiled from skills/study-accepted-papers/SKILL.md.spec.ts -->
8
+ <!-- vigiles:sha256:b68bde442319a605 compiled from skills/study-accepted-papers/SKILL.md.spec.ts -->
9
9
 
10
10
  # study-accepted-papers โ€” learn the venue's bar from its own accepted corpus, then lever your draft up
11
11
 
@@ -24,7 +24,7 @@ It answers a different question than the neighboring skills:
24
24
 
25
25
  Grounding: the authorship criterion โ€” why a *strong* accept at an indexed venue is
26
26
  worth more to the dossier than a borderline one โ€” reviewer enthusiasm shows up in the acceptance and in
27
- letters), and the venue data card `../submit-paper/references/venues/<venue>.md` if one exists.
27
+ letters), and the venue's card `presets/<venue>.md` in the paperlint package if one exists.
28
28
 
29
29
  ## Step 1 โ€” pin the venue's stated bar (fetch, don't guess)
30
30
 
@@ -162,7 +162,7 @@ short enough that it survives being loaded into every session.
162
162
  - `pc-panel-review` / `paper-adversarial-review` โ€” run those to red-team the draft; run this to learn the bar the red-team should hold it to. Complementary, not redundant.
163
163
  - `verify-citations` โ€” consumes the Step-4 citation gaps.
164
164
  - `extend-paper` โ€” the natural home for every EXPENSIVE lever this skill surfaces.
165
- - `submit-paper` venue data card (`submit-paper/references/venues/<venue>.md`) โ€” save durable venue-bar findings there as data, not as a new skill per venue.
165
+ - the venue card (`presets/<venue>.md` in the paperlint package, or the project's own `./venues/<name>.md` beside its preset) โ€” save durable venue-bar findings there as data, not as a new skill per venue.
166
166
  - the paper's `<paper>/paperlint.json` (`{ "extends": "paperlint:<venue>", "kind": "<kind>" }`) โ€” which venue preset the `pdf/*` rules check the built PDF against; a venue with no shipped preset extends a family (`paperlint:acm-sigconf`) or the project's own `./venues/<name>.jsonc`. Findings about the venue's page limit or format belong in that preset, with their source quote.
167
167
 
168
168
  ## Provenance
@@ -40,7 +40,7 @@ It answers a different question than the neighboring skills:
40
40
 
41
41
  Grounding: the authorship criterion โ€” why a *strong* accept at an indexed venue is
42
42
  worth more to the dossier than a borderline one โ€” reviewer enthusiasm shows up in the acceptance and in
43
- letters), and the venue data card \`../submit-paper/references/venues/<venue>.md\` if one exists.
43
+ letters), and the venue's card \`presets/<venue>.md\` in the paperlint package if one exists.
44
44
 
45
45
  ## Step 1 โ€” pin the venue's stated bar (fetch, don't guess)
46
46
 
@@ -178,7 +178,7 @@ short enough that it survives being loaded into every session.
178
178
  - \`pc-panel-review\` / \`paper-adversarial-review\` โ€” run those to red-team the draft; run this to learn the bar the red-team should hold it to. Complementary, not redundant.
179
179
  - \`verify-citations\` โ€” consumes the Step-4 citation gaps.
180
180
  - \`extend-paper\` โ€” the natural home for every EXPENSIVE lever this skill surfaces.
181
- - \`submit-paper\` venue data card (\`submit-paper/references/venues/<venue>.md\`) โ€” save durable venue-bar findings there as data, not as a new skill per venue.
181
+ - the venue card (\`presets/<venue>.md\` in the paperlint package, or the project's own \`./venues/<name>.md\` beside its preset) โ€” save durable venue-bar findings there as data, not as a new skill per venue.
182
182
  - the paper's \`<paper>/paperlint.json\` (\`{ "extends": "paperlint:<venue>", "kind": "<kind>" }\`) โ€” which venue preset the \`pdf/*\` rules check the built PDF against; a venue with no shipped preset extends a family (\`paperlint:acm-sigconf\`) or the project's own \`./venues/<name>.jsonc\`. Findings about the venue's page limit or format belong in that preset, with their source quote.
183
183
 
184
184
  ## Provenance
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: submit-paper
3
- description: End-to-end playbook for submitting a peer-reviewed paper to a double-blind venue (HotCRP workshops/conferences) โ€” from a hardened draft to "ready for review." Covers building and anonymously hosting a reproduction artifact, HotCRP profile + form mechanics, double-blind hygiene, and the authorship/credential angles for an independent researcher. Use when the paper is drafted and reviewed and it's time to actually submit. Compose with pc-panel-review / paper-adversarial-review (harden first), and with the venue data card (references/venues/<venue>.md) for venue specifics.
3
+ description: End-to-end playbook for submitting a peer-reviewed paper to a double-blind venue (HotCRP workshops/conferences) โ€” from a hardened draft to "ready for review." Covers building and anonymously hosting a reproduction artifact, HotCRP profile + form mechanics, double-blind hygiene, and the authorship/credential angles for an independent researcher. Use when the paper is drafted and reviewed and it's time to actually submit. Compose with pc-panel-review / paper-adversarial-review (harden first), and with the venue card (presets/<venue>.md in the paperlint package) for venue specifics.
4
4
  allowed-tools: [Read, Write, Edit, Grep, Glob, Bash, WebSearch, WebFetch, Skill]
5
5
  ---
6
6
 
7
- <!-- vigiles:sha256:767a4757d1df67d3 compiled from skills/submit-paper/SKILL.md.spec.ts -->
7
+ <!-- vigiles:sha256:8f53cae32633b002 compiled from skills/submit-paper/SKILL.md.spec.ts -->
8
8
 
9
9
  # submit-paper โ€” get a reviewed paper from "done" to "ready for review"
10
10
 
@@ -12,26 +12,30 @@ Assumes the paper is already hardened (run `pc-panel-review` โ€” incl. its venue
12
12
  `paper-adversarial-review` first). This skill is the submission mechanics โ€” the part that bit us with
13
13
  avoidable friction the first time. Distilled from the AgenticDev 2026 submission.
14
14
 
15
- ## Venue specifics โ€” a DATA card, not a skill
15
+ ## Venue specifics โ€” a CARD beside the venue's preset, not a skill
16
16
  The venue-specific facts (deadline, page limits, tracks, PC-member conflict list, blind model, format
17
- quirks, whether a supplementary-upload field exists, the extension target) live as **plain reference
18
- data files** under `references/venues/<venue>.md`:
19
- - `references/venues/agenticdev.md` โ€” AgenticDev @ ASE (workshop; ACM DL/IEEE Xplore).
20
- - `references/venues/aisec.md` โ€” AISec @ ACM CCS (security workshop; ACM DL; harder bar).
21
-
22
- **The pattern (follow it for every new venue):** when you fetch a venue's exact submission instructions,
23
- save them as a new **data file** `references/venues/<venue>.md` (short `title:` frontmatter only โ€” NOT a
24
- skill with `name:`/`description:`). This preserves the "save the exact venue instructions" rule while
25
- keeping the skill namespace from proliferating one card per venue. The *mechanics* stay here; the venue
26
- file is only the facts.
27
-
28
- **The card is prose; the machine-checked format is a PRESET beside it.** A paper declares its venue
17
+ quirks, whether a supplementary-upload field exists) live in the venue's **card**, `presets/<venue>.md`
18
+ in the paperlint package, beside the preset `presets/<venue>.jsonc` that the lint rules check a
19
+ paper against:
20
+ - `presets/agenticdev.md` โ€” AgenticDev @ ASE (workshop; ASE workshop proceedings).
21
+ - `presets/aisec.md` โ€” AISec @ ACM CCS (security workshop; ACM DL; harder bar).
22
+ - `presets/aidc.md` โ€” AIDC @ IEEE ACSAC (workshop; IEEE template, LLM Usage Statement).
23
+ - `presets/realm.md` โ€” REALM @ EMNLP (ACL family, OpenReview).
24
+
25
+ **The card is prose; the machine-checked format is the PRESET beside it.** A paper declares its venue
29
26
  in `<paper>/paperlint.json`: `{ "extends": "paperlint:<venue>", "kind": "<kind>" }`, and the
30
27
  `pdf/*` lint rules judge the built PDF against that preset (page limit per kind, fonts, page size,
31
- columns, font sizes). A venue with no shipped preset extends a family โ€” `paperlint:acm-sigconf`
32
- for an ACM venue โ€” or a preset of the project's own, `./venues/<name>.jsonc` (paperlint's
33
- `docs/rules.md`, "Writing your own venue preset"). Put the page limits you fetched from the CFP in
34
- the preset's `format.kinds`, each with its quote.
28
+ columns, font sizes). The card's last section โ€” what the preset is, its call for papers, the rules it
29
+ sets and where each comes from โ€” is generated from the preset, so read the numbers there, not from
30
+ memory.
31
+
32
+ **The pattern (follow it for every new venue):** when you fetch a venue's exact submission
33
+ instructions, write the numbers into a preset with their quotes and the rest into a card beside it.
34
+ A venue with no shipped preset extends a family โ€” `paperlint:acm-sigconf` for an ACM venue โ€” in a
35
+ preset of the project's own, `./venues/<name>.jsonc`, with its card `./venues/<name>.md` next to
36
+ it (paperlint's `docs/rules.md`, "Writing your own venue preset"). A venue preset declares
37
+ `"type": "venue"`, the venue's `name` and the `url` of its call for papers. The *mechanics*
38
+ stay here; the card is only the facts.
35
39
 
36
40
  ## Publisher specifics โ€” one level ABOVE the venue
37
41
  Camera-ready mechanics belong to the **publisher**, not the venue: ACM eRights, the submit-vs-final
@@ -148,9 +152,9 @@ convention with no reader.
148
152
  ## Compose with
149
153
  - Harden first: `pc-panel-review` (incl. its venue-fit mode), `paper-adversarial-review`, `render-paper`.
150
154
  - Publisher mechanics (camera-ready): `references/publishers/<publisher>.md`.
151
- - Venue specifics: the matching data card `references/venues/<venue>.md` (e.g.
152
- `references/venues/agenticdev.md`) for deadlines, page limits, PC-member conflict lists, whether
153
- supplementary upload exists, and the extension target.
155
+ - Venue specifics: the venue's card `presets/<venue>.md` in the paperlint package (e.g.
156
+ `presets/agenticdev.md`) for deadlines, page limits, PC-member conflict lists, and whether a
157
+ supplementary upload exists.
154
158
 
155
159
  ## Provenance
156
160
  Written from the AgenticDev 2026 @ ASE submission (2026-07-13): PC-panel-reviewed, self-checking