dsh-aris-panel 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -0
  3. package/README_CN.md +87 -0
  4. package/dsh/checkout.patch.yml +38 -0
  5. package/dsh/client.js +634 -0
  6. package/dsh/cordis.patch.yml +44 -0
  7. package/dsh/index.mjs +76 -0
  8. package/dsh/run-status.mjs +182 -0
  9. package/dsh/scope-limits.mjs +50 -0
  10. package/dsh/workbench.mjs +291 -0
  11. package/mcp-servers/claude-review/README.md +93 -0
  12. package/mcp-servers/claude-review/run_with_claude_aws.sh +49 -0
  13. package/mcp-servers/claude-review/server.py +718 -0
  14. package/mcp-servers/codex-image2/README.md +65 -0
  15. package/mcp-servers/codex-image2/server.py +893 -0
  16. package/mcp-servers/feishu-bridge/requirements.txt +1 -0
  17. package/mcp-servers/feishu-bridge/server.py +240 -0
  18. package/mcp-servers/gemini-review/README.md +171 -0
  19. package/mcp-servers/gemini-review/server.py +1856 -0
  20. package/mcp-servers/llm-chat/requirements.txt +1 -0
  21. package/mcp-servers/llm-chat/server.py +664 -0
  22. package/mcp-servers/manual-review/README.md +133 -0
  23. package/mcp-servers/manual-review/server.py +910 -0
  24. package/mcp-servers/manual-review/ui.html +279 -0
  25. package/mcp-servers/minimax-chat/requirements.txt +1 -0
  26. package/mcp-servers/minimax-chat/server.py +381 -0
  27. package/package.json +51 -0
  28. package/skills/ablation-planner/SKILL.md +123 -0
  29. package/skills/alphaxiv/SKILL.md +196 -0
  30. package/skills/analyze-results/SKILL.md +46 -0
  31. package/skills/arxiv/SKILL.md +248 -0
  32. package/skills/auto-paper-improvement-loop/SKILL.md +651 -0
  33. package/skills/auto-review-loop/SKILL.md +1137 -0
  34. package/skills/auto-review-loop-llm/SKILL.md +259 -0
  35. package/skills/auto-review-loop-minimax/SKILL.md +302 -0
  36. package/skills/citation-audit/SKILL.md +502 -0
  37. package/skills/claims-drafting/SKILL.md +227 -0
  38. package/skills/comm-lit-review/SKILL.md +297 -0
  39. package/skills/deepxiv/SKILL.md +263 -0
  40. package/skills/dse-loop/SKILL.md +296 -0
  41. package/skills/embodiment-description/SKILL.md +129 -0
  42. package/skills/exa-search/SKILL.md +205 -0
  43. package/skills/experiment-audit/SKILL.md +311 -0
  44. package/skills/experiment-bridge/SKILL.md +376 -0
  45. package/skills/experiment-plan/SKILL.md +249 -0
  46. package/skills/experiment-queue/SKILL.md +431 -0
  47. package/skills/experiment-queue/scripts/build_manifest.py +142 -0
  48. package/skills/experiment-queue/scripts/queue_manager.py +433 -0
  49. package/skills/feishu-notify/SKILL.md +156 -0
  50. package/skills/figure-description/SKILL.md +138 -0
  51. package/skills/figure-spec/SKILL.md +262 -0
  52. package/skills/figure-spec/scripts/figure_renderer.py +799 -0
  53. package/skills/formula-derivation/SKILL.md +280 -0
  54. package/skills/gemini-search/SKILL.md +231 -0
  55. package/skills/grant-proposal/SKILL.md +698 -0
  56. package/skills/idea-creator/SKILL.md +542 -0
  57. package/skills/idea-discovery/SKILL.md +521 -0
  58. package/skills/idea-discovery-robot/SKILL.md +363 -0
  59. package/skills/integrity-forensics/SKILL.md +284 -0
  60. package/skills/interview-cheatsheet/SKILL.md +245 -0
  61. package/skills/invention-structuring/SKILL.md +188 -0
  62. package/skills/jurisdiction-format/SKILL.md +192 -0
  63. package/skills/kill-argument/SKILL.md +437 -0
  64. package/skills/mermaid-diagram/SKILL.md +419 -0
  65. package/skills/meta-apply/SKILL.md +141 -0
  66. package/skills/meta-optimize/SKILL.md +437 -0
  67. package/skills/monitor-experiment/SKILL.md +140 -0
  68. package/skills/novelty-check/SKILL.md +101 -0
  69. package/skills/openalex/SKILL.md +237 -0
  70. package/skills/overleaf-sync/SKILL.md +220 -0
  71. package/skills/paper-claim-audit/SKILL.md +348 -0
  72. package/skills/paper-compile/SKILL.md +266 -0
  73. package/skills/paper-figure/SKILL.md +312 -0
  74. package/skills/paper-illustration/SKILL.md +736 -0
  75. package/skills/paper-illustration-image2/SKILL.md +391 -0
  76. package/skills/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
  77. package/skills/paper-plan/SKILL.md +386 -0
  78. package/skills/paper-poster/SKILL.md +19 -0
  79. package/skills/paper-poster-html/DESIGN_FINAL.md +176 -0
  80. package/skills/paper-poster-html/IMPLEMENTATION_CONVENTIONS.md +161 -0
  81. package/skills/paper-poster-html/LICENSES/posterly-MIT.txt +21 -0
  82. package/skills/paper-poster-html/NOTICE.md +57 -0
  83. package/skills/paper-poster-html/SKILL.md +323 -0
  84. package/skills/paper-poster-html/scripts/_posterly/__init__.py +0 -0
  85. package/skills/paper-poster-html/scripts/_posterly/canvas.py +200 -0
  86. package/skills/paper-poster-html/scripts/_posterly/measure.py +588 -0
  87. package/skills/paper-poster-html/scripts/_posterly/polish.py +498 -0
  88. package/skills/paper-poster-html/scripts/_posterly/preflight.py +489 -0
  89. package/skills/paper-poster-html/scripts/_posterly/render.py +215 -0
  90. package/skills/paper-poster-html/scripts/_posterly/textutil.py +16 -0
  91. package/skills/paper-poster-html/scripts/_posterly/verify_final.py +171 -0
  92. package/skills/paper-poster-html/scripts/asset_check.py +897 -0
  93. package/skills/paper-poster-html/scripts/extract_pdf_figures.py +666 -0
  94. package/skills/paper-poster-html/scripts/poster_check.py +251 -0
  95. package/skills/paper-poster-html/scripts/preprocess_figures.py +238 -0
  96. package/skills/paper-poster-html/scripts/render_preview.py +217 -0
  97. package/skills/paper-poster-html/scripts/run_gates.py +556 -0
  98. package/skills/paper-poster-html/scripts/style_check.py +1324 -0
  99. package/skills/paper-poster-html/templates/COMPONENTS.md +462 -0
  100. package/skills/paper-poster-html/templates/README.md +170 -0
  101. package/skills/paper-poster-html/templates/landscape_4col.html +1032 -0
  102. package/skills/paper-poster-html/templates/landscape_hero.html +1046 -0
  103. package/skills/paper-poster-html/templates/portrait_2col.html +947 -0
  104. package/skills/paper-poster-html/templates/tokens/acl.json +9 -0
  105. package/skills/paper-poster-html/templates/tokens/cvpr.json +9 -0
  106. package/skills/paper-poster-html/templates/tokens/generic.json +9 -0
  107. package/skills/paper-poster-html/templates/tokens/iclr.json +9 -0
  108. package/skills/paper-poster-html/templates/tokens/icml.json +9 -0
  109. package/skills/paper-poster-html/templates/tokens/neurips.json +9 -0
  110. package/skills/paper-slides/SKILL.md +635 -0
  111. package/skills/paper-talk/SKILL.md +381 -0
  112. package/skills/paper-write/SKILL.md +604 -0
  113. package/skills/paper-write/templates/IEEEtran.bst +2409 -0
  114. package/skills/paper-write/templates/IEEEtran.cls +6347 -0
  115. package/skills/paper-write/templates/iclr2026.tex +84 -0
  116. package/skills/paper-write/templates/icml2025.tex +87 -0
  117. package/skills/paper-write/templates/ieee_conference.tex +89 -0
  118. package/skills/paper-write/templates/ieee_journal.tex +93 -0
  119. package/skills/paper-write/templates/math_commands.tex +48 -0
  120. package/skills/paper-write/templates/neurips2025.tex +80 -0
  121. package/skills/paper-writing/SKILL.md +916 -0
  122. package/skills/patent-novelty-check/SKILL.md +153 -0
  123. package/skills/patent-pipeline/SKILL.md +344 -0
  124. package/skills/patent-review/SKILL.md +203 -0
  125. package/skills/pixel-art/SKILL.md +137 -0
  126. package/skills/prior-art-search/SKILL.md +146 -0
  127. package/skills/proof-checker/SKILL.md +866 -0
  128. package/skills/proof-orchestrator/NOTICE.md +24 -0
  129. package/skills/proof-orchestrator/SKILL.md +254 -0
  130. package/skills/proof-orchestrator/references/audit-output-contract.md +126 -0
  131. package/skills/proof-orchestrator/references/deepseek-routing.md +74 -0
  132. package/skills/proof-orchestrator/references/dispatch-prompts.md +227 -0
  133. package/skills/proof-orchestrator/references/notation-audit.md +135 -0
  134. package/skills/proof-orchestrator/references/proof-audit-rubric.md +70 -0
  135. package/skills/proof-orchestrator/references/stress-tests.md +38 -0
  136. package/skills/proof-writer/SKILL.md +223 -0
  137. package/skills/qzcli/SKILL.md +324 -0
  138. package/skills/rebuttal/SKILL.md +376 -0
  139. package/skills/render-html/SKILL.md +316 -0
  140. package/skills/render-html/scripts/render_html.py +1006 -0
  141. package/skills/render-html/scripts/templates/academic.html +703 -0
  142. package/skills/render-html/scripts/templates/dashboard.html +333 -0
  143. package/skills/research-lit/SKILL.md +756 -0
  144. package/skills/research-pipeline/SKILL.md +384 -0
  145. package/skills/research-refine/SKILL.md +770 -0
  146. package/skills/research-refine-pipeline/SKILL.md +186 -0
  147. package/skills/research-review/SKILL.md +198 -0
  148. package/skills/research-wiki/SKILL.md +461 -0
  149. package/skills/resubmit-pipeline/SKILL.md +447 -0
  150. package/skills/result-to-claim/SKILL.md +311 -0
  151. package/skills/run-experiment/SKILL.md +313 -0
  152. package/skills/semantic-scholar/SKILL.md +236 -0
  153. package/skills/serverless-modal/SKILL.md +335 -0
  154. package/skills/shared-references/acceptance-gate.md +324 -0
  155. package/skills/shared-references/assurance-contract.md +248 -0
  156. package/skills/shared-references/capture-antipatterns.md +78 -0
  157. package/skills/shared-references/citation-discipline.md +583 -0
  158. package/skills/shared-references/compute-env-contract.md +163 -0
  159. package/skills/shared-references/effort-contract.md +183 -0
  160. package/skills/shared-references/evidence-precheck.md +65 -0
  161. package/skills/shared-references/experiment-integrity.md +49 -0
  162. package/skills/shared-references/external-cadence.md +326 -0
  163. package/skills/shared-references/fan-out-pattern.md +366 -0
  164. package/skills/shared-references/injection-hygiene.md +127 -0
  165. package/skills/shared-references/integration-contract.md +461 -0
  166. package/skills/shared-references/output-composition.md +93 -0
  167. package/skills/shared-references/output-language.md +45 -0
  168. package/skills/shared-references/output-manifest.md +49 -0
  169. package/skills/shared-references/output-versioning.md +111 -0
  170. package/skills/shared-references/patent-format-cn.md +199 -0
  171. package/skills/shared-references/patent-format-ep.md +173 -0
  172. package/skills/shared-references/patent-format-us.md +161 -0
  173. package/skills/shared-references/patent-writing-principles.md +197 -0
  174. package/skills/shared-references/prior-art-databases.md +141 -0
  175. package/skills/shared-references/resumable-runs.md +109 -0
  176. package/skills/shared-references/review-scope-limits.md +81 -0
  177. package/skills/shared-references/review-tracing.md +391 -0
  178. package/skills/shared-references/reviewer-independence.md +79 -0
  179. package/skills/shared-references/reviewer-routing.md +852 -0
  180. package/skills/shared-references/skill-governance.md +104 -0
  181. package/skills/shared-references/taste-calibration.md +85 -0
  182. package/skills/shared-references/venue-checklists.md +114 -0
  183. package/skills/shared-references/wiki-helper-resolution.md +134 -0
  184. package/skills/shared-references/writing-principles.md +525 -0
  185. package/skills/skills-codex/README.md +102 -0
  186. package/skills/skills-codex/README_CN.md +100 -0
  187. package/skills/skills-codex/ablation-planner/SKILL.md +126 -0
  188. package/skills/skills-codex/alphaxiv/SKILL.md +186 -0
  189. package/skills/skills-codex/analyze-results/SKILL.md +45 -0
  190. package/skills/skills-codex/arxiv/SKILL.md +210 -0
  191. package/skills/skills-codex/auto-paper-improvement-loop/SKILL.md +574 -0
  192. package/skills/skills-codex/auto-review-loop/SKILL.md +500 -0
  193. package/skills/skills-codex/auto-review-loop-llm/SKILL.md +247 -0
  194. package/skills/skills-codex/auto-review-loop-minimax/SKILL.md +290 -0
  195. package/skills/skills-codex/citation-audit/SKILL.md +504 -0
  196. package/skills/skills-codex/claims-drafting/SKILL.md +239 -0
  197. package/skills/skills-codex/comm-lit-review/SKILL.md +299 -0
  198. package/skills/skills-codex/comm-lit-review/references/domain-taxonomy.md +57 -0
  199. package/skills/skills-codex/comm-lit-review/references/output-template.md +37 -0
  200. package/skills/skills-codex/comm-lit-review/references/source-policy.md +99 -0
  201. package/skills/skills-codex/comm-lit-review/references/venue-tiering.md +112 -0
  202. package/skills/skills-codex/deepxiv/SKILL.md +142 -0
  203. package/skills/skills-codex/dse-loop/SKILL.md +285 -0
  204. package/skills/skills-codex/embodiment-description/SKILL.md +129 -0
  205. package/skills/skills-codex/exa-search/SKILL.md +192 -0
  206. package/skills/skills-codex/experiment-audit/SKILL.md +286 -0
  207. package/skills/skills-codex/experiment-bridge/SKILL.md +356 -0
  208. package/skills/skills-codex/experiment-plan/SKILL.md +249 -0
  209. package/skills/skills-codex/experiment-queue/SKILL.md +401 -0
  210. package/skills/skills-codex/feishu-notify/SKILL.md +155 -0
  211. package/skills/skills-codex/figure-description/SKILL.md +138 -0
  212. package/skills/skills-codex/figure-spec/SKILL.md +252 -0
  213. package/skills/skills-codex/formula-derivation/SKILL.md +280 -0
  214. package/skills/skills-codex/gemini-search/SKILL.md +205 -0
  215. package/skills/skills-codex/grant-proposal/SKILL.md +626 -0
  216. package/skills/skills-codex/idea-creator/SKILL.md +405 -0
  217. package/skills/skills-codex/idea-discovery/SKILL.md +475 -0
  218. package/skills/skills-codex/idea-discovery-robot/SKILL.md +362 -0
  219. package/skills/skills-codex/integrity-forensics/SKILL.md +106 -0
  220. package/skills/skills-codex/interview-cheatsheet/SKILL.md +245 -0
  221. package/skills/skills-codex/invention-structuring/SKILL.md +188 -0
  222. package/skills/skills-codex/jurisdiction-format/SKILL.md +192 -0
  223. package/skills/skills-codex/kill-argument/SKILL.md +403 -0
  224. package/skills/skills-codex/mermaid-diagram/SKILL.md +379 -0
  225. package/skills/skills-codex/meta-apply/SKILL.md +154 -0
  226. package/skills/skills-codex/meta-optimize/SKILL.md +348 -0
  227. package/skills/skills-codex/monitor-experiment/SKILL.md +98 -0
  228. package/skills/skills-codex/novelty-check/SKILL.md +89 -0
  229. package/skills/skills-codex/openalex/SKILL.md +228 -0
  230. package/skills/skills-codex/overleaf-sync/SKILL.md +220 -0
  231. package/skills/skills-codex/paper-claim-audit/SKILL.md +350 -0
  232. package/skills/skills-codex/paper-compile/SKILL.md +253 -0
  233. package/skills/skills-codex/paper-figure/SKILL.md +311 -0
  234. package/skills/skills-codex/paper-illustration/SKILL.md +690 -0
  235. package/skills/skills-codex/paper-illustration-image2/SKILL.md +383 -0
  236. package/skills/skills-codex/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
  237. package/skills/skills-codex/paper-plan/SKILL.md +278 -0
  238. package/skills/skills-codex/paper-poster/SKILL.md +19 -0
  239. package/skills/skills-codex/paper-poster-html/SKILL.md +377 -0
  240. package/skills/skills-codex/paper-slides/SKILL.md +571 -0
  241. package/skills/skills-codex/paper-talk/SKILL.md +381 -0
  242. package/skills/skills-codex/paper-write/SKILL.md +411 -0
  243. package/skills/skills-codex/paper-write/templates/IEEEtran.bst +2409 -0
  244. package/skills/skills-codex/paper-write/templates/IEEEtran.cls +6347 -0
  245. package/skills/skills-codex/paper-write/templates/aaai2026.bst +1493 -0
  246. package/skills/skills-codex/paper-write/templates/aaai2026.sty +315 -0
  247. package/skills/skills-codex/paper-write/templates/aaai2026.tex +952 -0
  248. package/skills/skills-codex/paper-write/templates/acl.sty +312 -0
  249. package/skills/skills-codex/paper-write/templates/acl2026.tex +377 -0
  250. package/skills/skills-codex/paper-write/templates/acl_natbib.bst +1940 -0
  251. package/skills/skills-codex/paper-write/templates/acm.bst +3081 -0
  252. package/skills/skills-codex/paper-write/templates/acm_mm2026.tex +204 -0
  253. package/skills/skills-codex/paper-write/templates/acmart.cls +3520 -0
  254. package/skills/skills-codex/paper-write/templates/cvpr.bst +1448 -0
  255. package/skills/skills-codex/paper-write/templates/cvpr.sty +508 -0
  256. package/skills/skills-codex/paper-write/templates/cvpr2026.tex +63 -0
  257. package/skills/skills-codex/paper-write/templates/iclr2026.tex +84 -0
  258. package/skills/skills-codex/paper-write/templates/iclr2026_conference.bst +1440 -0
  259. package/skills/skills-codex/paper-write/templates/iclr2026_conference.sty +246 -0
  260. package/skills/skills-codex/paper-write/templates/icml2026.sty +767 -0
  261. package/skills/skills-codex/paper-write/templates/icml2026.tex +662 -0
  262. package/skills/skills-codex/paper-write/templates/ieee_conference.tex +89 -0
  263. package/skills/skills-codex/paper-write/templates/ieee_journal.tex +93 -0
  264. package/skills/skills-codex/paper-write/templates/math_commands.tex +48 -0
  265. package/skills/skills-codex/paper-write/templates/neurips2026.tex +493 -0
  266. package/skills/skills-codex/paper-write/templates/neurips_2026.sty +437 -0
  267. package/skills/skills-codex/paper-writing/SKILL.md +731 -0
  268. package/skills/skills-codex/patent-novelty-check/SKILL.md +153 -0
  269. package/skills/skills-codex/patent-pipeline/SKILL.md +344 -0
  270. package/skills/skills-codex/patent-review/SKILL.md +202 -0
  271. package/skills/skills-codex/pixel-art/SKILL.md +139 -0
  272. package/skills/skills-codex/prior-art-search/SKILL.md +146 -0
  273. package/skills/skills-codex/proof-checker/SKILL.md +554 -0
  274. package/skills/skills-codex/proof-orchestrator/SKILL.md +260 -0
  275. package/skills/skills-codex/proof-orchestrator/references/audit-output-contract.md +126 -0
  276. package/skills/skills-codex/proof-orchestrator/references/deepseek-routing.md +76 -0
  277. package/skills/skills-codex/proof-orchestrator/references/dispatch-prompts.md +227 -0
  278. package/skills/skills-codex/proof-orchestrator/references/notation-audit.md +135 -0
  279. package/skills/skills-codex/proof-orchestrator/references/proof-audit-rubric.md +70 -0
  280. package/skills/skills-codex/proof-orchestrator/references/stress-tests.md +38 -0
  281. package/skills/skills-codex/proof-writer/SKILL.md +222 -0
  282. package/skills/skills-codex/qzcli/SKILL.md +324 -0
  283. package/skills/skills-codex/rebuttal/SKILL.md +305 -0
  284. package/skills/skills-codex/render-html/SKILL.md +305 -0
  285. package/skills/skills-codex/render-html/scripts/__pycache__/render_html.cpython-314.pyc +0 -0
  286. package/skills/skills-codex/render-html/scripts/render_html.py +909 -0
  287. package/skills/skills-codex/render-html/scripts/templates/academic.html +342 -0
  288. package/skills/skills-codex/render-html/scripts/templates/dashboard.html +333 -0
  289. package/skills/skills-codex/research-lit/SKILL.md +464 -0
  290. package/skills/skills-codex/research-pipeline/SKILL.md +340 -0
  291. package/skills/skills-codex/research-refine/SKILL.md +721 -0
  292. package/skills/skills-codex/research-refine-pipeline/SKILL.md +186 -0
  293. package/skills/skills-codex/research-review/SKILL.md +135 -0
  294. package/skills/skills-codex/research-wiki/SKILL.md +421 -0
  295. package/skills/skills-codex/resubmit-pipeline/SKILL.md +444 -0
  296. package/skills/skills-codex/result-to-claim/SKILL.md +246 -0
  297. package/skills/skills-codex/run-experiment/SKILL.md +236 -0
  298. package/skills/skills-codex/semantic-scholar/SKILL.md +219 -0
  299. package/skills/skills-codex/serverless-modal/SKILL.md +335 -0
  300. package/skills/skills-codex/shared-references/acceptance-gate.md +336 -0
  301. package/skills/skills-codex/shared-references/assurance-contract.md +139 -0
  302. package/skills/skills-codex/shared-references/capture-antipatterns.md +84 -0
  303. package/skills/skills-codex/shared-references/citation-discipline.md +452 -0
  304. package/skills/skills-codex/shared-references/compute-env-contract.md +163 -0
  305. package/skills/skills-codex/shared-references/effort-contract.md +143 -0
  306. package/skills/skills-codex/shared-references/evidence-precheck.md +73 -0
  307. package/skills/skills-codex/shared-references/experiment-integrity.md +49 -0
  308. package/skills/skills-codex/shared-references/external-cadence.md +334 -0
  309. package/skills/skills-codex/shared-references/fan-out-pattern.md +375 -0
  310. package/skills/skills-codex/shared-references/injection-hygiene.md +132 -0
  311. package/skills/skills-codex/shared-references/integration-contract.md +372 -0
  312. package/skills/skills-codex/shared-references/output-composition.md +98 -0
  313. package/skills/skills-codex/shared-references/output-language.md +45 -0
  314. package/skills/skills-codex/shared-references/output-manifest.md +40 -0
  315. package/skills/skills-codex/shared-references/output-versioning.md +111 -0
  316. package/skills/skills-codex/shared-references/patent-format-cn.md +199 -0
  317. package/skills/skills-codex/shared-references/patent-format-ep.md +173 -0
  318. package/skills/skills-codex/shared-references/patent-format-us.md +161 -0
  319. package/skills/skills-codex/shared-references/patent-writing-principles.md +197 -0
  320. package/skills/skills-codex/shared-references/prior-art-databases.md +141 -0
  321. package/skills/skills-codex/shared-references/resumable-runs.md +125 -0
  322. package/skills/skills-codex/shared-references/review-scope-limits.md +81 -0
  323. package/skills/skills-codex/shared-references/review-tracing.md +144 -0
  324. package/skills/skills-codex/shared-references/reviewer-independence.md +66 -0
  325. package/skills/skills-codex/shared-references/reviewer-routing.md +128 -0
  326. package/skills/skills-codex/shared-references/skill-governance.md +119 -0
  327. package/skills/skills-codex/shared-references/taste-calibration.md +90 -0
  328. package/skills/skills-codex/shared-references/venue-checklists.md +73 -0
  329. package/skills/skills-codex/shared-references/wiki-helper-resolution.md +69 -0
  330. package/skills/skills-codex/shared-references/writing-principles.md +525 -0
  331. package/skills/skills-codex/slides-polish/SKILL.md +563 -0
  332. package/skills/skills-codex/specification-writing/SKILL.md +211 -0
  333. package/skills/skills-codex/system-profile/SKILL.md +103 -0
  334. package/skills/skills-codex/training-check/SKILL.md +83 -0
  335. package/skills/skills-codex/vast-gpu/SKILL.md +394 -0
  336. package/skills/skills-codex/web-debug-search/SKILL.md +334 -0
  337. package/skills/skills-codex/wiki-enrich/SKILL.md +255 -0
  338. package/skills/skills-codex/writing-systems-papers/SKILL.md +184 -0
  339. package/skills/skills-codex-claude-review/README.md +79 -0
  340. package/skills/skills-codex-claude-review/README_CN.md +78 -0
  341. package/skills/skills-codex-claude-review/auto-paper-improvement-loop/SKILL.md +581 -0
  342. package/skills/skills-codex-claude-review/auto-review-loop/SKILL.md +510 -0
  343. package/skills/skills-codex-claude-review/novelty-check/SKILL.md +102 -0
  344. package/skills/skills-codex-claude-review/paper-figure/SKILL.md +319 -0
  345. package/skills/skills-codex-claude-review/paper-plan/SKILL.md +287 -0
  346. package/skills/skills-codex-claude-review/paper-write/SKILL.md +420 -0
  347. package/skills/skills-codex-claude-review/research-refine/SKILL.md +732 -0
  348. package/skills/skills-codex-claude-review/research-review/SKILL.md +149 -0
  349. package/skills/skills-codex-gemini-review/README.md +176 -0
  350. package/skills/skills-codex-gemini-review/README_CN.md +175 -0
  351. package/skills/skills-codex-gemini-review/auto-paper-improvement-loop/SKILL.md +331 -0
  352. package/skills/skills-codex-gemini-review/auto-review-loop/SKILL.md +304 -0
  353. package/skills/skills-codex-gemini-review/grant-proposal/SKILL.md +630 -0
  354. package/skills/skills-codex-gemini-review/idea-creator/SKILL.md +263 -0
  355. package/skills/skills-codex-gemini-review/idea-discovery/SKILL.md +275 -0
  356. package/skills/skills-codex-gemini-review/idea-discovery-robot/SKILL.md +365 -0
  357. package/skills/skills-codex-gemini-review/novelty-check/SKILL.md +92 -0
  358. package/skills/skills-codex-gemini-review/paper-figure/SKILL.md +289 -0
  359. package/skills/skills-codex-gemini-review/paper-plan/SKILL.md +265 -0
  360. package/skills/skills-codex-gemini-review/paper-poster-html/SKILL.md +102 -0
  361. package/skills/skills-codex-gemini-review/paper-slides/SKILL.md +582 -0
  362. package/skills/skills-codex-gemini-review/paper-write/SKILL.md +346 -0
  363. package/skills/skills-codex-gemini-review/paper-writing/SKILL.md +312 -0
  364. package/skills/skills-codex-gemini-review/research-refine/SKILL.md +674 -0
  365. package/skills/skills-codex-gemini-review/research-review/SKILL.md +112 -0
  366. package/skills/slides-polish/SKILL.md +565 -0
  367. package/skills/specification-writing/SKILL.md +211 -0
  368. package/skills/system-profile/SKILL.md +103 -0
  369. package/skills/training-check/SKILL.md +132 -0
  370. package/skills/vast-gpu/SKILL.md +394 -0
  371. package/skills/web-debug-search/SKILL.md +334 -0
  372. package/skills/wiki-enrich/SKILL.md +257 -0
  373. package/skills/writing-systems-papers/SKILL.md +184 -0
  374. package/templates/CLAUDE_MD_TEMPLATE.md +29 -0
  375. package/templates/EXPERIMENT_LOG_TEMPLATE.md +47 -0
  376. package/templates/EXPERIMENT_PLAN_TEMPLATE.md +51 -0
  377. package/templates/EXPERIMENT_PLAN_TEMPLATE_CN.md +53 -0
  378. package/templates/FINDINGS_TEMPLATE.md +52 -0
  379. package/templates/IDEA_CANDIDATES_TEMPLATE.md +47 -0
  380. package/templates/IDEA_CANDIDATES_TEMPLATE_CN.md +47 -0
  381. package/templates/INVENTION_BRIEF_TEMPLATE.md +87 -0
  382. package/templates/MANIFEST_TEMPLATE.md +7 -0
  383. package/templates/NARRATIVE_REPORT_TEMPLATE.md +49 -0
  384. package/templates/PAPER_PLAN_TEMPLATE.md +47 -0
  385. package/templates/PATENT_CLAIMS_TEMPLATE.md +78 -0
  386. package/templates/PATENT_SPECIFICATION_TEMPLATE.md +68 -0
  387. package/templates/README.md +57 -0
  388. package/templates/RESEARCH_BRIEF_TEMPLATE.md +35 -0
  389. package/templates/RESEARCH_BRIEF_TEMPLATE_CN.md +41 -0
  390. package/templates/RESEARCH_CONTRACT_TEMPLATE.md +60 -0
  391. package/templates/claude-hooks/corpus_write_guard.json +16 -0
  392. package/templates/claude-hooks/corpus_write_guard.py +85 -0
  393. package/templates/claude-hooks/meta_logging.json +74 -0
  394. package/templates/gitignore-trace.txt +3 -0
  395. package/tools/__pycache__/check_skills_inventory.cpython-314.pyc +0 -0
  396. package/tools/arxiv_fetch.py +311 -0
  397. package/tools/capture_filter.py +126 -0
  398. package/tools/check_skills_inventory.py +273 -0
  399. package/tools/convert_skills_to_llm_chat.py +282 -0
  400. package/tools/copilot_native_evidence.py +818 -0
  401. package/tools/deepxiv_fetch.py +213 -0
  402. package/tools/evidence_check.py +212 -0
  403. package/tools/exa_search.py +425 -0
  404. package/tools/experiment_queue/README.md +118 -0
  405. package/tools/experiment_queue/build_manifest.py +44 -0
  406. package/tools/experiment_queue/queue_manager.py +44 -0
  407. package/tools/extract_paper_style.py +560 -0
  408. package/tools/figure_renderer.py +69 -0
  409. package/tools/forensics_gate.py +669 -0
  410. package/tools/generate_codex_claude_review_overrides.py +299 -0
  411. package/tools/idea_discovery_gate.py +256 -0
  412. package/tools/install_aris.ps1 +1372 -0
  413. package/tools/install_aris.sh +1370 -0
  414. package/tools/install_aris_codex.sh +1023 -0
  415. package/tools/install_aris_copilot.sh +1052 -0
  416. package/tools/iteration_log.py +143 -0
  417. package/tools/lint_skills_helpers.sh +84 -0
  418. package/tools/meta_opt/check_ready.sh +80 -0
  419. package/tools/meta_opt/log_event.sh +91 -0
  420. package/tools/meta_opt/trigger_eval.py +280 -0
  421. package/tools/meta_opt/trigger_evals.sample.json +28 -0
  422. package/tools/openalex_fetch.py +326 -0
  423. package/tools/overleaf_audit.sh +104 -0
  424. package/tools/overleaf_setup.sh +150 -0
  425. package/tools/paper_illustration_image2.py +62 -0
  426. package/tools/provenance.py +294 -0
  427. package/tools/research_wiki.py +1720 -0
  428. package/tools/review_gate.py +502 -0
  429. package/tools/run_state.py +399 -0
  430. package/tools/save_trace.sh +477 -0
  431. package/tools/semantic_scholar_fetch.py +438 -0
  432. package/tools/skill-groups.tsv +116 -0
  433. package/tools/skill_picker.py +238 -0
  434. package/tools/smart_update.ps1 +521 -0
  435. package/tools/smart_update.sh +591 -0
  436. package/tools/smart_update_codex.sh +419 -0
  437. package/tools/smart_update_copilot.sh +605 -0
  438. package/tools/threat_scan.py +222 -0
  439. package/tools/verify_paper_audits.sh +487 -0
  440. package/tools/verify_papers.py +613 -0
  441. package/tools/verify_wiki_coverage.sh +176 -0
  442. package/tools/watchdog.py +485 -0
@@ -0,0 +1,401 @@
1
+ ---
2
+ name: experiment-queue
3
+ description: SSH job queue for multi-seed/multi-config ML experiments with OOM-aware retry, stale-screen cleanup, and wave-transition race prevention. Use when user says "batch experiments", "队列实验", "run grid", "multi-seed sweep", "auto-chain experiments", or when /run-experiment is insufficient for 10+ jobs that need orchestration.
4
+ argument-hint: "[manifest-or-grid-spec]"
5
+ allowed-tools: Bash(*), Read, Grep, Glob, Edit, Write, Skill(run-experiment), Skill(monitor-experiment)
6
+ ---
7
+
8
+ # Experiment Queue
9
+
10
+ Orchestrate large batches of ML experiments on SSH remote GPU servers with proper state tracking, OOM retry, stale cleanup, and wave transitions.
11
+
12
+ ## When to Use This Skill
13
+
14
+ Use when `/run-experiment` is insufficient:
15
+ - **≥10 jobs** that need batching across GPUs
16
+ - **Multi-seed sweeps** (e.g., 21 seeds × 12 cells)
17
+ - **Wave transitions** (run wave 1, wait, run wave 2, wait, run wave 3...)
18
+ - **Teacher+student chains** (train teacher then distill; auto-trigger student after teacher done)
19
+ - **OOM-prone configs** where you need to retry with different GPU or wait
20
+ - **Mixed seed grids** where failed cells need re-running
21
+
22
+ Do NOT use for:
23
+ - Single ad-hoc experiment (use `/run-experiment`)
24
+ - Modal/Vast.ai deployments (those have their own orchestration)
25
+ - Experiments that need manual inspection between runs
26
+
27
+ ## Why This Exists
28
+
29
+ Based on session audit (2026-04-16), the major wall-clock sinks in multi-seed grid experiments are:
30
+
31
+ 1. **Stale screens** — python finishes, wandb uploads, screen hangs, next wave blocked
32
+ 2. **OOM on shared GPU** — previous job's memory not yet released
33
+ 3. **Wave race** — new wave launches before previous wave fully settles
34
+ 4. **Missing checkpoints** — student launches before teacher saved
35
+ 5. **Parser duplication** — rewriting multi-seed analysis python every batch
36
+
37
+ All of these are pure engineering friction that can be orchestrated.
38
+
39
+ ## Core Concepts
40
+
41
+ > **Environment contract**: queue jobs assume the target env is already built
42
+ > and validated per `../shared-references/compute-env-contract.md` (spec-hash
43
+ > ledger + kernel witness). A wave of jobs dying at import time = the env
44
+ > contract was skipped, not a queue bug; check the provider's
45
+ > `.aris/compute/<provider>.md` ledger before re-queueing.
46
+
47
+ ### Job Manifest
48
+
49
+ A manifest lists jobs with explicit state:
50
+
51
+ ```yaml
52
+ project: my_grid_experiment
53
+ cwd: /home/user/your_project
54
+ conda: my_env
55
+ # Optional: override conda hook path if conda is not at a standard location.
56
+ # Can be a bare path (wrapped automatically) or a full `eval "$(... shell.bash hook)"` string.
57
+ # Falls back to auto-detect of ~/anaconda3, ~/miniconda3, /opt/anaconda3, etc.,
58
+ # or the ARIS_CONDA_HOOK environment variable.
59
+ # conda_hook: /custom/path/to/conda
60
+ ssh: gpu-server
61
+ default_cmd: >
62
+ python run_distill.py --backbone softmax --lam 0.5
63
+ --K 500 --L 96 --W 16 --n_steps 30000 --batch_size 128 --lr 1e-4
64
+
65
+ preconditions:
66
+ - type: checkpoint_exists
67
+ path: checkpoints/transformer/teacher_L96_K500_N{N}.pt
68
+
69
+ gpus: [0, 1, 2, 3, 4, 5, 6, 7]
70
+ max_parallel: 8
71
+ gpu_free_threshold_mib: 500 # optional, default 500; raise for shared servers, lower for tight packing
72
+ oom_retry:
73
+ delay: 120
74
+ max_attempts: 3
75
+
76
+ jobs:
77
+ - id: s200_N64_n50K
78
+ args: {seed: 200, n_hidden: 64, n_train_subset: 50000, subset_seed: 2024}
79
+ - id: s200_N128_n50K
80
+ args: {seed: 200, n_hidden: 128, n_train_subset: 50000, subset_seed: 2024}
81
+ # ... 14 more
82
+ ```
83
+
84
+ ### Job State Machine
85
+
86
+ ```
87
+ pending → running → completed
88
+ ↘ failed_oom → pending (after delay) [retry up to N]
89
+ ↘ failed_other → stuck (needs manual inspection)
90
+ stale screen (process gone, screen lingering) → failed_other → stuck
91
+ ```
92
+
93
+ > **Operator note on `stuck` (the agent's move, not the queue's):** the queue
94
+ > deterministically parks `failed_other` jobs as `stuck` — that part is code and
95
+ > unchanged. Before handing a `stuck` batch to the human, the OPERATING AGENT
96
+ > should check: if the same failure repeats across jobs, try ONE clean
97
+ > reimplement of the **agent-generated wrapper/attempt script only** — never
98
+ > user/project source, the manifest, queue state, logs, or results (per
99
+ > [`external-cadence.md`](../shared-references/external-cadence.md), "Let a broken attempt restart, not just patch").
100
+ > Reserve the human handoff for contract/environment doubts, not merely broken
101
+ > attempt code.
102
+
103
+ ### Wave Orchestration
104
+
105
+ A "wave" is a batch of jobs that fit available GPUs. Next wave only starts when:
106
+ 1. All current-wave python processes have exited
107
+ 2. No stale screens remain for current-wave tags
108
+ 3. GPU memory has dropped below threshold (≤500 MiB)
109
+ 4. Precondition checks pass for next-wave jobs
110
+
111
+ ## Workflow
112
+
113
+ ### Step 1: Parse Manifest / Build from Grid
114
+
115
+ Input can be:
116
+ - **YAML manifest** (explicit job list, recommended for complex cases)
117
+ - **Grid spec** (Cartesian product of param values, e.g., `N=[64,128,256] × n=[50K,150K,500K,652K]`)
118
+ - **Natural language description** (Claude parses into manifest)
119
+
120
+ Bind run identifiers once so every later step refers to the same paths:
121
+
122
+ ```bash
123
+ # REPLACE the placeholder path before running, or pre-export PROJECT_DIR:
124
+ PROJECT_DIR="${PROJECT_DIR:?set PROJECT_DIR to the local project root}"
125
+ RUN_TS=$(date -u +%Y%m%dT%H%M%SZ)
126
+ LOCAL_RUN_DIR="$PROJECT_DIR/experiment_queue/$RUN_TS"
127
+ mkdir -p "$LOCAL_RUN_DIR"
128
+ ```
129
+
130
+ Save the built manifest to `$LOCAL_RUN_DIR/manifest.json` for reproducibility.
131
+
132
+ ### Step 2: Pre-flight
133
+
134
+ - Check SSH connection works
135
+ - Check conda env exists on remote
136
+ - Check `cwd` exists on remote
137
+ - Check all preconditions (checkpoints, input files)
138
+ - Check GPU availability (at least `max_parallel` free GPUs)
139
+
140
+ If any precondition fails, show user which jobs are blocked and why.
141
+
142
+ ### Step 3: Launch Scheduler
143
+
144
+ Resolve the bundled helper directory (`$PROJECT_DIR` / `$RUN_TS` / `$LOCAL_RUN_DIR` already set in Step 1). Phase 3.3 (Arch C) moved the canonical scripts to `skills/experiment-queue/scripts/`; `tools/experiment_queue/` retains `os.execv` shims for legacy resolver layers:
145
+
146
+ ```bash
147
+ if [ -z "${ARIS_REPO:-}" ] && [ -f .aris/installed-skills-codex.txt ]; then
148
+ ARIS_REPO=$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills-codex.txt 2>/dev/null) || true
149
+ fi
150
+ [ -n "${ARIS_REPO:-}" ] || { echo "ERROR: ARIS_REPO not set. Use install_aris_codex.sh managed install or export ARIS_REPO=/path/to/ARIS."; exit 1; }
151
+ # Prefer the new canonical location; fall back to legacy tools/ shim path.
152
+ QUEUE_TOOLS="$ARIS_REPO/skills/experiment-queue/scripts"
153
+ [ -f "$QUEUE_TOOLS/queue_manager.py" ] || QUEUE_TOOLS="$ARIS_REPO/tools/experiment_queue"
154
+ [ -f "$QUEUE_TOOLS/queue_manager.py" ] || { echo "ERROR: queue_manager.py not found at $ARIS_REPO/skills/experiment-queue/scripts/ or $ARIS_REPO/tools/experiment_queue/"; exit 1; }
155
+ ```
156
+
157
+ Compute remote paths (note: modern `scp` runs in SFTP mode and does NOT reliably expand `$HOME` in destination paths — use remote-relative for `scp`, `$HOME`-prefixed for `ssh` command strings):
158
+
159
+ ```bash
160
+ REMOTE_RUN_REL=".aris_queue/runs/$RUN_TS"
161
+ REMOTE_RUN_DIR="\$HOME/$REMOTE_RUN_REL"
162
+ ```
163
+
164
+ Bootstrap remote run dir + copy helpers + copy manifest. Per-invocation, idempotent:
165
+
166
+ ```bash
167
+ ssh <server> "mkdir -p \"$REMOTE_RUN_DIR/logs\" \"\$HOME/.aris_queue\""
168
+ scp "$QUEUE_TOOLS/queue_manager.py" "$QUEUE_TOOLS/build_manifest.py" <server>:.aris_queue/
169
+ scp "$LOCAL_RUN_DIR/manifest.json" <server>:"$REMOTE_RUN_REL/manifest.json"
170
+ ```
171
+
172
+ Launch the scheduler as a detached `nohup` process:
173
+
174
+ ```bash
175
+ ssh <server> "nohup python3 \"\$HOME/.aris_queue/queue_manager.py\" \\
176
+ --manifest \"$REMOTE_RUN_DIR/manifest.json\" \\
177
+ --state \"$REMOTE_RUN_DIR/queue_state.json\" \\
178
+ --log-dir \"$REMOTE_RUN_DIR/logs\" \\
179
+ > \"$REMOTE_RUN_DIR/queue_mgr.log\" 2>&1 &"
180
+ ```
181
+
182
+ Notes: `--log-dir` is what `queue_manager.py` actually consumes (per-job log files for OOM detection). Do NOT pass `--log <path>` — that flag is declared but unused.
183
+
184
+ Persist run identifiers for monitoring + resume (sourceable later):
185
+
186
+ ```bash
187
+ {
188
+ printf 'PROJECT_DIR=%q\n' "$PROJECT_DIR"
189
+ printf 'RUN_TS=%q\n' "$RUN_TS"
190
+ printf 'LOCAL_RUN_DIR=%q\n' "$LOCAL_RUN_DIR"
191
+ printf 'REMOTE_RUN_REL=%q\n' "$REMOTE_RUN_REL"
192
+ printf 'REMOTE_RUN_DIR=%q\n' "$REMOTE_RUN_DIR"
193
+ } > "$LOCAL_RUN_DIR/run_meta.txt"
194
+ ```
195
+
196
+ `%q` shell-escapes values; `REMOTE_RUN_DIR` keeps a literal `$HOME` (correct for later reuse inside `ssh "..."`).
197
+
198
+ **Resume an existing queue.** Do NOT regenerate `RUN_TS`. Reload from `run_meta.txt` and re-run only the launch command above (not the bootstrap):
199
+
200
+ ```bash
201
+ LOCAL_RUN_DIR="/abs/path/to/project/experiment_queue/<existing-run-ts>"
202
+ . "$LOCAL_RUN_DIR/run_meta.txt"
203
+ # Then re-run the launch command verbatim; do NOT re-run mkdir/scp.
204
+ ```
205
+
206
+ The scheduler:
207
+ - Reads manifest
208
+ - Loops: for each pending job, assign to free GPU, launch via `screen`
209
+ - Polls job status (every 60s)
210
+ - Detects stale screens (python exited but screen detached → kill)
211
+ - Detects OOM (CUDA OOM in log → mark failed_oom → retry after delay)
212
+ - Detects completion (expected output JSON/file exists) → mark completed
213
+ - Launches next wave when current wave settles
214
+ - Writes state to `queue_state.json` continuously
215
+
216
+ ### Step 4: Monitoring
217
+
218
+ User can check state anytime, using `$REMOTE_RUN_DIR` from Step 3 (or reload it from `$LOCAL_RUN_DIR/run_meta.txt`):
219
+
220
+ ```bash
221
+ ssh <server> "cat \"$REMOTE_RUN_DIR/queue_state.json\"" \
222
+ | jq '.jobs | group_by(.status) | map({(.[0].status): length}) | add'
223
+ ```
224
+
225
+ Note: `/monitor-experiment` is currently focused on screen sessions, result JSONs, and W&B; it does not yet read `queue_state.json` directly. For queue-state monitoring, use the literal command above.
226
+
227
+ ### Step 5: Post-completion
228
+
229
+ When all jobs in `manifest.json` are `completed` or `stuck`:
230
+ - The remote scheduler (`queue_manager.py`) exits cleanly with `All jobs done` to its own stdout (captured in `$REMOTE_RUN_DIR/queue_mgr.log`). It does NOT write the local summary.
231
+ - The **local** skill agent then aggregates state into `$LOCAL_RUN_DIR/summary.md` (read `$REMOTE_RUN_DIR/queue_state.json`, group by status, optionally pull per-job logs).
232
+ - Local skill agent invokes `/analyze-results` if `analyze_on_complete: true`.
233
+
234
+ ## Grid Spec Syntax
235
+
236
+ Instead of writing 24 job entries manually:
237
+
238
+ ```yaml
239
+ grid:
240
+ N: [64, 128, 256]
241
+ n: [50000, 150000, 500000, 652000]
242
+ seed: [42, 200, 201]
243
+ template:
244
+ id: "s${seed}_N${N}_n${n}"
245
+ args: {seed: ${seed}, n_hidden: ${N}, n_train_subset: ${n}}
246
+ ```
247
+
248
+ Expands to 36 jobs automatically.
249
+
250
+ ## Wave Chaining
251
+
252
+ For sequential phases (teacher → student):
253
+
254
+ ```yaml
255
+ phases:
256
+ - name: train_teachers
257
+ grid:
258
+ N: [384, 512]
259
+ template:
260
+ cmd: python run_train.py --direction c --backbone softmax --n_hidden ${N} ...
261
+ expected_output: checkpoints/transformer/teacher_L96_K500_N${N}.pt
262
+
263
+ - name: distill_students
264
+ depends_on: [train_teachers] # must be a LIST, even for a single dependency
265
+ grid:
266
+ N: [384, 512]
267
+ seed: [42, 200, 201]
268
+ template:
269
+ cmd: python run_distill.py --n_hidden ${N} --seed ${seed} ...
270
+ expected_output: figures/distill_sw_N${N}_*_seed${seed}.json
271
+ ```
272
+
273
+ Scheduler enforces `depends_on`: `distill_students` jobs stay `pending` until every
274
+ `train_teachers` job is terminal — `completed` **or** `stuck`. A failed teacher does not
275
+ hold its students back, so check `queue_state.json` for `stuck` jobs before trusting a
276
+ dependent wave.
277
+
278
+ ## OOM Handling
279
+
280
+ Detect OOM from stdout:
281
+ ```regex
282
+ torch\.OutOfMemoryError: CUDA out of memory
283
+ ```
284
+
285
+ On detection:
286
+ 1. Mark job `failed_oom`
287
+ 2. Kill screen
288
+ 3. Wait `oom_retry.delay` seconds
289
+ 4. Check if current GPU is free; if not, try another free GPU
290
+ 5. Requeue as `pending`
291
+ 6. Max `oom_retry.max_attempts` before marking `stuck`
292
+
293
+ ## Stale Screen Detection
294
+
295
+ Every 60s, for each running screen:
296
+ 1. Check screen exists (`screen -ls`)
297
+ 2. Check python PID still running (`ps -p`)
298
+ 3. If screen exists but python exited:
299
+ - If expected output file exists → mark `completed`, kill stale screen
300
+ - If no output file → mark `failed_other`, kill screen
301
+
302
+ ## Resume-on-restart
303
+
304
+ If scheduler crashes / is killed:
305
+ 1. Read `queue_state.json`
306
+ 2. For each `running` job: check screen; if still alive, keep; if not, re-evaluate state
307
+ 3. For each `pending`: continue normally
308
+ 4. Idempotent: safe to restart scheduler without losing state
309
+
310
+ ## Output: Summary Report
311
+
312
+ ```markdown
313
+ # Experiment Queue Summary
314
+
315
+ **Project**: my_grid_experiment
316
+ **Started**: 2026-04-16 11:36:29
317
+ **Completed**: 2026-04-16 18:02:14
318
+ **Total wall-clock**: 6h 25m
319
+ **Jobs**: 40 completed, 2 OOM-retried then completed, 0 stuck
320
+
321
+ ## Phases
322
+ | Phase | Jobs | Success | OOM retries | Duration |
323
+ | --- | --- | --- | --- | --- |
324
+ | train_teachers | 2 | 2 | 0 | 58m |
325
+ | distill_students | 24 | 24 | 2 | 4h 02m |
326
+ | multi_seed_validation | 16 | 16 | 0 | 1h 25m |
327
+
328
+ ## Results Files
329
+ - 42 JSON files in `figures/distill_sw_*.json`
330
+
331
+ ## Next Steps
332
+ - Run `/analyze-results` on output JSONs
333
+ - Figures auto-regen via `artifact-sync` (if configured)
334
+ ```
335
+
336
+ ## Comparison with `/run-experiment`
337
+
338
+ | Feature | `/run-experiment` | `experiment-queue` |
339
+ | --- | --- | --- |
340
+ | Single-shot experiment | ✅ | ✅ (overkill) |
341
+ | Multi-GPU parallel | Basic | Proper scheduling |
342
+ | Wave transitions | Manual | Automatic |
343
+ | OOM retry | Manual | Automatic |
344
+ | Stale screen cleanup | Manual | Automatic |
345
+ | Teacher→student chain | Manual | Built-in |
346
+ | State persistence | No | Yes (JSON) |
347
+ | Resume on crash | No | Yes |
348
+ | Grid expansion | Manual | Declarative |
349
+
350
+ **Rule**: Use `/run-experiment` for ≤5 jobs. Use `experiment-queue` for ≥10 jobs or anything with phases.
351
+
352
+ ## Key Rules
353
+
354
+ - **Never overlap screens on the same GPU** — always wait for `memory.used < 500 MiB` before launching new job
355
+ - **Always write state to disk** — every state change flushed to `queue_state.json`
356
+ - **Idempotent scheduler** — safe to restart; picks up from state file
357
+ - **Expected-output-based completion** — don't trust screen state alone; verify output file exists
358
+ - **Bounded retry** — max N OOM retries, then mark `stuck` and alert
359
+ - **Dependencies enforced at launch** — a wave launches only after every job in the phases it
360
+ depends on has reached a terminal state. Note "terminal" includes `stuck`: if a teacher job
361
+ fails, the phase still completes and its students launch against a missing checkpoint. Check
362
+ `queue_state.json` for `stuck` jobs before trusting a dependent wave's results.
363
+
364
+ ## Known Failure Modes
365
+
366
+ - **SSH connection drop during scheduling**: scheduler keeps running on remote (nohup), just reconnect and check
367
+ - **GPU reservation by another user**: scheduler waits, does not pre-empt
368
+ - **Disk full on remote**: scheduler detects write failure, marks all pending `stuck`, alerts
369
+
370
+ ## Example Session
371
+
372
+ User: "跑 T5+T6 全部实验:T5 = N∈{80,192} × n 4 values × seed {200,201}, T6 = N∈{384,512} × n 4 values × seed {42,200,201}; T6 需要先 train teacher"
373
+
374
+ Claude invokes `/experiment-queue`:
375
+ 1. Parses description into 2-phase manifest
376
+ 2. Phase 1: T5 (16 jobs, no teacher dependency) + T6 teacher training (2 jobs)
377
+ 3. Phase 2: T6 distillation (24 jobs, depends on teachers)
378
+ 4. Deploys scheduler via nohup
379
+ 5. Reports: "Scheduler PID 93534, total 42 jobs, estimated 6-7h wall-clock"
380
+
381
+ Then user can check anytime or wait for summary report.
382
+
383
+ ## See Also
384
+
385
+ - `/run-experiment` — single experiment deployment
386
+ - `/monitor-experiment` — check progress (now reads from queue_state.json)
387
+ - `/analyze-results` — post-hoc analysis
388
+ - `skills/experiment-queue/scripts/queue_manager.py` (canonical, Phase 3.3 move) — the scheduler implementation. Legacy entry at `tools/experiment_queue/queue_manager.py` is an `os.execv` shim.
389
+ - `skills/experiment-queue/scripts/build_manifest.py` (canonical, Phase 3.3 move) — build manifest from grid spec. Legacy entry at `tools/experiment_queue/build_manifest.py` is an `os.execv` shim.
390
+
391
+ ## Rationale / Source
392
+
393
+ Identified via 2026-04-16 post-mortem analysis (Codex GPT-5.5 xhigh) of a 1.5-day
394
+ multi-seed paper experiment session:
395
+
396
+ - Wall-clock sink: stale screens, OOM, wave transitions, manual parser
397
+ - Token sink: re-writing orchestration code each session
398
+ - Cognitive sink: tracking which cells succeeded, which failed, which to retry
399
+
400
+ This skill targets the wall-clock sink specifically; see `artifact-sync` and
401
+ `paper-fix-auto-apply` for the other two.
@@ -0,0 +1,155 @@
1
+ ---
2
+ name: "feishu-notify"
3
+ description: "Send notifications to Feishu/Lark. Internal utility used by other skills, or manually via /feishu-notify. Use when user says \"发飞书\", \"notify feishu\", or other skills need to send status updates."
4
+ ---
5
+
6
+ # Feishu/Lark Notification
7
+
8
+ Send a notification: **$ARGUMENTS**
9
+
10
+ ## Overview
11
+
12
+ This skill provides Feishu/Lark integration for ARIS. It is designed as an **internal utility** — other skills call it at key events (experiment done, review scored, checkpoint waiting). It can also be invoked manually.
13
+
14
+ **Zero-impact guarantee**: If no `feishu.json` config exists, this skill does nothing and returns silently. All existing workflows are completely unaffected.
15
+
16
+ ## Configuration
17
+
18
+ The skill reads `~/.codex/feishu.json`. If this file does not exist, **all Feishu functionality is disabled** — skills behave exactly as before.
19
+
20
+ ### Config Format
21
+
22
+ ```json
23
+ {
24
+ "mode": "push",
25
+ "webhook_url": "https://open.feishu.cn/open-apis/bot/v2/hook/YOUR_WEBHOOK_ID",
26
+ "interactive": {
27
+ "bridge_url": "http://localhost:5000",
28
+ "timeout_seconds": 300
29
+ }
30
+ }
31
+ ```
32
+
33
+ ### Modes
34
+
35
+ | Mode | `"mode"` value | What it does | Requires |
36
+ |------|----------------|--------------|----------|
37
+ | **Off** | `"off"` or file absent | Nothing. Pure CLI as-is | Nothing |
38
+ | **Push only** | `"push"` | Send webhook notifications at key events. Mobile push, no reply | Feishu bot webhook URL |
39
+ | **Interactive** | `"interactive"` | Full bidirectional. Approve/reject from Feishu, reply to checkpoints | [feishu-claude-code](https://github.com/joewongjc/feishu-claude-code) running |
40
+
41
+ ## Workflow
42
+
43
+ ### Step 1: Read Config
44
+
45
+ ```bash
46
+ cat ~/.codex/feishu.json 2>/dev/null
47
+ ```
48
+
49
+ - **File not found** → return silently, do nothing
50
+ - **`"mode": "off"`** → return silently, do nothing
51
+ - **`"mode": "push"`** → proceed to Step 2 (push)
52
+ - **`"mode": "interactive"`** → proceed to Step 3 (interactive)
53
+
54
+ ### Step 2: Push Notification (webhook)
55
+
56
+ Send a rich card to the Feishu webhook:
57
+
58
+ ```bash
59
+ curl -s -X POST "$WEBHOOK_URL" \
60
+ -H "Content-Type: application/json" \
61
+ -d '{
62
+ "msg_type": "interactive",
63
+ "card": {
64
+ "header": {
65
+ "title": {"tag": "plain_text", "content": "TITLE"},
66
+ "template": "COLOR"
67
+ },
68
+ "elements": [
69
+ {"tag": "markdown", "content": "BODY"}
70
+ ]
71
+ }
72
+ }'
73
+ ```
74
+
75
+ **Card templates by event type:**
76
+
77
+ | Event | Title | Color | Body |
78
+ |-------|-------|-------|------|
79
+ | `experiment_done` | Experiment Complete | `green` | Results table, delta vs baseline |
80
+ | `review_scored` | Review Round N: X/10 | `blue` (≥6) / `orange` (<6) | Score, verdict, top 3 weaknesses |
81
+ | `checkpoint` | Checkpoint: Waiting for Input | `yellow` | Question, options, context |
82
+ | `error` | Error: [type] | `red` | Error message, what failed |
83
+ | `pipeline_done` | Pipeline Complete | `purple` | Final summary, deliverables |
84
+ | `custom` | Custom | `blue` | Free-form message from $ARGUMENTS |
85
+
86
+ **Return immediately after curl** — push mode never waits for a response.
87
+
88
+ ### Step 3: Interactive Notification (bidirectional)
89
+
90
+ Interactive mode uses [feishu-claude-code](https://github.com/joewongjc/feishu-claude-code) as a bridge:
91
+
92
+ 1. **Send message** to the bridge:
93
+ ```bash
94
+ curl -s -X POST "$BRIDGE_URL/send" \
95
+ -H "Content-Type: application/json" \
96
+ -d '{"type": "EVENT_TYPE", "title": "TITLE", "body": "BODY", "options": ["approve", "reject", "custom"]}'
97
+ ```
98
+
99
+ 2. **Wait for reply** (with timeout):
100
+ ```bash
101
+ curl -s "$BRIDGE_URL/poll?timeout=$TIMEOUT_SECONDS"
102
+ ```
103
+ Returns: `{"reply": "approve"}` or `{"reply": "reject"}` or `{"reply": "user typed message"}` or `{"timeout": true}`
104
+
105
+ 3. **On timeout**: Fall back to `AUTO_PROCEED` behavior (proceed with default option).
106
+
107
+ 4. **Return the user's reply** to the calling skill so it can act on it.
108
+
109
+ ### Step 4: Verify Delivery
110
+
111
+ - **Push mode**: Check curl exit code. If non-zero, log warning but do NOT block the workflow.
112
+ - **Interactive mode**: If bridge is unreachable, fall back to push mode (if webhook configured) or skip silently.
113
+
114
+ ## Helper Function (for other skills)
115
+
116
+ Other skills should use this pattern to send notifications:
117
+
118
+ ```markdown
119
+ ### Feishu Notification (if configured)
120
+
121
+ Check if `~/.codex/feishu.json` exists and mode is not "off":
122
+ - If **push** mode: send webhook notification with event summary
123
+ - If **interactive** mode: send notification and wait for user reply
124
+ - If **off** or file absent: skip entirely (no-op)
125
+ ```
126
+
127
+ **This check is always guarded.** If the config file doesn't exist, the skill skips the notification block entirely — zero overhead, zero side effects.
128
+
129
+ ## Event Catalog
130
+
131
+ Skills send these events at these moments:
132
+
133
+ | Skill | Event | When |
134
+ |-------|-------|------|
135
+ | `/auto-review-loop` | `review_scored` | After each round's review score |
136
+ | `/auto-review-loop` | `pipeline_done` | Loop complete (positive or max rounds) |
137
+ | `/auto-paper-improvement-loop` | `review_scored` | After each round's review score |
138
+ | `/auto-paper-improvement-loop` | `pipeline_done` | All rounds complete |
139
+ | `/run-experiment` | `experiment_done` | Screen session finishes |
140
+ | `/idea-discovery` | `checkpoint` | Between phases (if interactive) |
141
+ | `/idea-discovery` | `pipeline_done` | Final report ready |
142
+ | `/monitor-experiment` | `experiment_done` | Results collected |
143
+ | `/research-pipeline` | `checkpoint` | Between workflow stages |
144
+ | `/research-pipeline` | `pipeline_done` | Full pipeline complete |
145
+
146
+ ## Key Rules
147
+
148
+ - **NEVER block a workflow** because Feishu is unreachable. Always fail open.
149
+ - **NEVER require Feishu config** — all skills must work without it.
150
+ - **Config file absent = mode off.** No error, no warning, no log.
151
+ - **Push mode is fire-and-forget.** Send curl, check exit code, move on.
152
+ - **Interactive timeout = auto-proceed.** Don't hang forever waiting for a reply.
153
+ - **Respect `AUTO_PROCEED`**: In interactive mode, if the user doesn't reply within timeout, use the same auto-proceed logic as the calling skill.
154
+ - **No secrets in notifications.** Never include API keys, tokens, or passwords in Feishu messages.
155
+
@@ -0,0 +1,138 @@
1
+ ---
2
+ name: figure-description
3
+ description: "Process user-provided patent figures and generate formal drawing descriptions. Use when user says \"附图处理\", \"figure description\", \"附图说明\", \"drawings description\", or wants to describe patent figures with reference numerals."
4
+ argument-hint: "[figure-directory-or-figure-list]"
5
+ allowed-tools: Bash(*), Read, Write, Edit, Grep, Glob, WebSearch, WebFetch
6
+ ---
7
+
8
+ # Figure Description for Patents
9
+
10
+ Process patent figures and generate drawing descriptions based on: **$ARGUMENTS**
11
+
12
+ Unlike `/paper-figure` which generates data plots, this skill processes user-provided technical diagrams and assigns reference numerals.
13
+
14
+ ## Constants
15
+
16
+ - `FIGURE_DIR = "patent/figures/"` — Output directory for figure descriptions
17
+ - `REFERENCE_NUMERAL_PREFIX = 100` — Starting numeral for first figure's components
18
+ - `NUMERAL_SERIES = 100` — Each figure uses a separate 100-series (Fig 1: 100-199, Fig 2: 200-299, etc.)
19
+
20
+ ## Inputs
21
+
22
+ 1. User-provided figures (PNG, JPG, SVG, PDF) — search for them in the project directory
23
+ 2. `patent/INVENTION_DISCLOSURE.md` — for understanding what components to identify
24
+ 3. `patent/CLAIMS.md` — for mapping numerals to claim elements
25
+
26
+ ## Workflow
27
+
28
+ ### Step 1: Discover Figures
29
+
30
+ 1. Search the project directory for figure files:
31
+ - Check `patent/figures/`, `figures/`, root directory
32
+ - Look for PNG, JPG, SVG, PDF files
33
+ - Check INVENTION_BRIEF.md or INVENTION_DISCLOSURE.md for figure references
34
+ 2. List all discovered figures with their paths
35
+ 3. If figures are missing that claims require, note them as `[MISSING: description needed]`
36
+
37
+ ### Step 2: Analyze Each Figure
38
+
39
+ For each figure found:
40
+
41
+ 1. **Read the image** using the Read tool (supports image files)
42
+ 2. **Identify components**: What labeled or visually distinct components are shown?
43
+ 3. **Identify connections**: How do components relate to each other?
44
+ 4. **Identify flow**: If it's a flowchart or sequence, what is the step order?
45
+
46
+ ### Step 3: Assign Reference Numerals
47
+
48
+ For each figure, assign numerals using the series convention:
49
+
50
+ | Figure | Numeral Range |
51
+ |--------|-------------|
52
+ | FIG. 1 | 100-199 |
53
+ | FIG. 2 | 200-299 |
54
+ | FIG. 3 | 300-399 |
55
+
56
+ For each identified component:
57
+ - Assign the next available numeral in the series
58
+ - Cross-reference to the claim elements it supports
59
+ - Note if a component appears in multiple figures (use same numeral across figures)
60
+
61
+ ### Step 4: Generate Drawing Descriptions
62
+
63
+ Write formal drawing descriptions (附图说明):
64
+
65
+ **For CN jurisdiction (Chinese)**:
66
+ ```
67
+ 图1是[发明名称]的系统结构示意图;
68
+ 图2是[发明名称]的方法流程图;
69
+ 图3是[具体组件]的详细结构示意图;
70
+ ```
71
+
72
+ **For US/EP jurisdiction (English)**:
73
+ ```
74
+ FIG. 1 is a block diagram illustrating the system architecture according to one embodiment;
75
+ FIG. 2 is a flowchart illustrating the method steps according to one embodiment;
76
+ FIG. 3 is a detailed view of the processing module of FIG. 1;
77
+ ```
78
+
79
+ ### Step 5: Generate Reference Numeral Index
80
+
81
+ Create a complete mapping:
82
+
83
+ ```markdown
84
+ ## Reference Numeral Index
85
+
86
+ | Numeral | Component Name | Figure(s) | Claim Element |
87
+ |---------|---------------|-----------|---------------|
88
+ | 100 | System | FIG. 1 | Claim X preamble |
89
+ | 102 | Processor | FIG. 1 | Claim X, element 1 |
90
+ | 104 | Memory | FIG. 1 | Claim X, element 2 |
91
+ | 106 | Communication bus | FIG. 1 | Claim X, element 3 |
92
+ | 200 | Method | FIG. 2 | Claim 1 preamble |
93
+ | 202 | Receiving step | FIG. 2 | Claim 1, step 1 |
94
+ | 204 | Processing step | FIG. 2 | Claim 1, step 2 |
95
+ ```
96
+
97
+ ### Step 6: Cross-Reference to Claims
98
+
99
+ Verify that every claim element has at least one reference numeral:
100
+
101
+ | Claim Element | Figure | Numeral | Status |
102
+ |---------------|--------|---------|--------|
103
+ | [element] | [which fig] | [numeral] | Covered / [MISSING] |
104
+
105
+ If any claim element has no corresponding figure or numeral, flag it:
106
+ - `[MISSING FIGURE: Need a diagram showing {element description}]`
107
+ - `[MISSING NUMERAL: Component {name} in figure {X} needs a numeral]`
108
+
109
+ ### Step 7: Output
110
+
111
+ Write `patent/figures/figure_descriptions.md`:
112
+ ```markdown
113
+ ## Figure Descriptions
114
+
115
+ ### FIG. 1 — [Description]
116
+ [Formal one-paragraph description with all reference numerals]
117
+
118
+ ### FIG. 2 — [Description]
119
+ [Formal one-paragraph description with all reference numerals]
120
+ ...
121
+ ```
122
+
123
+ Write `patent/figures/numeral_index.md`:
124
+ ```markdown
125
+ ## Reference Numeral Index
126
+
127
+ [Complete table of all numerals, components, figures, and claim mappings]
128
+ ```
129
+
130
+ ## Key Rules
131
+
132
+ - Every component in every figure must have a reference numeral.
133
+ - Every reference numeral must be explained in the specification.
134
+ - Numeral series must be consistent: 100-series for FIG. 1, 200-series for FIG. 2.
135
+ - If the same component appears in multiple figures, use the SAME numeral.
136
+ - Do NOT modify user-provided figures -- only describe them.
137
+ - Flag missing figures that the claims require but the user has not provided.
138
+ - Drawing descriptions are one sentence each, in a consistent format.