paperlint 3.2.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +2 -2
- package/dist/adapters/banal/failure.d.ts +1 -7
- package/dist/adapters/banal/failure.d.ts.map +1 -1
- package/dist/adapters/banal/failure.js +5 -7
- package/dist/adapters/banal/failure.js.map +1 -1
- package/dist/adapters/banal/index.d.ts.map +1 -1
- package/dist/adapters/banal/index.js +8 -11
- package/dist/adapters/banal/index.js.map +1 -1
- package/dist/adapters/banal/install.d.ts.map +1 -1
- package/dist/adapters/banal/install.js +4 -3
- package/dist/adapters/banal/install.js.map +1 -1
- package/dist/adapters/banal/invocation.d.ts +9 -4
- package/dist/adapters/banal/invocation.d.ts.map +1 -1
- package/dist/adapters/banal/invocation.js +13 -1
- package/dist/adapters/banal/invocation.js.map +1 -1
- package/dist/adapters/banal/locate.d.ts +12 -9
- package/dist/adapters/banal/locate.d.ts.map +1 -1
- package/dist/adapters/banal/locate.js +19 -12
- package/dist/adapters/banal/locate.js.map +1 -1
- package/dist/adapters/banal/run.d.ts +10 -1
- package/dist/adapters/banal/run.d.ts.map +1 -1
- package/dist/adapters/banal/run.js +8 -4
- package/dist/adapters/banal/run.js.map +1 -1
- package/dist/adapters/banal/settings.d.ts +1 -1
- package/dist/adapters/banal/settings.d.ts.map +1 -1
- package/dist/adapters/banal/settings.js +2 -1
- package/dist/adapters/banal/settings.js.map +1 -1
- package/dist/adapters/memory/index.d.ts.map +1 -1
- package/dist/adapters/memory/index.js +8 -2
- package/dist/adapters/memory/index.js.map +1 -1
- package/dist/adapters/node/process.io.d.ts +6 -3
- package/dist/adapters/node/process.io.d.ts.map +1 -1
- package/dist/adapters/node/process.io.js.map +1 -1
- package/dist/adapters/node/workspace.io.d.ts.map +1 -1
- package/dist/adapters/node/workspace.io.js +4 -2
- package/dist/adapters/node/workspace.io.js.map +1 -1
- package/dist/adapters/references/index.d.ts.map +1 -1
- package/dist/adapters/references/index.js +4 -2
- package/dist/adapters/references/index.js.map +1 -1
- package/dist/build-engine.d.ts +1 -1
- package/dist/build-engine.d.ts.map +1 -1
- package/dist/build-engine.js +8 -1
- package/dist/build-engine.js.map +1 -1
- package/dist/build.d.ts +2 -3
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +5 -6
- package/dist/build.js.map +1 -1
- package/dist/caller-path.d.ts +3 -0
- package/dist/caller-path.d.ts.map +1 -0
- package/dist/caller-path.js +13 -0
- package/dist/caller-path.js.map +1 -0
- package/dist/cli.d.ts +10 -17
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +62 -12
- package/dist/cli.js.map +1 -1
- package/dist/doctor.d.ts +12 -3
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +2 -1
- package/dist/doctor.js.map +1 -1
- package/dist/domain/paths.d.ts +8 -2
- package/dist/domain/paths.d.ts.map +1 -1
- package/dist/domain/paths.js +12 -1
- package/dist/domain/paths.js.map +1 -1
- package/dist/domain/ready.d.ts +24 -0
- package/dist/domain/ready.d.ts.map +1 -0
- package/dist/domain/ready.js +11 -0
- package/dist/domain/ready.js.map +1 -0
- package/dist/domain/record.d.ts +8 -0
- package/dist/domain/record.d.ts.map +1 -0
- package/dist/domain/record.js +8 -0
- package/dist/domain/record.js.map +1 -0
- package/dist/domain/sha256.d.ts.map +1 -1
- package/dist/domain/sha256.js +4 -2
- package/dist/domain/sha256.js.map +1 -1
- package/dist/engine.d.ts +23 -22
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js.map +1 -1
- package/dist/eslint-rules/bib-reachable-entry.d.ts +1 -1
- package/dist/eslint-rules/bib-reachable-entry.js.map +1 -1
- package/dist/eslint-rules/install-path-literals.d.ts +2 -2
- package/dist/eslint-rules/install-path-literals.js.map +1 -1
- package/dist/eslint-rules/paper-research-question.d.ts +1 -1
- package/dist/eslint-rules/paper-research-question.js.map +1 -1
- package/dist/eslint-rules/paper-stages.d.ts +2 -2
- package/dist/eslint-rules/paper-stages.js.map +1 -1
- package/dist/eslint-rules/paper-typography.d.ts +6 -6
- package/dist/eslint-rules/paper-typography.js.map +1 -1
- package/dist/eslint-rules/pdf-last-page-balance.d.ts +1 -1
- package/dist/eslint-rules/pdf-last-page-balance.js.map +1 -1
- package/dist/eslint-rules/review-frontmatter.d.ts +2 -2
- package/dist/eslint-rules/review-frontmatter.js.map +1 -1
- package/dist/eslint-rules/sibling-frontmatter.d.ts +1 -1
- package/dist/eslint-rules/sibling-frontmatter.d.ts.map +1 -1
- package/dist/eslint-rules/temp-root-realpath.d.ts +1 -1
- package/dist/eslint-rules/temp-root-realpath.js.map +1 -1
- package/dist/eslint-rules/tex-build.d.ts +2 -2
- package/dist/eslint-rules/tex-build.js.map +1 -1
- package/dist/facts-file.d.ts.map +1 -1
- package/dist/facts-file.js +29 -26
- package/dist/facts-file.js.map +1 -1
- package/dist/hooks-settings.d.ts.map +1 -1
- package/dist/hooks-settings.js +17 -2
- package/dist/hooks-settings.js.map +1 -1
- package/dist/init.d.ts +3 -4
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +18 -8
- package/dist/init.js.map +1 -1
- package/dist/lib/paper-config.d.ts.map +1 -1
- package/dist/lib/paper-config.js +1 -5
- package/dist/lib/paper-config.js.map +1 -1
- package/dist/new-paper.d.ts.map +1 -1
- package/dist/new-paper.js +5 -1
- package/dist/new-paper.js.map +1 -1
- package/dist/paper-files.d.ts +4 -4
- package/dist/paper-files.d.ts.map +1 -1
- package/dist/paper-files.js +6 -6
- package/dist/paper-files.js.map +1 -1
- package/dist/paper-settings.js +3 -3
- package/dist/paper-settings.js.map +1 -1
- package/dist/pdf-facts.d.ts +51 -1
- package/dist/pdf-facts.d.ts.map +1 -1
- package/dist/pdf-facts.js +23 -15
- package/dist/pdf-facts.js.map +1 -1
- package/dist/pdf-geometry.d.ts.map +1 -1
- package/dist/pdf-geometry.js +2 -3
- package/dist/pdf-geometry.js.map +1 -1
- package/dist/ports/tool-installer.d.ts +2 -14
- package/dist/ports/tool-installer.d.ts.map +1 -1
- package/dist/presets.d.ts.map +1 -1
- package/dist/presets.js +16 -4
- package/dist/presets.js.map +1 -1
- package/dist/references.d.ts.map +1 -1
- package/dist/references.js +4 -4
- package/dist/references.js.map +1 -1
- package/dist/rules-config.d.ts +26 -1
- package/dist/rules-config.d.ts.map +1 -1
- package/dist/rules-config.js +9 -9
- package/dist/rules-config.js.map +1 -1
- package/dist/tex-requirements.d.ts +4 -0
- package/dist/tex-requirements.d.ts.map +1 -1
- package/dist/tex-requirements.js +14 -2
- package/dist/tex-requirements.js.map +1 -1
- package/dist/types.d.ts +5 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/venue-rules.d.ts.map +1 -1
- package/dist/venue-rules.js +20 -7
- package/dist/venue-rules.js.map +1 -1
- package/docs/configuration.md +2 -2
- package/eslint-rules/bib-reachable-entry.ts +1 -1
- package/eslint-rules/install-path-literals.ts +2 -2
- package/eslint-rules/paper-research-question.ts +1 -1
- package/eslint-rules/paper-stages.ts +2 -2
- package/eslint-rules/paper-typography.ts +2 -2
- package/eslint-rules/pdf-last-page-balance.ts +1 -1
- package/eslint-rules/review-frontmatter.ts +1 -1
- package/eslint-rules/temp-root-realpath.ts +1 -1
- package/eslint-rules/tex-build.ts +2 -2
- package/eslint.config.mjs +7 -0
- package/fixtures/install-path-literals/clean.fixture.mjs +1 -1
- package/fixtures/install-path-literals/clean.md +2 -2
- package/fixtures/install-path-literals/defect.fixture.mjs +1 -1
- package/fixtures/install-path-literals/defect.md +2 -2
- package/hooks/paper-status-gates.sh +9 -19
- package/lib/paper-config.harness.mjs +1 -1
- package/lib/paper-config.ts +1 -5
- package/lib/skill-checks.mjs +24 -381
- package/lib/skill-checks.test.mjs +63 -115
- package/lib/skill-corpus.mjs +10 -251
- package/lib/skill-corpus.test.mjs +2 -13
- package/lib/skill-trigger-cases.mjs +1 -1
- package/package.json +1 -1
- package/scripts/coverage-config.test.ts +0 -1
- package/scripts/harness-api.frozen.json +0 -1
- package/skills/analyze-sibling-paper/SKILL.md +1 -39
- package/skills/analyze-sibling-paper/SKILL.md.spec.ts +0 -38
- package/skills/argument-arc/SKILL.md +2 -36
- package/skills/argument-arc/SKILL.md.spec.ts +1 -43
- package/skills/build-benchmark/SKILL.md +1 -41
- package/skills/build-benchmark/SKILL.md.spec.ts +0 -40
- package/skills/camera-ready/SKILL.md +1 -34
- package/skills/camera-ready/SKILL.md.spec.ts +0 -33
- package/skills/cold-read-diff/SKILL.md +1 -35
- package/skills/cold-read-diff/SKILL.md.spec.ts +0 -34
- package/skills/draft-paper/SKILL.md +2 -41
- package/skills/draft-paper/SKILL.md.spec.ts +1 -50
- package/skills/extend-paper/SKILL.md +2 -33
- package/skills/extend-paper/SKILL.md.spec.ts +1 -42
- package/skills/find-venue/SKILL.md +2 -38
- package/skills/find-venue/SKILL.md.spec.ts +1 -47
- package/skills/grade-paper-writing/SKILL.md +3 -38
- package/skills/grade-paper-writing/SKILL.md.spec.ts +2 -47
- package/skills/grade-paper-writing/prose-lint.mjs +2 -3
- package/skills/grade-paper-writing/prose-lint.test.ts +1 -1
- package/skills/harden-paper/SKILL.md +1 -39
- package/skills/harden-paper/SKILL.md.spec.ts +0 -38
- package/skills/map-prior-work/SKILL.md +1 -35
- package/skills/map-prior-work/SKILL.md.spec.ts +0 -34
- package/skills/osf-artifact-upload/osf-artifact-upload.harness.ts +3 -4
- package/skills/paper-adversarial-review/SKILL.md +2 -35
- package/skills/paper-adversarial-review/SKILL.md.spec.ts +1 -43
- package/skills/paper-pipeline/SKILL.md +2 -28
- package/skills/paper-pipeline/SKILL.md.spec.ts +1 -27
- package/skills/paper-pipeline/grade-paper-writing-ablation.eval.mjs +1 -1
- package/skills/paper-pipeline/paper-pipeline.harness.mjs +25 -40
- package/skills/paper-pipeline/references/acceptance-gate.md +1 -6
- package/skills/paper-pipeline/references/pipeline-status-template.md +8 -35
- package/skills/paper-pipeline/scripts/README.md +30 -225
- package/skills/paper-pipeline/scripts/artifact-coverage.harness.mjs +4 -8
- package/skills/paper-pipeline/scripts/consumer.harness.mjs +6 -104
- package/skills/paper-pipeline/scripts/consumer.mjs +23 -104
- package/skills/paper-pipeline/scripts/generated-code.harness.mjs +2 -3
- package/skills/paper-pipeline/scripts/population-map.harness.mjs +3 -3
- package/skills/paper-status/SKILL.md +2 -42
- package/skills/paper-status/SKILL.md.spec.ts +1 -41
- package/skills/pc-panel-review/SKILL.md +2 -46
- package/skills/pc-panel-review/SKILL.md.spec.ts +1 -45
- package/skills/plan-paper-timeline/SKILL.md +2 -36
- package/skills/plan-paper-timeline/SKILL.md.spec.ts +0 -36
- package/skills/render-paper/SKILL.md +1 -37
- package/skills/render-paper/SKILL.md.spec.ts +0 -36
- package/skills/research-ideate/SKILL.md +2 -39
- package/skills/research-ideate/SKILL.md.spec.ts +1 -47
- package/skills/study-accepted-papers/SKILL.md +1 -34
- package/skills/study-accepted-papers/SKILL.md.spec.ts +0 -33
- package/skills/submit-paper/SKILL.md +1 -33
- package/skills/submit-paper/SKILL.md.spec.ts +0 -32
- package/skills/sweep-design-space/SKILL.md +1 -38
- package/skills/sweep-design-space/SKILL.md.spec.ts +0 -37
- package/skills/tighten-paper/SKILL.md +2 -39
- package/skills/tighten-paper/SKILL.md.spec.ts +1 -47
- package/skills/tighten-paper/structure.mjs +4 -11
- package/skills/verify-citations/SKILL.md +2 -38
- package/skills/verify-citations/SKILL.md.spec.ts +1 -37
- package/src/adapters/banal/failure.ts +9 -10
- package/src/adapters/banal/index.test.ts +2 -2
- package/src/adapters/banal/index.ts +8 -10
- package/src/adapters/banal/install.ts +9 -4
- package/src/adapters/banal/invocation.test.ts +20 -8
- package/src/adapters/banal/invocation.ts +23 -8
- package/src/adapters/banal/locate.test.ts +2 -2
- package/src/adapters/banal/locate.ts +27 -21
- package/src/adapters/banal/run.test.ts +2 -2
- package/src/adapters/banal/run.ts +16 -10
- package/src/adapters/banal/settings.ts +2 -2
- package/src/adapters/curl/download.test.ts +4 -4
- package/src/adapters/memory/index.ts +4 -3
- package/src/adapters/node/files.test.ts +5 -3
- package/src/adapters/node/process.io.ts +9 -2
- package/src/adapters/node/process.test.ts +4 -4
- package/src/adapters/node/workspace.io.ts +9 -4
- package/src/adapters/references/index.ts +7 -2
- package/src/build-engine.test.ts +11 -6
- package/src/build-engine.ts +10 -5
- package/src/build.test.ts +10 -11
- package/src/build.ts +8 -9
- package/src/caller-path.ts +13 -0
- package/src/cli.harness.mjs +0 -2
- package/src/cli.test.ts +19 -8
- package/src/cli.ts +82 -25
- package/src/doctor.test.ts +1 -1
- package/src/doctor.ts +14 -5
- package/src/domain/paths.test.ts +15 -0
- package/src/domain/paths.ts +20 -1
- package/src/domain/ready.ts +31 -0
- package/src/domain/record.test.ts +20 -0
- package/src/domain/record.ts +12 -0
- package/src/domain/sha256.ts +5 -3
- package/src/engine.ts +30 -2
- package/src/facts-file.ts +43 -28
- package/src/hooks-settings.harness.ts +17 -0
- package/src/hooks-settings.ts +28 -4
- package/src/init.test.ts +25 -5
- package/src/init.ts +26 -12
- package/src/new-paper.harness.mjs +7 -23
- package/src/new-paper.ts +7 -3
- package/src/paper-files.test.ts +22 -19
- package/src/paper-files.ts +16 -27
- package/src/paper-settings.test.ts +2 -2
- package/src/paper-settings.ts +5 -5
- package/src/pdf-facts.test.ts +16 -5
- package/src/pdf-facts.ts +79 -22
- package/src/pdf-geometry.ts +5 -3
- package/src/ports/tool-installer.ts +2 -17
- package/src/presets.ts +28 -14
- package/src/references.test.ts +25 -19
- package/src/references.ts +4 -5
- package/src/rules-config.ts +40 -11
- package/src/tex-requirements.test.ts +21 -0
- package/src/tex-requirements.ts +29 -6
- package/src/toolchain.test.ts +9 -5
- package/src/toolchain.ts +2 -2
- package/src/types.ts +5 -3
- package/src/venue-rules.test.ts +8 -4
- package/src/venue-rules.ts +21 -11
- package/skills/paper-pipeline/scripts/announce.mjs +0 -67
- package/skills/paper-pipeline/scripts/announce.test.mjs +0 -102
- package/skills/paper-pipeline/scripts/fixtures/clean/PIPELINE-STATUS.md +0 -51
- package/skills/paper-pipeline/scripts/fixtures/dirty/PIPELINE-STATUS.md +0 -52
- package/skills/paper-pipeline/scripts/fixtures/dirty/paper.md +0 -6
- package/skills/paper-pipeline/scripts/fixtures/scorecard.ts +0 -100
- package/skills/paper-pipeline/scripts/ledger.cli.test.mjs +0 -302
- package/skills/paper-pipeline/scripts/ledger.mjs +0 -623
- package/skills/paper-pipeline/scripts/ledger.test.mjs +0 -254
- package/skills/paper-pipeline/scripts/pipeline-check.cli.test.mjs +0 -474
- package/skills/paper-pipeline/scripts/pipeline-check.harness.mjs +0 -328
- package/skills/paper-pipeline/scripts/pipeline-check.mjs +0 -750
- package/skills/paper-pipeline/scripts/pipeline-edges.mjs +0 -169
- package/skills/paper-pipeline/scripts/pipeline-edges.test.mjs +0 -73
- package/skills/paper-pipeline/scripts/run-mechanical.mjs +0 -648
- package/skills/paper-pipeline/scripts/run-mechanical.test.mjs +0 -468
- package/skills/paper-pipeline/scripts/status.mjs +0 -295
- package/skills/paper-pipeline/scripts/status.test.mjs +0 -232
|
@@ -19,23 +19,10 @@ export default experimental_skill({
|
|
|
19
19
|
"mcp__Google_Calendar__search_events",
|
|
20
20
|
"mcp__Google_Calendar__create_event",
|
|
21
21
|
"mcp__Google_Calendar__update_event",
|
|
22
|
-
"Bash(node .claude/skills/paper-pipeline/scripts/announce.mjs:*)",
|
|
23
|
-
"Bash(node .claude/skills/paper-pipeline/scripts/ledger.mjs:*)",
|
|
24
22
|
],
|
|
25
23
|
body: `
|
|
26
24
|
# plan-paper-timeline — CFP dates → a buffered, filing-aware schedule
|
|
27
25
|
|
|
28
|
-
## Run me
|
|
29
|
-
|
|
30
|
-
🔴 FIRST, before any other step:
|
|
31
|
-
|
|
32
|
-
\`\`\`
|
|
33
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs plan-paper-timeline <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
26
|
A deadline is not a plan. This skill converts the four dates every CFP gives you — **submission (AoE),
|
|
40
27
|
notification, camera-ready, event** — into calendar events with the buffers that actually keep a
|
|
41
28
|
submission from slipping, and sequences *multiple* papers so the cadence reads as sustained acclaim,
|
|
@@ -75,7 +62,6 @@ institutional email has no expedite route** — no support queue jump, no "I'm o
|
|
|
75
62
|
That is why \`access\` is scheduled in the first week rather than the last: it is the one item where the
|
|
76
63
|
only remedy for being late is having started earlier.
|
|
77
64
|
|
|
78
|
-
\`pipeline-check.mjs\` reports an \`access\` row still \`☐\` inside the moderation window as a finding, and
|
|
79
65
|
\`submit-paper\` is hard-blocked on \`access\` being green.
|
|
80
66
|
|
|
81
67
|
## 1. Build the timeline backwards from the AoE deadline
|
|
@@ -159,28 +145,6 @@ When scheduling paper N against papers already on the calendar and a known/likel
|
|
|
159
145
|
second, stronger publication lands in a later month on purpose.
|
|
160
146
|
- Prefer a paper with an earlier, safely-past deadline over one that would pile onto the filing month.
|
|
161
147
|
|
|
162
|
-
## 5. Record the verdict
|
|
163
|
-
|
|
164
|
-
🔴 LAST step, once the deliverable exists:
|
|
165
|
-
|
|
166
|
-
\`\`\`
|
|
167
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record plan-paper-timeline <paper-dir> FINDING <count> <report-path>
|
|
168
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record plan-paper-timeline <paper-dir> ABSTAINED <reason> "<one line>"
|
|
169
|
-
\`\`\`
|
|
170
|
-
|
|
171
|
-
**FINDING** — \`<count>\` slots have no buffer, or collide with another paper's pre-filing window;
|
|
172
|
-
\`<report-path>\` is the plan. Add \`--blocking\` when the deadline cannot be met from here.
|
|
173
|
-
**ABSTAINED** — \`no-witness\`: the backwards plan is on the calendar, \`access\` is green and no slot
|
|
174
|
-
is tight. \`input-missing\`: \`find-venue\` has produced no dated deadline to plan against.
|
|
175
|
-
|
|
176
|
-
This is the one skill whose blocking finding is a fact about the calendar rather than about the
|
|
177
|
-
paper: portal moderation runs up to two weeks and an author with no institutional email has no
|
|
178
|
-
expedite route, so one recorded today is still true tomorrow no matter how good the science gets.
|
|
179
|
-
|
|
180
|
-
🔴 **There is no PASS**, so "the plan is on the calendar" is not storable here. Put the event ids in
|
|
181
|
-
the \`ABSTAINED\` note — markdown is the source of truth and the calendar is its projection, and a row
|
|
182
|
-
with neither is a claim about a calendar nobody opened.
|
|
183
|
-
|
|
184
148
|
## Scorecard rows this skill owns
|
|
185
149
|
Two, and they fail differently — see \`paper-pipeline/references/pipeline-status-template.md\`:
|
|
186
150
|
- **\`access\`** — *can you physically submit?* (§0). Account · profile ACTIVE since \`<ISO>\` · portal
|
|
@@ -4,21 +4,10 @@ description: Compile a LaTeX paper (ACM/IEEE/arXiv) to PDF and render its pages
|
|
|
4
4
|
allowed-tools: [Read, Write, Edit, Grep, Glob, Bash, SendUserFile]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
<!-- vigiles:sha256:
|
|
7
|
+
<!-- vigiles:sha256:a1ec1d392f144c80 compiled from skills/render-paper/SKILL.md.spec.ts -->
|
|
8
8
|
|
|
9
9
|
# render-paper — .tex → PDF → readable page PNGs
|
|
10
10
|
|
|
11
|
-
## Run me
|
|
12
|
-
|
|
13
|
-
🔴 FIRST, before any other step:
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs render-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
|
Turns a LaTeX source into (a) a compiled PDF and (b) per-page PNG images crisp enough to read
|
|
23
12
|
the font on a phone. Encodes the exact toolchain and the failures already debugged, so it works
|
|
24
13
|
first try.
|
|
@@ -130,30 +119,5 @@ python3 -c "import fitz; d=fitz.open('paper.pdf'); \
|
|
|
130
119
|
- Send the PNGs with `SendUserFile` (`display: render`) so the user can read on phone; caption what
|
|
131
120
|
changed since the last render. Send the PDF too (`display: attach`) if they want the file.
|
|
132
121
|
|
|
133
|
-
## Record the verdict
|
|
134
|
-
|
|
135
|
-
🔴 LAST step, once the deliverable exists:
|
|
136
|
-
|
|
137
|
-
```
|
|
138
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record render-paper <paper-dir> FINDING <count> <report-path>
|
|
139
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record render-paper <paper-dir> ABSTAINED <reason> "<one line>"
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
🔴 **There is no PASS**, not even here, where the temptation is strongest — an exit code of 0 from
|
|
143
|
-
`check-render.sh` means the parser found no defect in the log, which is not the same as the page
|
|
144
|
-
being right, and the delivered-PDF check exists because that difference once put `7 x 10^13` on
|
|
145
|
-
page one.
|
|
146
|
-
|
|
147
|
-
**FINDING** — `check-render.sh` exited non-zero; `<count>` is Overfull boxes plus undefined
|
|
148
|
-
refs/citations and `<report-path>` is the log. Always `--blocking`: every one of these is a fact
|
|
149
|
-
about the artifact, never a matter of taste.
|
|
150
|
-
**ABSTAINED** — `no-witness`: it compiled and the log parser found nothing. `input-missing`: there
|
|
151
|
-
is no `.tex` to compile. `crashed`: no LaTeX toolchain on this machine, which must never be read
|
|
152
|
-
as a clean render.
|
|
153
|
-
|
|
154
|
-
It runs twenty times a day, so the ledger fills with rows, and that is fine: each row pins a page count
|
|
155
|
-
to a specific set of paper bytes, which is exactly what the `tighten-paper` structure gate is blocked
|
|
156
|
-
on and what a remembered page count keeps getting wrong.
|
|
157
|
-
|
|
158
122
|
## Compose with
|
|
159
123
|
- `paper-adversarial-review` / `pc-panel-review` (incl. its venue-fit mode) — review the rendered draft.
|
|
@@ -14,17 +14,6 @@ export default experimental_skill({
|
|
|
14
14
|
body: `
|
|
15
15
|
# render-paper — .tex → PDF → readable page PNGs
|
|
16
16
|
|
|
17
|
-
## Run me
|
|
18
|
-
|
|
19
|
-
🔴 FIRST, before any other step:
|
|
20
|
-
|
|
21
|
-
\`\`\`
|
|
22
|
-
node .claude/skills/paper-pipeline/scripts/announce.mjs render-paper <paper-dir>
|
|
23
|
-
\`\`\`
|
|
24
|
-
|
|
25
|
-
An advisory pass cannot be observed failing — silence is both its error state and its normal
|
|
26
|
-
state — so starting is an event, and events get written down.
|
|
27
|
-
|
|
28
17
|
Turns a LaTeX source into (a) a compiled PDF and (b) per-page PNG images crisp enough to read
|
|
29
18
|
the font on a phone. Encodes the exact toolchain and the failures already debugged, so it works
|
|
30
19
|
first try.
|
|
@@ -136,31 +125,6 @@ python3 -c "import fitz; d=fitz.open('paper.pdf'); \\
|
|
|
136
125
|
- Send the PNGs with \`SendUserFile\` (\`display: render\`) so the user can read on phone; caption what
|
|
137
126
|
changed since the last render. Send the PDF too (\`display: attach\`) if they want the file.
|
|
138
127
|
|
|
139
|
-
## Record the verdict
|
|
140
|
-
|
|
141
|
-
🔴 LAST step, once the deliverable exists:
|
|
142
|
-
|
|
143
|
-
\`\`\`
|
|
144
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record render-paper <paper-dir> FINDING <count> <report-path>
|
|
145
|
-
node .claude/skills/paper-pipeline/scripts/ledger.mjs record render-paper <paper-dir> ABSTAINED <reason> "<one line>"
|
|
146
|
-
\`\`\`
|
|
147
|
-
|
|
148
|
-
🔴 **There is no PASS**, not even here, where the temptation is strongest — an exit code of 0 from
|
|
149
|
-
\`check-render.sh\` means the parser found no defect in the log, which is not the same as the page
|
|
150
|
-
being right, and the delivered-PDF check exists because that difference once put \`7 x 10^13\` on
|
|
151
|
-
page one.
|
|
152
|
-
|
|
153
|
-
**FINDING** — \`check-render.sh\` exited non-zero; \`<count>\` is Overfull boxes plus undefined
|
|
154
|
-
refs/citations and \`<report-path>\` is the log. Always \`--blocking\`: every one of these is a fact
|
|
155
|
-
about the artifact, never a matter of taste.
|
|
156
|
-
**ABSTAINED** — \`no-witness\`: it compiled and the log parser found nothing. \`input-missing\`: there
|
|
157
|
-
is no \`.tex\` to compile. \`crashed\`: no LaTeX toolchain on this machine, which must never be read
|
|
158
|
-
as a clean render.
|
|
159
|
-
|
|
160
|
-
It runs twenty times a day, so the ledger fills with rows, and that is fine: each row pins a page count
|
|
161
|
-
to a specific set of paper bytes, which is exactly what the \`tighten-paper\` structure gate is blocked
|
|
162
|
-
on and what a remembered page count keeps getting wrong.
|
|
163
|
-
|
|
164
128
|
## Compose with
|
|
165
129
|
- \`paper-adversarial-review\` / \`pc-panel-review\` (incl. its venue-fit mode) — review the rendered draft.`,
|
|
166
130
|
});
|
|
@@ -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,
|