paperlint 11.0.0 → 11.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/dist/adapters/hotcrp/index.d.ts +1 -1
- package/dist/adapters/hotcrp/index.d.ts.map +1 -1
- package/dist/adapters/hotcrp/index.js +1 -1
- package/dist/adapters/hotcrp/index.js.map +1 -1
- package/dist/adapters/hotcrp/portal.io.d.ts.map +1 -1
- package/dist/adapters/hotcrp/portal.io.js +17 -2
- package/dist/adapters/hotcrp/portal.io.js.map +1 -1
- package/dist/adapters/hotcrp/response.d.ts +7 -1
- package/dist/adapters/hotcrp/response.d.ts.map +1 -1
- package/dist/adapters/hotcrp/response.js +35 -3
- package/dist/adapters/hotcrp/response.js.map +1 -1
- package/dist/adapters/hotcrp/site.d.ts +1 -1
- package/dist/adapters/hotcrp/site.d.ts.map +1 -1
- package/dist/adapters/hotcrp/site.js +1 -2
- package/dist/adapters/hotcrp/site.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -1
- package/dist/cli.js.map +1 -1
- package/dist/domain/submission-fields.d.ts +77 -0
- package/dist/domain/submission-fields.d.ts.map +1 -0
- package/dist/domain/submission-fields.js +127 -0
- package/dist/domain/submission-fields.js.map +1 -0
- package/dist/domain/submission.d.ts +10 -0
- package/dist/domain/submission.d.ts.map +1 -1
- package/dist/domain/submission.js.map +1 -1
- package/dist/lib/paper-config.d.ts.map +1 -1
- package/dist/lib/paper-config.js +2 -0
- package/dist/lib/paper-config.js.map +1 -1
- package/dist/paper-settings.d.ts +5 -0
- package/dist/paper-settings.d.ts.map +1 -1
- package/dist/paper-settings.js +5 -2
- package/dist/paper-settings.js.map +1 -1
- package/dist/ports/submission-portal.d.ts +3 -1
- package/dist/ports/submission-portal.d.ts.map +1 -1
- package/dist/presets.d.ts +3 -0
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +3 -1
- package/dist/presets.js.map +1 -1
- package/dist/submission.d.ts +24 -5
- package/dist/submission.d.ts.map +1 -1
- package/dist/submission.js +140 -50
- package/dist/submission.js.map +1 -1
- package/dist/tex-requirements.d.ts +3 -0
- 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/docs/submission.md +29 -6
- package/lib/paper-config.ts +3 -0
- package/package.json +1 -1
- package/presets/msr.jsonc +66 -0
- package/presets/venue-profile.schema.json +41 -0
- package/skills/submission-portal/SKILL.md +51 -20
- package/skills/submission-portal/SKILL.md.spec.ts +50 -19
- package/src/adapters/hotcrp/cassette/README.md +7 -6
- package/src/adapters/hotcrp/cassette/get-searchcompletion.json +100 -0
- package/src/adapters/hotcrp/index.ts +1 -0
- package/src/adapters/hotcrp/portal.io.ts +22 -2
- package/src/adapters/hotcrp/portal.test.ts +103 -2
- package/src/adapters/hotcrp/response.ts +45 -4
- package/src/adapters/hotcrp/site.ts +2 -3
- package/src/cli.ts +6 -1
- package/src/domain/submission-fields.test.ts +183 -0
- package/src/domain/submission-fields.ts +190 -0
- package/src/domain/submission.ts +11 -0
- package/src/new-paper.test.ts +1 -0
- package/src/paper-settings.test.ts +6 -0
- package/src/paper-settings.ts +11 -3
- package/src/ports/submission-portal.ts +3 -0
- package/src/presets.ts +12 -2
- package/src/submission-fields-run.test.ts +247 -0
- package/src/submission-new.test.ts +4 -4
- package/src/submission-update.test.ts +7 -1
- package/src/submission.test.ts +1 -1
- package/src/submission.ts +207 -54
- package/src/tex-requirements.test.ts +21 -0
- package/src/tex-requirements.ts +67 -2
package/dist/tex-requirements.js
CHANGED
|
@@ -29,6 +29,7 @@ import { presetsDir } from "./package-dirs.js";
|
|
|
29
29
|
import { CONFIG_FILE } from "#lib/paper-config";
|
|
30
30
|
import { fieldOf } from "./domain/record.js";
|
|
31
31
|
import { venueTalkOf, } from "./domain/talk.js";
|
|
32
|
+
import { RESERVED_FIELD_KEYS, reservedKey, } from "./domain/submission-fields.js";
|
|
32
33
|
/** The profile every paper gets, and the only one a paper with an unknown venue gets. */
|
|
33
34
|
export const BASE_PROFILE = "tex-base.jsonc";
|
|
34
35
|
export const SCHEMA_FILE = "venue-profile.schema.json";
|
|
@@ -86,6 +87,28 @@ export const NO_FORMAT = {
|
|
|
86
87
|
appendixInBody: null,
|
|
87
88
|
kinds: new Map(),
|
|
88
89
|
};
|
|
90
|
+
/** A preset's `submission_fields`, or null when it records none; a reserved field name is refused. */
|
|
91
|
+
function submissionFieldsOf(j, file) {
|
|
92
|
+
if (j === undefined)
|
|
93
|
+
return null;
|
|
94
|
+
const reserved = reservedKey(Object.keys(j.fields));
|
|
95
|
+
if (reserved !== null)
|
|
96
|
+
throw new Error(`${file}: "submission_fields" names "${reserved}", which paperlint sends itself (${RESERVED_FIELD_KEYS.join(", ")}) — a field of that name would overwrite it`);
|
|
97
|
+
return {
|
|
98
|
+
source: j.source,
|
|
99
|
+
url: j.url,
|
|
100
|
+
read: j.read,
|
|
101
|
+
fields: Object.fromEntries(Object.entries(j.fields).map(([key, f]) => [
|
|
102
|
+
key,
|
|
103
|
+
{
|
|
104
|
+
kind: f.kind,
|
|
105
|
+
required: f.required ?? false,
|
|
106
|
+
label: f.label ?? null,
|
|
107
|
+
options: f.options ?? [],
|
|
108
|
+
},
|
|
109
|
+
])),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
89
112
|
/** An optional field as the typed preset holds it: absent is null. */
|
|
90
113
|
const orNull = (v) => (v === undefined ? null : v);
|
|
91
114
|
function kindsOf(k) {
|
|
@@ -185,6 +208,12 @@ function deadlinesOf(d, file) {
|
|
|
185
208
|
read,
|
|
186
209
|
}));
|
|
187
210
|
}
|
|
211
|
+
/** A preset's blocks about its portal: where, the deadlines read there, the form's own fields. */
|
|
212
|
+
const portalBlocks = (j, file) => ({
|
|
213
|
+
portal: portalOf(j.portal),
|
|
214
|
+
deadlines: deadlinesOf(j.deadlines, file),
|
|
215
|
+
submissionFields: submissionFieldsOf(j.submission_fields, file),
|
|
216
|
+
});
|
|
188
217
|
/**
|
|
189
218
|
* The text of one preset file → the typed file, or an Error naming every problem. The ONE parser
|
|
190
219
|
* of a preset: the toolchain reads its `tex`, the venue rules its `format`, the config its `rules`.
|
|
@@ -213,8 +242,7 @@ export function parsePreset(text, file, dir = presetsDir()) {
|
|
|
213
242
|
rules: j.rules ?? {},
|
|
214
243
|
registerAnchors: anchorsOf(j.register),
|
|
215
244
|
talk: j.talk === undefined ? null : venueTalkOf(j.talk),
|
|
216
|
-
|
|
217
|
-
deadlines: deadlinesOf(j.deadlines, file),
|
|
245
|
+
...portalBlocks(j, file),
|
|
218
246
|
};
|
|
219
247
|
}
|
|
220
248
|
/** The text of one preset → the TeX requirements it declares itself (none without a `tex` block). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tex-requirements.js","sourceRoot":"","sources":["../src/tex-requirements.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tex-requirements.js","sourceRoot":"","sources":["../src/tex-requirements.ts"],"names":[],"mappings":"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"}
|
package/docs/submission.md
CHANGED
|
@@ -41,12 +41,34 @@ Creates the submission and sends four things, printing them first — the abstra
|
|
|
41
41
|
read without guessing stops the command with the macro and its line; then pass
|
|
42
42
|
`--abstract <file>`, plain text;
|
|
43
43
|
- **the authors** — from `"authors"`; without it, `new` stops and names the key;
|
|
44
|
-
- **the PDF** — the paper's own, or `--pdf <file
|
|
44
|
+
- **the PDF** — the paper's own, or `--pdf <file>`;
|
|
45
|
+
- **the fields** — from `"fields"`: the paper's answers to the venue's own form fields.
|
|
45
46
|
|
|
46
47
|
Without `--save` it is a dry run. With `--save` the new id is written into `paperlint.json` (the
|
|
47
|
-
open cycle, with `cycles`), and the next command is `show`. Every run prints what is left to do
|
|
48
|
-
the
|
|
49
|
-
submission id.
|
|
48
|
+
open cycle, with `cycles`), and the next command is `show`. Every run prints what is left to do: the
|
|
49
|
+
venue's fields the paper did not answer, and what only the site takes. `new` is refused when the
|
|
50
|
+
paper already has a submission id.
|
|
51
|
+
|
|
52
|
+
## The venue's own fields
|
|
53
|
+
|
|
54
|
+
A venue preset records its form's own fields in `"submission_fields"`, as read (`source`, `url`,
|
|
55
|
+
`read`), each by the API's key with a kind: `checkboxes` (with its `options`), `text`, `email`,
|
|
56
|
+
`pc_conflicts`. The paper answers them in `"fields"`:
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
"fields": {
|
|
60
|
+
"topics": ["SE Topic: AI for software engineering"],
|
|
61
|
+
"pc_conflicts": { "someone@example.org": "collaborator" },
|
|
62
|
+
"ACMCorAut": "you@example.org"
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
They are checked against the preset before anything is sent: a key the form does not ask, a topic it
|
|
67
|
+
does not offer, a missing required one, each stops the command with exit 2. HotCRP keeps a topic it
|
|
68
|
+
does not know as nothing, without an error (a bare `"AI for software engineering"`, without its
|
|
69
|
+
group, is one), so after the portal answers, a topic list it did not take prints `NOT TAKEN` and
|
|
70
|
+
exits 1. `paperlint submission topics` reads the topics the portal offers and marks each against
|
|
71
|
+
the preset.
|
|
50
72
|
|
|
51
73
|
## `show`
|
|
52
74
|
|
|
@@ -57,7 +79,8 @@ deadlines in force for the current attempt, each with when and where it was read
|
|
|
57
79
|
|
|
58
80
|
## `update`
|
|
59
81
|
|
|
60
|
-
Sends the PDF and, when asked, a new abstract (`--abstract <file>`) and
|
|
82
|
+
Sends the PDF, the paper's `"fields"`, and, when asked, a new abstract (`--abstract <file>`) and
|
|
83
|
+
"submitted" (`--submit`).
|
|
61
84
|
Without `--save` it is a dry run. It prints the portal's verdict and its messages; exit 1 when the
|
|
62
85
|
portal would not take the change. Before sending, it asks you to open that exact PDF and check it
|
|
63
86
|
against the venue's call for papers.
|
|
@@ -67,6 +90,6 @@ until it says `match yes`. Every `--save` comes after the author has read the dr
|
|
|
67
90
|
|
|
68
91
|
## What it does not do
|
|
69
92
|
|
|
70
|
-
- It does not set
|
|
93
|
+
- It does not set a field the venue preset does not record, change the authors after `new`, or
|
|
71
94
|
upload supplementary files.
|
|
72
95
|
- It does not check the PDF against the venue; that is `paperlint lint`.
|
package/lib/paper-config.ts
CHANGED
|
@@ -143,6 +143,8 @@ export const SETTINGS_KEYS: Readonly<Record<string, string>> = Object.freeze({
|
|
|
143
143
|
"which submission on the venue's portal is this paper's: { \"id\": <number> } — paperlint submission, with the preset's \"portal\". Set only in a paper's own paperlint.json; in the root paperlint.json it is an error",
|
|
144
144
|
authors:
|
|
145
145
|
'the authors as the venue\'s portal should record them, in order: [{ "name", "email", "affiliation"? }] — paperlint submission new. Set only in a paper\'s own paperlint.json; in the root paperlint.json it is an error',
|
|
146
|
+
fields:
|
|
147
|
+
'the paper\'s answers to the venue\'s own form fields, keyed as the preset\'s "submission_fields" names them: { "topics": ["<an option>"], "pc_conflicts": { "<pc email>": "<conflict type>" }, … } — checked against those fields, then sent by paperlint submission new and update. Set only in a paper\'s own paperlint.json; in the root paperlint.json it is an error',
|
|
146
148
|
cycles:
|
|
147
149
|
"the paper's attempts at venues, oldest first: [{ id, venue, kind, opened, phase?, deadlines, submission?, outcome }] — extends, kind and submission are then the current attempt's, and the cycle/ rules judge the record. Set only in a paper's own paperlint.json; in the root paperlint.json it is an error",
|
|
148
150
|
scripts: "how skill prose names the scripts — consumer.mjs",
|
|
@@ -158,6 +160,7 @@ export const PAPER_ONLY_KEYS: readonly string[] = Object.freeze([
|
|
|
158
160
|
"talk",
|
|
159
161
|
"submission",
|
|
160
162
|
"authors",
|
|
163
|
+
"fields",
|
|
161
164
|
"cycles",
|
|
162
165
|
]);
|
|
163
166
|
|
package/package.json
CHANGED
package/presets/msr.jsonc
CHANGED
|
@@ -60,6 +60,72 @@
|
|
|
60
60
|
},
|
|
61
61
|
],
|
|
62
62
|
|
|
63
|
+
// The fields msr2027's submission form asks beyond title, abstract, authors and the PDF, read
|
|
64
|
+
// 2026-10-20. The topics through the portal's API: `GET /api/searchcompletion` with an author's
|
|
65
|
+
// token lists 45 `topic:"…"` completions — these 41 and the 4 group names (DS/ML/AI Technique,
|
|
66
|
+
// Research Method, SE Topic, Software repository), which a submission cannot carry. Each of the 41
|
|
67
|
+
// was sent alone in a dry run of `POST /api/paper` and taken (`change_list` names `topics`); the
|
|
68
|
+
// bare subtopic «AI for software engineering» and the group «SE Topic» were dropped without an
|
|
69
|
+
// error. The form says «Select at least one topic». «ACM corresponding author» (`ACMCorAut`, listed
|
|
70
|
+
// by `/api/displayfields`) is a selector of the authors in the form; the API takes an author's
|
|
71
|
+
// email (a dry run with a name: «Format error»). `paperlint submission topics` re-reads the list.
|
|
72
|
+
"submission_fields": {
|
|
73
|
+
"source": "portal",
|
|
74
|
+
"url": "https://msr2027.hotcrp.com/api/searchcompletion",
|
|
75
|
+
"read": "2026-10-20",
|
|
76
|
+
"fields": {
|
|
77
|
+
"topics": {
|
|
78
|
+
"kind": "checkboxes",
|
|
79
|
+
"required": true,
|
|
80
|
+
"options": [
|
|
81
|
+
"DS/ML/AI Technique: Classical machine learning (e.g., regression, SVMs, nearest neighbour, decision trees, PCA, naive Bayes classifier, and k-means clustering)",
|
|
82
|
+
"DS/ML/AI Technique: Convolutional neural networks",
|
|
83
|
+
"DS/ML/AI Technique: LLM or other foundation models (e.g., large vision model)",
|
|
84
|
+
"DS/ML/AI Technique: Reinforcement learning",
|
|
85
|
+
"DS/ML/AI Technique: Transformers",
|
|
86
|
+
"Performance analysis and testing",
|
|
87
|
+
"Research Method: Controlled experiments with human subjects (e.g., A/B tests, lab studies)",
|
|
88
|
+
"Research Method: Qualitative analysis (e.g., thematic analysis, grounded theory)",
|
|
89
|
+
"Research Method: Statistical analysis and modelling",
|
|
90
|
+
"Research Method: Survey design and analysis",
|
|
91
|
+
"SE Topic: AI for software engineering",
|
|
92
|
+
"SE Topic: API design and evolution",
|
|
93
|
+
"SE Topic: App store analysis",
|
|
94
|
+
"SE Topic: Cloud-based and distributed systems",
|
|
95
|
+
"SE Topic: Debugging, fault localization, and fault prediction",
|
|
96
|
+
"SE Topic: DevOps and release engineering",
|
|
97
|
+
"SE Topic: Distributed and collaborative software engineering",
|
|
98
|
+
"SE Topic: Energy profiling",
|
|
99
|
+
"SE Topic: Ethical concerns (bias, fairness, explainability, etc.)",
|
|
100
|
+
"SE Topic: Human aspects",
|
|
101
|
+
"SE Topic: Legal aspects (licenses, copyright, etc.)",
|
|
102
|
+
"SE Topic: Privacy and security",
|
|
103
|
+
"SE Topic: Program comprehension",
|
|
104
|
+
"SE Topic: Recommender systems",
|
|
105
|
+
"SE Topic: Software development processes",
|
|
106
|
+
"SE Topic: Software ecosystems",
|
|
107
|
+
"SE Topic: Software engineering for AI",
|
|
108
|
+
"SE Topic: Software maintenance and evolution",
|
|
109
|
+
"SE Topic: Software measurement and analytics",
|
|
110
|
+
"SE Topic: Software quality assurance",
|
|
111
|
+
"SE Topic: Source / test code",
|
|
112
|
+
"SE Topic: Version control history logs",
|
|
113
|
+
"Software repository: App stores",
|
|
114
|
+
"Software repository: Archived communications (mailing lists, Gitter/Slack/Discord channels, etc.)",
|
|
115
|
+
"Software repository: Build / CI logs",
|
|
116
|
+
"Software repository: Code reviews",
|
|
117
|
+
"Software repository: Execution traces and logs",
|
|
118
|
+
"Software repository: Human interaction data",
|
|
119
|
+
"Software repository: Issue trackers / defect repositories",
|
|
120
|
+
"Software repository: Package registries / software releases",
|
|
121
|
+
"Software repository: Q&A websites",
|
|
122
|
+
],
|
|
123
|
+
},
|
|
124
|
+
"pc_conflicts": { "kind": "pc_conflicts" },
|
|
125
|
+
"ACMCorAut": { "kind": "email", "label": "ACM corresponding author" },
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
|
|
63
129
|
// What the venue is called in a paper's text (tex/venue-leftover) — and only beside a year
|
|
64
130
|
// («MSR 2027», «MSR'27»): «MSR» is also Microsoft Research, and an acronym papers define for
|
|
65
131
|
// themselves («Manual Speech Recognition (MSR)», in an accepted ACSAC paper of
|
|
@@ -117,6 +117,47 @@
|
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
},
|
|
120
|
+
"submission_fields": {
|
|
121
|
+
"description": "The fields the edition's submission form asks beyond the title, the abstract, the authors and the PDF, as READ — where (`source`: `portal`, through the portal's API; `form`, copied from the form), from which page and on which day. Read by `paperlint submission`: a paper answers them in its paperlint.json `fields`, checked against these before anything is sent, so an option the form does not offer is refused here instead of dropped by the portal without a word. `fields` maps the portal API's key to its kind: `checkboxes` (a list of `options`, HotCRP's topics spelled \"Group: Topic\"), `text`, `email`, `pc_conflicts` (PC member's email → conflict type). `required`: the form does not complete without it. A child's value replaces its parent's.",
|
|
122
|
+
"type": "object",
|
|
123
|
+
"additionalProperties": false,
|
|
124
|
+
"required": ["source", "url", "read", "fields"],
|
|
125
|
+
"properties": {
|
|
126
|
+
"source": { "type": "string", "enum": ["portal", "form"] },
|
|
127
|
+
"url": { "type": "string", "pattern": "^https?://[^\\s/]+[^\\s]*$" },
|
|
128
|
+
"read": {
|
|
129
|
+
"description": "The day the fields were read, YYYY-MM-DD.",
|
|
130
|
+
"type": "string",
|
|
131
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
|
132
|
+
},
|
|
133
|
+
"fields": {
|
|
134
|
+
"type": "object",
|
|
135
|
+
"minProperties": 1,
|
|
136
|
+
"additionalProperties": {
|
|
137
|
+
"type": "object",
|
|
138
|
+
"additionalProperties": false,
|
|
139
|
+
"required": ["kind"],
|
|
140
|
+
"properties": {
|
|
141
|
+
"kind": {
|
|
142
|
+
"type": "string",
|
|
143
|
+
"enum": ["checkboxes", "text", "email", "pc_conflicts"]
|
|
144
|
+
},
|
|
145
|
+
"required": { "type": "boolean" },
|
|
146
|
+
"label": { "type": "string", "minLength": 1 },
|
|
147
|
+
"options": {
|
|
148
|
+
"type": "array",
|
|
149
|
+
"minItems": 1,
|
|
150
|
+
"uniqueItems": true,
|
|
151
|
+
"items": { "type": "string", "minLength": 1 }
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"if": { "properties": { "kind": { "const": "checkboxes" } } },
|
|
155
|
+
"then": { "required": ["options"] },
|
|
156
|
+
"else": { "not": { "required": ["options"] } }
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
},
|
|
120
161
|
"required_sections": {
|
|
121
162
|
"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.",
|
|
122
163
|
"type": "array",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: submission-portal
|
|
3
|
-
description: "Create, read or change a paper's submission on the venue's HotCRP portal via `paperlint submission new|show|update`: register the paper, replace the PDF or abstract, mark it submitted, and verify by sha256 that the portal holds the latest build. Use when the paper is not yet on HotCRP, when its PDF or abstract there needs replacing, when asked whether it is truly submitted, or before a deadline. Composes with submit-paper (what to submit)."
|
|
4
|
-
allowed-tools: [Read, Grep, Glob, Bash]
|
|
3
|
+
description: "Create, read or change a paper's submission on the venue's HotCRP portal via `paperlint submission new|show|update|topics`: register the paper, choose its topics and PC conflicts, replace the PDF or abstract, mark it submitted, and verify by sha256 that the portal holds the latest build. Use when the paper is not yet on HotCRP, when its topics or conflicts are unset, when its PDF or abstract there needs replacing, when asked whether it is truly submitted, or before a deadline. Composes with submit-paper (what to submit)."
|
|
4
|
+
allowed-tools: [Read, Grep, Glob, Bash, Edit, AskUserQuestion]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
<!-- vigiles:sha256:
|
|
7
|
+
<!-- vigiles:sha256:fce320c54b6c3a92 compiled from skills/submission-portal/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# submission-portal — create, read and update the submission on the portal, then prove it landed
|
|
10
10
|
|
|
@@ -13,9 +13,13 @@ Only HotCRP is supported; for any other portal the command says so and the uploa
|
|
|
13
13
|
|
|
14
14
|
## What the command does, and what stays on the site
|
|
15
15
|
|
|
16
|
-
`submission new` creates the submission with the title, the abstract, the authors and the PDF
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
`submission new` creates the submission with the title, the abstract, the authors and the PDF;
|
|
17
|
+
`new` and `update` also send the paper's `"fields"` — its answers to the venue's own form
|
|
18
|
+
fields (topics, PC conflicts, a corresponding author …), which the venue preset records in
|
|
19
|
+
`"submission_fields"` (`paperlint:msr` does). A value the form does not offer is refused before
|
|
20
|
+
anything is sent; a topic the portal did not take prints `NOT TAKEN` and fails the command. What
|
|
21
|
+
the preset records no field for stays on the site: the command prints that list, with the
|
|
22
|
+
submission's page, after `new`.
|
|
19
23
|
|
|
20
24
|
## Token
|
|
21
25
|
|
|
@@ -34,6 +38,10 @@ their own environment.
|
|
|
34
38
|
"affiliation" }]`, every author in the paper's order. The author writes this list; never fill it
|
|
35
39
|
in from the paper, a profile or memory.
|
|
36
40
|
- **For `show` and `update`: `"submission": { "id": <number> }`** — `new --save` writes it.
|
|
41
|
+
- **`"fields"` in the paper's `paperlint.json`**, keyed as the preset's `"submission_fields"`
|
|
42
|
+
names them: `{ "topics": ["<an option, spelled as listed>"], "pc_conflicts": { "<pc email>":
|
|
43
|
+
"<conflict type>" }, "ACMCorAut": "<an author's email>" }`. Written only with the author's
|
|
44
|
+
choices, below.
|
|
37
45
|
|
|
38
46
|
A missing key or token stops the command with exit 2 and a line naming what to set — fix exactly that.
|
|
39
47
|
|
|
@@ -41,26 +49,42 @@ A missing key or token stops the command with exit 2 and a line naming what to s
|
|
|
41
49
|
|
|
42
50
|
`papers/my-paper` stands for the paper's folder.
|
|
43
51
|
|
|
44
|
-
0. **
|
|
52
|
+
0. **Topics, chosen with the author.** `npx paperlint submission topics papers/my-paper` reads the
|
|
53
|
+
topics the portal offers and marks each against the preset (exit 1 when they differ — then the
|
|
54
|
+
preset is stale: say so, and record the portal's list). Read the paper's abstract and
|
|
55
|
+
contribution, pick the topics that fit, and **ask with `AskUserQuestion`** (`multiSelect: true`,
|
|
56
|
+
your proposed topics first, each with one line on why it fits; the author may pick others).
|
|
57
|
+
Write only the chosen ones into `"fields": { "topics": [...] }`, spelled exactly as listed.
|
|
58
|
+
The same for every other field the preset records (`ACMCorAut`: ask which author).
|
|
59
|
+
1. **Create it, once — only while the paper has no `submission` id.**
|
|
45
60
|
`npx paperlint submission new papers/my-paper` is a dry run: the portal checks it and keeps
|
|
46
|
-
nothing. It prints the title, the authors
|
|
47
|
-
`\begin{abstract}`). Read them with the author; an abstract the
|
|
48
|
-
that reads wrong, is given as a plain-text file with
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
61
|
+
nothing. It prints the title, the authors, the whole abstract (read from the source's
|
|
62
|
+
`\begin{abstract}`) and each `field` it sends. Read them with the author; an abstract the
|
|
63
|
+
command cannot read, or one that reads wrong, is given as a plain-text file with
|
|
64
|
+
`--abstract <file>`.
|
|
65
|
+
2. **Ask with `AskUserQuestion`** before the real send, the question showing exactly what goes
|
|
66
|
+
(title, authors, the abstract's first sentence and word count, each field): yes, or no. Only on
|
|
67
|
+
yes: `npx paperlint submission new papers/my-paper --save`, then the printed "still to do" list
|
|
68
|
+
with the author.
|
|
69
|
+
3. **Read it.** `npx paperlint submission show papers/my-paper` — status, the PDF the portal holds,
|
|
52
70
|
and `match`: whether it is the local build. Rebuild first if the local PDF is stale.
|
|
53
|
-
|
|
54
|
-
`--submit` to mark it submitted)
|
|
55
|
-
|
|
56
|
-
5. **
|
|
71
|
+
4. **Dry run the change.** `npx paperlint submission update papers/my-paper` (`--abstract <file>`,
|
|
72
|
+
`--submit` to mark it submitted); it sends the paper's `"fields"` too. Exit 1 means the portal
|
|
73
|
+
would refuse it, or did not take a topic — report why, stop.
|
|
74
|
+
5. **Ask with `AskUserQuestion`** before every real send — each `--save`, and `--submit` above
|
|
75
|
+
all — the question showing what changes (the PDF and its sha256, the abstract, each field,
|
|
76
|
+
"submitted"). Only on yes: the same command with `--save`. A dry run needs no question.
|
|
77
|
+
6. **Prove it landed.** `show` again: `match` must read `yes — the portal holds this build`, and
|
|
57
78
|
the status must be what was intended. Anything else is not done — say so.
|
|
58
79
|
|
|
59
80
|
🔴 `--save` creates or changes a real submission that reviewers will see: never without the
|
|
60
|
-
author's yes in this conversation, never "to test", never because a dry run
|
|
81
|
+
author's yes to an `AskUserQuestion` in this conversation, never "to test", never because a dry run
|
|
82
|
+
passed.
|
|
61
83
|
|
|
62
84
|
```bash
|
|
63
85
|
npx paperlint build papers/my-paper
|
|
86
|
+
npx paperlint submission topics papers/my-paper
|
|
87
|
+
# … AskUserQuestion: which topics; the chosen ones into "fields" …
|
|
64
88
|
# only while the paper has no submission id:
|
|
65
89
|
npx paperlint submission new papers/my-paper
|
|
66
90
|
# … the author reads the dry run and says yes …
|
|
@@ -77,9 +101,16 @@ npx paperlint submission show papers/my-paper
|
|
|
77
101
|
- `match yes` is the only proof the reviewers get the local build; `submitted` alone says nothing
|
|
78
102
|
about WHICH PDF.
|
|
79
103
|
- `portal says: …` lines are the portal's own words; quote them.
|
|
104
|
+
- `portal says: pc_conflicts: You may have missed conflicts of interest with …` — HotCRP guesses
|
|
105
|
+
these from the authors' and the PC's profiles, chiefly an affiliation string they share (two
|
|
106
|
+
"Independent Researcher"s are flagged though they are strangers). Show each name to the author with
|
|
107
|
+
that explanation and ask; **never** mark a conflict from the warning alone. A real conflict goes
|
|
108
|
+
into `"fields": { "pc_conflicts": { "<their email>": "<type>" } }` with the author's word.
|
|
109
|
+
- `NOT TAKEN` — the portal kept none of that field's options: the spelling is not the portal's.
|
|
110
|
+
Run `submission topics` and fix the value.
|
|
80
111
|
- `SAVE WITHHELD` or `NOTHING CREATED` — the portal saved nothing.
|
|
81
112
|
|
|
82
113
|
## What this skill does not do
|
|
83
114
|
|
|
84
|
-
It does not decide whether the paper is ready (`harden-paper`), anonymize it, or set the
|
|
85
|
-
|
|
115
|
+
It does not decide whether the paper is ready (`harden-paper`), anonymize it, or set the fields the
|
|
116
|
+
venue preset does not record — see `submit-paper`.
|
|
@@ -4,8 +4,8 @@ import { experimental_skill } from "vigiles/spec";
|
|
|
4
4
|
export default experimental_skill({
|
|
5
5
|
name: "submission-portal",
|
|
6
6
|
description:
|
|
7
|
-
"Create, read or change a paper's submission on the venue's HotCRP portal via `paperlint submission new|show|update`: register the paper, replace the PDF or abstract, mark it submitted, and verify by sha256 that the portal holds the latest build. Use when the paper is not yet on HotCRP, when its PDF or abstract there needs replacing, when asked whether it is truly submitted, or before a deadline. Composes with submit-paper (what to submit).",
|
|
8
|
-
tools: ["Read", "Grep", "Glob", "Bash"],
|
|
7
|
+
"Create, read or change a paper's submission on the venue's HotCRP portal via `paperlint submission new|show|update|topics`: register the paper, choose its topics and PC conflicts, replace the PDF or abstract, mark it submitted, and verify by sha256 that the portal holds the latest build. Use when the paper is not yet on HotCRP, when its topics or conflicts are unset, when its PDF or abstract there needs replacing, when asked whether it is truly submitted, or before a deadline. Composes with submit-paper (what to submit).",
|
|
8
|
+
tools: ["Read", "Grep", "Glob", "Bash", "Edit", "AskUserQuestion"],
|
|
9
9
|
// The `npx paperlint submission …` commands in the body are not verified at compile time until
|
|
10
10
|
// zernie/vigiles#395 (cmd() for the package's own CLI): keep them in step with src/cli.ts by hand.
|
|
11
11
|
// Do not re-add a test that re-parses the compiled SKILL.md — that check belongs in vigiles.
|
|
@@ -17,9 +17,13 @@ Only HotCRP is supported; for any other portal the command says so and the uploa
|
|
|
17
17
|
|
|
18
18
|
## What the command does, and what stays on the site
|
|
19
19
|
|
|
20
|
-
\`submission new\` creates the submission with the title, the abstract, the authors and the PDF
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
\`submission new\` creates the submission with the title, the abstract, the authors and the PDF;
|
|
21
|
+
\`new\` and \`update\` also send the paper's \`"fields"\` — its answers to the venue's own form
|
|
22
|
+
fields (topics, PC conflicts, a corresponding author …), which the venue preset records in
|
|
23
|
+
\`"submission_fields"\` (\`paperlint:msr\` does). A value the form does not offer is refused before
|
|
24
|
+
anything is sent; a topic the portal did not take prints \`NOT TAKEN\` and fails the command. What
|
|
25
|
+
the preset records no field for stays on the site: the command prints that list, with the
|
|
26
|
+
submission's page, after \`new\`.
|
|
23
27
|
|
|
24
28
|
## Token
|
|
25
29
|
|
|
@@ -38,6 +42,10 @@ their own environment.
|
|
|
38
42
|
"affiliation" }]\`, every author in the paper's order. The author writes this list; never fill it
|
|
39
43
|
in from the paper, a profile or memory.
|
|
40
44
|
- **For \`show\` and \`update\`: \`"submission": { "id": <number> }\`** — \`new --save\` writes it.
|
|
45
|
+
- **\`"fields"\` in the paper's \`paperlint.json\`**, keyed as the preset's \`"submission_fields"\`
|
|
46
|
+
names them: \`{ "topics": ["<an option, spelled as listed>"], "pc_conflicts": { "<pc email>":
|
|
47
|
+
"<conflict type>" }, "ACMCorAut": "<an author's email>" }\`. Written only with the author's
|
|
48
|
+
choices, below.
|
|
41
49
|
|
|
42
50
|
A missing key or token stops the command with exit 2 and a line naming what to set — fix exactly that.
|
|
43
51
|
|
|
@@ -45,26 +53,42 @@ A missing key or token stops the command with exit 2 and a line naming what to s
|
|
|
45
53
|
|
|
46
54
|
\`papers/my-paper\` stands for the paper's folder.
|
|
47
55
|
|
|
48
|
-
0. **
|
|
56
|
+
0. **Topics, chosen with the author.** \`npx paperlint submission topics papers/my-paper\` reads the
|
|
57
|
+
topics the portal offers and marks each against the preset (exit 1 when they differ — then the
|
|
58
|
+
preset is stale: say so, and record the portal's list). Read the paper's abstract and
|
|
59
|
+
contribution, pick the topics that fit, and **ask with \`AskUserQuestion\`** (\`multiSelect: true\`,
|
|
60
|
+
your proposed topics first, each with one line on why it fits; the author may pick others).
|
|
61
|
+
Write only the chosen ones into \`"fields": { "topics": [...] }\`, spelled exactly as listed.
|
|
62
|
+
The same for every other field the preset records (\`ACMCorAut\`: ask which author).
|
|
63
|
+
1. **Create it, once — only while the paper has no \`submission\` id.**
|
|
49
64
|
\`npx paperlint submission new papers/my-paper\` is a dry run: the portal checks it and keeps
|
|
50
|
-
nothing. It prints the title, the authors
|
|
51
|
-
\`\\begin{abstract}\`). Read them with the author; an abstract the
|
|
52
|
-
that reads wrong, is given as a plain-text file with
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
65
|
+
nothing. It prints the title, the authors, the whole abstract (read from the source's
|
|
66
|
+
\`\\begin{abstract}\`) and each \`field\` it sends. Read them with the author; an abstract the
|
|
67
|
+
command cannot read, or one that reads wrong, is given as a plain-text file with
|
|
68
|
+
\`--abstract <file>\`.
|
|
69
|
+
2. **Ask with \`AskUserQuestion\`** before the real send, the question showing exactly what goes
|
|
70
|
+
(title, authors, the abstract's first sentence and word count, each field): yes, or no. Only on
|
|
71
|
+
yes: \`npx paperlint submission new papers/my-paper --save\`, then the printed "still to do" list
|
|
72
|
+
with the author.
|
|
73
|
+
3. **Read it.** \`npx paperlint submission show papers/my-paper\` — status, the PDF the portal holds,
|
|
56
74
|
and \`match\`: whether it is the local build. Rebuild first if the local PDF is stale.
|
|
57
|
-
|
|
58
|
-
\`--submit\` to mark it submitted)
|
|
59
|
-
|
|
60
|
-
5. **
|
|
75
|
+
4. **Dry run the change.** \`npx paperlint submission update papers/my-paper\` (\`--abstract <file>\`,
|
|
76
|
+
\`--submit\` to mark it submitted); it sends the paper's \`"fields"\` too. Exit 1 means the portal
|
|
77
|
+
would refuse it, or did not take a topic — report why, stop.
|
|
78
|
+
5. **Ask with \`AskUserQuestion\`** before every real send — each \`--save\`, and \`--submit\` above
|
|
79
|
+
all — the question showing what changes (the PDF and its sha256, the abstract, each field,
|
|
80
|
+
"submitted"). Only on yes: the same command with \`--save\`. A dry run needs no question.
|
|
81
|
+
6. **Prove it landed.** \`show\` again: \`match\` must read \`yes — the portal holds this build\`, and
|
|
61
82
|
the status must be what was intended. Anything else is not done — say so.
|
|
62
83
|
|
|
63
84
|
🔴 \`--save\` creates or changes a real submission that reviewers will see: never without the
|
|
64
|
-
author's yes in this conversation, never "to test", never because a dry run
|
|
85
|
+
author's yes to an \`AskUserQuestion\` in this conversation, never "to test", never because a dry run
|
|
86
|
+
passed.
|
|
65
87
|
|
|
66
88
|
\`\`\`bash
|
|
67
89
|
npx paperlint build papers/my-paper
|
|
90
|
+
npx paperlint submission topics papers/my-paper
|
|
91
|
+
# … AskUserQuestion: which topics; the chosen ones into "fields" …
|
|
68
92
|
# only while the paper has no submission id:
|
|
69
93
|
npx paperlint submission new papers/my-paper
|
|
70
94
|
# … the author reads the dry run and says yes …
|
|
@@ -81,10 +105,17 @@ npx paperlint submission show papers/my-paper
|
|
|
81
105
|
- \`match yes\` is the only proof the reviewers get the local build; \`submitted\` alone says nothing
|
|
82
106
|
about WHICH PDF.
|
|
83
107
|
- \`portal says: …\` lines are the portal's own words; quote them.
|
|
108
|
+
- \`portal says: pc_conflicts: You may have missed conflicts of interest with …\` — HotCRP guesses
|
|
109
|
+
these from the authors' and the PC's profiles, chiefly an affiliation string they share (two
|
|
110
|
+
"Independent Researcher"s are flagged though they are strangers). Show each name to the author with
|
|
111
|
+
that explanation and ask; **never** mark a conflict from the warning alone. A real conflict goes
|
|
112
|
+
into \`"fields": { "pc_conflicts": { "<their email>": "<type>" } }\` with the author's word.
|
|
113
|
+
- \`NOT TAKEN\` — the portal kept none of that field's options: the spelling is not the portal's.
|
|
114
|
+
Run \`submission topics\` and fix the value.
|
|
84
115
|
- \`SAVE WITHHELD\` or \`NOTHING CREATED\` — the portal saved nothing.
|
|
85
116
|
|
|
86
117
|
## What this skill does not do
|
|
87
118
|
|
|
88
|
-
It does not decide whether the paper is ready (\`harden-paper\`), anonymize it, or set the
|
|
89
|
-
|
|
119
|
+
It does not decide whether the paper is ready (\`harden-paper\`), anonymize it, or set the fields the
|
|
120
|
+
venue preset does not record — see \`submit-paper\`.`,
|
|
90
121
|
});
|
|
@@ -11,12 +11,13 @@ saved. Identifying values (the submission id, title, abstract, authors, topics,
|
|
|
11
11
|
timestamps) are replaced with fakes; HotCRP's keys, value types, statuses and message texts are
|
|
12
12
|
verbatim.
|
|
13
13
|
|
|
14
|
-
| file
|
|
15
|
-
|
|
|
16
|
-
| `get-paper.json`
|
|
17
|
-
| `get-noauth.json`
|
|
18
|
-
| `post-dot.json`
|
|
19
|
-
| `post-ok.json`
|
|
14
|
+
| file | request | HTTP |
|
|
15
|
+
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---: |
|
|
16
|
+
| `get-paper.json` | `GET /api/paper?p=<id>&word_limit=hard` with a token | 200 |
|
|
17
|
+
| `get-noauth.json` | the same without a token | 401 |
|
|
18
|
+
| `post-dot.json` | `POST /api/paper?p=<id>&dry_run=1`, PDF part named `paper.pdf`, `content_file` the same — PHP renames the field to `paper_pdf`, so HotCRP finds no upload | 200 |
|
|
19
|
+
| `post-ok.json` | the same with the part and `content_file` named `paperlint_pdf` | 200 |
|
|
20
|
+
| `get-searchcompletion.json` | `GET /api/searchcompletion` on msr2027.hotcrp.com with an author's token, 2026-10-20 — the site's search completions, its topics among them; no personal data, nothing replaced | 200 |
|
|
20
21
|
|
|
21
22
|
To re-record: run the same four requests with `curl` against a HotCRP site where you have a
|
|
22
23
|
submission and a token (`Authorization: bearer $HOTCRP_TOKEN_<SITE>`), always with `dry_run=1` on a `POST`,
|