paperlint 3.2.0 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +16 -23
- package/CLAUDE.md +33 -13
- package/CONTRIBUTING.md +23 -7
- package/README.md +11 -8
- 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 +10 -5
- 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/latex/document-class.d.ts +22 -0
- package/dist/adapters/latex/document-class.d.ts.map +1 -0
- package/dist/adapters/latex/document-class.js +102 -0
- package/dist/adapters/latex/document-class.js.map +1 -0
- package/dist/adapters/latex/hidden.d.ts +16 -0
- package/dist/adapters/latex/hidden.d.ts.map +1 -0
- package/dist/adapters/latex/hidden.js +49 -0
- package/dist/adapters/latex/hidden.js.map +1 -0
- package/dist/adapters/latex/index.d.ts +29 -0
- package/dist/adapters/latex/index.d.ts.map +1 -0
- package/dist/adapters/latex/index.js +18 -0
- package/dist/adapters/latex/index.js.map +1 -0
- package/dist/adapters/latex/nodes.d.ts +54 -0
- package/dist/adapters/latex/nodes.d.ts.map +1 -0
- package/dist/adapters/latex/nodes.js +93 -0
- package/dist/adapters/latex/nodes.js.map +1 -0
- package/dist/adapters/latex/outline.d.ts +10 -0
- package/dist/adapters/latex/outline.d.ts.map +1 -0
- package/dist/adapters/latex/outline.js +39 -0
- package/dist/adapters/latex/outline.js.map +1 -0
- package/dist/adapters/latex/parse.d.ts +42 -0
- package/dist/adapters/latex/parse.d.ts.map +1 -0
- package/dist/adapters/latex/parse.js +94 -0
- package/dist/adapters/latex/parse.js.map +1 -0
- package/dist/adapters/latex/rendered.d.ts +10 -0
- package/dist/adapters/latex/rendered.d.ts.map +1 -0
- package/dist/adapters/latex/rendered.js +39 -0
- package/dist/adapters/latex/rendered.js.map +1 -0
- 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/pdfjs/fill.d.ts.map +1 -1
- package/dist/adapters/pdfjs/fill.js +12 -12
- package/dist/adapters/pdfjs/fill.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 +9 -10
- 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 +91 -17
- 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/domain/tex-document.d.ts +84 -0
- package/dist/domain/tex-document.d.ts.map +1 -0
- package/dist/domain/tex-document.js +43 -0
- package/dist/domain/tex-document.js.map +1 -0
- 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 +31 -28
- 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 +5 -0
- package/dist/new-paper.d.ts.map +1 -1
- package/dist/new-paper.js +8 -1
- package/dist/new-paper.js.map +1 -1
- package/dist/package-dirs.d.ts +5 -0
- package/dist/package-dirs.d.ts.map +1 -0
- package/dist/package-dirs.js +14 -0
- package/dist/package-dirs.js.map +1 -0
- 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/latex.d.ts +24 -0
- package/dist/ports/latex.d.ts.map +1 -0
- package/dist/ports/latex.js +2 -0
- package/dist/ports/latex.js.map +1 -0
- package/dist/ports/tool-installer.d.ts +2 -14
- package/dist/ports/tool-installer.d.ts.map +1 -1
- package/dist/presets.d.ts +15 -2
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +35 -10
- 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 +15 -0
- package/dist/tex-requirements.d.ts.map +1 -1
- package/dist/tex-requirements.js +28 -10
- package/dist/tex-requirements.js.map +1 -1
- package/dist/tex-venue-rules.d.ts +83 -0
- package/dist/tex-venue-rules.d.ts.map +1 -0
- package/dist/tex-venue-rules.js +254 -0
- package/dist/tex-venue-rules.js.map +1 -0
- package/dist/types.d.ts +5 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/venue-rules.d.ts +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 +5 -4
- package/docs/e2e.md +69 -40
- package/docs/install.md +1 -1
- package/docs/prior-art/README.md +1 -1
- package/docs/prior-art/package-location.md +5 -5
- package/docs/prior-art/repro/README.md +1 -1
- package/docs/prior-art/test-tooling.md +21 -10
- package/docs/rules/tex/required-section.md +73 -0
- package/docs/rules/tex/template.md +62 -0
- package/docs/rules/tex/venue-leftover.md +71 -0
- package/docs/rules.md +70 -48
- package/docs/testing.md +17 -4
- package/docs/texlive-install-decision.md +1 -1
- package/docs/toolchain.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 +162 -15
- package/fixtures/build-e2e/acmart/expect.json +26 -0
- package/fixtures/build-e2e/aidc/PIPELINE-STATUS.md +3 -0
- package/fixtures/build-e2e/aidc/expect.json +14 -0
- package/fixtures/build-e2e/aidc/paper.tex +46 -0
- package/fixtures/build-e2e/aidc/paperlint.json +1 -0
- package/fixtures/build-e2e/broken/expect.json +11 -0
- package/fixtures/build-e2e/cite/expect.json +27 -0
- package/fixtures/build-e2e/empty/expect.json +12 -0
- package/fixtures/build-e2e/fallback/expect.json +53 -0
- package/fixtures/build-e2e/guards/expect.json +6 -0
- package/fixtures/build-e2e/no-source/expect.json +10 -0
- package/fixtures/build-e2e/unbalanced/expect.json +60 -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/fixtures/pdf-facts/README.md +1 -1
- package/fixtures/real-markdown-paper/baseline.ts +1 -1
- package/fixtures/render-paper/build-clean.sh +3 -5
- 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 +13 -2
- package/{skills/submit-paper/references/venues → presets}/acm-sigconf.jsonc +4 -1
- package/{skills/submit-paper/references/venues → presets}/agenticdev.jsonc +4 -0
- package/presets/aidc.jsonc +73 -0
- package/{skills/submit-paper/references/venues → presets}/aisec.jsonc +4 -0
- package/presets/ieee-conference.jsonc +66 -0
- package/{skills/submit-paper/references/venues → presets}/realm.jsonc +8 -1
- package/{skills/submit-paper/references/venues → presets/tex}/paper-guards.tex +1 -1
- package/{skills/submit-paper/references/venues → presets}/venue-profile.schema.json +30 -2
- package/scripts/check.harness.ts +64 -10
- package/scripts/check.test.ts +60 -13
- package/scripts/check.ts +83 -30
- package/scripts/coverage-config.test.ts +0 -1
- package/scripts/harness-api.frozen.json +0 -1
- package/scripts/test.test.ts +1 -1
- package/scripts/test.ts +1 -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/PIPELINE-MAP.md +2 -2
- package/skills/paper-pipeline/SKILL.md +3 -29
- package/skills/paper-pipeline/SKILL.md.spec.ts +2 -28
- 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.d.mts +0 -2
- package/skills/paper-pipeline/scripts/consumer.harness.mjs +6 -104
- package/skills/paper-pipeline/scripts/consumer.mjs +24 -119
- 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 +2 -38
- package/skills/render-paper/SKILL.md.spec.ts +1 -37
- package/skills/render-paper/check-render.sh +16 -63
- package/skills/render-paper/render-paper.harness.mjs +17 -59
- 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 +3 -3
- 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 +24 -9
- package/src/adapters/banal/locate.test.ts +2 -2
- package/src/adapters/banal/locate.ts +27 -21
- package/src/adapters/banal/output.test.ts +1 -1
- package/src/adapters/banal/run.test.ts +3 -3
- package/src/adapters/banal/run.ts +16 -10
- package/src/adapters/banal/settings.ts +2 -2
- package/src/adapters/banal/xml.test.ts +1 -1
- package/src/adapters/curl/download.test.ts +4 -4
- package/src/adapters/latex/document-class.ts +147 -0
- package/src/adapters/latex/hidden.ts +70 -0
- package/src/adapters/latex/index.test.ts +361 -0
- package/src/adapters/latex/index.ts +55 -0
- package/src/adapters/latex/nodes.ts +141 -0
- package/src/adapters/latex/outline.ts +64 -0
- package/src/adapters/latex/parse.ts +136 -0
- package/src/adapters/latex/rendered.ts +59 -0
- 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/pdfjs/fill.test.ts +1 -1
- package/src/adapters/pdfjs/fill.ts +18 -10
- 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.harness.mjs +5 -7
- package/src/build.test.ts +10 -11
- package/src/build.ts +12 -13
- package/src/caller-path.ts +13 -0
- package/src/cli.harness.mjs +1 -3
- package/src/cli.test.ts +21 -16
- package/src/cli.ts +115 -33
- 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/domain/tex-document.test.ts +80 -0
- package/src/domain/tex-document.ts +110 -0
- package/src/engine.harness.mjs +1 -1
- package/src/engine.ts +30 -2
- package/src/facts-file.test.ts +4 -7
- package/src/facts-file.ts +45 -30
- 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/latex-loop.harness.ts +1 -1
- package/src/new-paper.harness.mjs +7 -23
- package/src/new-paper.test.ts +28 -3
- package/src/new-paper.ts +15 -3
- package/src/package-dirs.ts +17 -0
- package/src/paper-files.test.ts +22 -19
- package/src/paper-files.ts +16 -27
- package/src/paper-settings-commands.test.ts +6 -1
- 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/latex.ts +29 -0
- package/src/ports/tool-installer.ts +2 -17
- package/src/presets.test.ts +65 -4
- package/src/presets.ts +65 -28
- package/src/references.test.ts +25 -19
- package/src/references.ts +4 -5
- package/src/rule-cases.test.ts +474 -0
- package/src/rule-docs.test.ts +159 -0
- package/src/rules-config.ts +40 -11
- package/src/tex-requirements.harness.ts +13 -23
- package/src/tex-requirements.test.ts +21 -0
- package/src/tex-requirements.ts +64 -14
- package/src/tex-venue-rules.test.ts +659 -0
- package/src/tex-venue-rules.ts +429 -0
- package/src/toolchain.harness.mjs +1 -1
- 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 +104 -8
- package/src/venue-rules.ts +22 -12
- package/templates/paper/paper.tex +2 -1
- 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
- /package/{skills/submit-paper/references/venues → presets/tex}/agenticdev.tex +0 -0
- /package/{skills/submit-paper/references/venues → presets}/tex-base.jsonc +0 -0
|
@@ -23,17 +23,6 @@ export default experimental_skill({
|
|
|
23
23
|
body: `
|
|
24
24
|
# camera-ready — de-anonymize an accepted paper into the final proceedings version
|
|
25
25
|
|
|
26
|
-
## Run me
|
|
27
|
-
|
|
28
|
-
🔴 FIRST, before any other step:
|
|
29
|
-
|
|
30
|
-
\`\`\`
|
|
31
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs camera-ready <paper-dir>
|
|
32
|
-
\`\`\`
|
|
33
|
-
|
|
34
|
-
An advisory pass cannot be observed failing — silence is both its error state and its normal
|
|
35
|
-
state — so starting is an event, and events get written down.
|
|
36
|
-
|
|
37
26
|
The reviewed PDF was anonymized on purpose. Acceptance flips that: the camera-ready carries your
|
|
38
27
|
real name, your real repo, and an archival DOI — and it's the version that gets indexed, so it's the
|
|
39
28
|
actual authorship evidence. This skill is the reverse of the anonymization you did at
|
|
@@ -128,28 +117,6 @@ If tight, ACM allows references to spill into the reference-only extra pages.
|
|
|
128
117
|
- Record the paper's DOI, the artifact DOI, and the ORCID in the paper's HANDOFF — those three IDs are
|
|
129
118
|
the authorship evidence and the anchor the extension (\`extend-paper\`) builds on.
|
|
130
119
|
|
|
131
|
-
## 6. Record the verdict
|
|
132
|
-
|
|
133
|
-
🔴 LAST step, once the deliverable exists:
|
|
134
|
-
|
|
135
|
-
\`\`\`
|
|
136
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record camera-ready <paper-dir> FINDING <count> <report-path>
|
|
137
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record camera-ready <paper-dir> ABSTAINED <reason> "<one line>"
|
|
138
|
-
\`\`\`
|
|
139
|
-
|
|
140
|
-
**FINDING** — \`<count>\` residual items still open; \`<report-path>\` names them. Add \`--blocking\` for
|
|
141
|
-
anything that must not be pushed past: anonymization residue, a dead artifact link, or — on a
|
|
142
|
-
security paper — disclosure not yet complete.
|
|
143
|
-
**ABSTAINED** — \`no-witness\`: shipped, de-anonymized, DOI live, page limit re-checked, with the DOI
|
|
144
|
-
in the note. \`blocked\`: the acceptance notice has not arrived, so there is nothing to make ready.
|
|
145
|
-
|
|
146
|
-
🔴 That blocking finding is the only one in this pipeline whose consequence is **irreversible**. The
|
|
147
|
-
public de-anonymized repo is Google-findable the moment it is pushed, so record it before, not after.
|
|
148
|
-
|
|
149
|
-
🔴 **There is no PASS**, and on this skill that is not a formality: a stored "shipped" would have
|
|
150
|
-
been the one row in the pipeline that could be true of a repo nobody had looked at. The DOI in the
|
|
151
|
-
note is the witness. Without it there is nothing to check the row against.
|
|
152
|
-
|
|
153
120
|
## Compose with
|
|
154
121
|
- **submit-paper** (upstream — this reverses what it anonymized).
|
|
155
122
|
- **paper-pipeline/references/anonymization.md** — the canonical list of anonymization moves; undo each.
|
|
@@ -5,20 +5,11 @@ context: fork
|
|
|
5
5
|
allowed-tools: [Bash, Read, Agent]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
<!-- vigiles:sha256:
|
|
8
|
+
<!-- vigiles:sha256:e45391841e689aa9 compiled from skills/cold-read-diff/SKILL.md.spec.ts -->
|
|
9
9
|
|
|
10
10
|
# cold-read-diff — the reader who cannot fake understanding
|
|
11
11
|
|
|
12
|
-
## Run me
|
|
13
12
|
|
|
14
|
-
🔴 FIRST, before any other step:
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs cold-read-diff <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
13
|
|
|
23
14
|
## The failure this exists for
|
|
24
15
|
|
|
@@ -120,25 +111,6 @@ findings:
|
|
|
120
111
|
---
|
|
121
112
|
```
|
|
122
113
|
|
|
123
|
-
## Record the verdict
|
|
124
|
-
|
|
125
|
-
🔴 LAST step, once the deliverable exists:
|
|
126
|
-
|
|
127
|
-
```
|
|
128
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record cold-read-diff <paper-dir> FINDING <count> <report-path>
|
|
129
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record cold-read-diff <paper-dir> ABSTAINED <reason> "<one line>"
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
**FINDING** — `<count>` is the number of changed sentences the cold reader could not restate (every
|
|
133
|
-
`CANNOT PARSE` counts), `<report-path>` is the `reviews/*cold-read*.md` file.
|
|
134
|
-
**ABSTAINED** — `no-witness`: every changed sentence came back restated correctly.
|
|
135
|
-
`input-missing`: the diff held no prose to read.
|
|
136
|
-
|
|
137
|
-
🔴 These two are different answers and the difference is the whole reason the vocabulary is closed:
|
|
138
|
-
one says a reader read it and found nothing, the other says there was nothing to hand a reader.
|
|
139
|
-
Prose collapses them and the old `PASS`/`ABSENT` pair only half-separated them, because `PASS` also
|
|
140
|
-
got recorded when nobody had run a reader at all. There is no `PASS` now; the reason is the answer.
|
|
141
|
-
|
|
142
114
|
## Rules
|
|
143
115
|
|
|
144
116
|
- 🔴 **No context in the prompt. Ever.** Not the title, not the abstract, not "this is a paper about
|
|
@@ -158,12 +130,6 @@ got recorded when nobody had run a reader at all. There is no `PASS` now; the re
|
|
|
158
130
|
- **Run it on your own fixes too.** The author is the least qualified judge of whether his repair
|
|
159
131
|
reads, and that is exactly when he feels most certain.
|
|
160
132
|
|
|
161
|
-
## Enforcement
|
|
162
|
-
|
|
163
|
-
`pipeline-check.mjs` raises `stale-cold-read` when the newest `reviews/*cold-read*.md` is older than
|
|
164
|
-
the paper source, and `no-cold-read` when none exists. The date comparison is the whole mechanism:
|
|
165
|
-
a cold read that predates the current text describes prose that no longer exists.
|
|
166
|
-
|
|
167
133
|
## Compose with
|
|
168
134
|
|
|
169
135
|
- `grade-paper-writing` — the batch readability gate; this is its continuous counterpart. That one
|
|
@@ -14,16 +14,7 @@ export default experimental_skill({
|
|
|
14
14
|
body: `
|
|
15
15
|
# cold-read-diff — the reader who cannot fake understanding
|
|
16
16
|
|
|
17
|
-
## Run me
|
|
18
17
|
|
|
19
|
-
🔴 FIRST, before any other step:
|
|
20
|
-
|
|
21
|
-
\`\`\`
|
|
22
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs cold-read-diff <paper-dir>
|
|
23
|
-
\`\`\`
|
|
24
|
-
|
|
25
|
-
An advisory pass cannot be observed failing — silence is both its error state and its normal
|
|
26
|
-
state — so starting is an event, and events get written down.
|
|
27
18
|
|
|
28
19
|
## The failure this exists for
|
|
29
20
|
|
|
@@ -125,25 +116,6 @@ findings:
|
|
|
125
116
|
---
|
|
126
117
|
\`\`\`
|
|
127
118
|
|
|
128
|
-
## Record the verdict
|
|
129
|
-
|
|
130
|
-
🔴 LAST step, once the deliverable exists:
|
|
131
|
-
|
|
132
|
-
\`\`\`
|
|
133
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record cold-read-diff <paper-dir> FINDING <count> <report-path>
|
|
134
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record cold-read-diff <paper-dir> ABSTAINED <reason> "<one line>"
|
|
135
|
-
\`\`\`
|
|
136
|
-
|
|
137
|
-
**FINDING** — \`<count>\` is the number of changed sentences the cold reader could not restate (every
|
|
138
|
-
\`CANNOT PARSE\` counts), \`<report-path>\` is the \`reviews/*cold-read*.md\` file.
|
|
139
|
-
**ABSTAINED** — \`no-witness\`: every changed sentence came back restated correctly.
|
|
140
|
-
\`input-missing\`: the diff held no prose to read.
|
|
141
|
-
|
|
142
|
-
🔴 These two are different answers and the difference is the whole reason the vocabulary is closed:
|
|
143
|
-
one says a reader read it and found nothing, the other says there was nothing to hand a reader.
|
|
144
|
-
Prose collapses them and the old \`PASS\`/\`ABSENT\` pair only half-separated them, because \`PASS\` also
|
|
145
|
-
got recorded when nobody had run a reader at all. There is no \`PASS\` now; the reason is the answer.
|
|
146
|
-
|
|
147
119
|
## Rules
|
|
148
120
|
|
|
149
121
|
- 🔴 **No context in the prompt. Ever.** Not the title, not the abstract, not "this is a paper about
|
|
@@ -163,12 +135,6 @@ got recorded when nobody had run a reader at all. There is no \`PASS\` now; the
|
|
|
163
135
|
- **Run it on your own fixes too.** The author is the least qualified judge of whether his repair
|
|
164
136
|
reads, and that is exactly when he feels most certain.
|
|
165
137
|
|
|
166
|
-
## Enforcement
|
|
167
|
-
|
|
168
|
-
\`pipeline-check.mjs\` raises \`stale-cold-read\` when the newest \`reviews/*cold-read*.md\` is older than
|
|
169
|
-
the paper source, and \`no-cold-read\` when none exists. The date comparison is the whole mechanism:
|
|
170
|
-
a cold read that predates the current text describes prose that no longer exists.
|
|
171
|
-
|
|
172
138
|
## Compose with
|
|
173
139
|
|
|
174
140
|
- \`grade-paper-writing\` — the batch readability gate; this is its continuous counterpart. That one
|
|
@@ -1,24 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: draft-paper
|
|
3
3
|
description: Use when the numbers exist and it's time to WRITE the paper — "draft the paper", "turn these findings into a submission", "write the abstract/intro/threats". Gives the section skeleton of a measurement/benchmark paper plus what gets it accepted AND cited — precise claim-sizing (including an explicit "what we do NOT claim"), a construct-validity frame, an honest threats-to-validity section that turns limitations in your favor, and one memorable stat that travels. Encodes the two theses that carried real measurement papers ("measuring the wrong number", "safety theater"). NOT for grading finished prose (grade-paper-writing) or structural editing (tighten-paper) — this is the generative counterpart. Compose with build-benchmark (numbers), grade-paper-writing (prose QA), render-paper, verify-citations, then the review skills.
|
|
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:46bb85bfaa45e595 compiled from skills/draft-paper/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# draft-paper — prose that survives review and gets cited
|
|
10
10
|
|
|
11
|
-
## Run me
|
|
12
|
-
|
|
13
|
-
🔴 FIRST, before any other step:
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs draft-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
|
A measurement paper lives or dies on two things reviewers actually reward: a **reusable method/norm**
|
|
23
12
|
they can apply to the next system, and **claim-sizing so precise it can't be attacked**. Numbers alone
|
|
24
13
|
are a blog post. This skill turns `build-benchmark`'s output into that kind of draft.
|
|
@@ -101,34 +90,6 @@ For papers they duplicate — and are superseded by — `grade-paper-writing` +
|
|
|
101
90
|
pass (the blog skills lack the persona fix, so they under-fire on paper prose). Never route paper
|
|
102
91
|
prose QA to them.
|
|
103
92
|
|
|
104
|
-
## Record the verdict
|
|
105
|
-
|
|
106
|
-
🔴 LAST step, once the deliverable exists:
|
|
107
|
-
|
|
108
|
-
```
|
|
109
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record draft-paper <paper-dir> FINDING <count> <report-path>
|
|
110
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record draft-paper <paper-dir> ABSTAINED <reason> "<one line>"
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
This skill generates rather than judges, so what it records is about the run, not about the paper.
|
|
114
|
-
|
|
115
|
-
**FINDING** — it declined to draft because a required input was missing: no numbers from
|
|
116
|
-
`build-benchmark`, or an empty `frame` paragraph from `argument-arc`. `--blocking`, always, because
|
|
117
|
-
drafting past it produces prose about numbers that do not exist.
|
|
118
|
-
**ABSTAINED** — `no-witness`: sections were written and the generator has nothing to report about
|
|
119
|
-
the paper. Put the drafted sections in the note; they are the deliverable, not evidence of a defect.
|
|
120
|
-
|
|
121
|
-
🔴 **Design smell, stated plainly: this gate will almost always record an abstention**, and
|
|
122
|
-
`status.mjs` will flag it as one that has never returned a finding. Leave the flag standing — it is
|
|
123
|
-
telling the truth. A generator is not a gate, and the only honest negative it can produce is the
|
|
124
|
-
refusal above. If a run ever ends with prose written from numbers that do not exist, that is a
|
|
125
|
-
`FINDING --blocking` and must be recorded as one rather than quietly upgraded.
|
|
126
|
-
|
|
127
|
-
🔴 Deleting `PASS` did not fix this skill and was never going to: the old vocabulary let it write
|
|
128
|
-
down "I produced sections" as though that were an answer about the manuscript, and the new one
|
|
129
|
-
simply refuses to. The generator is still not a gate. `draft-paper/population-map` — a real check —
|
|
130
|
-
is the row that can say no about this skill's output.
|
|
131
|
-
|
|
132
93
|
## Compose with
|
|
133
94
|
- **`build-benchmark`** — its numbers/CIs are the Results section's raw material; never hand-type a
|
|
134
95
|
number that isn't in its output (that's how paper↔artifact mismatches get born).
|
|
@@ -10,31 +10,10 @@ export default experimental_skill({
|
|
|
10
10
|
name: "draft-paper",
|
|
11
11
|
description:
|
|
12
12
|
'Use when the numbers exist and it\'s time to WRITE the paper — "draft the paper", "turn these findings into a submission", "write the abstract/intro/threats". Gives the section skeleton of a measurement/benchmark paper plus what gets it accepted AND cited — precise claim-sizing (including an explicit "what we do NOT claim"), a construct-validity frame, an honest threats-to-validity section that turns limitations in your favor, and one memorable stat that travels. Encodes the two theses that carried real measurement papers ("measuring the wrong number", "safety theater"). NOT for grading finished prose (grade-paper-writing) or structural editing (tighten-paper) — this is the generative counterpart. Compose with build-benchmark (numbers), grade-paper-writing (prose QA), render-paper, verify-citations, then the review skills.',
|
|
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
|
# draft-paper — prose that survives review and gets cited
|
|
26
16
|
|
|
27
|
-
## Run me
|
|
28
|
-
|
|
29
|
-
🔴 FIRST, before any other step:
|
|
30
|
-
|
|
31
|
-
\`\`\`
|
|
32
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs draft-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
|
A measurement paper lives or dies on two things reviewers actually reward: a **reusable method/norm**
|
|
39
18
|
they can apply to the next system, and **claim-sizing so precise it can't be attacked**. Numbers alone
|
|
40
19
|
are a blog post. This skill turns \`build-benchmark\`'s output into that kind of draft.
|
|
@@ -117,34 +96,6 @@ For papers they duplicate — and are superseded by — \`grade-paper-writing\`
|
|
|
117
96
|
pass (the blog skills lack the persona fix, so they under-fire on paper prose). Never route paper
|
|
118
97
|
prose QA to them.
|
|
119
98
|
|
|
120
|
-
## Record the verdict
|
|
121
|
-
|
|
122
|
-
🔴 LAST step, once the deliverable exists:
|
|
123
|
-
|
|
124
|
-
\`\`\`
|
|
125
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record draft-paper <paper-dir> FINDING <count> <report-path>
|
|
126
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record draft-paper <paper-dir> ABSTAINED <reason> "<one line>"
|
|
127
|
-
\`\`\`
|
|
128
|
-
|
|
129
|
-
This skill generates rather than judges, so what it records is about the run, not about the paper.
|
|
130
|
-
|
|
131
|
-
**FINDING** — it declined to draft because a required input was missing: no numbers from
|
|
132
|
-
\`build-benchmark\`, or an empty \`frame\` paragraph from \`argument-arc\`. \`--blocking\`, always, because
|
|
133
|
-
drafting past it produces prose about numbers that do not exist.
|
|
134
|
-
**ABSTAINED** — \`no-witness\`: sections were written and the generator has nothing to report about
|
|
135
|
-
the paper. Put the drafted sections in the note; they are the deliverable, not evidence of a defect.
|
|
136
|
-
|
|
137
|
-
🔴 **Design smell, stated plainly: this gate will almost always record an abstention**, and
|
|
138
|
-
\`status.mjs\` will flag it as one that has never returned a finding. Leave the flag standing — it is
|
|
139
|
-
telling the truth. A generator is not a gate, and the only honest negative it can produce is the
|
|
140
|
-
refusal above. If a run ever ends with prose written from numbers that do not exist, that is a
|
|
141
|
-
\`FINDING --blocking\` and must be recorded as one rather than quietly upgraded.
|
|
142
|
-
|
|
143
|
-
🔴 Deleting \`PASS\` did not fix this skill and was never going to: the old vocabulary let it write
|
|
144
|
-
down "I produced sections" as though that were an answer about the manuscript, and the new one
|
|
145
|
-
simply refuses to. The generator is still not a gate. \`draft-paper/population-map\` — a real check —
|
|
146
|
-
is the row that can say no about this skill's output.
|
|
147
|
-
|
|
148
99
|
## Compose with
|
|
149
100
|
- **\`build-benchmark\`** — its numbers/CIs are the Results section's raw material; never hand-type a
|
|
150
101
|
number that isn't in its output (that's how paper↔artifact mismatches get born).
|
|
@@ -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`.
|