Skip to content

Tags: ivkan/specflow-cc

Tags

v1.25.0

Toggle v1.25.0's commit message
v1.25.0 — split TODO ids indexed, no silent drops

v1.24.0

Toggle v1.24.0's commit message
Release 1.24.0 — byte-bounded STATE.md, sf-tools mutation path

v1.23.1

Toggle v1.23.1's commit message
chore(release): 1.23.1

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v1.23.0

Toggle v1.23.0's commit message
Release 1.23.0

v1.22.2

Toggle v1.22.2's commit message
chore(release): 1.22.2

Fix installed `/sf:*` command failures on user projects (SPEC-014). Two bugs
in commands/sf/*.md broke every invocation when SpecFlow was installed into
a project that has no local bin/:

1. Bare `bin/sf-tools.cjs` paths in 15 command files (audit, autopilot,
   discuss, done, fix, health, help, pause, review, revise, run, show,
   split, status, verify) were rewritten to the literal prefix
   `~/.claude/specflow-cc/bin/sf-tools.cjs` that the installer rewrites
   to the actual install location. Previously these lines errored with
   `Cannot find module '/path/to/project/bin/sf-tools.cjs'` in user
   projects.

2. Unsafe `state resolve $ARGUMENTS` in 8 commands (audit, autopilot, done,
   fix, pause, review, run, verify) was replaced with a SPEC-ID parsing
   guard. `$ARGUMENTS` is now split into `FIRST_TOKEN` (matched against
   `^SPEC-\d{3,}$`) and a per-command scope variable (FIX_SCOPE, DONE_SCOPE,
   AUDIT_SCOPE, ...). Previously `/sf:fix all`, `/sf:done --apply=minor`,
   etc. produced spurious SPEC_NOT_ACTIVE errors because the scope/mode
   flag was passed to the resolver as if it were a SPEC-ID.

Tests: 94/94 pass. bin/install.js and bin/sf-tools.cjs untouched.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v1.22.1

Toggle v1.22.1's commit message
chore(release): 1.22.1

Fix `todo next-id` ID reissue after spec promotion. When a TODO is promoted
to a spec via /sf:plan, the source TODO file is deleted; the only surviving
record of the ID is `source: TODO-XXX` in the spec's frontmatter. Previously
`cmdTodoNextId` scanned only `.specflow/todos/` (active TODO-*.md filenames +
legacy TODO.md references), so after a promotion that left a gap the next-id
helper could reissue a retired ID. Downstream /sf:plan would then refuse the
new TODO because the archive still recorded the prior promotion ("already
promoted to SPEC-YYY and shipped"), leaving the new TODO un-actionable until
manually renumbered.

`cmdTodoNextId` now runs a third scan pass over `.specflow/specs/*.md` and
`.specflow/archive/*.md`, regex-matching `^source: TODO-(\d+)` (anchored to
line start so spec-body false positives are ignored) and folding the IDs
into maxNum. `cmdSpecNextId` was already correct (SPEC IDs live in
filenames forever) and is unchanged.

New tests/todo-next-id.test.cjs adds 9 cases: baseline, active scan, legacy
scan, promoted scan via specs/, promoted scan via archive/, combined skip-
the-gap behavior, multiple source lines, trailing context after the ID, and
body-vs-frontmatter anchor check. Full suite: green.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v1.22.0

Toggle v1.22.0's commit message
v1.22.0 — Recommendation field + --apply=minor quick-fix path

v1.21.0

Toggle v1.21.0's commit message
chore(release): 1.21.0

L1 archive summary layer. Every archived spec gains a `.summary.md` sibling
(~24 lines: goal, key decisions, key files, tests, completion date) generated
by new `archive summarize` / `archive backfill` CLI subcommands. Four agent
prompts (spec-auditor, researcher, spec-creator, spec-reviser) now prefer the
summary when consulting completed-spec history, with graceful fallback to the
full spec when no summary exists.

`/sf:done` Step 8.5 automatically generates the summary for every newly
archived spec; failure is non-fatal (logs a warning, does not abort archival).

Measured ~94% token reduction (435-line average full spec → 24-line average
summary; ~5.2k → ~0.3k tokens per spec) across the existing 22-spec archive.

Zero new runtime npm dependencies — `bin/lib/archive-summary.cjs` uses only
`fs`/`path` from the Node stdlib; atomic temp-rename writes consistent with
`bin/lib/core.cjs`. 11 new tests covering parser correctness, older-style
spec fallback, renderer truncation, atomic writes, backfill idempotency, and
`--force` regeneration. Full suite: 55/55 pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v1.20.1

Toggle v1.20.1's commit message
chore(release): 1.20.1

Fix INDEX.md staleness across all TODO-mutating paths. 1.19.0 wired the
`todo reindex` helper into /sf:todo and /sf:done; this release closes the
remaining gaps in /sf:plan (rm), /sf:triage (create), /sf:revise (deferred
TODOs), /sf:priority (priority edit), /sf:migrate-todos, and the
sf-spec-reviser agent. /sf:todos now delegates INDEX layout to the same
helper instead of writing it inline — the reindex routine is the single
source of truth.

Safety net: new `todo check-stale` CLI subcommand reports drift between
TODO-*.md and INDEX.md; /sf:status invokes it and surfaces an "INDEX.md
stale" warning with the specific divergent IDs.

Header text in INDEX.md rewritten to describe actual behaviour (cache
refreshed by /sf:todos OR by the helper) instead of the old misleading
"auto-generated" framing.

9 new tests in tests/todo-index.test.cjs covering reindex idempotency,
header content, drop-after-delete, and all check-stale scenarios.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

v1.20.0

Toggle v1.20.0's commit message
v1.20.0 - Parallel specification execution

SPEC-011: multi-active STATE.md, advisory file-rename lock,
centralized state resolve CLI, idempotent legacy migration.

See CHANGELOG.md for full details.