Releases: nold-ai/specfact-cli
v0.22.1 - Terminal Output Auto-Detection
Release v0.22.1
Terminal Output Auto-Detection
This release introduces automatic terminal capability detection and adaptive output formatting for optimal user experience across different terminal environments.
Key Features
- Automatic Terminal Detection: Detects terminal capabilities (colors, animations, progress bars) and adapts output accordingly
- Three Terminal Modes:
- GRAPHICAL: Full Rich output with animations and colors (interactive terminals)
- BASIC: Plain text progress updates (embedded terminals, CI/CD)
- MINIMAL: Minimal output (test mode)
- Zero Configuration: Works out of the box - no manual setup required
- CI/CD Optimized: Automatically uses plain text output in CI/CD for better log readability
- Standard Compliance: Respects
NO_COLORstandard for color disabling
Bridge Probe Priority Fix
- Layout-specific adapters (SpecKit, OpenSpec) are now tried before generic adapters (GitHub)
- Prevents false positives when repositories have both GitHub remotes and specific tool layouts
Documentation
- Comprehensive terminal output troubleshooting guide
- Testing guide for terminal output modes
- Updated UX features, IDE integration, and use cases documentation
Technical Details
- New
TerminalCapabilitiesdataclass and detection functions get_configured_console()for cached, configured Rich Console instancesget_progress_config()for adaptive Progress column configurations- All CLI commands updated to use adaptive terminal output
See CHANGELOG.md for complete details.
v0.22.0
Breaking Changes (0.22.0)
-
Bridge Command Removal: Removed
specfact bridgecommand group entirely- Constitution Commands Moved:
specfact bridge constitution *commands moved tospecfact sdd constitution * - Migration Required: Update all scripts and workflows:
specfact bridge constitution bootstrap→specfact sdd constitution bootstrapspecfact bridge constitution enrich→specfact sdd constitution enrichspecfact bridge constitution validate→specfact sdd constitution validate
- Rationale: Bridge adapters are internal connectors, not user-facing commands. Constitution management belongs under SDD (Spec-Driven Development) commands.
- Constitution Commands Moved:
-
SpecKitSync Class Removal: Removed
SpecKitSyncclass andspeckit_sync.pymodule- Replacement: Use
SpecKitAdapterviaAdapterRegistryfor all Spec-Kit operations - Breaking: Code that directly imports or instantiates
SpecKitSyncwill fail - Migration: Use
AdapterRegistry.get_adapter("speckit")to getSpecKitAdapterinstance - Rationale: Eliminates deprecated code and enforces universal abstraction layer pattern
- Replacement: Use
Added (0.22.0)
-
OpenSpec Bridge Adapter (Phase 1 - Read-Only Sync): Plugin-based OpenSpec integration for importing specifications and change tracking
- OpenSpec Adapter:
OpenSpecAdapterimplementsBridgeAdapterinterface for read-only sync from OpenSpec to SpecFact - OpenSpec Parser:
OpenSpecParserfor parsing OpenSpec markdown artifacts (project.md, specs/, changes/) - Cross-Repository Support:
external_base_pathconfiguration for OpenSpec in different repositories - Change Tracking Import: Loads change proposals and feature deltas from
openspec/changes/directory - Source Tracking: Stores OpenSpec paths and metadata in
source_tracking.source_metadatafield - Alignment Report:
generate_alignment_report()method to compare SpecFact features vs OpenSpec specs - CLI Integration:
specfact sync bridge --adapter openspec --mode read-onlycommand with--external-base-pathoption - Adapter Registry: OpenSpec adapter registered in
AdapterRegistryfor plugin-based architecture - Bridge Configuration:
BridgeConfig.preset_openspec()method with OpenSpec artifact mappings - Universal Abstraction Layer: Refactored
BridgeProbeandBridgeSyncto useAdapterRegistry(no hard-coded adapter checks) - BridgeAdapter Interface: Extended with
get_capabilities()method for adapter capability detection
- OpenSpec Adapter:
-
SpecKitAdapter: New
SpecKitAdapterclass implementingBridgeAdapterinterface- Bidirectional Sync: Full bidirectional sync support via adapter registry
- Public Helper Methods:
discover_features(),detect_changes(),detect_conflicts(),export_bundle() - Adapter Registry Integration: Registered in
AdapterRegistryfor plugin-based architecture - Contract Decorators: All methods have
@beartype,@require, and@ensuredecorators
-
Spec-Kit
.specify/specs/Detection: Added support for canonical Spec-Kit layout- Canonical Layout Support: Added
BridgeConfig.preset_speckit_specify()for.specify/specs/structure (recommended by Spec-Kit) - Priority Detection: Detection now prioritizes
.specify/specs/>docs/specs/>specs/(root) - Scanner Updates:
SpecKitScannernow checks.specify/specs/first before falling back to root-levelspecs/ - Backward Compatibility: Maintains support for root-level
specs/anddocs/specs/layouts - Rationale: According to Spec-Kit documentation,
.specify/specs/is the canonical location; root-levelspecs/may be inconsistent
- Canonical Layout Support: Added
Changed (0.22.0)
-
Bridge Probe Refactoring: Removed hard-coded Spec-Kit detection, now uses
AdapterRegistryfor universal adapter support -
Bridge Sync Refactoring: Removed hard-coded adapter checks, now uses
AdapterRegistry.get_adapter()for all adapters -
Source Tracking Model: Extended
SourceTrackingwithtoolandsource_metadatafields for tool-specific metadata storage -
Bridge Configuration: Added
external_base_pathfield toBridgeConfigfor cross-repository integrations -
Adapter Type Enum: Added
AdapterType.OPENSPECenum value -
Sync Command Refactoring: Refactored
specfact sync bridgeto use adapter registry pattern- Removed Hard-Coded Checks: All
if adapter_type == AdapterType.SPECKIT:checks removed - Adapter-Agnostic: Sync command now works with any registered adapter via
AdapterRegistry - Capability-Based: Sync mode detection now uses
adapter.get_capabilities().supported_sync_modes - Universal Pattern: All adapters accessed via
AdapterRegistry.get_adapter()- no hard-coded checks
- Removed Hard-Coded Checks: All
-
Import Command Refactoring: Refactored
specfact import from-bridgeto use adapter registry- Removed Hard-Coded Logic: All Spec-Kit-specific instantiation removed
- Adapter Registry: Uses
AdapterRegistryfor all adapter operations
-
Bridge Probe Refactoring: Removed Spec-Kit-specific validation suggestions
- Generic Capabilities: Uses adapter capabilities for validation suggestions
-
Bridge Sync Refactoring: Removed hard-coded OpenSpec check in alignment report
- Adapter-Agnostic: Alignment report generation is now adapter-agnostic
-
Command References: Updated all help text and error messages
- Constitution Commands: All references updated from
specfact bridge constitutiontospecfact sdd constitution - Probe Command: Updated references from
specfact bridge probetospecfact sync bridge probe
- Constitution Commands: All references updated from
-
Schema Version Management: Improved schema version handling for new bundles
- Latest Schema Reference: Added
get_latest_schema_version()function for semantic clarity when creating new bundles - Schema Constant: Added
LATEST_SCHEMA_VERSIONalias forCURRENT_SCHEMA_VERSION(currently "1.1") - Bundle Creation: Updated
import_cmd.pyandsync.pyto useget_latest_schema_version()instead of hardcoded "1.0" - Future-Proofing: New bundles now automatically use the latest schema version without code changes
- Latest Schema Reference: Added
Removed (0.22.0)
-
SpecKitSync Class: Deleted
src/specfact_cli/sync/speckit_sync.pyfile- SyncResult Dataclass: Removed
speckit_sync.SyncResult(note:BridgeSync.SyncResultremains) - All References: Removed all imports and usages of
SpecKitSyncthroughout codebase
- SyncResult Dataclass: Removed
-
Bridge Command: Deleted
src/specfact_cli/commands/bridge.pyfile- Command Registration: Removed bridge command registration from
cli.py
- Command Registration: Removed bridge command registration from
-
Deprecated Commands: Removed
specfact implementandspecfact generate taskscommands- Rationale: SpecFact CLI focuses on analysis and enforcement, not code generation. Use Spec-Kit, OpenSpec, or other SDD tools for plan → feature → task workflows
- Migration: Use
specfact generate fix-promptandspecfact generate test-promptfor AI IDE integration instead
Documentation (0.22.0)
-
README Enhancements: Comprehensive updates to main README and sub-level README files
- Added "How SpecFact Compares" Section: Prominent comparison table (similar to OpenSpec's approach) showing SpecFact vs. Spec-Kit, OpenSpec, and Traditional Testing
- Enhanced Value Proposition: Added "Why SpecFact?" section explaining brownfield-first analysis workflow and key outcomes
- Improved Structure: Reorganized README for better clarity and intuitive flow for new users
- Updated Version References: Changed all "Version 0.21.1" references to "Version 0.22.0" with current release notes
- Copyright Updates: Updated copyright years from "2025" to "2025-2026" in all README files
- Link Verification: Fixed broken internal links and verified all documentation links are valid
-
New Tutorial: Created comprehensive beginner-friendly tutorial
docs/getting-started/tutorial-openspec-speckit.md- Complete Step-by-Step Guide: 18 detailed steps covering both OpenSpec and Spec-Kit integration paths
- Prerequisites Section: Clear installation and setup instructions
- Path A (OpenSpec): 9 steps covering change proposal creation, GitHub Issues export, progress tracking, and sync
- Path B (Spec-Kit): 9 steps covering import, bidirectional sync, contract enforcement, and drift detection
- Key Concepts: Bridge adapters, sync modes, and troubleshooting sections
- Verified Commands: All commands tested and verified with accurate syntax and expected outputs
- Command Syntax Fixes: Corrected command usage (bundle as positional vs option,
--repousage, etc.)
-
Comparison Guides Updates: Enhanced comparison documentation
- speckit-comparison.md: Added adapter registry pattern notes and FAQ section about working with other specification tools
- competitive-analysis.md: Added "Building on Specification Tools" section with OpenSpec, Spec-Kit, and GitHub Issues adapters
- openspec-journey.md: Updated status from "PLANNED" to "✅ IMPLEMENTED" for OpenSpec bridge adapter (v0.22.0+)
-
Command Reference Updates: Updated
docs/reference/commands.md- Removed Commands: Marked
implementandgenerate tasksas "REMOVED in v0.22.0" with migration guidance - Constitution Commands: Updated all references from
specfact bridge constitutiontospecfact sdd constitution - Bridge Adapters: Added clear examples for
sync bridge --adapter openspecand adapter registry pattern
- Removed Commands: Marked
-
Migration Guides: Updated migration documentation
- migration-0.16-to-0.19.md: Updated to reflect
implement tasksandgenerate taskscommands removal - Troubleshooting Guide: Updated all
specfact constitutioncommands tospecfact sdd constitution
- migration-0.16-to-0.19.md: Updated to reflect
-
Architecture Documentation: Updated
docs/reference/architecture.md- **Ver...
v0.21.1 - Change Tracking Data Model & Code Change Tracking
Change Tracking Data Model (v1.1 Schema)
Tool-agnostic change tracking models for delta spec tracking (ADDED/MODIFIED/REMOVED)
- Change Models:
ChangeType,FeatureDelta,ChangeProposal,ChangeTracking,ChangeArchivemodels - Bundle Extensions:
BundleManifestandProjectBundleextended with optionalchange_trackingandchange_archivefields (schema v1.1) - Helper Methods:
ProjectBundle.get_active_changes()andget_feature_deltas()for querying change proposals - Schema Versioning: Support for schema v1.1 with backward compatibility for v1.0 bundles
- BridgeAdapter Interface: Extended
BridgeAdapterinterface withload_change_tracking(),save_change_tracking(),load_change_proposal(),save_change_proposal()methods - Cross-Repository Support: Adapter methods support
external_base_pathfor cross-repository configurations - Tool-Agnostic Design: All tool-specific metadata stored in
source_tracking, ensuring models work with any tool (OpenSpec, Linear, Jira, etc.)
Code Change Tracking and Progress Comments
Detect code changes and add progress comments to GitHub issues
- Code Change Detection:
detect_code_changes()utility to detect git commits related to change proposals - Progress Comment Generation:
format_progress_comment()to format implementation progress details (commits, files changed, milestones) - Progress Comment Sanitization: Sanitization support for public repositories - removes sensitive information from commit messages, file paths, author emails, and timestamps
- GitHubAdapter Extension:
_add_progress_comment()method andcode_change_progressartifact key support with sanitization flag - BridgeSync Integration: Code change tracking integrated into
export_change_proposals_to_devops()with duplicate detection and automatic sanitization based on repository setup - CLI Flags:
--track-code-changesand--add-progress-commentflags forspecfact sync bridgecommand - Source Tracking Metadata: Progress comments tracked in
source_metadata.progress_commentswith comment hash deduplication - Cross-Repository Support: Code change detection works across repositories with proper issue targeting and sanitization
Backward Compatibility
All change tracking fields are optional - existing v1.0 bundles continue to work without modification.
Foundation for OpenSpec
This change provides the data model foundation for OpenSpec bridge adapter implementation (Phase 2).
See CHANGELOG.md for full details.
v0.21.0 - DevOps Backlog Tracking and OpenSpec Integration
[0.21.0] - 2025-12-29
Added
- DevOps Backlog Tracking Integration: Export OpenSpec change proposals to DevOps backlog tools (GitHub Issues, ADO, Linear, Jira)
- GitHub Adapter:
GitHubAdapterimplementsBridgeAdapterinterface for creating/updating GitHub Issues from OpenSpec change proposals - Export-Only Sync Mode:
specfact sync bridge --adapter github --mode export-onlycommand for syncing change proposals to DevOps tools - Status Synchronization: Automatic issue status updates when change proposals are applied, deprecated, or discarded
- Source Tracking: Issue IDs automatically saved back to OpenSpec proposal files in "## Source Tracking" section
- GitHub CLI Integration:
--use-gh-clioption to automatically derive GitHub token fromgh auth token(useful in enterprise environments) - Content Sanitization:
ContentSanitizerutility to remove competitive analysis, internal strategy, and implementation details from proposals for public issues - Conditional Sanitization: Auto-detection of sanitization need based on repository setup (different repos → sanitize, same repo → no sanitization)
- Sanitization CLI Options:
--sanitize/--no-sanitize,--target-repo,--interactiveoptions for content sanitization control - Slash Command:
/specfact.sync-backloginteractive command for AI-assisted backlog synchronization with content sanitization - Cross-Repository Support: Full support for managing OpenSpec proposals in separate repository from codebase
- Architecture: Extensible bridge adapter pattern supports future tools (ADO, Linear, Jira) via same interface
- Proposal Filtering: Per-proposal filtering based on sanitization status (public repos only sync "applied" proposals, internal repos sync all active proposals)
- GitHub Adapter:
Changed
- Bridge Configuration: Extended
BridgeConfigwithpreset_github()for DevOps backlog tracking - Adapter Registry: Added
GitHubAdapterto adapter registry for plugin-based DevOps tool integration - Bridge Sync: Extended
BridgeSyncwithexport_change_proposals_to_devops()method for export-only sync mode - Proposal Filtering Logic: Enhanced filtering to check each proposal individually based on sanitization status
- Per-proposal filtering ensures proposals are only synced when appropriate for target repository type
- Clear warning messages when proposals are filtered out (shows count and reason)
- Filtering happens before processing, improving performance and clarity
- Documentation Updates: Updated command reference and slash command prompt to reflect new filtering behavior
- Added "Proposal Filtering (export-only mode)" section to
docs/reference/commands.md - Updated
resources/prompts/specfact.sync-backlog.mdwith filtering behavior and warning examples - Clarified that public repos only sync archived/completed proposals
- Added "Proposal Filtering (export-only mode)" section to
Fixed
-
Proposal Filtering for Public Repositories: Fixed issue where proposals with "proposed" status were being synced to public repositories
- Public repos (
--sanitize): Now only syncs proposals with status"applied"(archived/completed), regardless of existing source tracking entries - Internal repos (
--no-sanitize): Syncs all active proposals (proposed, in-progress, applied, deprecated, discarded) - Prevents premature exposure of work-in-progress proposals to public repositories
- Filtering warnings displayed when proposals are filtered out based on status
- Public repos (
-
Source Tracking Metadata Updates: Fixed issue where
sanitizedflag wasn't updated when syncing to existing issues- Source tracking metadata (including
sanitizedflag) now always updated during sync operations - Metadata updates tracked as sync operations even when issue status hasn't changed
- Ensures accurate tracking of which issues were sanitized vs exported directly
- Source tracking metadata (including
-
Duplicate Source Tracking Blocks: Fixed regex pattern in
_save_openspec_change_proposal()to prevent duplicate "Source Tracking" sections- Updated regex to correctly match and replace entire "Source Tracking" section including
---separator - Prevents duplicate blocks when updating source tracking metadata
- Updated regex to correctly match and replace entire "Source Tracking" section including
-
Variable Redeclaration Errors: Fixed
reportRedeclarationerrors inbridge_sync.py- Renamed
source_tracking_listtoarchive_source_tracking_listin archived changes processing block - Renamed
source_tracking_finaltoarchive_source_tracking_finalto avoid name conflicts
- Renamed
-
GitHub Adapter Source Tracking Handling: Fixed
'list' object has no attribute 'get'error in_update_issue_status()- Normalized
source_trackingto list format before accessing dictionary methods - Handles both single dict and list of dicts formats for backward compatibility
- Normalized
Improved
- CLI Validation: Added comprehensive validation of sync bridge command with
hatch run- Verified filtering works correctly for both public and internal repositories
- Confirmed warning messages display appropriately when proposals are filtered
- Validated that only "applied" proposals sync to public repos while all active proposals sync to internal repos
Full Changelog: v0.20.6...v0.21.0
v0.20.6 - PlanBundle Schema Hotpatch
Fixed (0.20.6)
- PlanBundle Schema Hotpatch: Automatic fix for incorrect schema definitions in OpenAPI contracts
- Root cause: Contract extraction/generation incorrectly inferred
Product.themesasarray of objectsinstead ofarray of strings - Hotpatch implementation: Added automatic schema correction in
_resolve_schema_refs()function - Detection: Hotpatch detects and fixes incorrect PlanBundle schemas when
resolve_schema_refs_in_contracts()is called - Schema change detection: Enhanced
resolve_schema_refs_in_contracts()to detect schema modifications (not just additions) and save fixed contracts - Type safety: Fixed unbound variable error (
original_schemas_str) with proper initialization and guards - Transparency: Fix is automatic and transparent - no user action required when running sidecar workflow
- Root cause: Contract extraction/generation incorrectly inferred
Full Changelog
See CHANGELOG.md for complete release history.
v0.20.5 - Sidecar Template Code Quality Improvements
Fixed
Sidecar Template Code Quality
Fixed formatting and linting issues in sidecar template files:
adapters.py: Removed whitespace from blank line, removed unused imports (HttpRequest,QueryDict), fixed exception chaining withraise ... from Nonecrosshair_django_wrapper.py: Combined nested if statements to reduce complexity (SIM102)populate_contracts.py: Replaced for loop withany()expression for better Pythonic code (SIM110)django_form_extractor.py: Combined nested if statements, fixed indentation issues throughout the filedjango_url_extractor.py: Combined nested if statements, improved code formatting- All files now pass
hatch run formatchecks with no errors - Improves code maintainability and follows Python best practices
v0.20.1
Fixed (0.20.1)
- External Repository Support: Fixed critical issue where
reprocommand only worked on SpecFact CLI's own codebase- Added automatic environment manager detection (hatch, poetry, uv, pip)
- Made all validation tools optional with clear messaging when unavailable
- Added dynamic source directory detection (src/, lib/, or package name from pyproject.toml)
- Commands now work on external repositories without requiring SpecFact CLI adoption
- Enables OSS validation plan execution as designed
generate contracts-applyCommand: Fixed hardcoded paths and environment assumptions- Uses dynamic source directory detection instead of hardcoded
src/paths - Uses environment detection for Python/pytest invocations
- Dynamic test file detection (supports multiple test directory structures)
- Works on external repositories with different project structures
- Uses dynamic source directory detection instead of hardcoded
generate test-promptCommand: Fixed hardcoded source directory detection- Uses dynamic source directory detection instead of hardcoded
src/ - Dynamic test file detection for better external repository support
- Uses dynamic source directory detection instead of hardcoded
Added (0.20.1)
- Environment Manager Detection: New
env_managerutility module for detecting and working with different Python environment managers - Test Directory Detection: New utilities for detecting test directories and finding test files dynamically
- Comprehensive Tests: Added 31 new tests for environment detection, test directory detection, and external repository support
repro setupCommand: New subcommand to automatically configure CrossHair for contract exploration- Automatically generates
[tool.crosshair]configuration inpyproject.toml - Detects source directories and environment managers
- Provides installation guidance for crosshair-tool
- Optional
--install-crosshairflag to attempt automatic installation
- Automatically generates
initCommand Environment Warning: Added warning when no compatible environment manager is detected- Non-blocking warning that provides guidance on supported tools
- Helps users understand best practices for SpecFact CLI integration
- Lists supported environment managers (hatch, poetry, uv, pip) with detection criteria
Improved (0.20.1)
- Documentation: Updated
reprocommand documentation to clarify external repository support and environment requirements- Added
repro setupcommand documentation - Updated all example flows to include CrossHair setup step
- Added "Supported Project Management Tools" section to installation guide
- Added
- Error Messages: Improved messaging when tools are unavailable, providing clear guidance on installation
- Code Quality: All linting/formatting tools in
generate contracts-applynow use environment detection - Test Coverage: Added comprehensive test suite for
repro setupcommand (15 tests) andinitcommand environment warning (5 tests) init --install-depsCommand: Now uses environment manager detection for package installation- Automatically detects and uses hatch, poetry, uv, or pip based on project configuration
- Provides environment-specific installation commands and error guidance
- Shows detected environment manager and command being used
- Adds timeout handling and improved error messages
- Tracks environment manager in telemetry
Notes (0.20.1)
This patch release fixes the critical design issue identified during OSS validation planning. The repro command can now be used to validate external repositories (Requests, Flask, FastAPI, etc.) without requiring those projects to adopt SpecFact CLI.
v0.20.0 LTS - Long-Term Stable Release
[0.20.0] - 2025-12-17
🎉 Long-Term Stable (LTS) Release
v0.20.0 is the Long-Term Stable (LTS) release for the 0.x series. This release marks the stabilization of SpecFact CLI's core analysis and enforcement capabilities, positioning the tool for public promotion and early adopter usage.
0.x Positioning: "Analyze your brownfield code, find gaps, enforce contracts"
1.x Positioning: "All of the above, PLUS AI-assisted code generation with validation"
Added (0.20.0)
- LTS Designation: v0.20.0 marked as Long-Term Stable release
- Comprehensive Documentation: Complete GitHub Pages integration with navigation and styling
- Migration Guide: Updated migration guide from v0.16.x to v0.20.0 LTS
Improved (0.20.0)
- Documentation Site: Enhanced Jekyll-based documentation with left-side navigation
- Code Block Styling: Fixed syntax highlighting for better readability
- User Experience: Improved documentation navigation and accessibility
Breaking Changes (0.20.0)
None - v0.20.0 is fully backward compatible with v0.19.0.
Deprecated (0.20.0)
implement taskscommand remains deprecated (removed in v1.0)- Use
generate fix-promptandgenerate test-promptbridge commands instead
Docs (0.20.0)
- GitHub Pages: Complete Jekyll integration with proper rendering
- Navigation: Left-side navigation sidebar for better UX
- Styling: Fixed CSS issues and improved code block readability
- Migration Guide: Updated guide for v0.16.x → v0.20.0 LTS upgrade path
Notes (0.20.0)
- LTS Support: v0.20.0 will receive bug fixes and security updates until v1.0 GA
- Next Steps: v1.0 development begins after Phase B validation (Ultimate Vision track)
- Stability: All core features (analysis, enforcement, gap detection) are stable and production-ready