Refine a Deep Work Plan — safely edit scope, add, split or reorder tasks, promote a Lite plan to Full task files, recover a partial promotion, or explicitly migrate a legacy plan, always preserving completed evidence.
Install
npx skillscat add dailybothq/deepworkplan-vim/deepworkplan-refine Install via the SkillsCat registry.
DeepWorkPlan — Refine
Modify an existing plan (add / edit /
split / reorder tasks, update the README, promote a Lite plan to Full, or — only
on explicit request — migrate a legacy ending or a v5 plan to v6).
No drafts (2.4.0):
creatematerializes an executable Lite plan directly,
so there is nothing to "refine into a plan" any more.refineoperates on a
plan folder under.dwp/plans/. The.dwp/drafts/directory and thePLAN_{name}_draft_refined.mdartifact were removed in 2.4.0.
Shared resources (read these)
- `../shared/dwp-paths.md` — plans at
.dwp/plans/,
plans at.dwp/plans/<plan>/. - `../shared/context.sh` — resolve
dwp_dir. - Guide (essential — read for this flow): `../guide/authoring.md` (plan README §4, task-file anatomy §5 incl. the Touched Surface, mandatory elements) and `../guide/structure.md` (§1–§2 naming and folders).
- Guide (conditional — read only when the trigger fires): `../guide/orchestrator.md` / `../guide/team-agents.md` only for plans that use them; `../guide/execution.md` §6.1 when editing the Final Review (or a legacy plan's final tasks). Do not read other guide files for this flow; `../guide/GUIDE.md` is the routing index, consulted only when a section is not named above.
- Shared contract (conditional — read the named steps only when the trigger fires): `../create/SKILL.md` Steps 3.5–3.7 and 4.4–4.5 when promoting a Lite plan, adding or splitting a task, completing a partial materialization, or migrating — the one contract for task anatomy, gate selection, the Final Review, the ledger, the write order and the plan-quality check (refine never has a second template); `../spec/PLAN_STATE.md` §5–§6 when the plan carries
state.json(regeneration, evidence invalidation) or onmigrate(the declared-migration line). - Conditional — read only when the trigger fires: `../examples/CREATE_PLAN.md` — prompt patterns for professional rewriting; read it when rewriting plan-level structure or authoring new plan sections — task-level edits and promotions need only the contracts named above.
Parameter Support
| Parameter | Description | Example |
|---|---|---|
| (none) | Interactive — choose a plan | /dwp-refine |
plan {plan_name} |
Modify an existing final plan | /dwp-refine plan auth_refactor |
plan latest |
Modify the most recent plan | /dwp-refine plan latest |
migrate {plan_name} |
Explicit migration: a legacy three-task ending to the v5 Final Review shape, or a v5 plan to v6; never automatic | /dwp-refine migrate auth_refactor |
promote {plan_name} |
Promote a ready Lite plan to Full task files without changing scope | /dwp-refine promote small_fix |
Trust boundary (write scope)
allowed-tools includes write-capable Edit, Write, and Bash.
Writes: edits confined to the target plan's files under.dwp/plans/<plan>/ — task content, ordering, the README's task list and
counts, PROGRESS.md, and the regenerated state.json — kept mutually
consistent. Deleting a completed task, dropping the Final Review (or a legacy
plan's final tasks), or invalidating completed evidence requires explicit
developer confirmation. manifest.json is never rewritten
(../spec/PLAN_STATE.md §2).
It MUST NOT: touch source files, write outside .dwp/, weaken a task's
acceptance criteria or validation gate without saying so in the diff summary,
change a plan's standard without an explicit migrate request, or commit/push
anything (refinement output stays uncommitted working state).
Workflow
Step 2 was the draft workflow; it was removed in 2.4.0. The remaining step
numbers are unchanged so existing cross-references keep resolving.
Step 0 — Determine Target Type
- No parameters → Step 1 (interactive).
plan {name}/plan latest→ Step 3 (Plan Workflow).migrate {name}→ Step 4 (Explicit Migration).promote {name}→ Step 5 (Lite Promotion).
Step 1 — Interactive Selection
List the plans under .dwp/plans/ and ask which one to modify (add / edit /
split / reorder tasks, adjust context, promote a Lite plan). Route to Step 3, or
to Step 5 when the developer asks to promote. Mention migrate only if the
selected plan is legacy.
Plan Workflow
Step 3 — Select and Modify a Final Plan
3.1 Select. If not specified, list plans with ../shared/plan_paths.py --plans-dir <dwp_dir>/plans list. Resolve a full name, numeric ID, unique slug,
or latest with the same helper's resolve command. latest is the highest
numbered plan when one exists, or the most recently modified legacy plan.
3.2 Read and classify. Read the plan README, the task files, PROGRESS.md,
and — when present — manifest.json and state.json. Establish:
- The plan's generation. A folder carrying
manifest.jsonwith a
contract pointer,contract.json, or acontracts/chain is a v6
plan: scope, acceptance, permissions or envelope changes are
contract amendments — author the revised contract (a copy of the
live one, edited), then runpython3 ../shared/ledger.py --plan <dir> amend --contract <draft> --authority <who> --note <reason> --human-note <file>(`../spec/V6_LIFECYCLE.md`
§5: revision undercontracts/, amendment event, fresh approval citing
the new contract id, re-evidence of the revised criteria — one
resumable verb, never by hand). The markdown task edits
below still apply to the plan's human layer; the contract never moves
through them. A v5 plan is never migrated to v6 implicitly; the one
explicit path is the migration surface below (3.2a). - 3.2a — v5 → v6 migration (explicit request only). When the developer
asks to migrate a v5 plan to v6, route to
`../shared/migrate_v6.py` — never rewrite
records by hand:preview(integrity check + task mapping + the
re-evidence list — criteria whose v5 evidence cannot carry become
blocked by default until their gates re-run under v6), thenmigrate --authority WHO(backup → contract synthesis → manifest swap →
journal import → projection; resumable at every phase), androllback
for the explicit reverse (restores the v5 bytes from the verified
backup; refuses when post-migration v6 work exists unless--force).
Imported gate evidence is labeledimportedwith the v5 source digest —
neverobserved. The normative flow is
`../spec/V6_LIFECYCLE.md` §8. The reverse
direction (v6 → v5) does not exist. - The plan's standard (
../spec/PLAN_STATE.md§6.1): a declared**Standard:**line in the README wins; otherwisemanifest.spec_version;
otherwise (no manifest) the shape of its files. New shape = a single{N}.task_final_review.mdlast. Legacy shape = three final tasks
(security_review→skills_agents_discovery→executive_report). Refine
retains the plan's shape; only Step 4 changes it. - Partial materialization: a folder whose
README.mdis missing, saysPlan Status: materializing, or links a task file that does not exist is an
interruptedcreate. Readmanifest.jsonand the README task list to report
the intended shape against what exists; offer to complete it (regenerate
only the missing files fromanalysis_results/PLAN_ANALYSIS.mdper../create/SKILL.mdStep 4.4, leaving existing task files and the manifest
intact, then flip the status line) or discard it (explicit confirmation).
Never overwrite unrelated artifacts. - Objective, context, guidelines, tasks and their
[x]/[ ]status, and any
in-progress checkpoint.
3.3 Show current state — objective, standard (new / legacy), the task list
with status, and the location .dwp/plans/<plan>/.
3.4 Choose modification: Add task(s) / Edit task / Split task / Reorganize /
Update README / View task details / Done.
3.5 Execute modifications
Final-task protection (lifecycle-aware, applies throughout):
New shape: the Final Review must remain the last task. It CANNOT
be deleted or reordered, but it CAN be edited (e.g. to add plan-specific
review criteria). If the user tries to delete or move it, explain: "The Final
Review is the mandatory final task. It can be edited but not deleted or
reordered."Legacy shape: Security Review stays third-to-last, Skills & Agents
Discovery second-to-last, Executive Report last; same rule — editable, never
deleted or reordered — unless the user runs an explicitmigrate(Step 4).Insert positions are therefore
1..N-1for a new-shape plan and1..N-3for a
legacy plan;before-finalalways means "immediately before the first final
task of this plan's shape".Add task(s): ask for the insert position (a number in the range above,
before-final, orafter {k}), gather task details, create the task file with
the full standard structure (../create/SKILL.mdStep 4.4 item 2: ten sections
incl. Touched Surface, selected gates, the skills-decision checklist step, theSkills disposition:/Gate record:log lines), renumber subsequent files,
and run 3.6 Synchronize.Edit task: show current content; apply changes to title / instructions /
acceptance criteria / Touched Surface / validation / everything. Final tasks are
editable. Then run 3.7 Invalidate affected evidence and 3.6 Synchronize.Split task (unfinished, oversized): split task
kinto two or more tasksk, k+1, …— one objective per child (../spec/DWP_SPECIFICATION.md§6.4) —
such that every requirement, acceptance criterion, constraint and
reference of the original lands in exactly one child — nothing is dropped or
summarized. Distribute the original's Touched Surface, Read Before Starting
pointers and Outputs to the child that owns them; a child that consumes another
child's output names it in Read Before Starting. Carry any already-recorded
evidence (a partial Completion & Log, a checkpoint, a passing gate) into the
child that owns that work, verbatim, and leave a one-line pointer in the other
children. A[x]task is never split without explicit confirmation (it is
completed work). Renumber and run 3.6 Synchronize.Reorganize: move / merge / delete. Renumber files as needed and always
keep the plan's final task(s) last. Warn before deleting a completed[x]
task (explicit confirmation). Merging keeps every requirement of both tasks.Update README: objective / context / global guidelines / execution rules
(including an explicit Executive Report request, which the Final Review honors).View task details: display the full task file.
Done: run 3.6 Synchronize once more, report modifications (what was
added / edited / split / reordered, which evidence was invalidated and why),
and offer to execute/resume via the Execute (../execute/SKILL.md) or
Resume (../resume/SKILL.md) sub-skill.
3.6 Synchronize (after every modification — the plan must never be left
inconsistent):
- README: task list entries, links (
N.task_{title}.md), thePlan Status: X/Ncount, the Analysis Outputs table, and any Team Agents Configuration
tables (Parallel Task Groups / roles) that name task numbers. - Task files: numbers in file names and titles;
Read Before Starting
references to renumbered tasks; Team Agents Metadata (Can Run With,Blocks);Blocks/Dependswording that names a task. PROGRESS.md: the active task / next action, and a dated entry describing
the refinement (what changed, what was invalidated).state.json(when present): regenerate it from the markdown
(../spec/PLAN_STATE.md§5) — one entry per task file, ids and files matching
the disk,task_count= current number of task files,completed_count=
README[x]count. Entries of completed tasks keep theircompleted_at,commit,gatesandoutcome(re-keyed if renumbered). Write atomically.manifest.jsonis not touched: itstask_countis the count at creation;
the live count isstate.json.task_count.- Never leave a README
[x]for a task file that no longer exists, or a task
file with no README entry.
3.7 Invalidate affected evidence (when requirements change): when an edit
changes a task's acceptance criteria, scope, Touched Surface or gate — or
changes an upstream task whose outputs a completed task consumed — list the
affected completed tasks and, with the user's explicit confirmation, mark them
for re-validation: README checkbox back to [ ] with a (re-validate: requirements changed by refine on YYYY-MM-DD) note, state.json entry statuspending with its gate records kept and their evidence prefixedinvalidated by refine YYYY-MM-DD:, and an appended "Invalidated" note in
the task's Completion & Log. Completed logs, commits and outcome records are
never deleted or rewritten — the executor re-runs the gates and re-marks the
task (../spec/PLAN_STATE.md §5.1). Without confirmation, record the concern inPROGRESS.md and change nothing.
Amendment record (append to the affected task's Completion & Log, and mirror
the entry in PROGRESS.md): every scope, criterion or deferral change leaves
one durable record with these fields — no field is optional padding, and an
amendment is never backdated:
### Amendment {n} — YYYY-MM-DD
Original criterion: <verbatim quote of the criterion as authored>
Observed: <investigation finding, blocker, failed gate or changed input>
Disposition: revised criterion | deferred requirement | unexecuted scenario | failed gate
Revised criterion: <verbatim new criterion — only for "revised criterion">
Reason: <why the original cannot or should not stand>
Authority: user (explicit acceptance) | developer (refine request) | evidence (machine-detected mismatch)
Affected tasks: <ids>
Evidence invalidated: <gate commands per task, prefixed by refine>
Evidence preserved: <gate commands whose inputs are unchanged>What an amendment may close and what it may not. Name the state honestly
(the five evidence states, ../spec/PLAN_STATE.md "Evidence truth and
amendments"): a completed
investigation is real work but is never the execution of the original
criterion; an unexecuted scenario is recorded as not performed and
contributes no passing evidence; a deferred requirement moves the criterion
to a named destination task and needs Authority: user or developer; a
failed gate stays failing until the same acceptance intent is re-run and
passes; only an achieved product outcome — the criterion as written,
verified by its gate — completes the task unchanged. Correcting a broken
command preserves the same acceptance intent; substituting an easier check is
not repair, it is a revised criterion and needs its own amendment.
Bounded exceptions. The user may explicitly accept a bounded exception to a
criterion; record Authority: user with the acceptance (quote or reference)
and the boundary of what it covers. Pre-approval and trust authorize unattended
execution — they are never blanket permission to abandon a core objective. A
mandatory criterion that cannot be met is recorded as a blocker
(state.json blocked), never as completed work; the guarded writer refuses
that closure and read-only verification reports it.
Explicit Migration
Step 4 — Migrate a Legacy Plan (only on migrate {name})
Migration is the only way a plan changes standard, and it happens only
when the developer asks for it explicitly (../spec/DWP_SPECIFICATION.md §6.5,../spec/PLAN_STATE.md §6.1). Never suggest it as a side effect of another edit.
Route by recorded generation before Step 4.1. For a v5 plan, use the v5 →
v6 migration path in Step 3.2a and ../spec/V6_LIFECYCLE.md §8: runpython3 ../shared/migrate_v6.py --plan <dir> preview, inspect the re-evidence
list and blockers, then run python3 ../shared/migrate_v6.py --plan <dir> --authority <who> migrate on the explicit request. Report the migrated
contract, journal, projection, and criteria requiring new evidence. Do not
apply Steps 4.1–4.6 below to a v5 plan. Those steps only migrate a pre-v5
three-task ending to the retained v5 Final Review shape. A v6 plan already
uses the current generation and has no migration step.
- Classify (Step 3.2). If the plan already has the v5 Final Review shape, say
so and stop. - Preserve completed work. Any
[x]task — including a legacy final task
that has already run — is left exactly as it is. Only unstarted tasks may
take the new shape. - Reshape the ending. If none of the three legacy final tasks has started,
replace them with a single{N}.task_final_review.md(content per../create/SKILL.mdStep 4.4 item 3, incl. the security pass, final-state
validation, skills reconciliation, documentation reconciliation, completion
and report offer). If the
Security Review already ran, keep it and replace only the two unstarted
closing tasks with the Final Review's remaining parts (b)–(e); the Final
Review security pass (a) still runs the required local review over the
accumulated change set. Record the decision inPROGRESS.md. - Add the new-shape elements to unstarted tasks and to the plan: a Touched
Surface (planned surface, risk class, selected gate — derived fromdocs/TESTING_GUIDE.md, or the full-suite fallback where the repository
documents no scoped invocation) on every unstarted behavior-changing task; the
skills-decision checklist step and theSkills disposition:/Gate record:
log lines;analysis_results/SKILLS_CANDIDATES.md; the Analysis Outputs
table rows; the Final Review note in the README. - Declare it. Add to the README Plan Variables the line
**Standard:** DWP spec 2.3.0 (migrated from A.B.C on YYYY-MM-DD — <reason>)
and a dated entry inPROGRESS.md. Leavemanifest.jsonuntouched (creation
provenance). - Synchronize (Step 3.6) and report: what was reshaped, what was preserved,
what the executor will do differently from here.
Step 5 — Lite Promotion
Promotion changes only task representation. Read spec/LITE_PLANS.md, the Lite
README decision record and v2 state first. An explicit promotion request approves
the current proposal's representation change; record Approval: approved before
starting. It does not authorize product execution or a scope change. Refuse an
active task, an unresolved product-work blocker, or an unknown format. A
scope/requirement change is refine, not promotion.
Recovery comes before starting a new transaction. If a promotion marker
already exists (including after the format switched to Full), resume that same
transaction from its recorded phase. Verify the existing destination files
against the source records and evidence; write only missing files, preserve user
edits, and never overwrite conflicting evidence. A conflict becomes an actionable
blocker. Do not reject the marker that execute/resume sent here to recover, and
do not create a second promotion transaction.
- Record
promotion: lite → fullintent atomically in state and README. - Generate Full task files for unchanged logical task IDs, preserving criteria,
gates, logs, completion status and lineage. Promotion never splits tasks or
grants invented evidence. Split or add work separately through refine, with
the affected approval and evidence invalidated before promotion resumes. - Validate contiguous IDs, links, gates, final review and Markdown/state
correspondence before switching the README's authoritative task representation. - Rewrite the state projection atomically with
format: full, then clear the
promotion marker last. Preserve manifest creation provenance and never rewrite
it to disguise a changed live task count.
If interrupted, retain the marker and identify the exact missing boundary;
complete only missing files and preserve user edits. Execute/resume must not run
a marked plan. Full-to-Lite downgrade is not automatic.
Important Notes
- Preserve completed work: never alter
[x]tasks unless explicitly asked;
invalidation (3.7) marks them for re-validation, it does not rewrite them. - Renumber carefully: keep task file numbers, README references, dependency
pointers, team-agents metadata andstate.jsonids in sync (3.6). - Maintain consistency: task files follow the standard structure
(../guide/authoring.md§5; the shared contract in../create/SKILL.md). - One shape per plan: refine keeps the plan's standard;
migrateis the only
exception and is explicit. - No mandatory report: refine never adds an Executive Report task; it may
record an explicit report request in the README guidelines. - Git ignore: everything under
.dwp/is git-ignored. - No draft artifact:
refinealways operates on a plan folder under.dwp/plans/. Nothing is written to.dwp/drafts/— it no longer exists.
Error Handling
- Plan not found → list available plans and let the user select.
- Partial materialization (no
README.md,Plan Status: materializing, or a dangling task link) → offer complete / discard (3.2). - Task number out of range → show the valid range for this plan's shape and re-ask.
- Deleting or splitting a completed
[x]task → confirm explicitly first. - Plan has work in progress (a checkpoint or an
in_progresstask) → warn about
impact; suggest finishing the current task first; never edit the in-progress
task's evidence. migrateon a plan already in the requested generation and shape → report and stop.