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
|
@@ -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
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
name: paper-adversarial-review
|
|
3
3
|
description: Use when asking "red-team this paper" / "what would Reviewer 2 attack?" / "find the weaknesses before I submit" — ONE fast hostile-but-fair review of a paper draft. Surfaces overclaims, methodology holes, missing baselines/citations, novelty concerns, threats to validity, and desk-reject risks, with concrete fixes, led by a multi-axis 1–5 scorecard whose card composes into a pc-panel-review panel. NOT the multi-reviewer accept/reject decision (pc-panel-review), a writing grade (grade-paper-writing — this skill consumes its stall inventory rather than re-grading prose), or the full pre-submit gate (harden-paper). Especially for security and agentic-coding measurement papers.
|
|
4
4
|
context: fork
|
|
5
|
-
allowed-tools: [Read, Write, Grep, Glob, Agent, Skill
|
|
5
|
+
allowed-tools: [Read, Write, Grep, Glob, Agent, Skill]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
<!-- vigiles:sha256:
|
|
8
|
+
<!-- vigiles:sha256:68dcbcc1b7ab5348 compiled from skills/paper-adversarial-review/SKILL.md.spec.ts -->
|
|
9
9
|
|
|
10
10
|
# paper-adversarial-review — be the reviewer who wants to reject it
|
|
11
11
|
|
|
@@ -15,17 +15,6 @@ allowed-tools: [Read, Write, Grep, Glob, Agent, Skill, Bash(node .claude/skills/
|
|
|
15
15
|
> CFP-fit score (formerly `venue-review-sim`). Reach for an atom (this, or venue-fit mode) for a quick
|
|
16
16
|
> spot-check; run the panel for the decision.
|
|
17
17
|
|
|
18
|
-
## Run me
|
|
19
|
-
|
|
20
|
-
🔴 FIRST, before any other step:
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs paper-adversarial-review <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
|
Purpose: catch what a real peer reviewer will hit, while it's still fixable. Peer review is
|
|
30
19
|
**read, not run** — reviewers judge the *text, figures, and reported numbers*, rarely execute code.
|
|
31
20
|
So the paper must be self-contained and airtight on its face. This skill simulates the skeptical
|
|
@@ -91,28 +80,6 @@ venue + paper type (short/full/position/benchmark). Ask for the structured outpu
|
|
|
91
80
|
- **Strongest reframing** if the contribution is undersold or misframed.
|
|
92
81
|
- **What to cut** (for length / TMI) and **what to add** (for soundness).
|
|
93
82
|
|
|
94
|
-
## Record the verdict
|
|
95
|
-
|
|
96
|
-
🔴 LAST step, once the deliverable exists:
|
|
97
|
-
|
|
98
|
-
```
|
|
99
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record paper-adversarial-review <paper-dir> FINDING <count> <report-path>
|
|
100
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record paper-adversarial-review <paper-dir> ABSTAINED <reason> "<one line>"
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
**FINDING** — `<count>` is the number of ranked weaknesses, `<report-path>` the review with its
|
|
104
|
-
scorecard. Add `--blocking` when the leaning is reject, or there is a live desk-reject risk.
|
|
105
|
-
**ABSTAINED** — `no-witness`: the hostile read found nothing. `blocked`: there was no rendered
|
|
106
|
-
draft to attack.
|
|
107
|
-
|
|
108
|
-
🔴 **There is no PASS, and this skill is the reason the word was dangerous.** A hostile read that
|
|
109
|
-
found nothing either met a very good paper or was not hostile, and the old vocabulary wrote the
|
|
110
|
-
same word for both. `no-witness` says the true thing — this reader has no witness for the paper
|
|
111
|
-
being sound — and leaves the second possibility standing where it belongs, in view.
|
|
112
|
-
|
|
113
|
-
Record the weakness count, not the Overall 1–5. The average is exactly what this skill tells its own
|
|
114
|
-
reviewer to distrust — the lowest one or two axes are the story.
|
|
115
|
-
|
|
116
83
|
## Rules
|
|
117
84
|
- Be adversarial but *fair* and *specific* — "weak" is useless; "the 65% claim in the abstract isn't
|
|
118
85
|
supported because the pooled bill is −1%, reword to X" is useful.
|
|
@@ -11,16 +11,7 @@ export default experimental_skill({
|
|
|
11
11
|
description:
|
|
12
12
|
'Use when asking "red-team this paper" / "what would Reviewer 2 attack?" / "find the weaknesses before I submit" — ONE fast hostile-but-fair review of a paper draft. Surfaces overclaims, methodology holes, missing baselines/citations, novelty concerns, threats to validity, and desk-reject risks, with concrete fixes, led by a multi-axis 1–5 scorecard whose card composes into a pc-panel-review panel. NOT the multi-reviewer accept/reject decision (pc-panel-review), a writing grade (grade-paper-writing — this skill consumes its stall inventory rather than re-grading prose), or the full pre-submit gate (harden-paper). Especially for security and agentic-coding measurement papers.',
|
|
13
13
|
context: "fork",
|
|
14
|
-
tools: [
|
|
15
|
-
"Read",
|
|
16
|
-
"Write",
|
|
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
|
-
],
|
|
14
|
+
tools: ["Read", "Write", "Grep", "Glob", "Agent", "Skill"],
|
|
24
15
|
body: `
|
|
25
16
|
# paper-adversarial-review — be the reviewer who wants to reject it
|
|
26
17
|
|
|
@@ -30,17 +21,6 @@ export default experimental_skill({
|
|
|
30
21
|
> CFP-fit score (formerly \`venue-review-sim\`). Reach for an atom (this, or venue-fit mode) for a quick
|
|
31
22
|
> spot-check; run the panel for the decision.
|
|
32
23
|
|
|
33
|
-
## Run me
|
|
34
|
-
|
|
35
|
-
🔴 FIRST, before any other step:
|
|
36
|
-
|
|
37
|
-
\`\`\`
|
|
38
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs paper-adversarial-review <paper-dir>
|
|
39
|
-
\`\`\`
|
|
40
|
-
|
|
41
|
-
An advisory pass cannot be observed failing — silence is both its error state and its normal
|
|
42
|
-
state — so starting is an event, and events get written down.
|
|
43
|
-
|
|
44
24
|
Purpose: catch what a real peer reviewer will hit, while it's still fixable. Peer review is
|
|
45
25
|
**read, not run** — reviewers judge the *text, figures, and reported numbers*, rarely execute code.
|
|
46
26
|
So the paper must be self-contained and airtight on its face. This skill simulates the skeptical
|
|
@@ -106,28 +86,6 @@ venue + paper type (short/full/position/benchmark). Ask for the structured outpu
|
|
|
106
86
|
- **Strongest reframing** if the contribution is undersold or misframed.
|
|
107
87
|
- **What to cut** (for length / TMI) and **what to add** (for soundness).
|
|
108
88
|
|
|
109
|
-
## Record the verdict
|
|
110
|
-
|
|
111
|
-
🔴 LAST step, once the deliverable exists:
|
|
112
|
-
|
|
113
|
-
\`\`\`
|
|
114
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record paper-adversarial-review <paper-dir> FINDING <count> <report-path>
|
|
115
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record paper-adversarial-review <paper-dir> ABSTAINED <reason> "<one line>"
|
|
116
|
-
\`\`\`
|
|
117
|
-
|
|
118
|
-
**FINDING** — \`<count>\` is the number of ranked weaknesses, \`<report-path>\` the review with its
|
|
119
|
-
scorecard. Add \`--blocking\` when the leaning is reject, or there is a live desk-reject risk.
|
|
120
|
-
**ABSTAINED** — \`no-witness\`: the hostile read found nothing. \`blocked\`: there was no rendered
|
|
121
|
-
draft to attack.
|
|
122
|
-
|
|
123
|
-
🔴 **There is no PASS, and this skill is the reason the word was dangerous.** A hostile read that
|
|
124
|
-
found nothing either met a very good paper or was not hostile, and the old vocabulary wrote the
|
|
125
|
-
same word for both. \`no-witness\` says the true thing — this reader has no witness for the paper
|
|
126
|
-
being sound — and leaves the second possibility standing where it belongs, in view.
|
|
127
|
-
|
|
128
|
-
Record the weakness count, not the Overall 1–5. The average is exactly what this skill tells its own
|
|
129
|
-
reviewer to distrust — the lowest one or two axes are the story.
|
|
130
|
-
|
|
131
89
|
## Rules
|
|
132
90
|
- Be adversarial but *fair* and *specific* — "weak" is useless; "the 65% claim in the abstract isn't
|
|
133
91
|
supported because the pooled bill is −1%, reword to X" is useful.
|
|
@@ -200,7 +200,7 @@ format.
|
|
|
200
200
|
## 3. Venue constants belong in a card, not in code
|
|
201
201
|
|
|
202
202
|
> **Done (#79, 2.1.0), in a different shape than planned below.** The constants live in **venue
|
|
203
|
-
> presets**, JSONC files in `
|
|
203
|
+
> presets**, JSONC files in the package's `presets/`: `acm-sigconf.jsonc` is the ACM
|
|
204
204
|
> family (the `format` block — page size, columns, fonts, font sizes — plus the `tex` packages),
|
|
205
205
|
> `agenticdev.jsonc` and `aisec.jsonc` extend it and add their `kinds` (page limits) and `rules`,
|
|
206
206
|
> `realm.jsonc` stands alone. A paper picks one in `<paper>/paperlint.json`
|
|
@@ -332,7 +332,7 @@ point. Nothing to check.
|
|
|
332
332
|
| page limit | **4** | `venues/realm.md` 8 · `build-submission.sh` 8 · `PIPELINE-STATUS` "8/8" · the build prints **9** |
|
|
333
333
|
| the TeX package list | **5** | `ensure-toolchain.sh` (executable) · `SKILL.md` · `render-paper.harness.mjs` (pins it ✅) · `build-submission.sh` · `PIPELINE-STATUS` |
|
|
334
334
|
|
|
335
|
-
The canonical source is the venue preset (`
|
|
335
|
+
The canonical source is the venue preset (`presets/<name>.jsonc`, resolved through its `extends`
|
|
336
336
|
chain): its `format` block for the numbers (page size, columns, fonts, font sizes, and `kinds` for
|
|
337
337
|
page limits), its `tex` block (plus `tex-base.jsonc`) for packages — since 2026-09-24;
|
|
338
338
|
`ensure-toolchain.sh` held them until then — and its `rules` block for the checks the venue
|
|
@@ -4,7 +4,7 @@ description: The orchestrator for writing a research paper end-to-end, from idea
|
|
|
4
4
|
allowed-tools: [Read, Write, Edit, Grep, Glob, Bash, WebSearch, WebFetch, Agent, Skill]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
<!-- vigiles:sha256:
|
|
7
|
+
<!-- vigiles:sha256:c3eea3ac60e9c816 compiled from skills/paper-pipeline/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# paper-pipeline — the conductor for the whole organism
|
|
10
10
|
|
|
@@ -30,7 +30,7 @@ of that — who is filing what, and when — stays in the author's own private n
|
|
|
30
30
|
space, anonymity, OpenReview mechanics. Fetch once, not per paper. Venue-specific facts stay in
|
|
31
31
|
`submit-paper/references/venues/<venue>.md`. (No prose equivalent yet for ACM or IEEE — write one
|
|
32
32
|
when the next paper goes there. ACM's machine-checked format already exists: the
|
|
33
|
-
`paperlint:acm-sigconf` preset, `
|
|
33
|
+
`paperlint:acm-sigconf` preset, `presets/acm-sigconf.jsonc` in the package.)
|
|
34
34
|
|
|
35
35
|
## The readiness scorecard (which boxes are checked)
|
|
36
36
|
Stages run in subagents and report into chat, which evaporates — so "did everything run?" becomes
|
|
@@ -44,30 +44,6 @@ their grade/result, what's open,* and a one-line **submit-ready verdict**. Rules
|
|
|
44
44
|
- **"Is paper X ready / what's checked?"** = read this file (verdict + any `☐`/`◐`/`⚠` rows), don't
|
|
45
45
|
reconstruct from chat.
|
|
46
46
|
- Distinct from `SUBMIT-CHECKLIST.md` (venue-format compliance); both must be green before upload.
|
|
47
|
-
- 🔴 **Enforcement leg (prose-isn't-policy), and it is a script, not a paragraph.**
|
|
48
|
-
`scripts/pipeline-check.mjs` reads this file on every paper edit and reports the failures that
|
|
49
|
-
actually happened on real papers: a CONTINUOUS check whose last run predates the current text, a GATE
|
|
50
|
-
that ran without its required input, **a `Requires` cell that omits an edge the pipeline declares**
|
|
51
|
-
(the canonical set is `scripts/pipeline-edges.mjs`, with the admitting sentence per edge), a study
|
|
52
|
-
that ran with no stated claim, the `access` row not green inside the moderation window, and a verdict
|
|
53
|
-
line that is just an accept probability. Run it directly
|
|
54
|
-
with `node .claude/skills/paper-pipeline/scripts/pipeline-check.mjs <paper-dir>`; it is wired into
|
|
55
|
-
`.claude/hooks/paper-status-gates.sh` and asserted in `.claude/hooks/hooks.harness.mjs`.
|
|
56
|
-
**The grading itself stays judgment** (that is the skills' job) — only the mechanically checkable
|
|
57
|
-
parts are compiled. *Added 2026-08-03, the day three hooks in this repo were found to have been dead
|
|
58
|
-
for weeks: an advisory that is never exercised is indistinguishable from one that works.*
|
|
59
|
-
|
|
60
|
-
🔴 **As of 2026-08-26, this file is read by TWO things.** Sixteen checks over it live as
|
|
61
|
-
`@eslint/markdown` rules in `eslint-rules/pipeline-status.mjs` (run:
|
|
62
|
-
`npx eslint <paper-dir>/PIPELINE-STATUS.md`; five of them are `error`), while
|
|
63
|
-
`scripts/pipeline-check.mjs` holds six whose input lies OUTSIDE the file — git, the clock, the
|
|
64
|
-
`reviews/` directory, `process.env`. The classification of all 22 lives in the
|
|
65
|
-
author's private notes (`<papers-root>/research/2026-08-26-klassifikatsiya-pipeline-check.md`).
|
|
66
|
-
|
|
67
|
-
⚠️ The paragraph above lived for a day NOT HERE but directly in `SKILL.md` — i.e. in the
|
|
68
|
-
generated file. The very first `vigiles compile` (27.08) ate it, and it was not a human who
|
|
69
|
-
noticed but an agent whose compile had just erased someone else's edit. **An edit to `SKILL.md`
|
|
70
|
-
without `.spec.ts` is an edit with an expiration date: the next compile.**
|
|
71
47
|
|
|
72
48
|
## 🗺️ Where every check actually runs — and where it can be walked around
|
|
73
49
|
|
|
@@ -133,9 +109,7 @@ Prior art is named in the file header (`adewale/skill-eval-harness` does this to
|
|
|
133
109
|
|
|
134
110
|
🔴 **Still manual, and no mechanism has been found for it:** the **cold read** — a reader with no
|
|
135
111
|
context restating each sentence — is the only check that catches a sentence that is short, true,
|
|
136
|
-
threshold-passing and meaningless. It needs a fresh subagent, so no hook can run it.
|
|
137
|
-
mechanised is noticing that it is *overdue*: `pipeline-check.mjs` reports `stale-cold-read` when the
|
|
138
|
-
prose changed after the last one.
|
|
112
|
+
threshold-passing and meaningless. It needs a fresh subagent, so no hook can run it.
|
|
139
113
|
|
|
140
114
|
Install the git hook once per clone: `git config core.hooksPath .githooks`.
|
|
141
115
|
|
|
@@ -47,7 +47,7 @@ of that — who is filing what, and when — stays in the author's own private n
|
|
|
47
47
|
space, anonymity, OpenReview mechanics. Fetch once, not per paper. Venue-specific facts stay in
|
|
48
48
|
\`submit-paper/references/venues/<venue>.md\`. (No prose equivalent yet for ACM or IEEE — write one
|
|
49
49
|
when the next paper goes there. ACM's machine-checked format already exists: the
|
|
50
|
-
\`paperlint:acm-sigconf\` preset, \`
|
|
50
|
+
\`paperlint:acm-sigconf\` preset, \`presets/acm-sigconf.jsonc\` in the package.)
|
|
51
51
|
|
|
52
52
|
## The readiness scorecard (which boxes are checked)
|
|
53
53
|
Stages run in subagents and report into chat, which evaporates — so "did everything run?" becomes
|
|
@@ -61,30 +61,6 @@ their grade/result, what's open,* and a one-line **submit-ready verdict**. Rules
|
|
|
61
61
|
- **"Is paper X ready / what's checked?"** = read this file (verdict + any \`☐\`/\`◐\`/\`⚠\` rows), don't
|
|
62
62
|
reconstruct from chat.
|
|
63
63
|
- Distinct from \`SUBMIT-CHECKLIST.md\` (venue-format compliance); both must be green before upload.
|
|
64
|
-
- 🔴 **Enforcement leg (prose-isn't-policy), and it is a script, not a paragraph.**
|
|
65
|
-
\`scripts/pipeline-check.mjs\` reads this file on every paper edit and reports the failures that
|
|
66
|
-
actually happened on real papers: a CONTINUOUS check whose last run predates the current text, a GATE
|
|
67
|
-
that ran without its required input, **a \`Requires\` cell that omits an edge the pipeline declares**
|
|
68
|
-
(the canonical set is \`scripts/pipeline-edges.mjs\`, with the admitting sentence per edge), a study
|
|
69
|
-
that ran with no stated claim, the \`access\` row not green inside the moderation window, and a verdict
|
|
70
|
-
line that is just an accept probability. Run it directly
|
|
71
|
-
with \`node .claude/skills/paper-pipeline/scripts/pipeline-check.mjs <paper-dir>\`; it is wired into
|
|
72
|
-
\`.claude/hooks/paper-status-gates.sh\` and asserted in \`.claude/hooks/hooks.harness.mjs\`.
|
|
73
|
-
**The grading itself stays judgment** (that is the skills' job) — only the mechanically checkable
|
|
74
|
-
parts are compiled. *Added 2026-08-03, the day three hooks in this repo were found to have been dead
|
|
75
|
-
for weeks: an advisory that is never exercised is indistinguishable from one that works.*
|
|
76
|
-
|
|
77
|
-
🔴 **As of 2026-08-26, this file is read by TWO things.** Sixteen checks over it live as
|
|
78
|
-
\`@eslint/markdown\` rules in \`eslint-rules/pipeline-status.mjs\` (run:
|
|
79
|
-
\`npx eslint <paper-dir>/PIPELINE-STATUS.md\`; five of them are \`error\`), while
|
|
80
|
-
\`scripts/pipeline-check.mjs\` holds six whose input lies OUTSIDE the file — git, the clock, the
|
|
81
|
-
\`reviews/\` directory, \`process.env\`. The classification of all 22 lives in the
|
|
82
|
-
author's private notes (\`<papers-root>/research/2026-08-26-klassifikatsiya-pipeline-check.md\`).
|
|
83
|
-
|
|
84
|
-
⚠️ The paragraph above lived for a day NOT HERE but directly in \`SKILL.md\` — i.e. in the
|
|
85
|
-
generated file. The very first \`vigiles compile\` (27.08) ate it, and it was not a human who
|
|
86
|
-
noticed but an agent whose compile had just erased someone else's edit. **An edit to \`SKILL.md\`
|
|
87
|
-
without \`.spec.ts\` is an edit with an expiration date: the next compile.**
|
|
88
64
|
|
|
89
65
|
## 🗺️ Where every check actually runs — and where it can be walked around
|
|
90
66
|
|
|
@@ -150,9 +126,7 @@ Prior art is named in the file header (\`adewale/skill-eval-harness\` does this
|
|
|
150
126
|
|
|
151
127
|
🔴 **Still manual, and no mechanism has been found for it:** the **cold read** — a reader with no
|
|
152
128
|
context restating each sentence — is the only check that catches a sentence that is short, true,
|
|
153
|
-
threshold-passing and meaningless. It needs a fresh subagent, so no hook can run it.
|
|
154
|
-
mechanised is noticing that it is *overdue*: \`pipeline-check.mjs\` reports \`stale-cold-read\` when the
|
|
155
|
-
prose changed after the last one.
|
|
129
|
+
threshold-passing and meaningless. It needs a fresh subagent, so no hook can run it.
|
|
156
130
|
|
|
157
131
|
Install the git hook once per clone: \`git config core.hooksPath .githooks\`.
|
|
158
132
|
|
|
@@ -226,7 +226,7 @@
|
|
|
226
226
|
*
|
|
227
227
|
* ⚠️ 2026-08-09: A0 IS TWO TOKENS OFF THE TEXT MEASURED BELOW. The scorecard row ids were
|
|
228
228
|
* renamed from two-letter codes to words (`Hn` → `claims`) because the two-letter space had
|
|
229
|
-
* collided
|
|
229
|
+
* collided. The target's description carried one such
|
|
230
230
|
* reference, so "…mandates the Hn claim-preservation diff." became "…mandates the
|
|
231
231
|
* claims-preservation diff (row `claims`)." A0 is still read from disk and every guard still
|
|
232
232
|
* passes; the numbers below were measured on the pre-rename bytes and are left as recorded.
|