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.
- package/LICENSE +21 -0
- package/README.md +98 -0
- package/README_CN.md +87 -0
- package/dsh/checkout.patch.yml +38 -0
- package/dsh/client.js +634 -0
- package/dsh/cordis.patch.yml +44 -0
- package/dsh/index.mjs +76 -0
- package/dsh/run-status.mjs +182 -0
- package/dsh/scope-limits.mjs +50 -0
- package/dsh/workbench.mjs +291 -0
- package/mcp-servers/claude-review/README.md +93 -0
- package/mcp-servers/claude-review/run_with_claude_aws.sh +49 -0
- package/mcp-servers/claude-review/server.py +718 -0
- package/mcp-servers/codex-image2/README.md +65 -0
- package/mcp-servers/codex-image2/server.py +893 -0
- package/mcp-servers/feishu-bridge/requirements.txt +1 -0
- package/mcp-servers/feishu-bridge/server.py +240 -0
- package/mcp-servers/gemini-review/README.md +171 -0
- package/mcp-servers/gemini-review/server.py +1856 -0
- package/mcp-servers/llm-chat/requirements.txt +1 -0
- package/mcp-servers/llm-chat/server.py +664 -0
- package/mcp-servers/manual-review/README.md +133 -0
- package/mcp-servers/manual-review/server.py +910 -0
- package/mcp-servers/manual-review/ui.html +279 -0
- package/mcp-servers/minimax-chat/requirements.txt +1 -0
- package/mcp-servers/minimax-chat/server.py +381 -0
- package/package.json +51 -0
- package/skills/ablation-planner/SKILL.md +123 -0
- package/skills/alphaxiv/SKILL.md +196 -0
- package/skills/analyze-results/SKILL.md +46 -0
- package/skills/arxiv/SKILL.md +248 -0
- package/skills/auto-paper-improvement-loop/SKILL.md +651 -0
- package/skills/auto-review-loop/SKILL.md +1137 -0
- package/skills/auto-review-loop-llm/SKILL.md +259 -0
- package/skills/auto-review-loop-minimax/SKILL.md +302 -0
- package/skills/citation-audit/SKILL.md +502 -0
- package/skills/claims-drafting/SKILL.md +227 -0
- package/skills/comm-lit-review/SKILL.md +297 -0
- package/skills/deepxiv/SKILL.md +263 -0
- package/skills/dse-loop/SKILL.md +296 -0
- package/skills/embodiment-description/SKILL.md +129 -0
- package/skills/exa-search/SKILL.md +205 -0
- package/skills/experiment-audit/SKILL.md +311 -0
- package/skills/experiment-bridge/SKILL.md +376 -0
- package/skills/experiment-plan/SKILL.md +249 -0
- package/skills/experiment-queue/SKILL.md +431 -0
- package/skills/experiment-queue/scripts/build_manifest.py +142 -0
- package/skills/experiment-queue/scripts/queue_manager.py +433 -0
- package/skills/feishu-notify/SKILL.md +156 -0
- package/skills/figure-description/SKILL.md +138 -0
- package/skills/figure-spec/SKILL.md +262 -0
- package/skills/figure-spec/scripts/figure_renderer.py +799 -0
- package/skills/formula-derivation/SKILL.md +280 -0
- package/skills/gemini-search/SKILL.md +231 -0
- package/skills/grant-proposal/SKILL.md +698 -0
- package/skills/idea-creator/SKILL.md +542 -0
- package/skills/idea-discovery/SKILL.md +521 -0
- package/skills/idea-discovery-robot/SKILL.md +363 -0
- package/skills/integrity-forensics/SKILL.md +284 -0
- package/skills/interview-cheatsheet/SKILL.md +245 -0
- package/skills/invention-structuring/SKILL.md +188 -0
- package/skills/jurisdiction-format/SKILL.md +192 -0
- package/skills/kill-argument/SKILL.md +437 -0
- package/skills/mermaid-diagram/SKILL.md +419 -0
- package/skills/meta-apply/SKILL.md +141 -0
- package/skills/meta-optimize/SKILL.md +437 -0
- package/skills/monitor-experiment/SKILL.md +140 -0
- package/skills/novelty-check/SKILL.md +101 -0
- package/skills/openalex/SKILL.md +237 -0
- package/skills/overleaf-sync/SKILL.md +220 -0
- package/skills/paper-claim-audit/SKILL.md +348 -0
- package/skills/paper-compile/SKILL.md +266 -0
- package/skills/paper-figure/SKILL.md +312 -0
- package/skills/paper-illustration/SKILL.md +736 -0
- package/skills/paper-illustration-image2/SKILL.md +391 -0
- package/skills/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
- package/skills/paper-plan/SKILL.md +386 -0
- package/skills/paper-poster/SKILL.md +19 -0
- package/skills/paper-poster-html/DESIGN_FINAL.md +176 -0
- package/skills/paper-poster-html/IMPLEMENTATION_CONVENTIONS.md +161 -0
- package/skills/paper-poster-html/LICENSES/posterly-MIT.txt +21 -0
- package/skills/paper-poster-html/NOTICE.md +57 -0
- package/skills/paper-poster-html/SKILL.md +323 -0
- package/skills/paper-poster-html/scripts/_posterly/__init__.py +0 -0
- package/skills/paper-poster-html/scripts/_posterly/canvas.py +200 -0
- package/skills/paper-poster-html/scripts/_posterly/measure.py +588 -0
- package/skills/paper-poster-html/scripts/_posterly/polish.py +498 -0
- package/skills/paper-poster-html/scripts/_posterly/preflight.py +489 -0
- package/skills/paper-poster-html/scripts/_posterly/render.py +215 -0
- package/skills/paper-poster-html/scripts/_posterly/textutil.py +16 -0
- package/skills/paper-poster-html/scripts/_posterly/verify_final.py +171 -0
- package/skills/paper-poster-html/scripts/asset_check.py +897 -0
- package/skills/paper-poster-html/scripts/extract_pdf_figures.py +666 -0
- package/skills/paper-poster-html/scripts/poster_check.py +251 -0
- package/skills/paper-poster-html/scripts/preprocess_figures.py +238 -0
- package/skills/paper-poster-html/scripts/render_preview.py +217 -0
- package/skills/paper-poster-html/scripts/run_gates.py +556 -0
- package/skills/paper-poster-html/scripts/style_check.py +1324 -0
- package/skills/paper-poster-html/templates/COMPONENTS.md +462 -0
- package/skills/paper-poster-html/templates/README.md +170 -0
- package/skills/paper-poster-html/templates/landscape_4col.html +1032 -0
- package/skills/paper-poster-html/templates/landscape_hero.html +1046 -0
- package/skills/paper-poster-html/templates/portrait_2col.html +947 -0
- package/skills/paper-poster-html/templates/tokens/acl.json +9 -0
- package/skills/paper-poster-html/templates/tokens/cvpr.json +9 -0
- package/skills/paper-poster-html/templates/tokens/generic.json +9 -0
- package/skills/paper-poster-html/templates/tokens/iclr.json +9 -0
- package/skills/paper-poster-html/templates/tokens/icml.json +9 -0
- package/skills/paper-poster-html/templates/tokens/neurips.json +9 -0
- package/skills/paper-slides/SKILL.md +635 -0
- package/skills/paper-talk/SKILL.md +381 -0
- package/skills/paper-write/SKILL.md +604 -0
- package/skills/paper-write/templates/IEEEtran.bst +2409 -0
- package/skills/paper-write/templates/IEEEtran.cls +6347 -0
- package/skills/paper-write/templates/iclr2026.tex +84 -0
- package/skills/paper-write/templates/icml2025.tex +87 -0
- package/skills/paper-write/templates/ieee_conference.tex +89 -0
- package/skills/paper-write/templates/ieee_journal.tex +93 -0
- package/skills/paper-write/templates/math_commands.tex +48 -0
- package/skills/paper-write/templates/neurips2025.tex +80 -0
- package/skills/paper-writing/SKILL.md +916 -0
- package/skills/patent-novelty-check/SKILL.md +153 -0
- package/skills/patent-pipeline/SKILL.md +344 -0
- package/skills/patent-review/SKILL.md +203 -0
- package/skills/pixel-art/SKILL.md +137 -0
- package/skills/prior-art-search/SKILL.md +146 -0
- package/skills/proof-checker/SKILL.md +866 -0
- package/skills/proof-orchestrator/NOTICE.md +24 -0
- package/skills/proof-orchestrator/SKILL.md +254 -0
- package/skills/proof-orchestrator/references/audit-output-contract.md +126 -0
- package/skills/proof-orchestrator/references/deepseek-routing.md +74 -0
- package/skills/proof-orchestrator/references/dispatch-prompts.md +227 -0
- package/skills/proof-orchestrator/references/notation-audit.md +135 -0
- package/skills/proof-orchestrator/references/proof-audit-rubric.md +70 -0
- package/skills/proof-orchestrator/references/stress-tests.md +38 -0
- package/skills/proof-writer/SKILL.md +223 -0
- package/skills/qzcli/SKILL.md +324 -0
- package/skills/rebuttal/SKILL.md +376 -0
- package/skills/render-html/SKILL.md +316 -0
- package/skills/render-html/scripts/render_html.py +1006 -0
- package/skills/render-html/scripts/templates/academic.html +703 -0
- package/skills/render-html/scripts/templates/dashboard.html +333 -0
- package/skills/research-lit/SKILL.md +756 -0
- package/skills/research-pipeline/SKILL.md +384 -0
- package/skills/research-refine/SKILL.md +770 -0
- package/skills/research-refine-pipeline/SKILL.md +186 -0
- package/skills/research-review/SKILL.md +198 -0
- package/skills/research-wiki/SKILL.md +461 -0
- package/skills/resubmit-pipeline/SKILL.md +447 -0
- package/skills/result-to-claim/SKILL.md +311 -0
- package/skills/run-experiment/SKILL.md +313 -0
- package/skills/semantic-scholar/SKILL.md +236 -0
- package/skills/serverless-modal/SKILL.md +335 -0
- package/skills/shared-references/acceptance-gate.md +324 -0
- package/skills/shared-references/assurance-contract.md +248 -0
- package/skills/shared-references/capture-antipatterns.md +78 -0
- package/skills/shared-references/citation-discipline.md +583 -0
- package/skills/shared-references/compute-env-contract.md +163 -0
- package/skills/shared-references/effort-contract.md +183 -0
- package/skills/shared-references/evidence-precheck.md +65 -0
- package/skills/shared-references/experiment-integrity.md +49 -0
- package/skills/shared-references/external-cadence.md +326 -0
- package/skills/shared-references/fan-out-pattern.md +366 -0
- package/skills/shared-references/injection-hygiene.md +127 -0
- package/skills/shared-references/integration-contract.md +461 -0
- package/skills/shared-references/output-composition.md +93 -0
- package/skills/shared-references/output-language.md +45 -0
- package/skills/shared-references/output-manifest.md +49 -0
- package/skills/shared-references/output-versioning.md +111 -0
- package/skills/shared-references/patent-format-cn.md +199 -0
- package/skills/shared-references/patent-format-ep.md +173 -0
- package/skills/shared-references/patent-format-us.md +161 -0
- package/skills/shared-references/patent-writing-principles.md +197 -0
- package/skills/shared-references/prior-art-databases.md +141 -0
- package/skills/shared-references/resumable-runs.md +109 -0
- package/skills/shared-references/review-scope-limits.md +81 -0
- package/skills/shared-references/review-tracing.md +391 -0
- package/skills/shared-references/reviewer-independence.md +79 -0
- package/skills/shared-references/reviewer-routing.md +852 -0
- package/skills/shared-references/skill-governance.md +104 -0
- package/skills/shared-references/taste-calibration.md +85 -0
- package/skills/shared-references/venue-checklists.md +114 -0
- package/skills/shared-references/wiki-helper-resolution.md +134 -0
- package/skills/shared-references/writing-principles.md +525 -0
- package/skills/skills-codex/README.md +102 -0
- package/skills/skills-codex/README_CN.md +100 -0
- package/skills/skills-codex/ablation-planner/SKILL.md +126 -0
- package/skills/skills-codex/alphaxiv/SKILL.md +186 -0
- package/skills/skills-codex/analyze-results/SKILL.md +45 -0
- package/skills/skills-codex/arxiv/SKILL.md +210 -0
- package/skills/skills-codex/auto-paper-improvement-loop/SKILL.md +574 -0
- package/skills/skills-codex/auto-review-loop/SKILL.md +500 -0
- package/skills/skills-codex/auto-review-loop-llm/SKILL.md +247 -0
- package/skills/skills-codex/auto-review-loop-minimax/SKILL.md +290 -0
- package/skills/skills-codex/citation-audit/SKILL.md +504 -0
- package/skills/skills-codex/claims-drafting/SKILL.md +239 -0
- package/skills/skills-codex/comm-lit-review/SKILL.md +299 -0
- package/skills/skills-codex/comm-lit-review/references/domain-taxonomy.md +57 -0
- package/skills/skills-codex/comm-lit-review/references/output-template.md +37 -0
- package/skills/skills-codex/comm-lit-review/references/source-policy.md +99 -0
- package/skills/skills-codex/comm-lit-review/references/venue-tiering.md +112 -0
- package/skills/skills-codex/deepxiv/SKILL.md +142 -0
- package/skills/skills-codex/dse-loop/SKILL.md +285 -0
- package/skills/skills-codex/embodiment-description/SKILL.md +129 -0
- package/skills/skills-codex/exa-search/SKILL.md +192 -0
- package/skills/skills-codex/experiment-audit/SKILL.md +286 -0
- package/skills/skills-codex/experiment-bridge/SKILL.md +356 -0
- package/skills/skills-codex/experiment-plan/SKILL.md +249 -0
- package/skills/skills-codex/experiment-queue/SKILL.md +401 -0
- package/skills/skills-codex/feishu-notify/SKILL.md +155 -0
- package/skills/skills-codex/figure-description/SKILL.md +138 -0
- package/skills/skills-codex/figure-spec/SKILL.md +252 -0
- package/skills/skills-codex/formula-derivation/SKILL.md +280 -0
- package/skills/skills-codex/gemini-search/SKILL.md +205 -0
- package/skills/skills-codex/grant-proposal/SKILL.md +626 -0
- package/skills/skills-codex/idea-creator/SKILL.md +405 -0
- package/skills/skills-codex/idea-discovery/SKILL.md +475 -0
- package/skills/skills-codex/idea-discovery-robot/SKILL.md +362 -0
- package/skills/skills-codex/integrity-forensics/SKILL.md +106 -0
- package/skills/skills-codex/interview-cheatsheet/SKILL.md +245 -0
- package/skills/skills-codex/invention-structuring/SKILL.md +188 -0
- package/skills/skills-codex/jurisdiction-format/SKILL.md +192 -0
- package/skills/skills-codex/kill-argument/SKILL.md +403 -0
- package/skills/skills-codex/mermaid-diagram/SKILL.md +379 -0
- package/skills/skills-codex/meta-apply/SKILL.md +154 -0
- package/skills/skills-codex/meta-optimize/SKILL.md +348 -0
- package/skills/skills-codex/monitor-experiment/SKILL.md +98 -0
- package/skills/skills-codex/novelty-check/SKILL.md +89 -0
- package/skills/skills-codex/openalex/SKILL.md +228 -0
- package/skills/skills-codex/overleaf-sync/SKILL.md +220 -0
- package/skills/skills-codex/paper-claim-audit/SKILL.md +350 -0
- package/skills/skills-codex/paper-compile/SKILL.md +253 -0
- package/skills/skills-codex/paper-figure/SKILL.md +311 -0
- package/skills/skills-codex/paper-illustration/SKILL.md +690 -0
- package/skills/skills-codex/paper-illustration-image2/SKILL.md +383 -0
- package/skills/skills-codex/paper-illustration-image2/scripts/paper_illustration_image2.py +255 -0
- package/skills/skills-codex/paper-plan/SKILL.md +278 -0
- package/skills/skills-codex/paper-poster/SKILL.md +19 -0
- package/skills/skills-codex/paper-poster-html/SKILL.md +377 -0
- package/skills/skills-codex/paper-slides/SKILL.md +571 -0
- package/skills/skills-codex/paper-talk/SKILL.md +381 -0
- package/skills/skills-codex/paper-write/SKILL.md +411 -0
- package/skills/skills-codex/paper-write/templates/IEEEtran.bst +2409 -0
- package/skills/skills-codex/paper-write/templates/IEEEtran.cls +6347 -0
- package/skills/skills-codex/paper-write/templates/aaai2026.bst +1493 -0
- package/skills/skills-codex/paper-write/templates/aaai2026.sty +315 -0
- package/skills/skills-codex/paper-write/templates/aaai2026.tex +952 -0
- package/skills/skills-codex/paper-write/templates/acl.sty +312 -0
- package/skills/skills-codex/paper-write/templates/acl2026.tex +377 -0
- package/skills/skills-codex/paper-write/templates/acl_natbib.bst +1940 -0
- package/skills/skills-codex/paper-write/templates/acm.bst +3081 -0
- package/skills/skills-codex/paper-write/templates/acm_mm2026.tex +204 -0
- package/skills/skills-codex/paper-write/templates/acmart.cls +3520 -0
- package/skills/skills-codex/paper-write/templates/cvpr.bst +1448 -0
- package/skills/skills-codex/paper-write/templates/cvpr.sty +508 -0
- package/skills/skills-codex/paper-write/templates/cvpr2026.tex +63 -0
- package/skills/skills-codex/paper-write/templates/iclr2026.tex +84 -0
- package/skills/skills-codex/paper-write/templates/iclr2026_conference.bst +1440 -0
- package/skills/skills-codex/paper-write/templates/iclr2026_conference.sty +246 -0
- package/skills/skills-codex/paper-write/templates/icml2026.sty +767 -0
- package/skills/skills-codex/paper-write/templates/icml2026.tex +662 -0
- package/skills/skills-codex/paper-write/templates/ieee_conference.tex +89 -0
- package/skills/skills-codex/paper-write/templates/ieee_journal.tex +93 -0
- package/skills/skills-codex/paper-write/templates/math_commands.tex +48 -0
- package/skills/skills-codex/paper-write/templates/neurips2026.tex +493 -0
- package/skills/skills-codex/paper-write/templates/neurips_2026.sty +437 -0
- package/skills/skills-codex/paper-writing/SKILL.md +731 -0
- package/skills/skills-codex/patent-novelty-check/SKILL.md +153 -0
- package/skills/skills-codex/patent-pipeline/SKILL.md +344 -0
- package/skills/skills-codex/patent-review/SKILL.md +202 -0
- package/skills/skills-codex/pixel-art/SKILL.md +139 -0
- package/skills/skills-codex/prior-art-search/SKILL.md +146 -0
- package/skills/skills-codex/proof-checker/SKILL.md +554 -0
- package/skills/skills-codex/proof-orchestrator/SKILL.md +260 -0
- package/skills/skills-codex/proof-orchestrator/references/audit-output-contract.md +126 -0
- package/skills/skills-codex/proof-orchestrator/references/deepseek-routing.md +76 -0
- package/skills/skills-codex/proof-orchestrator/references/dispatch-prompts.md +227 -0
- package/skills/skills-codex/proof-orchestrator/references/notation-audit.md +135 -0
- package/skills/skills-codex/proof-orchestrator/references/proof-audit-rubric.md +70 -0
- package/skills/skills-codex/proof-orchestrator/references/stress-tests.md +38 -0
- package/skills/skills-codex/proof-writer/SKILL.md +222 -0
- package/skills/skills-codex/qzcli/SKILL.md +324 -0
- package/skills/skills-codex/rebuttal/SKILL.md +305 -0
- package/skills/skills-codex/render-html/SKILL.md +305 -0
- package/skills/skills-codex/render-html/scripts/__pycache__/render_html.cpython-314.pyc +0 -0
- package/skills/skills-codex/render-html/scripts/render_html.py +909 -0
- package/skills/skills-codex/render-html/scripts/templates/academic.html +342 -0
- package/skills/skills-codex/render-html/scripts/templates/dashboard.html +333 -0
- package/skills/skills-codex/research-lit/SKILL.md +464 -0
- package/skills/skills-codex/research-pipeline/SKILL.md +340 -0
- package/skills/skills-codex/research-refine/SKILL.md +721 -0
- package/skills/skills-codex/research-refine-pipeline/SKILL.md +186 -0
- package/skills/skills-codex/research-review/SKILL.md +135 -0
- package/skills/skills-codex/research-wiki/SKILL.md +421 -0
- package/skills/skills-codex/resubmit-pipeline/SKILL.md +444 -0
- package/skills/skills-codex/result-to-claim/SKILL.md +246 -0
- package/skills/skills-codex/run-experiment/SKILL.md +236 -0
- package/skills/skills-codex/semantic-scholar/SKILL.md +219 -0
- package/skills/skills-codex/serverless-modal/SKILL.md +335 -0
- package/skills/skills-codex/shared-references/acceptance-gate.md +336 -0
- package/skills/skills-codex/shared-references/assurance-contract.md +139 -0
- package/skills/skills-codex/shared-references/capture-antipatterns.md +84 -0
- package/skills/skills-codex/shared-references/citation-discipline.md +452 -0
- package/skills/skills-codex/shared-references/compute-env-contract.md +163 -0
- package/skills/skills-codex/shared-references/effort-contract.md +143 -0
- package/skills/skills-codex/shared-references/evidence-precheck.md +73 -0
- package/skills/skills-codex/shared-references/experiment-integrity.md +49 -0
- package/skills/skills-codex/shared-references/external-cadence.md +334 -0
- package/skills/skills-codex/shared-references/fan-out-pattern.md +375 -0
- package/skills/skills-codex/shared-references/injection-hygiene.md +132 -0
- package/skills/skills-codex/shared-references/integration-contract.md +372 -0
- package/skills/skills-codex/shared-references/output-composition.md +98 -0
- package/skills/skills-codex/shared-references/output-language.md +45 -0
- package/skills/skills-codex/shared-references/output-manifest.md +40 -0
- package/skills/skills-codex/shared-references/output-versioning.md +111 -0
- package/skills/skills-codex/shared-references/patent-format-cn.md +199 -0
- package/skills/skills-codex/shared-references/patent-format-ep.md +173 -0
- package/skills/skills-codex/shared-references/patent-format-us.md +161 -0
- package/skills/skills-codex/shared-references/patent-writing-principles.md +197 -0
- package/skills/skills-codex/shared-references/prior-art-databases.md +141 -0
- package/skills/skills-codex/shared-references/resumable-runs.md +125 -0
- package/skills/skills-codex/shared-references/review-scope-limits.md +81 -0
- package/skills/skills-codex/shared-references/review-tracing.md +144 -0
- package/skills/skills-codex/shared-references/reviewer-independence.md +66 -0
- package/skills/skills-codex/shared-references/reviewer-routing.md +128 -0
- package/skills/skills-codex/shared-references/skill-governance.md +119 -0
- package/skills/skills-codex/shared-references/taste-calibration.md +90 -0
- package/skills/skills-codex/shared-references/venue-checklists.md +73 -0
- package/skills/skills-codex/shared-references/wiki-helper-resolution.md +69 -0
- package/skills/skills-codex/shared-references/writing-principles.md +525 -0
- package/skills/skills-codex/slides-polish/SKILL.md +563 -0
- package/skills/skills-codex/specification-writing/SKILL.md +211 -0
- package/skills/skills-codex/system-profile/SKILL.md +103 -0
- package/skills/skills-codex/training-check/SKILL.md +83 -0
- package/skills/skills-codex/vast-gpu/SKILL.md +394 -0
- package/skills/skills-codex/web-debug-search/SKILL.md +334 -0
- package/skills/skills-codex/wiki-enrich/SKILL.md +255 -0
- package/skills/skills-codex/writing-systems-papers/SKILL.md +184 -0
- package/skills/skills-codex-claude-review/README.md +79 -0
- package/skills/skills-codex-claude-review/README_CN.md +78 -0
- package/skills/skills-codex-claude-review/auto-paper-improvement-loop/SKILL.md +581 -0
- package/skills/skills-codex-claude-review/auto-review-loop/SKILL.md +510 -0
- package/skills/skills-codex-claude-review/novelty-check/SKILL.md +102 -0
- package/skills/skills-codex-claude-review/paper-figure/SKILL.md +319 -0
- package/skills/skills-codex-claude-review/paper-plan/SKILL.md +287 -0
- package/skills/skills-codex-claude-review/paper-write/SKILL.md +420 -0
- package/skills/skills-codex-claude-review/research-refine/SKILL.md +732 -0
- package/skills/skills-codex-claude-review/research-review/SKILL.md +149 -0
- package/skills/skills-codex-gemini-review/README.md +176 -0
- package/skills/skills-codex-gemini-review/README_CN.md +175 -0
- package/skills/skills-codex-gemini-review/auto-paper-improvement-loop/SKILL.md +331 -0
- package/skills/skills-codex-gemini-review/auto-review-loop/SKILL.md +304 -0
- package/skills/skills-codex-gemini-review/grant-proposal/SKILL.md +630 -0
- package/skills/skills-codex-gemini-review/idea-creator/SKILL.md +263 -0
- package/skills/skills-codex-gemini-review/idea-discovery/SKILL.md +275 -0
- package/skills/skills-codex-gemini-review/idea-discovery-robot/SKILL.md +365 -0
- package/skills/skills-codex-gemini-review/novelty-check/SKILL.md +92 -0
- package/skills/skills-codex-gemini-review/paper-figure/SKILL.md +289 -0
- package/skills/skills-codex-gemini-review/paper-plan/SKILL.md +265 -0
- package/skills/skills-codex-gemini-review/paper-poster-html/SKILL.md +102 -0
- package/skills/skills-codex-gemini-review/paper-slides/SKILL.md +582 -0
- package/skills/skills-codex-gemini-review/paper-write/SKILL.md +346 -0
- package/skills/skills-codex-gemini-review/paper-writing/SKILL.md +312 -0
- package/skills/skills-codex-gemini-review/research-refine/SKILL.md +674 -0
- package/skills/skills-codex-gemini-review/research-review/SKILL.md +112 -0
- package/skills/slides-polish/SKILL.md +565 -0
- package/skills/specification-writing/SKILL.md +211 -0
- package/skills/system-profile/SKILL.md +103 -0
- package/skills/training-check/SKILL.md +132 -0
- package/skills/vast-gpu/SKILL.md +394 -0
- package/skills/web-debug-search/SKILL.md +334 -0
- package/skills/wiki-enrich/SKILL.md +257 -0
- package/skills/writing-systems-papers/SKILL.md +184 -0
- package/templates/CLAUDE_MD_TEMPLATE.md +29 -0
- package/templates/EXPERIMENT_LOG_TEMPLATE.md +47 -0
- package/templates/EXPERIMENT_PLAN_TEMPLATE.md +51 -0
- package/templates/EXPERIMENT_PLAN_TEMPLATE_CN.md +53 -0
- package/templates/FINDINGS_TEMPLATE.md +52 -0
- package/templates/IDEA_CANDIDATES_TEMPLATE.md +47 -0
- package/templates/IDEA_CANDIDATES_TEMPLATE_CN.md +47 -0
- package/templates/INVENTION_BRIEF_TEMPLATE.md +87 -0
- package/templates/MANIFEST_TEMPLATE.md +7 -0
- package/templates/NARRATIVE_REPORT_TEMPLATE.md +49 -0
- package/templates/PAPER_PLAN_TEMPLATE.md +47 -0
- package/templates/PATENT_CLAIMS_TEMPLATE.md +78 -0
- package/templates/PATENT_SPECIFICATION_TEMPLATE.md +68 -0
- package/templates/README.md +57 -0
- package/templates/RESEARCH_BRIEF_TEMPLATE.md +35 -0
- package/templates/RESEARCH_BRIEF_TEMPLATE_CN.md +41 -0
- package/templates/RESEARCH_CONTRACT_TEMPLATE.md +60 -0
- package/templates/claude-hooks/corpus_write_guard.json +16 -0
- package/templates/claude-hooks/corpus_write_guard.py +85 -0
- package/templates/claude-hooks/meta_logging.json +74 -0
- package/templates/gitignore-trace.txt +3 -0
- package/tools/__pycache__/check_skills_inventory.cpython-314.pyc +0 -0
- package/tools/arxiv_fetch.py +311 -0
- package/tools/capture_filter.py +126 -0
- package/tools/check_skills_inventory.py +273 -0
- package/tools/convert_skills_to_llm_chat.py +282 -0
- package/tools/copilot_native_evidence.py +818 -0
- package/tools/deepxiv_fetch.py +213 -0
- package/tools/evidence_check.py +212 -0
- package/tools/exa_search.py +425 -0
- package/tools/experiment_queue/README.md +118 -0
- package/tools/experiment_queue/build_manifest.py +44 -0
- package/tools/experiment_queue/queue_manager.py +44 -0
- package/tools/extract_paper_style.py +560 -0
- package/tools/figure_renderer.py +69 -0
- package/tools/forensics_gate.py +669 -0
- package/tools/generate_codex_claude_review_overrides.py +299 -0
- package/tools/idea_discovery_gate.py +256 -0
- package/tools/install_aris.ps1 +1372 -0
- package/tools/install_aris.sh +1370 -0
- package/tools/install_aris_codex.sh +1023 -0
- package/tools/install_aris_copilot.sh +1052 -0
- package/tools/iteration_log.py +143 -0
- package/tools/lint_skills_helpers.sh +84 -0
- package/tools/meta_opt/check_ready.sh +80 -0
- package/tools/meta_opt/log_event.sh +91 -0
- package/tools/meta_opt/trigger_eval.py +280 -0
- package/tools/meta_opt/trigger_evals.sample.json +28 -0
- package/tools/openalex_fetch.py +326 -0
- package/tools/overleaf_audit.sh +104 -0
- package/tools/overleaf_setup.sh +150 -0
- package/tools/paper_illustration_image2.py +62 -0
- package/tools/provenance.py +294 -0
- package/tools/research_wiki.py +1720 -0
- package/tools/review_gate.py +502 -0
- package/tools/run_state.py +399 -0
- package/tools/save_trace.sh +477 -0
- package/tools/semantic_scholar_fetch.py +438 -0
- package/tools/skill-groups.tsv +116 -0
- package/tools/skill_picker.py +238 -0
- package/tools/smart_update.ps1 +521 -0
- package/tools/smart_update.sh +591 -0
- package/tools/smart_update_codex.sh +419 -0
- package/tools/smart_update_copilot.sh +605 -0
- package/tools/threat_scan.py +222 -0
- package/tools/verify_paper_audits.sh +487 -0
- package/tools/verify_papers.py +613 -0
- package/tools/verify_wiki_coverage.sh +176 -0
- 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.
|