dsh-compound-engineering 0.0.0-stage → 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 +160 -2
- package/README.zh.md +161 -0
- package/cordis.patch.yml +6 -0
- package/lib/frontmatter.js +167 -0
- package/lib/index.js +46 -0
- package/lib/provider.js +201 -0
- package/package.json +62 -4
- package/skills/CODING_STANDARDS.md +68 -0
- package/skills/ce-babysit-pr/SKILL.md +59 -0
- package/skills/ce-babysit-pr/references/branch-currency.md +22 -0
- package/skills/ce-babysit-pr/references/envelope.md +44 -0
- package/skills/ce-babysit-pr/references/pipeline.md +15 -0
- package/skills/ce-babysit-pr/references/report.md +20 -0
- package/skills/ce-babysit-pr/references/settle.md +37 -0
- package/skills/ce-babysit-pr/references/setup.md +33 -0
- package/skills/ce-babysit-pr/references/stack-commands.md +39 -0
- package/skills/ce-babysit-pr/references/stack.md +43 -0
- package/skills/ce-babysit-pr/references/tick.md +102 -0
- package/skills/ce-babysit-pr/references/watch-loop.md +222 -0
- package/skills/ce-babysit-pr/scripts/pr-snapshot +3656 -0
- package/skills/ce-bakeoff/SKILL.md +48 -0
- package/skills/ce-bakeoff/references/candidates.md +37 -0
- package/skills/ce-bakeoff/references/judging.md +19 -0
- package/skills/ce-bakeoff/references/output.md +11 -0
- package/skills/ce-bakeoff/references/verification.md +15 -0
- package/skills/ce-brainstorm/SKILL.md +69 -0
- package/skills/ce-brainstorm/references/agents/slack-researcher.md +127 -0
- package/skills/ce-brainstorm/references/approaches.md +57 -0
- package/skills/ce-brainstorm/references/bakeoff.md +9 -0
- package/skills/ce-brainstorm/references/blindspot-pass.md +70 -0
- package/skills/ce-brainstorm/references/brainstorm-sections.md +458 -0
- package/skills/ce-brainstorm/references/dialogue.md +89 -0
- package/skills/ce-brainstorm/references/handoff.md +187 -0
- package/skills/ce-brainstorm/references/html-rendering.md +638 -0
- package/skills/ce-brainstorm/references/interaction-rules.md +33 -0
- package/skills/ce-brainstorm/references/markdown-rendering.md +242 -0
- package/skills/ce-brainstorm/references/model-tiers.md +13 -0
- package/skills/ce-brainstorm/references/output-mode.md +26 -0
- package/skills/ce-brainstorm/references/phase-0.md +104 -0
- package/skills/ce-brainstorm/references/plan-write.md +32 -0
- package/skills/ce-brainstorm/references/product-pressure-test.md +42 -0
- package/skills/ce-brainstorm/references/reasoning-elevation.md +124 -0
- package/skills/ce-brainstorm/references/settled-decisions.md +45 -0
- package/skills/ce-brainstorm/references/synthesis-summary.md +149 -0
- package/skills/ce-brainstorm/references/universal-brainstorming.md +72 -0
- package/skills/ce-brainstorm/references/verdict-routing.md +26 -0
- package/skills/ce-brainstorm/references/visual-probes.md +164 -0
- package/skills/ce-brainstorm/scripts/elevation-dispatch.sh +288 -0
- package/skills/ce-brainstorm/scripts/light-webserver.js +1275 -0
- package/skills/ce-brainstorm/scripts/packs-resolve.py +737 -0
- package/skills/ce-brainstorm/scripts/peer-job-runner.py +2594 -0
- package/skills/ce-code-review/SKILL.md +40 -0
- package/skills/ce-code-review/references/action-class-rubric.md +67 -0
- package/skills/ce-code-review/references/cross-model-recovery.md +38 -0
- package/skills/ce-code-review/references/cross-model-review.md +191 -0
- package/skills/ce-code-review/references/depth-paths.md +32 -0
- package/skills/ce-code-review/references/diff-scope.md +59 -0
- package/skills/ce-code-review/references/dispatch-reviewers.md +135 -0
- package/skills/ce-code-review/references/findings-schema.json +125 -0
- package/skills/ce-code-review/references/finish-input.md +118 -0
- package/skills/ce-code-review/references/finish-review.md +202 -0
- package/skills/ce-code-review/references/intent-and-plan.md +73 -0
- package/skills/ce-code-review/references/modes-and-output.md +156 -0
- package/skills/ce-code-review/references/persona-catalog.md +66 -0
- package/skills/ce-code-review/references/personas/adversarial-reviewer.md +111 -0
- package/skills/ce-code-review/references/personas/agent-native-reviewer.md +173 -0
- package/skills/ce-code-review/references/personas/api-contract-reviewer.md +44 -0
- package/skills/ce-code-review/references/personas/correctness-reviewer.md +48 -0
- package/skills/ce-code-review/references/personas/data-migration-reviewer.md +111 -0
- package/skills/ce-code-review/references/personas/deployment-verification-agent.md +157 -0
- package/skills/ce-code-review/references/personas/julik-frontend-races-reviewer.md +45 -0
- package/skills/ce-code-review/references/personas/learnings-researcher.md +260 -0
- package/skills/ce-code-review/references/personas/maintainability-reviewer.md +85 -0
- package/skills/ce-code-review/references/personas/performance-reviewer.md +45 -0
- package/skills/ce-code-review/references/personas/previous-comments-reviewer.md +59 -0
- package/skills/ce-code-review/references/personas/project-standards-reviewer.md +77 -0
- package/skills/ce-code-review/references/personas/reliability-reviewer.md +49 -0
- package/skills/ce-code-review/references/personas/security-reviewer.md +50 -0
- package/skills/ce-code-review/references/personas/swift-ios-reviewer.md +99 -0
- package/skills/ce-code-review/references/personas/testing-reviewer.md +51 -0
- package/skills/ce-code-review/references/review-output-template.md +172 -0
- package/skills/ce-code-review/references/scope.md +176 -0
- package/skills/ce-code-review/references/select-and-route.md +93 -0
- package/skills/ce-code-review/references/subagent-template.md +206 -0
- package/skills/ce-code-review/references/validator-batch-template.md +67 -0
- package/skills/ce-code-review/scripts/cross-model-adversarial-review.sh +1275 -0
- package/skills/ce-code-review/scripts/findings-mechanics.py +274 -0
- package/skills/ce-code-review/scripts/packs-resolve.py +737 -0
- package/skills/ce-code-review/scripts/peer-job-runner.py +2594 -0
- package/skills/ce-code-review/scripts/review-scope.py +419 -0
- package/skills/ce-code-review/scripts/run-log.py +280 -0
- package/skills/ce-commit/SKILL.md +60 -0
- package/skills/ce-commit-push-pr/SKILL.md +69 -0
- package/skills/ce-commit-push-pr/references/apply-and-handoff.md +79 -0
- package/skills/ce-commit-push-pr/references/branch-creation.md +47 -0
- package/skills/ce-commit-push-pr/references/commit-and-push.md +26 -0
- package/skills/ce-commit-push-pr/references/compose.md +29 -0
- package/skills/ce-commit-push-pr/references/context.md +42 -0
- package/skills/ce-commit-push-pr/references/gh-stack-cli.md +83 -0
- package/skills/ce-commit-push-pr/references/pr-description-writing.md +208 -0
- package/skills/ce-commit-push-pr/references/stack-submit.md +81 -0
- package/skills/ce-compound/SKILL.md +79 -0
- package/skills/ce-compound/assets/resolution-template.md +96 -0
- package/skills/ce-compound/references/agents/best-practices-researcher.md +115 -0
- package/skills/ce-compound/references/agents/data-integrity-guardian.md +68 -0
- package/skills/ce-compound/references/agents/framework-docs-researcher.md +93 -0
- package/skills/ce-compound/references/agents/pattern-recognition-specialist.md +55 -0
- package/skills/ce-compound/references/agents/performance-oracle.md +108 -0
- package/skills/ce-compound/references/agents/security-sentinel.md +91 -0
- package/skills/ce-compound/references/agents/session-historian.md +82 -0
- package/skills/ce-compound/references/assembly.md +127 -0
- package/skills/ce-compound/references/concepts-vocabulary.md +98 -0
- package/skills/ce-compound/references/enhancement.md +42 -0
- package/skills/ce-compound/references/grounding-validation.md +89 -0
- package/skills/ce-compound/references/lightweight.md +56 -0
- package/skills/ce-compound/references/modes.md +13 -0
- package/skills/ce-compound/references/refresh-and-discoverability.md +96 -0
- package/skills/ce-compound/references/report.md +115 -0
- package/skills/ce-compound/references/research.md +144 -0
- package/skills/ce-compound/references/schema.yaml +236 -0
- package/skills/ce-compound/references/session-history.md +73 -0
- package/skills/ce-compound/references/yaml-schema.md +130 -0
- package/skills/ce-compound/scripts/packs-resolve.py +737 -0
- package/skills/ce-compound/scripts/session-history/__pycache__/dsh_session.cpython-314.pyc +0 -0
- package/skills/ce-compound/scripts/session-history/discover-sessions.sh +290 -0
- package/skills/ce-compound/scripts/session-history/discover_dsh.py +123 -0
- package/skills/ce-compound/scripts/session-history/dsh_session.py +225 -0
- package/skills/ce-compound/scripts/session-history/extract-errors.py +178 -0
- package/skills/ce-compound/scripts/session-history/extract-metadata.py +301 -0
- package/skills/ce-compound/scripts/session-history/extract-skeleton.py +346 -0
- package/skills/ce-compound/scripts/validate-doc-claims.py +497 -0
- package/skills/ce-compound/scripts/validate-frontmatter.py +137 -0
- package/skills/ce-compound-refresh/SKILL.md +88 -0
- package/skills/ce-compound-refresh/assets/resolution-template.md +96 -0
- package/skills/ce-compound-refresh/references/classify.md +42 -0
- package/skills/ce-compound-refresh/references/commit.md +7 -0
- package/skills/ce-compound-refresh/references/concepts-vocabulary.md +116 -0
- package/skills/ce-compound-refresh/references/discoverability.md +15 -0
- package/skills/ce-compound-refresh/references/investigate.md +23 -0
- package/skills/ce-compound-refresh/references/modes.md +27 -0
- package/skills/ce-compound-refresh/references/per-action-flows.md +142 -0
- package/skills/ce-compound-refresh/references/report.md +23 -0
- package/skills/ce-compound-refresh/references/schema.yaml +236 -0
- package/skills/ce-compound-refresh/references/scope.md +18 -0
- package/skills/ce-compound-refresh/references/worth-audit.md +35 -0
- package/skills/ce-compound-refresh/references/yaml-schema.md +130 -0
- package/skills/ce-compound-refresh/scripts/validate-doc-claims.py +497 -0
- package/skills/ce-compound-refresh/scripts/validate-frontmatter.py +137 -0
- package/skills/ce-debug/SKILL.md +122 -0
- package/skills/ce-debug/references/anti-patterns.md +91 -0
- package/skills/ce-debug/references/defense-in-depth.md +39 -0
- package/skills/ce-debug/references/fix.md +21 -0
- package/skills/ce-debug/references/investigate.md +114 -0
- package/skills/ce-debug/references/investigation-techniques.md +384 -0
- package/skills/ce-debug/references/pipeline-mode.md +78 -0
- package/skills/ce-debug/references/post-fix-handoff.md +60 -0
- package/skills/ce-debug/references/return-to-caller.md +57 -0
- package/skills/ce-doc-review/SKILL.md +75 -0
- package/skills/ce-doc-review/references/bulk-preview.md +146 -0
- package/skills/ce-doc-review/references/cross-model-review.md +207 -0
- package/skills/ce-doc-review/references/decision-primer.md +47 -0
- package/skills/ce-doc-review/references/dispatch.md +56 -0
- package/skills/ce-doc-review/references/document-intake.md +44 -0
- package/skills/ce-doc-review/references/findings-schema.json +85 -0
- package/skills/ce-doc-review/references/modes.md +20 -0
- package/skills/ce-doc-review/references/open-questions-defer.md +158 -0
- package/skills/ce-doc-review/references/persona-selection.md +41 -0
- package/skills/ce-doc-review/references/personas/adversarial-document-reviewer.md +109 -0
- package/skills/ce-doc-review/references/personas/coherence-reviewer.md +69 -0
- package/skills/ce-doc-review/references/personas/design-lens-reviewer.md +48 -0
- package/skills/ce-doc-review/references/personas/feasibility-reviewer.md +50 -0
- package/skills/ce-doc-review/references/personas/product-lens-reviewer.md +85 -0
- package/skills/ce-doc-review/references/personas/scope-guardian-reviewer.md +83 -0
- package/skills/ce-doc-review/references/personas/security-lens-reviewer.md +41 -0
- package/skills/ce-doc-review/references/personas/whole-doc-reviewer.md +25 -0
- package/skills/ce-doc-review/references/rendering-floor.md +175 -0
- package/skills/ce-doc-review/references/review-output-template.md +123 -0
- package/skills/ce-doc-review/references/subagent-template.md +188 -0
- package/skills/ce-doc-review/references/synthesis-and-presentation.md +350 -0
- package/skills/ce-doc-review/references/walkthrough.md +347 -0
- package/skills/ce-doc-review/scripts/cross-model-doc-review.sh +1270 -0
- package/skills/ce-doc-review/scripts/packs-resolve.py +737 -0
- package/skills/ce-doc-review/scripts/peer-job-runner.py +2594 -0
- package/skills/ce-dogfood/SKILL.md +66 -0
- package/skills/ce-dogfood/agents/openai.yaml +2 -0
- package/skills/ce-dogfood/references/dogfood-report-template.md +97 -0
- package/skills/ce-dogfood/references/phases.md +167 -0
- package/skills/ce-dogfood/references/test-matrix-taxonomy.md +62 -0
- package/skills/ce-dogfood/scripts/packs-resolve.py +737 -0
- package/skills/ce-explain/SKILL.md +81 -0
- package/skills/ce-explain/references/agents/behavior-trace-scout.md +19 -0
- package/skills/ce-explain/references/agents/work-recap-scout.md +23 -0
- package/skills/ce-explain/references/check-in.md +18 -0
- package/skills/ce-explain/references/destinations.md +35 -0
- package/skills/ce-explain/references/explainer-html.md +29 -0
- package/skills/ce-explain/references/explainer-markdown.md +24 -0
- package/skills/ce-explain/references/intake.md +50 -0
- package/skills/ce-explain/references/orchestration.md +46 -0
- package/skills/ce-handoff/SKILL.md +54 -0
- package/skills/ce-handoff/references/create.md +88 -0
- package/skills/ce-handoff/references/resume.md +46 -0
- package/skills/ce-ideate/SKILL.md +75 -0
- package/skills/ce-ideate/references/agents/issue-intelligence-analyst.md +166 -0
- package/skills/ce-ideate/references/agents/learnings-researcher.md +247 -0
- package/skills/ce-ideate/references/agents/slack-researcher.md +127 -0
- package/skills/ce-ideate/references/agents/web-researcher.md +121 -0
- package/skills/ce-ideate/references/decomposition.md +39 -0
- package/skills/ce-ideate/references/divergent-ideation.md +112 -0
- package/skills/ce-ideate/references/grounding.md +138 -0
- package/skills/ce-ideate/references/html-rendering.md +638 -0
- package/skills/ce-ideate/references/ideation-sections.md +191 -0
- package/skills/ce-ideate/references/issue-intelligence.md +44 -0
- package/skills/ce-ideate/references/markdown-rendering.md +242 -0
- package/skills/ce-ideate/references/output-mode.md +34 -0
- package/skills/ce-ideate/references/post-ideation-workflow.md +169 -0
- package/skills/ce-ideate/references/scope-gates.md +148 -0
- package/skills/ce-ideate/references/universal-ideation.md +119 -0
- package/skills/ce-ideate/references/user-research-artifacts.md +28 -0
- package/skills/ce-ideate/references/web-research-cache.md +56 -0
- package/skills/ce-noslop/SKILL.md +45 -0
- package/skills/ce-noslop/references/patterns.md +61 -0
- package/skills/ce-noslop/references/terminology.md +3 -0
- package/skills/ce-optimize/SKILL.md +64 -0
- package/skills/ce-optimize/references/agents/learnings-researcher.md +247 -0
- package/skills/ce-optimize/references/agents/repo-research-analyst.md +258 -0
- package/skills/ce-optimize/references/example-expensive-benchmark-spec.yaml +88 -0
- package/skills/ce-optimize/references/example-hard-spec.yaml +64 -0
- package/skills/ce-optimize/references/example-judge-spec.yaml +83 -0
- package/skills/ce-optimize/references/example-text-target-spec.yaml +80 -0
- package/skills/ce-optimize/references/experiment-log-schema.yaml +563 -0
- package/skills/ce-optimize/references/experiment-prompt-template.md +143 -0
- package/skills/ce-optimize/references/judge-prompt-template.md +117 -0
- package/skills/ce-optimize/references/loop.md +286 -0
- package/skills/ce-optimize/references/measurement.md +168 -0
- package/skills/ce-optimize/references/optimize-spec-schema.yaml +570 -0
- package/skills/ce-optimize/references/persistence.md +93 -0
- package/skills/ce-optimize/references/spec.md +107 -0
- package/skills/ce-optimize/references/text-targets.md +51 -0
- package/skills/ce-optimize/references/usage-guide.md +147 -0
- package/skills/ce-optimize/references/wrap-up.md +54 -0
- package/skills/ce-optimize/scripts/decide.mjs +676 -0
- package/skills/ce-optimize/scripts/experiment-worktree.sh +330 -0
- package/skills/ce-optimize/scripts/measure.sh +140 -0
- package/skills/ce-optimize/scripts/parallel-probe.sh +134 -0
- package/skills/ce-plan/SKILL.md +60 -0
- package/skills/ce-plan/references/agents/agent-native-planning-strategist.md +66 -0
- package/skills/ce-plan/references/agents/architecture-strategist.md +46 -0
- package/skills/ce-plan/references/agents/best-practices-researcher.md +118 -0
- package/skills/ce-plan/references/agents/data-integrity-guardian.md +68 -0
- package/skills/ce-plan/references/agents/framework-docs-researcher.md +97 -0
- package/skills/ce-plan/references/agents/git-history-analyzer.md +40 -0
- package/skills/ce-plan/references/agents/learnings-researcher.md +268 -0
- package/skills/ce-plan/references/agents/pattern-recognition-specialist.md +55 -0
- package/skills/ce-plan/references/agents/performance-oracle.md +108 -0
- package/skills/ce-plan/references/agents/repo-research-analyst.md +262 -0
- package/skills/ce-plan/references/agents/security-sentinel.md +91 -0
- package/skills/ce-plan/references/agents/slack-researcher.md +131 -0
- package/skills/ce-plan/references/agents/spec-flow-analyzer.md +84 -0
- package/skills/ce-plan/references/agents/web-researcher.md +125 -0
- package/skills/ce-plan/references/approach-altitude.md +55 -0
- package/skills/ce-plan/references/bakeoff.md +9 -0
- package/skills/ce-plan/references/deepening-workflow.md +263 -0
- package/skills/ce-plan/references/final-review.md +134 -0
- package/skills/ce-plan/references/html-rendering.md +638 -0
- package/skills/ce-plan/references/intake.md +158 -0
- package/skills/ce-plan/references/markdown-rendering.md +242 -0
- package/skills/ce-plan/references/output-contracts.md +29 -0
- package/skills/ce-plan/references/output-mode.md +45 -0
- package/skills/ce-plan/references/plan-handoff.md +116 -0
- package/skills/ce-plan/references/plan-sections.md +489 -0
- package/skills/ce-plan/references/reasoning-elevation.md +124 -0
- package/skills/ce-plan/references/research.md +211 -0
- package/skills/ce-plan/references/resume.md +61 -0
- package/skills/ce-plan/references/settled-decisions.md +45 -0
- package/skills/ce-plan/references/structure.md +207 -0
- package/skills/ce-plan/references/synthesis-summary.md +260 -0
- package/skills/ce-plan/references/universal-planning.md +170 -0
- package/skills/ce-plan/scripts/elevation-dispatch.sh +288 -0
- package/skills/ce-plan/scripts/packs-resolve.py +737 -0
- package/skills/ce-plan/scripts/peer-job-runner.py +2594 -0
- package/skills/ce-polish/SKILL.md +22 -0
- package/skills/ce-polish/agents/openai.yaml +2 -0
- package/skills/ce-polish/references/dev-server-astro.md +58 -0
- package/skills/ce-polish/references/dev-server-detection.md +40 -0
- package/skills/ce-polish/references/dev-server-next.md +61 -0
- package/skills/ce-polish/references/dev-server-nuxt.md +58 -0
- package/skills/ce-polish/references/dev-server-procfile.md +59 -0
- package/skills/ce-polish/references/dev-server-rails.md +50 -0
- package/skills/ce-polish/references/dev-server-remix.md +58 -0
- package/skills/ce-polish/references/dev-server-sveltekit.md +58 -0
- package/skills/ce-polish/references/dev-server-vite.md +48 -0
- package/skills/ce-polish/references/install-riffrec.md +35 -0
- package/skills/ce-polish/references/launch-json-schema.md +177 -0
- package/skills/ce-polish/references/live-loop.md +98 -0
- package/skills/ce-polish/references/live-remote.md +35 -0
- package/skills/ce-polish/references/live-start.md +93 -0
- package/skills/ce-polish/references/live-stream-contract.md +253 -0
- package/skills/ce-polish/references/run.md +67 -0
- package/skills/ce-polish/scripts/detect-project-type.sh +277 -0
- package/skills/ce-polish/scripts/detect-riffrec.sh +225 -0
- package/skills/ce-polish/scripts/live-endpoint.js +2841 -0
- package/skills/ce-polish/scripts/read-launch-json.sh +117 -0
- package/skills/ce-polish/scripts/resolve-package-manager.sh +95 -0
- package/skills/ce-polish/scripts/resolve-port.sh +307 -0
- package/skills/ce-pov/SKILL.md +64 -0
- package/skills/ce-pov/references/agents/external-evidence-researcher.md +26 -0
- package/skills/ce-pov/references/agents/pov-peer.md +43 -0
- package/skills/ce-pov/references/agents/precedent-activity-scout.md +21 -0
- package/skills/ce-pov/references/agents/project-grounding-scout.md +32 -0
- package/skills/ce-pov/references/boundaries.md +36 -0
- package/skills/ce-pov/references/cross-model-panel.md +596 -0
- package/skills/ce-pov/references/followup.md +9 -0
- package/skills/ce-pov/references/grounding.md +47 -0
- package/skills/ce-pov/references/intake.md +61 -0
- package/skills/ce-pov/references/invocation.md +47 -0
- package/skills/ce-pov/references/method.md +68 -0
- package/skills/ce-pov/references/pov-schema.json +56 -0
- package/skills/ce-pov/references/report.md +7 -0
- package/skills/ce-pov/scripts/cross-model-pov.sh +1110 -0
- package/skills/ce-pov/scripts/peer-job-runner.py +2594 -0
- package/skills/ce-product-pulse/SKILL.md +81 -0
- package/skills/ce-product-pulse/agents/openai.yaml +2 -0
- package/skills/ce-product-pulse/references/config.md +20 -0
- package/skills/ce-product-pulse/references/interview.md +260 -0
- package/skills/ce-product-pulse/references/report-template.md +89 -0
- package/skills/ce-product-pulse/references/run.md +46 -0
- package/skills/ce-product-pulse/references/setup.md +43 -0
- package/skills/ce-promote/SKILL.md +90 -0
- package/skills/ce-promote/agents/openai.yaml +2 -0
- package/skills/ce-promote/references/spiral-cli.md +149 -0
- package/skills/ce-proof/SKILL.md +65 -0
- package/skills/ce-proof/references/api.md +176 -0
- package/skills/ce-proof/references/workflows.md +124 -0
- package/skills/ce-prototype/SKILL.md +59 -0
- package/skills/ce-prototype/assets/annotate.css +206 -0
- package/skills/ce-prototype/assets/annotate.js +837 -0
- package/skills/ce-prototype/references/annotation-loop.md +32 -0
- package/skills/ce-prototype/references/build.md +39 -0
- package/skills/ce-prototype/references/craft-floor.md +43 -0
- package/skills/ce-prototype/references/preview.md +118 -0
- package/skills/ce-prototype/references/scoping.md +38 -0
- package/skills/ce-prototype/references/write-back.md +37 -0
- package/skills/ce-prototype/scripts/light-webserver.js +1275 -0
- package/skills/ce-resolve-pr-feedback/SKILL.md +60 -0
- package/skills/ce-resolve-pr-feedback/references/agents/pr-comment-resolver.md +59 -0
- package/skills/ce-resolve-pr-feedback/references/evaluation-rubric.md +141 -0
- package/skills/ce-resolve-pr-feedback/references/full-mode.md +336 -0
- package/skills/ce-resolve-pr-feedback/references/pipeline-mode.md +23 -0
- package/skills/ce-resolve-pr-feedback/references/resume.md +60 -0
- package/skills/ce-resolve-pr-feedback/references/return-to-caller.md +111 -0
- package/skills/ce-resolve-pr-feedback/references/targeted-mode.md +48 -0
- package/skills/ce-resolve-pr-feedback/scripts/get-pr-comments +176 -0
- package/skills/ce-resolve-pr-feedback/scripts/get-thread-for-comment +84 -0
- package/skills/ce-resolve-pr-feedback/scripts/pending-feedback.py +287 -0
- package/skills/ce-resolve-pr-feedback/scripts/reply-to-pr-thread +57 -0
- package/skills/ce-resolve-pr-feedback/scripts/resolve-pr-thread +23 -0
- package/skills/ce-retune/SKILL.md +42 -0
- package/skills/ce-retune/agents/openai.yaml +2 -0
- package/skills/ce-retune/references/baseline-mining.md +122 -0
- package/skills/ce-retune/references/corpus-audit.md +128 -0
- package/skills/ce-retune/references/cut-passes.md +129 -0
- package/skills/ce-retune/references/halt-taxonomy.md +123 -0
- package/skills/ce-retune/references/noise-floor.md +131 -0
- package/skills/ce-retune/references/workflow-shapes.md +73 -0
- package/skills/ce-riffrec-feedback-analysis/SKILL.md +33 -0
- package/skills/ce-riffrec-feedback-analysis/references/analyzer.md +18 -0
- package/skills/ce-riffrec-feedback-analysis/references/compound-engineering-feedback-format.md +116 -0
- package/skills/ce-riffrec-feedback-analysis/references/extensive-analysis.md +98 -0
- package/skills/ce-riffrec-feedback-analysis/references/install-riffrec.md +27 -0
- package/skills/ce-riffrec-feedback-analysis/references/quick-bug-report.md +38 -0
- package/skills/ce-riffrec-feedback-analysis/scripts/analyze_riffrec_zip.py +1306 -0
- package/skills/ce-setup/SKILL.md +103 -0
- package/skills/ce-setup/agents/openai.yaml +2 -0
- package/skills/ce-setup/assets/compounding-directive.md +11 -0
- package/skills/ce-setup/assets/noslop-directive.md +7 -0
- package/skills/ce-setup/assets/pack-rule-template.md +11 -0
- package/skills/ce-setup/references/acpx-cache-warm.md +14 -0
- package/skills/ce-setup/references/config-template.yaml +210 -0
- package/skills/ce-setup/references/legacy-codex-tool-map.md +15 -0
- package/skills/ce-setup/references/pack-scaffold.md +45 -0
- package/skills/ce-setup/references/repo-fixes.md +121 -0
- package/skills/ce-setup/scripts/check-health +929 -0
- package/skills/ce-setup/scripts/packs-resolve.py +737 -0
- package/skills/ce-simplify-code/SKILL.md +76 -0
- package/skills/ce-simplify-code/references/personas/code-quality-reviewer.md +17 -0
- package/skills/ce-simplify-code/references/personas/code-reuse-reviewer.md +7 -0
- package/skills/ce-simplify-code/references/personas/comment-reviewer.md +24 -0
- package/skills/ce-simplify-code/references/personas/efficiency-reviewer.md +11 -0
- package/skills/ce-simplify-code/references/personas/test-value-reviewer.md +23 -0
- package/skills/ce-simplify-code/references/reviewer-dispatch.md +11 -0
- package/skills/ce-simplify-code/references/standalone-report.md +25 -0
- package/skills/ce-strategy/SKILL.md +61 -0
- package/skills/ce-strategy/references/grounding.md +22 -0
- package/skills/ce-strategy/references/interview.md +179 -0
- package/skills/ce-strategy/references/strategy-template.md +94 -0
- package/skills/ce-strategy/references/update-run.md +33 -0
- package/skills/ce-sweep/SKILL.md +93 -0
- package/skills/ce-sweep/agents/openai.yaml +2 -0
- package/skills/ce-sweep/references/agents/media-analyzer.md +54 -0
- package/skills/ce-sweep/references/interview.md +208 -0
- package/skills/ce-sweep/references/model-tiers.md +13 -0
- package/skills/ce-sweep/references/plan-template.md +62 -0
- package/skills/ce-sweep/references/run.md +126 -0
- package/skills/ce-sweep/references/sources/email.md +57 -0
- package/skills/ce-sweep/references/sources/github-issues.md +59 -0
- package/skills/ce-sweep/references/sources/slack.md +61 -0
- package/skills/ce-sweep/references/state-schema.md +157 -0
- package/skills/ce-sweep/references/subagent-template.md +60 -0
- package/skills/ce-sweep/scripts/analyze_riffrec_zip.py +1306 -0
- package/skills/ce-sweep/scripts/sweep-state.py +793 -0
- package/skills/ce-test-browser/SKILL.md +50 -0
- package/skills/ce-test-browser/references/agent-browser-driver.md +47 -0
- package/skills/ce-test-browser/references/pipeline-orchestration.md +45 -0
- package/skills/ce-test-browser/references/route-and-report.md +129 -0
- package/skills/ce-test-browser/scripts/resolve-port.sh +41 -0
- package/skills/ce-test-xcode/SKILL.md +26 -0
- package/skills/ce-test-xcode/agents/openai.yaml +2 -0
- package/skills/ce-test-xcode/references/setup-and-build.md +32 -0
- package/skills/ce-test-xcode/references/test-and-report.md +64 -0
- package/skills/ce-work/SKILL.md +62 -0
- package/skills/ce-work/references/agents/figma-design-sync.md +27 -0
- package/skills/ce-work/references/agents/implementation-worker.md +17 -0
- package/skills/ce-work/references/cross-model-execution.md +191 -0
- package/skills/ce-work/references/execution-engines.md +64 -0
- package/skills/ce-work/references/execution-strategy.md +73 -0
- package/skills/ce-work/references/implementation-loop.md +107 -0
- package/skills/ce-work/references/implementation-result-schema.json +52 -0
- package/skills/ce-work/references/input-triage.md +50 -0
- package/skills/ce-work/references/non-code-execution.md +23 -0
- package/skills/ce-work/references/return-to-caller.md +33 -0
- package/skills/ce-work/references/review-findings-followup.md +82 -0
- package/skills/ce-work/references/shipping-workflow.md +89 -0
- package/skills/ce-work/references/tracker-defer.md +150 -0
- package/skills/ce-work/references/work-intake.md +51 -0
- package/skills/ce-work/references/workspace-setup.md +27 -0
- package/skills/ce-work/scripts/__pycache__/unit_workspace_jobs.cpython-314.pyc +0 -0
- package/skills/ce-work/scripts/__pycache__/unit_workspace_state.cpython-314.pyc +0 -0
- package/skills/ce-work/scripts/cross-model-work.sh +1385 -0
- package/skills/ce-work/scripts/peer-job-runner.py +2594 -0
- package/skills/ce-work/scripts/unit-workspace.py +215 -0
- package/skills/ce-work/scripts/unit_workspace_ignored.py +93 -0
- package/skills/ce-work/scripts/unit_workspace_integration.py +677 -0
- package/skills/ce-work/scripts/unit_workspace_jobs.py +1216 -0
- package/skills/ce-work/scripts/unit_workspace_lifecycle.py +981 -0
- package/skills/ce-work/scripts/unit_workspace_state.py +1379 -0
- package/skills/ce-work/scripts/unit_workspace_transaction.py +612 -0
- package/skills/ce-worktree/SKILL.md +54 -0
- package/skills/lfg/SKILL.md +59 -0
- package/skills/lfg/references/debug-return.md +25 -0
- package/skills/lfg/references/intake.md +30 -0
- package/skills/lfg/references/next-work-handoff.md +96 -0
- package/skills/lfg/references/plan-brief.md +36 -0
- package/skills/lfg/references/review-followup.md +78 -0
- package/skills/lfg/references/shipping.md +65 -0
- package/skills/lfg/references/stage-routing.md +49 -0
- package/skills/lfg/references/task-visibility.md +11 -0
- package/skills/lfg/references/tracker-defer.md +150 -0
- package/skills/lfg/references/work-return.md +27 -0
- package/skills/wtf/SKILL.md +33 -0
- package/skills/wtf/agents/openai.yaml +2 -0
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Experiment Worktree Manager
|
|
4
|
+
# Creates, cleans up, and manages worktrees for optimization experiments.
|
|
5
|
+
# Each experiment gets an isolated worktree with copied shared resources.
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# experiment-worktree.sh create <spec_name> <exp_index> <base_branch> [shared_file ...]
|
|
9
|
+
# experiment-worktree.sh cleanup <spec_name> <exp_index>
|
|
10
|
+
# experiment-worktree.sh cleanup-all <spec_name>
|
|
11
|
+
# experiment-worktree.sh count
|
|
12
|
+
#
|
|
13
|
+
# Worktrees are created at: .worktrees/optimize-<spec>-exp-<NNN>/
|
|
14
|
+
# Branches are named: optimize-exp/<spec>/exp-<NNN>
|
|
15
|
+
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
|
|
18
|
+
RED='\033[0;31m'
|
|
19
|
+
GREEN='\033[0;32m'
|
|
20
|
+
YELLOW='\033[1;33m'
|
|
21
|
+
BLUE='\033[0;34m'
|
|
22
|
+
NC='\033[0m'
|
|
23
|
+
|
|
24
|
+
GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) || {
|
|
25
|
+
echo -e "${RED}Error: Not in a git repository${NC}" >&2
|
|
26
|
+
exit 1
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
WORKTREE_DIR="$GIT_ROOT/.worktrees"
|
|
30
|
+
|
|
31
|
+
# Every path this script deletes is built from these two inputs, so they are
|
|
32
|
+
# checked before any path is composed: a name or shared path that can climb
|
|
33
|
+
# out of its directory would turn a cleanup into a delete of something else.
|
|
34
|
+
require_spec_name() {
|
|
35
|
+
if [[ ! "$1" =~ ^[a-z0-9][a-z0-9-]*$ ]]; then
|
|
36
|
+
echo -e "${RED}Error: spec name must be lowercase kebab-case: $1${NC}" >&2
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
require_relative_inside() {
|
|
42
|
+
case "/$1/" in
|
|
43
|
+
//*|*/../*|*/./*)
|
|
44
|
+
echo -e "${RED}Error: shared path must be relative and stay inside the repo: $1${NC}" >&2
|
|
45
|
+
exit 1
|
|
46
|
+
;;
|
|
47
|
+
esac
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
# Last-resort removal when git cannot remove a worktree. Only ever a direct
|
|
51
|
+
# child of .worktrees that this script named.
|
|
52
|
+
remove_experiment_dir() {
|
|
53
|
+
local target="$1"
|
|
54
|
+
if [[ "$(dirname "$target")" != "$WORKTREE_DIR" ]] || [[ "$(basename "$target")" != optimize-*-exp-* ]] || [[ -L "$target" ]]; then
|
|
55
|
+
echo -e "${RED}Error: refusing to remove a path outside $WORKTREE_DIR: $target${NC}" >&2
|
|
56
|
+
return 1
|
|
57
|
+
fi
|
|
58
|
+
rm -rf "$target"
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
experiment_branch_name() {
|
|
62
|
+
local spec_name="${1:?Error: spec_name required}"
|
|
63
|
+
local padded_index="${2:?Error: padded_index required}"
|
|
64
|
+
|
|
65
|
+
# Keep experiment refs outside optimize/<spec> so they do not collide
|
|
66
|
+
# with the long-lived optimization branch namespace.
|
|
67
|
+
echo "optimize-exp/${spec_name}/exp-${padded_index}"
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
ensure_worktree_exclude() {
|
|
71
|
+
local exclude_file
|
|
72
|
+
exclude_file=$(git rev-parse --git-path info/exclude)
|
|
73
|
+
|
|
74
|
+
mkdir -p "$(dirname "$exclude_file")"
|
|
75
|
+
|
|
76
|
+
if ! grep -q "^\.worktrees$" "$exclude_file" 2>/dev/null; then
|
|
77
|
+
echo ".worktrees" >> "$exclude_file"
|
|
78
|
+
fi
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
is_registered_worktree() {
|
|
82
|
+
local worktree_path="${1:?Error: worktree_path required}"
|
|
83
|
+
|
|
84
|
+
git worktree list --porcelain | awk -v target="$worktree_path" '
|
|
85
|
+
$1 == "worktree" && $2 == target { found = 1 }
|
|
86
|
+
END { exit(found ? 0 : 1) }
|
|
87
|
+
'
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
is_branch_checked_out() {
|
|
91
|
+
local branch_name="${1:?Error: branch_name required}"
|
|
92
|
+
local branch_ref="refs/heads/$branch_name"
|
|
93
|
+
|
|
94
|
+
git worktree list --porcelain | awk -v target="$branch_ref" '
|
|
95
|
+
$1 == "branch" && $2 == target { found = 1 }
|
|
96
|
+
END { exit(found ? 0 : 1) }
|
|
97
|
+
'
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
reset_worktree_to_base() {
|
|
101
|
+
local worktree_path="${1:?Error: worktree_path required}"
|
|
102
|
+
local branch_name="${2:?Error: branch_name required}"
|
|
103
|
+
local base_branch="${3:?Error: base_branch required}"
|
|
104
|
+
local current_branch
|
|
105
|
+
|
|
106
|
+
current_branch=$(git -C "$worktree_path" symbolic-ref --quiet --short HEAD 2>/dev/null || true)
|
|
107
|
+
if [[ "$current_branch" != "$branch_name" ]]; then
|
|
108
|
+
echo -e "${RED}Error: Existing worktree is on unexpected branch: ${current_branch:-detached} (expected $branch_name)${NC}" >&2
|
|
109
|
+
echo -e "${RED}Clean up the stale worktree before rerunning this experiment.${NC}" >&2
|
|
110
|
+
return 1
|
|
111
|
+
fi
|
|
112
|
+
|
|
113
|
+
echo -e "${YELLOW}Resetting existing experiment worktree to base: $branch_name -> $base_branch${NC}" >&2
|
|
114
|
+
git -C "$worktree_path" reset --hard "$base_branch" >/dev/null
|
|
115
|
+
git -C "$worktree_path" clean -fdx >/dev/null
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
# Create an experiment worktree
|
|
119
|
+
create_worktree() {
|
|
120
|
+
local spec_name="${1:?Error: spec_name required}"
|
|
121
|
+
local exp_index="${2:?Error: exp_index required}"
|
|
122
|
+
local base_branch="${3:?Error: base_branch required}"
|
|
123
|
+
shift 3
|
|
124
|
+
require_spec_name "$spec_name"
|
|
125
|
+
local shared_file
|
|
126
|
+
for shared_file in "$@"; do
|
|
127
|
+
require_relative_inside "$shared_file"
|
|
128
|
+
done
|
|
129
|
+
|
|
130
|
+
local padded_index
|
|
131
|
+
padded_index=$(printf "%03d" "$exp_index")
|
|
132
|
+
local worktree_name="optimize-${spec_name}-exp-${padded_index}"
|
|
133
|
+
local branch_name
|
|
134
|
+
branch_name=$(experiment_branch_name "$spec_name" "$padded_index")
|
|
135
|
+
local worktree_path="$WORKTREE_DIR/$worktree_name"
|
|
136
|
+
|
|
137
|
+
# Check if worktree already exists
|
|
138
|
+
if [[ -d "$worktree_path" ]]; then
|
|
139
|
+
if ! git -C "$worktree_path" rev-parse --is-inside-work-tree >/dev/null 2>&1 || \
|
|
140
|
+
! is_registered_worktree "$worktree_path"; then
|
|
141
|
+
echo -e "${RED}Error: Existing path is not a valid registered git worktree: $worktree_path${NC}" >&2
|
|
142
|
+
echo -e "${RED}Remove or repair that directory before rerunning the experiment.${NC}" >&2
|
|
143
|
+
return 1
|
|
144
|
+
fi
|
|
145
|
+
|
|
146
|
+
echo -e "${YELLOW}Worktree already exists: $worktree_path${NC}" >&2
|
|
147
|
+
reset_worktree_to_base "$worktree_path" "$branch_name" "$base_branch"
|
|
148
|
+
else
|
|
149
|
+
mkdir -p "$WORKTREE_DIR"
|
|
150
|
+
ensure_worktree_exclude
|
|
151
|
+
|
|
152
|
+
# Create worktree from the base branch
|
|
153
|
+
if ! git worktree add -b "$branch_name" "$worktree_path" "$base_branch" --quiet 2>/dev/null; then
|
|
154
|
+
if git show-ref --verify --quiet "refs/heads/$branch_name"; then
|
|
155
|
+
if is_branch_checked_out "$branch_name"; then
|
|
156
|
+
echo -e "${RED}Error: Existing experiment branch is already checked out: $branch_name${NC}" >&2
|
|
157
|
+
echo -e "${RED}Clean up the stale worktree before rerunning this experiment.${NC}" >&2
|
|
158
|
+
return 1
|
|
159
|
+
fi
|
|
160
|
+
|
|
161
|
+
echo -e "${YELLOW}Resetting existing experiment branch to base: $branch_name -> $base_branch${NC}" >&2
|
|
162
|
+
git branch -f "$branch_name" "$base_branch" >/dev/null
|
|
163
|
+
git worktree add "$worktree_path" "$branch_name" --quiet
|
|
164
|
+
else
|
|
165
|
+
echo -e "${RED}Error: Failed to create worktree for $branch_name from $base_branch${NC}" >&2
|
|
166
|
+
return 1
|
|
167
|
+
fi
|
|
168
|
+
fi
|
|
169
|
+
fi
|
|
170
|
+
|
|
171
|
+
# Copy .env files from main repo
|
|
172
|
+
for f in "$GIT_ROOT"/.env*; do
|
|
173
|
+
if [[ -f "$f" ]]; then
|
|
174
|
+
local basename
|
|
175
|
+
basename=$(basename "$f")
|
|
176
|
+
if [[ "$basename" != ".env.example" ]]; then
|
|
177
|
+
cp "$f" "$worktree_path/$basename"
|
|
178
|
+
fi
|
|
179
|
+
fi
|
|
180
|
+
done
|
|
181
|
+
|
|
182
|
+
# Copy shared files
|
|
183
|
+
for shared_file in "$@"; do
|
|
184
|
+
if [[ -f "$GIT_ROOT/$shared_file" ]]; then
|
|
185
|
+
local dir
|
|
186
|
+
dir=$(dirname "$worktree_path/$shared_file")
|
|
187
|
+
mkdir -p "$dir"
|
|
188
|
+
cp "$GIT_ROOT/$shared_file" "$worktree_path/$shared_file"
|
|
189
|
+
elif [[ -d "$GIT_ROOT/$shared_file" ]]; then
|
|
190
|
+
local dir
|
|
191
|
+
dir=$(dirname "$worktree_path/$shared_file")
|
|
192
|
+
mkdir -p "$dir"
|
|
193
|
+
rm -rf "$worktree_path/$shared_file"
|
|
194
|
+
cp -R "$GIT_ROOT/$shared_file" "$worktree_path/$shared_file"
|
|
195
|
+
fi
|
|
196
|
+
done
|
|
197
|
+
|
|
198
|
+
echo "$worktree_path"
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
# Clean up a single experiment worktree
|
|
202
|
+
cleanup_worktree() {
|
|
203
|
+
local spec_name="${1:?Error: spec_name required}"
|
|
204
|
+
local exp_index="${2:?Error: exp_index required}"
|
|
205
|
+
require_spec_name "$spec_name"
|
|
206
|
+
|
|
207
|
+
local padded_index
|
|
208
|
+
padded_index=$(printf "%03d" "$exp_index")
|
|
209
|
+
local worktree_name="optimize-${spec_name}-exp-${padded_index}"
|
|
210
|
+
local branch_name
|
|
211
|
+
branch_name=$(experiment_branch_name "$spec_name" "$padded_index")
|
|
212
|
+
local worktree_path="$WORKTREE_DIR/$worktree_name"
|
|
213
|
+
|
|
214
|
+
if [[ -d "$worktree_path" ]]; then
|
|
215
|
+
git worktree remove "$worktree_path" --force 2>/dev/null || {
|
|
216
|
+
# If worktree remove fails, try manual cleanup
|
|
217
|
+
remove_experiment_dir "$worktree_path" 2>/dev/null || true
|
|
218
|
+
git worktree prune 2>/dev/null || true
|
|
219
|
+
}
|
|
220
|
+
fi
|
|
221
|
+
|
|
222
|
+
# Delete the experiment branch
|
|
223
|
+
git branch -D "$branch_name" 2>/dev/null || true
|
|
224
|
+
|
|
225
|
+
echo -e "${GREEN}Cleaned up: $worktree_name${NC}" >&2
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
# Clean up all experiment worktrees for a spec
|
|
229
|
+
cleanup_all() {
|
|
230
|
+
local spec_name="${1:?Error: spec_name required}"
|
|
231
|
+
require_spec_name "$spec_name"
|
|
232
|
+
local prefix="optimize-${spec_name}-exp-"
|
|
233
|
+
local count=0
|
|
234
|
+
|
|
235
|
+
if [[ ! -d "$WORKTREE_DIR" ]]; then
|
|
236
|
+
echo -e "${YELLOW}No worktrees directory found${NC}" >&2
|
|
237
|
+
return 0
|
|
238
|
+
fi
|
|
239
|
+
|
|
240
|
+
for worktree_path in "$WORKTREE_DIR"/${prefix}*; do
|
|
241
|
+
if [[ -d "$worktree_path" ]]; then
|
|
242
|
+
local worktree_name
|
|
243
|
+
worktree_name=$(basename "$worktree_path")
|
|
244
|
+
# Extract index from name
|
|
245
|
+
local index_str="${worktree_name#$prefix}"
|
|
246
|
+
|
|
247
|
+
git worktree remove "$worktree_path" --force 2>/dev/null || {
|
|
248
|
+
remove_experiment_dir "$worktree_path" 2>/dev/null || true
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
# Delete the branch
|
|
252
|
+
local branch_name
|
|
253
|
+
branch_name=$(experiment_branch_name "$spec_name" "$index_str")
|
|
254
|
+
git branch -D "$branch_name" 2>/dev/null || true
|
|
255
|
+
|
|
256
|
+
count=$((count + 1))
|
|
257
|
+
fi
|
|
258
|
+
done
|
|
259
|
+
|
|
260
|
+
git worktree prune 2>/dev/null || true
|
|
261
|
+
|
|
262
|
+
# Clean up empty worktree directory
|
|
263
|
+
if [[ -d "$WORKTREE_DIR" ]] && [[ -z "$(ls -A "$WORKTREE_DIR" 2>/dev/null)" ]]; then
|
|
264
|
+
rmdir "$WORKTREE_DIR" 2>/dev/null || true
|
|
265
|
+
fi
|
|
266
|
+
|
|
267
|
+
echo -e "${GREEN}Cleaned up $count experiment worktree(s) for $spec_name${NC}" >&2
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
# Count total worktrees (for budget check)
|
|
271
|
+
count_worktrees() {
|
|
272
|
+
local count=0
|
|
273
|
+
if [[ -d "$WORKTREE_DIR" ]]; then
|
|
274
|
+
for worktree_path in "$WORKTREE_DIR"/*; do
|
|
275
|
+
if [[ -d "$worktree_path" ]] && [[ -e "$worktree_path/.git" ]]; then
|
|
276
|
+
count=$((count + 1))
|
|
277
|
+
fi
|
|
278
|
+
done
|
|
279
|
+
fi
|
|
280
|
+
echo "$count"
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
# Main
|
|
284
|
+
main() {
|
|
285
|
+
local command="${1:-help}"
|
|
286
|
+
|
|
287
|
+
case "$command" in
|
|
288
|
+
create)
|
|
289
|
+
shift
|
|
290
|
+
create_worktree "$@"
|
|
291
|
+
;;
|
|
292
|
+
cleanup)
|
|
293
|
+
shift
|
|
294
|
+
cleanup_worktree "$@"
|
|
295
|
+
;;
|
|
296
|
+
cleanup-all)
|
|
297
|
+
shift
|
|
298
|
+
cleanup_all "$@"
|
|
299
|
+
;;
|
|
300
|
+
count)
|
|
301
|
+
count_worktrees
|
|
302
|
+
;;
|
|
303
|
+
help)
|
|
304
|
+
cat << 'EOF'
|
|
305
|
+
Experiment Worktree Manager
|
|
306
|
+
|
|
307
|
+
Usage:
|
|
308
|
+
experiment-worktree.sh create <spec_name> <exp_index> <base_branch> [shared_file ...]
|
|
309
|
+
experiment-worktree.sh cleanup <spec_name> <exp_index>
|
|
310
|
+
experiment-worktree.sh cleanup-all <spec_name>
|
|
311
|
+
experiment-worktree.sh count
|
|
312
|
+
|
|
313
|
+
Commands:
|
|
314
|
+
create Create an experiment worktree with copied shared files
|
|
315
|
+
cleanup Remove a single experiment worktree and its branch
|
|
316
|
+
cleanup-all Remove all experiment worktrees for a spec
|
|
317
|
+
count Count total active worktrees (for budget checking)
|
|
318
|
+
|
|
319
|
+
Worktrees: .worktrees/optimize-<spec>-exp-<NNN>/
|
|
320
|
+
Branches: optimize-exp/<spec>/exp-<NNN>
|
|
321
|
+
EOF
|
|
322
|
+
;;
|
|
323
|
+
*)
|
|
324
|
+
echo -e "${RED}Unknown command: $command${NC}" >&2
|
|
325
|
+
exit 1
|
|
326
|
+
;;
|
|
327
|
+
esac
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
main "$@"
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Measurement Runner
|
|
4
|
+
# Runs a measurement command, captures JSON output, and handles timeouts.
|
|
5
|
+
# The orchestrating agent (not this script) evaluates gates and handles
|
|
6
|
+
# stability repeats.
|
|
7
|
+
#
|
|
8
|
+
# Usage: measure.sh <command> <timeout_seconds> [working_directory] [KEY=VALUE ...]
|
|
9
|
+
#
|
|
10
|
+
# Arguments:
|
|
11
|
+
# command - Shell command to run (e.g., "python evaluate.py")
|
|
12
|
+
# timeout_seconds - Maximum seconds before killing the command
|
|
13
|
+
# working_directory - Directory to run the command in (default: .)
|
|
14
|
+
# KEY=VALUE - Optional environment variables to set before running
|
|
15
|
+
#
|
|
16
|
+
# Output:
|
|
17
|
+
# stdout: Raw JSON output from the measurement command
|
|
18
|
+
# stderr: Passed through from the measurement command
|
|
19
|
+
# exit code: Same as the measurement command (124 for timeout, 125 when
|
|
20
|
+
# CE_OPTIMIZE_CENSOR_AFTER fires before timeout_seconds)
|
|
21
|
+
|
|
22
|
+
set -euo pipefail
|
|
23
|
+
|
|
24
|
+
# Parse arguments
|
|
25
|
+
COMMAND="${1:?Error: command argument required}"
|
|
26
|
+
TIMEOUT="${2:?Error: timeout_seconds argument required}"
|
|
27
|
+
shift 2
|
|
28
|
+
|
|
29
|
+
WORKDIR="."
|
|
30
|
+
if [[ $# -gt 0 ]] && [[ "$1" != *=* ]]; then
|
|
31
|
+
WORKDIR="$1"
|
|
32
|
+
shift
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
# Set any KEY=VALUE environment variables
|
|
36
|
+
for arg in "$@"; do
|
|
37
|
+
if [[ "$arg" == *=* ]]; then
|
|
38
|
+
export "$arg"
|
|
39
|
+
fi
|
|
40
|
+
done
|
|
41
|
+
|
|
42
|
+
# Change to working directory
|
|
43
|
+
cd "$WORKDIR" || {
|
|
44
|
+
echo "Error: cannot cd to $WORKDIR" >&2
|
|
45
|
+
exit 1
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
run_timed_command() {
|
|
49
|
+
local timeout_bin="$1"
|
|
50
|
+
if [[ -n "${CENSOR_STATUS_FILE:-}" ]]; then
|
|
51
|
+
"$timeout_bin" "$TIMEOUT" bash -c 'bash -c "$1"; printf "%s\n" "$?" > "$2"; exit 0' _ "$COMMAND" "$CENSOR_STATUS_FILE"
|
|
52
|
+
return
|
|
53
|
+
fi
|
|
54
|
+
"$timeout_bin" "$TIMEOUT" bash -c "$COMMAND"
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
run_with_timeout() {
|
|
58
|
+
if command -v timeout >/dev/null 2>&1; then
|
|
59
|
+
run_timed_command timeout
|
|
60
|
+
return
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
if command -v gtimeout >/dev/null 2>&1; then
|
|
64
|
+
run_timed_command gtimeout
|
|
65
|
+
return
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
PY=""
|
|
69
|
+
for c in python3 python py; do
|
|
70
|
+
if command -v "$c" >/dev/null 2>&1 && "$c" -c '' >/dev/null 2>&1; then
|
|
71
|
+
PY="$c"
|
|
72
|
+
break
|
|
73
|
+
fi
|
|
74
|
+
done
|
|
75
|
+
if [ -n "$PY" ]; then
|
|
76
|
+
"$PY" - "$TIMEOUT" "$COMMAND" "${CENSOR_STATUS_FILE:-}" <<'PY'
|
|
77
|
+
import os
|
|
78
|
+
import signal
|
|
79
|
+
import subprocess
|
|
80
|
+
import sys
|
|
81
|
+
|
|
82
|
+
timeout_seconds = float(sys.argv[1])
|
|
83
|
+
command = sys.argv[2]
|
|
84
|
+
status_file = sys.argv[3] if len(sys.argv) > 3 and sys.argv[3] else ""
|
|
85
|
+
proc = subprocess.Popen(["bash", "-c", command], start_new_session=True)
|
|
86
|
+
|
|
87
|
+
try:
|
|
88
|
+
rc = proc.wait(timeout=timeout_seconds)
|
|
89
|
+
if status_file:
|
|
90
|
+
with open(status_file, "w", encoding="utf-8") as fh:
|
|
91
|
+
fh.write(f"{rc}\n")
|
|
92
|
+
sys.exit(0)
|
|
93
|
+
sys.exit(rc)
|
|
94
|
+
except subprocess.TimeoutExpired:
|
|
95
|
+
os.killpg(proc.pid, signal.SIGTERM)
|
|
96
|
+
try:
|
|
97
|
+
proc.wait(timeout=5)
|
|
98
|
+
except subprocess.TimeoutExpired:
|
|
99
|
+
os.killpg(proc.pid, signal.SIGKILL)
|
|
100
|
+
proc.wait()
|
|
101
|
+
sys.exit(124)
|
|
102
|
+
PY
|
|
103
|
+
return
|
|
104
|
+
fi
|
|
105
|
+
|
|
106
|
+
echo "Error: no timeout implementation available (tried timeout, gtimeout, and a working Python 3 interpreter)" >&2
|
|
107
|
+
exit 1
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
# Optional futility bound: CE_OPTIMIZE_CENSOR_AFTER=<seconds> kills a live
|
|
111
|
+
# run that has already exceeded a predeclared noncompetitive bound. Distinct
|
|
112
|
+
# from timeout_seconds (the spec's hard cap). Exit 125 means censored; 124
|
|
113
|
+
# still means the configured timeout fired.
|
|
114
|
+
CENSOR_AFTER="${CE_OPTIMIZE_CENSOR_AFTER:-}"
|
|
115
|
+
CENSORING=0
|
|
116
|
+
CENSOR_STATUS_FILE=""
|
|
117
|
+
if [[ -n "$CENSOR_AFTER" ]] && awk -v a="$CENSOR_AFTER" -v t="$TIMEOUT" 'BEGIN { exit !(a ~ /^[0-9]+(\.[0-9]+)?$/ && t+0 == t && a+0 > 0 && a+0 < t+0) }'; then
|
|
118
|
+
TIMEOUT="$CENSOR_AFTER"
|
|
119
|
+
CENSORING=1
|
|
120
|
+
CENSOR_STATUS_FILE=$(mktemp "${TMPDIR:-/tmp}/ce-optimize-censor-XXXXXX")
|
|
121
|
+
fi
|
|
122
|
+
|
|
123
|
+
# Run the measurement command with timeout
|
|
124
|
+
# timeout returns 124 if the command times out
|
|
125
|
+
# We pass stdout and stderr through directly
|
|
126
|
+
set +e
|
|
127
|
+
run_with_timeout
|
|
128
|
+
status=$?
|
|
129
|
+
set -e
|
|
130
|
+
if [[ $CENSORING -eq 1 ]]; then
|
|
131
|
+
if [[ -s "$CENSOR_STATUS_FILE" ]]; then
|
|
132
|
+
status=$(cat "$CENSOR_STATUS_FILE")
|
|
133
|
+
elif [[ $status -eq 124 ]]; then
|
|
134
|
+
echo "Error: measurement censored after ${CENSOR_AFTER}s (noncompetitive bound)" >&2
|
|
135
|
+
rm -f "$CENSOR_STATUS_FILE"
|
|
136
|
+
exit 125
|
|
137
|
+
fi
|
|
138
|
+
rm -f "$CENSOR_STATUS_FILE"
|
|
139
|
+
fi
|
|
140
|
+
exit "$status"
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Parallelism Probe
|
|
4
|
+
# Detects common parallelism blockers in the target project.
|
|
5
|
+
# Output is advisory -- the skill presents results to the user for approval.
|
|
6
|
+
#
|
|
7
|
+
# Usage: parallel-probe.sh <project_directory> [measurement_command] [measurement_workdir] [shared_file ...]
|
|
8
|
+
#
|
|
9
|
+
# Arguments:
|
|
10
|
+
# project_directory - Root directory of the project to probe
|
|
11
|
+
# measurement_command - The measurement command from the spec (optional, for port detection)
|
|
12
|
+
# measurement_workdir - Measurement working directory relative to project root (default: .)
|
|
13
|
+
# shared_file - Explicitly declared shared files that parallel runs depend on
|
|
14
|
+
#
|
|
15
|
+
# Output:
|
|
16
|
+
# JSON to stdout with:
|
|
17
|
+
# mode: "parallel" | "serial" | "user-decision"
|
|
18
|
+
# blockers: [ { type, description, suggestion } ]
|
|
19
|
+
|
|
20
|
+
set -euo pipefail
|
|
21
|
+
|
|
22
|
+
PROJECT_DIR="${1:?Error: project_directory argument required}"
|
|
23
|
+
MEASUREMENT_CMD="${2:-}"
|
|
24
|
+
MEASUREMENT_WORKDIR="${3:-.}"
|
|
25
|
+
|
|
26
|
+
shift 3 2>/dev/null || shift $# 2>/dev/null || true
|
|
27
|
+
SHARED_FILES=()
|
|
28
|
+
if [[ $# -gt 0 ]]; then
|
|
29
|
+
SHARED_FILES=("$@")
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
cd "$PROJECT_DIR" || {
|
|
33
|
+
echo '{"mode":"serial","blockers":[{"type":"error","description":"Cannot access project directory","suggestion":"Check path"}]}'
|
|
34
|
+
exit 0
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
PY=""
|
|
38
|
+
for c in python3 python py; do
|
|
39
|
+
if command -v "$c" >/dev/null 2>&1 && "$c" -c '' >/dev/null 2>&1; then
|
|
40
|
+
PY="$c"
|
|
41
|
+
break
|
|
42
|
+
fi
|
|
43
|
+
done
|
|
44
|
+
if [ -z "$PY" ]; then
|
|
45
|
+
echo '{"mode":"serial","blockers":[{"type":"missing_dependency","description":"A working Python 3 interpreter is required for structured probe output","suggestion":"Install Python 3 (python3, python, or py on PATH) or skip the probe and review parallel-readiness manually"}],"blocker_count":1}'
|
|
46
|
+
exit 0
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
BLOCKERS="[]"
|
|
50
|
+
SCAN_PATHS=()
|
|
51
|
+
|
|
52
|
+
add_blocker() {
|
|
53
|
+
local type="$1"
|
|
54
|
+
local desc="$2"
|
|
55
|
+
local suggestion="$3"
|
|
56
|
+
BLOCKERS=$(echo "$BLOCKERS" | "$PY" -c "
|
|
57
|
+
import json, sys
|
|
58
|
+
b = json.load(sys.stdin)
|
|
59
|
+
b.append({'type': '$type', 'description': '''$desc''', 'suggestion': '''$suggestion'''})
|
|
60
|
+
print(json.dumps(b))
|
|
61
|
+
" 2>/dev/null || echo "$BLOCKERS")
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
add_scan_path() {
|
|
65
|
+
local candidate="$1"
|
|
66
|
+
|
|
67
|
+
if [[ -z "$candidate" ]]; then
|
|
68
|
+
return
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
if [[ -e "$candidate" ]]; then
|
|
72
|
+
SCAN_PATHS+=("$candidate")
|
|
73
|
+
fi
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
add_scan_path "$MEASUREMENT_WORKDIR"
|
|
77
|
+
|
|
78
|
+
if [[ ${#SHARED_FILES[@]} -gt 0 ]]; then
|
|
79
|
+
for shared_file in "${SHARED_FILES[@]}"; do
|
|
80
|
+
add_scan_path "$shared_file"
|
|
81
|
+
done
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
if [[ ${#SCAN_PATHS[@]} -eq 0 ]]; then
|
|
85
|
+
SCAN_PATHS=(".")
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
# Check 1: Hardcoded ports in measurement command
|
|
89
|
+
if [[ -n "$MEASUREMENT_CMD" ]]; then
|
|
90
|
+
# Look for common port patterns in the command itself
|
|
91
|
+
if echo "$MEASUREMENT_CMD" | grep -qE '(--port(?:\s+|=)[0-9]+|:\s*[0-9]{4,5}|PORT=[0-9]+|localhost:[0-9]+)'; then
|
|
92
|
+
add_blocker "port" "Measurement command contains hardcoded port reference" "Parameterize port via environment variable (e.g., PORT=\$EVAL_PORT)"
|
|
93
|
+
fi
|
|
94
|
+
fi
|
|
95
|
+
|
|
96
|
+
# Check 2: SQLite databases in the measurement workdir or declared shared files
|
|
97
|
+
SQLITE_FILES=$(find "${SCAN_PATHS[@]}" -maxdepth 4 -type f \( -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' \) ! -path '*/.git/*' ! -path '*/node_modules/*' ! -path '*/.claude/*' ! -path '*/.context/*' ! -path '*/.worktrees/*' 2>/dev/null | head -10 || true)
|
|
98
|
+
if [[ -n "$SQLITE_FILES" ]]; then
|
|
99
|
+
FILE_COUNT=$(echo "$SQLITE_FILES" | wc -l | tr -d ' ')
|
|
100
|
+
add_blocker "shared_file" "Found $FILE_COUNT SQLite database file(s)" "Copy database files into each experiment worktree"
|
|
101
|
+
fi
|
|
102
|
+
|
|
103
|
+
# Check 3: Lock/PID files in the measurement workdir or declared shared files
|
|
104
|
+
LOCK_FILES=$(find "${SCAN_PATHS[@]}" -maxdepth 4 -type f \( -name '*.lock' -o -name '*.pid' \) ! -path '*/.git/*' ! -path '*/node_modules/*' ! -path '*/.claude/*' ! -path '*/.context/*' ! -path '*/.worktrees/*' ! -name 'package-lock.json' ! -name 'yarn.lock' ! -name 'bun.lock' ! -name 'bun.lockb' ! -name 'Gemfile.lock' ! -name 'poetry.lock' ! -name 'Cargo.lock' 2>/dev/null | head -10 || true)
|
|
105
|
+
if [[ -n "$LOCK_FILES" ]]; then
|
|
106
|
+
FILE_COUNT=$(echo "$LOCK_FILES" | wc -l | tr -d ' ')
|
|
107
|
+
add_blocker "lock_file" "Found $FILE_COUNT lock/PID file(s) that may cause contention" "Ensure measurement command cleans up lock files, or run in serial mode"
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# Check 4: Exclusive resource hints in the measurement command
|
|
111
|
+
if [[ -n "$MEASUREMENT_CMD" ]] && echo "$MEASUREMENT_CMD" | grep -qiE '(cuda|gpu|tensorflow|torch|nvidia-smi|CUDA_VISIBLE_DEVICES)'; then
|
|
112
|
+
add_blocker "exclusive_resource" "Measurement command appears to use GPU or another exclusive accelerator" "GPU is typically an exclusive resource -- consider serial mode or device parameterization"
|
|
113
|
+
fi
|
|
114
|
+
|
|
115
|
+
# Determine mode
|
|
116
|
+
BLOCKER_COUNT=$(echo "$BLOCKERS" | "$PY" -c "import json,sys; print(len(json.load(sys.stdin)))" 2>/dev/null || echo "0")
|
|
117
|
+
|
|
118
|
+
if [[ "$BLOCKER_COUNT" == "0" ]]; then
|
|
119
|
+
MODE="parallel"
|
|
120
|
+
elif echo "$BLOCKERS" | "$PY" -c "import json,sys; b=json.load(sys.stdin); exit(0 if any(x['type']=='exclusive_resource' for x in b) else 1)" 2>/dev/null; then
|
|
121
|
+
MODE="serial"
|
|
122
|
+
else
|
|
123
|
+
MODE="user-decision"
|
|
124
|
+
fi
|
|
125
|
+
|
|
126
|
+
# Output JSON result
|
|
127
|
+
"$PY" -c "
|
|
128
|
+
import json
|
|
129
|
+
print(json.dumps({
|
|
130
|
+
'mode': '$MODE',
|
|
131
|
+
'blockers': $BLOCKERS,
|
|
132
|
+
'blocker_count': $BLOCKER_COUNT
|
|
133
|
+
}, indent=2))
|
|
134
|
+
"
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ce-plan
|
|
3
|
+
description: "Create structured plans for multi-step work, including software and non-software tasks. Use when asked to plan, break down implementation, plan from requirements, or deepen an existing plan; prefer ce-brainstorm for exploratory framing."
|
|
4
|
+
argument-hint: "[optional: feature description, requirements doc path, plan path to deepen, or any task to plan] [output:html]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Create Technical Plan
|
|
8
|
+
|
|
9
|
+
**The current year is 2026.**
|
|
10
|
+
|
|
11
|
+
**Outcome:** a plan for carrying out and checking the agreed work while preserving its outcome and constraints. Resolve technical choices from evidence; leave adequate instructions unchanged. `ce-brainstorm` defines **WHAT**, `ce-plan` plans **HOW**, and `ce-work` executes. A prior brainstorm is optional.
|
|
12
|
+
|
|
13
|
+
**An explicit invocation always produces a plan.** Never classify a direct invocation as "not a planning task" and route out. It may select any output contract below, and the smallest valid plan is a few sentences in chat.
|
|
14
|
+
|
|
15
|
+
**Research, decide, and write the plan — never implement.** Do not write production code, run tests, or learn from execution-time results. Directional pseudo-code and grammar sketches may communicate design; changing code to see what happens belongs in `ce-work`.
|
|
16
|
+
|
|
17
|
+
## Mandatory Completion Contract
|
|
18
|
+
|
|
19
|
+
A run is complete when its output contract's done condition is met. Every normal interactive branch that produces a plan artifact or checkpoint is incomplete until the user has been asked what to do next. A request that already authorizes the next action is that answer. For a Durable software implementation-plan run that continues past the resume check, that means the Phase 5.4 menu has been presented and the selected action has actually fired. For Direct, the change stated and the handoff offered; for a Chat brief, the brief and its one-line save-or-`ce-work` offer in chat. Neither presents the Phase 5.4 menu. Non-software plans and approach-level plans end with the handoff their reference workflow defines. A run that only answers a question may end after the answer unless its reference requires a save or share step.
|
|
20
|
+
|
|
21
|
+
Writing the file, checking confidence, and running or explicitly skipping `ce-doc-review` are intermediate milestones. In pipeline mode, the run is complete only when the plan, the confidence check, and the non-interactive document-review state have been returned to the caller, which decides what happens next.
|
|
22
|
+
|
|
23
|
+
## Interaction Method
|
|
24
|
+
|
|
25
|
+
Ask one question at a time through the host's blocking question tool already in the current tool list. Match by capability; never probe a user-facing tool to discover it. If none is listed or a real question call errors, render numbered choices in chat; never silently skip a required question. If no feature description was supplied, ask what to plan and wait.
|
|
26
|
+
|
|
27
|
+
## Output Contract
|
|
28
|
+
|
|
29
|
+
Decide which output contract applies at the start of scoping (Phase 0.6), before choosing depth and before the scoping synthesis. It applies only when no resume route (Phase 0.1) fired and the source check (Phase 0.2) found no upstream artifact. Ground it with bounded inline reads of what the request names, without dispatching a subagent. Select one:
|
|
30
|
+
|
|
31
|
+
- **Direct** — the work can be stated, done, and verified in one pass with no decision the user would weigh. State the change in a few sentences and offer the handoff to `ce-work` or the user; execution starts only with implementation authority, as `references/output-contracts.md` defines.
|
|
32
|
+
- **Chat brief** — bounded work with at most one decision the user would weigh and no risk surface. Deliver it in chat and stop.
|
|
33
|
+
- **Durable** — everything else. Continue the workflow below.
|
|
34
|
+
|
|
35
|
+
`references/output-contracts.md` defines Direct and Chat brief; read it when either is selected. When the tier is still uncertain after those reads, take the heavier one. If a read surfaces a decision the user would weigh, a risk surface, or multi-pass verification, move to the heavier tier before emitting anything. Durable regardless of size: a run with no synchronous user to act on chat this turn (pipeline, headless, goal- or scheduler-driven), a request whose wording asks for a plan, a plan file, or an output format, a request that continues an existing plan's item, and a risk surface — authentication, payments, migrations, external contracts.
|
|
36
|
+
|
|
37
|
+
## Workflow
|
|
38
|
+
|
|
39
|
+
Phases run in order unless a reference routes out or short-circuits. Read a phase's required reference in full when you enter that phase; a read made before that phase does not satisfy it, and a reference named for the final steps is read again at its step even when already in context. If a required reference cannot be read, stop before the action it governs and report the blocker and recovery path; never reconstruct the missing rules from memory. In pipeline mode, every required-reference failure returns `status: blocked`, `phase`, `blocker`, and `recovery_path`; include `artifact_path` and preserve the artifact when one exists. Report blocked even when an artifact exists.
|
|
40
|
+
|
|
41
|
+
### Phase 0: Output, Resume, and Scope
|
|
42
|
+
|
|
43
|
+
1. **Output first.** Read `references/output-mode.md` before interpreting any phase. It defines token parsing, output and confirmation precedence, renderer selection, artifact location, and when a repository may be resolved.
|
|
44
|
+
2. **Resume, deepen, approach, and domain.** Read `references/resume.md` before acting. It defines resuming an existing plan, enriching a requirements-only plan, deepening, approach-level planning, and the software/non-software split. Follow any terminal route it selects; otherwise continue.
|
|
45
|
+
3. **Source and scope.** Read `references/intake.md` before Phase 0.2 and follow it through Phase 0.7. It defines finding and preserving the upstream artifact, routing out to bootstrap work, blocking questions, depth, named resources, and the scoping synthesis; the Output Contract decision above happens inside it. Do not pass a decision point that has not resolved.
|
|
46
|
+
|
|
47
|
+
### Phases 1-4: Research and Compose
|
|
48
|
+
|
|
49
|
+
4. Read `references/research.md` before gathering context.
|
|
50
|
+
5. Read `references/structure.md` before resolving questions or structuring the plan.
|
|
51
|
+
6. Compose from `references/plan-sections.md` plus the format-rendering reference selected by `output-mode.md`.
|
|
52
|
+
|
|
53
|
+
### Phase 5: Review, Write, Deepen, and Hand Off
|
|
54
|
+
|
|
55
|
+
7. Read `references/final-review.md` before the pre-write review; it defines Phase 5.1 through 5.3.2. On an interactive run from a brainstorm, the user sees the Phase 5.1.5 scoping synthesis in chat before the write: a confirmation to wait on, or its one-line auto-proceed announcement.
|
|
56
|
+
8. **Model elevation.** Immediately before authoring, read `references/reasoning-elevation.md`, resolve the choice at this boundary, and follow it. Do not author until activation resolution has completed and any selected dispatch or transparent fallback has settled.
|
|
57
|
+
9. In pipeline mode, evidence that invalidates a decision settled earlier in the session stops the write. Return the exact token `settled-decision-invalidated`, the decision, and the reason; do not resolve it silently.
|
|
58
|
+
10. Write the plan before presenting options, then complete the confidence path `final-review.md` defines.
|
|
59
|
+
|
|
60
|
+
**STOP. Read `references/plan-handoff.md` immediately before Phase 5.3.8 and 5.4** (document review and the handoff menu). Document review is mandatory for a Durable plan and the default is non-interactive (`mode:non-interactive`). In interactive software runs, ask exactly: "Plan ready at `<absolute path to plan>`. What would you like to do next?" Present its menu and wait. If the selection arrives after a user turn, reload `references/plan-handoff.md` before acting. Rendering the menu, receiving a selection, or announcing a route is not completion; execute the selected action.
|