paperlint 6.3.0 → 7.1.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 +20 -13
- 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 +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +19 -5
- package/dist/cli.js.map +1 -1
- package/dist/domain/body-pages.d.ts +29 -0
- package/dist/domain/body-pages.d.ts.map +1 -1
- package/dist/domain/body-pages.js +25 -0
- package/dist/domain/body-pages.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/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/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.js +6 -6
- package/dist/folder-venue-rule.js.map +1 -1
- 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/paper-includes.d.ts +3 -0
- package/dist/paper-includes.d.ts.map +1 -1
- package/dist/paper-includes.js +17 -2
- package/dist/paper-includes.js.map +1 -1
- package/dist/ports/latex.d.ts +7 -1
- package/dist/ports/latex.d.ts.map +1 -1
- 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 +29 -5
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +104 -68
- package/dist/presets.js.map +1 -1
- package/dist/submission.d.ts +8 -0
- package/dist/submission.d.ts.map +1 -1
- package/dist/submission.js +19 -7
- package/dist/submission.js.map +1 -1
- package/dist/tex-requirements.d.ts +42 -3
- package/dist/tex-requirements.d.ts.map +1 -1
- package/dist/tex-requirements.js +34 -5
- package/dist/tex-requirements.js.map +1 -1
- package/dist/tex-venue-rules.d.ts +6 -3
- package/dist/tex-venue-rules.d.ts.map +1 -1
- package/dist/tex-venue-rules.js +29 -10
- package/dist/tex-venue-rules.js.map +1 -1
- package/dist/venue-rules.d.ts +2 -1
- package/dist/venue-rules.d.ts.map +1 -1
- package/dist/venue-rules.js +55 -7
- package/dist/venue-rules.js.map +1 -1
- package/docs/configuration.md +13 -1
- package/docs/e2e.md +14 -12
- package/docs/optional-rules.md +4 -3
- package/docs/rules/format/page-limit.md +19 -2
- package/docs/rules/paper/folder-venue-leftover.md +1 -1
- package/docs/rules/talk/profile.md +1 -1
- package/docs/rules/tex/heading-case.md +424 -0
- package/docs/rules/tex/template.md +25 -5
- package/docs/rules/tex/venue-leftover.md +13 -0
- package/docs/rules.md +74 -57
- package/docs/submission.md +5 -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/fixtures/build-e2e/msr/PIPELINE-STATUS.md +3 -0
- package/fixtures/build-e2e/msr/expect.json +18 -0
- package/fixtures/build-e2e/msr/paper.tex +49 -0
- package/fixtures/build-e2e/msr/paperlint.json +1 -0
- package/fixtures/build-e2e/msr-appendix-after/PIPELINE-STATUS.md +3 -0
- package/fixtures/build-e2e/msr-appendix-after/expect.json +20 -0
- package/fixtures/build-e2e/msr-appendix-after/paper.tex +48 -0
- package/fixtures/build-e2e/msr-appendix-after/paperlint.json +1 -0
- package/lib/skill-checks.mjs +31 -0
- package/package.json +7 -1
- 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 +6 -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/msr.jsonc +71 -0
- package/presets/msr.md +94 -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 +65 -1
- package/skills/camera-ready/SKILL.md +8 -1
- package/skills/camera-ready/SKILL.md.spec.ts +7 -0
- 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/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 +2 -2
- package/skills/submission-portal/SKILL.md.spec.ts +1 -1
- package/skills/submit-paper/SKILL.md +34 -22
- package/skills/submit-paper/SKILL.md.spec.ts +33 -21
- package/skills/submit-paper/references/publishers/acm.md +1 -1
- 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 +50 -7
- package/src/cli.ts +28 -6
- package/src/domain/body-pages.test.ts +144 -0
- package/src/domain/body-pages.ts +61 -1
- package/src/domain/heading-case.test.ts +660 -0
- package/src/domain/heading-case.ts +538 -0
- package/src/domain/tex-document.ts +36 -0
- package/src/domain/venue-name.test.ts +13 -7
- package/src/facts-file.test.ts +4 -4
- package/src/facts-file.ts +6 -6
- package/src/folder-venue-rule.test.ts +10 -10
- package/src/folder-venue-rule.ts +6 -6
- package/src/heading-case.test.ts +500 -0
- package/src/heading-case.ts +275 -0
- package/src/init.test.ts +1 -1
- package/src/new-paper.test.ts +37 -6
- package/src/paper-includes.test.ts +26 -0
- package/src/paper-includes.ts +20 -2
- package/src/paper-settings-commands.test.ts +26 -11
- package/src/ports/latex.ts +7 -0
- package/src/preset-card-rule.test.ts +267 -0
- package/src/preset-card-rule.ts +384 -0
- package/src/presets.test.ts +259 -41
- package/src/presets.ts +161 -75
- package/src/rule-cases.test.ts +136 -50
- package/src/submission.test.ts +44 -4
- package/src/submission.ts +28 -7
- 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 +91 -12
- package/src/tex-venue-rules.test.ts +196 -21
- package/src/tex-venue-rules.ts +47 -16
- package/src/venue-rules.test.ts +180 -8
- package/src/venue-rules.ts +71 -10
- 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
|
@@ -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
|
},
|
|
@@ -24,6 +34,16 @@
|
|
|
24
34
|
"type": "string",
|
|
25
35
|
"minLength": 1
|
|
26
36
|
},
|
|
37
|
+
"template_forbids": {
|
|
38
|
+
"description": "Class options the venue's call forbids in the \\documentclass line (`[\"compsoc\", \"compsocconf\"]`: MSR's «without including the compsoc or compsocconf options»). `tex/template` reports each one a paper's class line carries. Read with the `template` of the same file, and only with it: a child's `template` replaces both.",
|
|
39
|
+
"type": "array",
|
|
40
|
+
"minItems": 1,
|
|
41
|
+
"uniqueItems": true,
|
|
42
|
+
"items": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"minLength": 1
|
|
45
|
+
}
|
|
46
|
+
},
|
|
27
47
|
"blind": {
|
|
28
48
|
"description": "The venue reviews double-blind: its call says submissions must be anonymized. Read by `anonymity/identity`, which then requires the paper's `identity` and finds none of it in the PDF. Set only where the venue says so, with the quote. A child's value replaces its parent's.",
|
|
29
49
|
"type": "boolean"
|
|
@@ -37,6 +57,11 @@
|
|
|
37
57
|
"minLength": 1
|
|
38
58
|
}
|
|
39
59
|
},
|
|
60
|
+
"mentions": {
|
|
61
|
+
"description": "When the venue's `name` and `aliases` count as naming it in a paper's text (`tex/venue-leftover`). Absent: any whole-word use. `with-year`: only with a year beside the name — `MSR 2027`, `MSR'27`, `MSR~2027` — for a name that is also a common acronym (MSR: Microsoft Research, or an acronym a paper defines), where a bare use names something else far more often than the venue. A child's value replaces its parent's.",
|
|
62
|
+
"type": "string",
|
|
63
|
+
"enum": ["with-year"]
|
|
64
|
+
},
|
|
40
65
|
"portal": {
|
|
41
66
|
"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.",
|
|
42
67
|
"type": "object",
|
|
@@ -76,6 +101,9 @@
|
|
|
76
101
|
"description": "What the venue's call for papers sets. Every key is optional; a child preset's key replaces its parent's, and a child's kind replaces that kind.",
|
|
77
102
|
"type": "object",
|
|
78
103
|
"additionalProperties": false,
|
|
104
|
+
"dependencies": {
|
|
105
|
+
"appendix_in_body": ["body_ends_at"]
|
|
106
|
+
},
|
|
79
107
|
"properties": {
|
|
80
108
|
"page_size": {
|
|
81
109
|
"type": "string",
|
|
@@ -130,6 +158,10 @@
|
|
|
130
158
|
"type": "string",
|
|
131
159
|
"enum": ["references"]
|
|
132
160
|
},
|
|
161
|
+
"appendix_in_body": {
|
|
162
|
+
"description": "With `body_ends_at: references`: the venue counts its appendices in the body limit and allows reference pages that hold only references (MSR: «10 pages for the main text, inclusive of all figures, tables, appendices, etc. Two more pages containing only references are permitted.»). `format/page-limit` then counts as body the pages up to the references and, when the appendix starts after them, every page from the appendix (found by hyperref's anchor) to the last; the pages between are the reference pages, judged against `ref_pages_max`. An appendix before the references is body and ends nothing.",
|
|
163
|
+
"type": "boolean"
|
|
164
|
+
},
|
|
133
165
|
"page_limits_not_gated": {
|
|
134
166
|
"type": "object"
|
|
135
167
|
},
|
|
@@ -336,6 +368,10 @@
|
|
|
336
368
|
}
|
|
337
369
|
}
|
|
338
370
|
},
|
|
371
|
+
"required": ["type"],
|
|
372
|
+
"dependencies": {
|
|
373
|
+
"template_forbids": ["template"]
|
|
374
|
+
},
|
|
339
375
|
"allOf": [
|
|
340
376
|
{
|
|
341
377
|
"if": {
|
|
@@ -346,6 +382,34 @@
|
|
|
346
382
|
"then": {
|
|
347
383
|
"required": ["tex"]
|
|
348
384
|
}
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
"if": {
|
|
388
|
+
"required": ["type"],
|
|
389
|
+
"properties": { "type": { "const": "venue" } }
|
|
390
|
+
},
|
|
391
|
+
"then": {
|
|
392
|
+
"required": ["name", "url"]
|
|
393
|
+
}
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
"if": {
|
|
397
|
+
"required": ["type"],
|
|
398
|
+
"properties": { "type": { "const": "family" } }
|
|
399
|
+
},
|
|
400
|
+
"then": {
|
|
401
|
+
"properties": { "name": false, "url": false }
|
|
402
|
+
}
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
"if": {
|
|
406
|
+
"required": ["type"],
|
|
407
|
+
"properties": { "type": { "const": "base" } }
|
|
408
|
+
},
|
|
409
|
+
"then": {
|
|
410
|
+
"required": ["type", "tex"],
|
|
411
|
+
"maxProperties": 2
|
|
412
|
+
}
|
|
349
413
|
}
|
|
350
414
|
],
|
|
351
415
|
"definitions": {
|
|
@@ -4,7 +4,7 @@ description: On acceptance, turn the anonymized-for-review paper into the de-ano
|
|
|
4
4
|
allowed-tools: [Read, Write, Edit, Grep, Glob, Bash, WebSearch, WebFetch]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
<!-- vigiles:sha256:
|
|
7
|
+
<!-- vigiles:sha256:1c9ad89e55c3e89a compiled from skills/camera-ready/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# camera-ready — de-anonymize an accepted paper into the final proceedings version
|
|
10
10
|
|
|
@@ -94,6 +94,13 @@ and going over is a hard reject at the proceedings stage. Recompile
|
|
|
94
94
|
If tight, ACM allows references to spill into the reference-only extra pages.
|
|
95
95
|
|
|
96
96
|
## 5. Ship
|
|
97
|
+
- **Before the final PDF goes up, hand the last check to the author, in plain words.** Tell them that
|
|
98
|
+
paperlint passing is not the venue or the publisher accepting the format, and ask them to open the
|
|
99
|
+
exact PDF they are about to upload and check it against the venue's call for papers and its
|
|
100
|
+
camera-ready instructions themselves — the page count and what counts toward the limit (the
|
|
101
|
+
camera-ready's extra page, if any), the template and its class options, the author block and
|
|
102
|
+
acknowledgements now de-anonymized, and that every figure, table and reference renders. Upload once
|
|
103
|
+
they say they have looked.
|
|
97
104
|
- Rebuild the final PDF, upload to the camera-ready system (often the same HotCRP, or an ACM eRights /
|
|
98
105
|
TAPS pipeline — follow the copyright email).
|
|
99
106
|
- Complete the **ACM/IEEE eRights** copyright form → paste the returned copyright block + DOI into the
|
|
@@ -109,6 +109,13 @@ and going over is a hard reject at the proceedings stage. Recompile
|
|
|
109
109
|
If tight, ACM allows references to spill into the reference-only extra pages.
|
|
110
110
|
|
|
111
111
|
## 5. Ship
|
|
112
|
+
- **Before the final PDF goes up, hand the last check to the author, in plain words.** Tell them that
|
|
113
|
+
paperlint passing is not the venue or the publisher accepting the format, and ask them to open the
|
|
114
|
+
exact PDF they are about to upload and check it against the venue's call for papers and its
|
|
115
|
+
camera-ready instructions themselves — the page count and what counts toward the limit (the
|
|
116
|
+
camera-ready's extra page, if any), the template and its class options, the author block and
|
|
117
|
+
acknowledgements now de-anonymized, and that every figure, table and reference renders. Upload once
|
|
118
|
+
they say they have looked.
|
|
112
119
|
- Rebuild the final PDF, upload to the camera-ready system (often the same HotCRP, or an ACM eRights /
|
|
113
120
|
TAPS pipeline — follow the copyright email).
|
|
114
121
|
- Complete the **ACM/IEEE eRights** copyright form → paste the returned copyright block + DOI into the
|
|
@@ -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\`. |
|
|
@@ -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
|
|
@@ -4,7 +4,7 @@ description: "Read or change a paper's submission on the venue's HotCRP portal v
|
|
|
4
4
|
allowed-tools: [Read, Grep, Glob, Bash]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
<!-- vigiles:sha256:
|
|
7
|
+
<!-- vigiles:sha256:4b3a8c0b51ebe206 compiled from skills/submission-portal/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# submission-portal — read and update the submission on the portal, then prove it landed
|
|
10
10
|
|
|
@@ -14,7 +14,7 @@ supported; for any other portal the command says so and the upload is done by ha
|
|
|
14
14
|
## What must be in place
|
|
15
15
|
|
|
16
16
|
- **The venue preset declares the portal**: `"portal": { "kind": "hotcrp", "url": "<the site>" }`
|
|
17
|
-
(`paperlint:aidc`
|
|
17
|
+
(`paperlint:aidc` and `paperlint:msr` have it). For your own venue preset, add it there.
|
|
18
18
|
- **The paper's `paperlint.json` names its submission**: `"submission": { "id": <number> }` — the
|
|
19
19
|
number HotCRP shows for the paper.
|
|
20
20
|
- **A token in `HOTCRP_TOKEN`**, created by the author on the HotCRP site under Account settings →
|
|
@@ -15,7 +15,7 @@ supported; for any other portal the command says so and the upload is done by ha
|
|
|
15
15
|
## What must be in place
|
|
16
16
|
|
|
17
17
|
- **The venue preset declares the portal**: \`"portal": { "kind": "hotcrp", "url": "<the site>" }\`
|
|
18
|
-
(\`paperlint:aidc\`
|
|
18
|
+
(\`paperlint:aidc\` and \`paperlint:msr\` have it). For your own venue preset, add it there.
|
|
19
19
|
- **The paper's \`paperlint.json\` names its submission**: \`"submission": { "id": <number> }\` — the
|
|
20
20
|
number HotCRP shows for the paper.
|
|
21
21
|
- **A token in \`HOTCRP_TOKEN\`**, created by the author on the HotCRP site under Account settings →
|
|
@@ -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
|
|
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:
|
|
7
|
+
<!-- vigiles:sha256:81d5777962c2864a 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,31 @@ 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
|
|
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
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
- `
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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/msr.md` — MSR Technical Papers (conference; IEEE template from 2027, appendices count in the page limit).
|
|
24
|
+
- `presets/realm.md` — REALM @ EMNLP (ACL family, OpenReview).
|
|
25
|
+
|
|
26
|
+
**The card is prose; the machine-checked format is the PRESET beside it.** A paper declares its venue
|
|
29
27
|
in `<paper>/paperlint.json`: `{ "extends": "paperlint:<venue>", "kind": "<kind>" }`, and the
|
|
30
28
|
`pdf/*` lint rules judge the built PDF against that preset (page limit per kind, fonts, page size,
|
|
31
|
-
columns, font sizes).
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
29
|
+
columns, font sizes). The card's last section — what the preset is, its call for papers, the rules it
|
|
30
|
+
sets and where each comes from — is generated from the preset, so read the numbers there, not from
|
|
31
|
+
memory.
|
|
32
|
+
|
|
33
|
+
**The pattern (follow it for every new venue):** when you fetch a venue's exact submission
|
|
34
|
+
instructions, write the numbers into a preset with their quotes and the rest into a card beside it.
|
|
35
|
+
A venue with no shipped preset extends a family — `paperlint:acm-sigconf` for an ACM venue — in a
|
|
36
|
+
preset of the project's own, `./venues/<name>.jsonc`, with its card `./venues/<name>.md` next to
|
|
37
|
+
it (paperlint's `docs/rules.md`, "Writing your own venue preset"). A venue preset declares
|
|
38
|
+
`"type": "venue"`, the venue's `name` and the `url` of its call for papers. The *mechanics*
|
|
39
|
+
stay here; the card is only the facts.
|
|
35
40
|
|
|
36
41
|
## Publisher specifics — one level ABOVE the venue
|
|
37
42
|
Camera-ready mechanics belong to the **publisher**, not the venue: ACM eRights, the submit-vs-final
|
|
@@ -106,6 +111,13 @@ Many workshop HotCRPs have **no supplementary-upload field** — check first; if
|
|
|
106
111
|
An independent researcher with no ties usually checks **none** — that's honest.
|
|
107
112
|
|
|
108
113
|
## 5. Submit
|
|
114
|
+
- **Before the PDF goes up — and before every Replace — hand the last check to the author, in plain
|
|
115
|
+
words.** Tell them that paperlint passing is not the venue accepting the format: the preset is
|
|
116
|
+
transcribed from a call that can change, and any check can miss something. Ask them to open the
|
|
117
|
+
exact PDF they are about to upload and check it against the venue's call for papers themselves —
|
|
118
|
+
the page count and what counts toward the limit (appendices, references), the template and its
|
|
119
|
+
class options, anonymity, and that every figure, table and reference renders. Upload once they say
|
|
120
|
+
they have looked. (`paperlint submission update` prints the same request before it sends.)
|
|
109
121
|
- **Save and submit**, then **mark it "ready for review."** A saved draft alone is NOT evaluated — this
|
|
110
122
|
is the step people miss.
|
|
111
123
|
- You can edit until the deadline: use **Replace** on the Submission field to swap the PDF for a late
|
|
@@ -148,9 +160,9 @@ convention with no reader.
|
|
|
148
160
|
## Compose with
|
|
149
161
|
- Harden first: `pc-panel-review` (incl. its venue-fit mode), `paper-adversarial-review`, `render-paper`.
|
|
150
162
|
- Publisher mechanics (camera-ready): `references/publishers/<publisher>.md`.
|
|
151
|
-
- Venue specifics: the
|
|
152
|
-
`
|
|
153
|
-
supplementary upload exists
|
|
163
|
+
- Venue specifics: the venue's card `presets/<venue>.md` in the paperlint package (e.g.
|
|
164
|
+
`presets/agenticdev.md`) for deadlines, page limits, PC-member conflict lists, and whether a
|
|
165
|
+
supplementary upload exists.
|
|
154
166
|
|
|
155
167
|
## Provenance
|
|
156
168
|
Written from the AgenticDev 2026 @ ASE submission (2026-07-13): PC-panel-reviewed, self-checking
|
|
@@ -9,7 +9,7 @@ import { experimental_skill } from "vigiles/spec";
|
|
|
9
9
|
export default experimental_skill({
|
|
10
10
|
name: "submit-paper",
|
|
11
11
|
description:
|
|
12
|
-
'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
|
|
12
|
+
'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.',
|
|
13
13
|
tools: [
|
|
14
14
|
"Read",
|
|
15
15
|
"Write",
|
|
@@ -28,26 +28,31 @@ Assumes the paper is already hardened (run \`pc-panel-review\` — incl. its ven
|
|
|
28
28
|
\`paper-adversarial-review\` first). This skill is the submission mechanics — the part that bit us with
|
|
29
29
|
avoidable friction the first time. Distilled from the AgenticDev 2026 submission.
|
|
30
30
|
|
|
31
|
-
## Venue specifics — a
|
|
31
|
+
## Venue specifics — a CARD beside the venue's preset, not a skill
|
|
32
32
|
The venue-specific facts (deadline, page limits, tracks, PC-member conflict list, blind model, format
|
|
33
|
-
quirks, whether a supplementary-upload field exists
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
- \`
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
**The card is prose; the machine-checked format is a PRESET beside it.** A paper declares its venue
|
|
33
|
+
quirks, whether a supplementary-upload field exists) live in the venue's **card**, \`presets/<venue>.md\`
|
|
34
|
+
in the paperlint package, beside the preset \`presets/<venue>.jsonc\` that the lint rules check a
|
|
35
|
+
paper against:
|
|
36
|
+
- \`presets/agenticdev.md\` — AgenticDev @ ASE (workshop; ASE workshop proceedings).
|
|
37
|
+
- \`presets/aisec.md\` — AISec @ ACM CCS (security workshop; ACM DL; harder bar).
|
|
38
|
+
- \`presets/aidc.md\` — AIDC @ IEEE ACSAC (workshop; IEEE template, LLM Usage Statement).
|
|
39
|
+
- \`presets/msr.md\` — MSR Technical Papers (conference; IEEE template from 2027, appendices count in the page limit).
|
|
40
|
+
- \`presets/realm.md\` — REALM @ EMNLP (ACL family, OpenReview).
|
|
41
|
+
|
|
42
|
+
**The card is prose; the machine-checked format is the PRESET beside it.** A paper declares its venue
|
|
45
43
|
in \`<paper>/paperlint.json\`: \`{ "extends": "paperlint:<venue>", "kind": "<kind>" }\`, and the
|
|
46
44
|
\`pdf/*\` lint rules judge the built PDF against that preset (page limit per kind, fonts, page size,
|
|
47
|
-
columns, font sizes).
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
columns, font sizes). The card's last section — what the preset is, its call for papers, the rules it
|
|
46
|
+
sets and where each comes from — is generated from the preset, so read the numbers there, not from
|
|
47
|
+
memory.
|
|
48
|
+
|
|
49
|
+
**The pattern (follow it for every new venue):** when you fetch a venue's exact submission
|
|
50
|
+
instructions, write the numbers into a preset with their quotes and the rest into a card beside it.
|
|
51
|
+
A venue with no shipped preset extends a family — \`paperlint:acm-sigconf\` for an ACM venue — in a
|
|
52
|
+
preset of the project's own, \`./venues/<name>.jsonc\`, with its card \`./venues/<name>.md\` next to
|
|
53
|
+
it (paperlint's \`docs/rules.md\`, "Writing your own venue preset"). A venue preset declares
|
|
54
|
+
\`"type": "venue"\`, the venue's \`name\` and the \`url\` of its call for papers. The *mechanics*
|
|
55
|
+
stay here; the card is only the facts.
|
|
51
56
|
|
|
52
57
|
## Publisher specifics — one level ABOVE the venue
|
|
53
58
|
Camera-ready mechanics belong to the **publisher**, not the venue: ACM eRights, the submit-vs-final
|
|
@@ -122,6 +127,13 @@ Many workshop HotCRPs have **no supplementary-upload field** — check first; if
|
|
|
122
127
|
An independent researcher with no ties usually checks **none** — that's honest.
|
|
123
128
|
|
|
124
129
|
## 5. Submit
|
|
130
|
+
- **Before the PDF goes up — and before every Replace — hand the last check to the author, in plain
|
|
131
|
+
words.** Tell them that paperlint passing is not the venue accepting the format: the preset is
|
|
132
|
+
transcribed from a call that can change, and any check can miss something. Ask them to open the
|
|
133
|
+
exact PDF they are about to upload and check it against the venue's call for papers themselves —
|
|
134
|
+
the page count and what counts toward the limit (appendices, references), the template and its
|
|
135
|
+
class options, anonymity, and that every figure, table and reference renders. Upload once they say
|
|
136
|
+
they have looked. (\`paperlint submission update\` prints the same request before it sends.)
|
|
125
137
|
- **Save and submit**, then **mark it "ready for review."** A saved draft alone is NOT evaluated — this
|
|
126
138
|
is the step people miss.
|
|
127
139
|
- You can edit until the deadline: use **Replace** on the Submission field to swap the PDF for a late
|
|
@@ -164,9 +176,9 @@ convention with no reader.
|
|
|
164
176
|
## Compose with
|
|
165
177
|
- Harden first: \`pc-panel-review\` (incl. its venue-fit mode), \`paper-adversarial-review\`, \`render-paper\`.
|
|
166
178
|
- Publisher mechanics (camera-ready): \`references/publishers/<publisher>.md\`.
|
|
167
|
-
- Venue specifics: the
|
|
168
|
-
\`
|
|
169
|
-
supplementary upload exists
|
|
179
|
+
- Venue specifics: the venue's card \`presets/<venue>.md\` in the paperlint package (e.g.
|
|
180
|
+
\`presets/agenticdev.md\`) for deadlines, page limits, PC-member conflict lists, and whether a
|
|
181
|
+
supplementary upload exists.
|
|
170
182
|
|
|
171
183
|
## Provenance
|
|
172
184
|
Written from the AgenticDev 2026 @ ASE submission (2026-07-13): PC-panel-reviewed, self-checking
|
|
@@ -8,7 +8,7 @@ tags: [publisher, acm, camera-ready, erights, ccs]
|
|
|
8
8
|
# ACM: what camera-ready requires
|
|
9
9
|
|
|
10
10
|
> This is the **publisher** level, not the venue level. Identical for AgenticDev@ASE, AISec@CCS,
|
|
11
|
-
> and any other ACM conference. The venue card (
|
|
11
|
+
> and any other ACM conference. The venue card (`presets/<venue>.md` in the paperlint package) holds only what's its own:
|
|
12
12
|
> dates, page limit, its own DOI/ISBN, blind model.
|
|
13
13
|
>
|
|
14
14
|
> Captured 2026-08-24 from the live AgenticDev #20 HotCRP form — field by field, not from memory.
|