diff --git a/CHANGELOG.md b/CHANGELOG.md index a7c692c..7fc2885 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,14 @@ Each released version is tagged in git (`v0.0.1`, `v0.1.0`, etc.) and includes t ## [Unreleased] +## [0.2.5] — 2026-04-30 — Ankur + +The host-agent-first release. API mode is gone — Draftwise runs only inside coding agents now (Claude Code, Cursor, Gemini CLI), printing scanner data plus an instruction for the host agent's model to synthesize. The interactive prompt layer (`@inquirer/prompts`) is gone with it: every command takes its full input set as flags or positional args, and the CLI never blocks on stdin. With synthesis moved entirely into the host agent, voice and spec-quality rules now live in `.draftwise/constitution.md` — a user-editable, version-controlled file every drafting prompt tells the agent to read before drafting. Two new commands fill out the spec lifecycle: `draftwise clarify` audits an existing product spec for ambiguities + missing edge cases before drafting tech; `draftwise refine [--type=product|tech|tasks]` re-grounds a spec against its source-of-truth while preserving PM hand-edits. Product specs gain optional `depends_on:` / `related:` YAML frontmatter, and `draftwise list` surfaces a fourth DEPENDS ON column. `draftwise skills install` auto-detects which AI harnesses are on the machine instead of writing to all three by default. + +Bumps `package.json` + `package-lock.json` from 0.2.1 → 0.2.5. Under 0.x semver the patch lane carries breaking changes; the api-mode drop and inquirer drop both remove paths a small subset of users could have depended on, while every other change is additive at the CLI surface. Rolls all [Unreleased] entries into [0.2.5] — 2026-04-30 — Ankur, with a fresh empty [Unreleased] block above. + +After merge, ritual: `git tag -a v0.2.5 -m "v0.2.5"`, `git push origin v0.2.5`, `npm publish` (interactive — OTP + login may be needed if the npm session expired). + ### Added - **`draftwise refine [] [--type=product|tech|tasks]` — re-ground an existing spec while preserving PM hand-edits.** Resolves CLAUDE.md's long-standing "AI-assisted spec merge mode" open question. Different shape from `clarify`: clarify finds gaps and walks the PM through them; refine takes the existing spec as ground truth for what the PM wants and improves how it's written and grounded. Reads the chosen file (`product-spec.md` by default, `technical-spec.md` for `--type=tech`, `tasks.md` for `--type=tasks`), prints it plus the upstream source-of-truth (scanner output for product/tech brownfield, `overview.md` for greenfield, plus the upstream spec for tech/tasks), then prints a three-phase instruction telling the host coding agent to (1) audit each section as strong-leave-alone or weak-rewrite — bar is "actively misleads or under-specifies," not "could be tighter"; (2) re-ground the weak sections against the source-of-truth, removing or marking `(unverified)` any code reference the scanner doesn't surface; (3) save the refined file back, preserving strong sections character-for-character and any YAML frontmatter at the top of `product-spec.md` verbatim. Hard rules in the prompt: no fabricated code references, no scope creep (refining ≠ adding new features / edge cases), don't touch sections that are already strong. Same auto-pick / multi-spec / unknown-slug ergonomics as `tech`. Filters specs by which file the requested type requires (product-spec for `product`, technical-spec for `tech`, tasks for `tasks`); tech/tasks additionally validate that the upstream spec exists. Why: re-running `new` / `tech` / `tasks` on an existing spec only offers Overwrite or Cancel — both blunt. PMs review and edit specs, then want a "tighten this up" pass that doesn't blow away their edits. Refine is that pass. Prompt at `src/ai/prompts/refine.js` (per-type metadata table for file name, source-of-truth labels, and section-preservation rules); command at `src/commands/refine.js`; routed via `COMMANDS` in `src/index.js`. — Ankur diff --git a/package-lock.json b/package-lock.json index 439eb78..686ee5d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "draftwise", - "version": "0.2.1", + "version": "0.2.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "draftwise", - "version": "0.2.1", + "version": "0.2.5", "license": "MIT", "dependencies": { "yaml": "^2.8.3" diff --git a/package.json b/package.json index a940da5..3123a12 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "draftwise", - "version": "0.2.1", + "version": "0.2.5", "description": "Codebase-aware product specs. AI scans your repo, then drafts specs that fit it.", "main": "src/index.js", "scripts": {