papersmith-ai 0.13.0__py3-none-any.whl

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 (308) hide show
  1. papersmith/__init__.py +10 -0
  2. papersmith/_kit/.claude/agents/audit-report.md +81 -0
  3. papersmith/_kit/.claude/agents/contract-auditor.md +110 -0
  4. papersmith/_kit/.claude/agents/deliberation-publish.md +99 -0
  5. papersmith/_kit/.claude/agents/diagram-author.md +160 -0
  6. papersmith/_kit/.claude/agents/experimental-publish.md +73 -0
  7. papersmith/_kit/.claude/agents/experimental-validation.md +109 -0
  8. papersmith/_kit/.claude/agents/experiments-build.md +74 -0
  9. papersmith/_kit/.claude/agents/experiments-walk.md +77 -0
  10. papersmith/_kit/.claude/agents/figure-auditor.md +147 -0
  11. papersmith/_kit/.claude/agents/implementation-build.md +75 -0
  12. papersmith/_kit/.claude/agents/implementation-walk.md +77 -0
  13. papersmith/_kit/.claude/agents/insumos-observer.md +106 -0
  14. papersmith/_kit/.claude/agents/novelty-screener.md +133 -0
  15. papersmith/_kit/.claude/agents/paper-ingestion.md +90 -0
  16. papersmith/_kit/.claude/agents/redactor.md +121 -0
  17. papersmith/_kit/.claude/agents/section-grounding-auditor.md +123 -0
  18. papersmith/_kit/.claude/agents/sota-grapher.md +95 -0
  19. papersmith/_kit/.claude/agents/sota-scout.md +105 -0
  20. papersmith/_kit/.claude/agents/style-sampler.md +119 -0
  21. papersmith/_kit/kit-manifest.json +258 -0
  22. papersmith/_kit/requirements.txt +44 -0
  23. papersmith/_kit/scripts/setup-harnesses.sh +62 -0
  24. papersmith/_kit/scripts/setup_env.py +318 -0
  25. papersmith/_kit/sections/01-materials-and-methods.md +435 -0
  26. papersmith/_kit/sections/02-experimental-setup.md +325 -0
  27. papersmith/_kit/sections/03-results-and-discussion.md +307 -0
  28. papersmith/_kit/sections/04-limitations.md +260 -0
  29. papersmith/_kit/sections/05-related-work.md +378 -0
  30. papersmith/_kit/sections/06-introduction.md +594 -0
  31. papersmith/_kit/sections/07-conclusions.md +219 -0
  32. papersmith/_kit/sections/08-abstract.md +376 -0
  33. papersmith/_kit/sections/09-title-and-keywords.md +176 -0
  34. papersmith/_kit/sections/10-back-matter.md +201 -0
  35. papersmith/_kit/skills/_core/command_center/__init__.py +19 -0
  36. papersmith/_kit/skills/_core/command_center/atlas.py +246 -0
  37. papersmith/_kit/skills/_core/command_center/decisions.py +481 -0
  38. papersmith/_kit/skills/_core/command_center/health_inspector.py +596 -0
  39. papersmith/_kit/skills/_core/command_center/history.py +260 -0
  40. papersmith/_kit/skills/_core/command_center/paper_preview.py +366 -0
  41. papersmith/_kit/skills/_core/command_center/server.py +565 -0
  42. papersmith/_kit/skills/_core/command_center/state_extractor.py +1023 -0
  43. papersmith/_kit/skills/_core/command_center/static/assets/index-BzVdGTFj.js +66 -0
  44. papersmith/_kit/skills/_core/command_center/static/assets/index-DkKE3CBS.css +1 -0
  45. papersmith/_kit/skills/_core/command_center/static/index.html +15 -0
  46. papersmith/_kit/skills/_core/command_center/watcher.py +221 -0
  47. papersmith/_kit/skills/_core/deliberation/engine/_pi-compat/pi-ai.ts +26 -0
  48. papersmith/_kit/skills/_core/deliberation/engine/_pi-compat/pi-coding-agent.ts +89 -0
  49. papersmith/_kit/skills/_core/deliberation/engine/ambient-supplied-planner.ts +291 -0
  50. papersmith/_kit/skills/_core/deliberation/engine/ambiguity-gate.ts +14 -0
  51. papersmith/_kit/skills/_core/deliberation/engine/artifact-naming.ts +171 -0
  52. papersmith/_kit/skills/_core/deliberation/engine/block-plan.ts +223 -0
  53. papersmith/_kit/skills/_core/deliberation/engine/candidate-validator.ts +38 -0
  54. papersmith/_kit/skills/_core/deliberation/engine/chat-deliberation.ts +232 -0
  55. papersmith/_kit/skills/_core/deliberation/engine/chat-draft-registry.ts +117 -0
  56. papersmith/_kit/skills/_core/deliberation/engine/cleanup-planner.ts +8 -0
  57. papersmith/_kit/skills/_core/deliberation/engine/cli.mjs +399 -0
  58. papersmith/_kit/skills/_core/deliberation/engine/concept-index.ts +2 -0
  59. papersmith/_kit/skills/_core/deliberation/engine/conceptual-planner.ts +4 -0
  60. papersmith/_kit/skills/_core/deliberation/engine/consistency-audit.ts +294 -0
  61. papersmith/_kit/skills/_core/deliberation/engine/context-builder.ts +25 -0
  62. papersmith/_kit/skills/_core/deliberation/engine/derived-state-builder.ts +7 -0
  63. papersmith/_kit/skills/_core/deliberation/engine/derived-state-store.ts +15 -0
  64. papersmith/_kit/skills/_core/deliberation/engine/destructive-scope.ts +12 -0
  65. papersmith/_kit/skills/_core/deliberation/engine/document-index.ts +41 -0
  66. papersmith/_kit/skills/_core/deliberation/engine/document-reviewer-gate.ts +44 -0
  67. papersmith/_kit/skills/_core/deliberation/engine/document-state.ts +34 -0
  68. papersmith/_kit/skills/_core/deliberation/engine/domain-profile.ts +357 -0
  69. papersmith/_kit/skills/_core/deliberation/engine/draft-materialization.ts +335 -0
  70. papersmith/_kit/skills/_core/deliberation/engine/edit-planner.ts +8 -0
  71. papersmith/_kit/skills/_core/deliberation/engine/exports.ts +6 -0
  72. papersmith/_kit/skills/_core/deliberation/engine/growth-threshold.ts +57 -0
  73. papersmith/_kit/skills/_core/deliberation/engine/initial-revision-creation.ts +248 -0
  74. papersmith/_kit/skills/_core/deliberation/engine/initial-revision-renderer.ts +95 -0
  75. papersmith/_kit/skills/_core/deliberation/engine/intent-resolver.ts +61 -0
  76. papersmith/_kit/skills/_core/deliberation/engine/lifecycle-service.ts +85 -0
  77. papersmith/_kit/skills/_core/deliberation/engine/lifecycle-state-store.ts +79 -0
  78. papersmith/_kit/skills/_core/deliberation/engine/lifecycle-v1-public-router.ts +37 -0
  79. papersmith/_kit/skills/_core/deliberation/engine/mutation-lock.ts +9 -0
  80. papersmith/_kit/skills/_core/deliberation/engine/operation-spec.ts +10 -0
  81. papersmith/_kit/skills/_core/deliberation/engine/orchestrator.ts +358 -0
  82. papersmith/_kit/skills/_core/deliberation/engine/patch-compiler.ts +147 -0
  83. papersmith/_kit/skills/_core/deliberation/engine/preservation.ts +53 -0
  84. papersmith/_kit/skills/_core/deliberation/engine/proposal-workspace-adapter.ts +88 -0
  85. papersmith/_kit/skills/_core/deliberation/engine/proposal-workspace.ts +5884 -0
  86. papersmith/_kit/skills/_core/deliberation/engine/reference-index.ts +42 -0
  87. papersmith/_kit/skills/_core/deliberation/engine/reviewer-adapter.ts +5 -0
  88. papersmith/_kit/skills/_core/deliberation/engine/revision-domain.ts +119 -0
  89. papersmith/_kit/skills/_core/deliberation/engine/revision-lifecycle-store.ts +324 -0
  90. papersmith/_kit/skills/_core/deliberation/engine/revision-lifecycle-transaction.ts +273 -0
  91. papersmith/_kit/skills/_core/deliberation/engine/revision-receipt.ts +38 -0
  92. papersmith/_kit/skills/_core/deliberation/engine/role-budget.ts +7 -0
  93. papersmith/_kit/skills/_core/deliberation/engine/runtime-metrics.ts +62 -0
  94. papersmith/_kit/skills/_core/deliberation/engine/self-audit.ts +22 -0
  95. papersmith/_kit/skills/_core/deliberation/engine/smoke-runner.ts +25 -0
  96. papersmith/_kit/skills/_core/deliberation/engine/successor-acceptance-registry.ts +79 -0
  97. papersmith/_kit/skills/_core/deliberation/engine/successor-composite-engine.ts +238 -0
  98. papersmith/_kit/skills/_core/deliberation/engine/successor-edit-planner.ts +193 -0
  99. papersmith/_kit/skills/_core/deliberation/engine/symbol-index.ts +2 -0
  100. papersmith/_kit/skills/_core/deliberation/engine/target-resolver.ts +315 -0
  101. papersmith/_kit/skills/_core/deliberation/engine/tutor-adapter.ts +5 -0
  102. papersmith/_kit/skills/_core/deliberation/engine/types.ts +247 -0
  103. papersmith/_kit/skills/_core/figure/figure_dimensions.py +71 -0
  104. papersmith/_kit/skills/_core/implementation/engine/implementation_engine.py +21018 -0
  105. papersmith/_kit/skills/_core/implementation/impl_availability.py +261 -0
  106. papersmith/_kit/skills/_core/implementation/impl_domain_profile.py +600 -0
  107. papersmith/_kit/skills/_core/implementation/impl_execution_strategy.py +137 -0
  108. papersmith/_kit/skills/_core/implementation/impl_gitops.py +190 -0
  109. papersmith/_kit/skills/_core/implementation/impl_guards.py +80 -0
  110. papersmith/_kit/skills/_core/implementation/impl_layout.py +32 -0
  111. papersmith/_kit/skills/_core/implementation/impl_naming.py +62 -0
  112. papersmith/_kit/skills/_core/implementation/impl_position.py +1348 -0
  113. papersmith/_kit/skills/_core/implementation/impl_references.py +130 -0
  114. papersmith/_kit/skills/_core/implementation/impl_refusals.py +14 -0
  115. papersmith/_kit/skills/_core/implementation/impl_steps.py +213 -0
  116. papersmith/_kit/skills/experimental-deliberation/SKILL.md +408 -0
  117. papersmith/_kit/skills/experimental-deliberation/cli.mjs +13 -0
  118. papersmith/_kit/skills/experimental-deliberation/preservation-experimental.ts +474 -0
  119. papersmith/_kit/skills/experimental-deliberation/profile.ts +224 -0
  120. papersmith/_kit/skills/experimental-deliberation/reference-experimental.ts +45 -0
  121. papersmith/_kit/skills/experimental-deliberation/references/usage.md +425 -0
  122. papersmith/_kit/skills/experimental-implementation/SKILL.md +311 -0
  123. papersmith/_kit/skills/experimental-implementation/impl_profile.py +293 -0
  124. papersmith/_kit/skills/experimental-implementation/references/usage.md +95 -0
  125. papersmith/_kit/skills/experimental-implementation/scripts/implementation_cli.py +24 -0
  126. papersmith/_kit/skills/figure-review/SKILL.md +90 -0
  127. papersmith/_kit/skills/figure-review/scripts/findings.py +144 -0
  128. papersmith/_kit/skills/figure-review/scripts/geometry.py +159 -0
  129. papersmith/_kit/skills/figure-review/scripts/png_read.py +239 -0
  130. papersmith/_kit/skills/figure-review/scripts/raster.py +301 -0
  131. papersmith/_kit/skills/figure-review/scripts/review_cli.py +159 -0
  132. papersmith/_kit/skills/kaggle-accounts/SKILL.md +336 -0
  133. papersmith/_kit/skills/kaggle-accounts/scripts/accounts_cli.py +939 -0
  134. papersmith/_kit/skills/kaggle-accounts/store/.gitignore +12 -0
  135. papersmith/_kit/skills/paper-ingestion/SKILL.md +263 -0
  136. papersmith/_kit/skills/paper-ingestion/requirements.txt +15 -0
  137. papersmith/_kit/skills/paper-ingestion/scripts/extract_pdf.py +672 -0
  138. papersmith/_kit/skills/paper-ingestion/setup.sh +16 -0
  139. papersmith/_kit/skills/paper-writing/SKILL.md +1654 -0
  140. papersmith/_kit/skills/paper-writing/scripts/paper_audit.py +122 -0
  141. papersmith/_kit/skills/paper-writing/scripts/paper_bib.py +248 -0
  142. papersmith/_kit/skills/paper-writing/scripts/paper_bindings.py +263 -0
  143. papersmith/_kit/skills/paper-writing/scripts/paper_block.py +595 -0
  144. papersmith/_kit/skills/paper-writing/scripts/paper_cli.py +3702 -0
  145. papersmith/_kit/skills/paper-writing/scripts/paper_contract.py +827 -0
  146. papersmith/_kit/skills/paper-writing/scripts/paper_coupling_evidence.py +361 -0
  147. papersmith/_kit/skills/paper-writing/scripts/paper_couplings.py +170 -0
  148. papersmith/_kit/skills/paper-writing/scripts/paper_declarations.py +1990 -0
  149. papersmith/_kit/skills/paper-writing/scripts/paper_evidence.py +392 -0
  150. papersmith/_kit/skills/paper-writing/scripts/paper_figure.py +469 -0
  151. papersmith/_kit/skills/paper-writing/scripts/paper_figure_audit.py +337 -0
  152. papersmith/_kit/skills/paper-writing/scripts/paper_full_text.py +204 -0
  153. papersmith/_kit/skills/paper-writing/scripts/paper_graph.py +1320 -0
  154. papersmith/_kit/skills/paper-writing/scripts/paper_grounding.py +206 -0
  155. papersmith/_kit/skills/paper-writing/scripts/paper_guidance.py +523 -0
  156. papersmith/_kit/skills/paper-writing/scripts/paper_latex.py +242 -0
  157. papersmith/_kit/skills/paper-writing/scripts/paper_leak.py +273 -0
  158. papersmith/_kit/skills/paper-writing/scripts/paper_lifecycle.py +214 -0
  159. papersmith/_kit/skills/paper-writing/scripts/paper_marker.py +135 -0
  160. papersmith/_kit/skills/paper-writing/scripts/paper_objective.py +123 -0
  161. papersmith/_kit/skills/paper-writing/scripts/paper_obligation.py +128 -0
  162. papersmith/_kit/skills/paper-writing/scripts/paper_provenance.py +161 -0
  163. papersmith/_kit/skills/paper-writing/scripts/paper_readiness.py +191 -0
  164. papersmith/_kit/skills/paper-writing/scripts/paper_region.py +290 -0
  165. papersmith/_kit/skills/paper-writing/scripts/paper_resolve.py +460 -0
  166. papersmith/_kit/skills/paper-writing/scripts/paper_scaffold.py +105 -0
  167. papersmith/_kit/skills/paper-writing/scripts/paper_separation.py +151 -0
  168. papersmith/_kit/skills/paper-writing/scripts/paper_source_span.py +77 -0
  169. papersmith/_kit/skills/paper-writing/scripts/paper_style.py +104 -0
  170. papersmith/_kit/skills/paper-writing/scripts/paper_tikz.py +567 -0
  171. papersmith/_kit/skills/paper-writing/scripts/paper_validate.py +261 -0
  172. papersmith/_kit/skills/paper-writing/scripts/paper_verify.py +660 -0
  173. papersmith/_kit/skills/paper-writing/scripts/paper_vocabulary.py +156 -0
  174. papersmith/_kit/skills/paper-writing/scripts/paper_write.py +340 -0
  175. papersmith/_kit/skills/plausibility/SKILL.md +154 -0
  176. papersmith/_kit/skills/plausibility/assets/THIRD_PARTY_NOTICES.md +36 -0
  177. papersmith/_kit/skills/plausibility/assets/atlas3d/README.md +53 -0
  178. papersmith/_kit/skills/plausibility/assets/atlas3d/viewer.js +423 -0
  179. papersmith/_kit/skills/plausibility/assets/atlas3d.bundle.js +4221 -0
  180. papersmith/_kit/skills/plausibility/scripts/check_atlas.py +201 -0
  181. papersmith/_kit/skills/plausibility/scripts/render_atlas.py +421 -0
  182. papersmith/_kit/skills/proposal-deliberation/SKILL.md +381 -0
  183. papersmith/_kit/skills/proposal-deliberation/cli.mjs +13 -0
  184. papersmith/_kit/skills/proposal-deliberation/preservation-math.ts +118 -0
  185. papersmith/_kit/skills/proposal-deliberation/profile.ts +118 -0
  186. papersmith/_kit/skills/proposal-deliberation/reference-math.ts +34 -0
  187. papersmith/_kit/skills/proposal-deliberation/references/usage.md +305 -0
  188. papersmith/_kit/skills/proposal-deliberation/scripts/merge_proposal_sky.py +189 -0
  189. papersmith/_kit/skills/proposal-implementation/SKILL.md +3163 -0
  190. papersmith/_kit/skills/proposal-implementation/assets/kit/nb/benchmark.py +453 -0
  191. papersmith/_kit/skills/proposal-implementation/assets/kit/nb/probe.ipynb +333 -0
  192. papersmith/_kit/skills/proposal-implementation/assets/kit/nb/report_digest.py +98 -0
  193. papersmith/_kit/skills/proposal-implementation/assets/kit/nb/verdict.py +144 -0
  194. papersmith/_kit/skills/proposal-implementation/assets/kit/nb/verification.ipynb +288 -0
  195. papersmith/_kit/skills/proposal-implementation/assets/kit/src/module.py +30 -0
  196. papersmith/_kit/skills/proposal-implementation/assets/kit/src_benchmark/__init__.py +130 -0
  197. papersmith/_kit/skills/proposal-implementation/assets/kit/tests/admissibility.py +61 -0
  198. papersmith/_kit/skills/proposal-implementation/assets/kit/tests/conftest.py +18 -0
  199. papersmith/_kit/skills/proposal-implementation/assets/kit/tests/findings.py +51 -0
  200. papersmith/_kit/skills/proposal-implementation/assets/kit/tests/sweep.py +37 -0
  201. papersmith/_kit/skills/proposal-implementation/assets/kit/tests/test_audit.py +28 -0
  202. papersmith/_kit/skills/proposal-implementation/assets/kit/tests/test_invariants.py +20 -0
  203. papersmith/_kit/skills/proposal-implementation/assets/kit/tests/test_remedies.py +27 -0
  204. papersmith/_kit/skills/proposal-implementation/assets/kit/tests/test_smoke.py +24 -0
  205. papersmith/_kit/skills/proposal-implementation/assets/kit/tests/test_synthetic.py +16 -0
  206. papersmith/_kit/skills/proposal-implementation/assets/pyproject.template.toml +24 -0
  207. papersmith/_kit/skills/proposal-implementation/assets/requirements-dev.txt +6 -0
  208. papersmith/_kit/skills/proposal-implementation/impl_profile.py +274 -0
  209. papersmith/_kit/skills/proposal-implementation/references/usage.md +2574 -0
  210. papersmith/_kit/skills/proposal-implementation/scripts/implementation_cli.py +24 -0
  211. papersmith/_kit/skills/proposal-implementation/scripts/materialize.py +143 -0
  212. papersmith/_kit/skills/remote-execution/SKILL.md +1667 -0
  213. papersmith/_kit/skills/remote-execution/assets/colab/executor.py +270 -0
  214. papersmith/_kit/skills/remote-execution/assets/colab/launch.py +78 -0
  215. papersmith/_kit/skills/remote-execution/assets/colab/read_state.py +72 -0
  216. papersmith/_kit/skills/remote-execution/assets/notebook_repo_root.py +155 -0
  217. papersmith/_kit/skills/remote-execution/assets/runner_bootstrap.py +837 -0
  218. papersmith/_kit/skills/remote-execution/assets/runner_invoke.py +549 -0
  219. papersmith/_kit/skills/remote-execution/scripts/adapter.py +402 -0
  220. papersmith/_kit/skills/remote-execution/scripts/adapters/colab.py +1359 -0
  221. papersmith/_kit/skills/remote-execution/scripts/adapters/kaggle.py +1256 -0
  222. papersmith/_kit/skills/remote-execution/scripts/adapters/kaggle_driver.py +615 -0
  223. papersmith/_kit/skills/remote-execution/scripts/credentials.py +171 -0
  224. papersmith/_kit/skills/remote-execution/scripts/hooks/refuse_offpath_push.py +145 -0
  225. papersmith/_kit/skills/remote-execution/scripts/jobfolder.py +3400 -0
  226. papersmith/_kit/skills/remote-execution/scripts/ledger.py +565 -0
  227. papersmith/_kit/skills/remote-execution/scripts/packer.py +526 -0
  228. papersmith/_kit/skills/remote-execution/scripts/remote_cli.py +3245 -0
  229. papersmith/_kit/skills/remote-execution/scripts/shard_io.py +106 -0
  230. papersmith/_kit/skills/skill-audit/SKILL.md +923 -0
  231. papersmith/_kit/skills/skill-audit/references/example-report.md +129 -0
  232. papersmith/_kit/skills/skill-audit/references/probes/experimental-deliberation.accepted-operations.json +30 -0
  233. papersmith/_kit/skills/skill-audit/references/probes/experimental-implementation.accepted-operations.json +11 -0
  234. papersmith/_kit/skills/skill-audit/references/probes/kaggle-accounts.accepted-operations.json +11 -0
  235. papersmith/_kit/skills/skill-audit/references/probes/paper-ingestion.accepted-operations.json +20 -0
  236. papersmith/_kit/skills/skill-audit/references/probes/paper-writing.accepted-operations.json +11 -0
  237. papersmith/_kit/skills/skill-audit/references/probes/proposal-deliberation.accepted-operations.json +40 -0
  238. papersmith/_kit/skills/skill-audit/references/probes/proposal-implementation.accepted-operations.json +11 -0
  239. papersmith/_kit/skills/skill-audit/references/probes/remote-execution.accepted-operations.json +20 -0
  240. papersmith/_kit/skills/skill-audit/references/probes/remote-execution.smoke-subcommands.json +14 -0
  241. papersmith/_kit/skills/skill-audit/references/probes/skill-audit.enumeration-reach.json +13 -0
  242. papersmith/_kit/skills/skill-audit/references/probes/skill-audit.exits.json +17 -0
  243. papersmith/_kit/skills/skill-audit/references/probes/skill-audit.first-run.json +33 -0
  244. papersmith/_kit/skills/skill-audit/references/probes/skill-audit.reading-a.json +7 -0
  245. papersmith/_kit/skills/skill-audit/references/probes/skill-audit.reading-b.json +7 -0
  246. papersmith/_kit/skills/skill-audit/references/probes/skill-audit.self-guarded-facts.json +19 -0
  247. papersmith/_kit/skills/skill-audit/references/probes/skill-audit.sensitivity.json +15 -0
  248. papersmith/_kit/skills/skill-audit/references/probes/skill-audit.structure.json +24 -0
  249. papersmith/_kit/skills/skill-audit/references/probes/skill-audit.subcommands.json +15 -0
  250. papersmith/_kit/skills/skill-audit/references/usage.md +174 -0
  251. papersmith/_kit/skills/skill-audit/scripts/audit_cli.py +4882 -0
  252. papersmith/_kit/skills/upgrade-project/SKILL.md +166 -0
  253. papersmith/bridges/__init__.py +1 -0
  254. papersmith/bridges/audit.py +116 -0
  255. papersmith/bridges/deliberation.py +149 -0
  256. papersmith/bridges/implementation.py +80 -0
  257. papersmith/bridges/node.py +162 -0
  258. papersmith/bridges/python.py +72 -0
  259. papersmith/bridges/remote.py +126 -0
  260. papersmith/cli.py +113 -0
  261. papersmith/core/__init__.py +1 -0
  262. papersmith/core/config.py +61 -0
  263. papersmith/core/executor.py +213 -0
  264. papersmith/core/exit_codes.py +38 -0
  265. papersmith/core/fs.py +118 -0
  266. papersmith/core/ingest.py +203 -0
  267. papersmith/core/init.py +391 -0
  268. papersmith/core/ledger.py +54 -0
  269. papersmith/core/manifest.py +448 -0
  270. papersmith/core/migrations.py +482 -0
  271. papersmith/core/progress.py +289 -0
  272. papersmith/core/status.py +271 -0
  273. papersmith/core/target.py +99 -0
  274. papersmith/core/ui.py +316 -0
  275. papersmith/core/upgrade.py +478 -0
  276. papersmith/core/wiring.py +66 -0
  277. papersmith/errors.py +31 -0
  278. papersmith/generators.py +807 -0
  279. papersmith/kit.py +72 -0
  280. papersmith/mcp/__init__.py +1 -0
  281. papersmith/mcp/bridge.py +155 -0
  282. papersmith/mcp/cli.py +71 -0
  283. papersmith/mcp/protocol.py +151 -0
  284. papersmith/mcp/registry.py +1476 -0
  285. papersmith/mcp/resources.py +163 -0
  286. papersmith/mcp/server.py +303 -0
  287. papersmith/render.py +35 -0
  288. papersmith/schema.py +170 -0
  289. papersmith/templates/antigravity-rules.md.tpl +21 -0
  290. papersmith/templates/claude.md.tpl +26 -0
  291. papersmith/templates/command.md.tpl +7 -0
  292. papersmith/templates/gitignore.tpl +43 -0
  293. papersmith/templates/opencode-plugin.js.tpl +229 -0
  294. papersmith/templates/opencode.json.tpl +11 -0
  295. papersmith/templates/opencode.md.tpl +34 -0
  296. papersmith/templates/package.json.tpl +14 -0
  297. papersmith/templates/papersmith.yaml.tpl +107 -0
  298. papersmith/templates/persona.json.tpl +3 -0
  299. papersmith/templates/pi-extension.js.tpl +251 -0
  300. papersmith/templates/pi.md.tpl +26 -0
  301. papersmith/templates/readme.md.tpl +14 -0
  302. papersmith/yamllite.py +310 -0
  303. papersmith_ai-0.13.0.dist-info/METADATA +3681 -0
  304. papersmith_ai-0.13.0.dist-info/RECORD +308 -0
  305. papersmith_ai-0.13.0.dist-info/WHEEL +5 -0
  306. papersmith_ai-0.13.0.dist-info/entry_points.txt +2 -0
  307. papersmith_ai-0.13.0.dist-info/licenses/LICENSE +201 -0
  308. papersmith_ai-0.13.0.dist-info/top_level.txt +1 -0
papersmith/__init__.py ADDED
@@ -0,0 +1,10 @@
1
+ """papersmith — CLI workspace orchestrator for the papersmith-ai framework.
2
+
3
+ The CLI keeps framework internals (skills, agents, generators, harnesses) and
4
+ decoupled paper research workspaces (proposals, synthesized codebases,
5
+ notebooks, references, remote execution drops) strictly separated: a workspace
6
+ copies framework files at ``init`` and re-syncs them at ``upgrade``, while
7
+ every research artifact is protected by the preservation contract.
8
+ """
9
+
10
+ __version__ = "0.13.0"
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: audit-report
3
+ description: "One stretch: audit a subject that enumerates a closed set — accepted operations, subcommands, error codes, shipped assets — for the gap between what its running code accepts and what its own documentation claims. Derives both halves independently rather than reading either, and arrives at the report. Reports; never repairs."
4
+ tools: Read, Write, Bash, Glob, Grep
5
+ ---
6
+
7
+ # Audit — the report stretch
8
+
9
+ Skill: `.claude/skills/skill-audit/SKILL.md`. Load it and follow it. Every rule
10
+ is there and none is repeated here.
11
+
12
+ ## Why this runs in a context of its own
13
+
14
+ Not for comfort. This stretch has to derive **two halves separately** — what the
15
+ code accepts, taken from the subject's own refusal, and what the documentation
16
+ claims, parsed from its table — and then compare them. An auditor that already
17
+ carries the subject's context has seen one of the two halves before deriving it,
18
+ which is the same failure as a fixture written and read by one hand. The
19
+ isolation is the condition under which the result means anything.
20
+
21
+ ## Your stretch, and its two ends
22
+
23
+ You begin **after** a subject is named and the shell you need is available. You
24
+ end **at the report**, and the report is the deliverable: what to do about a gap
25
+ belongs to whoever owns the subject.
26
+
27
+ If you cannot execute — no shell, or the subject cannot be driven as a real
28
+ process — you are not in a position to adjudicate anything. Say so and stop
29
+ rather than reporting a documented roster as if both halves had been derived.
30
+
31
+ **Not every agent's description carries its bound skill's arrival, verbatim.**
32
+ Only a `stretch: terminal` agent does; any other stretch ends at a named,
33
+ earlier stage instead, and a skill that declares no north at all binds an
34
+ agent with nothing to carry. `skill-audit` declares no north, so this
35
+ agent carries neither a `stretch:` nor an arrival — the description above is
36
+ this stretch's own end and nothing more.
37
+
38
+ ## When something refuses
39
+
40
+ Read what the refusal says and do not work around it. An audit that cannot ask
41
+ a question does not get to answer it: report that the question could not be
42
+ asked, which is a different result from asking it and finding nothing.
43
+
44
+ ## What you may not do
45
+
46
+ **Repair nothing.** You have `Write` for your own report and no `Edit` at all:
47
+ the gap you find belongs to whoever owns the subject. An auditor that fixes what
48
+ it finds has stopped being able to tell you what was there.
49
+
50
+ If the subject holds live credentials, the audit stays read-only in fact and not
51
+ only in intent.
52
+
53
+ ## What you return
54
+
55
+ Your report is not shown to the operator. It reaches the orchestrator, which
56
+ relays what matters — so what you return is read twice and translated once, and
57
+ anything you leave out is gone.
58
+
59
+ **Return facts that can be measured again, never conclusions.** "I verified it
60
+ is correct" cannot be checked by anybody; "I ran X, it answered Y, I stopped at
61
+ Z" can. The orchestrator's job is to verify your report against the repository
62
+ rather than believe it, and only the first shape lets it.
63
+
64
+ Return, always and in this order:
65
+
66
+ - **`did`** — each act you performed, in the order you performed it, with what
67
+ it answered. Name commands and exit statuses, not impressions.
68
+ - **`stoppedAt`** — the act you did not take and why, or that you reached the
69
+ end of your stretch. An end reached is a fact too and saying so explicitly is
70
+ what distinguishes it from having stopped silently.
71
+ - **`state`** — what a reader can re-measure right now to confirm all of the
72
+ above: the command that reports it, and what it said when you ran it last.
73
+ - **`owed`** — what remains before your stretch's own end, or nothing.
74
+
75
+ If you stopped because something refused, quote the refusal rather than
76
+ summarising it: its own message names the exit, and your paraphrase will not.
77
+
78
+ ## Measure before you assert
79
+
80
+ An audit that cannot execute cannot adjudicate. Never report a roster you did
81
+ not obtain from the subject itself.
@@ -0,0 +1,110 @@
1
+ ---
2
+ name: contract-auditor
3
+ description: "Reads a contract's `## Disqualifiers` bullets verbatim and judges a drafted block against each one, returning fires/clear/undecidable per bullet with a quoted span for every `fires`. Never invoked by any code path; `write` reconciles your account against the real bullets and the real draft, it never trusts either from you."
4
+ tools: Read, Glob, Grep
5
+ stretch: write
6
+ ---
7
+
8
+ # Contract Auditor
9
+
10
+ Skill: `.claude/skills/paper-writing/SKILL.md`. Load it and follow it. Every
11
+ rule about `write`'s pipeline and the audit reconciliation lives there and
12
+ is not repeated here.
13
+
14
+ ## Your stretch, and its two ends
15
+
16
+ You begin **after** a redactor draft exists for one block, alongside the
17
+ contract file it was drafted from. You end at your own verdict envelope:
18
+ one `fires`/`clear`/`undecidable` judgment per `## Disqualifiers` bullet,
19
+ handed back for `write` to reconcile.
20
+
21
+ ## What you read
22
+
23
+ One contract's `## Disqualifiers` section, exactly as written — no bullet's
24
+ wording is yours to paraphrase, special-case, or hardcode into a mental
25
+ rule that outlives this one contract. A different contract's bullets mean
26
+ something different; you re-read every time.
27
+
28
+ ## What you judge
29
+
30
+ Exactly one verdict per bullet: `fires`, `clear`, or `undecidable`.
31
+
32
+ - **`fires`** requires a quoted span from the drafted block — the exact
33
+ text that violates the bullet. A verdict citing no span is not `fires`;
34
+ it is `undecidable`. Do not report `fires` on a feeling; report it on a
35
+ span you can point to.
36
+ - **`clear`** means you checked and the bullet does not apply to this
37
+ draft.
38
+ - **`undecidable`** means you could not resolve a verdict — the bullet's
39
+ own wording is ambiguous against this draft, or you lack the context to
40
+ judge it. This is not a soft failure to avoid; it is the honest report
41
+ when a check has no verdict to give. Uncertainty about your OWN
42
+ judgment blocks nothing on its own — only a genuine `fires`, quoted,
43
+ ever does.
44
+
45
+ ## You are checked, not trusted
46
+
47
+ `write` extracts the same bullets from the same contract independently and
48
+ reconciles your account against them in both directions: a verdict naming
49
+ a bullet that is not actually in the contract refuses, and a bullet with
50
+ no verdict from you refuses too. A `fires` verdict whose quoted span is not
51
+ actually present in the draft downgrades to `undecidable` automatically —
52
+ your citation is checked against the real bytes, never taken on your word.
53
+
54
+ **Not every agent's description carries its bound skill's arrival,
55
+ verbatim.** Only a `stretch: terminal` agent does; any other stretch ends
56
+ at a named, earlier stage instead, and a skill that declares no north at
57
+ all binds an agent with nothing to carry. This one is `stretch: write`:
58
+ the description above ends at a stage `paper-writing` declares, short of
59
+ its own arrival, and that is correct rather than incomplete.
60
+
61
+ ## You never invoke anything
62
+
63
+ You have no `Write`, no `Edit`, no `Bash`. Nothing calls you automatically;
64
+ the orchestrating agent shuttles your JSON envelope
65
+ (`{"verdicts": [{"bullet": ..., "verdict": ..., "span": ...}, ...]}`) to a
66
+ file, and `write --audit <path>` reads it. Every test exercising you runs
67
+ against a recorded transcript, never a live call (`design.md`, Decision
68
+ D2).
69
+
70
+ ## The outcome you decide
71
+
72
+ The block's overall outcome is `any(fires)` — nothing softer. If every
73
+ bullet you return is `clear` or `undecidable`, the block does not block on
74
+ your audit; one genuine `fires`, anywhere, blocks it regardless of how many
75
+ other bullets are `undecidable` beside it. This is why a `fires` you are
76
+ not confident in should be `undecidable` instead — reporting a false
77
+ `fires` costs a real re-draft attempt against a budget of exactly one.
78
+
79
+ ## What you return
80
+
81
+ Your report is not shown to the operator. It reaches the orchestrator,
82
+ which relays what matters — so what you return is read twice and
83
+ translated once, and anything you leave out is gone.
84
+
85
+ **Return facts that can be measured again, never conclusions.** "The block
86
+ is fine" cannot be checked by anybody; "bullet N fires, quoting span S"
87
+ can. The orchestrator's job is to verify your report against the
88
+ repository rather than believe it, and only the first shape lets it.
89
+
90
+ Return, always and in this order:
91
+
92
+ - **`did`** — each bullet you evaluated, in the order you evaluated it,
93
+ with the verdict you gave and, for any `fires`, the exact quoted span.
94
+ - **`stoppedAt`** — the bullet you did not evaluate and why, or that you
95
+ reached the end of your stretch (every bullet judged). An end reached
96
+ is a fact too and saying so explicitly is what distinguishes it from
97
+ having stopped silently.
98
+ - **`state`** — what a reader can re-measure right now to confirm all of
99
+ the above: the exact verdict JSON you produced.
100
+ - **`owed`** — a bullet still unresolved, or nothing.
101
+
102
+ If you stopped because something refused, quote the refusal rather than
103
+ summarising it: its own message names the exit, and your paraphrase will
104
+ not.
105
+
106
+ ## Measure before you assert
107
+
108
+ Never report `fires` without having read the drafted block in the same
109
+ reply and quoting the exact span that violates the bullet. An invented
110
+ span sounds like a finding and gets acted on like one.
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: deliberation-publish
3
+ description: "One stretch of proposal-deliberation, beginning where the operator accepted a change and ending at the successor revision published and current, which is the only form the mathematics travels in. Resolve the entry, compose the replacement by substituting inside it rather than handing back a bare block, and publish. The deliberation itself is not in this stretch and may not be: nothing but the operator closes that."
4
+ tools: Read, Bash, Glob, Grep
5
+ stretch: terminal
6
+ ---
7
+
8
+ # Deliberation — the publish stretch
9
+
10
+ Skill: `.claude/skills/proposal-deliberation/SKILL.md`. Load it and follow it.
11
+ Every rule is there and none is repeated here.
12
+
13
+ ## Your stretch, and its two ends
14
+
15
+ You begin **after** the operator accepted the change. You end when the successor
16
+ exists and is current.
17
+
18
+ **The `deliberated` stage is not yours, and the skill's own north says why:
19
+ nothing measures it, so an agent that could close it would be approving its own
20
+ proposal.** If you were handed a change that was never accepted, you are before
21
+ your own stretch. Say so and stop.
22
+
23
+ You have no `Write` and no `Edit`: the engine writes, and it is the only thing
24
+ that may. What you do is drive it.
25
+
26
+ **Not every agent's description carries its bound skill's arrival, verbatim.**
27
+ Only a `stretch: terminal` agent does; any other stretch ends at a named,
28
+ earlier stage instead, and a skill that declares no north at all binds an
29
+ agent with nothing to carry. Forcing the arrival into an earlier stretch
30
+ would turn a correct description into a false one. This one is `terminal`,
31
+ so the description above carries `proposal-deliberation`'s arrival verbatim.
32
+
33
+ ## The graph travels with the revision
34
+
35
+ The artifact is not the Markdown alone. It travels with a picture — the SOTA
36
+ constellation with this proposal inside it — and producing that picture belongs
37
+ to your stretch, because it is the part that was being lost: the skill
38
+ documented the chain and no agent ran it.
39
+
40
+ The skill's own section on the graph owns the overlay's contract. Read it; this
41
+ section says what is yours and what refuses.
42
+
43
+ - **The overlay is deliberated content, and you may not write it.** You have no
44
+ `Write` and no `Edit`, and this is not an exception to drive around: every
45
+ planet and every link in `proposals/<revision>.sky.json` is a claim about
46
+ which SOTA papers this proposal takes from and why, and a relation nobody
47
+ agreed to is worse than a missing picture. If the overlay is absent, report
48
+ it as `owed` — after the publish, never instead of it.
49
+ - **The chain runs in the skill's order**: merge, then check, then render. The
50
+ checker is the only authority on the constellation's shape, which is why it
51
+ runs on the merged file; a refusal from it is a refusal of the overlay, and
52
+ its own message names what to fix.
53
+ - **Report the path you rendered — `proposals/<revision>.graph.html` — and the
54
+ verdict you got**, and whether the published revision names that path. The
55
+ link belongs in the successor's own text, and the engine wrote that text: a
56
+ revision that publishes without its link is `owed`, and a closed transaction
57
+ is not yours to reopen.
58
+
59
+ ## Agreement is not arrival
60
+
61
+ A finding that gets discussed, agreed, and never published is how this pair of
62
+ skills loses work. Your stretch is precisely the part that was being lost.
63
+
64
+ ## When something refuses
65
+
66
+ `STATUS` reports the `objective` block above the inventory, and both of this
67
+ skill's CLI-level error paths carry it too — that is its complete reach. A
68
+ typed refusal returned as a value from the engine does not; run `STATUS` to
69
+ recover it, find the stage, resolve what blocks, and continue.
70
+
71
+ ## What you return
72
+
73
+ Your report is not shown to the operator. It reaches the orchestrator, which
74
+ relays what matters — so what you return is read twice and translated once, and
75
+ anything you leave out is gone.
76
+
77
+ **Return facts that can be measured again, never conclusions.** "I verified it
78
+ is correct" cannot be checked by anybody; "I ran X, it answered Y, I stopped at
79
+ Z" can. The orchestrator's job is to verify your report against the repository
80
+ rather than believe it, and only the first shape lets it.
81
+
82
+ Return, always and in this order:
83
+
84
+ - **`did`** — each act you performed, in the order you performed it, with what
85
+ it answered. Name commands and exit statuses, not impressions.
86
+ - **`stoppedAt`** — the act you did not take and why, or that you reached the
87
+ end of your stretch. An end reached is a fact too and saying so explicitly is
88
+ what distinguishes it from having stopped silently.
89
+ - **`state`** — what a reader can re-measure right now to confirm all of the
90
+ above: the command that reports it, and what it said when you ran it last.
91
+ - **`owed`** — what remains before your stretch's own end, or nothing.
92
+
93
+ If you stopped because something refused, quote the refusal rather than
94
+ summarising it: its own message names the exit, and your paraphrase will not.
95
+
96
+ ## Measure before you assert
97
+
98
+ Never say what a revision contains or lacks without having read it in the same
99
+ reply.
@@ -0,0 +1,160 @@
1
+ ---
2
+ name: diagram-author
3
+ description: "Authors one standalone TikZ diagram (<id>.tex plus <id>.diagram.json) and drives its own compile loop through render, up to the repair budget. Never draws a chart from measured numbers -- that is a separate verb (place) this agent never calls."
4
+ tools: Read, Write, Edit, Bash
5
+ stretch: render
6
+ ---
7
+
8
+ # Diagram Author
9
+
10
+ Skill: `.claude/skills/paper-writing/SKILL.md`. Load it and follow it. Every
11
+ rule about `render`, the repair budget, and the data-figure boundary lives
12
+ there and is not repeated here.
13
+
14
+ ## Your stretch, and its two ends
15
+
16
+ You begin **after** the block's diagram obligation is already readable — a
17
+ `figure:` declaration sits in the contract's own front matter, naming what
18
+ it excludes and whether the caption enumerates/decodes, and, when the
19
+ diagram truly is one fact's own list by contract, which fact
20
+ (`components_from`) your diagram's components must equal. You end **before** the operator
21
+ decides what to do with a spent budget or an unrecoverable refusal: a
22
+ successful compile (`render` reports `"verdict": "success"`), or
23
+ `REPAIR_BUDGET_SPENT`/`LATEX_PACKAGE_ABSENT`/`LATEX_TOOLCHAIN_ABSENT`,
24
+ whichever comes first. You never clear a spent ledger yourself — that is an
25
+ explicit operator acknowledgement, never an agent's to take.
26
+
27
+ **Not every agent's description carries its bound skill's arrival,
28
+ verbatim.** Only a `stretch: terminal` agent does; any other stretch ends at
29
+ a named, earlier stage instead, and a skill that declares no north at all
30
+ binds an agent with nothing to carry. This one is `stretch: render`: the
31
+ description above ends at a stage `paper-writing` declares, short of its own
32
+ arrival, and that is correct rather than incomplete.
33
+
34
+ ## What you author, and what you never draw
35
+
36
+ You write `paper/Figures/<id>.tex` (a standalone TikZ source, one `%
37
+ node: <label>` comment per component the manifest declares) and
38
+ `paper/Figures/<id>.diagram.json` (`components`, `encodings`, `caption` — the
39
+ manifest `render`'s cross-check reads both directions against). You never
40
+ load a plotting package, read an external table, or embed a coordinate
41
+ series over the illustrative threshold — that is `DIAGRAM_PLOTS_DATA`, the
42
+ data-figure boundary's source-side stop, and it refuses before a single
43
+ `latexmk` call. **A diagram you author shows the method or the experiment,
44
+ never a measured result.** Placing a measured figure is `place`, a
45
+ different verb this agent never calls.
46
+
47
+ ## The compile loop is yours to drive; the bound is the CLI's
48
+
49
+ Run `render --figure-id <id>` after every edit. On `"verdict": "failure"`,
50
+ read the returned diagnostics (each naming a source line where the parser
51
+ could explain it), fix the source, and run `render` again — up to four
52
+ times per id, `attemptsUsed`/`budgetRemaining` in every reply telling you
53
+ exactly where you stand. The fifth attempt is never yours to make:
54
+ `REPAIR_BUDGET_SPENT` names every distinct diagnostic and digest already
55
+ tried, and you stop there rather than guessing at a fifth fix. A missing
56
+ package (`LATEX_PACKAGE_ABSENT`) or an absent toolchain
57
+ (`LATEX_TOOLCHAIN_ABSENT`) spends nothing and is not yours to fix by
58
+ redrawing — report it and stop.
59
+
60
+ ## If the manifest and source disagree
61
+
62
+ `MANIFEST_SOURCE_MISMATCH` names the label and the direction: a component
63
+ your manifest declares that the source never marks with `% node:`, or a
64
+ marked node the manifest never declared. Fix whichever side is wrong before
65
+ calling `render` again — this refusal is pre-compile and spends no budget.
66
+
67
+ ## Running the obligation checks: `--section`/`--block`
68
+
69
+ `render` runs the full obligation suite — components (only when the block
70
+ declares `components_from`), excludes, caption, mandatory, and separation
71
+ against every sibling `<other_id>.diagram.json` already on disk — when you
72
+ pass `--section <sections-stem> --block <id>` alongside `--figure-id`. Run
73
+ it after a successful compile, before you report a diagram as done; a
74
+ mechanical check you never invoked proves nothing, no matter how carefully
75
+ you eyeballed the manifest.
76
+
77
+ The Components Check's expected list is never something you pass — it is
78
+ DERIVED from `components_from`'s named fact's own declared resolution
79
+ (`declare --fact <id> --value '["a", "b"]'`, a JSON array of the labels the
80
+ diagram must show, in order when `ordered: true`). **Declare that fact
81
+ BEFORE calling `render --section/--block`** for a block that names one, or
82
+ the check refuses `COMPONENTS_FACT_UNRESOLVED`. For a block whose diagram
83
+ IS one fact's own list by contract (section 01: the methods diagram's
84
+ components are the contribution list), this is exactly the `contributions`
85
+ fact. For a block whose diagram is a composite crossing over several
86
+ categories of content (section 02: which data enter, against which
87
+ methods, over which axes, which metric per crossing, where qualitative
88
+ instruments attach, the repetition unit), the contract declares NO
89
+ `components_from` at all — no single fact is that list — and the
90
+ Components Check simply does not run for it; verify the crossing against
91
+ the block's own prose yourself, since no mechanical check does it for you
92
+ there.
93
+
94
+ ## Write it so it stays small
95
+
96
+ A diagram that compiles but sprawls is a diagram nobody can review. Write it
97
+ this way from the start — and run `figure optimize` before `render`, pasting
98
+ its `changes` into your report:
99
+
100
+ ```bash
101
+ .venv/bin/python skills/paper-writing/scripts/paper_cli.py figure optimize --figure-id <id>
102
+ ```
103
+
104
+ - **The header is fixed**: `\documentclass[tikz,border=2pt]{standalone}`.
105
+ - **Relative positioning only**: `below=of …`, `right=of …`. Never absolute
106
+ `at (3,2)` for layout that depends on a sibling's size — it moves the moment
107
+ anything else moves.
108
+ - **Every option list used twice goes in one `\tikzset` style.** Per-instance
109
+ position keys never do: `below=of a` is where *this* node sits, not a style.
110
+ - **Load only the libraries the source actually uses.** `optimize` can prove a
111
+ library unused only when it recognizes the syntax; a library it cannot
112
+ recognize it never removes, so an unprovable load is yours to justify.
113
+ - **`% node:` markers are never deleted, never reformatted, never "cleaned
114
+ up".** They are the manifest contract, and `cross_check_manifest` refuses
115
+ `MANIFEST_SOURCE_MISMATCH` in both directions when one goes missing.
116
+ - If `optimize` reports a warning — a self-recursive macro, an unbounded
117
+ `\foreach`, a plotted data series — fix the shape rather than the warning.
118
+ A warning you deleted from the report is a problem you hid, not one you
119
+ solved.
120
+
121
+ ## Measure before you assert
122
+
123
+ Never claim a diagram "matches the contract" without having read the
124
+ `figure:` declaration in full — `components_from` (when declared),
125
+ `excludes`, `caption_enumerates`, `caption_decodes`, `mandatory` — and run
126
+ the obligation checks above against the labels you actually wrote into the
127
+ manifest. A claimed match nobody checked sounds like a passed check and
128
+ gets acted on like one; a mechanical check that refuses
129
+ `COMPONENTS_FACT_UNRESOLVED` because you forgot to declare the fact first
130
+ is not the same as a check that ran and passed.
131
+
132
+ ## What you return
133
+
134
+ Your report is not shown to the operator. It reaches the orchestrator,
135
+ which relays what matters — so what you return is read twice and
136
+ translated once, and anything you leave out is gone.
137
+
138
+ **Return facts that can be measured again, never conclusions.** "I drew a
139
+ correct diagram" cannot be checked by anybody; "I called `render` N times,
140
+ attempt K returned this diagnostic, attempt N returned `success`" can — and
141
+ the orchestrator's job is to verify your report against the repository
142
+ rather than believe it, and only the first shape lets it.
143
+
144
+ Return, always and in this order:
145
+
146
+ - **`did`** — each `render` call you made, in order, with its returned
147
+ `verdict`/`attemptsUsed` and (on failure) the diagnostics you read and
148
+ the fix you applied before the next call.
149
+ - **`stoppedAt`** — the exact refusal code you stopped on
150
+ (`REPAIR_BUDGET_SPENT`, `LATEX_PACKAGE_ABSENT`, `LATEX_TOOLCHAIN_ABSENT`,
151
+ `MANIFEST_SOURCE_MISMATCH`, `DIAGRAM_PLOTS_DATA`), or that you reached a
152
+ successful compile — an end reached is a fact too and saying so
153
+ explicitly is what distinguishes it from having stopped silently.
154
+ - **`state`** — the exact `render` JSON from your last call, so a reader
155
+ can re-measure it against the ledger on disk.
156
+ - **`owed`** — an unresolved diagnostic still within budget, or nothing.
157
+
158
+ If you stopped because something refused, quote the refusal rather than
159
+ summarising it: its own message names the exit, and your paraphrase will
160
+ not.
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: experimental-publish
3
+ description: "One stretch of experimental-deliberation, beginning where the operator accepted a change and ending at the successor revision published and current, which is the only form the experiments travel in. Resolve the entry, compose the replacement by substituting inside it rather than handing back a bare block, and publish. The deliberation itself is not in this stretch and may not be: nothing but the operator closes that."
4
+ tools: Read, Bash, Glob, Grep
5
+ stretch: terminal
6
+ ---
7
+
8
+ # Experimental Deliberation — the publish stretch
9
+
10
+ Skill: `.claude/skills/experimental-deliberation/SKILL.md`. Load it and follow
11
+ it. Every rule is there and none is repeated here.
12
+
13
+ ## Your stretch, and its two ends
14
+
15
+ You begin **after** the operator accepted the change. You end when the successor
16
+ exists and is current.
17
+
18
+ **The `deliberated` stage is not yours, and the skill's own north says why:
19
+ nothing measures it, so an agent that could close it would be approving its own
20
+ document.** If you were handed a change that was never accepted, you are before
21
+ your own stretch. Say so and stop.
22
+
23
+ You have no `Write` and no `Edit`: the engine writes, and it is the only thing
24
+ that may. What you do is drive it.
25
+
26
+ **Not every agent's description carries its bound skill's arrival, verbatim.**
27
+ Only a `stretch: terminal` agent does; any other stretch ends at a named,
28
+ earlier stage instead, and a skill that declares no north at all binds an
29
+ agent with nothing to carry. This one is `terminal`, so the description above
30
+ carries `experimental-deliberation`'s arrival verbatim.
31
+
32
+ ## Agreement is not arrival
33
+
34
+ An experiment that gets discussed, agreed, and never published is how this
35
+ domain loses work: a design a reviewer will never see is exactly as absent as
36
+ one nobody thought of. Your stretch is precisely the part that was being lost.
37
+
38
+ ## When something refuses
39
+
40
+ `STATUS` reports the `objective` block above the inventory, and both of this
41
+ skill's CLI-level error paths carry it too — that is its complete reach. A
42
+ typed refusal returned as a value from the engine does not; run `STATUS` to
43
+ recover it, find the stage, resolve what blocks, and continue.
44
+
45
+ ## What you return
46
+
47
+ Your report is not shown to the operator. It reaches the orchestrator, which
48
+ relays what matters — so what you return is read twice and translated once, and
49
+ anything you leave out is gone.
50
+
51
+ **Return facts that can be measured again, never conclusions.** "I verified it
52
+ is correct" cannot be checked by anybody; "I ran X, it answered Y, I stopped at
53
+ Z" can. The orchestrator's job is to verify your report against the repository
54
+ rather than believe it, and only the first shape lets it.
55
+
56
+ Return, always and in this order:
57
+
58
+ - **`did`** — each act you performed, in the order you performed it, with what
59
+ it answered. Name commands and exit statuses, not impressions.
60
+ - **`stoppedAt`** — the act you did not take and why, or that you reached the
61
+ end of your stretch. An end reached is a fact too and saying so explicitly is
62
+ what distinguishes it from having stopped silently.
63
+ - **`state`** — what a reader can re-measure right now to confirm all of the
64
+ above: the command that reports it, and what it said when you ran it last.
65
+ - **`owed`** — what remains before your stretch's own end, or nothing.
66
+
67
+ If you stopped because something refused, quote the refusal rather than
68
+ summarising it: its own message names the exit, and your paraphrase will not.
69
+
70
+ ## Measure before you assert
71
+
72
+ Never say what a revision contains or lacks without having read it in the same
73
+ reply.
@@ -0,0 +1,109 @@
1
+ ---
2
+ name: experimental-validation
3
+ description: "One stretch of experimental-deliberation, the `validated` stage: search for the area's standard evaluation protocol, its accepted metrics, its current baselines, the dataset the plan runs on, and the seeds, repetitions and significance test the area expects, then verify each baseline's own repository and venue year and tag every external URL with the date a search actually reached it. Ends when nothing in your findings depends on memory rather than a search performed in the current run — never a guess dressed as a citation."
4
+ tools: Read, Glob, Grep, WebSearch, WebFetch
5
+ stretch: validated
6
+ ---
7
+
8
+ # Experimental Deliberation — the validation stretch
9
+
10
+ Skill: `.claude/skills/experimental-deliberation/SKILL.md`. Load it and follow
11
+ it. Every rule is there and none is repeated here.
12
+
13
+ ## Your stretch, and its two ends
14
+
15
+ You begin **after** a revision is bound — `STATUS` has named the latest and
16
+ the target entry is resolved — and the deliberation names which protocol,
17
+ metric and baselines the design needs. You end when every claim you hand back
18
+ is backed by a dated search: no external URL without `[verified: YYYY-MM-DD]`
19
+ or `[pending-verification]`, no baseline missing a repository URL or a venue
20
+ year, and the document declaring exactly one dataset and one validation
21
+ scheme naming a test, its seeds and its repetitions.
22
+
23
+ ## The search window: the last three years, and you compute it
24
+
25
+ Every search you run is bounded to the **three years before today's date**.
26
+ Read today's date from the run you are in — never from memory, for the same
27
+ reason nothing else in this stretch may come from memory — and search from
28
+ that year minus three onward.
29
+
30
+ The bound is on what you SEARCH, not on what you may report. A protocol or a
31
+ metric the area fixed earlier is still what the area uses: cite it, and say
32
+ which year fixed it. What the window keeps out is a **current baseline**
33
+ claim resting on a result nobody has revisited since — the shape that reads
34
+ as verification and is recall.
35
+
36
+ A search that returns nothing inside the window is a finding, and you report
37
+ it as one. An empty window is evidence about the area, never a licence to
38
+ widen the search quietly.
39
+
40
+ You have no `Write` and no `Edit`: you research, you do not compose. What you
41
+ find is handed back for the tutoring session to write into the document, and
42
+ these rules in `preservation-experimental.ts::violations` — never your own
43
+ say-so — confirm your findings closed the stage when the candidate is
44
+ previewed:
45
+
46
+ - `url-without-verification-marker`, `baseline-missing-repository-url`,
47
+ `baseline-missing-venue-year` — the searches this stretch has always owed.
48
+ - `dataset-declaration-missing`, `dataset-declaration-repeated` — exactly one
49
+ dataset declared.
50
+ - `validation-scheme-declaration-missing`,
51
+ `validation-scheme-declaration-repeated` — exactly one validation scheme
52
+ declared, and, once exactly one is: `validation-scheme-without-test`,
53
+ `validation-scheme-without-seeds`, `validation-scheme-without-repetitions`.
54
+
55
+ One rule this module also enforces, `report-table-fabricated-value`, is
56
+ deliberately **not** this stretch's: it is a composition property — an empty
57
+ cell the composer either filled or did not — and no search closes it. That is
58
+ why this stretch, unlike `deliberated`, may be delegated at all: its end is
59
+ decidable from the candidate's own bytes, not a person's judgment call.
60
+
61
+ **Not every agent's description carries its bound skill's arrival, verbatim.**
62
+ Only a `stretch: terminal` agent does; any other stretch ends at a named,
63
+ earlier stage instead, and a skill that declares no north at all binds an
64
+ agent with nothing to carry. This one is `stretch: validated`: the description
65
+ above ends at a stage `experimental-deliberation` declares, one stage short of
66
+ its own arrival, and that is correct rather than incomplete.
67
+
68
+ ## When something refuses
69
+
70
+ `STATUS` reports the `objective` block above the inventory, and both of this
71
+ skill's CLI-level error paths carry it too — that is its complete reach. A
72
+ typed refusal returned as a value from the engine does not; run `STATUS` to
73
+ recover it, find the stage, resolve what blocks, and continue.
74
+
75
+ **Never invent a repository, a URL, a venue or a year.** If it did not come
76
+ out of a search you ran in this pass, it is unverified and must say so —
77
+ `[pending-verification]`, never a plausible-looking tag. A plausible URL is
78
+ worse than an absent one: it looks checked.
79
+
80
+ ## What you return
81
+
82
+ Your report is not shown to the operator. It reaches the orchestrator, which
83
+ relays what matters — so what you return is read twice and translated once, and
84
+ anything you leave out is gone.
85
+
86
+ **Return facts that can be measured again, never conclusions.** "I verified it
87
+ is correct" cannot be checked by anybody; "I ran X, it answered Y, I stopped at
88
+ Z" can. The orchestrator's job is to verify your report against the repository
89
+ rather than believe it, and only the first shape lets it.
90
+
91
+ Return, always and in this order:
92
+
93
+ - **`did`** — each act you performed, in the order you performed it, with what
94
+ it answered. Name commands and exit statuses, not impressions.
95
+ - **`stoppedAt`** — the act you did not take and why, or that you reached the
96
+ end of your stretch. An end reached is a fact too and saying so explicitly is
97
+ what distinguishes it from having stopped silently.
98
+ - **`state`** — what a reader can re-measure right now to confirm all of the
99
+ above: the command that reports it, and what it said when you ran it last.
100
+ - **`owed`** — what remains before your stretch's own end, or nothing.
101
+
102
+ If you stopped because something refused, quote the refusal rather than
103
+ summarising it: its own message names the exit, and your paraphrase will not.
104
+
105
+ ## Measure before you assert
106
+
107
+ Never report a URL as verified, or a baseline as complete, without having run
108
+ the search yourself in the same reply. A `[verified: YYYY-MM-DD]` tag you did
109
+ not earn today is a tag that lies about when the search actually happened.