paperlint 3.2.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +2 -2
- package/dist/adapters/banal/failure.d.ts +1 -7
- package/dist/adapters/banal/failure.d.ts.map +1 -1
- package/dist/adapters/banal/failure.js +5 -7
- package/dist/adapters/banal/failure.js.map +1 -1
- package/dist/adapters/banal/index.d.ts.map +1 -1
- package/dist/adapters/banal/index.js +8 -11
- package/dist/adapters/banal/index.js.map +1 -1
- package/dist/adapters/banal/install.d.ts.map +1 -1
- package/dist/adapters/banal/install.js +4 -3
- package/dist/adapters/banal/install.js.map +1 -1
- package/dist/adapters/banal/invocation.d.ts +9 -4
- package/dist/adapters/banal/invocation.d.ts.map +1 -1
- package/dist/adapters/banal/invocation.js +13 -1
- package/dist/adapters/banal/invocation.js.map +1 -1
- package/dist/adapters/banal/locate.d.ts +12 -9
- package/dist/adapters/banal/locate.d.ts.map +1 -1
- package/dist/adapters/banal/locate.js +19 -12
- package/dist/adapters/banal/locate.js.map +1 -1
- package/dist/adapters/banal/run.d.ts +10 -1
- package/dist/adapters/banal/run.d.ts.map +1 -1
- package/dist/adapters/banal/run.js +8 -4
- package/dist/adapters/banal/run.js.map +1 -1
- package/dist/adapters/banal/settings.d.ts +1 -1
- package/dist/adapters/banal/settings.d.ts.map +1 -1
- package/dist/adapters/banal/settings.js +2 -1
- package/dist/adapters/banal/settings.js.map +1 -1
- package/dist/adapters/memory/index.d.ts.map +1 -1
- package/dist/adapters/memory/index.js +8 -2
- package/dist/adapters/memory/index.js.map +1 -1
- package/dist/adapters/node/process.io.d.ts +6 -3
- package/dist/adapters/node/process.io.d.ts.map +1 -1
- package/dist/adapters/node/process.io.js.map +1 -1
- package/dist/adapters/node/workspace.io.d.ts.map +1 -1
- package/dist/adapters/node/workspace.io.js +4 -2
- package/dist/adapters/node/workspace.io.js.map +1 -1
- package/dist/adapters/references/index.d.ts.map +1 -1
- package/dist/adapters/references/index.js +4 -2
- package/dist/adapters/references/index.js.map +1 -1
- package/dist/build-engine.d.ts +1 -1
- package/dist/build-engine.d.ts.map +1 -1
- package/dist/build-engine.js +8 -1
- package/dist/build-engine.js.map +1 -1
- package/dist/build.d.ts +2 -3
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +5 -6
- package/dist/build.js.map +1 -1
- package/dist/caller-path.d.ts +3 -0
- package/dist/caller-path.d.ts.map +1 -0
- package/dist/caller-path.js +13 -0
- package/dist/caller-path.js.map +1 -0
- package/dist/cli.d.ts +10 -17
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +62 -12
- package/dist/cli.js.map +1 -1
- package/dist/doctor.d.ts +12 -3
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +2 -1
- package/dist/doctor.js.map +1 -1
- package/dist/domain/paths.d.ts +8 -2
- package/dist/domain/paths.d.ts.map +1 -1
- package/dist/domain/paths.js +12 -1
- package/dist/domain/paths.js.map +1 -1
- package/dist/domain/ready.d.ts +24 -0
- package/dist/domain/ready.d.ts.map +1 -0
- package/dist/domain/ready.js +11 -0
- package/dist/domain/ready.js.map +1 -0
- package/dist/domain/record.d.ts +8 -0
- package/dist/domain/record.d.ts.map +1 -0
- package/dist/domain/record.js +8 -0
- package/dist/domain/record.js.map +1 -0
- package/dist/domain/sha256.d.ts.map +1 -1
- package/dist/domain/sha256.js +4 -2
- package/dist/domain/sha256.js.map +1 -1
- package/dist/engine.d.ts +23 -22
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js.map +1 -1
- package/dist/eslint-rules/bib-reachable-entry.d.ts +1 -1
- package/dist/eslint-rules/bib-reachable-entry.js.map +1 -1
- package/dist/eslint-rules/install-path-literals.d.ts +2 -2
- package/dist/eslint-rules/install-path-literals.js.map +1 -1
- package/dist/eslint-rules/paper-research-question.d.ts +1 -1
- package/dist/eslint-rules/paper-research-question.js.map +1 -1
- package/dist/eslint-rules/paper-stages.d.ts +2 -2
- package/dist/eslint-rules/paper-stages.js.map +1 -1
- package/dist/eslint-rules/paper-typography.d.ts +6 -6
- package/dist/eslint-rules/paper-typography.js.map +1 -1
- package/dist/eslint-rules/pdf-last-page-balance.d.ts +1 -1
- package/dist/eslint-rules/pdf-last-page-balance.js.map +1 -1
- package/dist/eslint-rules/review-frontmatter.d.ts +2 -2
- package/dist/eslint-rules/review-frontmatter.js.map +1 -1
- package/dist/eslint-rules/sibling-frontmatter.d.ts +1 -1
- package/dist/eslint-rules/sibling-frontmatter.d.ts.map +1 -1
- package/dist/eslint-rules/temp-root-realpath.d.ts +1 -1
- package/dist/eslint-rules/temp-root-realpath.js.map +1 -1
- package/dist/eslint-rules/tex-build.d.ts +2 -2
- package/dist/eslint-rules/tex-build.js.map +1 -1
- package/dist/facts-file.d.ts.map +1 -1
- package/dist/facts-file.js +29 -26
- package/dist/facts-file.js.map +1 -1
- package/dist/hooks-settings.d.ts.map +1 -1
- package/dist/hooks-settings.js +17 -2
- package/dist/hooks-settings.js.map +1 -1
- package/dist/init.d.ts +3 -4
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +18 -8
- package/dist/init.js.map +1 -1
- package/dist/lib/paper-config.d.ts.map +1 -1
- package/dist/lib/paper-config.js +1 -5
- package/dist/lib/paper-config.js.map +1 -1
- package/dist/new-paper.d.ts.map +1 -1
- package/dist/new-paper.js +5 -1
- package/dist/new-paper.js.map +1 -1
- package/dist/paper-files.d.ts +4 -4
- package/dist/paper-files.d.ts.map +1 -1
- package/dist/paper-files.js +6 -6
- package/dist/paper-files.js.map +1 -1
- package/dist/paper-settings.js +3 -3
- package/dist/paper-settings.js.map +1 -1
- package/dist/pdf-facts.d.ts +51 -1
- package/dist/pdf-facts.d.ts.map +1 -1
- package/dist/pdf-facts.js +23 -15
- package/dist/pdf-facts.js.map +1 -1
- package/dist/pdf-geometry.d.ts.map +1 -1
- package/dist/pdf-geometry.js +2 -3
- package/dist/pdf-geometry.js.map +1 -1
- package/dist/ports/tool-installer.d.ts +2 -14
- package/dist/ports/tool-installer.d.ts.map +1 -1
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +16 -4
- package/dist/presets.js.map +1 -1
- package/dist/references.d.ts.map +1 -1
- package/dist/references.js +4 -4
- package/dist/references.js.map +1 -1
- package/dist/rules-config.d.ts +26 -1
- package/dist/rules-config.d.ts.map +1 -1
- package/dist/rules-config.js +9 -9
- package/dist/rules-config.js.map +1 -1
- package/dist/tex-requirements.d.ts +4 -0
- package/dist/tex-requirements.d.ts.map +1 -1
- package/dist/tex-requirements.js +14 -2
- package/dist/tex-requirements.js.map +1 -1
- package/dist/types.d.ts +5 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/venue-rules.d.ts.map +1 -1
- package/dist/venue-rules.js +20 -7
- package/dist/venue-rules.js.map +1 -1
- package/docs/configuration.md +2 -2
- package/eslint-rules/bib-reachable-entry.ts +1 -1
- package/eslint-rules/install-path-literals.ts +2 -2
- package/eslint-rules/paper-research-question.ts +1 -1
- package/eslint-rules/paper-stages.ts +2 -2
- package/eslint-rules/paper-typography.ts +2 -2
- package/eslint-rules/pdf-last-page-balance.ts +1 -1
- package/eslint-rules/review-frontmatter.ts +1 -1
- package/eslint-rules/temp-root-realpath.ts +1 -1
- package/eslint-rules/tex-build.ts +2 -2
- package/eslint.config.mjs +7 -0
- package/fixtures/install-path-literals/clean.fixture.mjs +1 -1
- package/fixtures/install-path-literals/clean.md +2 -2
- package/fixtures/install-path-literals/defect.fixture.mjs +1 -1
- package/fixtures/install-path-literals/defect.md +2 -2
- package/hooks/paper-status-gates.sh +9 -19
- package/lib/paper-config.harness.mjs +1 -1
- package/lib/paper-config.ts +1 -5
- package/lib/skill-checks.mjs +24 -381
- package/lib/skill-checks.test.mjs +63 -115
- package/lib/skill-corpus.mjs +10 -251
- package/lib/skill-corpus.test.mjs +2 -13
- package/lib/skill-trigger-cases.mjs +1 -1
- package/package.json +1 -1
- package/scripts/coverage-config.test.ts +0 -1
- package/scripts/harness-api.frozen.json +0 -1
- package/skills/analyze-sibling-paper/SKILL.md +1 -39
- package/skills/analyze-sibling-paper/SKILL.md.spec.ts +0 -38
- package/skills/argument-arc/SKILL.md +2 -36
- package/skills/argument-arc/SKILL.md.spec.ts +1 -43
- package/skills/build-benchmark/SKILL.md +1 -41
- package/skills/build-benchmark/SKILL.md.spec.ts +0 -40
- package/skills/camera-ready/SKILL.md +1 -34
- package/skills/camera-ready/SKILL.md.spec.ts +0 -33
- package/skills/cold-read-diff/SKILL.md +1 -35
- package/skills/cold-read-diff/SKILL.md.spec.ts +0 -34
- package/skills/draft-paper/SKILL.md +2 -41
- package/skills/draft-paper/SKILL.md.spec.ts +1 -50
- package/skills/extend-paper/SKILL.md +2 -33
- package/skills/extend-paper/SKILL.md.spec.ts +1 -42
- package/skills/find-venue/SKILL.md +2 -38
- package/skills/find-venue/SKILL.md.spec.ts +1 -47
- package/skills/grade-paper-writing/SKILL.md +3 -38
- package/skills/grade-paper-writing/SKILL.md.spec.ts +2 -47
- package/skills/grade-paper-writing/prose-lint.mjs +2 -3
- package/skills/grade-paper-writing/prose-lint.test.ts +1 -1
- package/skills/harden-paper/SKILL.md +1 -39
- package/skills/harden-paper/SKILL.md.spec.ts +0 -38
- package/skills/map-prior-work/SKILL.md +1 -35
- package/skills/map-prior-work/SKILL.md.spec.ts +0 -34
- package/skills/osf-artifact-upload/osf-artifact-upload.harness.ts +3 -4
- package/skills/paper-adversarial-review/SKILL.md +2 -35
- package/skills/paper-adversarial-review/SKILL.md.spec.ts +1 -43
- package/skills/paper-pipeline/SKILL.md +2 -28
- package/skills/paper-pipeline/SKILL.md.spec.ts +1 -27
- package/skills/paper-pipeline/grade-paper-writing-ablation.eval.mjs +1 -1
- package/skills/paper-pipeline/paper-pipeline.harness.mjs +25 -40
- package/skills/paper-pipeline/references/acceptance-gate.md +1 -6
- package/skills/paper-pipeline/references/pipeline-status-template.md +8 -35
- package/skills/paper-pipeline/scripts/README.md +30 -225
- package/skills/paper-pipeline/scripts/artifact-coverage.harness.mjs +4 -8
- package/skills/paper-pipeline/scripts/consumer.harness.mjs +6 -104
- package/skills/paper-pipeline/scripts/consumer.mjs +23 -104
- package/skills/paper-pipeline/scripts/generated-code.harness.mjs +2 -3
- package/skills/paper-pipeline/scripts/population-map.harness.mjs +3 -3
- package/skills/paper-status/SKILL.md +2 -42
- package/skills/paper-status/SKILL.md.spec.ts +1 -41
- package/skills/pc-panel-review/SKILL.md +2 -46
- package/skills/pc-panel-review/SKILL.md.spec.ts +1 -45
- package/skills/plan-paper-timeline/SKILL.md +2 -36
- package/skills/plan-paper-timeline/SKILL.md.spec.ts +0 -36
- package/skills/render-paper/SKILL.md +1 -37
- package/skills/render-paper/SKILL.md.spec.ts +0 -36
- package/skills/research-ideate/SKILL.md +2 -39
- package/skills/research-ideate/SKILL.md.spec.ts +1 -47
- package/skills/study-accepted-papers/SKILL.md +1 -34
- package/skills/study-accepted-papers/SKILL.md.spec.ts +0 -33
- package/skills/submit-paper/SKILL.md +1 -33
- package/skills/submit-paper/SKILL.md.spec.ts +0 -32
- package/skills/sweep-design-space/SKILL.md +1 -38
- package/skills/sweep-design-space/SKILL.md.spec.ts +0 -37
- package/skills/tighten-paper/SKILL.md +2 -39
- package/skills/tighten-paper/SKILL.md.spec.ts +1 -47
- package/skills/tighten-paper/structure.mjs +4 -11
- package/skills/verify-citations/SKILL.md +2 -38
- package/skills/verify-citations/SKILL.md.spec.ts +1 -37
- package/src/adapters/banal/failure.ts +9 -10
- package/src/adapters/banal/index.test.ts +2 -2
- package/src/adapters/banal/index.ts +8 -10
- package/src/adapters/banal/install.ts +9 -4
- package/src/adapters/banal/invocation.test.ts +20 -8
- package/src/adapters/banal/invocation.ts +23 -8
- package/src/adapters/banal/locate.test.ts +2 -2
- package/src/adapters/banal/locate.ts +27 -21
- package/src/adapters/banal/run.test.ts +2 -2
- package/src/adapters/banal/run.ts +16 -10
- package/src/adapters/banal/settings.ts +2 -2
- package/src/adapters/curl/download.test.ts +4 -4
- package/src/adapters/memory/index.ts +4 -3
- package/src/adapters/node/files.test.ts +5 -3
- package/src/adapters/node/process.io.ts +9 -2
- package/src/adapters/node/process.test.ts +4 -4
- package/src/adapters/node/workspace.io.ts +9 -4
- package/src/adapters/references/index.ts +7 -2
- package/src/build-engine.test.ts +11 -6
- package/src/build-engine.ts +10 -5
- package/src/build.test.ts +10 -11
- package/src/build.ts +8 -9
- package/src/caller-path.ts +13 -0
- package/src/cli.harness.mjs +0 -2
- package/src/cli.test.ts +19 -8
- package/src/cli.ts +82 -25
- package/src/doctor.test.ts +1 -1
- package/src/doctor.ts +14 -5
- package/src/domain/paths.test.ts +15 -0
- package/src/domain/paths.ts +20 -1
- package/src/domain/ready.ts +31 -0
- package/src/domain/record.test.ts +20 -0
- package/src/domain/record.ts +12 -0
- package/src/domain/sha256.ts +5 -3
- package/src/engine.ts +30 -2
- package/src/facts-file.ts +43 -28
- package/src/hooks-settings.harness.ts +17 -0
- package/src/hooks-settings.ts +28 -4
- package/src/init.test.ts +25 -5
- package/src/init.ts +26 -12
- package/src/new-paper.harness.mjs +7 -23
- package/src/new-paper.ts +7 -3
- package/src/paper-files.test.ts +22 -19
- package/src/paper-files.ts +16 -27
- package/src/paper-settings.test.ts +2 -2
- package/src/paper-settings.ts +5 -5
- package/src/pdf-facts.test.ts +16 -5
- package/src/pdf-facts.ts +79 -22
- package/src/pdf-geometry.ts +5 -3
- package/src/ports/tool-installer.ts +2 -17
- package/src/presets.ts +28 -14
- package/src/references.test.ts +25 -19
- package/src/references.ts +4 -5
- package/src/rules-config.ts +40 -11
- package/src/tex-requirements.test.ts +21 -0
- package/src/tex-requirements.ts +29 -6
- package/src/toolchain.test.ts +9 -5
- package/src/toolchain.ts +2 -2
- package/src/types.ts +5 -3
- package/src/venue-rules.test.ts +8 -4
- package/src/venue-rules.ts +21 -11
- package/skills/paper-pipeline/scripts/announce.mjs +0 -67
- package/skills/paper-pipeline/scripts/announce.test.mjs +0 -102
- package/skills/paper-pipeline/scripts/fixtures/clean/PIPELINE-STATUS.md +0 -51
- package/skills/paper-pipeline/scripts/fixtures/dirty/PIPELINE-STATUS.md +0 -52
- package/skills/paper-pipeline/scripts/fixtures/dirty/paper.md +0 -6
- package/skills/paper-pipeline/scripts/fixtures/scorecard.ts +0 -100
- package/skills/paper-pipeline/scripts/ledger.cli.test.mjs +0 -302
- package/skills/paper-pipeline/scripts/ledger.mjs +0 -623
- package/skills/paper-pipeline/scripts/ledger.test.mjs +0 -254
- package/skills/paper-pipeline/scripts/pipeline-check.cli.test.mjs +0 -474
- package/skills/paper-pipeline/scripts/pipeline-check.harness.mjs +0 -328
- package/skills/paper-pipeline/scripts/pipeline-check.mjs +0 -750
- package/skills/paper-pipeline/scripts/pipeline-edges.mjs +0 -169
- package/skills/paper-pipeline/scripts/pipeline-edges.test.mjs +0 -73
- package/skills/paper-pipeline/scripts/run-mechanical.mjs +0 -648
- package/skills/paper-pipeline/scripts/run-mechanical.test.mjs +0 -468
- package/skills/paper-pipeline/scripts/status.mjs +0 -295
- package/skills/paper-pipeline/scripts/status.test.mjs +0 -232
|
@@ -1,24 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: extend-paper
|
|
3
3
|
description: Turn an accepted workshop / short paper into a second, stronger publication at a higher-prestige indexed venue — the "body of work" a strong dossier needs, not a one-hit paper. Covers the ≥30% new-material rule, the never-dual-submit rule, what genuinely counts as new content, and picking + timelining the upgrade venue. Use after a paper is accepted and you want the follow-on publication. Compose with find-venue, plan-paper-timeline, camera-ready, research-ideate.
|
|
4
|
-
allowed-tools: [Read, Write, Grep, Glob, WebSearch, WebFetch, Skill
|
|
4
|
+
allowed-tools: [Read, Write, Grep, Glob, WebSearch, WebFetch, Skill]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
<!-- vigiles:sha256:
|
|
7
|
+
<!-- vigiles:sha256:6310b1e7748e10de compiled from skills/extend-paper/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# extend-paper — workshop/short paper → a second, stronger publication
|
|
10
10
|
|
|
11
|
-
## Run me
|
|
12
|
-
|
|
13
|
-
🔴 FIRST, before any other step:
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs extend-paper <paper-dir>
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
An advisory pass cannot be observed failing — silence is both its error state and its normal
|
|
20
|
-
state — so starting is an event, and events get written down.
|
|
21
|
-
|
|
22
11
|
One accepted paper is a data point; two related papers climbing in prestige is a **trajectory**, and
|
|
23
12
|
"sustained acclaim" is what a body-of-work review actually rewards. Workshop→conference and
|
|
24
13
|
conference→journal extensions are a standard, expected move — venues invite them. The catch: an
|
|
@@ -66,26 +55,6 @@ submissions**. A burst of papers clustered right before an external filing deadl
|
|
|
66
55
|
manufactured, not sustained — a documented reason for refusal, not a stylistic worry. Aim the extension to land a few months after the first paper's
|
|
67
56
|
acceptance so the record shows steady output over time, one ORCID tying every version together.
|
|
68
57
|
|
|
69
|
-
## Record the verdict
|
|
70
|
-
|
|
71
|
-
🔴 LAST step, once the deliverable exists:
|
|
72
|
-
|
|
73
|
-
```
|
|
74
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record extend-paper <paper-dir> FINDING <count> <report-path>
|
|
75
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record extend-paper <paper-dir> ABSTAINED <reason> "<one line>"
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
**FINDING** — `<count>` open items before the extension is legitimate; `<report-path>` is the plan.
|
|
79
|
-
Add `--blocking` when the ≥30% cannot honestly be pointed at, which sends the work back to
|
|
80
|
-
`research-ideate`.
|
|
81
|
-
**ABSTAINED** — `no-witness`: a legitimate extension is scoped — ≥30% genuinely new material, one
|
|
82
|
-
named venue, no dual submission — and nothing is open. `blocked`: there is no accepted base paper
|
|
83
|
-
to extend.
|
|
84
|
-
|
|
85
|
-
🔴 **There is no PASS**, and here that matters more than anywhere: the tempting move at this moment
|
|
86
|
-
is to resubmit the same paper with a new title, and a stored "legitimate" would have been exactly
|
|
87
|
-
the paperwork for it. The blocking finding is what the pipeline is watching for; nothing else is.
|
|
88
|
-
|
|
89
58
|
## Compose with
|
|
90
59
|
- **find-venue** — choose the higher-prestige indexed target and confirm it welcomes extensions.
|
|
91
60
|
- **plan-paper-timeline** — schedule the new experiments + write-up against the target deadline.
|
|
@@ -10,31 +10,10 @@ export default experimental_skill({
|
|
|
10
10
|
name: "extend-paper",
|
|
11
11
|
description:
|
|
12
12
|
'Turn an accepted workshop / short paper into a second, stronger publication at a higher-prestige indexed venue — the "body of work" a strong dossier needs, not a one-hit paper. Covers the ≥30% new-material rule, the never-dual-submit rule, what genuinely counts as new content, and picking + timelining the upgrade venue. Use after a paper is accepted and you want the follow-on publication. Compose with find-venue, plan-paper-timeline, camera-ready, research-ideate.',
|
|
13
|
-
tools: [
|
|
14
|
-
"Read",
|
|
15
|
-
"Write",
|
|
16
|
-
"Grep",
|
|
17
|
-
"Glob",
|
|
18
|
-
"WebSearch",
|
|
19
|
-
"WebFetch",
|
|
20
|
-
"Skill",
|
|
21
|
-
"Bash(node .claude/skills/paper-pipeline/scripts/announce.mjs:*)",
|
|
22
|
-
"Bash(node .claude/skills/paper-pipeline/scripts/ledger.mjs:*)",
|
|
23
|
-
],
|
|
13
|
+
tools: ["Read", "Write", "Grep", "Glob", "WebSearch", "WebFetch", "Skill"],
|
|
24
14
|
body: `
|
|
25
15
|
# extend-paper — workshop/short paper → a second, stronger publication
|
|
26
16
|
|
|
27
|
-
## Run me
|
|
28
|
-
|
|
29
|
-
🔴 FIRST, before any other step:
|
|
30
|
-
|
|
31
|
-
\`\`\`
|
|
32
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs extend-paper <paper-dir>
|
|
33
|
-
\`\`\`
|
|
34
|
-
|
|
35
|
-
An advisory pass cannot be observed failing — silence is both its error state and its normal
|
|
36
|
-
state — so starting is an event, and events get written down.
|
|
37
|
-
|
|
38
17
|
One accepted paper is a data point; two related papers climbing in prestige is a **trajectory**, and
|
|
39
18
|
"sustained acclaim" is what a body-of-work review actually rewards. Workshop→conference and
|
|
40
19
|
conference→journal extensions are a standard, expected move — venues invite them. The catch: an
|
|
@@ -82,26 +61,6 @@ submissions**. A burst of papers clustered right before an external filing deadl
|
|
|
82
61
|
manufactured, not sustained — a documented reason for refusal, not a stylistic worry. Aim the extension to land a few months after the first paper's
|
|
83
62
|
acceptance so the record shows steady output over time, one ORCID tying every version together.
|
|
84
63
|
|
|
85
|
-
## Record the verdict
|
|
86
|
-
|
|
87
|
-
🔴 LAST step, once the deliverable exists:
|
|
88
|
-
|
|
89
|
-
\`\`\`
|
|
90
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record extend-paper <paper-dir> FINDING <count> <report-path>
|
|
91
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record extend-paper <paper-dir> ABSTAINED <reason> "<one line>"
|
|
92
|
-
\`\`\`
|
|
93
|
-
|
|
94
|
-
**FINDING** — \`<count>\` open items before the extension is legitimate; \`<report-path>\` is the plan.
|
|
95
|
-
Add \`--blocking\` when the ≥30% cannot honestly be pointed at, which sends the work back to
|
|
96
|
-
\`research-ideate\`.
|
|
97
|
-
**ABSTAINED** — \`no-witness\`: a legitimate extension is scoped — ≥30% genuinely new material, one
|
|
98
|
-
named venue, no dual submission — and nothing is open. \`blocked\`: there is no accepted base paper
|
|
99
|
-
to extend.
|
|
100
|
-
|
|
101
|
-
🔴 **There is no PASS**, and here that matters more than anywhere: the tempting move at this moment
|
|
102
|
-
is to resubmit the same paper with a new title, and a stored "legitimate" would have been exactly
|
|
103
|
-
the paperwork for it. The blocking finding is what the pipeline is watching for; nothing else is.
|
|
104
|
-
|
|
105
64
|
## Compose with
|
|
106
65
|
- **find-venue** — choose the higher-prestige indexed target and confirm it welcomes extensions.
|
|
107
66
|
- **plan-paper-timeline** — schedule the new experiments + write-up against the target deadline.
|
|
@@ -1,28 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: find-venue
|
|
3
3
|
description: "Discover and rank real venues for a given paper, scored by authorship credit not just prestige. Fetch candidate CFPs (WebSearch/WebFetch), capture deadline / page limit / paper-type fit / indexing (ACM DL / IEEE Xplore / archival vs non-archival) / double-blind / remote-attendance / selectivity, then rank by credit-weight (peer-reviewed + indexed + parent-venue prestige) × topic fit × accept-probability × deadline feasibility × remote-friendliness. Emit a comparison table and a keep/switch recommendation. Encodes: workshop newness does NOT hurt authorship; non-archival workshops rank LOW; the prestige move is to EXTEND the accepted paper later, not hold out. Compose with research-ideate (upstream), plan-paper-timeline, the submit-paper venue data cards (submit-paper/references/venues/<venue>.md), and extend-paper."
|
|
4
|
-
allowed-tools: [Read, Write, Grep, Glob, WebSearch, WebFetch, Agent
|
|
4
|
+
allowed-tools: [Read, Write, Grep, Glob, WebSearch, WebFetch, Agent]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
<!-- vigiles:sha256:
|
|
7
|
+
<!-- vigiles:sha256:bfda3e840d81d95d compiled from skills/find-venue/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# find-venue — rank real venues by what earns the credit, then keep or switch
|
|
10
10
|
|
|
11
|
-
## Run me
|
|
12
|
-
|
|
13
|
-
🔴 FIRST, before any other step:
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs find-venue <dir>
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
An advisory pass cannot be observed failing — silence is both its error state and its normal
|
|
20
|
-
state — so starting is an event, and events get written down.
|
|
21
|
-
|
|
22
|
-
The `<dir>` argument is **optional in spirit**: this skill can run before a paper directory exists, so
|
|
23
|
-
pass whichever directory the work lives in, or `.`. The ledger row is written either way, and a plain
|
|
24
|
-
dot is more honest than an invented path.
|
|
25
|
-
|
|
26
11
|
Takes a paper (or the candidate venue *types* from `research-ideate`) and finds the best real place to
|
|
27
12
|
submit it. "Best" here means **best for the publication record**, which is not the same as most prestigious —
|
|
28
13
|
an indexed workshop you can actually hit beats a top conference whose deadline already closed. This
|
|
@@ -82,27 +67,6 @@ rank = credit-weight × topic-fit × accept-probability × deadline-feasibility
|
|
|
82
67
|
already has a target) an explicit **keep** or **switch** verdict against it. Note the intended
|
|
83
68
|
`extend-paper` upgrade target for later.
|
|
84
69
|
|
|
85
|
-
## Record the verdict
|
|
86
|
-
|
|
87
|
-
🔴 LAST step, once the deliverable exists:
|
|
88
|
-
|
|
89
|
-
```
|
|
90
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record find-venue <dir> FINDING <count> <report-path>
|
|
91
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record find-venue <dir> ABSTAINED <reason> "<one line>"
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
🔴 **There is no PASS.** A shortlist is a set of findings about the world, not a certificate that
|
|
95
|
-
the venue question is settled.
|
|
96
|
-
|
|
97
|
-
**FINDING** — the sweep produced a ranked shortlist with an explicit keep/switch call; `<count>` is
|
|
98
|
-
the number of candidates ranked and `<report-path>` the comparison table. Add `--blocking` when
|
|
99
|
-
nothing open clears the peer-reviewed + indexed gate — a real answer, and not an empty run.
|
|
100
|
-
**ABSTAINED** — `no-witness`: CFPs were read and no candidate could be ranked either way.
|
|
101
|
-
`input-missing`: there is no paper description to match venues against.
|
|
102
|
-
|
|
103
|
-
Record the whole table's path, not just the winner. The next sweep starts from the candidates that were
|
|
104
|
-
dropped and why, and a verdict with no table behind it cannot be re-checked when a deadline moves.
|
|
105
|
-
|
|
106
70
|
## Rules
|
|
107
71
|
- Fetch every CFP fact from the real page; never invent a deadline, page limit, or indexing status.
|
|
108
72
|
- Indexed + peer-reviewed is a gate, not a tiebreaker — a non-archival venue cannot win on charm.
|
|
@@ -10,35 +10,10 @@ export default experimental_skill({
|
|
|
10
10
|
name: "find-venue",
|
|
11
11
|
description:
|
|
12
12
|
"Discover and rank real venues for a given paper, scored by authorship credit not just prestige. Fetch candidate CFPs (WebSearch/WebFetch), capture deadline / page limit / paper-type fit / indexing (ACM DL / IEEE Xplore / archival vs non-archival) / double-blind / remote-attendance / selectivity, then rank by credit-weight (peer-reviewed + indexed + parent-venue prestige) × topic fit × accept-probability × deadline feasibility × remote-friendliness. Emit a comparison table and a keep/switch recommendation. Encodes: workshop newness does NOT hurt authorship; non-archival workshops rank LOW; the prestige move is to EXTEND the accepted paper later, not hold out. Compose with research-ideate (upstream), plan-paper-timeline, the submit-paper venue data cards (submit-paper/references/venues/<venue>.md), and extend-paper.",
|
|
13
|
-
tools: [
|
|
14
|
-
"Read",
|
|
15
|
-
"Write",
|
|
16
|
-
"Grep",
|
|
17
|
-
"Glob",
|
|
18
|
-
"WebSearch",
|
|
19
|
-
"WebFetch",
|
|
20
|
-
"Agent",
|
|
21
|
-
"Bash(node .claude/skills/paper-pipeline/scripts/announce.mjs:*)",
|
|
22
|
-
"Bash(node .claude/skills/paper-pipeline/scripts/ledger.mjs:*)",
|
|
23
|
-
],
|
|
13
|
+
tools: ["Read", "Write", "Grep", "Glob", "WebSearch", "WebFetch", "Agent"],
|
|
24
14
|
body: `
|
|
25
15
|
# find-venue — rank real venues by what earns the credit, then keep or switch
|
|
26
16
|
|
|
27
|
-
## Run me
|
|
28
|
-
|
|
29
|
-
🔴 FIRST, before any other step:
|
|
30
|
-
|
|
31
|
-
\`\`\`
|
|
32
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs find-venue <dir>
|
|
33
|
-
\`\`\`
|
|
34
|
-
|
|
35
|
-
An advisory pass cannot be observed failing — silence is both its error state and its normal
|
|
36
|
-
state — so starting is an event, and events get written down.
|
|
37
|
-
|
|
38
|
-
The \`<dir>\` argument is **optional in spirit**: this skill can run before a paper directory exists, so
|
|
39
|
-
pass whichever directory the work lives in, or \`.\`. The ledger row is written either way, and a plain
|
|
40
|
-
dot is more honest than an invented path.
|
|
41
|
-
|
|
42
17
|
Takes a paper (or the candidate venue *types* from \`research-ideate\`) and finds the best real place to
|
|
43
18
|
submit it. "Best" here means **best for the publication record**, which is not the same as most prestigious —
|
|
44
19
|
an indexed workshop you can actually hit beats a top conference whose deadline already closed. This
|
|
@@ -98,27 +73,6 @@ rank = credit-weight × topic-fit × accept-probability × deadline-feasibility
|
|
|
98
73
|
already has a target) an explicit **keep** or **switch** verdict against it. Note the intended
|
|
99
74
|
\`extend-paper\` upgrade target for later.
|
|
100
75
|
|
|
101
|
-
## Record the verdict
|
|
102
|
-
|
|
103
|
-
🔴 LAST step, once the deliverable exists:
|
|
104
|
-
|
|
105
|
-
\`\`\`
|
|
106
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record find-venue <dir> FINDING <count> <report-path>
|
|
107
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record find-venue <dir> ABSTAINED <reason> "<one line>"
|
|
108
|
-
\`\`\`
|
|
109
|
-
|
|
110
|
-
🔴 **There is no PASS.** A shortlist is a set of findings about the world, not a certificate that
|
|
111
|
-
the venue question is settled.
|
|
112
|
-
|
|
113
|
-
**FINDING** — the sweep produced a ranked shortlist with an explicit keep/switch call; \`<count>\` is
|
|
114
|
-
the number of candidates ranked and \`<report-path>\` the comparison table. Add \`--blocking\` when
|
|
115
|
-
nothing open clears the peer-reviewed + indexed gate — a real answer, and not an empty run.
|
|
116
|
-
**ABSTAINED** — \`no-witness\`: CFPs were read and no candidate could be ranked either way.
|
|
117
|
-
\`input-missing\`: there is no paper description to match venues against.
|
|
118
|
-
|
|
119
|
-
Record the whole table's path, not just the winner. The next sweep starts from the candidates that were
|
|
120
|
-
dropped and why, and a verdict with no table behind it cannot be re-checked when a deadline moves.
|
|
121
|
-
|
|
122
76
|
## Rules
|
|
123
77
|
- Fetch every CFP fact from the real page; never invent a deadline, page limit, or indexing status.
|
|
124
78
|
- Indexed + peer-reviewed is a gate, not a tiebreaker — a non-archival venue cannot win on charm.
|
|
@@ -1,24 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: grade-paper-writing
|
|
3
3
|
description: 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 — nine dimensions 1–5 (Title, Abstract, Intro architecture, Structure, Prose clarity, Jargon discipline, Landing-the-point, Figure economy, Honesty-without-hedge-stacking) against how the best-written papers read (Peyton Jones, McEnerney, Gopen & Swan; exemplars Trusting Trust, Carlini, Greshake), naming the offending sentence and the fix for each. Runs the PERSONA cold-read stall pass (a committed non-academic persona subagent, per-section) 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.
|
|
4
|
-
allowed-tools: [Read, Write, Edit, Grep, Glob, Agent, Skill
|
|
4
|
+
allowed-tools: [Read, Write, Edit, Grep, Glob, Agent, Skill]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
<!-- vigiles:sha256:
|
|
7
|
+
<!-- vigiles:sha256:c5d998b7471000fc compiled from skills/grade-paper-writing/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# grade-paper-writing — grade how the paper READS, then fix it sentence by sentence
|
|
10
10
|
|
|
11
|
-
## Run me
|
|
12
|
-
|
|
13
|
-
🔴 FIRST, before any other step:
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs grade-paper-writing <paper-dir>
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
An advisory pass cannot be observed failing — silence is both its error state and its normal
|
|
20
|
-
state — so starting is an event, and events get written down.
|
|
21
|
-
|
|
22
11
|
The review skills hunt scientific defects; `study-accepted-papers` checks whether the contribution clears
|
|
23
12
|
the venue's bar. Neither tells you the paper is a slog to read. This skill does exactly that: it grades
|
|
24
13
|
the **writing craft** against how the best-written papers actually read, and turns each low score into a
|
|
@@ -212,8 +201,7 @@ is what happened.
|
|
|
212
201
|
side effect.
|
|
213
202
|
|
|
214
203
|
7. 🔴 **Put `WORST-SECTION: <section>` on the FIRST LINE of the report.** Machine-readable, one
|
|
215
|
-
section, lowercase, no decoration
|
|
216
|
-
`repeat-finding` when the same section is worst twice running. This exists because the abstract
|
|
204
|
+
section, lowercase, no decoration, so the next round can compare it with the last report. This exists because the abstract
|
|
217
205
|
was named worst **five consecutive times**, was faithfully recorded in the scorecard all five
|
|
218
206
|
times, and was never once the next task. A review loop that only appends findings converges on a
|
|
219
207
|
paper whose defects are all thoroughly documented and none of them fixed. **Naming the worst
|
|
@@ -274,29 +262,6 @@ findings:
|
|
|
274
262
|
---
|
|
275
263
|
```
|
|
276
264
|
|
|
277
|
-
## Record the verdict
|
|
278
|
-
|
|
279
|
-
🔴 LAST step, once the deliverable exists:
|
|
280
|
-
|
|
281
|
-
```
|
|
282
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record grade-paper-writing <paper-dir> FINDING <count> <report-path>
|
|
283
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record grade-paper-writing <paper-dir> ABSTAINED <reason> "<one line>"
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
**FINDING** — `<count>` is the number of entries in the PERSONA stall inventory, and `<report-path>`
|
|
287
|
-
is that inventory. Add `--blocking` when a dimension scored 1–2, or stall density is over its cap.
|
|
288
|
-
**ABSTAINED** — `no-witness`: the inventory came back empty. `blocked`: no persona reader was run,
|
|
289
|
-
so there is no inventory — which is not an empty inventory and must never be filed as one.
|
|
290
|
-
|
|
291
|
-
🔴 **There is no PASS**, and the distinction the two abstentions draw is the one that was being
|
|
292
|
-
lost: "a reader stalled nowhere" and "nobody read it" produced the same word.
|
|
293
|
-
|
|
294
|
-
🔴 **Record the stall count, never the rubric number.** The inventory is what `pc-panel-review`,
|
|
295
|
-
`paper-adversarial-review` and `harden-paper` consume; a 44/60 in the ledger would let a paper whose
|
|
296
|
-
readability gate is failing look clean to every skill downstream.
|
|
297
|
-
|
|
298
|
-
`prose-lint.mjs` files separately as `grade-paper-writing/prose-lint`. One check, one row.
|
|
299
|
-
|
|
300
265
|
## Rules
|
|
301
266
|
- Grade **writing, not science.** A correct paper can still score a 2 here; say so. Don't drift into
|
|
302
267
|
content/defect review — that's `paper-adversarial-review` / `pc-panel-review`.
|
|
@@ -10,31 +10,10 @@ export default experimental_skill({
|
|
|
10
10
|
name: "grade-paper-writing",
|
|
11
11
|
description:
|
|
12
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 — nine dimensions 1–5 (Title, Abstract, Intro architecture, Structure, Prose clarity, Jargon discipline, Landing-the-point, Figure economy, Honesty-without-hedge-stacking) against how the best-written papers read (Peyton Jones, McEnerney, Gopen & Swan; exemplars Trusting Trust, Carlini, Greshake), naming the offending sentence and the fix for each. Runs the PERSONA cold-read stall pass (a committed non-academic persona subagent, per-section) 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
|
-
tools: [
|
|
14
|
-
"Read",
|
|
15
|
-
"Write",
|
|
16
|
-
"Edit",
|
|
17
|
-
"Grep",
|
|
18
|
-
"Glob",
|
|
19
|
-
"Agent",
|
|
20
|
-
"Skill",
|
|
21
|
-
"Bash(node .claude/skills/paper-pipeline/scripts/announce.mjs:*)",
|
|
22
|
-
"Bash(node .claude/skills/paper-pipeline/scripts/ledger.mjs:*)",
|
|
23
|
-
],
|
|
13
|
+
tools: ["Read", "Write", "Edit", "Grep", "Glob", "Agent", "Skill"],
|
|
24
14
|
body: `
|
|
25
15
|
# grade-paper-writing — grade how the paper READS, then fix it sentence by sentence
|
|
26
16
|
|
|
27
|
-
## Run me
|
|
28
|
-
|
|
29
|
-
🔴 FIRST, before any other step:
|
|
30
|
-
|
|
31
|
-
\`\`\`
|
|
32
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs grade-paper-writing <paper-dir>
|
|
33
|
-
\`\`\`
|
|
34
|
-
|
|
35
|
-
An advisory pass cannot be observed failing — silence is both its error state and its normal
|
|
36
|
-
state — so starting is an event, and events get written down.
|
|
37
|
-
|
|
38
17
|
The review skills hunt scientific defects; \`study-accepted-papers\` checks whether the contribution clears
|
|
39
18
|
the venue's bar. Neither tells you the paper is a slog to read. This skill does exactly that: it grades
|
|
40
19
|
the **writing craft** against how the best-written papers actually read, and turns each low score into a
|
|
@@ -228,8 +207,7 @@ is what happened.
|
|
|
228
207
|
side effect.
|
|
229
208
|
|
|
230
209
|
7. 🔴 **Put \`WORST-SECTION: <section>\` on the FIRST LINE of the report.** Machine-readable, one
|
|
231
|
-
section, lowercase, no decoration
|
|
232
|
-
\`repeat-finding\` when the same section is worst twice running. This exists because the abstract
|
|
210
|
+
section, lowercase, no decoration, so the next round can compare it with the last report. This exists because the abstract
|
|
233
211
|
was named worst **five consecutive times**, was faithfully recorded in the scorecard all five
|
|
234
212
|
times, and was never once the next task. A review loop that only appends findings converges on a
|
|
235
213
|
paper whose defects are all thoroughly documented and none of them fixed. **Naming the worst
|
|
@@ -290,29 +268,6 @@ findings:
|
|
|
290
268
|
---
|
|
291
269
|
\`\`\`
|
|
292
270
|
|
|
293
|
-
## Record the verdict
|
|
294
|
-
|
|
295
|
-
🔴 LAST step, once the deliverable exists:
|
|
296
|
-
|
|
297
|
-
\`\`\`
|
|
298
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record grade-paper-writing <paper-dir> FINDING <count> <report-path>
|
|
299
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record grade-paper-writing <paper-dir> ABSTAINED <reason> "<one line>"
|
|
300
|
-
\`\`\`
|
|
301
|
-
|
|
302
|
-
**FINDING** — \`<count>\` is the number of entries in the PERSONA stall inventory, and \`<report-path>\`
|
|
303
|
-
is that inventory. Add \`--blocking\` when a dimension scored 1–2, or stall density is over its cap.
|
|
304
|
-
**ABSTAINED** — \`no-witness\`: the inventory came back empty. \`blocked\`: no persona reader was run,
|
|
305
|
-
so there is no inventory — which is not an empty inventory and must never be filed as one.
|
|
306
|
-
|
|
307
|
-
🔴 **There is no PASS**, and the distinction the two abstentions draw is the one that was being
|
|
308
|
-
lost: "a reader stalled nowhere" and "nobody read it" produced the same word.
|
|
309
|
-
|
|
310
|
-
🔴 **Record the stall count, never the rubric number.** The inventory is what \`pc-panel-review\`,
|
|
311
|
-
\`paper-adversarial-review\` and \`harden-paper\` consume; a 44/60 in the ledger would let a paper whose
|
|
312
|
-
readability gate is failing look clean to every skill downstream.
|
|
313
|
-
|
|
314
|
-
\`prose-lint.mjs\` files separately as \`grade-paper-writing/prose-lint\`. One check, one row.
|
|
315
|
-
|
|
316
271
|
## Rules
|
|
317
272
|
- Grade **writing, not science.** A correct paper can still score a 2 here; say so. Don't drift into
|
|
318
273
|
content/defect review — that's \`paper-adversarial-review\` / \`pc-panel-review\`.
|
|
@@ -692,9 +692,8 @@ for (const f of args.filter((a) => !a.startsWith("--"))) {
|
|
|
692
692
|
// `hedge-density`, `discourse-subject`, `undefined-coinage`.
|
|
693
693
|
if (lines.length) {
|
|
694
694
|
flagged += lines.length;
|
|
695
|
-
// The header STATES the count
|
|
696
|
-
//
|
|
697
|
-
// caption became three findings in the ledger.
|
|
695
|
+
// The header STATES the count, so a caller need not count output lines — header and footer
|
|
696
|
+
// are not findings.
|
|
698
697
|
console.error(
|
|
699
698
|
`✍️ prose-lint — ${f.split("/").pop()} — ${lines.length} finding(s):`,
|
|
700
699
|
);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* prose-lint.mjs as a process — the way the skill
|
|
2
|
+
* prose-lint.mjs as a process — the way the skill runs it. Every mode, on
|
|
3
3
|
* fixtures written here, with the WHOLE output compared: the report is the product, so a changed
|
|
4
4
|
* number or a dropped line is a changed result.
|
|
5
5
|
*/
|
|
@@ -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:5283c1dbb4693721 compiled from skills/harden-paper/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# harden-paper — the multi-axis pre-submit gate
|
|
10
10
|
|
|
@@ -15,17 +15,6 @@ allowed-tools: [Read, Write, Edit, Grep, Glob, Bash, WebSearch, WebFetch, Agent,
|
|
|
15
15
|
> doesn't systematically hit — the submission-readiness gate. Run it after the draft is written and
|
|
16
16
|
> before `submit-paper`. It does not re-implement the sub-skills; it calls them and checks the rest.
|
|
17
17
|
|
|
18
|
-
## Run me
|
|
19
|
-
|
|
20
|
-
🔴 FIRST, before any other step:
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs harden-paper <paper-dir>
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
An advisory pass cannot be observed failing — silence is both its error state and its normal
|
|
27
|
-
state — so starting is an event, and events get written down.
|
|
28
|
-
|
|
29
18
|
**Principle:** a paper dies from any *one* unclosed axis. Reviewers only *read* — so every claim,
|
|
30
19
|
number, and omission must survive on the page. Go axis by axis; for each, **find → fix → re-verify**,
|
|
31
20
|
don't just list. Below, each axis says what to run / check and the specific traps that recur.
|
|
@@ -285,33 +274,6 @@ framing, the one quotable stat, the reusable artifact, any dry-humour line and w
|
|
|
285
274
|
list of items only the author can close (host artifact, click submit, disclose-before-public, post the
|
|
286
275
|
preprint). If every gate passes and every axis is PASS/FIXED → hand off to `submit-paper`.
|
|
287
276
|
|
|
288
|
-
## Record the verdict
|
|
289
|
-
|
|
290
|
-
🔴 LAST step, once the deliverable exists:
|
|
291
|
-
|
|
292
|
-
```
|
|
293
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record harden-paper <paper-dir> FINDING <count> <report-path>
|
|
294
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record harden-paper <paper-dir> ABSTAINED <reason> "<one line>"
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
**FINDING** — `<count>` is the number of failing gates plus still-OPEN axes and `<report-path>` the
|
|
298
|
-
worst-gate-first vector. Add `--blocking` when any gate in the vector fails, as opposed to an axis
|
|
299
|
-
merely being open.
|
|
300
|
-
**ABSTAINED** — `no-witness`: every gate answered and no axis is open, which is the state that hands
|
|
301
|
-
off to `submit-paper`. `blocked`: a gate in the vector has never been run, so the vector has a hole
|
|
302
|
-
in it and there is nothing to hand off.
|
|
303
|
-
|
|
304
|
-
🔴 **There is no PASS, and this skill must not reinvent one.** Its whole design is that the verdict
|
|
305
|
-
is a VECTOR reported worst-gate-first, and a stored scalar acquittal was the single value that could
|
|
306
|
-
flatten it. `no-witness` here means every gate answered and none of them found anything — it is not
|
|
307
|
-
"ready", and the readiness call is a sentence a human writes in the report.
|
|
308
|
-
|
|
309
|
-
🔴 **Never record the accept-probability as the count.** A single scalar hiding a multi-dimensional
|
|
310
|
-
failure is the exact thing this skill refuses to report in prose, and a ledger row is prose that
|
|
311
|
-
survives longer.
|
|
312
|
-
|
|
313
|
-
The artifact-coverage script files separately as `harden-paper/artifact-coverage`. One check, one row.
|
|
314
|
-
|
|
315
277
|
## Composes with
|
|
316
278
|
`tighten-paper` (axis 0, run FIRST — structure before sentences), `paper-adversarial-review` +
|
|
317
279
|
`pc-panel-review` + `verify-citations` + `grade-paper-writing` (called by this), `render-paper` (if LaTeX
|
|
@@ -32,17 +32,6 @@ export default experimental_skill({
|
|
|
32
32
|
> doesn't systematically hit — the submission-readiness gate. Run it after the draft is written and
|
|
33
33
|
> before \`submit-paper\`. It does not re-implement the sub-skills; it calls them and checks the rest.
|
|
34
34
|
|
|
35
|
-
## Run me
|
|
36
|
-
|
|
37
|
-
🔴 FIRST, before any other step:
|
|
38
|
-
|
|
39
|
-
\`\`\`
|
|
40
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs harden-paper <paper-dir>
|
|
41
|
-
\`\`\`
|
|
42
|
-
|
|
43
|
-
An advisory pass cannot be observed failing — silence is both its error state and its normal
|
|
44
|
-
state — so starting is an event, and events get written down.
|
|
45
|
-
|
|
46
35
|
**Principle:** a paper dies from any *one* unclosed axis. Reviewers only *read* — so every claim,
|
|
47
36
|
number, and omission must survive on the page. Go axis by axis; for each, **find → fix → re-verify**,
|
|
48
37
|
don't just list. Below, each axis says what to run / check and the specific traps that recur.
|
|
@@ -302,33 +291,6 @@ framing, the one quotable stat, the reusable artifact, any dry-humour line and w
|
|
|
302
291
|
list of items only the author can close (host artifact, click submit, disclose-before-public, post the
|
|
303
292
|
preprint). If every gate passes and every axis is PASS/FIXED → hand off to \`submit-paper\`.
|
|
304
293
|
|
|
305
|
-
## Record the verdict
|
|
306
|
-
|
|
307
|
-
🔴 LAST step, once the deliverable exists:
|
|
308
|
-
|
|
309
|
-
\`\`\`
|
|
310
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record harden-paper <paper-dir> FINDING <count> <report-path>
|
|
311
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record harden-paper <paper-dir> ABSTAINED <reason> "<one line>"
|
|
312
|
-
\`\`\`
|
|
313
|
-
|
|
314
|
-
**FINDING** — \`<count>\` is the number of failing gates plus still-OPEN axes and \`<report-path>\` the
|
|
315
|
-
worst-gate-first vector. Add \`--blocking\` when any gate in the vector fails, as opposed to an axis
|
|
316
|
-
merely being open.
|
|
317
|
-
**ABSTAINED** — \`no-witness\`: every gate answered and no axis is open, which is the state that hands
|
|
318
|
-
off to \`submit-paper\`. \`blocked\`: a gate in the vector has never been run, so the vector has a hole
|
|
319
|
-
in it and there is nothing to hand off.
|
|
320
|
-
|
|
321
|
-
🔴 **There is no PASS, and this skill must not reinvent one.** Its whole design is that the verdict
|
|
322
|
-
is a VECTOR reported worst-gate-first, and a stored scalar acquittal was the single value that could
|
|
323
|
-
flatten it. \`no-witness\` here means every gate answered and none of them found anything — it is not
|
|
324
|
-
"ready", and the readiness call is a sentence a human writes in the report.
|
|
325
|
-
|
|
326
|
-
🔴 **Never record the accept-probability as the count.** A single scalar hiding a multi-dimensional
|
|
327
|
-
failure is the exact thing this skill refuses to report in prose, and a ledger row is prose that
|
|
328
|
-
survives longer.
|
|
329
|
-
|
|
330
|
-
The artifact-coverage script files separately as \`harden-paper/artifact-coverage\`. One check, one row.
|
|
331
|
-
|
|
332
294
|
## Composes with
|
|
333
295
|
\`tighten-paper\` (axis 0, run FIRST — structure before sentences), \`paper-adversarial-review\` +
|
|
334
296
|
\`pc-panel-review\` + \`verify-citations\` + \`grade-paper-writing\` (called by this), \`render-paper\` (if LaTeX
|
|
@@ -5,21 +5,10 @@ context: fork
|
|
|
5
5
|
allowed-tools: [WebSearch, WebFetch, Read, Write, Grep, Glob, Bash, Agent]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
<!-- vigiles:sha256:
|
|
8
|
+
<!-- vigiles:sha256:55971644308c470f compiled from skills/map-prior-work/SKILL.md.spec.ts -->
|
|
9
9
|
|
|
10
10
|
# map-prior-work — find out who already did it, while you can still change course
|
|
11
11
|
|
|
12
|
-
## Run me
|
|
13
|
-
|
|
14
|
-
🔴 FIRST, before any other step:
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs map-prior-work <paper-dir>
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
An advisory pass cannot be observed failing — silence is both its error state and its normal
|
|
21
|
-
state — so starting is an event, and events get written down.
|
|
22
|
-
|
|
23
12
|
The expensive failure this prevents, in one sentence: **you discover the paper that already did your
|
|
24
13
|
contribution after the draft is finished, when the only move left is rewriting the claim under deadline.**
|
|
25
14
|
|
|
@@ -173,29 +162,6 @@ you looked.
|
|
|
173
162
|
|
|
174
163
|
---
|
|
175
164
|
|
|
176
|
-
## Step 8 — record the verdict
|
|
177
|
-
|
|
178
|
-
🔴 LAST step, once the deliverable exists:
|
|
179
|
-
|
|
180
|
-
```
|
|
181
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record map-prior-work <paper-dir> FINDING <count> <report-path>
|
|
182
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record map-prior-work <paper-dir> ABSTAINED <reason> "<one line>"
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
**FINDING** — `<count>` is the number of rivals triaged 🔴 or 🟠 (they threaten the claim),
|
|
186
|
-
`<report-path>` is the sweep file. Add `--blocking` when a rival did the contribution first and the
|
|
187
|
-
claim has to change.
|
|
188
|
-
**ABSTAINED** — `no-witness`: swept, and nothing found threatens what you claim. `blocked`: the
|
|
189
|
-
paper has no stated contribution yet, so there is nothing to sweep against.
|
|
190
|
-
|
|
191
|
-
That blocking finding is the outcome this skill was written from, discovered at T−10 days by
|
|
192
|
-
accident. Recorded here it is a dated fact about the field rather than a memory of a bad night.
|
|
193
|
-
|
|
194
|
-
🔴 **There is no PASS**, and this skill is where the reason is easiest to see. "Nothing threatens
|
|
195
|
-
the claim" is a statement about everything that exists, made by a sweep that read a bounded list —
|
|
196
|
-
so it can never be witnessed, only ever failed to be refuted. `no-witness` says that in one word,
|
|
197
|
-
and the sweep's own coverage-gaps section says how far the reading actually went.
|
|
198
|
-
|
|
199
165
|
## Rules
|
|
200
166
|
|
|
201
167
|
- **Mark evidence level on every claim:** `[A]` full text · `[B]` abstract/metadata · `[C]` your
|
|
@@ -24,17 +24,6 @@ export default experimental_skill({
|
|
|
24
24
|
body: `
|
|
25
25
|
# map-prior-work — find out who already did it, while you can still change course
|
|
26
26
|
|
|
27
|
-
## Run me
|
|
28
|
-
|
|
29
|
-
🔴 FIRST, before any other step:
|
|
30
|
-
|
|
31
|
-
\`\`\`
|
|
32
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs map-prior-work <paper-dir>
|
|
33
|
-
\`\`\`
|
|
34
|
-
|
|
35
|
-
An advisory pass cannot be observed failing — silence is both its error state and its normal
|
|
36
|
-
state — so starting is an event, and events get written down.
|
|
37
|
-
|
|
38
27
|
The expensive failure this prevents, in one sentence: **you discover the paper that already did your
|
|
39
28
|
contribution after the draft is finished, when the only move left is rewriting the claim under deadline.**
|
|
40
29
|
|
|
@@ -188,29 +177,6 @@ you looked.
|
|
|
188
177
|
|
|
189
178
|
---
|
|
190
179
|
|
|
191
|
-
## Step 8 — record the verdict
|
|
192
|
-
|
|
193
|
-
🔴 LAST step, once the deliverable exists:
|
|
194
|
-
|
|
195
|
-
\`\`\`
|
|
196
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record map-prior-work <paper-dir> FINDING <count> <report-path>
|
|
197
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record map-prior-work <paper-dir> ABSTAINED <reason> "<one line>"
|
|
198
|
-
\`\`\`
|
|
199
|
-
|
|
200
|
-
**FINDING** — \`<count>\` is the number of rivals triaged 🔴 or 🟠 (they threaten the claim),
|
|
201
|
-
\`<report-path>\` is the sweep file. Add \`--blocking\` when a rival did the contribution first and the
|
|
202
|
-
claim has to change.
|
|
203
|
-
**ABSTAINED** — \`no-witness\`: swept, and nothing found threatens what you claim. \`blocked\`: the
|
|
204
|
-
paper has no stated contribution yet, so there is nothing to sweep against.
|
|
205
|
-
|
|
206
|
-
That blocking finding is the outcome this skill was written from, discovered at T−10 days by
|
|
207
|
-
accident. Recorded here it is a dated fact about the field rather than a memory of a bad night.
|
|
208
|
-
|
|
209
|
-
🔴 **There is no PASS**, and this skill is where the reason is easiest to see. "Nothing threatens
|
|
210
|
-
the claim" is a statement about everything that exists, made by a sweep that read a bounded list —
|
|
211
|
-
so it can never be witnessed, only ever failed to be refuted. \`no-witness\` says that in one word,
|
|
212
|
-
and the sweep's own coverage-gaps section says how far the reading actually went.
|
|
213
|
-
|
|
214
180
|
## Rules
|
|
215
181
|
|
|
216
182
|
- **Mark evidence level on every claim:** \`[A]\` full text · \`[B]\` abstract/metadata · \`[C]\` your
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* osf-artifact-upload — the free, deterministic tier. No model, no network, no OSF.
|
|
3
3
|
*
|
|
4
|
-
* WHY THIS ONE IS NOT A `checkSkill()` ONE-LINER. It
|
|
5
|
-
* `
|
|
6
|
-
*
|
|
7
|
-
* per-skill checks would (correctly) reject it.
|
|
4
|
+
* WHY THIS ONE IS NOT A `checkSkill()` ONE-LINER. It is not a stage — it is a
|
|
5
|
+
* utility `submit-paper` composes with — and what matters about it is the rules
|
|
6
|
+
* it states about its own commands, which the shared per-skill checks do not read.
|
|
8
7
|
*
|
|
9
8
|
* WHAT IT CHECKS: the two rules this skill states about its OWN commands, in its
|
|
10
9
|
* own §gotchas — that every `curl` carries `-g` (bracketed OSF params glob and
|