All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- GitHub Action command execution hardened — marketplace action now builds
specsyncinvocations as bash argv arrays instead of shell strings, eliminatingevalaround user-providedargs. - Release checksum verification fails closed — downloaded release archives now require matching
.sha256files before extraction.
- Action input validation —
require-coverageis validated as an integer from 0 to 100 before command execution. - MCP generated-spec test assertion — replaced a tautological unsigned comparison with a meaningful generated-spec count assertion.
- VS Code extension license packaging — extension package includes the MIT license file so VSIX builds are complete.
- Repo-wide validation expanded — CI now builds/tests/lints the Astro docs site and compiles/packages the VS Code extension.
- Spec gate requires full coverage — project spec CI now runs
check --strict --require-coverage 100 --force. - Coverage threshold raised — tarpaulin minimum coverage increased from 40% to 43%.
- Fledge tasks expanded — repository lanes now cover Rust, specs, docs, extension packaging, and audit checks.
- Known transitive audit warning tracked —
RUSTSEC-2024-0384is ignored explicitly while it remains pulled in throughnotify.
- Utility helpers specced — added a dedicated spec for
src/util.rs. - Companion files completed — backfilled
testing.mdcompanions and missingtasks.md/context.mdfiles for legacy specs.
- Word boundary added to RAW_STR regexes — prevents false matches where raw string patterns were incorrectly matching substrings of longer tokens (#262).
- New Astro-based marketing site at corvidlabs.github.io/spec-sync — replaces the prior mdBook. Includes a Languages registry, examples, blog, and migrated docs.
- Bare
depends_onmodule names now resolve correctly — entries likerun(no path separator) are resolved underspecs/instead of the project root, matching the behavior ofdeps.rs(#257, #258).
--fixdry-run and backup mode —specsync check --fix --dry-runpreviews changes without writing;--fixnow creates timestamped backups before modifying specs (#243, #248).- Config path in error messages — validation errors now show which
.specsync/config.tomlis in effect (#244, #248). - Large file warnings — configurable size threshold (default 512 KB) warns when spec files are unusually large (#245, #248).
- ReDoS protection on custom regex rules — user-supplied patterns are now checked for catastrophic backtracking before compilation (#240, #247).
- Deduplicated Levenshtein implementation — single shared function replaces two near-identical copies (#241, #247).
- Scoring weight constants — magic numbers replaced with named constants (#242, #247).
- Backup error propagation —
--fixnow aborts if backup creation fails instead of silently continuing (#249, #252). - Duplicate size warnings — single configurable check replaces redundant size validation (#250, #252).
--dry-runwithout--fixwarning — emits a helpful warning instead of silently doing nothing (#251, #252).- Production unwrap elimination — all
.unwrap()calls in production code replaced with proper error propagation (#253). - Collapsible-if clippy warnings — resolved across the entire codebase (#253).
- Cleartext logging remediation — sensitive information no longer appears in log output (#238, #239).
timecrate bumped to 0.3.47 — addresses CVE in time crate (#253).
- CI: cargo-audit job — new CI step using
rustsec/audit-checkcatches dependency CVEs on every PR (#253). - CI: coverage threshold —
cargo-tarpaulinwith 40% minimum coverage enforced in CI (#253).
--explainper-criterion breakdown —specsync score --explainnow prints a per-criterion table showing the score, weight, and a one-line rationale for every dimension. Makes it easy to see exactly why a spec lands at a given grade (#234).- Stub/TBD depth penalty — sections whose content is
TBD,Coming soon, or equivalent placeholders are now penalized in the depth score. A spec filled with stubs can no longer score A (#235).
- Near-miss required headers —
specsync checknow reports near-miss section headers (e.g.Overviewsinstead ofOverview) as actionable errors rather than silently missing them (#236). - A-grade stub cap — specs with a high ratio of stub sections are capped below A regardless of other scores (#236).
- Hardened section header matching — regex anchors, whitespace tolerance, and word boundaries prevent false positives and mismatched headers on sections with leading/trailing spaces or similar names (#232).
--fixinsertion point corrected — new rows no longer append after non-export subsections on repeated runs; near-miss header detection broadened to catch more variants (#231).
- Redact API keys in
Debugoutput — sensitive keys are now masked in debug/trace logs (#230). - Bumped
timeandrustls-webpki— addresses upstream advisories in both crates (#230).
testing.mdcompanion file — a new default companion file scaffolded alongside every spec. Contains sections for automated test locations, manual QA checklists, and edge cases/boundary conditions. Generated byspecsync generate,specsync add-spec, andspecsync new --full(#225).design.mdcompanion file (opt-in) — layout, component hierarchy, design tokens, and asset references. Enabled via[companions] design = truein.specsync/config.toml. Generated alongside other companions when enabled (#226).- YAML as source language —
Language::Yamlvariant added to export extraction. Detects.yaml/.ymlfiles and extracts top-level mapping keys as symbols (#224).
specsync mergenow detects conflicts in all spec.mdfiles — Previously, merge conflict detection only matched*.spec.mdfiles, silently skippingtasks.md,requirements.md,context.md, and other markdown files under the specs directory. Now matches any.mdfile in the specs path (#215).
specsync commentnow respects--strictand--require-coverage— Previously,specsync commenthardcoded pass/fail astotal_errors == 0, ignoring strict mode, enforcement level, and coverage requirements. PR comments could show "✅ Passed" even whenspecsync check --strictcorrectly failed with exit code 1. Now uses the samecompute_exit_code()logic ascheck(#213).
- Unified comment and check validation pipelines —
specsync commentnow uses the samerun_validation()pipeline asspecsync check, ensuring identical output. Previously,commentskipped.specsyncignorerules, inlinespecsync-ignoredirectives, and staleness checks (#209). - Stripped ANSI codes from PR comments — CI comments no longer contain color escape sequences from cargo build output (#209).
- Marketplace action now uses
specsync comment— the GitHub Action (action.yml) now usesspecsync commentinstead ofspecsync diff --format markdownwhencomment: trueis set, producing identical PR comment output to the project's own CI workflow. - Fixed YAML parse error in
action.yml— unindented---inside a block scalar was treated as a YAML document separator, breaking the action. Comment body now usesprintfinstead of a raw heredoc (#211).
- YAML validation CI step —
action.ymlis now validated withpython3 -c "import yaml; yaml.safe_load(open('action.yml'))"in CI to catch parse errors before release (#211).
specsync rehashcommand — regenerates.specsync/hashes.jsonfrom scratch without running validation. Useful after manual spec edits or when the hash cache is stale (#208).- Auto-gitignore hashes.json —
specsync initandspecsync migratenow automatically add.specsync/hashes.jsonto.gitignore. The hash cache is a local artifact and should not be committed (#208). - Force hash rebuild in CI — GitHub Action now runs
specsync rehashbeforespecsync checkto ensure CI always validates against fresh hashes, not a stale cache (#208).
- hashes.json removed from version control —
.specsync/hashes.jsonis no longer tracked in git. Existing tracked copies are removed during migration (#208).
- Updated all docs for v4.0.0 — CLI examples, config paths, GitHub Action usage, quickstart, and architecture docs now reflect the
.specsync/directory structure and v4 commands (#206).
4.0.0 - 2026-04-11
- Directory restructure — all spec-sync metadata moves into
.specsync/: config, registry, lifecycle history, change records, and archives. Root-levelspecsync.jsonandspecsync-registry.tomlare relocated automatically byspecsync migrate. - Config format change —
specsync.jsonis converted to.specsync/config.toml(TOML). Legacy JSON/TOML files at the root still work as fallback. lifecycle_logremoved from frontmatter — lifecycle history is extracted from spec YAML frontmatter into.specsync/lifecycle/*.jsonfiles. Thelifecycle_logfield is removed from specs during migration.- GitHub Action version — update workflows from
@v3to@v4.
specsync migratecommand — automated 3.x → 4.0.0 migration with 10 steps: version detection, backup, directory creation, config conversion, registry relocation, lifecycle extraction, frontmatter cleanup, gitignore, cross-project ref scanning, and version stamping. Supports--dry-run,--no-backup,--format json. Idempotent and safe to re-run (#198).- Full spec lifecycle management —
specsync lifecyclesubcommands:status,promote,demote,set,history,guard,auto-promote,enforce. Specs track lifecycle stages (draft → review → stable → deprecated → archived) with configurable transition guards. - Lifecycle enforcement in CI —
specsync lifecycle enforce --allvalidates lifecycle rules in CI. Available via GitHub Action withlifecycle-enforce: 'true'. - Change records —
.specsync/changes/directory for tracking spec modifications over time. - Spec archival —
.specsync/archive/directory for retired specs. Archive contents are version-controlled (not gitignored). - Migration backup —
.specsync/backup-3x/with timestamped manifest preserves original 3.x files for rollback. - Cross-project reference scanning — migration detects
depends_onrefs to external repos and records them in.specsync/cross-project-refs.json.
- Archive not gitignored —
.specsync/archive/is no longer excluded from git. Users who want to remove archived specs can delete them explicitly (#202).
- MIGRATION.md — comprehensive upgrade guide with breaking changes, step-by-step instructions, and FAQ.
3.8.0 - 2026-04-10
- Staleness detection — new
specsync stalecommand identifies specs that haven't been updated since their source files changed. Also available viaspecsync check --stale(#189). - AST-based export parsing — tree-sitter powered export extraction replaces regex-based parsing for more accurate and reliable results across all supported languages (#192).
- Batch operations —
specsync import --all-issuesand--from-dirfor bulk import;specsync score --format table|csvfor tabular output;specsync generate --uncoveredand--batchfor generating specs in bulk (#191). - Declarative custom validation rules — define project-specific validation rules in config that are checked alongside built-in rules (#190).
- Cross-repo spec content verification —
specsync resolve --verifyfetches and validates referenced specs from remote repositories, ensuring cross-project refs point to real, valid content (#159, #195). - MCP resource support — agents can browse the spec tree via 5 new MCP resources (
specsync:///specs,specsync:///specs/{module}, etc.) without knowing file paths (#194).
- Requirements convention docs — clarified that requirements belong in companion
requirements.mdfiles, not inline in specs (#163, #193).
3.7.0 - 2026-04-10
--no-cacheflag — discoverable alias for--forcethat skips the hash cache (#178).- Cache location hint — when specs are skipped due to caching, the path to
.specsync/hashes.jsonis printed so users know where the cache lives (#178).
- Absolute paths in error messages — "No spec files found" now shows the full resolved path, making it immediately clear if you're in the wrong directory (#177).
- Clearer help text for spec filters —
checkandscorehelp now documents all four matching modes: module name, filename stem, relative path, and absolute path (#179).
--jsonoutput forscore— already supported via the global--json/--format jsonflags since v3.5.0 (#172).
3.6.2 - 2026-04-09
specsync diffin PR context — auto-detectsGITHUB_BASE_REFin GitHub Actions so diff compares against the PR base branch instead ofHEAD(the merge commit), which previously always reported "No files changed" (#180).
- Strict spec enforcement — spec-sync now dogfoods its own
--enforcement-mode=strictin CI, catching spec drift in the tool itself (#182). - 100% spec file coverage — added specs for all 62 source files (26 new spec modules), up from 58% (#183).
3.6.1 - 2026-04-08
specsync newfrontmatter formatting —files:anddb_tables:fields no longer merge onto one line when source files are auto-detected (#174).- Empty dependency graph hint —
specsync deps --mermaidand--dotnow print a helpful message when nodepends_onrelationships exist, instead of rendering only disconnected nodes (#174).
3.6.0 - 2026-04-08
- Individual spec path filtering —
specsync checkandspecsync scorenow accept spec file paths or module names as positional arguments, allowing validation/scoring of specific specs instead of the entire project (#170). - Dependency graph visualization —
specsync deps --mermaidandspecsync deps --dotoutput the dependency graph as Mermaid flowchart or Graphviz DOT diagrams for documentation and debugging (#152). specsync newcommand — quick-create a minimal spec with auto-detected source files and pre-populated exports. Use--fullto also generate companion files (tasks.md, context.md, requirements.md) (#151).
3.5.0 - 2026-04-08
- Stub/placeholder detection — sections containing only "TBD", "N/A", "TODO", "Coming soon", or similar placeholders are now flagged as warnings and no longer inflate quality scores (#162).
- Source-attributed export warnings — undocumented export warnings now show which source file the export comes from, making them actionable in large codebases (#165).
- Requirements companion validation — warns when specs contain inline requirements sections (should be in
requirements.md) and when companion files are missing (#163). - Score diagnostics —
specsync scorenow shows per-category breakdowns (completeness, structure, cross-references) with actionable improvement suggestions (#167).
- Header matching flexibility — fuzzy matching for common header variations like "Public API" → "Exports", "Tech Stack" → "Dependencies", reducing false negatives (#166).
- Frontmatter parser edge cases — correctly handles tabs, trailing whitespace, and inline YAML comments in spec frontmatter (#161).
--fixheader renaming — near-miss headers are now renamed in-place instead of duplicating the section (#164).
3.4.1 - 2026-04-07
- Added 6 missing
depends_onentries to CLI and validator specs, resolving allspecsync depswarnings.
3.4.0 - 2026-04-07
specsync scaffoldcommand — enhanced module scaffolding with auto-detected source files, custom template directories, and automatic registry registration (#138).specsync depscommand — cross-module dependency graph validation detecting cycles, missing deps, and undeclared imports (#139).specsync commentcommand — post spec-sync check summaries as actionable PR comments with spec links, or print for piping (#140).specsync changelogcommand — generate changelogs of spec changes between two git refs (#141).specsync reportcommand — per-module coverage report with stale and incomplete detection.- Graduated enforcement mode — new
--enforcement-modeflag with three levels:warn(default),enforce-new(errors only for new specs), andstrict(all warnings are errors) (#134). - External importers —
specsync importsupports GitHub Issues, Jira, and Confluence as spec sources (#123). - Interactive wizard —
specsync wizardfor step-by-step guided spec creation (#122). - 167+ new unit tests across config, parser, validator, generator, and export modules.
- 100% spec coverage — resolved 9 undocumented export warnings and added 3 missing specs.
- Community scaffolding — CONTRIBUTING.md, CODE_OF_CONDUCT.md, issue/PR templates.
- Standalone workflow guide and onboarding documentation.
3.1.0 - 2026-03-30
requirements.mdcompanion file — a new per-module companion file scaffolded alongsidetasks.mdandcontext.mdbyspecsync generateandspecsync add-spec. The template includes User Stories, Acceptance Criteria, Constraints, and Out of Scope sections. This keeps the spec focused as a technical contract (authored by Dev/Architect) while giving Product/Design their own space for user stories and acceptance criteria.- AGENTS.md hook target —
specsync hooks install --agentsinstalls spec-sync instructions intoAGENTS.md, the emerging standard for multi-agent instruction files.
3.0.0 - 2026-03-30
- VS Code extension — first-class editor integration for SpecSync, published on the VS Code Marketplace as
corvidlabs.specsync.- Inline diagnostics — errors and warnings from
specsync check --jsonmapped directly to spec files with proper severity levels. - CodeLens quality scores — spec quality scores (0–100 with letter grades) displayed inline above spec files via
specsync score. - Coverage webview — rich HTML report showing file and LOC coverage with VS Code theme-aware styling.
- Scoring webview — detailed quality breakdown per spec with improvement suggestions.
- Five commands — Validate Specs, Show Coverage, Score Quality, Generate Missing Specs, Initialize Config — all accessible from the Command Palette.
- Status bar indicator — persistent status bar item showing pass/fail/error/syncing state with color coding.
- Validate-on-save — debounced (500ms) automatic validation when spec or source files are saved.
- Configurable settings —
specsync.binaryPath,specsync.validateOnSave,specsync.showInlineScores. - Activates automatically in workspaces containing
specsync.json,.specsync.toml, or aspecs/directory.
- Inline diagnostics — errors and warnings from
- Major version bump to v3. GitHub Action users should update to
CorvidLabs/spec-sync@v3.
2.5.0 - 2026-03-30
- Schema column validation — SpecSync now parses SQL migrations (CREATE TABLE, ALTER TABLE ADD COLUMN) and validates documented columns in spec
### Schemasections against the actual database schema. Catches phantom columns (documented but missing from schema), undocumented columns (in schema but not in spec), and column type mismatches. Opt-in viaschema_dirinspecsync.json. - Destructive DDL support — migration parser correctly handles DROP TABLE, ALTER TABLE DROP COLUMN, ALTER TABLE RENAME TO, and ALTER TABLE RENAME COLUMN, ensuring the schema map accurately reflects state after all migrations replay in order.
- Multi-language migration files — schema extraction now supports 16 file types (SQL, TypeScript, JavaScript, Python, Ruby, Go, Rust, PHP, Swift, Kotlin, Java, C#, Dart, and more), not just
.sql. - PHP language support — full export extraction for PHP: classes, interfaces, traits, enums, public functions/constants, with visibility filtering and magic method exclusion.
- Ruby language support — full export extraction for Ruby: classes, modules, public methods with visibility toggle tracking,
attr_accessor/attr_reader/attr_writer, constants, and=begin/=endcomment handling. - Expanded export parser test coverage for Go, Python, Java, C#, and Dart.
- Achieved 100% spec coverage across all modules.
2.4.0 - 2026-03-28
- Export validation uses allowlist — only
### Exported ...subsections under## Public APInow trigger export validation. Non-export subsections (### API Endpoints,### Route Handlers,### Component API,### Configuration, etc.) are treated as informational and skipped. This fixes false errors when specs document private route handlers, component signals, service methods, or infrastructure concepts alongside validated exports (#60).
2.3.3 - 2026-03-28
- Companion files populated — all 28 companion files (
context.mdandtasks.md) across 14 modules now contain real content: architectural decisions, key files, implementation status, open tasks, known gaps, and completed work (#58).
2.3.2 - 2026-03-28
action.ymlYAML parse fix — quoted${{ github.token }}default value to prevent YAML stream parse errors when external repos use the action (#56).spec:checkin CI — added spec validation to the CI pipeline so spec drift is caught automatically (#54).
manifest.spec.md— spec for the manifest module, achieving 100% file coverage across all 23 source files (#55).- Config spec update — added
manifestto config'sdepends_onfor accurate cross-module references.
2.3.1 - 2026-03-28
specsync-registry.toml— published module registry for cross-project spec resolution. Other projects can now verify refs toCorvidLabs/spec-sync@<module>viaresolve --remote.
- New docs page: Cross-Project References — dedicated guide covering
owner/repo@modulesyntax, registry publishing, remote verification, and CI usage. - CLI Reference — added missing commands:
add-spec,init-registry,resolve,hooks. Added--formatflag documentation. - Spec Format — documented cross-project ref syntax in
depends_onfield. - Quick Start — added
add-spec,resolve,init-registry, andhookscommands.
2.3.0 - 2026-03-28
--format markdownoutput —checkanddiffcommands now accept--format markdownto produce clean, human-readable Markdown tables instead of plain text or JSON. Useful for pasting into PRs, docs, or chat.- SHA256 release checksums — release workflow now generates and publishes SHA256 checksums for all release binaries, improving supply chain verification.
- Rolled up all v2.2.1 changes (manifest-aware modules, export granularity, language templates, robustness fixes) into this release.
2.2.1 - 2026-03-25 (unreleased — rolled into 2.3.0)
- Manifest-aware module detection — parses
Package.swift,Cargo.toml,build.gradle.kts,package.json,pubspec.yaml,go.mod, andpyproject.tomlto auto-discover targets and source paths instead of just scanning directories. - Export granularity control —
"exportLevel": "type"inspecsync.jsonlimits exports to top-level type declarations (class/struct/enum/protocol) instead of listing every member. - Configurable module definitions —
"modules"section inspecsync.jsonlets you define module groupings with explicit file lists. - Language-specific spec templates —
generateand--fixproduce Swift, Rust, Kotlin/Java, Go, and Python templates with appropriate section headers and table columns. - AI context boundary awareness — generation prompt instructs the provider to only document symbols from the module's own files, not imported dependencies.
- Test file detection — expanded Swift patterns (Spec, Mock, Stub, Fake), added Kotlin/Java/C# patterns, and detect well-known test directories (
Tests/,__tests__/,spec/,mocks/). - Check command no longer hangs on empty specs — returns clean JSON/exit 0 when
--fixis used with no spec files. - Exit code 101 panic → friendly error — wraps main in
catch_unwind, converts panics to actionable error messages with bug report link.
2.2.0 - 2026-03-25
--fixflag forcheckcommand — automatically adds undocumented exports as stub rows in the spec's Public API table. Creates a## Public APIsection if one doesn't exist. Works with--jsonfor structured output of applied fixes. Turns spec maintenance from manual bookkeeping into a one-command operation.diffcommand — compares current code exports against a git ref (default:HEAD) to show what's been added or removed since a given commit. Human-readable by default,--jsonfor structured output. Essential for code review and CI drift detection.- Wildcard re-export resolution — TypeScript/JS barrel files using
export * from './module'now have their re-exported symbols resolved and validated. Namespace re-exports (export * as Ns from) are detected as a single namespace export. Resolution is depth-limited to one level to prevent infinite recursion.
- Spec quality scoring now accounts for
--fixgenerated stubs (scored lower than hand-written descriptions). - Expanded integration test suite with 12 new tests covering
--fix,diff, and wildcard re-exports (74 total integration tests, 131 total). - Updated
cli.spec.mdandexports.spec.mdto 100% coverage for all new features.
2.1.1 - 2026-03-25
- Rust export extractor — strip raw strings, char literals with
", and multi-line string literals before scanning forpubdeclarations. Fixes false positives from test data insider#"..."#blocks, and false negatives where'"'char literals confused the string regex into consuming subsequent source code. - CLI spec — added spec coverage for
main.rs(CLI entry point). - Exports spec — expanded to 100% file coverage across all language extractors.
2.1.0 - 2026-03-24
specsync hookscommand — manage agent instruction files and git hooks for spec awareness. Supports Claude Code (CLAUDE.md), Cursor (.cursor/rules), GitHub Copilot (.github/copilot-instructions.md), pre-commit hooks, and Claude Code hooks. Subcommands:install,uninstall,status.
- Updated
rustls-webpkifrom 0.103.9 → 0.103.10 to fix RUSTSEC-2025-0016 (CRL Distribution Point matching logic).
- Spec scoring now distinguishes placeholder TODOs from descriptive references (#37).
2.0.0 - 2026-03-20
--aiflag removed — replaced by--provider auto|claude|openai|ollama. Usespecsync generate --provider autofor auto-detection, or--provider claudefor a specific provider. Plainspecsync generateremains template-only.
- Cross-project spec references — specs can now reference modules in other repos via
cross_project_refsin config. Validated locally withspecsync check, verified remotely withspecsync resolve --remote. - Companion files — associate non-code files (migrations, configs, protos) with spec modules via
companion_filesconfig. - Spec registry —
specsync registryreadsspecsync-registry.tomlto list and discover specs across a project. specsync resolve— new command to resolve cross-project references.--remoteflag opt-in fetches registry files from GitHub repos.- Project scope definition —
SCOPE.mdexplicitly defines what spec-sync does and doesn't do.
- Unified AI provider selection under
--providerflag with auto-detection support. - Remote ref verification groups HTTP requests by repo to minimize fetches.
- Updated all docs, examples, and tests for the new CLI surface.
1.3.0 - 2026-03-19
- MCP server mode — run
specsync mcpto expose spec-sync as a Model Context Protocol server, enabling any AI agent (Claude Code, Cursor, Windsurf, etc.) to validate specs, check coverage, and generate specs via tool calls. - Direct API support for Anthropic and OpenAI —
specsync generate --provider anthropic|openaican call Claude or GPT APIs directly, no CLI wrapper needed. SetANTHROPIC_API_KEYorOPENAI_API_KEY. - Auto-detect source directories — spec-sync now automatically discovers
src/,lib/,app/, and other common source directories, so it works out-of-the-box on any project without manual config. - Spec quality scoring —
specsync scorerates spec files on completeness, API coverage, section depth, and staleness, outputting a 0–100 quality score with actionable improvement suggestions. - TOML configuration —
specsync.tomlis now supported alongsidespecsync.json. Seeexamples/specsync.toml. - VS Code extension scaffold —
vscode-extension/directory with diagnostics, commands, and CodeLens integration (ready for Marketplace packaging). - Actionable error messages — all errors and warnings now include fix suggestions.
- Expanded integration test suite (+884 lines).
- Resolved clippy and fmt CI failures on main (#29).
1.2.0 - 2026-03-19
specsync generate --ai— AI-powered spec generation. Reads source code, sends it to an LLM, and generates specs with real content (Purpose, Public API tables, Invariants, Error Cases) instead of template stubs. Configurable viaaiCommandandaiTimeoutinspecsync.json, orSPECSYNC_AI_COMMANDenv var. Defaults to Claude CLI, works with any LLM that reads stdin and writes stdout.- LOC coverage tracking —
specsync coveragenow reports lines-of-code coverage alongside file coverage. JSON output includesloc_coverage,loc_covered,loc_total, anduncovered_fileswith per-file LOC counts sorted by size. - Flat file module detection —
generateandcoveragenow detect single-file modules (e.g.,src/config.rs) in addition to subdirectory-based modules. aiCommandandaiTimeoutconfig options inspecsync.json.
- Rewrote README for density — every line carries new information, no filler.
- Documented
generate --aiworkflow, AI command configuration, and LOC coverage in README and docs site. - Streamlined docs site pages to complement rather than duplicate the README.
- Updated CHANGELOG with previously missing 1.1.1 and 1.1.2 entries.
1.1.2 - 2026-03-19
- Resolved merge conflict markers in README.md.
- Removed overly broad permissions from CI workflow (code scanning alert fix).
- Bumped
Cargo.tomlversion to match the release tag.
1.1.1 - 2026-03-18
- Corrected GitHub Marketplace link after action rename.
- Renamed action from "SpecSync Check" to "SpecSync" for Marketplace consistency.
- Updated all marketplace URLs to reflect the new action name.
- GitHub Marketplace badge and link in README.
1.1.0 - 2026-03-18
- Reusable GitHub Action (
CorvidLabs/spec-sync@v1) — auto-downloads the correct platform binary and runs specsync check in CI. Supportsstrict,require-coverage,root, andversioninputs. watchsubcommand — live spec validation that re-runs on file changes.- Comprehensive integration test suite — end-to-end tests using assert_cmd.
- Updated crates.io metadata (readme, homepage fields).
1.0.0 - 2026-03-18
- Complete rewrite from TypeScript to Rust for language-agnostic spec validation with significantly improved performance and a single static binary.
- 9 language backends for export extraction: TypeScript/JavaScript, Rust, Go, Python, Swift, Kotlin, Java, C#, and Dart.
checkcommand — validates all spec files against source code, checking frontmatter, file existence, required sections, API surface coverage, DB table references, and dependency specs.coveragecommand — reports file and module coverage, listing unspecced files and modules.generatecommand — scaffolds spec files for unspecced modules using a customizable template (_template.spec.md).initcommand — creates a defaultspecsync.jsonconfiguration file.--jsonflag — global CLI flag that outputs results as structured JSON instead of colored terminal text, for CI/CD and tooling integration.--strictflag — treats warnings as errors for CI enforcement.--require-coverage Nflag — fails if file coverage percent is below the given threshold.--rootflag — overrides the project root directory.- CI/CD workflows with GitHub Actions for testing, linting, and multi-platform release binary publishing (Linux x86_64/aarch64, macOS x86_64/aarch64, Windows x86_64).
- Configurable required sections, exclude patterns, source extensions,
and schema table validation via
specsync.json. - YAML frontmatter parsing without external YAML dependencies.
- API surface validation: detects undocumented exports (warnings) and phantom documentation for non-existent exports (errors).
- Dependency spec cross-referencing and Consumed By section validation.