specfact-cli 0.21.0__tar.gz → 0.22.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/PKG-INFO +302 -209
- specfact_cli-0.22.0/README.md +455 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/pyproject.toml +1 -1
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/prompts/specfact.sync-backlog.md +64 -6
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/__init__.py +1 -1
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/__init__.py +1 -1
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/adapters/__init__.py +5 -1
- specfact_cli-0.22.0/src/specfact_cli/adapters/base.py +217 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/adapters/github.py +206 -1
- specfact_cli-0.22.0/src/specfact_cli/adapters/openspec.py +805 -0
- specfact_cli-0.22.0/src/specfact_cli/adapters/openspec_parser.py +427 -0
- specfact_cli-0.22.0/src/specfact_cli/adapters/speckit.py +1100 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/code_analyzer.py +8 -1
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/cli.py +3 -15
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/commands/__init__.py +0 -4
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/commands/generate.py +5 -244
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/commands/import_cmd.py +271 -111
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/commands/plan.py +34 -16
- specfact_cli-0.21.0/src/specfact_cli/commands/bridge.py → specfact_cli-0.22.0/src/specfact_cli/commands/sdd.py +140 -23
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/commands/sync.py +528 -176
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/importers/speckit_converter.py +8 -5
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/importers/speckit_scanner.py +24 -5
- specfact_cli-0.22.0/src/specfact_cli/migrations/__init__.py +20 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/migrations/plan_migrator.py +24 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/models/__init__.py +12 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/models/bridge.py +128 -1
- specfact_cli-0.22.0/src/specfact_cli/models/capabilities.py +20 -0
- specfact_cli-0.22.0/src/specfact_cli/models/change.py +118 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/models/project.py +99 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/models/source_tracking.py +8 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/sync/__init__.py +3 -5
- specfact_cli-0.22.0/src/specfact_cli/sync/bridge_probe.py +196 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/sync/bridge_sync.py +353 -164
- specfact_cli-0.22.0/src/specfact_cli/utils/code_change_detector.py +290 -0
- specfact_cli-0.21.0/README.md +0 -362
- specfact_cli-0.21.0/src/specfact_cli/adapters/base.py +0 -105
- specfact_cli-0.21.0/src/specfact_cli/commands/implement.py +0 -417
- specfact_cli-0.21.0/src/specfact_cli/commands/sdd.py +0 -139
- specfact_cli-0.21.0/src/specfact_cli/migrations/__init__.py +0 -10
- specfact_cli-0.21.0/src/specfact_cli/sync/bridge_probe.py +0 -364
- specfact_cli-0.21.0/src/specfact_cli/sync/speckit_sync.py +0 -388
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/.gitignore +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/LICENSE.md +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/mappings/node-async.yaml +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/mappings/python-async.yaml +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/mappings/speckit-default.yaml +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/prompts/shared/cli-enforcement.md +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/prompts/specfact.01-import.md +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/prompts/specfact.02-plan.md +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/prompts/specfact.03-review.md +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/prompts/specfact.04-sdd.md +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/prompts/specfact.05-enforce.md +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/prompts/specfact.06-sync.md +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/prompts/specfact.07-contracts.md +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/prompts/specfact.compare.md +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/prompts/specfact.validate.md +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/schemas/deviation.schema.json +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/schemas/plan.schema.json +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/schemas/protocol.schema.json +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/github-action.yml.j2 +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/persona/architect.md.j2 +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/persona/developer.md.j2 +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/persona/product-owner.md.j2 +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/plan.bundle.yaml.j2 +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/pr-template.md.j2 +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/protocol.yaml.j2 +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/sidecar/README.md +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/sidecar/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/sidecar/adapters.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/sidecar/bindings.yaml +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/sidecar/bindings.yaml.example +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/sidecar/crosshair_django_wrapper.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/sidecar/crosshair_plugin.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/sidecar/django_form_extractor.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/sidecar/django_url_extractor.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/sidecar/generate_harness.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/sidecar/harness_contracts.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/sidecar/populate_contracts.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/sidecar/run_sidecar.sh +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/sidecar/sidecar-init.sh +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/resources/templates/telemetry.yaml.example +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/adapters/registry.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/agents/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/agents/analyze_agent.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/agents/base.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/agents/plan_agent.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/agents/registry.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/agents/sync_agent.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/ambiguity_scanner.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/constitution_evidence_extractor.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/contract_extractor.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/control_flow_analyzer.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/graph_analyzer.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/relationship_mapper.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/requirement_extractor.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/test_pattern_extractor.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/commands/analyze.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/commands/contract_cmd.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/commands/drift.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/commands/enforce.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/commands/init.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/commands/migrate.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/commands/project_cmd.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/commands/repro.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/commands/spec.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/common/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/common/logger_setup.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/common/logging_utils.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/common/text_utils.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/common/utils.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/comparators/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/comparators/plan_comparator.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/enrichers/constitution_enricher.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/enrichers/plan_enricher.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/generators/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/generators/contract_generator.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/generators/openapi_extractor.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/generators/persona_exporter.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/generators/plan_generator.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/generators/protocol_generator.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/generators/report_generator.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/generators/task_generator.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/generators/test_to_openapi.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/generators/workflow_generator.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/importers/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/integrations/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/integrations/specmatic.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/merge/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/merge/resolver.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/models/contract.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/models/deviation.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/models/enforcement.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/models/persona_template.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/models/plan.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/models/protocol.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/models/quality.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/models/sdd.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/models/task.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/modes/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/modes/detector.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/modes/router.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/parsers/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/parsers/persona_importer.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/resources/semgrep/async.yml +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/resources/semgrep/code-quality.yml +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/resources/semgrep/feature-detection.yml +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/runtime.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/sync/bridge_watch.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/sync/change_detector.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/sync/code_to_spec.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/sync/drift_detector.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/sync/repository_sync.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/sync/spec_to_code.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/sync/spec_to_tests.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/sync/watcher.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/sync/watcher_enhanced.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/telemetry.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/templates/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/templates/bridge_templates.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/templates/specification_templates.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/acceptance_criteria.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/bundle_loader.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/console.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/content_sanitizer.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/context_detection.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/enrichment_context.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/enrichment_parser.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/env_manager.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/feature_keys.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/git.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/github_annotations.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/ide_setup.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/incremental_check.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/optional_deps.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/performance.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/progress.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/progressive_disclosure.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/prompts.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/sdd_discovery.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/source_scanner.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/structure.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/structured_io.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/suggestions.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/utils/yaml_utils.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/validators/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/validators/agile_validation.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/validators/cli_first_validator.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/validators/contract_validator.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/validators/fsm.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/validators/repro_checker.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/validators/schema.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/versioning/__init__.py +0 -0
- {specfact_cli-0.21.0 → specfact_cli-0.22.0}/src/specfact_cli/versioning/analyzer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specfact-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.22.0
|
|
4
4
|
Summary: Brownfield-first CLI: Reverse engineer legacy Python → specs → enforced contracts. Automate legacy code documentation and prevent modernization regressions.
|
|
5
5
|
Project-URL: Homepage, https://github.com/nold-ai/specfact-cli
|
|
6
6
|
Project-URL: Repository, https://github.com/nold-ai/specfact-cli.git
|
|
@@ -275,8 +275,10 @@ Description-Content-Type: text/markdown
|
|
|
275
275
|
|
|
276
276
|
# SpecFact CLI
|
|
277
277
|
|
|
278
|
-
> **
|
|
279
|
-
>
|
|
278
|
+
> **Brownfield-first legacy code modernization with runtime contract enforcement.**
|
|
279
|
+
> Analyze existing Python code → Extract specs → Find gaps → Enforce contracts → Prevent regressions
|
|
280
|
+
|
|
281
|
+
**No API keys required. Works offline. Zero vendor lock-in.**
|
|
280
282
|
|
|
281
283
|
[](https://pypi.org/project/specfact-cli/)
|
|
282
284
|
[](https://pypi.org/project/specfact-cli/)
|
|
@@ -285,311 +287,407 @@ Description-Content-Type: text/markdown
|
|
|
285
287
|
|
|
286
288
|
<div align="center">
|
|
287
289
|
|
|
288
|
-
**[🌐
|
|
290
|
+
**[🌐 Website](https://noldai.com)** • **[📚 Documentation](https://nold-ai.github.io/specfact-cli)** • **[💬 Support](mailto:hello@noldai.com)**
|
|
289
291
|
|
|
290
292
|
</div>
|
|
291
293
|
|
|
292
294
|
---
|
|
293
295
|
|
|
294
|
-
##
|
|
295
|
-
|
|
296
|
-
**🎉 v0.21.0** introduces DevOps backlog tracking integration and OpenSpec bridge adapter support, expanding SpecFact's capabilities for team collaboration and specification management.
|
|
297
|
-
|
|
298
|
-
**SpecFact 0.21.0 focuses on what it does best: analyzing legacy code, enforcing contracts, and integrating with modern DevOps workflows.** This release is production-ready and continues to receive regular updates.
|
|
296
|
+
## What is SpecFact?
|
|
299
297
|
|
|
300
|
-
|
|
301
|
-
|------------|--------|-------------|
|
|
302
|
-
| **Code Analysis** | ✅ Stable | Reverse engineer legacy code into documented specs |
|
|
303
|
-
| **Gap Detection** | ✅ Stable | Find missing tests, contracts, and documentation |
|
|
304
|
-
| **Contract Enforcement** | ✅ Stable | Prevent regressions with runtime validation |
|
|
305
|
-
| **API Contract Testing** | ✅ Stable | Validate OpenAPI specs with Specmatic |
|
|
306
|
-
| **AI IDE Bridge** | ✅ Stable | Generate prompts for Cursor, Copilot, Claude |
|
|
307
|
-
| **DevOps Backlog Tracking** | ✅ New | Export OpenSpec change proposals to GitHub Issues, ADO, Linear, Jira |
|
|
308
|
-
| **OpenSpec Integration** | ✅ New | Bridge adapter for OpenSpec change proposals and specifications |
|
|
309
|
-
| **Code Generation** | ⚠️ Deprecated | Coming in v1.0 with AI-assisted workflow |
|
|
298
|
+
**SpecFact CLI analyzes your existing Python code** to automatically extract specifications, find missing tests and contracts, and enforce them to prevent bugs during modernization.
|
|
310
299
|
|
|
311
|
-
**
|
|
300
|
+
**Perfect for:** Teams modernizing legacy Python systems who can't afford production bugs during migration.
|
|
312
301
|
|
|
313
|
-
|
|
314
|
-
# Get AI prompt to fix a gap
|
|
315
|
-
specfact generate fix-prompt GAP-001 --bundle legacy-api
|
|
302
|
+
### Why SpecFact?
|
|
316
303
|
|
|
317
|
-
|
|
318
|
-
specfact generate test-prompt src/auth/login.py
|
|
319
|
-
```
|
|
304
|
+
AI coding assistants are powerful but unpredictable when requirements live in chat history. SpecFact adds a **brownfield-first analysis workflow** that understands existing code, extracts specs automatically, and enforces them as runtime contracts, giving you deterministic, reviewable outputs.
|
|
320
305
|
|
|
321
|
-
|
|
306
|
+
**Key outcomes:**
|
|
322
307
|
|
|
323
|
-
|
|
308
|
+
* **Understand legacy code** in minutes, not weeks (automatic spec extraction)
|
|
309
|
+
* **Find gaps** in tests, contracts, and documentation automatically
|
|
310
|
+
* **Prevent regressions** with runtime contract enforcement during modernization
|
|
311
|
+
* **Works with the tools you already use**: VS Code, Cursor, GitHub Actions, pre-commit hooks
|
|
312
|
+
* **No API keys required** - Works completely offline
|
|
324
313
|
|
|
325
|
-
##
|
|
314
|
+
## How SpecFact Compares (at a glance)
|
|
326
315
|
|
|
327
|
-
|
|
316
|
+
**New to spec-driven development?** Here's how SpecFact compares to other tools:
|
|
328
317
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
318
|
+
| Tool | Best For | SpecFact's Focus |
|
|
319
|
+
|------|----------|------------------|
|
|
320
|
+
| **GitHub Spec-Kit** | Greenfield specs, multi-language, interactive authoring | **Brownfield analysis**, runtime enforcement, formal verification |
|
|
321
|
+
| **OpenSpec** | Specification anchoring, change tracking, cross-repo workflows | **Code analysis**, contract enforcement, DevOps integration |
|
|
322
|
+
| **Traditional Testing** | Manual test writing, code review | **Automated gap detection**, contract-first validation, CI/CD gates |
|
|
332
323
|
|
|
333
|
-
|
|
334
|
-
pip install -U specfact-cli
|
|
335
|
-
```
|
|
324
|
+
**Key Differentiators:**
|
|
336
325
|
|
|
337
|
-
|
|
326
|
+
* ✅ **Brownfield-first** - Reverse engineers existing code (primary use case)
|
|
327
|
+
* ✅ **Runtime enforcement** - Contracts prevent regressions automatically
|
|
328
|
+
* ✅ **Formal verification** - CrossHair symbolic execution (not just LLM suggestions)
|
|
329
|
+
* ✅ **Team collaboration** - Role-based workflows for agile/scrum teams
|
|
330
|
+
* ✅ **Works offline** - No API keys, no cloud, zero vendor lock-in
|
|
338
331
|
|
|
339
|
-
|
|
340
|
-
# Modernizing legacy code? (Recommended)
|
|
341
|
-
specfact import from-code legacy-api --repo .
|
|
332
|
+
**Compared to spec-kit & OpenSpec**: Those shine for brand-new features (0→1) and change tracking. SpecFact also excels when modernizing existing behavior (1→n), especially when you need runtime safety nets.
|
|
342
333
|
|
|
343
|
-
|
|
344
|
-
specfact plan init legacy-api --interactive
|
|
334
|
+
👉 **[See detailed comparison guide](docs/guides/speckit-comparison.md)** - Understand when to use SpecFact, Spec-Kit, OpenSpec, or all together
|
|
345
335
|
|
|
346
|
-
|
|
347
|
-
specfact import from-bridge --repo . --adapter speckit --write
|
|
348
|
-
```
|
|
336
|
+
### The Problem It Solves
|
|
349
337
|
|
|
350
|
-
|
|
338
|
+
* ❌ **Legacy code** with no documentation or outdated specs
|
|
339
|
+
* ❌ **Missing tests** and contracts that should exist
|
|
340
|
+
* ❌ **Regressions** introduced during refactoring/modernization
|
|
341
|
+
* ❌ **No safety net** to catch bugs before production
|
|
351
342
|
|
|
352
|
-
|
|
343
|
+
### The Solution
|
|
353
344
|
|
|
354
|
-
|
|
345
|
+
SpecFact CLI:
|
|
355
346
|
|
|
356
|
-
|
|
347
|
+
1. **Analyzes** your existing code → Extracts specs automatically
|
|
348
|
+
2. **Finds gaps** → Missing tests, contracts, documentation
|
|
349
|
+
3. **Enforces contracts** → Prevents regressions with runtime validation
|
|
350
|
+
4. **Integrates** → Works with VS Code, Cursor, GitHub Actions, pre-commit hooks
|
|
357
351
|
|
|
358
|
-
|
|
352
|
+
**Works offline. No account required. Zero vendor lock-in.**
|
|
359
353
|
|
|
360
|
-
|
|
354
|
+
### How It Works
|
|
361
355
|
|
|
362
|
-
|
|
356
|
+
SpecFact follows a simple workflow that analyzes existing code and enforces contracts to prevent regressions:
|
|
363
357
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
358
|
+
```
|
|
359
|
+
┌────────────────────┐
|
|
360
|
+
│ Analyze Legacy │
|
|
361
|
+
│ Code │
|
|
362
|
+
└────────┬───────────┘
|
|
363
|
+
│ extract specs automatically
|
|
364
|
+
▼
|
|
365
|
+
┌────────────────────┐
|
|
366
|
+
│ Find Gaps │
|
|
367
|
+
│ (tests, contracts) │◀──── feedback loop ──────┐
|
|
368
|
+
└────────┬───────────┘ │
|
|
369
|
+
│ add contracts │
|
|
370
|
+
▼ │
|
|
371
|
+
┌────────────────────┐ │
|
|
372
|
+
│ Enforce Contracts │──────────────────────────┘
|
|
373
|
+
│ (runtime validation)│
|
|
374
|
+
└────────┬───────────┘
|
|
375
|
+
│ modernize safely
|
|
376
|
+
▼
|
|
377
|
+
┌────────────────────┐
|
|
378
|
+
│ Prevent Regressions│
|
|
379
|
+
│ (safety net) │
|
|
380
|
+
└────────────────────┘
|
|
381
|
+
|
|
382
|
+
1. Analyze your existing code to extract specs automatically
|
|
383
|
+
2. Find gaps in tests, contracts, and documentation
|
|
384
|
+
3. Add contracts to critical paths for runtime enforcement
|
|
385
|
+
4. Modernize safely knowing contracts will catch regressions
|
|
386
|
+
```
|
|
369
387
|
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
388
|
+
```mermaid
|
|
389
|
+
graph TB
|
|
390
|
+
subgraph "Your Legacy Code"
|
|
391
|
+
LC[Legacy Python Code<br/>No docs, no tests]
|
|
392
|
+
end
|
|
393
|
+
|
|
394
|
+
subgraph "SpecFact Analysis"
|
|
395
|
+
A1[import from-code<br/>Extract specs]
|
|
396
|
+
A2[Find Gaps<br/>Missing tests & contracts]
|
|
397
|
+
A3[Generate Plan Bundle<br/>Features & Stories]
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
subgraph "Contract Enforcement"
|
|
401
|
+
E1[Add Contracts<br/>Runtime validation]
|
|
402
|
+
E2[Enforce SDD<br/>Quality gates]
|
|
403
|
+
E3[CI/CD Integration<br/>Block bad code]
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
subgraph "Team Collaboration"
|
|
407
|
+
T1[Export by Role<br/>PO, Architect, Dev]
|
|
408
|
+
T2[Markdown Workflows<br/>No YAML editing]
|
|
409
|
+
T3[Sync to DevOps<br/>GitHub, Linear, Jira]
|
|
410
|
+
end
|
|
411
|
+
|
|
412
|
+
subgraph "Safety Net"
|
|
413
|
+
S1[Prevent Regressions<br/>Catch bugs early]
|
|
414
|
+
S2[Modernize Safely<br/>Refactor with confidence]
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
LC -->|Step 1| A1
|
|
418
|
+
A1 --> A2
|
|
419
|
+
A2 --> A3
|
|
420
|
+
A3 -->|Step 2| E1
|
|
421
|
+
E1 --> E2
|
|
422
|
+
E2 --> E3
|
|
423
|
+
E3 -->|Step 3| S1
|
|
424
|
+
S1 --> S2
|
|
425
|
+
|
|
426
|
+
A3 -->|Optional| T1
|
|
427
|
+
T1 --> T2
|
|
428
|
+
T2 --> T3
|
|
429
|
+
|
|
430
|
+
style LC fill:#ef4444,stroke:#dc2626,stroke-width:2px,color:#fff
|
|
431
|
+
style A1 fill:#f97316,stroke:#c2410c,stroke-width:2px,color:#fff
|
|
432
|
+
style A2 fill:#f97316,stroke:#c2410c,stroke-width:2px,color:#fff
|
|
433
|
+
style A3 fill:#f97316,stroke:#c2410c,stroke-width:2px,color:#fff
|
|
434
|
+
style E1 fill:#3b82f6,stroke:#1e40af,stroke-width:2px,color:#fff
|
|
435
|
+
style E2 fill:#3b82f6,stroke:#1e40af,stroke-width:2px,color:#fff
|
|
436
|
+
style E3 fill:#3b82f6,stroke:#1e40af,stroke-width:2px,color:#fff
|
|
437
|
+
style T1 fill:#10b981,stroke:#047857,stroke-width:2px,color:#fff
|
|
438
|
+
style T2 fill:#10b981,stroke:#047857,stroke-width:2px,color:#fff
|
|
439
|
+
style T3 fill:#10b981,stroke:#047857,stroke-width:2px,color:#fff
|
|
440
|
+
style S1 fill:#8b5cf6,stroke:#6d28d9,stroke-width:2px,color:#fff
|
|
441
|
+
style S2 fill:#8b5cf6,stroke:#6d28d9,stroke-width:2px,color:#fff
|
|
442
|
+
```
|
|
373
443
|
|
|
374
|
-
|
|
444
|
+
### Typical Workflow
|
|
445
|
+
|
|
446
|
+
```mermaid
|
|
447
|
+
sequenceDiagram
|
|
448
|
+
participant Dev as Developer
|
|
449
|
+
participant SF as SpecFact CLI
|
|
450
|
+
participant Code as Legacy Code
|
|
451
|
+
participant CI as CI/CD
|
|
452
|
+
|
|
453
|
+
Note over Dev,CI: Step 1: Analyze Legacy Code
|
|
454
|
+
Dev->>SF: specfact import from-code my-project
|
|
455
|
+
SF->>Code: Analyze Python files
|
|
456
|
+
Code-->>SF: Extract features & stories
|
|
457
|
+
SF-->>Dev: Plan bundle created
|
|
458
|
+
|
|
459
|
+
Note over Dev,CI: Step 2: Find & Fix Gaps
|
|
460
|
+
Dev->>SF: specfact analyze gaps my-project
|
|
461
|
+
SF-->>Dev: Missing tests & contracts found
|
|
462
|
+
Dev->>Dev: Add tests & contracts
|
|
463
|
+
|
|
464
|
+
Note over Dev,CI: Step 3: Enforce Contracts
|
|
465
|
+
Dev->>SF: specfact enforce sdd my-project
|
|
466
|
+
SF->>SF: Validate contracts
|
|
467
|
+
SF-->>Dev: Quality gates configured
|
|
468
|
+
|
|
469
|
+
Note over Dev,CI: Step 4: Modernize Safely
|
|
470
|
+
Dev->>Code: Refactor code
|
|
471
|
+
Code->>CI: Push changes
|
|
472
|
+
CI->>SF: Run contract validation
|
|
473
|
+
SF-->>CI: ✅ Pass or ❌ Block
|
|
474
|
+
|
|
475
|
+
alt Contracts Pass
|
|
476
|
+
CI-->>Dev: ✅ Merge allowed
|
|
477
|
+
else Contracts Fail
|
|
478
|
+
CI-->>Dev: ❌ Merge blocked
|
|
479
|
+
Dev->>Code: Fix violations
|
|
480
|
+
end
|
|
481
|
+
```
|
|
375
482
|
|
|
376
483
|
---
|
|
377
484
|
|
|
378
|
-
##
|
|
379
|
-
|
|
380
|
-
### **Love GitHub Spec-Kit or OpenSpec? SpecFact Adds What's Missing**
|
|
381
|
-
|
|
382
|
-
**Use together:** Keep using Spec-Kit for new features, OpenSpec for change tracking, add SpecFact for legacy code modernization.
|
|
485
|
+
## 🚀 Quick Start
|
|
383
486
|
|
|
384
|
-
|
|
385
|
-
|---------------|---------------------|--------------|
|
|
386
|
-
| **Work with existing code** | ⚠️ Designed for new features | ✅ **Reverse-engineer legacy code** |
|
|
387
|
-
| **Prevent regressions** | ⚠️ Documentation only | ✅ **Runtime contract enforcement** |
|
|
388
|
-
| **Find hidden bugs** | ⚠️ LLM suggestions (may miss) | ✅ **Symbolic execution** (CrossHair) |
|
|
389
|
-
| **Automated safety net** | ⚠️ Manual code review | ✅ **CI/CD gates** (GitHub Actions) |
|
|
390
|
-
| **DevOps integration** | ⚠️ Manual export | ✅ **Bridge adapters** (GitHub, ADO, Linear, Jira) |
|
|
487
|
+
### Install (10 seconds)
|
|
391
488
|
|
|
392
|
-
|
|
489
|
+
```bash
|
|
490
|
+
# Zero-install (recommended - no setup needed)
|
|
491
|
+
uvx specfact-cli@latest
|
|
393
492
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
- ✅ **Bridge adapters** → Sync between all tools automatically (New in 0.21.0)
|
|
398
|
-
- ✅ **GitHub Actions** → SpecFact integrates with your existing GitHub workflows
|
|
493
|
+
# Or install globally
|
|
494
|
+
pip install -U specfact-cli
|
|
495
|
+
```
|
|
399
496
|
|
|
400
|
-
|
|
497
|
+
### Your First Command (< 60 seconds)
|
|
401
498
|
|
|
402
|
-
|
|
499
|
+
**Analyze your existing code:**
|
|
403
500
|
|
|
404
|
-
|
|
501
|
+
```bash
|
|
502
|
+
# Analyze legacy codebase (most common use case)
|
|
503
|
+
specfact import from-code my-project --repo .
|
|
405
504
|
|
|
406
|
-
|
|
505
|
+
# Or start a new project
|
|
506
|
+
specfact plan init my-project --interactive
|
|
507
|
+
```
|
|
407
508
|
|
|
408
|
-
|
|
409
|
-
- ✅ **Runtime contract enforcement** → Prevent regressions during modernization
|
|
410
|
-
- ✅ **Symbolic execution** → Discover hidden edge cases with CrossHair
|
|
411
|
-
- ✅ **API contract testing** → Validate OpenAPI/AsyncAPI specs with Specmatic integration
|
|
412
|
-
- ✅ **Works offline** → No cloud required, fully local
|
|
413
|
-
- ✅ **CLI integrations** → Works seamlessly with VS Code, Cursor, GitHub Actions, and any agentic workflow
|
|
509
|
+
**That's it!** SpecFact will:
|
|
414
510
|
|
|
415
|
-
|
|
511
|
+
* Extract features and stories from your code
|
|
512
|
+
* Find missing tests and contracts
|
|
513
|
+
* Generate a plan bundle you can enforce
|
|
416
514
|
|
|
417
|
-
|
|
418
|
-
- ✅ **Agile/scrum alignment** → Definition of Ready (DoR), story points, dependencies, prioritization, sprint planning
|
|
419
|
-
- ✅ **Role-specific exports** → Each persona gets a tailored Markdown view with only what they need
|
|
420
|
-
- ✅ **Git-native collaboration** → Conflicts resolved in human-readable Markdown, not brittle YAML
|
|
421
|
-
- ✅ **Real-world templates** → Templates designed by agile coaches to match actual team expectations
|
|
515
|
+
👉 **[Getting Started Guide](docs/getting-started/README.md)** - Complete walkthrough with examples
|
|
422
516
|
|
|
423
517
|
---
|
|
424
518
|
|
|
425
|
-
##
|
|
519
|
+
## Key Features
|
|
426
520
|
|
|
427
|
-
|
|
521
|
+
### 🔍 Code Analysis
|
|
428
522
|
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
# → Exports: DoR checklists, prioritization, dependencies, business value, sprint planning
|
|
523
|
+
* **Reverse engineer** legacy code into documented specs
|
|
524
|
+
* **Find gaps** in tests, contracts, and documentation
|
|
525
|
+
* **Works with** any Python project (no special setup required)
|
|
433
526
|
|
|
434
|
-
|
|
435
|
-
specfact project export --bundle legacy-api --persona architect
|
|
436
|
-
# → Exports: Technical constraints, protocols, contracts, architectural decisions, NFRs
|
|
527
|
+
### 🛡️ Contract Enforcement
|
|
437
528
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
529
|
+
* **Prevent regressions** with runtime contract validation
|
|
530
|
+
* **CI/CD integration** - Block bad code from merging
|
|
531
|
+
* **Works offline** - No cloud required
|
|
441
532
|
|
|
442
|
-
|
|
443
|
-
specfact project import --bundle legacy-api --persona product-owner --source backlog.md
|
|
444
|
-
```
|
|
533
|
+
### 👥 Team Collaboration
|
|
445
534
|
|
|
446
|
-
**
|
|
535
|
+
* **Role-based workflows** - Product Owners, Architects, Developers work in parallel
|
|
536
|
+
* **Markdown-based** - No YAML editing required
|
|
537
|
+
* **Agile/scrum ready** - DoR checklists, story points, dependencies
|
|
447
538
|
|
|
448
|
-
|
|
449
|
-
- ✅ **Parallel workflows** → Product Owners, Architects, and Developers work simultaneously
|
|
450
|
-
- ✅ **Git-native** → Conflicts resolved in Markdown (human-readable), not YAML
|
|
451
|
-
- ✅ **Agile/scrum ready** → Built-in DoR validation, dependency tracking, sprint planning
|
|
452
|
-
- ✅ **Real-world templates** → Designed by agile coaches to match actual team expectations
|
|
539
|
+
### 🔌 Integrations
|
|
453
540
|
|
|
454
|
-
|
|
541
|
+
* **VS Code, Cursor** - Catch bugs before you commit
|
|
542
|
+
* **GitHub Actions** - Automated quality gates
|
|
543
|
+
* **AI IDEs** - Generate prompts for fixing gaps
|
|
544
|
+
* **DevOps tools** - Sync with GitHub Issues, Linear, Jira
|
|
455
545
|
|
|
456
546
|
---
|
|
457
547
|
|
|
458
|
-
##
|
|
548
|
+
## Common Use Cases
|
|
459
549
|
|
|
460
|
-
|
|
550
|
+
### 1. Modernizing Legacy Code ⭐ **Most Common**
|
|
461
551
|
|
|
462
|
-
|
|
463
|
-
- ✅ **Cursor** - Prevent regressions during AI-assisted refactoring
|
|
464
|
-
- ✅ **GitHub Actions** - Block bad code from merging
|
|
465
|
-
- ✅ **Pre-commit Hooks** - Validate code locally before pushing
|
|
466
|
-
- ✅ **AI Assistants** - Find edge cases AI might miss
|
|
552
|
+
**Problem:** Existing codebase with no specs or outdated documentation
|
|
467
553
|
|
|
468
|
-
|
|
554
|
+
```bash
|
|
555
|
+
# Step 1: Analyze your code
|
|
556
|
+
specfact import from-code my-project --repo .
|
|
469
557
|
|
|
470
|
-
|
|
558
|
+
# Step 2: Review what was found
|
|
559
|
+
specfact plan review my-project
|
|
471
560
|
|
|
472
|
-
|
|
561
|
+
# Step 3: Enforce contracts to prevent regressions
|
|
562
|
+
specfact enforce sdd my-project
|
|
563
|
+
```
|
|
473
564
|
|
|
474
|
-
|
|
565
|
+
👉 **[Brownfield Modernization Guide](docs/guides/brownfield-engineer.md)** - Complete walkthrough
|
|
475
566
|
|
|
476
|
-
|
|
477
|
-
- Export change proposals to DevOps tools (GitHub Issues, ADO, Linear, Jira)
|
|
478
|
-
- Read OpenSpec specifications for validation and alignment
|
|
479
|
-
- Bidirectional sync between OpenSpec and SpecFact project bundles
|
|
480
|
-
- Content sanitization for public repositories
|
|
481
|
-
- ✅ **GitHub Spec-Kit** - Bidirectional sync with Spec-Kit projects
|
|
482
|
-
- ✅ **Generic Markdown** - Import/export from any markdown-based specification format
|
|
567
|
+
### 2. Working with a Team
|
|
483
568
|
|
|
484
|
-
|
|
569
|
+
**Problem:** Need team collaboration with role-based workflows
|
|
485
570
|
|
|
486
571
|
```bash
|
|
487
|
-
#
|
|
488
|
-
specfact
|
|
489
|
-
--repo-owner nold-ai --repo-name specfact-cli \
|
|
490
|
-
--sanitize --target-repo nold-ai/specfact-cli
|
|
572
|
+
# Product Owner: Export backlog
|
|
573
|
+
specfact project export --bundle my-project --persona product-owner
|
|
491
574
|
|
|
492
|
-
#
|
|
493
|
-
specfact
|
|
575
|
+
# Architect: Export technical design
|
|
576
|
+
specfact project export --bundle my-project --persona architect
|
|
577
|
+
|
|
578
|
+
# Developer: Export implementation tasks
|
|
579
|
+
specfact project export --bundle my-project --persona developer
|
|
494
580
|
```
|
|
495
581
|
|
|
496
|
-
👉 **[
|
|
582
|
+
👉 **[Agile/Scrum Workflows Guide](docs/guides/agile-scrum-workflows.md)** - Team collaboration guide
|
|
497
583
|
|
|
498
|
-
###
|
|
584
|
+
### 3. Using AI IDEs (Cursor, Copilot, Claude)
|
|
499
585
|
|
|
500
|
-
|
|
586
|
+
**Problem:** Want AI to fix gaps, but need validation
|
|
501
587
|
|
|
502
588
|
```bash
|
|
503
|
-
# 1
|
|
504
|
-
specfact analyze gaps --bundle
|
|
589
|
+
# Step 1: Find gaps
|
|
590
|
+
specfact analyze gaps --bundle my-project
|
|
505
591
|
|
|
506
|
-
# 2
|
|
507
|
-
specfact generate fix-prompt GAP-001
|
|
592
|
+
# Step 2: Generate AI prompt
|
|
593
|
+
specfact generate fix-prompt GAP-001 --bundle my-project
|
|
508
594
|
|
|
509
|
-
# 3
|
|
510
|
-
|
|
511
|
-
# 5. Validate with SpecFact
|
|
512
|
-
specfact enforce sdd --bundle legacy-api
|
|
595
|
+
# Step 3: Copy to AI IDE → AI fixes → Validate
|
|
596
|
+
specfact enforce sdd --bundle my-project
|
|
513
597
|
```
|
|
514
598
|
|
|
515
|
-
**
|
|
516
|
-
|
|
517
|
-
- ✅ **You control the AI** - Use your preferred AI IDE and model
|
|
518
|
-
- ✅ **SpecFact validates** - Ensure AI-generated code meets contracts
|
|
519
|
-
- ✅ **No lock-in** - Works with Cursor, Copilot, Claude Code, or any AI tool
|
|
520
|
-
- ✅ **Quality gates** - Prevent AI hallucinations from reaching production
|
|
599
|
+
👉 **[AI IDE Integration](docs/guides/ide-integration.md)** - Setup guide
|
|
521
600
|
|
|
522
601
|
---
|
|
523
602
|
|
|
524
603
|
## See It In Action
|
|
525
604
|
|
|
526
|
-
We ran SpecFact CLI **on itself** to prove it works
|
|
605
|
+
We ran SpecFact CLI **on itself** to prove it works:
|
|
527
606
|
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
607
|
+
* ⚡ Analyzed 32 legacy Python files → Found **32 features** and **81 stories** in **3 seconds**
|
|
608
|
+
* 🚫 Set enforcement → **Blocked 2 HIGH violations** automatically
|
|
609
|
+
* 📊 Compared plans → Found **24 deviations** in **5 seconds**
|
|
531
610
|
|
|
532
|
-
**Total time**: < 10 seconds | **
|
|
611
|
+
**Total time**: < 10 seconds | **Result**: Found real bugs and inconsistencies
|
|
533
612
|
|
|
534
|
-
👉 **[Read the complete example](docs/examples/dogfooding-specfact-cli.md)**
|
|
613
|
+
👉 **[Read the complete example](docs/examples/dogfooding-specfact-cli.md)** - See actual commands and outputs
|
|
535
614
|
|
|
536
615
|
---
|
|
537
616
|
|
|
538
617
|
## Documentation
|
|
539
618
|
|
|
540
|
-
|
|
619
|
+
### 🎯 Find Your Path
|
|
541
620
|
|
|
542
|
-
**
|
|
621
|
+
**New to SpecFact?**
|
|
543
622
|
|
|
544
|
-
**
|
|
623
|
+
1. **[Getting Started](docs/getting-started/README.md)** - Install and first commands
|
|
624
|
+
2. **[Tutorial: Using SpecFact with OpenSpec or Spec-Kit](docs/getting-started/tutorial-openspec-speckit.md)** ⭐ **NEW** - Complete beginner-friendly tutorial
|
|
625
|
+
3. **[Modernizing Legacy Code?](docs/guides/brownfield-engineer.md)** ⭐ - Complete guide
|
|
626
|
+
4. **[Use Cases](docs/guides/use-cases.md)** - Common scenarios
|
|
627
|
+
5. **[Command Reference](docs/reference/commands.md)** - All commands
|
|
545
628
|
|
|
546
|
-
**
|
|
629
|
+
**Working with a Team?**
|
|
547
630
|
|
|
548
|
-
**
|
|
631
|
+
* **[Agile/Scrum Workflows](docs/guides/agile-scrum-workflows.md)** ⭐ - Persona-based collaboration
|
|
632
|
+
* **[Project Commands](docs/reference/commands.md#project---project-bundle-management)** - Export/import workflows
|
|
549
633
|
|
|
550
|
-
|
|
634
|
+
**Want Integrations?**
|
|
635
|
+
|
|
636
|
+
* **[IDE Integration](docs/guides/ide-integration.md)** - VS Code, Cursor setup
|
|
637
|
+
* **[Integration Showcases](docs/examples/integration-showcases/)** - Real bugs fixed
|
|
638
|
+
* **[GitHub Actions](docs/guides/use-cases.md#use-case-4-cicd-integration)** - CI/CD setup
|
|
639
|
+
|
|
640
|
+
**Advanced Topics**
|
|
551
641
|
|
|
552
|
-
|
|
642
|
+
* **[Architecture](docs/reference/architecture.md)** - How it works
|
|
643
|
+
* **[Schema Versioning](docs/reference/schema-versioning.md)** - Bundle schemas
|
|
644
|
+
* **[Testing Guide](docs/technical/testing.md)** - Development setup
|
|
553
645
|
|
|
554
|
-
|
|
555
|
-
- When enabled, SpecFact records anonymized metrics (e.g., number of features detected, contract violations blocked) to help us publish aggregate stats such as “contracts prevented 70% of the bugs surfaced during modernization.”
|
|
556
|
-
- Data is stored locally in `~/.specfact/telemetry.log`, and you can route it to your own OpenTelemetry collector via `SPECFACT_TELEMETRY_ENDPOINT`.
|
|
557
|
-
- Learn more in [`docs/reference/telemetry.md`](docs/reference/telemetry.md).
|
|
646
|
+
👉 **[Full Documentation Index](docs/README.md)** - Browse all documentation
|
|
558
647
|
|
|
559
648
|
---
|
|
560
649
|
|
|
561
|
-
##
|
|
650
|
+
## Version 0.22.0
|
|
562
651
|
|
|
563
|
-
|
|
652
|
+
**Latest release** introduces bridge adapter architecture refactoring and OpenSpec integration.
|
|
564
653
|
|
|
565
|
-
**
|
|
654
|
+
**What's New:**
|
|
566
655
|
|
|
567
|
-
|
|
656
|
+
* ✅ **Bridge Adapter Architecture** - Plugin-based adapter registry pattern for extensible tool integration
|
|
657
|
+
* ✅ **OpenSpec Adapter** - Read-only sync from OpenSpec to SpecFact (v0.22.0+)
|
|
658
|
+
* ✅ **SpecKitAdapter** - Refactored Spec-Kit integration using adapter pattern
|
|
659
|
+
* ✅ **Command Updates** - Constitution commands moved to `specfact sdd constitution`
|
|
660
|
+
* ✅ **Breaking Changes** - Removed `specfact bridge` command group, `implement`, and `generate tasks` commands
|
|
568
661
|
|
|
569
|
-
-
|
|
570
|
-
- Complete command reference
|
|
571
|
-
- IDE integration setup
|
|
572
|
-
- Use cases and examples
|
|
573
|
-
- Architecture overview
|
|
574
|
-
- Testing procedures
|
|
662
|
+
👉 **[Changelog](CHANGELOG.md)** - Complete release history
|
|
575
663
|
|
|
576
|
-
|
|
664
|
+
---
|
|
665
|
+
|
|
666
|
+
## Why SpecFact?
|
|
577
667
|
|
|
578
|
-
###
|
|
668
|
+
### Works with Your Existing Tools
|
|
579
669
|
|
|
580
|
-
|
|
670
|
+
* ✅ **No new platform** - Pure CLI, works offline
|
|
671
|
+
* ✅ **No account required** - Fully local, zero vendor lock-in
|
|
672
|
+
* ✅ **Integrates everywhere** - VS Code, Cursor, GitHub Actions, pre-commit hooks
|
|
581
673
|
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
674
|
+
### Built for Real Teams
|
|
675
|
+
|
|
676
|
+
* ✅ **Role-based workflows** - Product Owners, Architects, Developers work in parallel
|
|
677
|
+
* ✅ **Markdown-based** - No YAML editing, human-readable conflicts
|
|
678
|
+
* ✅ **Agile/scrum ready** - DoR checklists, story points, sprint planning
|
|
679
|
+
|
|
680
|
+
### Proven Results
|
|
681
|
+
|
|
682
|
+
* ✅ **Catches real bugs** - See [Integration Showcases](docs/examples/integration-showcases/)
|
|
683
|
+
* ✅ **Prevents regressions** - Runtime contract enforcement
|
|
684
|
+
* ✅ **Works on legacy code** - Analyzed itself successfully
|
|
587
685
|
|
|
588
686
|
---
|
|
589
687
|
|
|
590
688
|
## Contributing
|
|
591
689
|
|
|
592
|
-
We welcome contributions!
|
|
690
|
+
We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
593
691
|
|
|
594
692
|
```bash
|
|
595
693
|
git clone https://github.com/nold-ai/specfact-cli.git
|
|
@@ -604,25 +702,20 @@ hatch run contract-test-full
|
|
|
604
702
|
|
|
605
703
|
**Apache License 2.0** - Open source and enterprise-friendly
|
|
606
704
|
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
- ✅ **Modify and distribute** as needed
|
|
611
|
-
- ✅ **Enterprise-friendly** with explicit patent grant
|
|
612
|
-
- ✅ **Build commercial products** on top of SpecFact CLI
|
|
613
|
-
|
|
614
|
-
**Full license**: [LICENSE.md](LICENSE.md)
|
|
705
|
+
* ✅ Free to use for any purpose (commercial or non-commercial)
|
|
706
|
+
* ✅ Modify and distribute as needed
|
|
707
|
+
* ✅ Enterprise-friendly with explicit patent grant
|
|
615
708
|
|
|
616
|
-
|
|
709
|
+
[Full license](LICENSE.md)
|
|
617
710
|
|
|
618
711
|
---
|
|
619
712
|
|
|
620
713
|
## Support
|
|
621
714
|
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
715
|
+
* 💬 **Questions?** [GitHub Discussions](https://github.com/nold-ai/specfact-cli/discussions)
|
|
716
|
+
* 🐛 **Found a bug?** [GitHub Issues](https://github.com/nold-ai/specfact-cli/issues)
|
|
717
|
+
* 📧 **Need help?** [hello@noldai.com](mailto:hello@noldai.com)
|
|
718
|
+
* 🌐 **Learn more:** [noldai.com](https://noldai.com)
|
|
626
719
|
|
|
627
720
|
---
|
|
628
721
|
|
|
@@ -630,7 +723,7 @@ SpecFact CLI is licensed under the Apache License 2.0, which means:
|
|
|
630
723
|
|
|
631
724
|
**Built with ❤️ by [NOLD AI](https://noldai.com)**
|
|
632
725
|
|
|
633
|
-
Copyright © 2025 Nold AI (Owner: Dominikus Nold)
|
|
726
|
+
Copyright © 2025-2026 Nold AI (Owner: Dominikus Nold)
|
|
634
727
|
|
|
635
728
|
**Trademarks**: NOLD AI (NOLDAI) is a registered trademark (wordmark) at the European Union Intellectual Property Office (EUIPO). All other trademarks mentioned in this project are the property of their respective owners. See [TRADEMARKS.md](TRADEMARKS.md) for more information.
|
|
636
729
|
|