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
|
@@ -1,28 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: research-ideate
|
|
3
3
|
description: "Decide whether a research idea is worth doing at all โ before any work goes into it. Use when someone has an idea and asks: is this worth pursuing, should we take it on, is it a paper or just a blog post, is there a quick minimal result that doesn't need a dramatic finding, will it pull us away from our main line of work. Returns a go / no-go verdict with the sharpest framing, the minimal finding and the kinds of venue that would take it. Judges the idea by what counts in a body of work: a peer-reviewed indexed publication, a reusable method or benchmark rather than a one-off \"tool X is bad\", onward citations rather than GitHub stars, and one connected line rather than scattered topics. Stage: conception, before find-venue and before any draft; hands off to find-venue, build-benchmark, draft-paper."
|
|
4
|
-
allowed-tools: [Read, Write, Grep, Glob, Agent, Skill
|
|
4
|
+
allowed-tools: [Read, Write, Grep, Glob, Agent, Skill]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
<!-- vigiles:sha256:
|
|
7
|
+
<!-- vigiles:sha256:03a0131d306d7ab0 compiled from skills/research-ideate/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# research-ideate โ is this idea worth a paper, and does the paper earn authorship credit?
|
|
10
10
|
|
|
11
|
-
## Run me
|
|
12
|
-
|
|
13
|
-
๐ด FIRST, before any other step:
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs research-ideate <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
|
Runs BEFORE any effort is spent. An idea can be interesting and still be a bad *publication*
|
|
27
12
|
investment โ the wrong framing produces something un-publishable or un-citable, which counts for
|
|
28
13
|
nothing toward a body of work. This skill kills those ideas early and reshapes the survivors into the framing
|
|
@@ -87,28 +72,6 @@ Emit a compact verdict:
|
|
|
87
72
|
e.g. "security-of-AI-coding workshop @ a top-tier security conference," "SE-measurement workshop @
|
|
88
73
|
ASE/FSE," "eval/benchmark track." Hand these to `find-venue`.
|
|
89
74
|
|
|
90
|
-
## Record the verdict
|
|
91
|
-
|
|
92
|
-
๐ด LAST step, once the deliverable exists:
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record research-ideate <dir> FINDING <count> <report-path>
|
|
96
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record research-ideate <dir> ABSTAINED <reason> "<one line>"
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
๐ด **There is no PASS**, so there is no way to write down "go" as a value. A clean go is the
|
|
100
|
-
absence of findings across the axes, and whoever wants to call it a go says so themselves.
|
|
101
|
-
|
|
102
|
-
**FINDING** โ go with reshaping, where `<count>` is the number of axes that need it and
|
|
103
|
-
`<report-path>` is the output. Add `--blocking` for a no-go: axis (a) is a hard stop, not a weight,
|
|
104
|
-
and a no-go is the loudest finding this skill produces.
|
|
105
|
-
**ABSTAINED** โ `no-witness`: all axes were scored and none needed reshaping. `blocked`: the idea
|
|
106
|
-
was too vague to score, which is a different thing from a no-go and must not be recorded as one.
|
|
107
|
-
|
|
108
|
-
A recorded no-go is the cheapest artifact in this whole pipeline, and the one most often lost: an idea
|
|
109
|
-
killed in conversation comes back three months later wearing a different name, and nothing in the repo
|
|
110
|
-
remembers that it was already judged.
|
|
111
|
-
|
|
112
75
|
## Rules
|
|
113
76
|
- Axis (a) is a gate, not a weight โ no indexed peer review, no idea. Everything else reshapes.
|
|
114
77
|
- Never justify an idea by GitHub stars, demo virality, or "it'd be a great blog post." Those don't
|
|
@@ -10,34 +10,10 @@ export default experimental_skill({
|
|
|
10
10
|
name: "research-ideate",
|
|
11
11
|
description:
|
|
12
12
|
'Decide whether a research idea is worth doing at all โ before any work goes into it. Use when someone has an idea and asks: is this worth pursuing, should we take it on, is it a paper or just a blog post, is there a quick minimal result that doesn\'t need a dramatic finding, will it pull us away from our main line of work. Returns a go / no-go verdict with the sharpest framing, the minimal finding and the kinds of venue that would take it. Judges the idea by what counts in a body of work: a peer-reviewed indexed publication, a reusable method or benchmark rather than a one-off "tool X is bad", onward citations rather than GitHub stars, and one connected line rather than scattered topics. Stage: conception, before find-venue and before any draft; hands off to find-venue, build-benchmark, draft-paper.',
|
|
13
|
-
tools: [
|
|
14
|
-
"Read",
|
|
15
|
-
"Write",
|
|
16
|
-
"Grep",
|
|
17
|
-
"Glob",
|
|
18
|
-
"Agent",
|
|
19
|
-
"Skill",
|
|
20
|
-
"Bash(node .claude/skills/paper-pipeline/scripts/announce.mjs:*)",
|
|
21
|
-
"Bash(node .claude/skills/paper-pipeline/scripts/ledger.mjs:*)",
|
|
22
|
-
],
|
|
13
|
+
tools: ["Read", "Write", "Grep", "Glob", "Agent", "Skill"],
|
|
23
14
|
body: `
|
|
24
15
|
# research-ideate โ is this idea worth a paper, and does the paper earn authorship credit?
|
|
25
16
|
|
|
26
|
-
## Run me
|
|
27
|
-
|
|
28
|
-
๐ด FIRST, before any other step:
|
|
29
|
-
|
|
30
|
-
\`\`\`
|
|
31
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs research-ideate <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
|
-
The \`<dir>\` argument is **optional in spirit**: this skill can run before a paper directory exists, so
|
|
38
|
-
pass whichever directory the work lives in, or \`.\`. The ledger row is written either way, and a plain
|
|
39
|
-
dot is more honest than an invented path.
|
|
40
|
-
|
|
41
17
|
Runs BEFORE any effort is spent. An idea can be interesting and still be a bad *publication*
|
|
42
18
|
investment โ the wrong framing produces something un-publishable or un-citable, which counts for
|
|
43
19
|
nothing toward a body of work. This skill kills those ideas early and reshapes the survivors into the framing
|
|
@@ -102,28 +78,6 @@ Emit a compact verdict:
|
|
|
102
78
|
e.g. "security-of-AI-coding workshop @ a top-tier security conference," "SE-measurement workshop @
|
|
103
79
|
ASE/FSE," "eval/benchmark track." Hand these to \`find-venue\`.
|
|
104
80
|
|
|
105
|
-
## Record the verdict
|
|
106
|
-
|
|
107
|
-
๐ด LAST step, once the deliverable exists:
|
|
108
|
-
|
|
109
|
-
\`\`\`
|
|
110
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record research-ideate <dir> FINDING <count> <report-path>
|
|
111
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record research-ideate <dir> ABSTAINED <reason> "<one line>"
|
|
112
|
-
\`\`\`
|
|
113
|
-
|
|
114
|
-
๐ด **There is no PASS**, so there is no way to write down "go" as a value. A clean go is the
|
|
115
|
-
absence of findings across the axes, and whoever wants to call it a go says so themselves.
|
|
116
|
-
|
|
117
|
-
**FINDING** โ go with reshaping, where \`<count>\` is the number of axes that need it and
|
|
118
|
-
\`<report-path>\` is the output. Add \`--blocking\` for a no-go: axis (a) is a hard stop, not a weight,
|
|
119
|
-
and a no-go is the loudest finding this skill produces.
|
|
120
|
-
**ABSTAINED** โ \`no-witness\`: all axes were scored and none needed reshaping. \`blocked\`: the idea
|
|
121
|
-
was too vague to score, which is a different thing from a no-go and must not be recorded as one.
|
|
122
|
-
|
|
123
|
-
A recorded no-go is the cheapest artifact in this whole pipeline, and the one most often lost: an idea
|
|
124
|
-
killed in conversation comes back three months later wearing a different name, and nothing in the repo
|
|
125
|
-
remembers that it was already judged.
|
|
126
|
-
|
|
127
81
|
## Rules
|
|
128
82
|
- Axis (a) is a gate, not a weight โ no indexed peer review, no idea. Everything else reshapes.
|
|
129
83
|
- Never justify an idea by GitHub stars, demo virality, or "it'd be a great blog post." Those don't
|
|
@@ -5,21 +5,10 @@ context: fork
|
|
|
5
5
|
allowed-tools: [Read, Write, Edit, Grep, Glob, Bash, WebSearch, WebFetch, Agent]
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
<!-- vigiles:sha256:
|
|
8
|
+
<!-- vigiles:sha256:e199b342e4e98338 compiled from skills/study-accepted-papers/SKILL.md.spec.ts -->
|
|
9
9
|
|
|
10
10
|
# study-accepted-papers โ learn the venue's bar from its own accepted corpus, then lever your draft up
|
|
11
11
|
|
|
12
|
-
## Run me
|
|
13
|
-
|
|
14
|
-
๐ด FIRST, before any other step:
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs study-accepted-papers <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
|
Reviewers don't score in a vacuum โ they score against the papers that got in last cycle. This skill
|
|
24
13
|
makes that reference standard explicit: pull the venue's **actually-accepted** papers of your type,
|
|
25
14
|
extract the concrete properties that separated the strong ones from the weak-accepts, and diff your
|
|
@@ -157,28 +146,6 @@ being violated, and the **things previously believed that the corpus disproved**
|
|
|
157
146
|
valuable lines in the file, because without them the pipeline re-derives the wrong belief). Keep it
|
|
158
147
|
short enough that it survives being loaded into every session.
|
|
159
148
|
|
|
160
|
-
## Record the verdict
|
|
161
|
-
|
|
162
|
-
๐ด LAST step, once the deliverable exists:
|
|
163
|
-
|
|
164
|
-
```
|
|
165
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record study-accepted-papers <paper-dir> FINDING <count> <report-path>
|
|
166
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record study-accepted-papers <paper-dir> ABSTAINED <reason> "<one line>"
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
**FINDING** โ `<count>` is the number of levers, `<report-path>` the ranked CHEAP/EXPENSIVE list.
|
|
170
|
-
Add `--blocking` when the draft is missing something the track *requires* (an artifact link, a named
|
|
171
|
-
benchmark, a metric definition): a desk-reject, never a weak accept, and worth the loudest thing
|
|
172
|
-
this skill can say.
|
|
173
|
-
**ABSTAINED** โ `no-witness`: the corpus was read and no lever came out of it. `input-missing`: the
|
|
174
|
-
venue publishes no accepted papers to mine.
|
|
175
|
-
|
|
176
|
-
๐ด **There is no PASS**, and the reason is visible here. "The draft already sits at the venue's bar"
|
|
177
|
-
is only meaningful next to the corpus it was measured against โ *33 of 34 accepted papers*, not
|
|
178
|
-
*most of them* โ and a stored acquittal carried that denominator nowhere. Put the corpus size in the
|
|
179
|
-
`ABSTAINED` note and in the report; without it the row is an impression with a machine-readable
|
|
180
|
-
label on it.
|
|
181
|
-
|
|
182
149
|
## Rules
|
|
183
150
|
- **Fetch real accepted papers.** Never fabricate a title, author, or "what made it strong". Unverifiable โ drop or mark VERIFY.
|
|
184
151
|
- **A lever-proposed citation is not written into the `.tex`/bib until `verify-citations` confirms it** (real
|
|
@@ -25,17 +25,6 @@ export default experimental_skill({
|
|
|
25
25
|
body: `
|
|
26
26
|
# study-accepted-papers โ learn the venue's bar from its own accepted corpus, then lever your draft up
|
|
27
27
|
|
|
28
|
-
## Run me
|
|
29
|
-
|
|
30
|
-
๐ด FIRST, before any other step:
|
|
31
|
-
|
|
32
|
-
\`\`\`
|
|
33
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs study-accepted-papers <paper-dir>
|
|
34
|
-
\`\`\`
|
|
35
|
-
|
|
36
|
-
An advisory pass cannot be observed failing โ silence is both its error state and its normal
|
|
37
|
-
state โ so starting is an event, and events get written down.
|
|
38
|
-
|
|
39
28
|
Reviewers don't score in a vacuum โ they score against the papers that got in last cycle. This skill
|
|
40
29
|
makes that reference standard explicit: pull the venue's **actually-accepted** papers of your type,
|
|
41
30
|
extract the concrete properties that separated the strong ones from the weak-accepts, and diff your
|
|
@@ -173,28 +162,6 @@ being violated, and the **things previously believed that the corpus disproved**
|
|
|
173
162
|
valuable lines in the file, because without them the pipeline re-derives the wrong belief). Keep it
|
|
174
163
|
short enough that it survives being loaded into every session.
|
|
175
164
|
|
|
176
|
-
## Record the verdict
|
|
177
|
-
|
|
178
|
-
๐ด LAST step, once the deliverable exists:
|
|
179
|
-
|
|
180
|
-
\`\`\`
|
|
181
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record study-accepted-papers <paper-dir> FINDING <count> <report-path>
|
|
182
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record study-accepted-papers <paper-dir> ABSTAINED <reason> "<one line>"
|
|
183
|
-
\`\`\`
|
|
184
|
-
|
|
185
|
-
**FINDING** โ \`<count>\` is the number of levers, \`<report-path>\` the ranked CHEAP/EXPENSIVE list.
|
|
186
|
-
Add \`--blocking\` when the draft is missing something the track *requires* (an artifact link, a named
|
|
187
|
-
benchmark, a metric definition): a desk-reject, never a weak accept, and worth the loudest thing
|
|
188
|
-
this skill can say.
|
|
189
|
-
**ABSTAINED** โ \`no-witness\`: the corpus was read and no lever came out of it. \`input-missing\`: the
|
|
190
|
-
venue publishes no accepted papers to mine.
|
|
191
|
-
|
|
192
|
-
๐ด **There is no PASS**, and the reason is visible here. "The draft already sits at the venue's bar"
|
|
193
|
-
is only meaningful next to the corpus it was measured against โ *33 of 34 accepted papers*, not
|
|
194
|
-
*most of them* โ and a stored acquittal carried that denominator nowhere. Put the corpus size in the
|
|
195
|
-
\`ABSTAINED\` note and in the report; without it the row is an impression with a machine-readable
|
|
196
|
-
label on it.
|
|
197
|
-
|
|
198
165
|
## Rules
|
|
199
166
|
- **Fetch real accepted papers.** Never fabricate a title, author, or "what made it strong". Unverifiable โ drop or mark VERIFY.
|
|
200
167
|
- **A lever-proposed citation is not written into the \`.tex\`/bib until \`verify-citations\` confirms it** (real
|
|
@@ -4,21 +4,10 @@ description: End-to-end playbook for submitting a peer-reviewed paper to a doubl
|
|
|
4
4
|
allowed-tools: [Read, Write, Edit, Grep, Glob, Bash, WebSearch, WebFetch, Skill]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
<!-- vigiles:sha256:
|
|
7
|
+
<!-- vigiles:sha256:9e57bcb2ba1fb055 compiled from skills/submit-paper/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# submit-paper โ get a reviewed paper from "done" to "ready for review"
|
|
10
10
|
|
|
11
|
-
## Run me
|
|
12
|
-
|
|
13
|
-
๐ด FIRST, before any other step:
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs submit-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
|
Assumes the paper is already hardened (run `pc-panel-review` โ incl. its venue-fit mode โ +
|
|
23
12
|
`paper-adversarial-review` first). This skill is the submission mechanics โ the part that bit us with
|
|
24
13
|
avoidable friction the first time. Distilled from the AgenticDev 2026 submission.
|
|
@@ -155,27 +144,6 @@ the file inside was the wrong build (340 952 B vs the real 352 357 B). It surfac
|
|
|
155
144
|
cited `L. 166` and there was nothing to resolve the line against. A folder without a checker is a
|
|
156
145
|
convention with no reader.
|
|
157
146
|
|
|
158
|
-
## 8. Record the verdict
|
|
159
|
-
|
|
160
|
-
๐ด LAST step, once the deliverable exists:
|
|
161
|
-
|
|
162
|
-
```
|
|
163
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record submit-paper <paper-dir> FINDING <count> <report-path>
|
|
164
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record submit-paper <paper-dir> ABSTAINED <reason> "<one line>"
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
**FINDING** โ `check-deanon.sh` exited non-zero, `access` is not green, the PDF is over the limit, or
|
|
168
|
-
the ready-for-review click never happened; `<count>` is the number of blocking items and
|
|
169
|
-
`<report-path>` names them. Always `--blocking` โ every item here stops the submission.
|
|
170
|
-
**ABSTAINED** โ `no-witness`: uploaded **and** marked ready for review, with the venue card or the
|
|
171
|
-
submission id in the note. `blocked`: the portal account is not through moderation yet.
|
|
172
|
-
|
|
173
|
-
๐ด **A saved draft must never be recorded as done โ and it now cannot be.** A saved-but-not-submitted
|
|
174
|
-
paper is the one failure this skill's provenance names by hand, and it was invisible to every other
|
|
175
|
-
check in the pipeline. There is no constructor for "submitted"; there is only the absence of blocking
|
|
176
|
-
items, plus a submission id in the note that a human can go and look up. The id IS the witness, and
|
|
177
|
-
recording `no-witness` without one is the same lie in a new vocabulary.
|
|
178
|
-
|
|
179
147
|
## Compose with
|
|
180
148
|
- Harden first: `pc-panel-review` (incl. its venue-fit mode), `paper-adversarial-review`, `render-paper`.
|
|
181
149
|
- Publisher mechanics (camera-ready): `references/publishers/<publisher>.md`.
|
|
@@ -24,17 +24,6 @@ export default experimental_skill({
|
|
|
24
24
|
body: `
|
|
25
25
|
# submit-paper โ get a reviewed paper from "done" to "ready for review"
|
|
26
26
|
|
|
27
|
-
## Run me
|
|
28
|
-
|
|
29
|
-
๐ด FIRST, before any other step:
|
|
30
|
-
|
|
31
|
-
\`\`\`
|
|
32
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs submit-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
27
|
Assumes the paper is already hardened (run \`pc-panel-review\` โ incl. its venue-fit mode โ +
|
|
39
28
|
\`paper-adversarial-review\` first). This skill is the submission mechanics โ the part that bit us with
|
|
40
29
|
avoidable friction the first time. Distilled from the AgenticDev 2026 submission.
|
|
@@ -171,27 +160,6 @@ the file inside was the wrong build (340 952 B vs the real 352 357 B). It surfac
|
|
|
171
160
|
cited \`L. 166\` and there was nothing to resolve the line against. A folder without a checker is a
|
|
172
161
|
convention with no reader.
|
|
173
162
|
|
|
174
|
-
## 8. Record the verdict
|
|
175
|
-
|
|
176
|
-
๐ด LAST step, once the deliverable exists:
|
|
177
|
-
|
|
178
|
-
\`\`\`
|
|
179
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record submit-paper <paper-dir> FINDING <count> <report-path>
|
|
180
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record submit-paper <paper-dir> ABSTAINED <reason> "<one line>"
|
|
181
|
-
\`\`\`
|
|
182
|
-
|
|
183
|
-
**FINDING** โ \`check-deanon.sh\` exited non-zero, \`access\` is not green, the PDF is over the limit, or
|
|
184
|
-
the ready-for-review click never happened; \`<count>\` is the number of blocking items and
|
|
185
|
-
\`<report-path>\` names them. Always \`--blocking\` โ every item here stops the submission.
|
|
186
|
-
**ABSTAINED** โ \`no-witness\`: uploaded **and** marked ready for review, with the venue card or the
|
|
187
|
-
submission id in the note. \`blocked\`: the portal account is not through moderation yet.
|
|
188
|
-
|
|
189
|
-
๐ด **A saved draft must never be recorded as done โ and it now cannot be.** A saved-but-not-submitted
|
|
190
|
-
paper is the one failure this skill's provenance names by hand, and it was invisible to every other
|
|
191
|
-
check in the pipeline. There is no constructor for "submitted"; there is only the absence of blocking
|
|
192
|
-
items, plus a submission id in the note that a human can go and look up. The id IS the witness, and
|
|
193
|
-
recording \`no-witness\` without one is the same lie in a new vocabulary.
|
|
194
|
-
|
|
195
163
|
## Compose with
|
|
196
164
|
- Harden first: \`pc-panel-review\` (incl. its venue-fit mode), \`paper-adversarial-review\`, \`render-paper\`.
|
|
197
165
|
- Publisher mechanics (camera-ready): \`references/publishers/<publisher>.md\`.
|
|
@@ -5,25 +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:46cb38ac1731883d compiled from skills/sweep-design-space/SKILL.md.spec.ts -->
|
|
9
9
|
|
|
10
10
|
# sweep-design-space โ stop circling, sweep
|
|
11
11
|
|
|
12
|
-
## Run me
|
|
13
|
-
|
|
14
|
-
๐ด FIRST, before any other step:
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs sweep-design-space <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
|
-
The `<dir>` argument is **optional in spirit**: this skill can run before a paper directory exists, so
|
|
24
|
-
pass whichever directory the work lives in, or `.`. The ledger row is written either way, and a plain
|
|
25
|
-
dot is more honest than an invented path.
|
|
26
|
-
|
|
27
12
|
A model asked for "a solution" returns the three designs nearest its training prior, then variations of
|
|
28
13
|
those, then variations of the variations. The user experiences this as *"you are thinking very narrowly"* โ
|
|
29
14
|
and they are right. The fix is not to think harder in place; it is to **sweep named source domains on
|
|
@@ -214,28 +199,6 @@ assurance levels already exist; the question is whether anyone has carried them
|
|
|
214
199
|
|
|
215
200
|
---
|
|
216
201
|
|
|
217
|
-
## Record the verdict
|
|
218
|
-
|
|
219
|
-
๐ด LAST step, once the deliverable exists:
|
|
220
|
-
|
|
221
|
-
```
|
|
222
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record sweep-design-space <dir> FINDING <count> <report-path>
|
|
223
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record sweep-design-space <dir> ABSTAINED <reason> "<one line>"
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
๐ด **There is no PASS.** A sweep that turns up survivors has not certified anything; it has found
|
|
227
|
-
candidates, and candidates are findings.
|
|
228
|
-
|
|
229
|
-
**FINDING** โ the sweep produced something to act on; `<count>` is the number of survivors and
|
|
230
|
-
`<report-path>` the sweep, including the groups that yielded nothing. Add `--blocking` when the
|
|
231
|
-
whole sweep died on the filters โ that is the loudest thing this skill can say.
|
|
232
|
-
**ABSTAINED** โ `no-witness`: the sweep ran and neither found a survivor nor established that none
|
|
233
|
-
exists. `blocked`: there was no problem statement to sweep against.
|
|
234
|
-
|
|
235
|
-
The skill's own rules already say negative results count. The ledger is how that survives the session:
|
|
236
|
-
a recorded finding names the groups that were swept, so the next sweep starts from named constructs
|
|
237
|
-
instead of from memory โ which is the failure mode this skill exists to break.
|
|
238
|
-
|
|
239
202
|
## Rules
|
|
240
203
|
|
|
241
204
|
- **Name the forbidden options in the generation brief.** Without an explicit "do not return these"
|
|
@@ -24,21 +24,6 @@ export default experimental_skill({
|
|
|
24
24
|
body: `
|
|
25
25
|
# sweep-design-space โ stop circling, sweep
|
|
26
26
|
|
|
27
|
-
## Run me
|
|
28
|
-
|
|
29
|
-
๐ด FIRST, before any other step:
|
|
30
|
-
|
|
31
|
-
\`\`\`
|
|
32
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs sweep-design-space <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
27
|
A model asked for "a solution" returns the three designs nearest its training prior, then variations of
|
|
43
28
|
those, then variations of the variations. The user experiences this as *"you are thinking very narrowly"* โ
|
|
44
29
|
and they are right. The fix is not to think harder in place; it is to **sweep named source domains on
|
|
@@ -229,28 +214,6 @@ assurance levels already exist; the question is whether anyone has carried them
|
|
|
229
214
|
|
|
230
215
|
---
|
|
231
216
|
|
|
232
|
-
## Record the verdict
|
|
233
|
-
|
|
234
|
-
๐ด LAST step, once the deliverable exists:
|
|
235
|
-
|
|
236
|
-
\`\`\`
|
|
237
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record sweep-design-space <dir> FINDING <count> <report-path>
|
|
238
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record sweep-design-space <dir> ABSTAINED <reason> "<one line>"
|
|
239
|
-
\`\`\`
|
|
240
|
-
|
|
241
|
-
๐ด **There is no PASS.** A sweep that turns up survivors has not certified anything; it has found
|
|
242
|
-
candidates, and candidates are findings.
|
|
243
|
-
|
|
244
|
-
**FINDING** โ the sweep produced something to act on; \`<count>\` is the number of survivors and
|
|
245
|
-
\`<report-path>\` the sweep, including the groups that yielded nothing. Add \`--blocking\` when the
|
|
246
|
-
whole sweep died on the filters โ that is the loudest thing this skill can say.
|
|
247
|
-
**ABSTAINED** โ \`no-witness\`: the sweep ran and neither found a survivor nor established that none
|
|
248
|
-
exists. \`blocked\`: there was no problem statement to sweep against.
|
|
249
|
-
|
|
250
|
-
The skill's own rules already say negative results count. The ledger is how that survives the session:
|
|
251
|
-
a recorded finding names the groups that were swept, so the next sweep starts from named constructs
|
|
252
|
-
instead of from memory โ which is the failure mode this skill exists to break.
|
|
253
|
-
|
|
254
217
|
## Rules
|
|
255
218
|
|
|
256
219
|
- **Name the forbidden options in the generation brief.** Without an explicit "do not return these"
|
|
@@ -1,24 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tighten-paper
|
|
3
3
|
description: "Use when a paper \"feels long / bloated / overly complex / hard to read / doesn't deliver its point / the middle drags\" โ or after review rounds deposited hedge-mass. The developmental / editorial pass on a DRAFTED paper: what a real human editor thinks reading it cover to cover โ the ONE point, does every section earn its place, can it be SKIMMED, is it too long for its contribution, which sections are TMI that belong in the artifact/appendix, does the conclusion pay off the intro's promise. Produces a structural verdict + a concrete cut / fold / merge / reorder plan โ NOT sentence fixes. Its verdict is a required INPUT to pc-panel-review and a hard gate in harden-paper. NOT sentence craft or a writing grade (grade-paper-writing), NOT jargon stalls (the persona stall pass), NOT scientific defects (pc-panel-review / paper-adversarial-review). Run it BEFORE those on a bloated draft โ no point polishing sentences in a section that should be cut."
|
|
4
|
-
allowed-tools: [Read, Write, Edit, Grep, Glob, Agent
|
|
4
|
+
allowed-tools: [Read, Write, Edit, Grep, Glob, Agent]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
<!-- vigiles:sha256:
|
|
7
|
+
<!-- vigiles:sha256:fd00cde33ea4b81c compiled from skills/tighten-paper/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# tighten-paper โ the developmental edit
|
|
10
10
|
|
|
11
|
-
## Run me
|
|
12
|
-
|
|
13
|
-
๐ด FIRST, before any other step:
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs tighten-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
|
Sentence-level passes make a wall of text into readable text. They do **not** tell you the wall shouldn't be there
|
|
23
12
|
at all. This pass is the editor who reads the whole paper once and asks: *is this the right paper, at the right
|
|
24
13
|
length, delivering the right point?* Its deliverable is a **cut/fold/merge/reorder plan and a length verdict**, not
|
|
@@ -321,32 +310,6 @@ Produce:
|
|
|
321
310
|
- **The middle-sag diagnosis** and the fix (consolidate these findings, lead each with its point).
|
|
322
311
|
- **Skim-test failures** (headings/lead-sentences that don't carry the argument).
|
|
323
312
|
|
|
324
|
-
## Record the verdict
|
|
325
|
-
|
|
326
|
-
๐ด LAST step, once the deliverable exists:
|
|
327
|
-
|
|
328
|
-
```
|
|
329
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record tighten-paper <paper-dir> FINDING <count> <report-path>
|
|
330
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record tighten-paper <paper-dir> ABSTAINED <reason> "<one line>"
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
**FINDING** is the normal row โ `<count>` is the number of CUT / FOLD / MERGE / REORDER actions in
|
|
334
|
-
the plan and `<report-path>` is the plan itself. Add `--blocking` when the paper is over its limit
|
|
335
|
-
and the plan cannot get it under.
|
|
336
|
-
**ABSTAINED** โ `no-witness`: a cover-to-cover read produced no action at all, which on a real draft
|
|
337
|
-
should be rare. `blocked`: the declined pass of the section above โ content is still being added, so
|
|
338
|
-
there was nothing to read whole.
|
|
339
|
-
|
|
340
|
-
๐ด **This is the check with the documented history of never saying no**: a tightening pass once
|
|
341
|
-
returned KEEP on 80 of 81 sections and still counted as run. It is also one of the three failures
|
|
342
|
-
that deleted `PASS` โ the word made "I read it all and nothing moved" indistinguishable from "I did
|
|
343
|
-
not really read it". `status.mjs` reports a check that has never recorded a finding, on the
|
|
344
|
-
mutation-testing principle that a test which kills no mutant is not a test. So an `ABSTAINED
|
|
345
|
-
no-witness` here owes a note saying what was read and why nothing moved.
|
|
346
|
-
|
|
347
|
-
The mechanical half of this skill files separately, under `tighten-paper/structure` โ one check, one
|
|
348
|
-
row. Do not record a `structure.mjs` result here.
|
|
349
|
-
|
|
350
313
|
## Compose
|
|
351
314
|
Run this FIRST on a draft that "feels bloated" โ before grade-paper-writing / the stall pass / pc-panel, because
|
|
352
315
|
polishing sentences in a section that should be folded to the artifact is wasted work. After the plan is applied,
|
|
@@ -10,30 +10,10 @@ export default experimental_skill({
|
|
|
10
10
|
name: "tighten-paper",
|
|
11
11
|
description:
|
|
12
12
|
"Use when a paper \"feels long / bloated / overly complex / hard to read / doesn't deliver its point / the middle drags\" โ or after review rounds deposited hedge-mass. The developmental / editorial pass on a DRAFTED paper: what a real human editor thinks reading it cover to cover โ the ONE point, does every section earn its place, can it be SKIMMED, is it too long for its contribution, which sections are TMI that belong in the artifact/appendix, does the conclusion pay off the intro's promise. Produces a structural verdict + a concrete cut / fold / merge / reorder plan โ NOT sentence fixes. Its verdict is a required INPUT to pc-panel-review and a hard gate in harden-paper. NOT sentence craft or a writing grade (grade-paper-writing), NOT jargon stalls (the persona stall pass), NOT scientific defects (pc-panel-review / paper-adversarial-review). Run it BEFORE those on a bloated draft โ no point polishing sentences in a section that should be cut.",
|
|
13
|
-
tools: [
|
|
14
|
-
"Read",
|
|
15
|
-
"Write",
|
|
16
|
-
"Edit",
|
|
17
|
-
"Grep",
|
|
18
|
-
"Glob",
|
|
19
|
-
"Agent",
|
|
20
|
-
"Bash(node .claude/skills/paper-pipeline/scripts/announce.mjs:*)",
|
|
21
|
-
"Bash(node .claude/skills/paper-pipeline/scripts/ledger.mjs:*)",
|
|
22
|
-
],
|
|
13
|
+
tools: ["Read", "Write", "Edit", "Grep", "Glob", "Agent"],
|
|
23
14
|
body: `
|
|
24
15
|
# tighten-paper โ the developmental edit
|
|
25
16
|
|
|
26
|
-
## Run me
|
|
27
|
-
|
|
28
|
-
๐ด FIRST, before any other step:
|
|
29
|
-
|
|
30
|
-
\`\`\`
|
|
31
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs tighten-paper <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
17
|
Sentence-level passes make a wall of text into readable text. They do **not** tell you the wall shouldn't be there
|
|
38
18
|
at all. This pass is the editor who reads the whole paper once and asks: *is this the right paper, at the right
|
|
39
19
|
length, delivering the right point?* Its deliverable is a **cut/fold/merge/reorder plan and a length verdict**, not
|
|
@@ -336,32 +316,6 @@ Produce:
|
|
|
336
316
|
- **The middle-sag diagnosis** and the fix (consolidate these findings, lead each with its point).
|
|
337
317
|
- **Skim-test failures** (headings/lead-sentences that don't carry the argument).
|
|
338
318
|
|
|
339
|
-
## Record the verdict
|
|
340
|
-
|
|
341
|
-
๐ด LAST step, once the deliverable exists:
|
|
342
|
-
|
|
343
|
-
\`\`\`
|
|
344
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record tighten-paper <paper-dir> FINDING <count> <report-path>
|
|
345
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record tighten-paper <paper-dir> ABSTAINED <reason> "<one line>"
|
|
346
|
-
\`\`\`
|
|
347
|
-
|
|
348
|
-
**FINDING** is the normal row โ \`<count>\` is the number of CUT / FOLD / MERGE / REORDER actions in
|
|
349
|
-
the plan and \`<report-path>\` is the plan itself. Add \`--blocking\` when the paper is over its limit
|
|
350
|
-
and the plan cannot get it under.
|
|
351
|
-
**ABSTAINED** โ \`no-witness\`: a cover-to-cover read produced no action at all, which on a real draft
|
|
352
|
-
should be rare. \`blocked\`: the declined pass of the section above โ content is still being added, so
|
|
353
|
-
there was nothing to read whole.
|
|
354
|
-
|
|
355
|
-
๐ด **This is the check with the documented history of never saying no**: a tightening pass once
|
|
356
|
-
returned KEEP on 80 of 81 sections and still counted as run. It is also one of the three failures
|
|
357
|
-
that deleted \`PASS\` โ the word made "I read it all and nothing moved" indistinguishable from "I did
|
|
358
|
-
not really read it". \`status.mjs\` reports a check that has never recorded a finding, on the
|
|
359
|
-
mutation-testing principle that a test which kills no mutant is not a test. So an \`ABSTAINED
|
|
360
|
-
no-witness\` here owes a note saying what was read and why nothing moved.
|
|
361
|
-
|
|
362
|
-
The mechanical half of this skill files separately, under \`tighten-paper/structure\` โ one check, one
|
|
363
|
-
row. Do not record a \`structure.mjs\` result here.
|
|
364
|
-
|
|
365
319
|
## Compose
|
|
366
320
|
Run this FIRST on a draft that "feels bloated" โ before grade-paper-writing / the stall pass / pc-panel, because
|
|
367
321
|
polishing sentences in a section that should be folded to the artifact is wasted work. After the plan is applied,
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
*
|
|
23
23
|
* โโ 2026-08-26, EVENING: BOTH NAMED CONSUMERS ARE CLOSED, AND A THIRD ONE TURNED UP โโโโโโโโ
|
|
24
24
|
*
|
|
25
|
-
* The paragraph above named two callers and said that until they are converted,
|
|
25
|
+
* The paragraph above named two callers and said that until they are converted, they read
|
|
26
26
|
* "no findings" BY SILENCE. That was true and measured: on `the reference paper/paper.md`
|
|
27
27
|
* `--flags-only` printed 0 lines, while the same bytes through ESLint give **6 findings**
|
|
28
28
|
* (`subsection-size` ร2 ยท `section-lead` ยท `free-section-size` ร2 ยท `block-ungraded`).
|
|
@@ -31,11 +31,6 @@
|
|
|
31
31
|
* stood next to it, running the same rules over the same glob; a measurement showed a
|
|
32
32
|
* byte-identical list of files. The full justification is in the comment where the removed
|
|
33
33
|
* step used to be.
|
|
34
|
-
* `run-mechanical.mjs`, the `tighten-paper/structure` line โ CONVERTED to ESLint
|
|
35
|
-
* (`read: 'eslint'`, filtered by the rules from `eslint-rules/paper-structure.mjs`). Not
|
|
36
|
-
* deleted: ESLint writes nothing into the ledger, and the ledger is the only place where the
|
|
37
|
-
* fact "somebody looked at this paper's structure on these bytes" is stored with a hash of the
|
|
38
|
-
* input.
|
|
39
34
|
*
|
|
40
35
|
* ๐ด A THIRD CALLER THE BANNER DID NOT KNOW ABOUT: `.githooks/pre-commit`. It printed nothing and
|
|
41
36
|
* swallowed the exit code through `|| true`. The lesson is exactly the one already recorded in
|
|
@@ -294,11 +289,9 @@ const freeTotal = freeSections.reduce((a, r) => a + r.words, 0);
|
|
|
294
289
|
// edit, and there is nothing to settle the question of which one is right.
|
|
295
290
|
|
|
296
291
|
if (flagsOnly) {
|
|
297
|
-
// Silence and exit code 0 โ ALWAYS. Deliberately not one line on stdout/stderr:
|
|
298
|
-
//
|
|
299
|
-
//
|
|
300
|
-
// in the ledger. The limitation of this mode is named in the banner at the top; it is cured by
|
|
301
|
-
// converting both callers to `npx eslint`, not here.
|
|
292
|
+
// Silence and exit code 0 โ ALWAYS. Deliberately not one line on stdout/stderr: a caller that
|
|
293
|
+
// reads "non-empty output = a finding" would turn a pointer saying "the checks have moved" into a
|
|
294
|
+
// permanent false finding. The limitation of this mode is named in the banner at the top.
|
|
302
295
|
process.exit(0);
|
|
303
296
|
}
|
|
304
297
|
|