paperlint 11.0.0 → 11.1.1
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/.github/workflows/dependabot-automerge.yml +20 -6
- package/.github/workflows/release.yml +10 -0
- 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/scripts/refresh-deadlines/main.test.ts +5 -2
- package/scripts/refresh-deadlines/refresh.test.ts +15 -14
- 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/cycle-rules.test.ts +14 -6
- 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.test.ts +34 -24
- 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-show.test.ts +9 -0
- 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
|
@@ -31,19 +31,29 @@ on:
|
|
|
31
31
|
workflows: ["ci"]
|
|
32
32
|
types: [completed]
|
|
33
33
|
|
|
34
|
-
# Merge and delete branch — nothing else this workflow needs.
|
|
34
|
+
# Merge and delete branch, then start release.yml — nothing else this workflow needs.
|
|
35
35
|
permissions:
|
|
36
36
|
contents: write
|
|
37
37
|
pull-requests: write
|
|
38
|
+
actions: write
|
|
38
39
|
|
|
39
40
|
jobs:
|
|
40
41
|
merge:
|
|
41
|
-
# Three conditions, each blocking a case: the run
|
|
42
|
-
#
|
|
42
|
+
# Three conditions, each blocking a case: the run is GREEN · it was for one of two bots' pull
|
|
43
|
+
# requests, never a person's · and that pull request is the bot's own. Remove any one and
|
|
44
|
+
# meaning changes. The two bots:
|
|
45
|
+
# - Dependabot: its PR's `ci` is an ordinary `pull_request` run.
|
|
46
|
+
# - the deadline refresh (deadlines.yml): a PR opened with GITHUB_TOKEN starts no workflow, so
|
|
47
|
+
# deadlines.yml dispatches `ci` on its branch; that run is `workflow_dispatch` by
|
|
48
|
+
# github-actions[bot] on `bot/preset-deadlines`, and GitHub still lists the PR in
|
|
49
|
+
# `pull_requests` (measured on run 39489222900, PR #248).
|
|
43
50
|
if: >
|
|
44
|
-
github.event.workflow_run.
|
|
45
|
-
|
|
46
|
-
|
|
51
|
+
github.event.workflow_run.conclusion == 'success' && (
|
|
52
|
+
(github.event.workflow_run.event == 'pull_request' &&
|
|
53
|
+
github.event.workflow_run.actor.login == 'dependabot[bot]') ||
|
|
54
|
+
(github.event.workflow_run.event == 'workflow_dispatch' &&
|
|
55
|
+
github.event.workflow_run.actor.login == 'github-actions[bot]' &&
|
|
56
|
+
github.event.workflow_run.head_branch == 'bot/preset-deadlines'))
|
|
47
57
|
runs-on: ubuntu-latest
|
|
48
58
|
timeout-minutes: 5
|
|
49
59
|
steps:
|
|
@@ -68,3 +78,7 @@ jobs:
|
|
|
68
78
|
fi
|
|
69
79
|
gh pr merge "${PR}" --repo "${REPO}" --squash --delete-branch --match-head-commit "${HEAD_SHA}"
|
|
70
80
|
echo "merged PR #${PR} on green ci run ${RUN_ID}"
|
|
81
|
+
# A merge made with GITHUB_TOKEN pushes to main without starting release.yml (GitHub's rule
|
|
82
|
+
# against loops), so a `fix(presets):` would never be released. Start it by hand; a
|
|
83
|
+
# `deps:` merge releases nothing either way, so the dispatch is harmless there.
|
|
84
|
+
gh workflow run release.yml --repo "${REPO}" --ref main
|
|
@@ -10,6 +10,16 @@ name: Release
|
|
|
10
10
|
on:
|
|
11
11
|
push:
|
|
12
12
|
branches: [main]
|
|
13
|
+
# dependabot-automerge.yml merges with GITHUB_TOKEN, and such a push starts no workflow: it
|
|
14
|
+
# dispatches this one instead.
|
|
15
|
+
workflow_dispatch:
|
|
16
|
+
|
|
17
|
+
# One release at a time: two runs started close together (a push and a dispatch, or two bot merges)
|
|
18
|
+
# would both read the same last tag, and the one that loses the tag race leaves its merge
|
|
19
|
+
# unreleased. A queued run reads every commit since the tag, so the last one in still releases all.
|
|
20
|
+
concurrency:
|
|
21
|
+
group: release
|
|
22
|
+
cancel-in-progress: false
|
|
13
23
|
|
|
14
24
|
permissions:
|
|
15
25
|
contents: write
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* REST API read and written over `fetch`, its answers parsed here. Everything that changes if HotCRP's API does lives in this folder.
|
|
4
4
|
*/
|
|
5
5
|
export { CONTENT_FIELD, changeObject, createObject, hotcrpPortal, type HotcrpOptions, } from "./portal.io.ts";
|
|
6
|
-
export { parseCreate, parseShow, parseUpdate, sha256OfHash, } from "./response.ts";
|
|
6
|
+
export { parseCreate, parseOptions, parseShow, parseUpdate, sha256OfHash, } from "./response.ts";
|
|
7
7
|
export { hotcrpDeadlines } from "./deadlines.io.ts";
|
|
8
8
|
export { hotcrpSite } from "./site.ts";
|
|
9
9
|
export { SITE_LESS_VARIABLE, VARIABLE_PATTERN, tokenVariable, } from "./token.ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/hotcrp/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/hotcrp/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* REST API read and written over `fetch`, its answers parsed here. Everything that changes if HotCRP's API does lives in this folder.
|
|
4
4
|
*/
|
|
5
5
|
export { CONTENT_FIELD, changeObject, createObject, hotcrpPortal, } from "./portal.io.js";
|
|
6
|
-
export { parseCreate, parseShow, parseUpdate, sha256OfHash, } from "./response.js";
|
|
6
|
+
export { parseCreate, parseOptions, parseShow, parseUpdate, sha256OfHash, } from "./response.js";
|
|
7
7
|
export { hotcrpDeadlines } from "./deadlines.io.js";
|
|
8
8
|
export { hotcrpSite } from "./site.js";
|
|
9
9
|
export { SITE_LESS_VARIABLE, VARIABLE_PATTERN, tokenVariable, } from "./token.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/hotcrp/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,GAEb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/hotcrp/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,GAEb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portal.io.d.ts","sourceRoot":"","sources":["../../../src/adapters/hotcrp/portal.io.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"portal.io.d.ts","sourceRoot":"","sources":["../../../src/adapters/hotcrp/portal.io.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAEV,aAAa,EAEb,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAQzE;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAM7C,MAAM,WAAW,aAAa;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAmCD,wEAAwE;AACxE,wBAAgB,YAAY,CAC1B,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,gBAAgB,GAClB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CASnC;AASD,4FAA4F;AAC5F,wBAAgB,YAAY,CAC1B,CAAC,EAAE,aAAa,GACf,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAUnC;AAuCD,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAuB/D"}
|
|
@@ -12,14 +12,22 @@
|
|
|
12
12
|
* Create: the same `POST`, with `p=new` and `"pid": "new"` in the object — «Setting `p=new` will
|
|
13
13
|
* create a new submission; the response will contain the chosen submission ID»
|
|
14
14
|
* (`devel/apidoc/submissions.md`, `post /paper`, in kohler/hotcrp). The object carries the title, the
|
|
15
|
-
* abstract, the authors and the PDF
|
|
15
|
+
* abstract, the authors and the PDF, and the venue's own fields the paper answers.
|
|
16
|
+
*
|
|
17
|
+
* Fields: a change and a creation carry the paper's `fields` as submission-object keys, as checked
|
|
18
|
+
* against the venue preset's `submission_fields` (`topics`: a list of `"Group: Topic"`; measured
|
|
19
|
+
* 2026-10-20, a bare `"Topic"` is dropped without a word).
|
|
20
|
+
*
|
|
21
|
+
* Options: `GET /api/searchcompletion` — the search box's completions, which an author's token may
|
|
22
|
+
* read; they name every topic as `topic:"<name>"`. (`/api/settings`, which describes the form,
|
|
23
|
+
* answers "Permission error" to an author.)
|
|
16
24
|
*
|
|
17
25
|
* 🔴 THE TOKEN goes in the `Authorization` header and nowhere else: not into a URL, a message, or an
|
|
18
26
|
* error. A failure is described by HTTP status, HotCRP's own messages, or the network error's text.
|
|
19
27
|
*/
|
|
20
28
|
import { messageOf } from "../../domain/text.js";
|
|
21
29
|
import { err } from "../../domain/result.js";
|
|
22
|
-
import { parseCreate, parseShow, parseUpdate } from "./response.js";
|
|
30
|
+
import { parseCreate, parseOptions, parseShow, parseUpdate, } from "./response.js";
|
|
23
31
|
/**
|
|
24
32
|
* The form field the PDF travels in, and the name the `json` object's `content_file` refers to it
|
|
25
33
|
* by. 🔴 NO DOT, SPACE OR BRACKET: HotCRP looks the name up in PHP's `$_FILES`, and PHP renames a
|
|
@@ -63,6 +71,7 @@ export function changeObject(id, c) {
|
|
|
63
71
|
...(c.pdf === null ? {} : { submission: { content_file: CONTENT_FIELD } }),
|
|
64
72
|
...(c.abstract === null ? {} : { abstract: c.abstract }),
|
|
65
73
|
...(c.submit ? { status: "submitted" } : {}),
|
|
74
|
+
...c.fields,
|
|
66
75
|
};
|
|
67
76
|
}
|
|
68
77
|
/** An author as HotCRP's submission object spells one (`Author::make_keyed` reads `name`). */
|
|
@@ -80,6 +89,7 @@ export function createObject(p) {
|
|
|
80
89
|
abstract: p.abstract,
|
|
81
90
|
authors: p.authors.map(authorObject),
|
|
82
91
|
submission: { content_file: CONTENT_FIELD },
|
|
92
|
+
...p.fields,
|
|
83
93
|
};
|
|
84
94
|
}
|
|
85
95
|
function formOf(object, pdf) {
|
|
@@ -110,6 +120,11 @@ export function hotcrpPortal(o) {
|
|
|
110
120
|
const a = await post(o, { p: "new", object, pdf: paper.pdf, save });
|
|
111
121
|
return a.ok ? parseCreate(a.value.status, a.value.body) : a;
|
|
112
122
|
},
|
|
123
|
+
async options() {
|
|
124
|
+
const url = `${o.url}/api/searchcompletion`;
|
|
125
|
+
const a = await call(url, { method: "GET" }, o.token, READ_TIMEOUT_MS);
|
|
126
|
+
return a.ok ? parseOptions(a.value.status, a.value.body) : a;
|
|
127
|
+
},
|
|
113
128
|
};
|
|
114
129
|
}
|
|
115
130
|
//# sourceMappingURL=portal.io.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portal.io.js","sourceRoot":"","sources":["../../../src/adapters/hotcrp/portal.io.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"portal.io.js","sourceRoot":"","sources":["../../../src/adapters/hotcrp/portal.io.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Result } from "../../domain/result.ts";
|
|
2
2
|
import { type Sha256 } from "../../domain/sha256.ts";
|
|
3
|
-
import type { CreateOutcome, PortalFailure, SubmissionView, UpdateOutcome } from "../../domain/submission.ts";
|
|
3
|
+
import type { CreateOutcome, PortalFailure, PortalOptions, SubmissionView, UpdateOutcome } from "../../domain/submission.ts";
|
|
4
4
|
/** HotCRP's `sha2-<hex>` → the sha256; null for any other hash it may name. */
|
|
5
5
|
export declare function sha256OfHash(hash: string): Sha256 | null;
|
|
6
6
|
/** `GET /api/paper` → the submission, or why there is none. */
|
|
@@ -15,4 +15,10 @@ export declare function parseUpdate(httpStatus: number, body: unknown): Result<U
|
|
|
15
15
|
* submission was saved (a dry run answers `"pid": "new"`).
|
|
16
16
|
*/
|
|
17
17
|
export declare function parseCreate(httpStatus: number, body: unknown): Result<CreateOutcome, PortalFailure>;
|
|
18
|
+
/**
|
|
19
|
+
* `GET /api/searchcompletion` → the topics an author can choose. A completion `topic:"<name>"` names
|
|
20
|
+
* a topic; a name that only groups others (`SE Topic`, beside `SE Topic: Human aspects`) is not one
|
|
21
|
+
* a submission can carry — measured 2026-10-20, HotCRP drops it — so it is left out.
|
|
22
|
+
*/
|
|
23
|
+
export declare function parseOptions(httpStatus: number, body: unknown): Result<PortalOptions, PortalFailure>;
|
|
18
24
|
//# sourceMappingURL=response.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../src/adapters/hotcrp/response.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../src/adapters/hotcrp/response.ts"],"names":[],"mappings":"AAWA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EACV,aAAa,EAEb,aAAa,EAEb,aAAa,EACb,cAAc,EACd,aAAa,EACd,MAAM,4BAA4B,CAAC;AA+CpC,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGxD;AAwFD,+DAA+D;AAC/D,wBAAgB,SAAS,CACvB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,GACZ,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC,CAMvC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,GACZ,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAYtC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,GACZ,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAStC;AAYD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,GACZ,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,CAatC"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* Only the fields the command uses are read; every other key HotCRP sends is dropped here. The field
|
|
5
5
|
* names are HotCRP's (`devel/openapi.json` and `devel/apidoc/submissions.md` in kohler/hotcrp):
|
|
6
6
|
* `GET /api/paper` answers `{ ok, paper, message_list? }`, `POST /api/paper` answers
|
|
7
|
-
* `{ ok, valid, change_list, message_list, dry_run?, pid }
|
|
7
|
+
* `{ ok, valid, change_list, message_list, dry_run?, pid }`, `GET /api/searchcompletion` answers
|
|
8
|
+
* `{ ok, searchcompletion: [<completion>, …] }`. A document's `hash` is
|
|
8
9
|
* `sha2-<64 hex>` when HotCRP stored a sha256; timestamps are Unix seconds.
|
|
9
10
|
*/
|
|
10
11
|
import { z } from "zod";
|
|
@@ -53,8 +54,15 @@ export function sha256OfHash(hash) {
|
|
|
53
54
|
const hex = SHA2.exec(hash)?.[1];
|
|
54
55
|
return hex === undefined ? null : parseSha256(hex);
|
|
55
56
|
}
|
|
56
|
-
/**
|
|
57
|
-
|
|
57
|
+
/**
|
|
58
|
+
* HotCRP prefixes a message with its format (`<0>` plain text, `<5>` HTML); the text is the rest,
|
|
59
|
+
* an HTML one's tags dropped («You may have missed conflicts of interest with <a href=…>…</a>»).
|
|
60
|
+
*/
|
|
61
|
+
function textOf(message) {
|
|
62
|
+
const m = /^<(\d+)>/.exec(message ?? "");
|
|
63
|
+
const rest = (message ?? "").slice(m?.[0].length ?? 0);
|
|
64
|
+
return (m?.[1] === "5" ? rest.replace(/<[^>]*>/g, "") : rest).trim();
|
|
65
|
+
}
|
|
58
66
|
/** The messages that say something: HotCRP also sends entries with no text, which print as blanks. */
|
|
59
67
|
const messagesOf = (list) => (list ?? [])
|
|
60
68
|
.map((m) => ({
|
|
@@ -152,4 +160,28 @@ export function parseCreate(httpStatus, body) {
|
|
|
152
160
|
id: saved && typeof pid === "number" ? pid : null,
|
|
153
161
|
});
|
|
154
162
|
}
|
|
163
|
+
const OptionsBody = z.object({
|
|
164
|
+
ok: z.literal(true),
|
|
165
|
+
searchcompletion: z.array(z.unknown()),
|
|
166
|
+
});
|
|
167
|
+
const TOPIC = /^topic:"(.+)"$/s;
|
|
168
|
+
/** A quoted search operand with its backslash escapes undone: the name as the form spells it. */
|
|
169
|
+
const unquoted = (quoted) => quoted.replace(/\\(.)/gs, "$1");
|
|
170
|
+
/**
|
|
171
|
+
* `GET /api/searchcompletion` → the topics an author can choose. A completion `topic:"<name>"` names
|
|
172
|
+
* a topic; a name that only groups others (`SE Topic`, beside `SE Topic: Human aspects`) is not one
|
|
173
|
+
* a submission can carry — measured 2026-10-20, HotCRP drops it — so it is left out.
|
|
174
|
+
*/
|
|
175
|
+
export function parseOptions(httpStatus, body) {
|
|
176
|
+
const status = statusOf(httpStatus, body);
|
|
177
|
+
const b = OptionsBody.safeParse(body);
|
|
178
|
+
if (!b.success || !is2xx(status))
|
|
179
|
+
return err(refusal(status, body, "the answer has no `searchcompletion`"));
|
|
180
|
+
const names = b.data.searchcompletion
|
|
181
|
+
.map((c) => (typeof c === "string" ? TOPIC.exec(c)?.[1] : undefined))
|
|
182
|
+
.filter((n) => n !== undefined)
|
|
183
|
+
.map(unquoted);
|
|
184
|
+
const groups = new Set(names.filter((n) => names.some((x) => x.startsWith(`${n}: `))));
|
|
185
|
+
return ok({ topics: names.filter((n) => !groups.has(n)) });
|
|
186
|
+
}
|
|
155
187
|
//# sourceMappingURL=response.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/adapters/hotcrp/response.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/adapters/hotcrp/response.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A HotCRP site before any token, as the `PortalSite` port: the variable its token is read from,
|
|
3
3
|
* where on the site an author makes one and with which scopes, what `submission new` leaves to the
|
|
4
|
-
* site, a submission's page — and the API, once there is a token. Every word here is HotCRP's.
|
|
4
|
+
* site (what the venue preset records no field for), a submission's page — and the API, once there is a token. Every word here is HotCRP's.
|
|
5
5
|
*/
|
|
6
6
|
import type { PortalSite } from "../../ports/submission-portal.ts";
|
|
7
7
|
/** The HotCRP site at `url` (no trailing slash). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../../src/adapters/hotcrp/site.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAQnE,oDAAoD;AACpD,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,
|
|
1
|
+
{"version":3,"file":"site.d.ts","sourceRoot":"","sources":["../../../src/adapters/hotcrp/site.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAQnE,oDAAoD;AACpD,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,KAAG,UAkBvC,CAAC"}
|
|
@@ -13,8 +13,7 @@ export const hotcrpSite = (url) => ({
|
|
|
13
13
|
scopes: "submeta:read and document:read (show), submeta:write and document:write (update, new) — tick all four to use every subcommand",
|
|
14
14
|
},
|
|
15
15
|
siteOnly: [
|
|
16
|
-
|
|
17
|
-
"topics, and every field the venue adds (paper type, artifact, consent boxes …)",
|
|
16
|
+
'every field of the form the venue preset does not record in "submission_fields" (with none recorded: the topics, the PC conflicts, a paper type, consent boxes …)',
|
|
18
17
|
],
|
|
19
18
|
submissionPage: (id) => `${url}/paper/${id === null ? "<its number>" : String(id)}`,
|
|
20
19
|
connect: (token) => hotcrpPortal({ url, token }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.js","sourceRoot":"","sources":["../../../src/adapters/hotcrp/site.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,oDAAoD;AACpD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAc,EAAE,CAAC,CAAC;IACtD,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC;IACjC,gBAAgB,EAAE,kBAAkB;IACpC,eAAe,EAAE,gBAAgB;IACjC,WAAW,EAAE;QACX,6FAA6F;QAC7F,+CAA+C;QAC/C,IAAI,EAAE,GAAG,GAAG,sBAAsB;QAClC,KAAK,EAAE,2CAA2C;QAClD,MAAM,EACJ,+HAA+H;KAClI;IACD,QAAQ,EAAE;QACR,
|
|
1
|
+
{"version":3,"file":"site.js","sourceRoot":"","sources":["../../../src/adapters/hotcrp/site.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,oDAAoD;AACpD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAc,EAAE,CAAC,CAAC;IACtD,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC;IACjC,gBAAgB,EAAE,kBAAkB;IACpC,eAAe,EAAE,gBAAgB;IACjC,WAAW,EAAE;QACX,6FAA6F;QAC7F,+CAA+C;QAC/C,IAAI,EAAE,GAAG,GAAG,sBAAsB;QAClC,KAAK,EAAE,2CAA2C;QAClD,MAAM,EACJ,+HAA+H;KAClI;IACD,QAAQ,EAAE;QACR,mKAAmK;KACpK;IACD,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,CACrB,GAAG,GAAG,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IAC7D,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;CACjD,CAAC,CAAC"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAS7C,OAAO,EAAE,MAAM,EAAE,MAAM,+CAA+C,CAAC;AAEvE,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAapE,OAAO,EAAyB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAwDrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAoBnE,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAGL,IAAI,EAEL,MAAM,WAAW,CAAC;AACnB,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AAYxB,OAAO,EAKL,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,SAAS,EAEf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAE,CAAC;AAChB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -141,6 +141,9 @@ const USAGE = `paperlint — machine-checkable gates for a paper kept in git
|
|
|
141
141
|
send the PDF (default: the paper's own), an abstract, or
|
|
142
142
|
"submitted". A DRY RUN unless --save: the portal checks the
|
|
143
143
|
change and keeps nothing
|
|
144
|
+
npx paperlint submission topics [paper]
|
|
145
|
+
the topics the venue's portal offers, against the ones its
|
|
146
|
+
preset records; exit 1 when they differ
|
|
144
147
|
npx paperlint studies new <paper-dir> "<title>" [--kind <kind>]
|
|
145
148
|
register a study: the next id in repro/studies.json, the folder
|
|
146
149
|
repro/<id>-<slug>/ with its README.md and plan.json (a template),
|
|
@@ -185,7 +188,9 @@ studies:
|
|
|
185
188
|
submission:
|
|
186
189
|
The venue preset declares the portal — "portal": { "kind": "hotcrp", "url": "<site>" } — and the
|
|
187
190
|
paper's paperlint.json its submission there — "submission": { "id": <number> }, written by new
|
|
188
|
-
— and, for new, its "authors": [{ "name", "email", "affiliation"? }].
|
|
191
|
+
— and, for new, its "authors": [{ "name", "email", "affiliation"? }]. Its "fields" answer the
|
|
192
|
+
form's own fields the preset records in "submission_fields" ({ "topics": [...], "pc_conflicts":
|
|
193
|
+
{ "<pc email>": "<type>" }, … }); new and update send them, checked first. The token comes only from
|
|
189
194
|
the environment, one variable per site: HOTCRP_TOKEN_<subdomain> on *.hotcrp.com, else
|
|
190
195
|
HOTCRP_TOKEN_<host and path> — e.g. HOTCRP_TOKEN_MSR2027 for msr2027.hotcrp.com,
|
|
191
196
|
HOTCRP_TOKEN_AIDC_SUBMIT_ACSAC_ORG for aidc.submit.acsac.org (HotCRP: Account settings →
|