Tags: ivkan/specflow-cc
Tags
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>
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>
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>
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>
PreviousNext