Seamless Style Switching with Plan Migration

Context

The branch claude/planager-sqlite-style-H9wXz added --style sqlite. Review found the implementation sound (91 tests pass after lint fixes) but incomplete for style switching: re-running init/update with a new style swaps the instruction snippet and skill files, yet existing plan content is stranded in the old format (e.g. .plans/*.html files remain after switching to markdown, or an orphaned plans.db). Also: re-running init without --style silently resets an html/sqlite project back to markdown, README never documents the sqlite style, and the ethos docs ("no database", "plain files") need honest framing of the sqlite trade-offs.

Phase 1: Conversion module

A shared in-memory plan model with parsers and renderers for all three styles.

Create src/planager/convert.py with Plan/Phase/Step dataclasses
Markdown parser and renderer (frontmatter, phases, checkboxes, notes)
HTML parser (stdlib html.parser) and renderer matching the documented format
SQLite loader and saver against the existing schema
migrate_plans(plans_dir, from_style, to_style) that converts all plans incl. archived, removes old artifacts, reports actions, and skips unparseable files

Phase 2: CLI wiring

init: --style defaults to auto-detect for already-initialized projects (no more silent reset to markdown)
init/update with a style change: migrate plan content and refresh all installed targets

Phase 3: Tests and docs

Round-trip conversion tests (md ↔ html ↔ sqlite)
Migration flow tests via init and update
README: document sqlite style with trade-offs, add "Switching styles" section
Bump version to 0.7.0; just check passes

Notes

Review of the sqlite branch: schema declares ON DELETE CASCADE but the documented sqlite3 CLI workflow never enables PRAGMA foreign_keys — harmless since the skills only archive, never delete. Lint failures in tests/test_cli.py fixed as part of this work.

Done: built src/planager/convert.py (Plan model, md/html/sqlite parsers and renderers, migrate_plans) and wired it into init and update so any style switch converts existing plans, removes old artifacts, and refreshes every installed target. init --style now defaults to the detected existing style. 24 new tests (115 total), README documents the sqlite style with trade-offs plus a Switching styles section, version bumped to 0.7.0. Verified with a live CLI smoke test: markdown → sqlite → html round trip preserved all plan data. PLAN.md was deleted externally during the session, so its non-goals section ("Database or registry") was not amended; the README caveat covers the ethos framing.