Back to Planning With Files

Migration Guide: v1.x to v2.0.0

MIGRATION.md

3.0.08.8 KB
Original Source

Migration Guide: v1.x to v2.0.0

Overview

Version 2.0.0 adds hooks integration and enhanced templates while maintaining backward compatibility with existing workflows.

What's New

1. Hooks (Automatic Behaviors)

v2.0.0 adds Claude Code hooks that automate key Manus principles:

HookTriggerBehavior
PreToolUseBefore Write/Edit/BashReads task_plan.md to refresh goals
StopBefore stoppingVerifies all phases are complete

Benefit: You no longer need to manually remember to re-read your plan. The hook does it automatically.

2. Templates Directory

New templates provide structured starting points:

templates/
├── task_plan.md    # Phase tracking with status fields
├── findings.md     # Research storage with 2-action reminder
└── progress.md     # Session log with 5-question reboot test

3. Scripts Directory

Helper scripts for common operations:

scripts/
├── init-session.sh     # Creates all 3 planning files
└── check-complete.sh   # Verifies task completion

Migration Steps

Step 1: Update the Plugin

bash
# If installed via marketplace
/plugin update planning-with-files

# If installed manually
cd .claude/plugins/planning-with-files
git pull origin master

Step 2: Existing Files Continue Working

Your existing task_plan.md files will continue to work. The hooks look for this file and gracefully handle its absence.

Step 3: Adopt New Templates (Optional)

To use the new structured templates, you can either:

  1. Start fresh with ./scripts/init-session.sh
  2. Copy templates from templates/ directory
  3. Keep your existing format - it still works

v2.0.0 templates use a more structured status format:

v1.x format:

markdown
- [x] Phase 1: Setup ✓
- [ ] Phase 2: Implementation (CURRENT)

v2.0.0 format:

markdown
### Phase 1: Setup
- **Status:** complete

### Phase 2: Implementation
- **Status:** in_progress

The new format enables the check-complete.sh script to automatically verify completion.

Breaking Changes

None. v2.0.0 is fully backward compatible.

If you prefer the v1.x behavior without hooks, use the legacy branch:

bash
git checkout legacy

New Features to Adopt

The 2-Action Rule

After every 2 view/browser/search operations, save findings to files:

WebSearch → WebSearch → MUST Write findings.md

The 3-Strike Error Protocol

Structured error recovery:

  1. Diagnose & Fix
  2. Alternative Approach
  3. Broader Rethink
  4. Escalate to User

The 5-Question Reboot Test

Your planning files should answer:

  1. Where am I? → Current phase
  2. Where am I going? → Remaining phases
  3. What's the goal? → Goal statement
  4. What have I learned? → findings.md
  5. What have I done? → progress.md

Migration Guide: v2.x to v3.0.0

Overview

Version 3.0.0 adds opt-in modes for long-running and multi-agent runs: autonomous mode (less recitation), gated mode (a deliberate completion gate), a structured run-ledger, and phase coordination fields. None of this changes how v2 behaves. With no new flags and no .mode marker, v3 runs exactly like v2.43.0.

What changes by default

Nothing. The default path is byte-for-byte v2.43 behavior. The hooks stay advisory, the Stop hook never blocks, and your existing task_plan.md, findings.md, and progress.md keep working without edits. Every v3 behavior is keyed off an explicit opt-in, so an unmodified install behaves identically to v2.43.0.

What's new (opt-in)

Autonomous mode

For strong models on long runs. Recitation drops to once per turn (session start) instead of before every tool call, which removes the per-tool-call token tax. The plan on disk stays the source of truth; the model re-reads it when it needs detail. There is no completion gate in this mode. Recitation is reduced, not removed: published evidence still shows goal drift on long runs, so autonomous mode is opt-in, never the default.

Gated mode

Adds a deliberate completion gate. When a phase is left in_progress and the run was tasked with executing the plan, the Stop hook can hold the turn and feed back a fixed reminder naming the pending phase. This is the opposite of the accidental gate from issue #178: it fires only in gated mode, never for any incomplete plan, and the reminder text is a fixed template plus the phase name, never raw plan content. Guards keep it safe: a block cap (default 20, counted in .planning/<id>/.stop_blocks and reset at init), a stall detector (no new ledger line since the last block means the run is allowed to stop), and the host's own stop_hook_active and block-cap backstops.

Run-ledger

A structured, append-only progress record. Workers append one JSON line per tick to a per-agent ledger; the orchestrator keeps progress.md as the human-readable tick log. The injected context is a synthesized fixed-shape summary, not a raw tail of progress.md, which keeps it stable for the host's prompt cache and removes a raw-text injection surface.

Phase coordination fields

task_plan_autonomous.md adds optional per-phase lines: **DependsOn:** (phases that must finish first), **Owner:** (which agent runs the phase), and **AcceptanceCheck:** (a command the gate may run to confirm the phase is done). These sit next to the existing **Status:** line, so the completion check counts phases and statuses exactly as in v2. The gate runs an AcceptanceCheck command only when it is allowlisted at attest time, and never runs a command from an unattested plan.

Attestation default-on in the new modes

In autonomous and gated modes, task_plan.md is hashed at init and the hooks refuse to inject plan content that diverges from the attested hash. Re-run scripts/attest-plan.sh after any intentional edit. In multi-agent runs the orchestrator re-attests at phase boundaries, since a worker editing the plan would break the hash by design. This is what makes the AcceptanceCheck command safe to run.

SHA cache location moved

The hook's mtime-SHA cache moved from ${TMPDIR:-/tmp}/pwf-sha (v2) to $HOME/.cache/pwf-sha (or $XDG_CACHE_HOME/pwf-sha when set). This removes the shared-tmp poisoning surface. The move is silent: a warm v2 cache under /tmp/pwf-sha is never read by v3, so the first session after upgrade rehashes every attested plan once. That is the correct behavior (no stale reads), and the cache repopulates immediately. On a large collection of attested plans on slow Windows Git Bash, that first rehash can show as a one-time per-turn latency bump; subsequent sessions are back to cache speed. No action is needed, and the old /tmp/pwf-sha directory can be deleted.

Quickstart: try gated mode in two commands

bash
# 1. Start a gated session (writes the .mode marker, attests the plan, resets the block counter)
./scripts/init-session.sh --gated "my-feature"

# 2. Plan as usual
# Fill in task_plan.md (or start from templates/task_plan_autonomous.md), set phase statuses,
# and work. The gate holds the turn while a phase is in_progress, up to the block cap.

For autonomous mode, swap --gated for --autonomous. To return to plain v2 behavior, start a session with no flag (no .mode file is written).

Host capability tiers

The completion gate is host-aware: not every host can hard-block a stop. The tiers below summarize what each host enforces. In every tier the plan file on disk is still the shared, durable state; only the gate's enforcement strength differs.

TierMechanismHosts
Hard blockdecision:block / exit 2 holds the turnClaude Code, Codex CLI, OpenAI Codex API, Continue.dev
Follow-up injectcontinuation via an injected follow-up message plus the host's own counterCursor, Pi, Kiro
Notify onlya system message is shown, no enforcementOpenCode, Gemini CLI, and the remaining adapters

On hard-block hosts, gated mode enforces the gate. On follow-up hosts, the gate becomes a follow-up message capped by a counter (Pi's AUTO_CONTINUE_LIMIT is the reference). On notify-only hosts, gated mode degrades to a non-blocking notice; autonomous mode still works because it needs no gate.

OpenCode: honest note

OpenCode has no Stop-hook re-activation. The upstream request (issue #12472) is open and unimplemented, so OpenCode cannot enforce the completion gate at all. On OpenCode the gate is a system message only. Autonomous mode and the run-ledger work on OpenCode because they do not depend on blocking the stop; only the gate's enforcement is unavailable until upstream ships it.

Breaking changes

None. v3.0.0 is fully backward compatible. Default behavior with no mode marker is exactly v2.43 semantics.

Questions?

Open an issue: https://github.com/OthmanAdi/planning-with-files/issues