Skip to content

Releases: benwu95/prospec

0.5.3 — Discoverable, Collision-Free Skill Triggers: Onboarding Scaffolds, Converged Baselines & Honest JS/TS-Only Import-Direction

Choose a tag to compare

@benwu95 benwu95 released this 12 Jul 09:38

Prospec 0.5.3

0.5.3 is a discoverability and correctness release. It makes prospec's skill triggers easy for onboarding agents to localize and hard to mis-fire, and it stops the import-direction drift check from faking a pass on projects with no JavaScript/TypeScript. Two new CLI commands — prospec agent triggers and prospec config example — surface the trigger-localization scaffold and a complete annotated config; eight skills' over-broad trigger baselines are converged to collision-free, ≥3-word sets; and import-direction now reports an honest skipped — pointing at the right native linter — wherever no JS/TS source exists.

62 files changed · +982 / −179 · 2 merged PRs (#86, #87) + landing-page SEO


✨ Headline features

Discoverable Skill Triggers — prospec agent triggers & prospec config example (PR #87)

prospec agent triggers emits a fill-missing skill_triggers localization scaffold (English baselines sourced from SKILL_DEFINITIONS), so an onboarding agent translates trigger words in place instead of grepping a deployed SKILL.md or reading the minified binary. prospec config example prints a complete, annotated .prospec.yaml reference covering every schema field, and runs pre-init as part of INIT_COMMANDS.

  • computeUnlocalizedSkills is extracted as the single source for the fill-missing set, shared by the agent-sync hint and agent triggers
  • the agent-sync hint and the quickstart / upgrade onboarding skills now point at prospec agent triggers
  • dead config-schema fields removed (project.version, knowledge.files + KNOWLEDGE_FILE_TYPES, the paths catchall); deprecated Zod .passthrough() migrated to Zod 4 .loose()

Converged, Collision-Free Trigger Baselines (PR #87)

Eight skills' triggers are tightened to prospec-specific, collision-free, ≥3-word sets — dropping bare over-broad words that mis-fire on everyday dev talk (upgrade, setup, done, critical, feedback, clean up, migrate version, version bump, I want to). prospec-plan's sub-3 gap is filled with technical plan (not implementation plan, which would collide with implement). A new skill-format contract assertion machine-enforces REQ-AGNT-033's ≥3-triggers intent (guarded against mutation), and the convergence is mirrored into this repo's .prospec.yaml Chinese skill_triggers.


🐛 Bug fixes

  • import-direction faked a pass on non-JS/TS projects — the check parses only JS/TS ES-module imports, but on a project with no JS/TS source it scanned 0 files yet still reported available + 0 edges → a vacuous PASS that claimed dependency direction was verified without reading a single file. It now reports available only where JS/TS source is actually found; otherwise it degrades to an honest skipped whose reason names the right native linter (import-linter / deptrac / packwerk / dependency-cruiser …). JS/TS projects are unchanged; validated against a large real-world Python project (PR #86).
  • The import-scan extension set could drift — the directory-scan glob and the single-file-entry guard now derive from one IMPORT_SCAN_EXTS constant, so they can never diverge (PR #86).

🌐 Landing page

  • Added FAQ structured data (schema.org) and an Open Graph social image to the landing page for richer search and social-share previews.

🔁 Dogfood

Both change sets were driven end-to-end through prospec's own SDD loop (story → plan → tasks → implement → review → verify grade A → archive). PR #87 graduated REQ-AGNT-019/020/021/026/033–036, REQ-CLI-021, REQ-SERVICES-066, REQ-SETUP-004/019/023/024, REQ-TEMPLATES-108/121/143/146, REQ-TYPES-038/059/062, and REQ-TESTS-046/047/049/051/052/053 into the agent-integration and project-setup feature specs. PR #86's remediation synced the lib drift-engine Knowledge — import-direction is now documented as JS/TS-ESM-only with an honest skip.


🧪 Quality & tests

  • 2,131 tests passing (91 files) — up from 2,112 (87 files) in 0.5.2, adding the trigger-collision contract (English baselines + .prospec.yaml Chinese triggers → 0 violations, all 17 skills ≥3 triggers), the config-example completeness contract (every schema field present), and the import-direction JS/TS-only / honest-skip regressions; mutation-verified.
  • ~96.2% line coverage; prospec check is fully green — 11/11, 0 fail, 0 warn, 0 skipped. Zero typecheck and lint warnings.

📊 Compared to 0.5.2

Comparison 0.5.2 0.5.3
Trigger localization Grep a deployed SKILL.md / read the binary prospec agent triggers emits a fill-missing scaffold
Config reference No built-in example prospec config example prints an annotated .prospec.yaml
Skill trigger baselines Over-broad words mis-fire on everyday dev talk Collision-free, ≥3-word, prospec-specific (contract-enforced)
import-direction on non-JS/TS Vacuous PASS (0 files "verified") Honest skipped → points at the native linter
Passing tests 2,112 (87 files) 2,131 (91 files)

⬆️ Upgrade notes

  1. Re-run your installer script (install.sh or install.ps1) — both pull releases/latest — to fetch the 0.5.3 binary.
  2. After upgrading, run prospec agent triggers to fill any missing skill_triggers localizations, and prospec config example for the full annotated .prospec.yaml reference.
  3. No config change is required — the dropped schema fields (project.version, knowledge.files, the paths catchall) were already unused. If your project is not JS/TS, import-direction now reports skipped (JS/TS-only) instead of a vacuous pass — use your language's import linter.
  4. Run prospec check to confirm all 11 drift checks pass.

0.5.2 — Unified Module-Map Path Semantics: File/Folder/Glob Parity Across Drift & Knowledge, Crash Fixes & CI Action Bumps

Choose a tag to compare

@benwu95 benwu95 released this 09 Jul 05:53

Prospec 0.5.2

0.5.2 is a correctness and consistency release that unifies how module-map.yaml paths entries are interpreted across every caller. File, folder, and glob entries now scan identically whether the drift engine or the knowledge generator reads them — closing a prospec check crash on file-level module entries and a silent zero-file miss on bare folder entries. It also refreshes the pinned GitHub Actions versions across all three CI workflows.

27 files changed · +377 / −56 · 1 merged PR (#85) + CI maintenance


✨ Headline feature

Unified Module-Map Path Semantics (PR #85)

module-map.yaml's paths field now supports three entry forms consistently across all callers (the drift engine and knowledge generation):

  • File (e.g. src/lib/config.ts) → scans and attributes only that file
  • Folder (e.g. src/lib) → scans the whole subtree
  • Glob (e.g. **/auth/**, dir/**) → preserved as-is (existing usage unaffected)

A single stat-based path classifier — classifyModulePath + moduleScanPatterns in lib — is now the one source of truth for "how a paths entry is scanned", shared by both the drift and knowledge scanning sides. The attribution matcher (makePathMatcher / fileMatchesModulePath) already matched files by exact literal and is unchanged.


🐛 Bug fixes

  • prospec check ENOTDIR crash on file entries — drift's importScanPattern previously expanded every literal into <prefix>/**/*.ext, turning a file entry into <file>/**. File entries now scan the file directly; non-source-file entries produce no import edges.
  • Silent zero-file knowledge scan on bare folder entriesgetModuleInfos / updateModuleReadme matched bare folder entries (e.g. src/lib) against fast-glob's onlyFiles mode and found 0 files. They now expand via moduleScanPatterns into the subtree.

🔧 CI maintenance

Bumped the pinned third-party GitHub Actions across ci.yml, prospec-check.yml, and release.ymlactions/checkout@v7, actions/setup-node@v6, pnpm/action-setup@v6, actions/upload-artifact@v7, and actions/download-artifact@v8.


🔁 Dogfood

PR #85 was driven end-to-end through prospec's own SDD workflow (story → plan → tasks → implement → review → verify grade S → archive). REQ-LIB-029 / REQ-TESTS-050 / REQ-KNOW-004 / REQ-LIB-014 graduated into drift-detection.md and ai-knowledge.md.


🧪 Quality & tests

  • 2,112 tests passing (87 files) — up from 2,096 in 0.5.1, adding 16 cases (classifier four states, moduleScanPatterns mapping, drift file-entry / non-source / glob regressions, knowledge subtree-scan wiring), all mutation-verified.
  • ~96.7% line coverage; all 11 drift checks pass (prospec check: 0 fail, 0 skipped — the single knowledge-size WARN is the deliberate SC-002 budget signal).
  • Zero typecheck and lint warnings.

📊 Compared to 0.5.1

Comparison 0.5.1 0.5.2
paths file entry prospec check crashes (ENOTDIR) Scans the file directly
paths bare folder entry Knowledge scan finds 0 files Expands to the subtree
Path scanning source of truth Per-caller ad-hoc expansion Single classifyModulePath / moduleScanPatterns
Passing tests 2,096 2,112

⬆️ Upgrade notes

  1. Re-run your installer script (install.sh or install.ps1) to automatically pull the new compressed executable.
  2. If your module-map.yaml lists individual files or bare folders under paths, prospec check and knowledge generation now handle them correctly — no config change required.
  3. Run prospec check to confirm all 11 drift checks continue to pass.

0.5.1 — Compressed Standalone Binaries & Node-free Skill Resolution: Binary Size Optimization, Streamlined Installers & Offline Templates

Choose a tag to compare

@benwu95 benwu95 released this 07 Jul 18:18

Prospec 0.5.1

0.5.1 is an optimization and feature release that addresses the standalone binary size overhead by compressing them into .tar.gz and .zip archives, simplifies the downstream installation scripts to download and extract these packages, and introduces the prospec print-template command to retrieve embedded skills templates completely offline without Node.js dependency.

33 files changed · +448 / −129 · 2 merged PRs (#83, #84)


✨ Headline features

Compressed Standalone Release Binaries & Installer Upgrades (PR #84)

To reduce network bandwidth and load times, the GitHub Release pipeline now packages multi-platform binaries into .tar.gz (for Linux/macOS) and .zip (for Windows) archives. This reduces target download size by over 60% (from ~67-90MB to ~26MB). The installation scripts install.sh and install.ps1 have been modernized to download, stream-extract, and install these compressed assets directly into the users' binary directory.

Offline Template Printing & Node-free AI Skills (PR #83)

Resolves an issue where packaged standalone binaries couldn't find template files on systems lacking Node.js due to internal require.resolve and node -e calls in generated skills (e.g. prospec-upgrade). A new prospec print-template <path> CLI command and backend service print the pre-bundled template contents directly. Skills templates are updated to call prospec print-template instead of spawning Node processes, enabling 100% offline, Node-free tool upgrades.


🔁 Dogfood

The compressed packaging pipeline and offline template print features were successfully validated using prospec's own verification gates. The installation scripts were thoroughly tested across Windows PowerShell and Unix bash environments to guarantee a seamless onboarding experience.


🧪 Quality & tests

  • 2,096 tests passing (87 files) — up from 2,092 in v0.5.0, covering E2E CLI commands and the template print services.
  • Code coverage is maintained at ~96.6% line coverage, with all 11 drift checks and verify:skills tests passing green, and zero typechecking or linting warnings.
  • Added 100% test coverage for the new prospec print-template command, print service, and compressed installer scripts.

📊 Compared to 0.5.0

Comparison 0.5.0 0.5.1
Release Asset Format Raw executables (60-90 MB) Compressed .tar.gz and .zip archives (26-34 MB)
Downstream Installers Raw binary downloads via curl/wget Automatic archive downloading & extracting (install.sh/install.ps1)
Skill Upgrades / Run Requires Node.js (via node -e/require.resolve) 100% Node-free offline upgrades (prospec print-template)
Passing Tests 2,092 2,096

⬆️ Upgrade notes

To upgrade downstream projects:

  1. Re-run your installer script (install.sh or install.ps1) to automatically pull the new compressed executable.
  2. Run prospec check to verify all 11 drift checks continue to pass successfully.

0.5.0 — Standalone Binaries, Honest Knowledge Budgets & Gated Review Provenance: Multi-Platform Executables, Machine-Enforced Budgets, Gated Verification & Lightweight Quick Scale

Choose a tag to compare

@benwu95 benwu95 released this 07 Jul 15:17

Prospec 0.5.0

0.5.0 is a milestone release that enables running prospec as standalone multi-platform binaries without Node.js, enforces honest token budgets on the AI-Knowledge base with the new knowledge-size drift check, gates the SDD pipeline verification on machine-checked review-provenance, and drastically reduces pipeline ceremony for small changes by introducing the lightweight quick scale.

257 files changed · +8,935 / −2,204 · 16 merged PRs (#55, #68, #69, #70, #71, #72, #73, #74, #75, #76, #77, #78, #79, #80, #81, #82) · closes #61, #62, #63, #64, #65, #66, #67


✨ Headline features

Multi-Platform Standalone Binary Compilation & Publish Workflow (PR #82)

Downstream project developers can now directly download standalone executables for macOS, Linux, and Windows and run prospec for Spec-Driven Development without having Node.js installed on their machines. This capability bundles Handlebars templates directly inside the executable via bundled-templates.ts and provides a Windows one-click installation script (install.ps1). It also resolves the static version resolution issue of process.env.PROSPEC_VERSION, significantly lowering the barrier to adoption.

Slim L1/L2 Knowledge Layers & Honest Budget Enforcement (PR #78, PR #79, PR #80)

To establish the L0-L3 progressive loading architecture, this release slims the AI-Knowledge base: the Description column in index.md is now routing-only, single-sourcing from the description field in module-map.yaml to eliminate L2 duplication. Additionally, a new knowledge-size check is introduced as the 11th drift check in prospec check: when knowledge files exceed their token budget (L1 per-file budget is calibrated to 1,800 tokens, L2 per-module budget to 1,000 tokens, and the 100-line limit remains unchanged), it triggers a machine-queryable WARN (warning only, never a build breaker), aligning declared budgets with actual checks. The leak of the internal budget symbol (Symbol(resolved_budget)) into generated skills is also fixed.

Gated Review Provenance & Verify Hard Gate (PR #68, PR #70)

A new review-provenance check is added as the 9th drift check. During code reviews, a review_provenance metadata containing a whole-tree content fingerprint and timestamp is recorded in ChangeMetadata. /prospec-verify now enforces this as a hard gate: verification is blocked for non-backfill changes if the review record is missing or stale (i.e., files were modified after the review was completed). Furthermore, the auto knowledge sync is folded into the verify S/A commit prompt, eliminating the chore of post-commit knowledge-health drift.

Lightweight Quick Scale & Ceremony Pruning (PR #71)

A lightweight quick scale is introduced for minor changes, significantly reducing steps and the report output for both verify and archive phases. Optional ceremonial fields (such as [P]/~lines and INVEST checklist items) are downgraded to advisory checkpoints to align pipeline ceremony with change complexity. Additionally, a 10th metadata-completeness check is added to the /prospec-archive phase as an entry gate to prevent incomplete metadata from being committed to the permanent log.

Factual Doc Count Automation (PR #69)

Introduced the deterministic pnpm counts and pnpm counts:check scripts to re-derive all factual document counts (such as total tests and file counts) in README.md, README.zh-TW.md, index.md, and tests/README.md from a single source of truth. This structurally fixes the recurring docs/duplicated-count-drift issue and integrates count verification as a CI gate.

Skill Contract Porting & Agent-Sync Hygiene (PR #55, PR #73, PR #74, PR #75, PR #81)

Under the hood, the legacy verify-skills.sh test script is ported to the Vitest framework (running in skill-format.test.ts), which greatly accelerates test execution. We enabled tsconfig.typecheck.json to extend pnpm typecheck coverage to tests/ and scripts/, catching type breaks early in CI. agent-sync is optimized with a sweep command to remove orphan skill directories and trigger collision protection. Finally, curated index columns in module-map.yaml (Keywords, Aliases, Rationale, and Depends On) are preserved verbatim on index updates (no-clobber), preventing automated updates from overwriting custom metadata.


🔁 Dogfood

All 24 archived changes in this release successfully navigated prospec's own SDD lifecycle. Key capabilities underwent rigorous adversarial reviews and achieved Grade S verification before merging. Notably, the new verify-commit sync prevented any post-commit knowledge-health drift, proving the effectiveness of the updated pipeline.

🧪 Quality & tests

  • 2,092 tests passing (86 files) — up from 1,840 in v0.4.3, spanning unit, contract, integration, and E2E test suites.
  • Code coverage is maintained at ~96.6% line coverage, with all 11 drift checks and verify:skills tests passing green, and zero tsc or eslint warnings.
  • Added 100% test coverage for the new pnpm counts script, knowledge-size collector/evaluator, and review-provenance fingerprinting logic.

📊 Compared to v0.4.3

Comparison v0.4.3 0.5.0
Distribution Requires Node.js environment Native macOS, Linux, and Windows binaries (install.ps1)
Review Enforcement Manual check of review status review-provenance fingerprint gate blocks verify if review is stale
Knowledge Budget Check Manual tracking of declared budget knowledge-size check (automatically warns if budget exceeded)
Minor Changes Same standard pipeline ceremony quick scale with pruned steps; INVEST and [P] lines optional
Factual Doc Counts Manual updates; prone to drift pnpm counts auto-rewriting and verification CI gate
Skill Contract Tests Legacy verify-skills.sh bash script Ported to Vitest (faster, integrated with type-checking)
Typecheck Scope Covered only src/ directory Extended to tests/ and scripts/ to prevent test-file breaks
Module Index Curation Index regeneration clobbered custom columns Keywords, Aliases, Rationale single-sourced from module-map.yaml
Passing Tests 1,840 2,092

⬆️ Upgrade notes

To upgrade downstream projects:

  1. Download and replace your local binary with the latest standalone executable.
  2. Run prospec upgrade in the root of your project directory. This version renames and recalibrates config fields, and the upgrade CLI will guide you to update the YAML configuration.
  3. Run prospec check to verify all 11 drift checks pass, and ensure that your root index.md is synced successfully with the curated columns preserved.

v0.4.3 — Root L0-L3 Index & Docs That Catch Themselves Up: Hierarchical Knowledge Index, Single-Source Doc Inventory, Upgrade Back-Fill & Conditional Plan Diagrams

Choose a tag to compare

@benwu95 benwu95 released this 03 Jul 09:52

Prospec v0.4.3

0.4.2 turned prospec upgrade into a command that catches a project up on config. v0.4.3
does the same for the knowledge and docs layer. Two pillars: the AI-Knowledge entry point
graduates from a buried ai-knowledge/_index.md to the project root <base_dir>/index.md,
making the L0-L3 layered loading model real; and every init-created doc becomes traceable
through a single source of truth that prospec upgrade now back-fills — so an
already-initialized project can finally obtain a doc a newer version introduced, with no CLI
path
to it before. Rounding it out: an in-project Prospec README scaffolded at init, and a
conditional User Story Flow diagram in /prospec-plan.

157 files changed · +3,159 / −1,078 · 5 merged PRs (#49, #51, #52, #53, #54) · closes #46, #47, #48, #50


✨ Headline features

The AI-Knowledge index moves to the project root — L0-L3 layered loading (PR #49)

The entry point graduates from ai-knowledge/_index.md to <base_dir>/index.md, establishing
the L0-L3 architecture (L0 = entry configs, L1 = root index + core conventions, L2 = module
READMEs + on-demand conventions + feature specs, L3 = source). A centralized CORE_CONVENTIONS
registry in src/types/conventions.ts (superseding canonical-docs.ts) splits core vs
load-on-demand conventions via filterConventions and always drops the legacy _index.md;
_diagram-conventions.md + _glossary.md join the core set and seed at prospec init. Every
index emitter (init / knowledge init / knowledge generate / knowledge update) now renders
through one shared _index-auto-block.hbs partial + buildIndexTemplateContext, so render
contexts cannot drift — fixing a fresh init that wrote a broken root index (unsubstituted
base_dir). readIndex takes the resolved baseDir so the read side reads exactly what the
writers emit. REQ-KNOW-034/035 + REQ-AGNT-029 graduated. (PR #49)

Every init-created doc is traceable — single-source INIT_DOC_REGISTRY + upgrade docs inventory (PR #51)

The upgrade flow used to drift: the skill's hardcoded scan list had already lost _glossary.md,
and nothing created docs a newer version introduced. A single-source INIT_DOC_REGISTRY
(root-discriminated base/knowledge) now drives both the canonical and user-managed
convention-doc lists via a shared asKnowledgeInitDoc projection — no doc declared twice.
prospec upgrade gains a read-only Docs inventory: section marking every init-created doc
present/MISSING at its actual location (honoring a relocated knowledge.base_path), and
/prospec-upgrade consumes that inventory as its ONLY scan scope. Bidirectional init⇄registry
set-equality + per-template renderability contracts turn a future parallel-list drift red
instead of silently reopening the bug. US-015/016, REQ-TYPES-038 / REQ-SETUP-022 /
REQ-TESTS-036 graduated. (PR #51)

prospec upgrade now back-fills missing init docs directly (PR #53)

Because prospec init refuses to run once .prospec.yaml exists, an already-initialized project
had no CLI path to obtain a newly-added init doc — upgrade only reported them MISSING.
Creating one is a pure deterministic template render, so routing it through an LLM skill was
unnecessary. A shared src/lib/init-docs.ts (buildInitDocContexts / renderInitDoc /
resolveInitDocLocation) now backs both init.service (greenfield output byte-identical) and
upgrade.service.createMissingDocs, which renders + writes each MISSING registry doc —
skip-if-exists, per-doc best-effort, interactive and --no-interactive/CI. It never
overwrites
an existing doc; index.md is written as a baseline (its real module table / legacy
_index.md migration stays the skill's job). Verified live: upgrade back-filled this repo's own
previously-missing prospec/README.md
. US-017, REQ-SETUP-024 / REQ-LIB-023 /
REQ-SERVICES-061 (+ more) graduated. (PR #53)

An in-project Prospec README, scaffolded at init (PR #52)

prospec init now scaffolds a short {base_dir}/README.md so other developers of an adopting
project can understand what the prospec/ directory (and Prospec) is without cloning this
repo
. Content is condensed from the root README's three-piece model (Skills / AI Knowledge /
CLI) and ends with a pointer to the full docs. It's a standalone base entry in
INIT_DOC_REGISTRY, so both init-create and the upgrade docs inventory derive from it with no
new write/inventory logic
; an existing README.md is preserved byte-for-byte.
REQ-SETUP-023 graduated. (PR #52)

/prospec-plan emits a conditional User Story Flow diagram (PR #54)

plan.md gains a new Section 5 Mermaid User Story Flow diagram, gated on an any-of structural
signal set (≥2 branching decision points / ≥3 state transitions or multiple terminal states /
cross-module·cross-actor ordering) and skipped for linear stories — complementary to the
existing technical Call Chain. Template-content only, no runtime logic: it reuses
_diagram-conventions.md, is excluded from the 120-line standard cap, and keeps the
_diagram-conventions.md read out of Startup Loading (cache stability, mirroring the Context7
pattern). 4 mutation-verified contract assertions guard it. REQ-TEMPLATES-125 graduated. (PR #54)

Smaller fixes

  • knowledge-loading-rules extracted into a reusable partial shared by 10+ skill templates
    with root-resolvable L2 paths; the upgrade skill's Index Migration step copies curated Modules
    rows verbatim and forbids rebuilding via knowledge update (which blanks curated columns).
    _playbook.md deliberately stays load-on-demand (never core) per feedback-promotion
    governance. (PR #49)
  • Corrected a stale INIT_DOC_REGISTRY count (7 → 8) in REQ-TYPES-038 / REQ-TESTS-036. (PR #53)
  • The verify:skills status-lifecycle skill-count assertion synced 10 → 9 after PR #51's
    upgrade-skill rewrite intentionally dropped its enumerated reference — the assertion had been
    left stale, turning the hygiene check red on the release commit. (9d3a8ff)

🔁 Dogfood

All five changes ran through prospec's own SDD lifecycle on this repo. The hierarchical-index
change (implement-hierarchical-index) went story → … → archive, then a three-reviewer
adversarial audit
whose two criticals — a broken init root-index render and data-loss
migration advice — were fixed on-branch. The doc-coverage, upgrade-back-fill, and
plan-diagram changes each reached verify Grade S; the in-project-README change was
review-clean (0 critical / 0 major). REQs graduated into specs/features/project-setup.md and
sdd-workflow, with module Knowledge synced.

🧪 Quality & tests

  • 1,840 tests passing (77 files) — up from 0.4.2's 1,779, climbing across the release:
    1,791 (index) → 1,821 (doc-coverage) → 1,824 (README) → 1,836 (back-fill) → 1,840 (plan
    diagram). (One e2e test, prospec --help, can hit a 5 s timeout under full-suite load but
    passes in isolation (~260 ms) — flaky, not a regression.)
  • Coverage ~96.6% lines; prospec check drift engine 8/8, 0 fail / 0 warn;
    verify:skills 28/28; typecheck + lint clean.
  • New coverage for filterConventions + dynamic base_dir + the legacy _index.md no-touch
    contract, the single-source INIT_DOC_REGISTRY set-equality guards, the shared init-docs.ts
    renderer (100%), and the plan-diagram contract assertions.

📊 Compared to v0.4.2

v0.4.2 v0.4.3
AI-Knowledge entry point ai-knowledge/_index.md root <base_dir>/index.md (L0-L3 layered)
Index rendering across emitters per-emitter contexts (drift-prone) single shared auto-block partial
Init-doc coverage hardcoded skill list (drifted; _glossary missed) single-source INIT_DOC_REGISTRY inventory
Missing init doc on an initialized project no CLI path (init refuses) prospec upgrade back-fills (skip-if-exists)
In-project onboarding doc none {base_dir}/README.md at init
/prospec-plan output prose + Call Chain + conditional User Story Flow diagram
Tests 1,779 1,840
Verify grade S / A S across changes

⬆️ Upgrade notes

Re-install globally (pnpm add -g @benwu95/prospec, or your installer of choice) and run
prospec upgrade in each project. On top of 0.4.2's config-nudge fill + comment-safe writes,
upgrade now reports a Docs inventory and back-fills any MISSING init-created doc directly —
including the new <base_dir>/README.md and the root index.md baseline — skip-if-exists
and non-destructive to the curated trust zone (CONSTITUTION.md / _conventions.md and your
index.md content stay yours). The AI-Knowledge entry point is now the root
<base_dir>/index.md; if you referenced ai-knowledge/_index.md, switch to it.
/prospec-upgrade then enriches the created docs and migrates drifted formats with per-file
consent.


Merged PRs

  • #49 Promote the AI-Knowledge index to root <base_dir>/index.md (hierarchical L0-L3 index)
  • #51 Cover every init-created doc via a single-source docs inventory
  • #52 Scaffold an in-project Prospec README at init
  • #53 Back-fill missing init docs on prospec upgrade
  • #54 Conditional User Story Flow diagram for /prospec-plan

v0.4.2 — Upgrade That Catches You Up: Config Nudges, Comment-Safe Writes & Git-Tracked Scans

Choose a tag to compare

@benwu95 benwu95 released this 27 Jun 16:56

Prospec v0.4.2

0.4.0 and 0.4.1 built the version-upgrade path and made re-running commands no-clobber
but prospec upgrade on a project that predates a feature still just bumped the version
number
. It didn't help the project actually catch up: optional config fields a newer init would
have offered stayed missing, writeConfig silently destroyed your .prospec.yaml comments
while its own docs claimed otherwise, and the deterministic raw-scan.md was left stale against
the new scanner. v0.4.2 turns upgrade into a command that catches a project up — it detects
and interactively fills missing curated config fields, preserves your comments, and refreshes the
scan — then retires the long-dead prospec steering command and ships a public landing
page
.

96 files changed · +2,786 / −1,698 · 2 merged PRs (#44, #45) · new GitHub Pages landing page (EN + 繁體中文)


✨ Headline features

prospec upgrade now catches a project up — config-field nudges + interactive fill (PR #45)

A curated UPGRADE_NUDGE_RULES registry detects optional .prospec.yaml fields a pre-feature
project never set (first rule: artifact_language) and reports them. It is deliberately
curated, not "every absent field"
— fields with sensible defaults (base_dir, knowledge) or
that hard-error when missing (agents) are excluded. On an interactive TTY, upgrade prompts to
fill each nudge just like prospec init; --no-interactive (and any non-TTY stdin) forces
report-only, so the /prospec-upgrade Skill and CI never block. (PR #45)

Config writes preserve your comments and formatting (PR #45)

writeConfig used to rebuild the YAML tree (doc.createNode), silently destroying user
comments
while its JSDoc claimed it preserved them. A new mergeIntoDocument reconciles in
place
— mutating only changed scalars, recursing into maps, deleting removed keys — so
prospec upgrade (which only bumps version) keeps every comment and formatting choice intact.
(PR #45)

Generated artifacts stay aligned to the new version (PR #45)

After agent sync, upgrade best-effort regenerates the deterministic raw-scan.md (the only
ai-knowledge/ write — never a curated doc) so the project snapshot matches the new scanner; it
is non-fatal if it can't. And raw-scan now scans git-tracked files only: scanDir
intersects its glob with git ls-files, so gitignored directories the static ignore list misses
no longer leak into the scan — falling back to the full glob when there is no git work tree. Used
by knowledge init --raw-scan-only, the archive refresh, and upgrade. (9652e53, 79f0611)

The deprecated prospec steering command is gone (PR #44)

steering was superseded by prospec knowledge init and had become dead code — a staler
parallel scan (manifest-only tech detection, unconditional module-map.yaml overwrite) that no
live code imported. v0.4.2 deletes the command, its formatter, service, and the
architecture.md.hbs template, moves module-readme.hbs under templates/knowledge/, and
repoints every module-map prerequisite hint to prospec knowledge init. REQ-SETUP-008/009/010

  • US-004 are retired; architecture.md generation and the self-referential per-module paths
    writeback
    are intentionally dropped — their content is already covered by raw-scan.md /
    _index.md / module READMEs (+ module-map.yaml for the layers). (PR #44)

A public landing page — benwu95.github.io/prospec (EN + 繁體中文)

A GitHub Pages landing page (served from docs/) now introduces Prospec as "spec-driven
development that audits itself"
, with a client-side i18n layer (i18n.js) offering English
(default on first visit) and Traditional Chinese. The README's Project Structure tree was folded
into Quickstart and corrected to reflect the full quickstart bootstrap (synced
.claude/skills/*, raw-scan.md, module READMEs, a filled _index.md) — not just init.
(6957239, eca71b8, 75912f1, 634f546)

Smaller fixes

  • 8 skill templates ended with a trailing blank line that propagated into every generated
    SKILL.md — normalized to one trailing newline, with a contract test guarding it. (e4bfba7)
  • Canonical agent order unified to claude, codex, copilot, antigravity across the zod enum
    error, AGENT_CONFIGS, and AGENT_DIRS (zero drift — generated files depend on the agent set,
    not its order). (0959efc)
  • Corrected a stale prospec archive hint in the feature-map / product MCP resources.
    (a2c835e)

🔁 Dogfood

Both core changes ran through prospec's own SDD lifecycle
(story → plan → tasks → implement → review → verify → archive) on this repo. The
upgrade-config-nudges change reached 0-critical adversarial review and verify Grade S
REQ-SETUP-019/020/021 + REQ-LIB-022 graduated into specs/features/project-setup.md and
REQ-AGNT-028 into agent-integration.md, with module Knowledge synced. The steering removal
reached verify Grade A, retiring REQ-SETUP-008/009/010 + US-004 and reconciling a
pre-existing services-count inconsistency (module-map 13 / README 14 / _index 15) to the true
execute()-services count of 14.

🧪 Quality & tests

  • The suite is 1,779 tests passing (74 files) — a net dip from 0.4.1's 1,786 because removing
    steering deleted its test files (1,786 → 1,748), which the upgrade work then brought back up
    (1,748 → 1,779).
  • Coverage ~97% lines; prospec check drift engine 8/8 checks, 0 fail; typecheck + lint
    clean.
  • New coverage for the config-nudge registry, interactive fill, the comment-preserving
    mergeIntoDocument, the git-tracked scan intersection, and the skill-template
    trailing-newline contract.

📊 Compared to v0.4.1

v0.4.1 v0.4.2
prospec upgrade on a pre-feature project bumps version only detects + interactively fills missing curated .prospec.yaml fields
writeConfig user comments destroyed on rewrite preserved (in-place merge)
upgrade & raw-scan.md left stale refreshed to the new scanner
raw-scan file set full glob (gitignored leaks) git-tracked files only (glob fallback)
prospec steering deprecated dead command removed
Landing page none GitHub Pages site (EN + 繁中)
Tests 1,786 1,779 (−steering tests)
Verify grade S S (upgrade) / A (steering removal)

⬆️ Upgrade notes

Re-install globally (pnpm add -g @benwu95/prospec, or your installer of choice) and run
prospec upgrade in each project: on an interactive terminal it now offers to fill any
missing curated config field (e.g. artifact_language), preserves your .prospec.yaml
comments
, re-syncs agents, and refreshes raw-scan.md — all non-destructive to the curated
trust zone (CONSTITUTION.md / _conventions.md / _index.md stay skip-if-exists). In CI or
with --no-interactive it stays report-only. If you scripted around prospec steering,
switch to prospec knowledge init (or knowledge init --raw-scan-only for just the scan).


Merged PRs

  • #45 Improve prospec upgrade: config nudges, interactive fill, comment-safe writes, git-tracked raw-scan
  • #44 refactor: remove deprecated prospec steering command

v0.4.1 — No-Clobber, Completed: Agent-Config User Blocks & `/prospec-upgrade` Path Fixes

Choose a tag to compare

@benwu95 benwu95 released this 22 Jun 05:15

Prospec v0.4.1

v0.4.0 made re-running init safe — but the no-clobber promise stopped at the agent config
files
. prospec agent sync still overwrote CLAUDE.md / AGENTS.md unconditionally, and
prospec init skipped an existing AGENTS.md entirely — so any hand-written agent
instructions were destroyed or ignored. And the brand-new /prospec-upgrade Skill that 0.4.0
shipped had two path/resolution bugs that made it fail on first real use. v0.4.1 finishes
the no-clobber guarantee
(extending the prospec:auto / prospec:user block contract to the
agent config files) and repairs the upgrade path, then brings the deployed skills and config
under version control.

31 source files changed · +745 / −116 · 1 merged PR (#43) · plus prospec-* skills, AGENTS.md & CLAUDE.md now version-controlled


✨ Headline features

User edits in CLAUDE.md / AGENTS.md now survive every command (PR #43)

Agent config files now use the same prospec:auto / prospec:user block contract that
_index.md already relies on. A new mergeManagedDoc(generated, existing) does an in-place
auto-block swap that preserves the user block
; a marker-less hand-written file is migrated
into the user block
instead of discarded, and the merge is idempotent (two syncs in a row
are byte-identical). agent sync and init both route through it — init now merges the
managed AGENTS.md instead of skipping it, while the curated trust zone (CONSTITUTION.md /
_conventions.md / _index.md) keeps its skip-if-exists guard. So your custom instructions now
survive init / agent sync / quickstart / upgrade. (PR #43)

/prospec-upgrade actually works now — two resolution fixes

The 0.4.0 upgrade Skill couldn't find the latest templates. Step 2 pointed at a root-level
templates/init/ that never exists
— the package ships and loads templates from
src/templates/ (because tsc doesn't copy .hbs into dist/); that path is now corrected.
A package-root fallback was added for pnpm link / global installs where
require.resolve can't see the package: derive the root by following $(which prospec) back up
from the bin shim. And a source-repo short-circuit handles dogfooding — when the project's
own package.json name is @benwu95/prospec, use . as the root and skip require.resolve
(which fails on a self-reference with no exports field). (bb0bf25, 8446a8b)

Deployed prospec skills & agent config are now version-controlled

.gitignore now tracks the deployed prospec-* skills under .claude/ and .agents/,
plus AGENTS.md and CLAUDE.md — so changes to generated config are reviewable in git instead
of invisible. (698437d)


🔁 Dogfood

The whole change ran through prospec's own SDD lifecycle
(story → plan → tasks → implement → review → verify → archive → learn) on this repo, reaching
0-critical adversarial review and verify grade S. The DRY follow-up that resolved both
review majors — a shared single-source auto-block helper (hasAutoBlock / replaceAutoBlock)
plus readFileIfExists adopted across the knowledge services — was then promoted to the team
playbook as PB-006 (single-source helper for parallel modules).

🧪 Quality & tests

  • The suite grew 1,760 → 1,786 tests — new coverage for the block-merge primitive,
    marker-less migration, idempotent re-sync, and the init / agent sync merge routes.
  • prospec check drift engine 8/8 PASS (0 warn), coverage 96%, typecheck + lint clean.
  • Real-CLI e2e confirmed: a brownfield CLAUDE.md / AGENTS.md is migrated into the user block
    and preserved across init → agent sync, idempotent on re-sync.

📊 Compared to v0.4.0

v0.4.0 v0.4.1
Tests 1,760 1,786
agent sync on CLAUDE.md / AGENTS.md unconditional overwrite (loses edits) auto/user block merge (edits preserved)
init with an existing AGENTS.md skipped entirely migrated into the user block
/prospec-upgrade template lookup broken (templates/init/, pnpm-link) fixed (src/templates/init/ + CLI-shim / self-ref fallbacks)
Deployed skills + agent config gitignored version-controlled
Verify grade A S

⬆️ Upgrade notes

Run prospec agent sync (or any of init / quickstart / upgrade): a marker-less
hand-written CLAUDE.md / AGENTS.md is migrated into the prospec:user block on first
sync
, then preserved byte-for-byte on every later sync — keep your custom instructions inside
that user block. If you adopted 0.4.0's /prospec-upgrade, re-sync to pick up the fixed
Skill
(prospec agent sync). The trust zone is unchanged — still skip-if-exists.


Merged PRs

  • #43 feat: preserve user edits in CLAUDE.md / AGENTS.md via auto/user blocks

v0.4.0 — Safe Re-Init & the Version-Upgrade Path: No-Clobber Init, `prospec upgrade` & Consent-Gated Migration

Choose a tag to compare

@benwu95 benwu95 released this 21 Jun 23:56

Prospec v0.4.0

v0.3.x kept hardening the spec flywheel — but two setup-layer gaps could quietly cost you
work. prospec init's idempotency gate only checked .prospec.yaml, then unconditionally
overwrote 7+ files
including the curated trust zone (CONSTITUTION.md / _conventions.md /
_index.md). The common move of deleting .prospec.yaml to re-localize triggers therefore
wiped curated content. And once prospec shipped a new version, there was no upgrade
path
— nothing to bring an existing project up to date. v0.4.0 closes the data-loss hole
and adds a real, two-stage upgrade path (deterministic CLI + consent-gated Skill), then
dogfoods it on this very repo.

44 files changed · +1,488 / −270 · 1 merged PR (#42)


✨ Headline features

No-clobber init — re-running init never overwrites curated files (P0, BL-044)

prospec init now uses a per-file skip-if-exists guard (matching knowledge-init.service):
it rebuilds only the files that are actually missing and leaves everything you've authored
untouched. The .prospec.yaml-last completion marker is preserved, so re-running init to
recover a missing file is now safe — deleting .prospec.yaml to re-localize triggers can no
longer take the trust zone with it. (PR #42)

prospec upgrade — a deterministic, zero-LLM version-bump command (P1, BL-044)

A new prospec upgrade CLI command records the prospec version in .prospec.yaml
(canonical re-serialize), re-runs agent sync, and prints a migration report. It writes no
docs
and is deliberately not in INIT_COMMANDS, so an uninitialized project gets a clean
ConfigNotFound instead of a half-built tree. .prospec.yaml version now means the prospec
version the project uses
(a legacy "1.0" is treated as stale and bumped on first upgrade) —
there is no separate prospec_version field. (PR #42)

/prospec-upgrade — the consent-gated migration finisher (P1, BL-044)

The judgment work the CLI can't do safely now lives in a new /prospec-upgrade Skill: it scans
the files prospec init created, compares them to the latest templates, and offers to migrate
any whose format has drifted — asking per file, format-only, never touching your authored
content. It then localizes triggers for any newly-added skills (fill-missing only) and re-runs
agent sync. Like /prospec-quickstart, it's deployed on disk but kept out of the entry
config
, so it adds no recurring token cost. (PR #42)

Trigger re-localization without nuking config (P2, BL-044)

agent sync now names the skills missing a skill_triggers entry (partial localization),
and /prospec-quickstart fills only the missing triggers — so you never need to delete
.prospec.yaml to re-localize. /prospec-knowledge-update also gained a Phase 2.5 step that
asks for consent before migrating drifted AI-knowledge format. (PR #42)


🔁 Dogfood: the upgrade path upgraded this repo

After merge, this repo ran the new flow end-to-end: prospec upgrade + /prospec-upgrade
bumped .prospec.yaml version 1.00.3.2, localized the new /prospec-upgrade
skill's triggers, and left every init-created doc untouched — exactly the no-clobber
guarantee the P0 fix promises.

🧪 Quality & tests

  • The suite grew 1,726 → 1,760 tests — new coverage for init recovery, the upgrade
    orchestrator, missing-trigger detection, version semantics, and the entry-exclusion
    contract ({quickstart, upgrade}); new contract assertions are mutation-verified.
  • prospec check drift engine is 8/8 PASS (0 warn), verify:skills 28/28, coverage 96%.
  • The change ran dogfood-style through prospec's own SDD workflow
    (story → plan → tasks → implement → review → verify → archive), reaching 0-critical
    adversarial review and verify grade A.

📊 Compared to v0.3.2

v0.3.2 v0.4.0
Tests 1,726 1,760
Re-running init overwrites 7+ files incl. trust zone per-file skip-if-exists (no clobber)
Version-upgrade path prospec upgrade (CLI) + /prospec-upgrade (Skill)
.prospec.yaml version bootstrap marker ("1.0") the prospec version the project uses
Re-localizing triggers delete .prospec.yaml (risked clobber) agent sync names gaps · fill-missing only
Skills 16 17 (+ /prospec-upgrade)

⬆️ Upgrade notes

On a version bump, run prospec upgrade then /prospec-upgrade in your AI agent: the
CLI records the new version + re-syncs agents (writing no docs), and the Skill handles
init-doc format migration + new-skill trigger localization with per-file confirmation.
If you only want the new skill wired up, prospec agent sync is enough to pick up
/prospec-upgrade. The init fix is automatic — re-running init is now safe by construction.


Merged PRs

  • #42 fix init clobber + add prospec upgrade path (BL-044)

v0.3.2 — Knowledge-Sync Hardening: Feature-Prefix Archive Fix, README Count Drift & MCP Spec Entry

Choose a tag to compare

@benwu95 benwu95 released this 20 Jun 05:16

Prospec v0.3.2

v0.3.1 shipped feature-map.yaml and the feature→module governance checks — but two gaps
remained. A standard/full change whose delta-spec used a feature-prefixed REQ (e.g.
REQ-MCP-*) would silently mis-route at archive: the auto knowledge-update read the prefix
as a module name, missing the real modules and risking a phantom modules/<prefix>/. And the
README's factual counts (e.g. "registers N resources") drifted from the code with nothing to
catch them. v0.3.2 hardens the knowledge-sync flow and mechanizes the count check
then dogfoods both by archiving the very MCP change that surfaced them.

44 files changed · +1,222 / −87 · 2 merged PRs (#40#41)


✨ Headline features

Feature-prefixed REQ knowledge-sync hardening (BL-043)

standard/full changes whose delta-spec uses a feature-prefixed REQ (REQ-MCP-* and
the 10 other non-module prefixes) now resolve affected modules from metadata.related_modules

  • feature-map.yaml instead of mistaking the prefix for a module — consistently in both the
    archive Entry Gate (skill) and the auto knowledge-update (service). A surgical mint
    guard skips a feature-prefix that resolves to no known module (with a warning) rather than
    minting a phantom modules/<prefix>/. Module-prefix REQs are unchanged. (PR #40)

readme-counts drift check (BL-043)

A new readme-counts drift check (DRIFT_CHECK_IDS 7 → 8) mechanizes what was a manual
review concern: a count declared in a module README (e.g. "src/x.ts … registers N resources")
is verified against the actual code it names — warn-class, string/template/fenced-block-aware
so it never false-positives. (PR #40)

MCP spec-system entry/index resources (BL-042)

prospec mcp serve now exposes the spec system's entry layer, not just feature details:
knowledge://feature-map (the feature→module routing index) and spec://product (the PRD
entry / 2-minute overview). An external or cold-start agent can grasp the project in one read,
then drill into spec://feature/{name}. buildMcpServer registers 6 → 8 resources; both
are read-only, per-request, realpath-contained. (PR #41)


🔁 Dogfood: the fix validated itself

BL-042's archive was paused at the Entry Gate when its feature-prefixed REQ-MCP-*
mis-routed — which is exactly what surfaced BL-043. After BL-043 merged, BL-042 archived
cleanly through the new feature-prefix fallback (modules derived from related_modules, no
phantom minted), and the new readme-counts check caught and then confirmed the 6 → 8
resource-count sync.

🧪 Quality & tests

  • The suite grew 1,696 → 1,726 tests (unit 1,127 / contract 542 / integration 17 / e2e 40);
    new contract assertions are mutation-verified.
  • prospec check is 8/8 PASS on prospec itself (including the new readme-counts).
  • Both changes ran dogfood-style through the full SDD workflow
    (story → plan → tasks → implement → review → verify → archive), reaching review-clean +
    verify grade S / A.

📊 Compared to v0.3.1

v0.3.1 v0.3.2
Tests 1,696 1,726
Drift checks 7 8 (+ readme-counts)
Feature-prefix REQ at archive mis-routes (stale / phantom risk) resolves via related_modules / feature-map
README count accuracy manual review only deterministic readme-counts check
MCP resources 6 8 (+ knowledge://feature-map, spec://product)

⬆️ Upgrade notes

Run prospec agent sync to pick up the updated /prospec-archive template (standard/full
feature-prefix fallback). The new readme-counts drift check runs automatically in
prospec check; it is warn-class and degrades to skipped without a module-map.yaml,
so existing projects keep working unchanged.


Merged PRs

  • #40 harden feature-prefixed REQ knowledge-sync + readme-counts drift check (BL-043)
  • #41 MCP knowledge://feature-map + spec://product entry resources (BL-042)

v0.3.1 — Backfill End-to-End: Feature-First Scoping, Feature-Map Governance & Trust-Zone Graduation

Choose a tag to compare

@benwu95 benwu95 released this 19 Jun 14:10

Prospec v0.3.1

v0.3.0 opened the door to brownfield backfill — /prospec-backfill-spec could
extract a behavioral draft from existing code. But the draft hit a wall: the forward-path
verify gates new-code quality, so a backfill spec recording existing behavior could
never reach verified, and archive only accepts verified. v0.3.1 completes the
loop
. Backfill now scopes by feature vertical-slice instead of by module, a new
feature-map.yaml index governs the feature→module edge deterministically, and a 4th
scale: backfill mode plus /prospec-promote-backfill lets brownfield specs graduate
end-to-end into the trust zone
through an honest, lightweight path.

111 files changed · +2,447 / −4,330 · 2 merged PRs (#38#39)

The net-negative diff is a legacy spec-folder consolidation, not a feature removal.


✨ Headline features

scale: backfill — brownfield specs graduate end-to-end (new)

A 4th scale value (a light scale, symmetric to quick) plus a /prospec-promote-backfill
skill closes the backfill journey: extract → promote → verify → archive. Promote
produces only proposal + delta-spec + metadatano hollow plan.md / tasks.md,
since backfill records existing code with no forward work to schedule. verify re-points
its primary graded dimension to spec-fidelity (every REQ's AC must resolve to its cited
file:line); pre-existing code-quality [MUST] violations are recorded as informational
tech debt rather than failing the grade. Provenance binding gates the relaxation on a
backfill-draft.md being present, so new code can't masquerade as backfill to skip the
tested-functions gate. (PR #39)

Feature-first backfill scoping (BL-039)

/prospec-backfill-spec now extracts and scans by feature vertical-slice (WHAT) across
contributing modules, not by module (WHERE). A two-pass gather-by-module → cluster-by-feature
flow cites file:line per traced edge; cross-module event/outbound edges become acceptance
criteria only when both ends are traced (otherwise [NEEDS CLARIFICATION] / Deferred);
infrastructure modules are never feature targets. (PR #38)

feature-map.yaml + deterministic coverage governance (BL-040)

A new feature-map.yaml index records the feature→module edge that module-map.yaml
can't answer, written automatically by archive (bootstrap-once, no-clobber). Two new drift
checks ship with it (DRIFT_CHECK_IDS 5 → 7): dangling-prefix (REQ-prefix legality,
warn) and feature-modules (self-validating feature→module edge, fail), both gated
on the index existing. Backfill Phase 4 coverage becomes a deterministic set-difference once
the index is present. (PR #38)


🗂️ Knowledge & spec-history cleanup

  • Archive-summary convergence (BL-041) — spec-history summaries now land in a
    date-prefixed specs/_archived-history/{YYYY-MM-DD}-{change-name}.md, name-aligned with
    the .prospec/archive/ folder and drift-excluded. An explicit copy step was added to
    prospec-archive Phase 3 (previously buried only in the reference). (PR #38)
  • Legacy spec-folder consolidation — the 001-prospec-mvp-cli/ spec-kit folder and five
    _archived-capabilities/ specs were collapsed into date-prefixed summaries and removed
    (full content preserved in git history). specs/ root is now just product.md +
    MIGRATION.md; _archived-history/ is uniformly date-prefixed, with no stray folders. (PR #38)

🧪 Quality & tests

  • The suite grew 1,622 → 1,696 tests (unit 1,100 / contract 539 / integration 17 / e2e 40);
    all new contract assertions are mutation-verified.
  • prospec check is 7/7 PASS — the two new feature-map checks pass on prospec itself.
  • Each change was built dogfood-style through prospec's own SDD workflow
    (story → plan → tasks → implement → review → verify → archive), reaching review-clean +
    verify grade S / A.

📊 Compared to v0.3.0

v0.3.0 v0.3.1
Tests 1,622 1,696
Backfill flow extract draft only extract → promote → verify → archive (end-to-end)
scale values quick · standard · full + backfill (4)
Backfill scoping by module (WHERE) by feature vertical-slice (WHAT)
Feature→module index feature-map.yaml + 2 deterministic checks
Drift checks 5 7
Spec history flat root + legacy folders date-prefixed _archived-history/

⬆️ Upgrade notes

Run prospec agent sync to pick up the new /prospec-promote-backfill skill and the
updated /prospec-backfill-spec, /prospec-verify, and /prospec-archive templates.
feature-map.yaml is optional and additive — the two new drift checks stay skipped
until you bootstrap an index (via archive), so existing projects keep working unchanged.


Merged PRs

  • #38 feature-first backfill + feature-map governance + archive-history cleanup (BL-039 / 040 / 041)
  • #39 scale: backfill mode — graduate brownfield specs end-to-end