cf:develop · diff
v3.0.0 to v3.0.0
84 added, 57 removed. Audit A to A.
---
name: hapo:develop
description: "Implement an explicitly requested process-first feature or task, run its real verification, and close it with one evidence owner. Also supports existing legacy Specs packets."
user-invocable: true
when_to_use: "Use to implement a ready feature packet, one named task, or a clear low-risk change."
category: utilities
keywords: [implementation, specs, verification]
argument-hint: "[feature-name|specs-directory-path] [task-file] [--flash] [--parallel [N]] [--notes]"
metadata:
author: haposoft
version: "3.0.0"
---
# Develop — implement, prove, synchronize
Implement only the explicitly requested scope. For a process-first feature,
- `plan.md` and flat tasks are the durable packet; one closeout owner coordinates verification, review, sync, and docs impact without borrowing evidence.
-
+ `plan.md` and flat tasks are the durable packet; one closeout owner coordinates
+ verification, review, sync, and docs impact without borrowing evidence.
Develop never starts merely because Specs finished. The user invokes it.
## Usage and pre-state guard
```text
/hapo:develop <feature>
/hapo:develop specs/<feature>
/hapo:develop <feature> task-02-<slug>.md
/hapo:develop <feature> --flash
/hapo:develop <feature> --parallel [N]
/hapo:develop <feature> --notes
```
`--notes` is opt-in. Only then load `references/implementation-notes-template.html`;
record decisions, scope exceptions, risks, gaps, and verification limits. Never create it by default.
Before any state mutation, reject `--flash` combined with `--parallel`:
```bash
node .claude/scripts/workflow-policy.cjs --flash --parallel --json
```
The pair exits `2` before a task edit, receipt, worktree, subagent, or commit. Do not reproduce it with a looser parser.
## Resolve the work packet
1. Resolve one `specs/<feature>/plan.md` plus flat `task-NN-*.md`; an explicit task path wins.
2. Read C1 scope, exclusions, acceptance mapping, ownership, and task order.
- 3. A task is unblocked only when every named dependency is done with a valid inline Receipt.
- 4. Full-feature mode selects one unblocked task at a time, in plan order.
- Specific-task mode implements only that task and then stops.
- 5. Without a packet, work directly only when the change is clear, isolated, reversible, and low-risk.
+ 3. A task is unblocked only when every named dependency is `done` with a valid current inline Receipt.
+ 4. Without a packet, work directly only when the change is clear, isolated, reversible, and low-risk.
Ambiguity, overlapping ownership, a dependency cycle, or a missing Verification Plan is a blocker. Do not guess.
+ ### Accepted process-first fast path
+
+ When line two is `Specs-Contract: process-first-ready-v1`, reuse the accepted C1/C2.
+ Perform only a narrow freshness scout for target revision, scope drift, ownership
+ conflict, and dependency/state changes. Reopen C1 only for evidenced scope drift;
+ do not research, replan, or add a routine user gate before a real blocker or C3.
+ This is a source instruction contract, not a parser/runtime or live-model guarantee;
+ live-model adherence is `[UNVERIFIED]` without a host invocation.
+
+ Load the plan index into working context once. Later byte rereads are narrow drift
+ checks; load only the active task's referenced coverage-profile rows, Outcome,
+ Scope, Ownership, Acceptance, Dependencies, Verification Plan, owned code, and consumers.
+
+ ## Current-byte selection
+
+ Reread current plan/task bytes before each selection and controller write. Concurrent
+ Develop invocations are unsupported; detected state, task, or owned-path drift stops
+ before any Status or Receipt write.
+
+ | Current bytes | Feature mode | Explicit task mode |
+ |---|---|---|
+ | More than one `in_progress` | Fail-stop; name every active task. | Fail-stop; do not choose among them. |
+ | Exactly one `in_progress` | Resume exactly that task. | Recover it only when it is the exact target; otherwise stop. |
+ | Next row is `paused` | `paused` stops chaining; report and stop, never skip past it. | Report the target and stop. |
+ | Row is `blocked` or has a bad dependency | Never select it; `blocked` is not dependency-valid. | Report the blocker and stop. |
+ | Target is `done` | Continue queue selection only after validating its Receipt. | Report terminal state without mutation and stop. |
+ | No task is active | Select the first dependency-valid `pending` row in `plan.md` order. | Start only the exact pending target when dependencies are valid. |
+ | Status is missing, duplicate, or unknown | Stop as malformed state. | Stop as malformed state. |
+
+ Feature mode repeats this selection only after the current task closes. Specific-task
+ mode never touches a sibling and returns after its successful sync without chaining or C3.
+
## Modes
### Sequential feature or specific task
- Set the selected task's single `Status:` field to `in_progress`. Implement its
- Outcome and Acceptance only. Do not start the next task until proof, review,
- and sync for the current task finish. A specific-task invocation never chains.
+ The controller sets the selected task's single `Status:` to `in_progress`.
+ Implement its Outcome and Acceptance only. Keep one unblocked task at a time;
+ never start the next before proof, review, and sync finish for the current task.
### Parallel (`--parallel [N]`)
Load `references/parallel-waves.md`. Require disjoint writes, satisfied dependencies,
isolated worktrees, a bounded wave, and one controller writer; otherwise work sequentially.
### Flash (`--flash`)
Flash is an explicit speed trade-off, never completion:
- run only an available cheap syntax, typecheck, or compile preflight;
- skip dedicated tests, extended manual checks, and review retry loops;
- keep `Status: in_progress` and record `FLASH_UNVERIFIED` plus blocker
`awaiting /hapo:test <feature>`;
- - do not unblock dependents or report Test PASS, Evidence PASS,
- production-ready, or done;
- - promotion later requires a fresh canonical PASS receipt through the trusted
- sync-finalize path.
+ - do not unblock dependents or report Test PASS, Evidence PASS, production-ready, or done;
+ - stop this invocation without chaining.
- Never weaken, delete, or rewrite tests to make Flash look complete.
+ Only a later explicit non-Flash invocation may recover the task. It treats Flash
+ output as ephemeral, inspects current bytes and the owned diff, and obtains fresh
+ canonical proof through the trusted sync-finalize path. Never weaken, delete, or
+ rewrite tests to make Flash look complete.
## Task cycle
### 1. Scout
Trace entrypoints, callers, dependents, registration, errors, and owned files.
- Compilation does not prove an unmounted UI, unregistered route, uncalled service, or missing consumer.
+ Compilation does not prove an unmounted UI, unregistered route, uncalled service,
+ or missing consumer.
+ For an interrupted `in_progress` task, preserve and inspect current owned changes;
+ discard ephemeral, remembered, or prior-attempt proof; compare unmet Acceptance
+ against current task bytes and owned diff. Do not blindly replay a non-idempotent
+ mutation. Resume only unmet work, then run fresh verification.
+
### 2. Implement
Honor Scope, Ownership, Acceptance, and Dependencies. Do not silently replace named contracts;
scope expansion requires evidence and a return to C1, not implementation convenience.
-
- ### 3. Verify and review once
-
- The test owner executes the exact Verification Plan and records real output.
- The review owner, when risk or repository policy requires review, evaluates
- correctness, security, scope, and reachability but does not manufacture proof.
- Use `PASS | PASS_WITH_WARNINGS | FAIL | BLOCKED`; only literal PASS can close.
-
- Load `references/quality-gate.md` for the closeout contract. Remediate an
- observed failure, then rerun only affected proof and review. Do not blind-retry
- a blocked environment. After three failed repair rounds, stop and ask the user.
-
- ### 4. Write the inline Receipt and sync
+ Load `references/subagent-patterns.md` when dispatch helps; only the controller writes Status or Receipt.
- After a real pass, append or replace the task's final `## Receipt` with:
+ ### 3. Verify, review, and close
- - `Verification: PASS`;
- - the exact `Command:` and `Exit: 0`;
- - runtime-derived `Base:` and `Head:`;
- - a non-empty fenced block containing current command output;
- - required negative, reachability, and artifact proof from the task.
+ The test owner executes each exact Verification Plan and records real output. The
+ review owner evaluates correctness, security, scope, and reachability without
+ manufacturing proof. Use `PASS | PASS_WITH_WARNINGS | FAIL | BLOCKED`; only literal PASS can close.
- Then set `Status: done`, update only implemented checkboxes, and recompute the
- queue. Missing, stale, contradictory, zero-test, placeholder, or marker-only
- proof leaves the task unfinished.
+ Load `references/quality-gate.md`. Remediate an observed failure, then rerun only
+ affected proof/review. Do not blind-retry a blocked environment. After three failed
+ repair rounds, stop and ask the user.
- ### 5. Finish the requested boundary
+ After a real pass, the controller writes the task's final inline `## Receipt` with
+ `Verification: PASS`, exact `Command`, `Exit: 0`, runtime-derived `Base:` and `Head:`,
+ non-empty current output, and required negative/reachability/artifact proof; then it
+ sets `Status: done` and only implemented checkboxes. Missing, stale, contradictory,
+ zero-test, placeholder, marker-only, skipped, or remembered proof is unfinished.
- Specific-task mode stops after its sync. Full-feature mode continues one task
- at a time, then runs the feature-level integration command and reachability
- check named by the repository or plan. Show current evidence and limitations at
- C3; the user decides completion.
+ ### 4. Finish the requested boundary
- Evaluate docs impact from the behavior actually changed:
+ Reread the task after sync and recompute the queue from current bytes. Specific-task
+ mode has already returned. Full-feature mode continues one task at a time, then runs
+ the named feature-level integration and reachability checks. Before C3, apply the
+ quality-gate final-Head fixed point; show current evidence and limitations, and let
+ the user decide completion.
- - `none`: report it and make no docs edit;
- - `minor` or `major`: update only affected existing docs through the docs flow.
+ Evaluate docs impact from behavior actually changed: `none` means report only;
+ `minor` or `major` updates only affected existing docs through the docs flow.
## Definition of done
- Done requires satisfied acceptance, reachable behavior, current executable
- proof, correct Base/Head binding, resolved blocking review findings, and no
- scope substitution. `PASS_WITH_WARNINGS`, `NO_TESTS`, `FLASH_UNVERIFIED`, or a
- review-only pass cannot close work.
+ Done requires satisfied acceptance, reachable behavior, current executable proof,
+ stable Base/Head binding, resolved blocking review findings, and no scope substitution.
+ `PASS_WITH_WARNINGS`, `NO_TESTS`, `FLASH_UNVERIFIED`, or review-only pass cannot close.
## Attached references
- - `references/quality-gate.md` — proof and review ownership.
+ - `references/quality-gate.md` — proof, review, final-Head, and shared-run ownership.
- `references/parallel-waves.md` — opt-in isolated worktree waves.
+ - `references/subagent-patterns.md` — task-local briefs and controller-only handoff.
- `references/implementation-notes-template.html` — only with `--notes`.
## Legacy workflow compatibility
- If the selected feature contains `spec.json`, use its persisted
- `workflow_policy`, `task_registry`, nested task paths, typed boundaries,
- separate task receipts, and feature closeout receipt exactly as the legacy
- adapters require. Preserve `planning_depth`, `assurance_level`, derived lane,
- and read-only `execution_tier`; do not project these fields into a new v3
- packet. Keep JSON and Markdown status synchronized, and use the existing
- completion-authority path for final closeout.
+ If the selected feature contains `spec.json`, use its persisted `workflow_policy`,
+ `task_registry`, nested task paths, typed boundaries, separate task receipts, and
+ feature closeout receipt exactly as legacy adapters require. Preserve `planning_depth`,
+ `assurance_level`, derived lane, and read-only `execution_tier`; do not project these
+ fields into a new v3 packet. Keep JSON and Markdown status synchronized, and use the
+ existing completion-authority path for final closeout.