paperlint 6.2.3 → 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.
- package/CONTRIBUTING.md +4 -2
- package/README.md +10 -3
- package/dist/adapters/hotcrp/index.d.ts +7 -0
- package/dist/adapters/hotcrp/index.d.ts.map +1 -0
- package/dist/adapters/hotcrp/index.js +7 -0
- package/dist/adapters/hotcrp/index.js.map +1 -0
- package/dist/adapters/hotcrp/portal.io.d.ts +20 -0
- package/dist/adapters/hotcrp/portal.io.d.ts.map +1 -0
- package/dist/adapters/hotcrp/portal.io.js +90 -0
- package/dist/adapters/hotcrp/portal.io.js.map +1 -0
- package/dist/adapters/hotcrp/response.d.ts +13 -0
- package/dist/adapters/hotcrp/response.d.ts.map +1 -0
- package/dist/adapters/hotcrp/response.js +138 -0
- package/dist/adapters/hotcrp/response.js.map +1 -0
- package/dist/adapters/latex/conditionals.d.ts +21 -0
- package/dist/adapters/latex/conditionals.d.ts.map +1 -0
- package/dist/adapters/latex/conditionals.js +75 -0
- package/dist/adapters/latex/conditionals.js.map +1 -0
- package/dist/adapters/latex/headings.d.ts +10 -0
- package/dist/adapters/latex/headings.d.ts.map +1 -0
- package/dist/adapters/latex/headings.js +129 -0
- package/dist/adapters/latex/headings.js.map +1 -0
- package/dist/adapters/latex/index.d.ts +1 -0
- package/dist/adapters/latex/index.d.ts.map +1 -1
- package/dist/adapters/latex/index.js +3 -0
- package/dist/adapters/latex/index.js.map +1 -1
- package/dist/adapters/latex/parse.d.ts +1 -1
- package/dist/adapters/latex/parse.d.ts.map +1 -1
- package/dist/adapters/latex/parse.js +3 -2
- package/dist/adapters/latex/parse.js.map +1 -1
- package/dist/build.d.ts +1 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +1 -1
- package/dist/build.js.map +1 -1
- package/dist/cli.d.ts +4 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +126 -37
- package/dist/cli.js.map +1 -1
- package/dist/domain/heading-case.d.ts +100 -0
- package/dist/domain/heading-case.d.ts.map +1 -0
- package/dist/domain/heading-case.js +365 -0
- package/dist/domain/heading-case.js.map +1 -0
- package/dist/domain/result.d.ts +4 -0
- package/dist/domain/result.d.ts.map +1 -1
- package/dist/domain/result.js +2 -0
- package/dist/domain/result.js.map +1 -1
- package/dist/domain/submission.d.ts +106 -0
- package/dist/domain/submission.d.ts.map +1 -0
- package/dist/domain/submission.js +39 -0
- package/dist/domain/submission.js.map +1 -0
- package/dist/domain/tex-document.d.ts +32 -0
- package/dist/domain/tex-document.d.ts.map +1 -1
- package/dist/domain/tex-document.js +11 -0
- package/dist/domain/tex-document.js.map +1 -1
- package/dist/domain/venue-name.d.ts +38 -0
- package/dist/domain/venue-name.d.ts.map +1 -0
- package/dist/domain/venue-name.js +71 -0
- package/dist/domain/venue-name.js.map +1 -0
- package/dist/eslint-rules/latex-language.d.ts.map +1 -1
- package/dist/eslint-rules/latex-language.js +16 -3
- package/dist/eslint-rules/latex-language.js.map +1 -1
- package/dist/facts-file.d.ts +3 -3
- package/dist/facts-file.d.ts.map +1 -1
- package/dist/facts-file.js +3 -3
- package/dist/facts-file.js.map +1 -1
- package/dist/folder-venue-rule.d.ts +51 -0
- package/dist/folder-venue-rule.d.ts.map +1 -0
- package/dist/folder-venue-rule.js +96 -0
- package/dist/folder-venue-rule.js.map +1 -0
- package/dist/heading-case.d.ts +48 -0
- package/dist/heading-case.d.ts.map +1 -0
- package/dist/heading-case.js +191 -0
- package/dist/heading-case.js.map +1 -0
- package/dist/init.d.ts +6 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +3 -3
- package/dist/init.js.map +1 -1
- package/dist/lib/paper-config.d.ts.map +1 -1
- package/dist/lib/paper-config.js +5 -1
- package/dist/lib/paper-config.js.map +1 -1
- package/dist/new-paper.d.ts +19 -5
- package/dist/new-paper.d.ts.map +1 -1
- package/dist/new-paper.js +23 -4
- package/dist/new-paper.js.map +1 -1
- package/dist/paper-settings.d.ts +3 -0
- package/dist/paper-settings.d.ts.map +1 -1
- package/dist/paper-settings.js +20 -4
- package/dist/paper-settings.js.map +1 -1
- package/dist/ports/latex.d.ts +7 -1
- package/dist/ports/latex.d.ts.map +1 -1
- package/dist/ports/submission-portal.d.ts +19 -0
- package/dist/ports/submission-portal.d.ts.map +1 -0
- package/dist/ports/submission-portal.js +2 -0
- package/dist/ports/submission-portal.js.map +1 -0
- package/dist/preset-card-rule.d.ts +100 -0
- package/dist/preset-card-rule.d.ts.map +1 -0
- package/dist/preset-card-rule.js +221 -0
- package/dist/preset-card-rule.js.map +1 -0
- package/dist/presets.d.ts +43 -2
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +130 -63
- package/dist/presets.js.map +1 -1
- package/dist/rules-config.js +1 -1
- package/dist/submission.d.ts +61 -0
- package/dist/submission.d.ts.map +1 -0
- package/dist/submission.js +211 -0
- package/dist/submission.js.map +1 -0
- package/dist/tex-requirements.d.ts +36 -3
- package/dist/tex-requirements.d.ts.map +1 -1
- package/dist/tex-requirements.js +30 -2
- package/dist/tex-requirements.js.map +1 -1
- package/dist/tex-venue-rules.d.ts +7 -8
- package/dist/tex-venue-rules.d.ts.map +1 -1
- package/dist/tex-venue-rules.js +10 -14
- package/dist/tex-venue-rules.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/configuration.md +30 -11
- package/docs/optional-rules.md +4 -3
- package/docs/rules/format/page-limit.md +1 -1
- package/docs/rules/paper/folder-venue-leftover.md +104 -0
- package/docs/rules/talk/captions-cover.md +1 -1
- package/docs/rules/talk/duration-floor.md +1 -1
- package/docs/rules/talk/profile.md +1 -1
- package/docs/rules/tex/heading-case.md +424 -0
- package/docs/rules.md +64 -53
- package/docs/skills.md +5 -4
- package/docs/submission.md +64 -0
- package/docs/talk.md +1 -1
- package/eslint-rules/latex-language.test.mjs +12 -0
- package/eslint-rules/latex-language.ts +17 -4
- package/eslint-rules/paper-typography.test.mjs +12 -0
- package/eslint.config.mjs +59 -1
- package/fixtures/build-e2e/acmart/paper.tex +1 -1
- package/fixtures/build-e2e/fallback/expect.json +3 -3
- package/lib/paper-config.ts +6 -1
- package/lib/skill-checks.d.mts +7 -0
- package/lib/skill-checks.mjs +31 -0
- package/lib/skill-trigger-cases.mjs +11 -0
- package/package.json +8 -2
- package/presets/acm-sigconf.jsonc +5 -0
- package/presets/acm-sigconf.md +43 -0
- package/presets/agenticdev.jsonc +27 -6
- package/presets/agenticdev.md +151 -0
- package/presets/aidc.jsonc +12 -0
- package/presets/aidc.md +75 -0
- package/presets/aisec.jsonc +5 -1
- package/presets/aisec.md +117 -0
- package/presets/ieee-conference.jsonc +5 -0
- package/presets/ieee-conference.md +38 -0
- package/presets/realm.jsonc +7 -2
- package/presets/realm.md +166 -0
- package/presets/tex/agenticdev.tex +1 -1
- package/presets/tex-base.jsonc +6 -0
- package/presets/tex-base.md +30 -0
- package/presets/venue-profile.schema.json +57 -2
- package/skills/find-venue/SKILL.md +6 -5
- package/skills/find-venue/SKILL.md.spec.ts +5 -4
- package/skills/paper-pipeline/SKILL.md +5 -6
- package/skills/paper-pipeline/SKILL.md.spec.ts +4 -5
- package/skills/paper-pipeline/paper-pipeline.harness.mjs +4 -0
- package/skills/paper-pipeline/references/acl-venue-rules.md +1 -1
- package/skills/study-accepted-papers/SKILL.md +3 -3
- package/skills/study-accepted-papers/SKILL.md.spec.ts +2 -2
- package/skills/submission-portal/SKILL.md +69 -0
- package/skills/submission-portal/SKILL.md.spec.ts +71 -0
- package/skills/submission-portal/submission-portal.eval.mjs +15 -0
- package/skills/submission-portal/submission-portal.test.ts +81 -0
- package/skills/submit-paper/SKILL.md +27 -22
- package/skills/submit-paper/SKILL.md.spec.ts +26 -21
- package/skills/submit-paper/references/publishers/acm.md +1 -1
- package/src/adapters/hotcrp/cassette/README.md +24 -0
- package/src/adapters/hotcrp/cassette/get-noauth.json +10 -0
- package/src/adapters/hotcrp/cassette/get-paper.json +39 -0
- package/src/adapters/hotcrp/cassette/post-dot.json +21 -0
- package/src/adapters/hotcrp/cassette/post-ok.json +12 -0
- package/src/adapters/hotcrp/index.ts +11 -0
- package/src/adapters/hotcrp/portal.io.ts +130 -0
- package/src/adapters/hotcrp/portal.test.ts +503 -0
- package/src/adapters/hotcrp/response.ts +181 -0
- package/src/adapters/latex/conditionals.ts +130 -0
- package/src/adapters/latex/headings.ts +163 -0
- package/src/adapters/latex/index.test.ts +65 -0
- package/src/adapters/latex/index.ts +3 -0
- package/src/adapters/latex/parse.ts +3 -2
- package/src/build.ts +2 -2
- package/src/cli.test.ts +155 -3
- package/src/cli.ts +161 -25
- package/src/domain/heading-case.test.ts +660 -0
- package/src/domain/heading-case.ts +538 -0
- package/src/domain/result.test.ts +9 -1
- package/src/domain/result.ts +5 -0
- package/src/domain/submission.test.ts +45 -0
- package/src/domain/submission.ts +141 -0
- package/src/domain/tex-document.ts +36 -0
- package/src/domain/venue-name.test.ts +121 -0
- package/src/domain/venue-name.ts +129 -0
- package/src/facts-file.test.ts +4 -4
- package/src/facts-file.ts +6 -6
- package/src/folder-venue-rule.test.ts +182 -0
- package/src/folder-venue-rule.ts +141 -0
- package/src/heading-case.test.ts +500 -0
- package/src/heading-case.ts +275 -0
- package/src/init.test.ts +22 -0
- package/src/init.ts +9 -2
- package/src/new-paper.harness.mjs +11 -9
- package/src/new-paper.test.ts +135 -10
- package/src/new-paper.ts +38 -7
- package/src/paper-settings-commands.test.ts +25 -10
- package/src/paper-settings.test.ts +12 -1
- package/src/paper-settings.ts +25 -5
- package/src/parse-args.test.ts +19 -0
- package/src/ports/latex.ts +7 -0
- package/src/ports/submission-portal.ts +26 -0
- package/src/preset-card-rule.test.ts +266 -0
- package/src/preset-card-rule.ts +384 -0
- package/src/presets.test.ts +212 -37
- package/src/presets.ts +183 -71
- package/src/rule-cases.test.ts +147 -42
- package/src/rules-config.ts +1 -1
- package/src/submission.test.ts +497 -0
- package/src/submission.ts +311 -0
- package/src/talk-rules.test.ts +6 -3
- package/src/tex-requirements.harness.ts +25 -11
- package/src/tex-requirements.test.ts +127 -1
- package/src/tex-requirements.ts +78 -8
- package/src/tex-venue-rules.test.ts +36 -22
- package/src/tex-venue-rules.ts +14 -26
- package/src/types.ts +13 -0
- package/src/venue-rules.test.ts +7 -6
- package/templates/paper/paper.tex +1 -1
- package/skills/submit-paper/references/venues/agenticdev.md +0 -171
- package/skills/submit-paper/references/venues/aisec.md +0 -105
- package/skills/submit-paper/references/venues/realm.md +0 -155
|
@@ -24,7 +24,12 @@
|
|
|
24
24
|
// aidc.jsonc). The planted defects fail as they should, measured on the same compsoc paper:
|
|
25
25
|
// `a4paper` added to the options → page 8.264 x 11.694 in: pdf/geometry
|
|
26
26
|
// Computer Modern (`\rmdefault{cmr}`) → fonts CMR10, CMBX12, …: pdf/fonts, no NimbusRomNo9L
|
|
27
|
+
//
|
|
28
|
+
// Its card, in prose: `ieee-conference.md` beside this file.
|
|
27
29
|
{
|
|
30
|
+
// A template family: it names no venue, so no `name` and no `url` (the venues that extend it do).
|
|
31
|
+
"type": "family",
|
|
32
|
+
|
|
28
33
|
"template": "\\documentclass[conference]{IEEEtran}",
|
|
29
34
|
|
|
30
35
|
// TeX Live packages the IEEEtran template needs ON TOP OF tex-base.jsonc, each with the files that
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "IEEE IEEEtran conference — template family card"
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# IEEE `IEEEtran` conference
|
|
6
|
+
|
|
7
|
+
The card of the template family `paperlint:ieee-conference`
|
|
8
|
+
([`ieee-conference.jsonc`](ieee-conference.jsonc)). A family is what a publisher's template
|
|
9
|
+
decides, whatever the venue: it names no venue and has no call for papers. A venue preset extends
|
|
10
|
+
it and adds what its own call sets — the class options it names, the page limit of each kind of
|
|
11
|
+
paper, the sections it requires. The template is [IEEEtran on CTAN](https://ctan.org/pkg/ieeetran).
|
|
12
|
+
|
|
13
|
+
## What the family encodes
|
|
14
|
+
|
|
15
|
+
- **The class**: `\documentclass[conference]{IEEEtran}`. A venue that requires `compsoc` names it
|
|
16
|
+
in its own template and its own text block (as `aidc` does).
|
|
17
|
+
- **The page**: US letter, 8.5 × 11 in; the text block of `[conference]`, 7.14 × 9.30 in; two
|
|
18
|
+
columns.
|
|
19
|
+
- **The fonts**: Times (the URW clone the PDF names NimbusRomNo9L) for text, headings and title;
|
|
20
|
+
body at 10 pt, the bibliography at 8 pt (IEEEtran sets it in `\footnotesize`).
|
|
21
|
+
- **TeX packages** on top of the base set: ieeetran, cite, psnfss and times.
|
|
22
|
+
|
|
23
|
+
The numbers are measured, not copied: IEEE's own template files (`bare_conf.tex`,
|
|
24
|
+
`bare_conf_compsoc.tex`) and a 13-page paper built on each with IEEEtran.cls V1.8b, on two TeX Live
|
|
25
|
+
versions. `compsoc` changes the text block and the headings, and nothing the `pdf/*` rules judge.
|
|
26
|
+
|
|
27
|
+
## What the family resolves to
|
|
28
|
+
|
|
29
|
+
<!-- paperlint:preset-rules -->
|
|
30
|
+
<!-- prettier-ignore-start -->
|
|
31
|
+
<!-- Generated from ieee-conference.jsonc by `npx eslint --fix` (rule preset/card-rules). Edit the preset, not this section. -->
|
|
32
|
+
|
|
33
|
+
**`paperlint:ieee-conference`** — template family, no venue of its own · extended by `paperlint:aidc`
|
|
34
|
+
|
|
35
|
+
No preset of this chain sets a rule: under it, every rule keeps paperlint's default.
|
|
36
|
+
|
|
37
|
+
<!-- prettier-ignore-end -->
|
|
38
|
+
<!-- /paperlint:preset-rules -->
|
package/presets/realm.jsonc
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// REALM @ EMNLP 2026 format profile — ACL family, NOT ACM. Prose is in `realm.md`
|
|
2
|
-
// the family's shared rules are in `paper-pipeline/references/acl-venue-rules.md`.
|
|
1
|
+
// REALM @ EMNLP 2026 format profile — ACL family, NOT ACM. Prose is in its card, `realm.md`
|
|
2
|
+
// beside this file; the family's shared rules are in `paper-pipeline/references/acl-venue-rules.md`.
|
|
3
3
|
//
|
|
4
4
|
// 🔴 THE GEOMETRY NUMBERS ARE MEASURED, NOT COPIED. banal run against our own build
|
|
5
5
|
// (`repro/build-submission.sh` → `build/acl_latex.pdf`, 2026-08-26):
|
|
@@ -8,6 +8,11 @@
|
|
|
8
8
|
// acmart (letter 8.5x11, size 9, Libertine) shares NOTHING with this — copying the numbers from
|
|
9
9
|
// `agenticdev.jsonc` would give a gate that reddens on a correct paper.
|
|
10
10
|
{
|
|
11
|
+
"type": "venue",
|
|
12
|
+
"name": "REALM",
|
|
13
|
+
// The workshop's call for papers, which the page limits below are quoted from.
|
|
14
|
+
"url": "https://realm-workshop.github.io/call_for_papers",
|
|
15
|
+
|
|
11
16
|
// ACL's template is not a class: `acl_latex.tex` opens with `\documentclass[11pt]{article}` and
|
|
12
17
|
// loads `acl.sty` as a package (https://github.com/acl-org/acl-style-files, checked 2026-09-27).
|
|
13
18
|
// So the class `tex/template` compares against is article, at 11pt.
|
package/presets/realm.md
ADDED
|
@@ -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
|
|
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
|
package/presets/tex-base.jsonc
CHANGED
|
@@ -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
|
|
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
|
},
|
|
@@ -29,7 +39,7 @@
|
|
|
29
39
|
"type": "boolean"
|
|
30
40
|
},
|
|
31
41
|
"aliases": {
|
|
32
|
-
"description": "Other names the venue goes by in a paper's text — its acronym, its parent conference (`[\"AISec\", \"ACM CCS\"]`). Read by `tex/venue-leftover`: a paper that extends another venue and says one of these is flagged. Matched as whole words, case-sensitive. Collected along the `extends` chain, with `name`.",
|
|
42
|
+
"description": "Other names the venue goes by in a paper's text — its acronym, its parent conference (`[\"AISec\", \"ACM CCS\"]`). Read by `tex/venue-leftover`: a paper that extends another venue and says one of these is flagged. Matched as whole words, case-sensitive. Also read by `paper/folder-venue-leftover`, against the words of the paper's folder name, case ignored. Collected along the `extends` chain, with `name`.",
|
|
33
43
|
"type": "array",
|
|
34
44
|
"uniqueItems": true,
|
|
35
45
|
"items": {
|
|
@@ -37,6 +47,22 @@
|
|
|
37
47
|
"minLength": 1
|
|
38
48
|
}
|
|
39
49
|
},
|
|
50
|
+
"portal": {
|
|
51
|
+
"description": "Where the venue takes submissions, read by `paperlint submission`: the portal's kind (an adapter exists for `hotcrp`) and the site's base URL, the one its pages and `/api/` hang off. A paper says which submission is its own with `submission: { id }` in its paperlint.json. A child's value replaces its parent's.",
|
|
52
|
+
"type": "object",
|
|
53
|
+
"additionalProperties": false,
|
|
54
|
+
"required": ["kind", "url"],
|
|
55
|
+
"properties": {
|
|
56
|
+
"kind": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"minLength": 1
|
|
59
|
+
},
|
|
60
|
+
"url": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"pattern": "^https?://[^\\s/]+[^\\s]*$"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
40
66
|
"required_sections": {
|
|
41
67
|
"description": "Sections the venue requires, read by `tex/required-section`. Each is a `\\section` or `\\section*` whose title equals `title` once whitespace is collapsed. `position: \"last\"`: after every section of the body (the ones before the appendix and the bibliography); it may stand after the bibliography. A child preset's list replaces its parent's.",
|
|
42
68
|
"type": "array",
|
|
@@ -320,6 +346,7 @@
|
|
|
320
346
|
}
|
|
321
347
|
}
|
|
322
348
|
},
|
|
349
|
+
"required": ["type"],
|
|
323
350
|
"allOf": [
|
|
324
351
|
{
|
|
325
352
|
"if": {
|
|
@@ -330,6 +357,34 @@
|
|
|
330
357
|
"then": {
|
|
331
358
|
"required": ["tex"]
|
|
332
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
|
+
}
|
|
333
388
|
}
|
|
334
389
|
],
|
|
335
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
|
|
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:
|
|
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
|
-
-
|
|
85
|
-
`aisec.md`) — the winner gets a
|
|
86
|
-
venue
|
|
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
|
|
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
|
-
-
|
|
91
|
-
\`aisec.md\`) — the winner gets a
|
|
92
|
-
venue
|
|
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:
|
|
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
|
-
`
|
|
32
|
-
|
|
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 (`
|
|
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
|
-
\`
|
|
49
|
-
|
|
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 (\`
|
|
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\`. |
|
|
@@ -94,6 +94,10 @@ const NOT_IN_MAP = new Map([
|
|
|
94
94
|
"osf-artifact-upload",
|
|
95
95
|
"a helper that uploads an artifact file, not a stage of writing a paper",
|
|
96
96
|
],
|
|
97
|
+
[
|
|
98
|
+
"submission-portal",
|
|
99
|
+
"a helper that reads and updates the submission on the portal, reached through `submit-paper`",
|
|
100
|
+
],
|
|
97
101
|
]);
|
|
98
102
|
|
|
99
103
|
for (const name of dirs) {
|
|
@@ -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 `
|
|
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:
|
|
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
|
|
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
|
-
-
|
|
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
|
|
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
|
-
-
|
|
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
|