comet-build
Comet Phase 3: Plan and Build
On first entering a phase, handing off to a new Agent, or restoring context, read and follow Task Context and Artifact Language. Prefer the current continuation or claimed Action's contextRequest; do not retrieve repeatedly during uninterrupted work in the same phase.
After entry returns layout, follow comet-classic/reference/classic-layout.md to bind each logical root to its directory. Do not reload the protocol if it is already in context. Use the adapter for all OpenSpec CLI calls and the bound <classic-*> roots for paths; do not run an extra root show first.
SDK Run path
On first entering the current SDK phase, handing off to a new Agent, or restoring context, read phase entry and recovery and the current phase's section in that reference. Reuse them when already available and still valid in this session. Continue with the phase below; recovery routes based on nextAction.kind apply only to older responses without a continuation mode.
Reuse the current valid result's agent.continuation / data.nextAction and bound state. Run comet state next <change-name> --json only on a cold resume, after external state changes, or when necessary information is missing. For data.runtimeFormat: sdk, advance only this Run; the implementation methods, plan content, and reviews are in SDK execution methods; submit state and evidence through this section. data.phase must be build. Reuse valid layout and configuration already in context; use comet state check <change-name> build --json only when they are missing. For nextAction.kind: reconcile, run comet state check <change-name> build --recover --json and establish the original outcome before repeating external work.
First check workflow in the valid configuration or the current nextAction.stepId. For tweak.build.* / workflow: tweak, Immediately execute: Use the Skill tool to load the comet-tweak skill. Skipping this step is prohibited. For hotfix.build.* / workflow: hotfix, Immediately execute: Use the Skill tool to load the comet-hotfix skill. Skipping this step is prohibited. After the skill loads, pass the same change, workspace, phase, Run revision, and continuation and resume its SDK Build step. Do not require a full Design Doc or implementation plan, or repeat Open. Older Runs may still store comet-build as the raw Action reference; route them the same way. After an approved upgrade, use the full path in SDK execution methods when the current step is full.build.*.
- At
full.build.configure, inspect existing choices under SDK execution methods and ask only for missing decisions about execution, TDD, and review. Put confirmedbuild_mode,tdd_mode,review_mode,subagent_dispatch, and, when required,direct_overridein a temporary JSON file inside the repository. If the user already explicitly chose this complete configuration, runcomet state propose-build <change-name> --file <configuration-json> --confirmedto save proposal and approval together. Otherwise runcomet state propose-build <change-name> --file <configuration-json>. Only for a remaining pending Wait, savedata.wait.proposalHash, show the actual configuration, and await confirmation under decision-point.md. Then runcomet state decide-build <change-name> --proposal-hash <proposalHash> --choice <approved|rejected>. Propose revised choices after rejection. Reuse an existing pending Wait on recovery. - At
full.build.plan, create or inspect the plan under SDK execution methods. Refer to the current Design Doc and tasks.md, mapping tasks with<!-- comet-task-authority: <classic-task-authority-ref> -->and<!-- comet-task-ref:<task-id> -->, not another checkbox list. Runcomet state submit-plan <change-name> --plan <plan-ref>. Add--pauseonly if the user explicitly requested a pause after planning. For aplan-readyWait, await an explicit instruction to proceed and use its current hash incomet state continue-plan <change-name> --proposal-hash <proposalHash>. Do not reuse approval after plan or task requirements change. - At
full.build.execute, implement using the chosen method, review tasks or segments, and run relevant checks. Check off the same tasks.md only after actual completion and satisfactory review. Use the sharedstate tasks,state task-complete, andstate checkpointtools for task IDs, completion, and coordination progress; they do not advance the SDK Run. SDK must not call legacycomet handoff --write. Once plan, tasks, and workspace agree, runcomet state complete-build <change-name> --session <builder-execution-ref>to enter the check Action. Resolve drift before submission. - At
full.build.check, runcomet guard <change-name> build --apply -- <program> [args...]with an explicit complete build or acceptance command for this workspace. There is no new user decision here:--applyrevalidates current tasks, configuration, workspace, and evidence before executing the check and recording a receipt in the same Run. Only valid successful evidence advances to Verify. Use the read-onlycomet guard <change-name> buildpreview only when diagnosis is needed. After interrupted receipt submission, investigate the Action and check record before re-executing anything. On failure, repair the cause from the returned current Build Action; readstate next --jsononly when no continuation was returned.