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.
Files changed (312) hide show
  1. package/CLAUDE.md +2 -2
  2. package/dist/adapters/banal/failure.d.ts +1 -7
  3. package/dist/adapters/banal/failure.d.ts.map +1 -1
  4. package/dist/adapters/banal/failure.js +5 -7
  5. package/dist/adapters/banal/failure.js.map +1 -1
  6. package/dist/adapters/banal/index.d.ts.map +1 -1
  7. package/dist/adapters/banal/index.js +8 -11
  8. package/dist/adapters/banal/index.js.map +1 -1
  9. package/dist/adapters/banal/install.d.ts.map +1 -1
  10. package/dist/adapters/banal/install.js +4 -3
  11. package/dist/adapters/banal/install.js.map +1 -1
  12. package/dist/adapters/banal/invocation.d.ts +9 -4
  13. package/dist/adapters/banal/invocation.d.ts.map +1 -1
  14. package/dist/adapters/banal/invocation.js +13 -1
  15. package/dist/adapters/banal/invocation.js.map +1 -1
  16. package/dist/adapters/banal/locate.d.ts +12 -9
  17. package/dist/adapters/banal/locate.d.ts.map +1 -1
  18. package/dist/adapters/banal/locate.js +19 -12
  19. package/dist/adapters/banal/locate.js.map +1 -1
  20. package/dist/adapters/banal/run.d.ts +10 -1
  21. package/dist/adapters/banal/run.d.ts.map +1 -1
  22. package/dist/adapters/banal/run.js +8 -4
  23. package/dist/adapters/banal/run.js.map +1 -1
  24. package/dist/adapters/banal/settings.d.ts +1 -1
  25. package/dist/adapters/banal/settings.d.ts.map +1 -1
  26. package/dist/adapters/banal/settings.js +2 -1
  27. package/dist/adapters/banal/settings.js.map +1 -1
  28. package/dist/adapters/memory/index.d.ts.map +1 -1
  29. package/dist/adapters/memory/index.js +8 -2
  30. package/dist/adapters/memory/index.js.map +1 -1
  31. package/dist/adapters/node/process.io.d.ts +6 -3
  32. package/dist/adapters/node/process.io.d.ts.map +1 -1
  33. package/dist/adapters/node/process.io.js.map +1 -1
  34. package/dist/adapters/node/workspace.io.d.ts.map +1 -1
  35. package/dist/adapters/node/workspace.io.js +4 -2
  36. package/dist/adapters/node/workspace.io.js.map +1 -1
  37. package/dist/adapters/references/index.d.ts.map +1 -1
  38. package/dist/adapters/references/index.js +4 -2
  39. package/dist/adapters/references/index.js.map +1 -1
  40. package/dist/build-engine.d.ts +1 -1
  41. package/dist/build-engine.d.ts.map +1 -1
  42. package/dist/build-engine.js +8 -1
  43. package/dist/build-engine.js.map +1 -1
  44. package/dist/build.d.ts +2 -3
  45. package/dist/build.d.ts.map +1 -1
  46. package/dist/build.js +5 -6
  47. package/dist/build.js.map +1 -1
  48. package/dist/caller-path.d.ts +3 -0
  49. package/dist/caller-path.d.ts.map +1 -0
  50. package/dist/caller-path.js +13 -0
  51. package/dist/caller-path.js.map +1 -0
  52. package/dist/cli.d.ts +10 -17
  53. package/dist/cli.d.ts.map +1 -1
  54. package/dist/cli.js +62 -12
  55. package/dist/cli.js.map +1 -1
  56. package/dist/doctor.d.ts +12 -3
  57. package/dist/doctor.d.ts.map +1 -1
  58. package/dist/doctor.js +2 -1
  59. package/dist/doctor.js.map +1 -1
  60. package/dist/domain/paths.d.ts +8 -2
  61. package/dist/domain/paths.d.ts.map +1 -1
  62. package/dist/domain/paths.js +12 -1
  63. package/dist/domain/paths.js.map +1 -1
  64. package/dist/domain/ready.d.ts +24 -0
  65. package/dist/domain/ready.d.ts.map +1 -0
  66. package/dist/domain/ready.js +11 -0
  67. package/dist/domain/ready.js.map +1 -0
  68. package/dist/domain/record.d.ts +8 -0
  69. package/dist/domain/record.d.ts.map +1 -0
  70. package/dist/domain/record.js +8 -0
  71. package/dist/domain/record.js.map +1 -0
  72. package/dist/domain/sha256.d.ts.map +1 -1
  73. package/dist/domain/sha256.js +4 -2
  74. package/dist/domain/sha256.js.map +1 -1
  75. package/dist/engine.d.ts +23 -22
  76. package/dist/engine.d.ts.map +1 -1
  77. package/dist/engine.js.map +1 -1
  78. package/dist/eslint-rules/bib-reachable-entry.d.ts +1 -1
  79. package/dist/eslint-rules/bib-reachable-entry.js.map +1 -1
  80. package/dist/eslint-rules/install-path-literals.d.ts +2 -2
  81. package/dist/eslint-rules/install-path-literals.js.map +1 -1
  82. package/dist/eslint-rules/paper-research-question.d.ts +1 -1
  83. package/dist/eslint-rules/paper-research-question.js.map +1 -1
  84. package/dist/eslint-rules/paper-stages.d.ts +2 -2
  85. package/dist/eslint-rules/paper-stages.js.map +1 -1
  86. package/dist/eslint-rules/paper-typography.d.ts +6 -6
  87. package/dist/eslint-rules/paper-typography.js.map +1 -1
  88. package/dist/eslint-rules/pdf-last-page-balance.d.ts +1 -1
  89. package/dist/eslint-rules/pdf-last-page-balance.js.map +1 -1
  90. package/dist/eslint-rules/review-frontmatter.d.ts +2 -2
  91. package/dist/eslint-rules/review-frontmatter.js.map +1 -1
  92. package/dist/eslint-rules/sibling-frontmatter.d.ts +1 -1
  93. package/dist/eslint-rules/sibling-frontmatter.d.ts.map +1 -1
  94. package/dist/eslint-rules/temp-root-realpath.d.ts +1 -1
  95. package/dist/eslint-rules/temp-root-realpath.js.map +1 -1
  96. package/dist/eslint-rules/tex-build.d.ts +2 -2
  97. package/dist/eslint-rules/tex-build.js.map +1 -1
  98. package/dist/facts-file.d.ts.map +1 -1
  99. package/dist/facts-file.js +29 -26
  100. package/dist/facts-file.js.map +1 -1
  101. package/dist/hooks-settings.d.ts.map +1 -1
  102. package/dist/hooks-settings.js +17 -2
  103. package/dist/hooks-settings.js.map +1 -1
  104. package/dist/init.d.ts +3 -4
  105. package/dist/init.d.ts.map +1 -1
  106. package/dist/init.js +18 -8
  107. package/dist/init.js.map +1 -1
  108. package/dist/lib/paper-config.d.ts.map +1 -1
  109. package/dist/lib/paper-config.js +1 -5
  110. package/dist/lib/paper-config.js.map +1 -1
  111. package/dist/new-paper.d.ts.map +1 -1
  112. package/dist/new-paper.js +5 -1
  113. package/dist/new-paper.js.map +1 -1
  114. package/dist/paper-files.d.ts +4 -4
  115. package/dist/paper-files.d.ts.map +1 -1
  116. package/dist/paper-files.js +6 -6
  117. package/dist/paper-files.js.map +1 -1
  118. package/dist/paper-settings.js +3 -3
  119. package/dist/paper-settings.js.map +1 -1
  120. package/dist/pdf-facts.d.ts +51 -1
  121. package/dist/pdf-facts.d.ts.map +1 -1
  122. package/dist/pdf-facts.js +23 -15
  123. package/dist/pdf-facts.js.map +1 -1
  124. package/dist/pdf-geometry.d.ts.map +1 -1
  125. package/dist/pdf-geometry.js +2 -3
  126. package/dist/pdf-geometry.js.map +1 -1
  127. package/dist/ports/tool-installer.d.ts +2 -14
  128. package/dist/ports/tool-installer.d.ts.map +1 -1
  129. package/dist/presets.d.ts.map +1 -1
  130. package/dist/presets.js +16 -4
  131. package/dist/presets.js.map +1 -1
  132. package/dist/references.d.ts.map +1 -1
  133. package/dist/references.js +4 -4
  134. package/dist/references.js.map +1 -1
  135. package/dist/rules-config.d.ts +26 -1
  136. package/dist/rules-config.d.ts.map +1 -1
  137. package/dist/rules-config.js +9 -9
  138. package/dist/rules-config.js.map +1 -1
  139. package/dist/tex-requirements.d.ts +4 -0
  140. package/dist/tex-requirements.d.ts.map +1 -1
  141. package/dist/tex-requirements.js +14 -2
  142. package/dist/tex-requirements.js.map +1 -1
  143. package/dist/types.d.ts +5 -3
  144. package/dist/types.d.ts.map +1 -1
  145. package/dist/venue-rules.d.ts.map +1 -1
  146. package/dist/venue-rules.js +20 -7
  147. package/dist/venue-rules.js.map +1 -1
  148. package/docs/configuration.md +2 -2
  149. package/eslint-rules/bib-reachable-entry.ts +1 -1
  150. package/eslint-rules/install-path-literals.ts +2 -2
  151. package/eslint-rules/paper-research-question.ts +1 -1
  152. package/eslint-rules/paper-stages.ts +2 -2
  153. package/eslint-rules/paper-typography.ts +2 -2
  154. package/eslint-rules/pdf-last-page-balance.ts +1 -1
  155. package/eslint-rules/review-frontmatter.ts +1 -1
  156. package/eslint-rules/temp-root-realpath.ts +1 -1
  157. package/eslint-rules/tex-build.ts +2 -2
  158. package/eslint.config.mjs +7 -0
  159. package/fixtures/install-path-literals/clean.fixture.mjs +1 -1
  160. package/fixtures/install-path-literals/clean.md +2 -2
  161. package/fixtures/install-path-literals/defect.fixture.mjs +1 -1
  162. package/fixtures/install-path-literals/defect.md +2 -2
  163. package/hooks/paper-status-gates.sh +9 -19
  164. package/lib/paper-config.harness.mjs +1 -1
  165. package/lib/paper-config.ts +1 -5
  166. package/lib/skill-checks.mjs +24 -381
  167. package/lib/skill-checks.test.mjs +63 -115
  168. package/lib/skill-corpus.mjs +10 -251
  169. package/lib/skill-corpus.test.mjs +2 -13
  170. package/lib/skill-trigger-cases.mjs +1 -1
  171. package/package.json +1 -1
  172. package/scripts/coverage-config.test.ts +0 -1
  173. package/scripts/harness-api.frozen.json +0 -1
  174. package/skills/analyze-sibling-paper/SKILL.md +1 -39
  175. package/skills/analyze-sibling-paper/SKILL.md.spec.ts +0 -38
  176. package/skills/argument-arc/SKILL.md +2 -36
  177. package/skills/argument-arc/SKILL.md.spec.ts +1 -43
  178. package/skills/build-benchmark/SKILL.md +1 -41
  179. package/skills/build-benchmark/SKILL.md.spec.ts +0 -40
  180. package/skills/camera-ready/SKILL.md +1 -34
  181. package/skills/camera-ready/SKILL.md.spec.ts +0 -33
  182. package/skills/cold-read-diff/SKILL.md +1 -35
  183. package/skills/cold-read-diff/SKILL.md.spec.ts +0 -34
  184. package/skills/draft-paper/SKILL.md +2 -41
  185. package/skills/draft-paper/SKILL.md.spec.ts +1 -50
  186. package/skills/extend-paper/SKILL.md +2 -33
  187. package/skills/extend-paper/SKILL.md.spec.ts +1 -42
  188. package/skills/find-venue/SKILL.md +2 -38
  189. package/skills/find-venue/SKILL.md.spec.ts +1 -47
  190. package/skills/grade-paper-writing/SKILL.md +3 -38
  191. package/skills/grade-paper-writing/SKILL.md.spec.ts +2 -47
  192. package/skills/grade-paper-writing/prose-lint.mjs +2 -3
  193. package/skills/grade-paper-writing/prose-lint.test.ts +1 -1
  194. package/skills/harden-paper/SKILL.md +1 -39
  195. package/skills/harden-paper/SKILL.md.spec.ts +0 -38
  196. package/skills/map-prior-work/SKILL.md +1 -35
  197. package/skills/map-prior-work/SKILL.md.spec.ts +0 -34
  198. package/skills/osf-artifact-upload/osf-artifact-upload.harness.ts +3 -4
  199. package/skills/paper-adversarial-review/SKILL.md +2 -35
  200. package/skills/paper-adversarial-review/SKILL.md.spec.ts +1 -43
  201. package/skills/paper-pipeline/SKILL.md +2 -28
  202. package/skills/paper-pipeline/SKILL.md.spec.ts +1 -27
  203. package/skills/paper-pipeline/grade-paper-writing-ablation.eval.mjs +1 -1
  204. package/skills/paper-pipeline/paper-pipeline.harness.mjs +25 -40
  205. package/skills/paper-pipeline/references/acceptance-gate.md +1 -6
  206. package/skills/paper-pipeline/references/pipeline-status-template.md +8 -35
  207. package/skills/paper-pipeline/scripts/README.md +30 -225
  208. package/skills/paper-pipeline/scripts/artifact-coverage.harness.mjs +4 -8
  209. package/skills/paper-pipeline/scripts/consumer.harness.mjs +6 -104
  210. package/skills/paper-pipeline/scripts/consumer.mjs +23 -104
  211. package/skills/paper-pipeline/scripts/generated-code.harness.mjs +2 -3
  212. package/skills/paper-pipeline/scripts/population-map.harness.mjs +3 -3
  213. package/skills/paper-status/SKILL.md +2 -42
  214. package/skills/paper-status/SKILL.md.spec.ts +1 -41
  215. package/skills/pc-panel-review/SKILL.md +2 -46
  216. package/skills/pc-panel-review/SKILL.md.spec.ts +1 -45
  217. package/skills/plan-paper-timeline/SKILL.md +2 -36
  218. package/skills/plan-paper-timeline/SKILL.md.spec.ts +0 -36
  219. package/skills/render-paper/SKILL.md +1 -37
  220. package/skills/render-paper/SKILL.md.spec.ts +0 -36
  221. package/skills/research-ideate/SKILL.md +2 -39
  222. package/skills/research-ideate/SKILL.md.spec.ts +1 -47
  223. package/skills/study-accepted-papers/SKILL.md +1 -34
  224. package/skills/study-accepted-papers/SKILL.md.spec.ts +0 -33
  225. package/skills/submit-paper/SKILL.md +1 -33
  226. package/skills/submit-paper/SKILL.md.spec.ts +0 -32
  227. package/skills/sweep-design-space/SKILL.md +1 -38
  228. package/skills/sweep-design-space/SKILL.md.spec.ts +0 -37
  229. package/skills/tighten-paper/SKILL.md +2 -39
  230. package/skills/tighten-paper/SKILL.md.spec.ts +1 -47
  231. package/skills/tighten-paper/structure.mjs +4 -11
  232. package/skills/verify-citations/SKILL.md +2 -38
  233. package/skills/verify-citations/SKILL.md.spec.ts +1 -37
  234. package/src/adapters/banal/failure.ts +9 -10
  235. package/src/adapters/banal/index.test.ts +2 -2
  236. package/src/adapters/banal/index.ts +8 -10
  237. package/src/adapters/banal/install.ts +9 -4
  238. package/src/adapters/banal/invocation.test.ts +20 -8
  239. package/src/adapters/banal/invocation.ts +23 -8
  240. package/src/adapters/banal/locate.test.ts +2 -2
  241. package/src/adapters/banal/locate.ts +27 -21
  242. package/src/adapters/banal/run.test.ts +2 -2
  243. package/src/adapters/banal/run.ts +16 -10
  244. package/src/adapters/banal/settings.ts +2 -2
  245. package/src/adapters/curl/download.test.ts +4 -4
  246. package/src/adapters/memory/index.ts +4 -3
  247. package/src/adapters/node/files.test.ts +5 -3
  248. package/src/adapters/node/process.io.ts +9 -2
  249. package/src/adapters/node/process.test.ts +4 -4
  250. package/src/adapters/node/workspace.io.ts +9 -4
  251. package/src/adapters/references/index.ts +7 -2
  252. package/src/build-engine.test.ts +11 -6
  253. package/src/build-engine.ts +10 -5
  254. package/src/build.test.ts +10 -11
  255. package/src/build.ts +8 -9
  256. package/src/caller-path.ts +13 -0
  257. package/src/cli.harness.mjs +0 -2
  258. package/src/cli.test.ts +19 -8
  259. package/src/cli.ts +82 -25
  260. package/src/doctor.test.ts +1 -1
  261. package/src/doctor.ts +14 -5
  262. package/src/domain/paths.test.ts +15 -0
  263. package/src/domain/paths.ts +20 -1
  264. package/src/domain/ready.ts +31 -0
  265. package/src/domain/record.test.ts +20 -0
  266. package/src/domain/record.ts +12 -0
  267. package/src/domain/sha256.ts +5 -3
  268. package/src/engine.ts +30 -2
  269. package/src/facts-file.ts +43 -28
  270. package/src/hooks-settings.harness.ts +17 -0
  271. package/src/hooks-settings.ts +28 -4
  272. package/src/init.test.ts +25 -5
  273. package/src/init.ts +26 -12
  274. package/src/new-paper.harness.mjs +7 -23
  275. package/src/new-paper.ts +7 -3
  276. package/src/paper-files.test.ts +22 -19
  277. package/src/paper-files.ts +16 -27
  278. package/src/paper-settings.test.ts +2 -2
  279. package/src/paper-settings.ts +5 -5
  280. package/src/pdf-facts.test.ts +16 -5
  281. package/src/pdf-facts.ts +79 -22
  282. package/src/pdf-geometry.ts +5 -3
  283. package/src/ports/tool-installer.ts +2 -17
  284. package/src/presets.ts +28 -14
  285. package/src/references.test.ts +25 -19
  286. package/src/references.ts +4 -5
  287. package/src/rules-config.ts +40 -11
  288. package/src/tex-requirements.test.ts +21 -0
  289. package/src/tex-requirements.ts +29 -6
  290. package/src/toolchain.test.ts +9 -5
  291. package/src/toolchain.ts +2 -2
  292. package/src/types.ts +5 -3
  293. package/src/venue-rules.test.ts +8 -4
  294. package/src/venue-rules.ts +21 -11
  295. package/skills/paper-pipeline/scripts/announce.mjs +0 -67
  296. package/skills/paper-pipeline/scripts/announce.test.mjs +0 -102
  297. package/skills/paper-pipeline/scripts/fixtures/clean/PIPELINE-STATUS.md +0 -51
  298. package/skills/paper-pipeline/scripts/fixtures/dirty/PIPELINE-STATUS.md +0 -52
  299. package/skills/paper-pipeline/scripts/fixtures/dirty/paper.md +0 -6
  300. package/skills/paper-pipeline/scripts/fixtures/scorecard.ts +0 -100
  301. package/skills/paper-pipeline/scripts/ledger.cli.test.mjs +0 -302
  302. package/skills/paper-pipeline/scripts/ledger.mjs +0 -623
  303. package/skills/paper-pipeline/scripts/ledger.test.mjs +0 -254
  304. package/skills/paper-pipeline/scripts/pipeline-check.cli.test.mjs +0 -474
  305. package/skills/paper-pipeline/scripts/pipeline-check.harness.mjs +0 -328
  306. package/skills/paper-pipeline/scripts/pipeline-check.mjs +0 -750
  307. package/skills/paper-pipeline/scripts/pipeline-edges.mjs +0 -169
  308. package/skills/paper-pipeline/scripts/pipeline-edges.test.mjs +0 -73
  309. package/skills/paper-pipeline/scripts/run-mechanical.mjs +0 -648
  310. package/skills/paper-pipeline/scripts/run-mechanical.test.mjs +0 -468
  311. package/skills/paper-pipeline/scripts/status.mjs +0 -295
  312. 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:0943963cae95f8f1 compiled from skills/render-paper/SKILL.md.spec.ts -->
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, Bash(node .claude/skills/paper-pipeline/scripts/announce.mjs:*), Bash(node .claude/skills/paper-pipeline/scripts/ledger.mjs:*)]
4
+ allowed-tools: [Read, Write, Grep, Glob, Agent, Skill]
5
5
  ---
6
6
 
7
- <!-- vigiles:sha256:f0ccfb74162bca40 compiled from skills/research-ideate/SKILL.md.spec.ts -->
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:177ca8805990361e compiled from skills/study-accepted-papers/SKILL.md.spec.ts -->
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:4a42424fd18098e5 compiled from skills/submit-paper/SKILL.md.spec.ts -->
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:1822c8c01e352f42 compiled from skills/sweep-design-space/SKILL.md.spec.ts -->
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, Bash(node .claude/skills/paper-pipeline/scripts/announce.mjs:*), Bash(node .claude/skills/paper-pipeline/scripts/ledger.mjs:*)]
4
+ allowed-tools: [Read, Write, Edit, Grep, Glob, Agent]
5
5
  ---
6
6
 
7
- <!-- vigiles:sha256:79a018d2fd2bf3e7 compiled from skills/tighten-paper/SKILL.md.spec.ts -->
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,