specfact-cli 0.21.1__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.1 → specfact_cli-0.22.0}/PKG-INFO +130 -60
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/README.md +129 -59
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/pyproject.toml +1 -1
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/__init__.py +1 -1
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/__init__.py +1 -1
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/adapters/__init__.py +5 -1
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/adapters/base.py +21 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/adapters/github.py +26 -0
- 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.1 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/code_analyzer.py +8 -1
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/cli.py +3 -15
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/commands/__init__.py +0 -4
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/commands/generate.py +5 -244
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/commands/import_cmd.py +271 -111
- specfact_cli-0.21.1/src/specfact_cli/commands/bridge.py → specfact_cli-0.22.0/src/specfact_cli/commands/sdd.py +140 -23
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/commands/sync.py +502 -177
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/importers/speckit_converter.py +8 -5
- {specfact_cli-0.21.1 → 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.1 → specfact_cli-0.22.0}/src/specfact_cli/migrations/plan_migrator.py +17 -0
- {specfact_cli-0.21.1 → 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.21.1 → specfact_cli-0.22.0}/src/specfact_cli/models/source_tracking.py +8 -0
- {specfact_cli-0.21.1 → 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.1 → specfact_cli-0.22.0}/src/specfact_cli/sync/bridge_sync.py +171 -164
- specfact_cli-0.21.1/src/specfact_cli/commands/implement.py +0 -417
- specfact_cli-0.21.1/src/specfact_cli/commands/sdd.py +0 -139
- specfact_cli-0.21.1/src/specfact_cli/migrations/__init__.py +0 -10
- specfact_cli-0.21.1/src/specfact_cli/sync/bridge_probe.py +0 -364
- specfact_cli-0.21.1/src/specfact_cli/sync/speckit_sync.py +0 -388
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/.gitignore +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/LICENSE.md +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/mappings/node-async.yaml +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/mappings/python-async.yaml +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/mappings/speckit-default.yaml +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/prompts/shared/cli-enforcement.md +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/prompts/specfact.01-import.md +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/prompts/specfact.02-plan.md +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/prompts/specfact.03-review.md +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/prompts/specfact.04-sdd.md +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/prompts/specfact.05-enforce.md +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/prompts/specfact.06-sync.md +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/prompts/specfact.07-contracts.md +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/prompts/specfact.compare.md +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/prompts/specfact.sync-backlog.md +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/prompts/specfact.validate.md +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/schemas/deviation.schema.json +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/schemas/plan.schema.json +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/schemas/protocol.schema.json +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/github-action.yml.j2 +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/persona/architect.md.j2 +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/persona/developer.md.j2 +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/persona/product-owner.md.j2 +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/plan.bundle.yaml.j2 +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/pr-template.md.j2 +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/protocol.yaml.j2 +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/sidecar/README.md +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/sidecar/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/sidecar/adapters.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/sidecar/bindings.yaml +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/sidecar/bindings.yaml.example +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/sidecar/crosshair_django_wrapper.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/sidecar/crosshair_plugin.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/sidecar/django_form_extractor.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/sidecar/django_url_extractor.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/sidecar/generate_harness.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/sidecar/harness_contracts.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/sidecar/populate_contracts.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/sidecar/run_sidecar.sh +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/sidecar/sidecar-init.sh +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/resources/templates/telemetry.yaml.example +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/adapters/registry.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/agents/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/agents/analyze_agent.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/agents/base.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/agents/plan_agent.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/agents/registry.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/agents/sync_agent.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/ambiguity_scanner.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/constitution_evidence_extractor.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/contract_extractor.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/control_flow_analyzer.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/graph_analyzer.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/relationship_mapper.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/requirement_extractor.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/analyzers/test_pattern_extractor.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/commands/analyze.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/commands/contract_cmd.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/commands/drift.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/commands/enforce.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/commands/init.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/commands/migrate.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/commands/plan.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/commands/project_cmd.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/commands/repro.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/commands/spec.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/common/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/common/logger_setup.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/common/logging_utils.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/common/text_utils.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/common/utils.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/comparators/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/comparators/plan_comparator.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/enrichers/constitution_enricher.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/enrichers/plan_enricher.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/generators/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/generators/contract_generator.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/generators/openapi_extractor.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/generators/persona_exporter.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/generators/plan_generator.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/generators/protocol_generator.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/generators/report_generator.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/generators/task_generator.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/generators/test_to_openapi.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/generators/workflow_generator.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/importers/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/integrations/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/integrations/specmatic.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/merge/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/merge/resolver.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/models/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/models/change.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/models/contract.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/models/deviation.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/models/enforcement.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/models/persona_template.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/models/plan.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/models/project.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/models/protocol.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/models/quality.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/models/sdd.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/models/task.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/modes/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/modes/detector.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/modes/router.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/parsers/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/parsers/persona_importer.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/resources/semgrep/async.yml +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/resources/semgrep/code-quality.yml +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/resources/semgrep/feature-detection.yml +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/runtime.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/sync/bridge_watch.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/sync/change_detector.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/sync/code_to_spec.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/sync/drift_detector.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/sync/repository_sync.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/sync/spec_to_code.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/sync/spec_to_tests.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/sync/watcher.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/sync/watcher_enhanced.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/telemetry.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/templates/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/templates/bridge_templates.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/templates/specification_templates.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/acceptance_criteria.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/bundle_loader.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/code_change_detector.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/console.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/content_sanitizer.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/context_detection.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/enrichment_context.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/enrichment_parser.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/env_manager.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/feature_keys.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/git.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/github_annotations.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/ide_setup.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/incremental_check.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/optional_deps.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/performance.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/progress.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/progressive_disclosure.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/prompts.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/sdd_discovery.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/source_scanner.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/structure.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/structured_io.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/suggestions.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/utils/yaml_utils.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/validators/__init__.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/validators/agile_validation.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/validators/cli_first_validator.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/validators/contract_validator.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/validators/fsm.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/validators/repro_checker.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/validators/schema.py +0 -0
- {specfact_cli-0.21.1 → specfact_cli-0.22.0}/src/specfact_cli/versioning/__init__.py +0 -0
- {specfact_cli-0.21.1 → 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
|
-
> Analyze
|
|
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/)
|
|
@@ -297,12 +299,46 @@ Description-Content-Type: text/markdown
|
|
|
297
299
|
|
|
298
300
|
**Perfect for:** Teams modernizing legacy Python systems who can't afford production bugs during migration.
|
|
299
301
|
|
|
302
|
+
### Why SpecFact?
|
|
303
|
+
|
|
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.
|
|
305
|
+
|
|
306
|
+
**Key outcomes:**
|
|
307
|
+
|
|
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
|
|
313
|
+
|
|
314
|
+
## How SpecFact Compares (at a glance)
|
|
315
|
+
|
|
316
|
+
**New to spec-driven development?** Here's how SpecFact compares to other tools:
|
|
317
|
+
|
|
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 |
|
|
323
|
+
|
|
324
|
+
**Key Differentiators:**
|
|
325
|
+
|
|
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
|
|
331
|
+
|
|
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.
|
|
333
|
+
|
|
334
|
+
👉 **[See detailed comparison guide](docs/guides/speckit-comparison.md)** - Understand when to use SpecFact, Spec-Kit, OpenSpec, or all together
|
|
335
|
+
|
|
300
336
|
### The Problem It Solves
|
|
301
337
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
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
|
|
306
342
|
|
|
307
343
|
### The Solution
|
|
308
344
|
|
|
@@ -317,6 +353,38 @@ SpecFact CLI:
|
|
|
317
353
|
|
|
318
354
|
### How It Works
|
|
319
355
|
|
|
356
|
+
SpecFact follows a simple workflow that analyzes existing code and enforces contracts to prevent regressions:
|
|
357
|
+
|
|
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
|
+
```
|
|
387
|
+
|
|
320
388
|
```mermaid
|
|
321
389
|
graph TB
|
|
322
390
|
subgraph "Your Legacy Code"
|
|
@@ -440,9 +508,9 @@ specfact plan init my-project --interactive
|
|
|
440
508
|
|
|
441
509
|
**That's it!** SpecFact will:
|
|
442
510
|
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
511
|
+
* Extract features and stories from your code
|
|
512
|
+
* Find missing tests and contracts
|
|
513
|
+
* Generate a plan bundle you can enforce
|
|
446
514
|
|
|
447
515
|
👉 **[Getting Started Guide](docs/getting-started/README.md)** - Complete walkthrough with examples
|
|
448
516
|
|
|
@@ -452,28 +520,28 @@ specfact plan init my-project --interactive
|
|
|
452
520
|
|
|
453
521
|
### 🔍 Code Analysis
|
|
454
522
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
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)
|
|
458
526
|
|
|
459
527
|
### 🛡️ Contract Enforcement
|
|
460
528
|
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
529
|
+
* **Prevent regressions** with runtime contract validation
|
|
530
|
+
* **CI/CD integration** - Block bad code from merging
|
|
531
|
+
* **Works offline** - No cloud required
|
|
464
532
|
|
|
465
533
|
### 👥 Team Collaboration
|
|
466
534
|
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
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
|
|
470
538
|
|
|
471
539
|
### 🔌 Integrations
|
|
472
540
|
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
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
|
|
477
545
|
|
|
478
546
|
---
|
|
479
547
|
|
|
@@ -536,9 +604,9 @@ specfact enforce sdd --bundle my-project
|
|
|
536
604
|
|
|
537
605
|
We ran SpecFact CLI **on itself** to prove it works:
|
|
538
606
|
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
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**
|
|
542
610
|
|
|
543
611
|
**Total time**: < 10 seconds | **Result**: Found real bugs and inconsistencies
|
|
544
612
|
|
|
@@ -553,41 +621,43 @@ We ran SpecFact CLI **on itself** to prove it works:
|
|
|
553
621
|
**New to SpecFact?**
|
|
554
622
|
|
|
555
623
|
1. **[Getting Started](docs/getting-started/README.md)** - Install and first commands
|
|
556
|
-
2. **[
|
|
557
|
-
3. **[
|
|
558
|
-
4. **[
|
|
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
|
|
559
628
|
|
|
560
629
|
**Working with a Team?**
|
|
561
630
|
|
|
562
|
-
|
|
563
|
-
|
|
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
|
|
564
633
|
|
|
565
634
|
**Want Integrations?**
|
|
566
635
|
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
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
|
|
570
639
|
|
|
571
640
|
**Advanced Topics**
|
|
572
641
|
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
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
|
|
576
645
|
|
|
577
646
|
👉 **[Full Documentation Index](docs/README.md)** - Browse all documentation
|
|
578
647
|
|
|
579
648
|
---
|
|
580
649
|
|
|
581
|
-
## Version 0.
|
|
650
|
+
## Version 0.22.0
|
|
582
651
|
|
|
583
|
-
**Latest release** introduces
|
|
652
|
+
**Latest release** introduces bridge adapter architecture refactoring and OpenSpec integration.
|
|
584
653
|
|
|
585
654
|
**What's New:**
|
|
586
655
|
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
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
|
|
591
661
|
|
|
592
662
|
👉 **[Changelog](CHANGELOG.md)** - Complete release history
|
|
593
663
|
|
|
@@ -597,21 +667,21 @@ We ran SpecFact CLI **on itself** to prove it works:
|
|
|
597
667
|
|
|
598
668
|
### Works with Your Existing Tools
|
|
599
669
|
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
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
|
|
603
673
|
|
|
604
674
|
### Built for Real Teams
|
|
605
675
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
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
|
|
609
679
|
|
|
610
680
|
### Proven Results
|
|
611
681
|
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
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
|
|
615
685
|
|
|
616
686
|
---
|
|
617
687
|
|
|
@@ -632,9 +702,9 @@ hatch run contract-test-full
|
|
|
632
702
|
|
|
633
703
|
**Apache License 2.0** - Open source and enterprise-friendly
|
|
634
704
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
705
|
+
* ✅ Free to use for any purpose (commercial or non-commercial)
|
|
706
|
+
* ✅ Modify and distribute as needed
|
|
707
|
+
* ✅ Enterprise-friendly with explicit patent grant
|
|
638
708
|
|
|
639
709
|
[Full license](LICENSE.md)
|
|
640
710
|
|
|
@@ -642,10 +712,10 @@ hatch run contract-test-full
|
|
|
642
712
|
|
|
643
713
|
## Support
|
|
644
714
|
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
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)
|
|
649
719
|
|
|
650
720
|
---
|
|
651
721
|
|
|
@@ -653,7 +723,7 @@ hatch run contract-test-full
|
|
|
653
723
|
|
|
654
724
|
**Built with ❤️ by [NOLD AI](https://noldai.com)**
|
|
655
725
|
|
|
656
|
-
Copyright © 2025 Nold AI (Owner: Dominikus Nold)
|
|
726
|
+
Copyright © 2025-2026 Nold AI (Owner: Dominikus Nold)
|
|
657
727
|
|
|
658
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.
|
|
659
729
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# SpecFact CLI
|
|
2
2
|
|
|
3
|
-
> **
|
|
4
|
-
> Analyze
|
|
3
|
+
> **Brownfield-first legacy code modernization with runtime contract enforcement.**
|
|
4
|
+
> Analyze existing Python code → Extract specs → Find gaps → Enforce contracts → Prevent regressions
|
|
5
|
+
|
|
6
|
+
**No API keys required. Works offline. Zero vendor lock-in.**
|
|
5
7
|
|
|
6
8
|
[](https://pypi.org/project/specfact-cli/)
|
|
7
9
|
[](https://pypi.org/project/specfact-cli/)
|
|
@@ -22,12 +24,46 @@
|
|
|
22
24
|
|
|
23
25
|
**Perfect for:** Teams modernizing legacy Python systems who can't afford production bugs during migration.
|
|
24
26
|
|
|
27
|
+
### Why SpecFact?
|
|
28
|
+
|
|
29
|
+
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.
|
|
30
|
+
|
|
31
|
+
**Key outcomes:**
|
|
32
|
+
|
|
33
|
+
* **Understand legacy code** in minutes, not weeks (automatic spec extraction)
|
|
34
|
+
* **Find gaps** in tests, contracts, and documentation automatically
|
|
35
|
+
* **Prevent regressions** with runtime contract enforcement during modernization
|
|
36
|
+
* **Works with the tools you already use**: VS Code, Cursor, GitHub Actions, pre-commit hooks
|
|
37
|
+
* **No API keys required** - Works completely offline
|
|
38
|
+
|
|
39
|
+
## How SpecFact Compares (at a glance)
|
|
40
|
+
|
|
41
|
+
**New to spec-driven development?** Here's how SpecFact compares to other tools:
|
|
42
|
+
|
|
43
|
+
| Tool | Best For | SpecFact's Focus |
|
|
44
|
+
|------|----------|------------------|
|
|
45
|
+
| **GitHub Spec-Kit** | Greenfield specs, multi-language, interactive authoring | **Brownfield analysis**, runtime enforcement, formal verification |
|
|
46
|
+
| **OpenSpec** | Specification anchoring, change tracking, cross-repo workflows | **Code analysis**, contract enforcement, DevOps integration |
|
|
47
|
+
| **Traditional Testing** | Manual test writing, code review | **Automated gap detection**, contract-first validation, CI/CD gates |
|
|
48
|
+
|
|
49
|
+
**Key Differentiators:**
|
|
50
|
+
|
|
51
|
+
* ✅ **Brownfield-first** - Reverse engineers existing code (primary use case)
|
|
52
|
+
* ✅ **Runtime enforcement** - Contracts prevent regressions automatically
|
|
53
|
+
* ✅ **Formal verification** - CrossHair symbolic execution (not just LLM suggestions)
|
|
54
|
+
* ✅ **Team collaboration** - Role-based workflows for agile/scrum teams
|
|
55
|
+
* ✅ **Works offline** - No API keys, no cloud, zero vendor lock-in
|
|
56
|
+
|
|
57
|
+
**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.
|
|
58
|
+
|
|
59
|
+
👉 **[See detailed comparison guide](docs/guides/speckit-comparison.md)** - Understand when to use SpecFact, Spec-Kit, OpenSpec, or all together
|
|
60
|
+
|
|
25
61
|
### The Problem It Solves
|
|
26
62
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
63
|
+
* ❌ **Legacy code** with no documentation or outdated specs
|
|
64
|
+
* ❌ **Missing tests** and contracts that should exist
|
|
65
|
+
* ❌ **Regressions** introduced during refactoring/modernization
|
|
66
|
+
* ❌ **No safety net** to catch bugs before production
|
|
31
67
|
|
|
32
68
|
### The Solution
|
|
33
69
|
|
|
@@ -42,6 +78,38 @@ SpecFact CLI:
|
|
|
42
78
|
|
|
43
79
|
### How It Works
|
|
44
80
|
|
|
81
|
+
SpecFact follows a simple workflow that analyzes existing code and enforces contracts to prevent regressions:
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
┌────────────────────┐
|
|
85
|
+
│ Analyze Legacy │
|
|
86
|
+
│ Code │
|
|
87
|
+
└────────┬───────────┘
|
|
88
|
+
│ extract specs automatically
|
|
89
|
+
▼
|
|
90
|
+
┌────────────────────┐
|
|
91
|
+
│ Find Gaps │
|
|
92
|
+
│ (tests, contracts) │◀──── feedback loop ──────┐
|
|
93
|
+
└────────┬───────────┘ │
|
|
94
|
+
│ add contracts │
|
|
95
|
+
▼ │
|
|
96
|
+
┌────────────────────┐ │
|
|
97
|
+
│ Enforce Contracts │──────────────────────────┘
|
|
98
|
+
│ (runtime validation)│
|
|
99
|
+
└────────┬───────────┘
|
|
100
|
+
│ modernize safely
|
|
101
|
+
▼
|
|
102
|
+
┌────────────────────┐
|
|
103
|
+
│ Prevent Regressions│
|
|
104
|
+
│ (safety net) │
|
|
105
|
+
└────────────────────┘
|
|
106
|
+
|
|
107
|
+
1. Analyze your existing code to extract specs automatically
|
|
108
|
+
2. Find gaps in tests, contracts, and documentation
|
|
109
|
+
3. Add contracts to critical paths for runtime enforcement
|
|
110
|
+
4. Modernize safely knowing contracts will catch regressions
|
|
111
|
+
```
|
|
112
|
+
|
|
45
113
|
```mermaid
|
|
46
114
|
graph TB
|
|
47
115
|
subgraph "Your Legacy Code"
|
|
@@ -165,9 +233,9 @@ specfact plan init my-project --interactive
|
|
|
165
233
|
|
|
166
234
|
**That's it!** SpecFact will:
|
|
167
235
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
236
|
+
* Extract features and stories from your code
|
|
237
|
+
* Find missing tests and contracts
|
|
238
|
+
* Generate a plan bundle you can enforce
|
|
171
239
|
|
|
172
240
|
👉 **[Getting Started Guide](docs/getting-started/README.md)** - Complete walkthrough with examples
|
|
173
241
|
|
|
@@ -177,28 +245,28 @@ specfact plan init my-project --interactive
|
|
|
177
245
|
|
|
178
246
|
### 🔍 Code Analysis
|
|
179
247
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
248
|
+
* **Reverse engineer** legacy code into documented specs
|
|
249
|
+
* **Find gaps** in tests, contracts, and documentation
|
|
250
|
+
* **Works with** any Python project (no special setup required)
|
|
183
251
|
|
|
184
252
|
### 🛡️ Contract Enforcement
|
|
185
253
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
254
|
+
* **Prevent regressions** with runtime contract validation
|
|
255
|
+
* **CI/CD integration** - Block bad code from merging
|
|
256
|
+
* **Works offline** - No cloud required
|
|
189
257
|
|
|
190
258
|
### 👥 Team Collaboration
|
|
191
259
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
260
|
+
* **Role-based workflows** - Product Owners, Architects, Developers work in parallel
|
|
261
|
+
* **Markdown-based** - No YAML editing required
|
|
262
|
+
* **Agile/scrum ready** - DoR checklists, story points, dependencies
|
|
195
263
|
|
|
196
264
|
### 🔌 Integrations
|
|
197
265
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
266
|
+
* **VS Code, Cursor** - Catch bugs before you commit
|
|
267
|
+
* **GitHub Actions** - Automated quality gates
|
|
268
|
+
* **AI IDEs** - Generate prompts for fixing gaps
|
|
269
|
+
* **DevOps tools** - Sync with GitHub Issues, Linear, Jira
|
|
202
270
|
|
|
203
271
|
---
|
|
204
272
|
|
|
@@ -261,9 +329,9 @@ specfact enforce sdd --bundle my-project
|
|
|
261
329
|
|
|
262
330
|
We ran SpecFact CLI **on itself** to prove it works:
|
|
263
331
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
332
|
+
* ⚡ Analyzed 32 legacy Python files → Found **32 features** and **81 stories** in **3 seconds**
|
|
333
|
+
* 🚫 Set enforcement → **Blocked 2 HIGH violations** automatically
|
|
334
|
+
* 📊 Compared plans → Found **24 deviations** in **5 seconds**
|
|
267
335
|
|
|
268
336
|
**Total time**: < 10 seconds | **Result**: Found real bugs and inconsistencies
|
|
269
337
|
|
|
@@ -278,41 +346,43 @@ We ran SpecFact CLI **on itself** to prove it works:
|
|
|
278
346
|
**New to SpecFact?**
|
|
279
347
|
|
|
280
348
|
1. **[Getting Started](docs/getting-started/README.md)** - Install and first commands
|
|
281
|
-
2. **[
|
|
282
|
-
3. **[
|
|
283
|
-
4. **[
|
|
349
|
+
2. **[Tutorial: Using SpecFact with OpenSpec or Spec-Kit](docs/getting-started/tutorial-openspec-speckit.md)** ⭐ **NEW** - Complete beginner-friendly tutorial
|
|
350
|
+
3. **[Modernizing Legacy Code?](docs/guides/brownfield-engineer.md)** ⭐ - Complete guide
|
|
351
|
+
4. **[Use Cases](docs/guides/use-cases.md)** - Common scenarios
|
|
352
|
+
5. **[Command Reference](docs/reference/commands.md)** - All commands
|
|
284
353
|
|
|
285
354
|
**Working with a Team?**
|
|
286
355
|
|
|
287
|
-
|
|
288
|
-
|
|
356
|
+
* **[Agile/Scrum Workflows](docs/guides/agile-scrum-workflows.md)** ⭐ - Persona-based collaboration
|
|
357
|
+
* **[Project Commands](docs/reference/commands.md#project---project-bundle-management)** - Export/import workflows
|
|
289
358
|
|
|
290
359
|
**Want Integrations?**
|
|
291
360
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
361
|
+
* **[IDE Integration](docs/guides/ide-integration.md)** - VS Code, Cursor setup
|
|
362
|
+
* **[Integration Showcases](docs/examples/integration-showcases/)** - Real bugs fixed
|
|
363
|
+
* **[GitHub Actions](docs/guides/use-cases.md#use-case-4-cicd-integration)** - CI/CD setup
|
|
295
364
|
|
|
296
365
|
**Advanced Topics**
|
|
297
366
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
367
|
+
* **[Architecture](docs/reference/architecture.md)** - How it works
|
|
368
|
+
* **[Schema Versioning](docs/reference/schema-versioning.md)** - Bundle schemas
|
|
369
|
+
* **[Testing Guide](docs/technical/testing.md)** - Development setup
|
|
301
370
|
|
|
302
371
|
👉 **[Full Documentation Index](docs/README.md)** - Browse all documentation
|
|
303
372
|
|
|
304
373
|
---
|
|
305
374
|
|
|
306
|
-
## Version 0.
|
|
375
|
+
## Version 0.22.0
|
|
307
376
|
|
|
308
|
-
**Latest release** introduces
|
|
377
|
+
**Latest release** introduces bridge adapter architecture refactoring and OpenSpec integration.
|
|
309
378
|
|
|
310
379
|
**What's New:**
|
|
311
380
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
381
|
+
* ✅ **Bridge Adapter Architecture** - Plugin-based adapter registry pattern for extensible tool integration
|
|
382
|
+
* ✅ **OpenSpec Adapter** - Read-only sync from OpenSpec to SpecFact (v0.22.0+)
|
|
383
|
+
* ✅ **SpecKitAdapter** - Refactored Spec-Kit integration using adapter pattern
|
|
384
|
+
* ✅ **Command Updates** - Constitution commands moved to `specfact sdd constitution`
|
|
385
|
+
* ✅ **Breaking Changes** - Removed `specfact bridge` command group, `implement`, and `generate tasks` commands
|
|
316
386
|
|
|
317
387
|
👉 **[Changelog](CHANGELOG.md)** - Complete release history
|
|
318
388
|
|
|
@@ -322,21 +392,21 @@ We ran SpecFact CLI **on itself** to prove it works:
|
|
|
322
392
|
|
|
323
393
|
### Works with Your Existing Tools
|
|
324
394
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
395
|
+
* ✅ **No new platform** - Pure CLI, works offline
|
|
396
|
+
* ✅ **No account required** - Fully local, zero vendor lock-in
|
|
397
|
+
* ✅ **Integrates everywhere** - VS Code, Cursor, GitHub Actions, pre-commit hooks
|
|
328
398
|
|
|
329
399
|
### Built for Real Teams
|
|
330
400
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
401
|
+
* ✅ **Role-based workflows** - Product Owners, Architects, Developers work in parallel
|
|
402
|
+
* ✅ **Markdown-based** - No YAML editing, human-readable conflicts
|
|
403
|
+
* ✅ **Agile/scrum ready** - DoR checklists, story points, sprint planning
|
|
334
404
|
|
|
335
405
|
### Proven Results
|
|
336
406
|
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
407
|
+
* ✅ **Catches real bugs** - See [Integration Showcases](docs/examples/integration-showcases/)
|
|
408
|
+
* ✅ **Prevents regressions** - Runtime contract enforcement
|
|
409
|
+
* ✅ **Works on legacy code** - Analyzed itself successfully
|
|
340
410
|
|
|
341
411
|
---
|
|
342
412
|
|
|
@@ -357,9 +427,9 @@ hatch run contract-test-full
|
|
|
357
427
|
|
|
358
428
|
**Apache License 2.0** - Open source and enterprise-friendly
|
|
359
429
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
430
|
+
* ✅ Free to use for any purpose (commercial or non-commercial)
|
|
431
|
+
* ✅ Modify and distribute as needed
|
|
432
|
+
* ✅ Enterprise-friendly with explicit patent grant
|
|
363
433
|
|
|
364
434
|
[Full license](LICENSE.md)
|
|
365
435
|
|
|
@@ -367,10 +437,10 @@ hatch run contract-test-full
|
|
|
367
437
|
|
|
368
438
|
## Support
|
|
369
439
|
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
440
|
+
* 💬 **Questions?** [GitHub Discussions](https://github.com/nold-ai/specfact-cli/discussions)
|
|
441
|
+
* 🐛 **Found a bug?** [GitHub Issues](https://github.com/nold-ai/specfact-cli/issues)
|
|
442
|
+
* 📧 **Need help?** [hello@noldai.com](mailto:hello@noldai.com)
|
|
443
|
+
* 🌐 **Learn more:** [noldai.com](https://noldai.com)
|
|
374
444
|
|
|
375
445
|
---
|
|
376
446
|
|
|
@@ -378,7 +448,7 @@ hatch run contract-test-full
|
|
|
378
448
|
|
|
379
449
|
**Built with ❤️ by [NOLD AI](https://noldai.com)**
|
|
380
450
|
|
|
381
|
-
Copyright © 2025 Nold AI (Owner: Dominikus Nold)
|
|
451
|
+
Copyright © 2025-2026 Nold AI (Owner: Dominikus Nold)
|
|
382
452
|
|
|
383
453
|
**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.
|
|
384
454
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specfact-cli"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.22.0"
|
|
8
8
|
description = "Brownfield-first CLI: Reverse engineer legacy Python → specs → enforced contracts. Automate legacy code documentation and prevent modernization regressions."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -9,10 +9,14 @@ from __future__ import annotations
|
|
|
9
9
|
|
|
10
10
|
from specfact_cli.adapters.base import BridgeAdapter
|
|
11
11
|
from specfact_cli.adapters.github import GitHubAdapter
|
|
12
|
+
from specfact_cli.adapters.openspec import OpenSpecAdapter
|
|
12
13
|
from specfact_cli.adapters.registry import AdapterRegistry
|
|
14
|
+
from specfact_cli.adapters.speckit import SpecKitAdapter
|
|
13
15
|
|
|
14
16
|
|
|
15
17
|
# Auto-register built-in adapters
|
|
16
18
|
AdapterRegistry.register("github", GitHubAdapter)
|
|
19
|
+
AdapterRegistry.register("openspec", OpenSpecAdapter)
|
|
20
|
+
AdapterRegistry.register("speckit", SpecKitAdapter)
|
|
17
21
|
|
|
18
|
-
__all__ = ["AdapterRegistry", "BridgeAdapter", "GitHubAdapter"]
|
|
22
|
+
__all__ = ["AdapterRegistry", "BridgeAdapter", "GitHubAdapter", "OpenSpecAdapter", "SpecKitAdapter"]
|