Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 [<feature>] [--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
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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": {
Expand Down