paperlint 4.1.0 → 4.2.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/CLAUDE.md +24 -0
- package/CONTRIBUTING.md +7 -0
- package/dist/adapters/latex/document-class.d.ts +6 -5
- package/dist/adapters/latex/document-class.d.ts.map +1 -1
- package/dist/adapters/latex/document-class.js +18 -10
- package/dist/adapters/latex/document-class.js.map +1 -1
- package/dist/adapters/latex/includes.d.ts +12 -0
- package/dist/adapters/latex/includes.d.ts.map +1 -0
- package/dist/adapters/latex/includes.js +42 -0
- package/dist/adapters/latex/includes.js.map +1 -0
- package/dist/adapters/latex/index.d.ts +9 -5
- package/dist/adapters/latex/index.d.ts.map +1 -1
- package/dist/adapters/latex/index.js +8 -1
- package/dist/adapters/latex/index.js.map +1 -1
- package/dist/adapters/latex/nodes.d.ts +5 -1
- package/dist/adapters/latex/nodes.d.ts.map +1 -1
- package/dist/adapters/latex/nodes.js +6 -2
- package/dist/adapters/latex/nodes.js.map +1 -1
- package/dist/adapters/latex/parse.d.ts.map +1 -1
- package/dist/adapters/latex/parse.js +1 -0
- package/dist/adapters/latex/parse.js.map +1 -1
- package/dist/adapters/latex/prose.d.ts +8 -0
- package/dist/adapters/latex/prose.d.ts.map +1 -0
- package/dist/adapters/latex/prose.js +353 -0
- package/dist/adapters/latex/prose.js.map +1 -0
- package/dist/claim-provenance.d.ts +34 -0
- package/dist/claim-provenance.d.ts.map +1 -0
- package/dist/claim-provenance.js +146 -0
- package/dist/claim-provenance.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +20 -0
- package/dist/cli.js.map +1 -1
- package/dist/domain/paper-source.d.ts +58 -0
- package/dist/domain/paper-source.d.ts.map +1 -0
- package/dist/domain/paper-source.js +109 -0
- package/dist/domain/paper-source.js.map +1 -0
- package/dist/domain/sentences.d.ts +26 -0
- package/dist/domain/sentences.d.ts.map +1 -0
- package/dist/domain/sentences.js +48 -0
- package/dist/domain/sentences.js.map +1 -0
- package/dist/domain/tex-document.d.ts +39 -4
- package/dist/domain/tex-document.d.ts.map +1 -1
- package/dist/domain/tex-document.js.map +1 -1
- package/dist/eslint-rules/paper-typography.d.ts +7 -0
- package/dist/eslint-rules/paper-typography.d.ts.map +1 -1
- package/dist/eslint-rules/paper-typography.js +53 -1
- package/dist/eslint-rules/paper-typography.js.map +1 -1
- package/dist/ports/latex.d.ts +12 -1
- package/dist/ports/latex.d.ts.map +1 -1
- package/dist/register.d.ts +40 -0
- package/dist/register.d.ts.map +1 -0
- package/dist/register.js +134 -0
- package/dist/register.js.map +1 -0
- package/dist/tex-paper.d.ts +19 -0
- package/dist/tex-paper.d.ts.map +1 -0
- package/dist/tex-paper.js +105 -0
- package/dist/tex-paper.js.map +1 -0
- package/dist/tex-venue-rules.d.ts +7 -2
- package/dist/tex-venue-rules.d.ts.map +1 -1
- package/dist/tex-venue-rules.js +31 -17
- package/dist/tex-venue-rules.js.map +1 -1
- package/docs/rules/tex/claim-provenance.md +83 -0
- package/docs/rules/tex/missing-input.md +58 -0
- package/docs/rules/tex/register.md +77 -0
- package/docs/rules/tex/required-section.md +3 -1
- package/docs/rules/tex/template.md +12 -0
- package/docs/rules/tex/venue-leftover.md +4 -2
- package/docs/rules.md +3 -0
- package/eslint-rules/paper-typography.test.mjs +48 -1
- package/eslint-rules/paper-typography.ts +72 -1
- package/eslint.config.mjs +1 -0
- package/fixtures/real-markdown-paper/baseline.ts +8 -7
- package/package.json +2 -1
- package/skills/cold-read-diff/SKILL.md +31 -10
- package/skills/cold-read-diff/SKILL.md.spec.ts +30 -9
- package/skills/draft-paper/SKILL.md +2 -2
- package/skills/draft-paper/SKILL.md.spec.ts +1 -1
- package/skills/grade-paper-writing/SKILL.md +109 -44
- package/skills/grade-paper-writing/SKILL.md.spec.ts +108 -43
- package/skills/harden-paper/SKILL.md +35 -36
- package/skills/harden-paper/SKILL.md.spec.ts +34 -35
- package/skills/paper-adversarial-review/SKILL.md +2 -2
- package/skills/paper-adversarial-review/SKILL.md.spec.ts +1 -1
- package/skills/paper-pipeline/SKILL.md +3 -3
- package/skills/paper-pipeline/SKILL.md.spec.ts +2 -2
- package/skills/paper-pipeline/grade-paper-writing-ablation.eval.mjs +6 -6
- package/skills/paper-pipeline/references/writing-craft.md +53 -18
- package/skills/pc-panel-review/SKILL.md +36 -11
- package/skills/pc-panel-review/SKILL.md.spec.ts +35 -10
- package/src/adapters/latex/document-class.ts +20 -12
- package/src/adapters/latex/includes.ts +66 -0
- package/src/adapters/latex/index.test.ts +175 -1
- package/src/adapters/latex/index.ts +14 -4
- package/src/adapters/latex/nodes.ts +11 -2
- package/src/adapters/latex/parse.ts +1 -0
- package/src/adapters/latex/prose.ts +484 -0
- package/src/claim-provenance.test.ts +352 -0
- package/src/claim-provenance.ts +217 -0
- package/src/cli.ts +20 -0
- package/src/domain/paper-source.test.ts +156 -0
- package/src/domain/paper-source.ts +233 -0
- package/src/domain/sentences.ts +67 -0
- package/src/domain/tex-document.ts +36 -3
- package/src/ports/latex.ts +13 -0
- package/src/register.test.ts +165 -0
- package/src/register.ts +177 -0
- package/src/rule-cases.test.ts +54 -4
- package/src/tex-paper.test.ts +131 -0
- package/src/tex-paper.ts +152 -0
- package/src/tex-venue-rules.test.ts +87 -5
- package/src/tex-venue-rules.ts +62 -30
- package/skills/harden-paper/fixtures/uncited-assertions-sample.md +0 -43
- package/skills/harden-paper/fixtures/uncited-assertions-sample.tex +0 -77
|
@@ -9,7 +9,7 @@ import { experimental_skill } from "vigiles/spec";
|
|
|
9
9
|
export default experimental_skill({
|
|
10
10
|
name: "grade-paper-writing",
|
|
11
11
|
description:
|
|
12
|
-
'Use when asking "does this paper read well?" / "is the writing any good?" / "it reads like a wall of text and jargon" / "grade the writing" on a draft. Grades WRITING CRAFT only —
|
|
12
|
+
'Use when asking "does this paper read well?" / "is the writing any good?" / "it reads like a wall of text and jargon" / "grade the writing" on a draft. Grades WRITING CRAFT only — ten dimensions 1–5 (Title, Abstract, Intro architecture, Structure, Prose clarity, Jargon discipline, Landing-the-point, Figure economy, Honesty-without-hedge-stacking, Register distance to the target venue) against how the best-written papers read (Peyton Jones, McEnerney, Gopen & Swan; exemplars Trusting Trust, Carlini, Greshake) AND against 2–3 accepted papers of the target venue, naming the offending sentence and the fix for each. Runs the cold-read stall pass with TWO committed personas (a non-academic engineer per section, and a workshop reviewer skimming abstract, introduction and conclusion) whose stall inventory — not the rubric number — is the readability gate other skills consume (pc-panel-review, paper-adversarial-review, harden-paper). Defaults to a blind multi-grader panel; after fixes, mandates the claims-preservation diff (row `claims`). NOT a content/defect review (paper-adversarial-review / pc-panel-review), NOT a structural cut plan (tighten-paper — run that first on a bloated draft), NOT venue-bar content strength (study-accepted-papers). Compose with harden-paper (which calls it), draft-paper (generative counterpart), render-paper.',
|
|
13
13
|
tools: ["Read", "Write", "Edit", "Grep", "Glob", "Agent", "Skill"],
|
|
14
14
|
body: `
|
|
15
15
|
# grade-paper-writing — grade how the paper READS, then fix it sentence by sentence
|
|
@@ -22,7 +22,7 @@ doesn't drive home how crazy the situation is"* — which is a writing problem,
|
|
|
22
22
|
which the defect-hunting skills will pass right over.
|
|
23
23
|
|
|
24
24
|
Grounding (do NOT re-derive — read it): \`../paper-pipeline/references/writing-craft.md\` holds the craft
|
|
25
|
-
rules, the exemplar lessons, and the full
|
|
25
|
+
rules, the exemplar lessons, and the full ten-dimension rubric with 1/5 anchors. This skill applies it.
|
|
26
26
|
|
|
27
27
|
## The frame to hold while grading (from the reference)
|
|
28
28
|
The papers that make a human care share three moves: **(1) open on a problem/assumption the reader already
|
|
@@ -31,6 +31,14 @@ repeatable sentence.** Grade the draft against that trio, plus McEnerney's test
|
|
|
31
31
|
for the reader, or just record the author's thinking?* — and Gopen/Swan's sentence mechanics (payload in
|
|
32
32
|
the stress position, subject next to verb, one idea per sentence).
|
|
33
33
|
|
|
34
|
+
🔴 **Every push in this rubric has a floor as well as a ceiling.** The craft rules above pull toward
|
|
35
|
+
short, plain, punchy sentences, and each mechanical check below caps something: jargon, length, hedges,
|
|
36
|
+
connectives. A rubric in which every check is a ceiling has one equilibrium — terse assertions with no
|
|
37
|
+
signposting and no stated owner — and reviewers call that a blog post (*"overly literary"*, *"some
|
|
38
|
+
sentences are too informal"*, *"readers are often required to infer the intended relationships between
|
|
39
|
+
claims"*). The floor is the venue's own register: dimension #10 measures the distance to it, and no fix
|
|
40
|
+
this skill proposes may move the text further from it than it already is.
|
|
41
|
+
|
|
34
42
|
## Execution model — run the graders as subagents (context forks), by default
|
|
35
43
|
The blind panel (≥3 graders) and the cold-read stall pass **run in fresh subagents, not inline** — for two
|
|
36
44
|
reasons: (a) grading dumps the whole paper + long stall inventories into context, which gunks up the main
|
|
@@ -83,6 +91,21 @@ they supplied it.
|
|
|
83
91
|
Give the passage **as text in the prompt**, not as a file path. A path invites reading the
|
|
84
92
|
neighbours, and reading the neighbours is how this pass fails silently.
|
|
85
93
|
|
|
94
|
+
### Two readers, and both run
|
|
95
|
+
|
|
96
|
+
The pass runs two committed personas, each in its own subagent. Neither replaces the other: they
|
|
97
|
+
stall on different sentences.
|
|
98
|
+
|
|
99
|
+
| persona | reads | stalls on |
|
|
100
|
+
|---|---|---|
|
|
101
|
+
| **the engineer** — a strong practitioner outside academia (\`Sam\` in the reference) | every section, one subagent per section | terms, walls, sentences that mean nothing to someone who does not already hold the idea |
|
|
102
|
+
| **the workshop reviewer** — a PC member at the target venue with 40 minutes for the paper, Confidence 3 | the abstract, the introduction and the conclusion, skimmed in that order | a sentence whose result has no owner (the authors? a cited work? a population?), a relation between claims left for the reader to infer, and anything that does not read like a paper at this venue |
|
|
103
|
+
|
|
104
|
+
The engineer cannot report the second column by construction: he does not know what a paper at the
|
|
105
|
+
venue sounds like, and a sentence with no stated owner reads to him as confident, not as ambiguous.
|
|
106
|
+
The reviewer persona's full prompt is in the reference, next to the engineer's. Its findings go into
|
|
107
|
+
the same stall inventory, under their own classes (7 and 8 below).
|
|
108
|
+
|
|
86
109
|
### The one question, per sentence
|
|
87
110
|
|
|
88
111
|
> **What does this sentence claim? Restate it in your own words.**
|
|
@@ -104,6 +127,8 @@ every 2026-08-05 defect lived.
|
|
|
104
127
|
| 4 | 🔴 **means nothing** | every word is known, the sentence parses grammatically, and the reader still cannot say what it claims | *"the state to remove is not the rule but its claim about itself"* · *"constructions nobody built"* |
|
|
105
128
|
| 5 | 🔴 **sounds clever, carries nothing** | reads smoothly, feels like a payoff, and its content is a restatement or is borrowed from a section the reader has not read | *"nine deletions against four fixes is §5.1's cheap way out, winning again"* |
|
|
106
129
|
| 6 | 🔴 **vague heading** | a heading naming no concrete object — no linter, no configuration, no agent, no file | *"Three answers, all of them after the fact"* · *"The configuration nobody resolves"* |
|
|
130
|
+
| 7 | 🔴 **whose result?** (reviewer persona) | the reader cannot tell whether a claim is a property of the world, a cited finding, or the authors' own measurement | *"asked twice about the same repositories, it changes its mind on a fifth"* — the paper's own experiment, read as a fact about LLMs |
|
|
131
|
+
| 8 | 🔴 **off-register** (reviewer persona) | a sentence the venue's accepted papers would not contain: an aphorism, a fragment, a colloquial closing line, an unmarked jump between claims | *"Measure the bill, not the syllables."* — quoted back by a reviewer as "too informal" |
|
|
107
132
|
|
|
108
133
|
Class 5 is the one a knowing reader always waves through, because it reads *well*. Ask for it by
|
|
109
134
|
name — "which sentences sound clever but say less than they appear to?" — or it will not be reported.
|
|
@@ -139,11 +164,12 @@ is what happened.
|
|
|
139
164
|
2. **Run the cold-read stall pass FIRST — the full specification is below, under "The stall pass".**
|
|
140
165
|
It was previously a pointer to a reference section that did not exist, which is why the pass drifted
|
|
141
166
|
into "log where I stumbled" and stopped catching the class it exists for.
|
|
142
|
-
2. **Score all
|
|
167
|
+
2. **Score all ten dimensions 1–5** using the anchors in the reference, on the **absolute scale** defined
|
|
143
168
|
there (5 = best-in-field, **3 = the default for a solid paper**; most dimensions are 2–3). Weight Prose
|
|
144
|
-
(#5), Jargon (#6), Landing (#7) ×2 —
|
|
169
|
+
(#5), Jargon (#6), Landing (#7) and Register (#10) ×2 — the first three are where "wall of jargon"
|
|
170
|
+
lives, the fourth is where "blog post" lives. Report raw /50 + weighted /70.
|
|
145
171
|
**Do NOT trust a single grade.** A lone grader — especially one that just wrote or verified the paper —
|
|
146
|
-
anchors optimistic; a
|
|
172
|
+
anchors optimistic; a 60/70-looking number is suspect until confirmed. So **when the score matters, run a
|
|
147
173
|
blind panel: ≥3 independent graders (fresh subagents, ideally an adversarial model like Fable), each
|
|
148
174
|
blind to any prior score, to each other, and to the "it improved" framing — given only the current page
|
|
149
175
|
and the field's best.** Report the **distribution (per-dimension + overall min / median / max)**, not one
|
|
@@ -152,6 +178,18 @@ is what happened.
|
|
|
152
178
|
3. **For every dimension scoring ≤3, name the specific offending sentence or section** and write the fix —
|
|
153
179
|
not "tighten the prose" but the rewritten sentence, or "move the point from ¶3 to ¶1", or "gloss
|
|
154
180
|
\`operation-normalized\` in plain words at first use." Fixes must be applyable, not vibes.
|
|
181
|
+
3a. **Grade #10, register distance, against the venue's own papers — not against the exemplars.**
|
|
182
|
+
Take 2–3 papers accepted at the target venue (or, for a first-edition workshop, at its parent
|
|
183
|
+
conference) in the same paper type: fetch them from the proceedings or the program page, or use the
|
|
184
|
+
ones the author supplies. Read the abstract, the introduction and the conclusion of each beside the
|
|
185
|
+
draft's, and record, for both sides: how each result is owned (*we measured* · a citation · a named
|
|
186
|
+
population), how often a point is made by contrast (*not X but Y*, *rather than*, *instead of* —
|
|
187
|
+
the measured difference between this corpus and accepted papers), sentence length and fragments,
|
|
188
|
+
and whether any sentence is an aphorism or a closing punchline. The
|
|
189
|
+
score is the distance: 5 = a reviewer could not tell the draft from the reference papers by register;
|
|
190
|
+
1 = it reads as a different genre. Quote the reference sentence beside each draft sentence you flag.
|
|
191
|
+
If no accepted paper can be fetched or supplied, write \`#10: not graded — no reference papers\` and
|
|
192
|
+
say which were tried; a register score from memory is the guess this dimension exists to replace.
|
|
155
193
|
4. **Find the paper's three-move opportunities:** what held assumption could open it? what is its single
|
|
156
194
|
most visceral concrete instance (lead with that, not the mean)? what one sentence should the reader
|
|
157
195
|
quote? If the draft is missing any, that's the highest-leverage fix.
|
|
@@ -216,7 +254,7 @@ is what happened.
|
|
|
216
254
|
8. **Run the avoid-list grep (mechanical).** Grep the source for the slop / web-slang / filler / hype words
|
|
217
255
|
in \`../paper-pipeline/references/writing-craft.md\` → "The avoid-list", and report every hit with its line number and a
|
|
218
256
|
replacement. These are scrutinize-words, not absolute bans — but each hit is a readability debit against
|
|
219
|
-
dimension #6 (Jargon) and the
|
|
257
|
+
dimension #6 (Jargon) and the north star — readable by the target reader, in the venue's register. (This session's miss that motivated
|
|
220
258
|
it: "listicle" survived into a submitted-ready AISec draft.)
|
|
221
259
|
7. **Wall-of-text sweep (see \`writing-craft.md\` → "The wall-of-text check").** Flag any paragraph running
|
|
222
260
|
>~15 source lines / ~150 words or covering >3 sub-points — a visual wall the reader's eye slides off
|
|
@@ -230,7 +268,7 @@ is what happened.
|
|
|
230
268
|
isn't strong enough" and "nothing here is quotable."
|
|
231
269
|
|
|
232
270
|
## Output
|
|
233
|
-
1. **Scorecard** —
|
|
271
|
+
1. **Scorecard** — ten dimensions with one-line justification each; raw /50 + weighted /70. When a blind
|
|
234
272
|
panel was run (the default when the score matters), report the **distribution** — per-dimension and
|
|
235
273
|
overall min / median / max across graders — not a single number, and name any dimension they split on.
|
|
236
274
|
Lead with the two or three dimensions dragging it down, ranked.
|
|
@@ -305,19 +343,31 @@ Mechanical leg: \`paper-lint\`'s plain-language pass flags any sentence carrying
|
|
|
305
343
|
citation groups, or five or more reference numbers in under 45 words. It cannot judge whether the
|
|
306
344
|
prose is *good*; it reliably catches this one shape, which is the shape that recurs.
|
|
307
345
|
|
|
308
|
-
**And the words themselves, not only the sentences.** *
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
346
|
+
**And the words themselves, not only the sentences.** *Utilise* means *use*. The "Jargon discipline"
|
|
347
|
+
dimension below does not catch this, because the word looks perfectly at home — judgment slides right
|
|
348
|
+
past it. What catches it is a list: \`paper-lint\` carries ~30 words with a plainer equivalent (utilise ·
|
|
349
|
+
constitutes · prior to · necessitates · facilitates · leverage · albeit · in order to …) and names the
|
|
350
|
+
replacement in the nudge.
|
|
351
|
+
|
|
352
|
+
🔴 **The swap is two-sided: replace a word only when the plain word stays in academic register.**
|
|
353
|
+
*Utilise → use* and *in order to → to* pass: the replacement is what the venue's own papers write.
|
|
354
|
+
*Adherence → following*, *demonstrates → shows* in a results sentence, *methodology → how we did it*
|
|
355
|
+
do not pass when the reference papers of dimension #10 use the first form — there the plain word is a
|
|
356
|
+
step toward a blog post, and the finding is withdrawn. Keep the list narrow — only words where the swap
|
|
357
|
+
changes neither meaning nor register — and never rewrite a cited work's title to obey it.
|
|
358
|
+
|
|
359
|
+
**Signposting is the register, not a tic, and this skill never removes it on style grounds.** Frame
|
|
360
|
+
markers and relation words — *we show*, *this section*, *first … finally*, *in contrast*, *therefore*,
|
|
361
|
+
*however* — are how academic prose tells the reader what kind of claim comes next and how it relates to
|
|
362
|
+
the last one. Their count does not separate a draft from accepted papers (see "Contrast framing"
|
|
363
|
+
below); removing them does, in the wrong direction. Flag a connective only when it asserts a relation
|
|
364
|
+
the two sentences do not have (a *therefore* that does not follow), or when it is empty filler (*it is
|
|
365
|
+
worth noting that*). Never flag one for being academic.
|
|
366
|
+
|
|
367
|
+
**Other markers worth a pass:** nominalisation density (*an honest accounting of what the construction
|
|
368
|
+
costs* — abstract nouns doing the work verbs should do) and statistics chained through a paragraph
|
|
369
|
+
instead of sitting in a table. Numbers belong in a table the moment there are more than about six of
|
|
370
|
+
them in one paragraph.
|
|
321
371
|
|
|
322
372
|
|
|
323
373
|
## 🔴 The class the rubric could not see, and why it kept coming back (2026-08-04)
|
|
@@ -336,25 +386,37 @@ them measures words and sentences. The defect is not in the words.
|
|
|
336
386
|
|
|
337
387
|
Two separable failures:
|
|
338
388
|
|
|
339
|
-
### 1.
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
389
|
+
### 1. Contrast framing, and a frame that carries nothing
|
|
390
|
+
|
|
391
|
+
**What separates this corpus from accepted papers is contrast, not signposting — measure that
|
|
392
|
+
first.** Counted with the same counter on five accepted ACSAC 2024/25 ML-security papers against a
|
|
393
|
+
paper of ours: *"not X but Y"* at 35.5 per 10,000 words in ours against at most 4.9 there (and five
|
|
394
|
+
of their six hits were *"not only … but also"*); *"rather than / instead of"* at 19.9 against at most
|
|
395
|
+
5.4. Every sentence that defines its point by what it is not is a sentence whose point the reader
|
|
396
|
+
must reconstruct. **Rewrite heuristic:** state the thing; move the rejected alternative to its own
|
|
397
|
+
sentence, or drop it if nobody proposed it. Check *instead of · rather than · not … but* first,
|
|
398
|
+
against the same count on the reference papers of dimension #10.
|
|
399
|
+
|
|
400
|
+
**Frame markers do not separate us from accepted papers, and are not a target in either direction.**
|
|
401
|
+
Hyland's *frame markers* (*this paper · this section · we show · first … finally · in what follows*)
|
|
402
|
+
measured 0.76–3.1 per 1,000 words on those five accepted papers (median 1.46); the lowest accepted
|
|
403
|
+
paper measured is 0.76, and ours sat inside that range. So neither "remove signposting" nor "add
|
|
404
|
+
signposting to reach a number" is a fix. A published average from a different counter (Hyland's
|
|
405
|
+
~5 per 1,000) says nothing about where a venue's floor lies.
|
|
406
|
+
|
|
407
|
+
What IS a defect is a frame that carries nothing. *"Two findings come first, because they bind
|
|
408
|
+
whatever else you build"* says nothing about rules files, agents, or repositories: the frame is
|
|
409
|
+
there, and the claim it announces is not. List the frames whose announced content never arrives
|
|
410
|
+
within the next two sentences; those are the findings. **Rewrite heuristic:** keep the frame and make
|
|
411
|
+
it carry the claim. *"Two findings come first, because they bind whatever else you build. Asked the
|
|
412
|
+
same question twice…"* → *"We first report two properties of the model that constrain any harness
|
|
413
|
+
built on it. Asked the same question twice with identical inputs, it changed its verdict on 21.5% of
|
|
414
|
+
rows (Section 4.5)."* The frame now names what follows, and the sentence after it says whose
|
|
415
|
+
measurement it is.
|
|
416
|
+
|
|
417
|
+
⚠️ **Vocabulary lists are not a register signal.** *robust*, *significant*, *comprehensive* and the
|
|
418
|
+
rest of the AI-tells vocabulary fire on every one of the five accepted papers. Flag such a word only
|
|
419
|
+
when it is empty in its sentence, never as evidence of a machine or of the wrong register.
|
|
358
420
|
|
|
359
421
|
### 2. The qualification eats the claim
|
|
360
422
|
|
|
@@ -394,9 +456,11 @@ one sentence.
|
|
|
394
456
|
They are the only two sections most readers finish, and the abstract is the only one every reviewer
|
|
395
457
|
reads before forming a view. Grade them **separately and harder**:
|
|
396
458
|
|
|
397
|
-
-
|
|
459
|
+
- no frame that announces a claim and then does not make it; *"We show that…"* naming the authors'
|
|
460
|
+
own result is the register of an abstract, not a defect;
|
|
398
461
|
- first sentence is about the world, never about the document;
|
|
399
|
-
- no number arrives without the unit it counts (*"21.5% of rows"* — rows of what?)
|
|
462
|
+
- no number arrives without the unit it counts (*"21.5% of rows"* — rows of what?) or without its
|
|
463
|
+
owner — the authors' measurement, a cited work, or a named population;
|
|
400
464
|
- the last sentence of each is a **conclusion**, not an announcement of one;
|
|
401
465
|
- nothing may refer forward to a section the reader has not read.
|
|
402
466
|
|
|
@@ -406,8 +470,9 @@ one did, and it was the worst section in the paper by measured density both time
|
|
|
406
470
|
|
|
407
471
|
### What is NOT mechanizable here
|
|
408
472
|
|
|
409
|
-
Whether a frame marker
|
|
410
|
-
whether a hedge is honest or defensive.
|
|
473
|
+
Whether a frame marker carries its claim (*"we claim nothing there"* genuinely scopes one) and
|
|
474
|
+
whether a hedge is honest or defensive. The mechanical leg that does exist: \`tex/claim-provenance\`
|
|
475
|
+
reports every sentence of the body that holds a number and no owner. Count them, surface them, and leave the verdict to a reader.
|
|
411
476
|
The counter's job is that nobody can say afterwards they did not know.
|
|
412
477
|
|
|
413
478
|
## Compose with
|
|
@@ -4,7 +4,7 @@ description: Use when asking "is this paper actually ready to submit?" / "what's
|
|
|
4
4
|
allowed-tools: [Read, Write, Edit, Grep, Glob, Bash, WebSearch, WebFetch, Agent, Skill]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
<!-- vigiles:sha256:
|
|
7
|
+
<!-- vigiles:sha256:35f1ec023504e0ce compiled from skills/harden-paper/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# harden-paper — the multi-axis pre-submit gate
|
|
10
10
|
|
|
@@ -19,7 +19,7 @@ allowed-tools: [Read, Write, Edit, Grep, Glob, Bash, WebSearch, WebFetch, Agent,
|
|
|
19
19
|
number, and omission must survive on the page. Go axis by axis; for each, **find → fix → re-verify**,
|
|
20
20
|
don't just list. Below, each axis says what to run / check and the specific traps that recur.
|
|
21
21
|
|
|
22
|
-
> Axes 1–10 are **soundness** gates (get it accepted / avoid desk-reject). Axis 11 (**citability**) is
|
|
22
|
+
> Axes 1–10 and 12 are **soundness** gates (get it accepted / avoid desk-reject). Axis 11 (**citability**) is
|
|
23
23
|
> the *impact* gate — a correct-but-forgettable paper passes review and gets cited zero times. For a
|
|
24
24
|
> body of work, citability is not optional polish; run it as a gate too.
|
|
25
25
|
|
|
@@ -61,7 +61,8 @@ middle sags" — wasting the polish on possibly-cut sections.
|
|
|
61
61
|
there with no pointer reaching it, the body is overclaiming and "it's in the appendix" is not
|
|
62
62
|
a defence — reviewers are not required to read appendices, and ARR says so in as many words.
|
|
63
63
|
Rule and the sorting test: `paper-pipeline/references/body-vs-appendix.md`.
|
|
64
|
-
Mechanical leg:
|
|
64
|
+
Mechanical leg: `tex/claim-provenance` (axis 7) reports every sentence that states a number and
|
|
65
|
+
does not say whose it is.
|
|
65
66
|
|
|
66
67
|
3. **Novelty vs the nearest neighbor** — the scoop check. Search for the paper that *already did your
|
|
67
68
|
thing* (`verify-citations` covers metadata; here, actively hunt the closest empirical/method twin).
|
|
@@ -114,40 +115,18 @@ middle sags" — wasting the polish on possibly-cut sections.
|
|
|
114
115
|
to an artifact output or a `\cite`; an untraceable number is treated as fabricated** (source or cut).
|
|
115
116
|
*(This session: "37% growth to 18% cut across independent runs" was in neither — only the artifact
|
|
116
117
|
evaluator caught it.)*
|
|
117
|
-
- **`npx
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
Citation forms recognized: **any `\…cite…` macro** (`\cite`/`\citep`/`\citet`/`\footcite`/`\smartcite`/
|
|
126
|
-
`\parencite`/`\textcite`/`\citeauthor`/`\citeyearpar`…), `\footnote`, **numeric cites** `[12]`/`[3,4]`/
|
|
127
|
-
`[1]` (the dominant CS style), a URL, or a markdown `[@key]`/`[^fn]`/`](link)`. This is the exact thing a
|
|
128
|
-
reviewer pounces on ("[citation needed]"). *Complementary to `check-numbers.sh`, not a dup:* that one
|
|
129
|
-
traces **every** number; this one flags **empirical assertions lacking a cite** and stays quiet on the
|
|
130
|
-
paper's own results. **Guards** (so it doesn't false-alarm): years (`2026`), version numbers (`v1.2`,
|
|
131
|
-
`Node 18`), figure/table/section/equation refs — both literal (`Table 2 shows …`) and cross-ref macros
|
|
132
|
-
(`Table~\ref{tab:x} shows …`, `\autoref`/`\Cref`), numbers inside math mode, **tabular/array bodies** and
|
|
133
|
-
**ordered-list markers** (`2.`), **definitions** (`is defined as`/`refers to`/`we define`), and the
|
|
134
|
-
paper's **OWN reported results**. The own-result guard is a **subject-proximity heuristic** (not a
|
|
135
|
-
parser): it exempts a sentence only when first person is the *subject* — it **starts** with
|
|
136
|
-
`we`/`this paper`/`this work`, or has `we <verb>` / `our <contribution-noun>` — so `We find a 6% reduction`
|
|
137
|
-
passes but a bare `Transformers outperform RNNs by 12%` flags, and, deliberately, `US-based detectors
|
|
138
|
-
reject 40%` (country "US", not "us") and `Our reading of the literature shows X outperforms Y` (a claim
|
|
139
|
-
about others) still **flag**. Fix each hit by attaching a cite, reframing honestly as your own result, by
|
|
140
|
-
cutting the claim — or, for a genuinely defensible one, an `eslint-disable-next-line` **with the reason
|
|
141
|
-
on the spot**. Contract fixtures live in `fixtures/uncited-assertions-sample.{tex,md}` (annotated
|
|
142
|
-
MUST/MUST-NOT-flag cases, incl. the numeric-cite / `\footcite` / `\ref`-float / list-marker / own-result
|
|
143
|
-
regressions) and are still the rule's test — `eslint-rules/paper-claims.harness.mjs` runs them.
|
|
144
|
-
*(Severity is `warn` on purpose: both the own-result guard and sentence splitting are **heuristics** —
|
|
145
|
-
a fixed abbreviation set (`vs.`/`e.g.`/`i.e.`/`et al.`/`cf.`) is protected from false breaks, and on the
|
|
146
|
-
four committed papers the rule reports 374 findings. Treat volume as advisory, not a hard gate.)*
|
|
118
|
+
- **`npx paperlint lint`** — the *overclaim* axis (axis 2), compiled, as `tex/claim-provenance`: every
|
|
119
|
+
sentence of the body that states a number and has no owner — no citation or link, no *we*/*our*, no
|
|
120
|
+
`\ref` or "Table 2", no named sample ("n = 134", "48 runs") — is reported, because a reader cannot
|
|
121
|
+
tell a cited finding from the authors' own measurement from a general fact. Fix each hit by saying
|
|
122
|
+
whose the number is in the sentence, or keep it with an `eslint-disable-next-line` **and the reason
|
|
123
|
+
on the spot**. What it cannot judge (whether the owner is the right one) is on its page,
|
|
124
|
+
`docs/rules/tex/claim-provenance.md`. Complementary to `check-numbers.sh`, not a dup: that one traces
|
|
125
|
+
**every** number to the artifact; this one asks each number's sentence for its owner.
|
|
147
126
|
Enumeration is mechanical; the per-line trace/reconcile stays judgment (prose isn't policy — compile the list).
|
|
148
127
|
|
|
149
128
|
8. **Writing craft (audience-appropriate language + how it reads)** — run **`grade-paper-writing`** (the
|
|
150
|
-
|
|
129
|
+
10-dim rubric in `../paper-pipeline/references/writing-craft.md`).
|
|
151
130
|
🔴 **Invoke it BY NAME with the Skill tool — do not describe the need and hope it fires.**
|
|
152
131
|
Selection of this skill is **not reliable, and not reliably bad either**: the same eight prompts,
|
|
153
132
|
the same description and the same 36 competitors measured **21%** in the morning and **50–54%**
|
|
@@ -159,8 +138,9 @@ middle sags" — wasting the polish on possibly-cut sections.
|
|
|
159
138
|
An explicit call does not depend on selection at all. Without it this axis silently does not run,
|
|
160
139
|
and a hardening pass that skipped its readability axis reports the same "done" as one that ran it.
|
|
161
140
|
**Downstream of axis 0** (don't polish a
|
|
162
|
-
section slated to be cut). Two hard rules from the AISec session: (a) run the stall pass as
|
|
163
|
-
|
|
141
|
+
section slated to be cut). Two hard rules from the AISec session: (a) run the stall pass as **both persona
|
|
142
|
+
subagents** — "Sam", a non-expert engineer, per-section for a dense paper, and the workshop reviewer
|
|
143
|
+
skimming abstract, introduction and conclusion for whose result each sentence states — the rubric SCORE under-fires because a
|
|
164
144
|
frontier grader knows every term and never stalls (it scored a wall-heavy paper 44/60); the persona inventory,
|
|
165
145
|
not the number, is the gate. (b) **A wall / spec-sheet / coined-jargon-heading HARD-FAILS this axis — it is not
|
|
166
146
|
a "minor" note.** Strip jargon the *target venue's* reviewers won't know (register-calibration: keep field-native
|
|
@@ -210,6 +190,23 @@ middle sags" — wasting the polish on possibly-cut sections.
|
|
|
210
190
|
accrue to the extended/arXiv version. Log the follow-on (fuller taxonomy, bigger corpus, the
|
|
211
191
|
dropped refs) so the citable artifact exists. Put a preprint where people can find and cite it.
|
|
212
192
|
|
|
193
|
+
12. **Headline results table** — every number in the abstract and in the conclusion appears in ONE
|
|
194
|
+
table in the body, one row per headline result, with these columns: the result as stated, its
|
|
195
|
+
**n** (what was counted, and how many), its **ground-truth source** (the authors' own measurement
|
|
196
|
+
with the section that reports it, a cited work, or a public dataset), any correction applied
|
|
197
|
+
(multiplicity, a recall floor, a rerun), and the one-line reading the paper draws from it.
|
|
198
|
+
- **Find:** list every number in the abstract and the conclusion (`check-numbers.sh` enumerates
|
|
199
|
+
them), then look each one up in the table. A number with no row, a row with no n, or a row with
|
|
200
|
+
no source is a finding — one per number, not one for the axis.
|
|
201
|
+
- **Why it is an axis and not a nicety:** a reviewer who cannot tell *"properties of LLMs,
|
|
202
|
+
statistical observations from repositories, and experimental findings produced by the authors"*
|
|
203
|
+
apart asks for exactly this — *"a compact table summarizing each headline result, sample size,
|
|
204
|
+
ground-truth source, correction, and final interpretation"*. Prose cannot carry five attributes
|
|
205
|
+
per number; the table can, and it gives every headline claim the owner that
|
|
206
|
+
`tex/claim-provenance` asks of each sentence.
|
|
207
|
+
- **Fix:** build the table, point the abstract's and the conclusion's numbers at it, and move a
|
|
208
|
+
number that has no n or no source out of the abstract until it has both.
|
|
209
|
+
|
|
213
210
|
## Mechanical submission gates (do these yourself — don't punt to the author)
|
|
214
211
|
|
|
215
212
|
- **Double-blind hygiene.** Run the mechanical gate — it greps the deny-list across the PDF text +
|
|
@@ -247,6 +244,8 @@ ready"** — the gates are orthogonal axes and do not average out. **Ready ⇔ A
|
|
|
247
244
|
left unresolved;
|
|
248
245
|
- **Nearest-neighbor scoop** — axis 3 answered: the closest sibling found and either distinguished
|
|
249
246
|
or escalated (`analyze-sibling-paper`);
|
|
247
|
+
- **Headline results table** — axis 12: every number in the abstract and the conclusion has a row
|
|
248
|
+
with its n and its ground-truth source;
|
|
250
249
|
- **The mechanical gates** — de-anon hygiene, page/word-fit, format template.
|
|
251
250
|
|
|
252
251
|
> 🔴 **Citations and scoop were MISSING from this list until 2026-08-31, and the omission had
|
|
@@ -36,7 +36,7 @@ export default experimental_skill({
|
|
|
36
36
|
number, and omission must survive on the page. Go axis by axis; for each, **find → fix → re-verify**,
|
|
37
37
|
don't just list. Below, each axis says what to run / check and the specific traps that recur.
|
|
38
38
|
|
|
39
|
-
> Axes 1–10 are **soundness** gates (get it accepted / avoid desk-reject). Axis 11 (**citability**) is
|
|
39
|
+
> Axes 1–10 and 12 are **soundness** gates (get it accepted / avoid desk-reject). Axis 11 (**citability**) is
|
|
40
40
|
> the *impact* gate — a correct-but-forgettable paper passes review and gets cited zero times. For a
|
|
41
41
|
> body of work, citability is not optional polish; run it as a gate too.
|
|
42
42
|
|
|
@@ -78,7 +78,8 @@ middle sags" — wasting the polish on possibly-cut sections.
|
|
|
78
78
|
there with no pointer reaching it, the body is overclaiming and "it's in the appendix" is not
|
|
79
79
|
a defence — reviewers are not required to read appendices, and ARR says so in as many words.
|
|
80
80
|
Rule and the sorting test: \`paper-pipeline/references/body-vs-appendix.md\`.
|
|
81
|
-
Mechanical leg:
|
|
81
|
+
Mechanical leg: \`tex/claim-provenance\` (axis 7) reports every sentence that states a number and
|
|
82
|
+
does not say whose it is.
|
|
82
83
|
|
|
83
84
|
3. **Novelty vs the nearest neighbor** — the scoop check. Search for the paper that *already did your
|
|
84
85
|
thing* (\`verify-citations\` covers metadata; here, actively hunt the closest empirical/method twin).
|
|
@@ -131,40 +132,18 @@ middle sags" — wasting the polish on possibly-cut sections.
|
|
|
131
132
|
to an artifact output or a \`\\cite\`; an untraceable number is treated as fabricated** (source or cut).
|
|
132
133
|
*(This session: "37% growth to 18% cut across independent runs" was in neither — only the artifact
|
|
133
134
|
evaluator caught it.)*
|
|
134
|
-
- **\`npx
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
Citation forms recognized: **any \`\\…cite…\` macro** (\`\\cite\`/\`\\citep\`/\`\\citet\`/\`\\footcite\`/\`\\smartcite\`/
|
|
143
|
-
\`\\parencite\`/\`\\textcite\`/\`\\citeauthor\`/\`\\citeyearpar\`…), \`\\footnote\`, **numeric cites** \`[12]\`/\`[3,4]\`/
|
|
144
|
-
\`[1]\` (the dominant CS style), a URL, or a markdown \`[@key]\`/\`[^fn]\`/\`](link)\`. This is the exact thing a
|
|
145
|
-
reviewer pounces on ("[citation needed]"). *Complementary to \`check-numbers.sh\`, not a dup:* that one
|
|
146
|
-
traces **every** number; this one flags **empirical assertions lacking a cite** and stays quiet on the
|
|
147
|
-
paper's own results. **Guards** (so it doesn't false-alarm): years (\`2026\`), version numbers (\`v1.2\`,
|
|
148
|
-
\`Node 18\`), figure/table/section/equation refs — both literal (\`Table 2 shows …\`) and cross-ref macros
|
|
149
|
-
(\`Table~\\ref{tab:x} shows …\`, \`\\autoref\`/\`\\Cref\`), numbers inside math mode, **tabular/array bodies** and
|
|
150
|
-
**ordered-list markers** (\`2.\`), **definitions** (\`is defined as\`/\`refers to\`/\`we define\`), and the
|
|
151
|
-
paper's **OWN reported results**. The own-result guard is a **subject-proximity heuristic** (not a
|
|
152
|
-
parser): it exempts a sentence only when first person is the *subject* — it **starts** with
|
|
153
|
-
\`we\`/\`this paper\`/\`this work\`, or has \`we <verb>\` / \`our <contribution-noun>\` — so \`We find a 6% reduction\`
|
|
154
|
-
passes but a bare \`Transformers outperform RNNs by 12%\` flags, and, deliberately, \`US-based detectors
|
|
155
|
-
reject 40%\` (country "US", not "us") and \`Our reading of the literature shows X outperforms Y\` (a claim
|
|
156
|
-
about others) still **flag**. Fix each hit by attaching a cite, reframing honestly as your own result, by
|
|
157
|
-
cutting the claim — or, for a genuinely defensible one, an \`eslint-disable-next-line\` **with the reason
|
|
158
|
-
on the spot**. Contract fixtures live in \`fixtures/uncited-assertions-sample.{tex,md}\` (annotated
|
|
159
|
-
MUST/MUST-NOT-flag cases, incl. the numeric-cite / \`\\footcite\` / \`\\ref\`-float / list-marker / own-result
|
|
160
|
-
regressions) and are still the rule's test — \`eslint-rules/paper-claims.harness.mjs\` runs them.
|
|
161
|
-
*(Severity is \`warn\` on purpose: both the own-result guard and sentence splitting are **heuristics** —
|
|
162
|
-
a fixed abbreviation set (\`vs.\`/\`e.g.\`/\`i.e.\`/\`et al.\`/\`cf.\`) is protected from false breaks, and on the
|
|
163
|
-
four committed papers the rule reports 374 findings. Treat volume as advisory, not a hard gate.)*
|
|
135
|
+
- **\`npx paperlint lint\`** — the *overclaim* axis (axis 2), compiled, as \`tex/claim-provenance\`: every
|
|
136
|
+
sentence of the body that states a number and has no owner — no citation or link, no *we*/*our*, no
|
|
137
|
+
\`\\ref\` or "Table 2", no named sample ("n = 134", "48 runs") — is reported, because a reader cannot
|
|
138
|
+
tell a cited finding from the authors' own measurement from a general fact. Fix each hit by saying
|
|
139
|
+
whose the number is in the sentence, or keep it with an \`eslint-disable-next-line\` **and the reason
|
|
140
|
+
on the spot**. What it cannot judge (whether the owner is the right one) is on its page,
|
|
141
|
+
\`docs/rules/tex/claim-provenance.md\`. Complementary to \`check-numbers.sh\`, not a dup: that one traces
|
|
142
|
+
**every** number to the artifact; this one asks each number's sentence for its owner.
|
|
164
143
|
Enumeration is mechanical; the per-line trace/reconcile stays judgment (prose isn't policy — compile the list).
|
|
165
144
|
|
|
166
145
|
8. **Writing craft (audience-appropriate language + how it reads)** — run **\`grade-paper-writing\`** (the
|
|
167
|
-
|
|
146
|
+
10-dim rubric in \`../paper-pipeline/references/writing-craft.md\`).
|
|
168
147
|
🔴 **Invoke it BY NAME with the Skill tool — do not describe the need and hope it fires.**
|
|
169
148
|
Selection of this skill is **not reliable, and not reliably bad either**: the same eight prompts,
|
|
170
149
|
the same description and the same 36 competitors measured **21%** in the morning and **50–54%**
|
|
@@ -176,8 +155,9 @@ middle sags" — wasting the polish on possibly-cut sections.
|
|
|
176
155
|
An explicit call does not depend on selection at all. Without it this axis silently does not run,
|
|
177
156
|
and a hardening pass that skipped its readability axis reports the same "done" as one that ran it.
|
|
178
157
|
**Downstream of axis 0** (don't polish a
|
|
179
|
-
section slated to be cut). Two hard rules from the AISec session: (a) run the stall pass as
|
|
180
|
-
|
|
158
|
+
section slated to be cut). Two hard rules from the AISec session: (a) run the stall pass as **both persona
|
|
159
|
+
subagents** — "Sam", a non-expert engineer, per-section for a dense paper, and the workshop reviewer
|
|
160
|
+
skimming abstract, introduction and conclusion for whose result each sentence states — the rubric SCORE under-fires because a
|
|
181
161
|
frontier grader knows every term and never stalls (it scored a wall-heavy paper 44/60); the persona inventory,
|
|
182
162
|
not the number, is the gate. (b) **A wall / spec-sheet / coined-jargon-heading HARD-FAILS this axis — it is not
|
|
183
163
|
a "minor" note.** Strip jargon the *target venue's* reviewers won't know (register-calibration: keep field-native
|
|
@@ -227,6 +207,23 @@ middle sags" — wasting the polish on possibly-cut sections.
|
|
|
227
207
|
accrue to the extended/arXiv version. Log the follow-on (fuller taxonomy, bigger corpus, the
|
|
228
208
|
dropped refs) so the citable artifact exists. Put a preprint where people can find and cite it.
|
|
229
209
|
|
|
210
|
+
12. **Headline results table** — every number in the abstract and in the conclusion appears in ONE
|
|
211
|
+
table in the body, one row per headline result, with these columns: the result as stated, its
|
|
212
|
+
**n** (what was counted, and how many), its **ground-truth source** (the authors' own measurement
|
|
213
|
+
with the section that reports it, a cited work, or a public dataset), any correction applied
|
|
214
|
+
(multiplicity, a recall floor, a rerun), and the one-line reading the paper draws from it.
|
|
215
|
+
- **Find:** list every number in the abstract and the conclusion (\`check-numbers.sh\` enumerates
|
|
216
|
+
them), then look each one up in the table. A number with no row, a row with no n, or a row with
|
|
217
|
+
no source is a finding — one per number, not one for the axis.
|
|
218
|
+
- **Why it is an axis and not a nicety:** a reviewer who cannot tell *"properties of LLMs,
|
|
219
|
+
statistical observations from repositories, and experimental findings produced by the authors"*
|
|
220
|
+
apart asks for exactly this — *"a compact table summarizing each headline result, sample size,
|
|
221
|
+
ground-truth source, correction, and final interpretation"*. Prose cannot carry five attributes
|
|
222
|
+
per number; the table can, and it gives every headline claim the owner that
|
|
223
|
+
\`tex/claim-provenance\` asks of each sentence.
|
|
224
|
+
- **Fix:** build the table, point the abstract's and the conclusion's numbers at it, and move a
|
|
225
|
+
number that has no n or no source out of the abstract until it has both.
|
|
226
|
+
|
|
230
227
|
## Mechanical submission gates (do these yourself — don't punt to the author)
|
|
231
228
|
|
|
232
229
|
- **Double-blind hygiene.** Run the mechanical gate — it greps the deny-list across the PDF text +
|
|
@@ -264,6 +261,8 @@ ready"** — the gates are orthogonal axes and do not average out. **Ready ⇔ A
|
|
|
264
261
|
left unresolved;
|
|
265
262
|
- **Nearest-neighbor scoop** — axis 3 answered: the closest sibling found and either distinguished
|
|
266
263
|
or escalated (\`analyze-sibling-paper\`);
|
|
264
|
+
- **Headline results table** — axis 12: every number in the abstract and the conclusion has a row
|
|
265
|
+
with its n and its ground-truth source;
|
|
267
266
|
- **The mechanical gates** — de-anon hygiene, page/word-fit, format template.
|
|
268
267
|
|
|
269
268
|
> 🔴 **Citations and scoop were MISSING from this list until 2026-08-31, and the omission had
|
|
@@ -5,7 +5,7 @@ context: fork
|
|
|
5
5
|
allowed-tools: [Read, Write, Grep, Glob, Agent, Skill]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
<!-- vigiles:sha256:
|
|
8
|
+
<!-- vigiles:sha256:fe41e7c71eb4672d compiled from skills/paper-adversarial-review/SKILL.md.spec.ts -->
|
|
9
9
|
|
|
10
10
|
# paper-adversarial-review — be the reviewer who wants to reject it
|
|
11
11
|
|
|
@@ -88,6 +88,6 @@ venue + paper type (short/full/position/benchmark). Ask for the structured outpu
|
|
|
88
88
|
- If the paper is genuinely strong, say so — don't manufacture problems.
|
|
89
89
|
|
|
90
90
|
## Compose with
|
|
91
|
-
- `grade-paper-writing` — the Readability/prose axis of the scorecard defers to its
|
|
91
|
+
- `grade-paper-writing` — the Readability/prose axis of the scorecard defers to its 10-dim rubric; run it for the sentence-level fixes behind a low readability score.
|
|
92
92
|
- `pc-panel-review` — this atom's scorecard is one reviewer's card; the panel aggregates N of them (same 1–5 scale) into the decision.
|
|
93
93
|
- The venue CFP (fit/format). Prose QA for papers routes to `grade-paper-writing` + `paper-pipeline/references/writing-craft.md` — NOT the site repo's `writing-quality` / `audience-test` skills (those are for blog posts only; the paper suite's persona pass supersedes them here).
|
|
@@ -94,7 +94,7 @@ venue + paper type (short/full/position/benchmark). Ask for the structured outpu
|
|
|
94
94
|
- If the paper is genuinely strong, say so — don't manufacture problems.
|
|
95
95
|
|
|
96
96
|
## Compose with
|
|
97
|
-
- \`grade-paper-writing\` — the Readability/prose axis of the scorecard defers to its
|
|
97
|
+
- \`grade-paper-writing\` — the Readability/prose axis of the scorecard defers to its 10-dim rubric; run it for the sentence-level fixes behind a low readability score.
|
|
98
98
|
- \`pc-panel-review\` — this atom's scorecard is one reviewer's card; the panel aggregates N of them (same 1–5 scale) into the decision.
|
|
99
99
|
- The venue CFP (fit/format). Prose QA for papers routes to \`grade-paper-writing\` + \`paper-pipeline/references/writing-craft.md\` — NOT the site repo's \`writing-quality\` / \`audience-test\` skills (those are for blog posts only; the paper suite's persona pass supersedes them here).`,
|
|
100
100
|
});
|
|
@@ -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:805b94a3515406d7 compiled from skills/paper-pipeline/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# paper-pipeline — the conductor for the whole organism
|
|
10
10
|
|
|
@@ -19,7 +19,7 @@ of that — who is filing what, and when — stays in the author's own private n
|
|
|
19
19
|
- `references/artifact-checklist.md` — the self-checking reproduction artifact.
|
|
20
20
|
- `references/anonymization.md` — the double-blind deny-list + hygiene (and its reverse at camera-ready).
|
|
21
21
|
- `references/writing-craft.md` — how well-written papers read (craft rules + exemplar lessons + the
|
|
22
|
-
gradeable
|
|
22
|
+
gradeable 10-dim writing rubric); cited by `draft-paper`, `grade-paper-writing`, and `harden-paper`.
|
|
23
23
|
- `references/review-ratchet.md` — how to fix a caught overclaim (tighten → cut → Threats → hedge)
|
|
24
24
|
and why every review round must be paid back with a `tighten-paper` pass; cited by
|
|
25
25
|
`paper-adversarial-review`, `pc-panel-review`, `harden-paper`.
|
|
@@ -224,7 +224,7 @@ skill: 🔴 **argument architecture** — does the whole thing carry the reader
|
|
|
224
224
|
nobody's) · **content strength** — does the contribution clear *this venue's* bar (`study-accepted-papers`,
|
|
225
225
|
mines the accepted corpus for Accept→Strong levers; in SETUP, before the prose is set) ·
|
|
226
226
|
**scientific defects** — what a hostile reviewer attacks (`paper-adversarial-review` / `pc-panel-review`)
|
|
227
|
-
· **writing craft** — does it read like a human wrote it (`grade-paper-writing`, the
|
|
227
|
+
· **writing craft** — does it read like a human wrote it (`grade-paper-writing`, the 10-dim rubric in
|
|
228
228
|
`references/writing-craft.md`; called by `harden-paper`). A paper can ace one and fail another — grade all four.
|
|
229
229
|
**The arc axis comes first**, because tightening length and polishing sentences inside a broken arc is
|
|
230
230
|
how a day disappears and the same paper ships.
|
|
@@ -36,7 +36,7 @@ of that — who is filing what, and when — stays in the author's own private n
|
|
|
36
36
|
- \`references/artifact-checklist.md\` — the self-checking reproduction artifact.
|
|
37
37
|
- \`references/anonymization.md\` — the double-blind deny-list + hygiene (and its reverse at camera-ready).
|
|
38
38
|
- \`references/writing-craft.md\` — how well-written papers read (craft rules + exemplar lessons + the
|
|
39
|
-
gradeable
|
|
39
|
+
gradeable 10-dim writing rubric); cited by \`draft-paper\`, \`grade-paper-writing\`, and \`harden-paper\`.
|
|
40
40
|
- \`references/review-ratchet.md\` — how to fix a caught overclaim (tighten → cut → Threats → hedge)
|
|
41
41
|
and why every review round must be paid back with a \`tighten-paper\` pass; cited by
|
|
42
42
|
\`paper-adversarial-review\`, \`pc-panel-review\`, \`harden-paper\`.
|
|
@@ -241,7 +241,7 @@ skill: 🔴 **argument architecture** — does the whole thing carry the reader
|
|
|
241
241
|
nobody's) · **content strength** — does the contribution clear *this venue's* bar (\`study-accepted-papers\`,
|
|
242
242
|
mines the accepted corpus for Accept→Strong levers; in SETUP, before the prose is set) ·
|
|
243
243
|
**scientific defects** — what a hostile reviewer attacks (\`paper-adversarial-review\` / \`pc-panel-review\`)
|
|
244
|
-
· **writing craft** — does it read like a human wrote it (\`grade-paper-writing\`, the
|
|
244
|
+
· **writing craft** — does it read like a human wrote it (\`grade-paper-writing\`, the 10-dim rubric in
|
|
245
245
|
\`references/writing-craft.md\`; called by \`harden-paper\`). A paper can ace one and fail another — grade all four.
|
|
246
246
|
**The arc axis comes first**, because tightening length and polishing sentences inside a broken arc is
|
|
247
247
|
how a day disappears and the same paper ships.
|