specfact-cli 0.16.3__tar.gz → 0.20.1__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.16.3 → specfact_cli-0.20.1}/PKG-INFO +60 -7
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/README.md +59 -6
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/pyproject.toml +1 -1
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/github-action.yml.j2 +32 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/__init__.py +1 -1
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/__init__.py +1 -1
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/cli.py +0 -2
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/__init__.py +0 -1
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/generate.py +656 -59
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/implement.py +22 -14
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/init.py +95 -9
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/project_cmd.py +202 -1
- specfact_cli-0.20.1/src/specfact_cli/commands/repro.py +459 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/resources/semgrep/code-quality.yml +4 -5
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/resources/semgrep/feature-detection.yml +16 -17
- specfact_cli-0.20.1/src/specfact_cli/utils/env_manager.py +443 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/validators/repro_checker.py +154 -52
- specfact_cli-0.20.1/src/specfact_cli/versioning/__init__.py +16 -0
- specfact_cli-0.20.1/src/specfact_cli/versioning/analyzer.py +235 -0
- specfact_cli-0.16.3/src/specfact_cli/commands/repro.py +0 -226
- specfact_cli-0.16.3/src/specfact_cli/commands/run.py +0 -604
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/.gitignore +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/LICENSE.md +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/mappings/node-async.yaml +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/mappings/python-async.yaml +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/mappings/speckit-default.yaml +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/shared/cli-enforcement.md +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.01-import.md +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.02-plan.md +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.03-review.md +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.04-sdd.md +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.05-enforce.md +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.06-sync.md +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.07-contracts.md +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.compare.md +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.validate.md +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/schemas/deviation.schema.json +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/schemas/plan.schema.json +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/schemas/protocol.schema.json +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/persona/architect.md.j2 +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/persona/developer.md.j2 +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/persona/product-owner.md.j2 +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/plan.bundle.yaml.j2 +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/pr-template.md.j2 +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/protocol.yaml.j2 +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/telemetry.yaml.example +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/agents/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/agents/analyze_agent.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/agents/base.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/agents/plan_agent.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/agents/registry.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/agents/sync_agent.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/ambiguity_scanner.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/code_analyzer.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/constitution_evidence_extractor.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/contract_extractor.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/control_flow_analyzer.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/graph_analyzer.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/relationship_mapper.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/requirement_extractor.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/test_pattern_extractor.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/analyze.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/bridge.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/contract_cmd.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/drift.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/enforce.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/import_cmd.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/migrate.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/plan.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/sdd.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/spec.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/sync.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/common/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/common/logger_setup.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/common/logging_utils.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/common/text_utils.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/common/utils.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/comparators/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/comparators/plan_comparator.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/enrichers/constitution_enricher.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/enrichers/plan_enricher.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/contract_generator.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/openapi_extractor.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/persona_exporter.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/plan_generator.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/protocol_generator.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/report_generator.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/task_generator.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/test_to_openapi.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/workflow_generator.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/importers/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/importers/speckit_converter.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/importers/speckit_scanner.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/integrations/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/integrations/specmatic.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/merge/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/merge/resolver.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/migrations/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/migrations/plan_migrator.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/bridge.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/contract.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/deviation.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/enforcement.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/persona_template.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/plan.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/project.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/protocol.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/quality.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/sdd.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/source_tracking.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/task.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/modes/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/modes/detector.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/modes/router.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/parsers/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/parsers/persona_importer.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/resources/semgrep/async.yml +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/runtime.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/bridge_probe.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/bridge_sync.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/bridge_watch.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/change_detector.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/code_to_spec.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/drift_detector.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/repository_sync.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/spec_to_code.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/spec_to_tests.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/speckit_sync.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/watcher.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/watcher_enhanced.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/telemetry.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/templates/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/templates/bridge_templates.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/templates/specification_templates.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/acceptance_criteria.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/bundle_loader.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/console.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/context_detection.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/enrichment_context.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/enrichment_parser.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/feature_keys.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/git.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/github_annotations.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/ide_setup.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/incremental_check.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/optional_deps.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/performance.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/progress.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/progressive_disclosure.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/prompts.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/sdd_discovery.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/source_scanner.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/structure.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/structured_io.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/suggestions.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/yaml_utils.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/validators/__init__.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/validators/agile_validation.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/validators/cli_first_validator.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/validators/contract_validator.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/validators/fsm.py +0 -0
- {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/validators/schema.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: specfact-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.20.1
|
|
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
|
|
@@ -276,7 +276,7 @@ Description-Content-Type: text/markdown
|
|
|
276
276
|
# SpecFact CLI
|
|
277
277
|
|
|
278
278
|
> **Stop vibe coding. Start shipping quality code with contracts.**
|
|
279
|
-
> Brownfield-first CLI:
|
|
279
|
+
> Brownfield-first CLI: Analyze legacy Python → find gaps → enforce contracts
|
|
280
280
|
|
|
281
281
|
[](https://pypi.org/project/specfact-cli/)
|
|
282
282
|
[](https://pypi.org/project/specfact-cli/)
|
|
@@ -291,16 +291,45 @@ Description-Content-Type: text/markdown
|
|
|
291
291
|
|
|
292
292
|
---
|
|
293
293
|
|
|
294
|
+
## 📋 Current Version: 0.20.0 LTS (Long-Term Stable)
|
|
295
|
+
|
|
296
|
+
**🎉 v0.20.0 is the Long-Term Stable (LTS) release!** This version marks the stabilization of SpecFact CLI's core analysis and enforcement capabilities.
|
|
297
|
+
|
|
298
|
+
**SpecFact 0.20.0 LTS focuses on what it does best: analyzing legacy code and enforcing contracts.** This LTS release is production-ready and will receive bug fixes and security updates until v1.0 GA.
|
|
299
|
+
|
|
300
|
+
| Capability | Status | Description |
|
|
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** | ✅ New | Generate prompts for Cursor, Copilot, Claude |
|
|
307
|
+
| **Code Generation** | ⚠️ Deprecated | Coming in v1.0 with AI-assisted workflow |
|
|
308
|
+
|
|
309
|
+
**Need code generation?** Use the new bridge commands to get AI-ready prompts:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
# Get AI prompt to fix a gap
|
|
313
|
+
specfact generate fix-prompt GAP-001 --bundle legacy-api
|
|
314
|
+
|
|
315
|
+
# Get AI prompt to generate tests
|
|
316
|
+
specfact generate test-prompt src/auth/login.py
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
These prompts work with any AI IDE (Cursor, Copilot, Claude Code, etc.) - you control the code generation, SpecFact validates the results.
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
294
323
|
## 🚀 Quick Start in 60 Seconds
|
|
295
324
|
|
|
296
325
|
### Install in 10 seconds
|
|
297
326
|
|
|
298
327
|
```bash
|
|
299
328
|
# Zero-install (recommended)
|
|
300
|
-
uvx
|
|
329
|
+
uvx specfact-cli
|
|
301
330
|
|
|
302
|
-
# Or install with pip
|
|
303
|
-
pip install specfact-cli
|
|
331
|
+
# Or install with pip (upgrade if already installed)
|
|
332
|
+
pip install -U specfact-cli
|
|
304
333
|
```
|
|
305
334
|
|
|
306
335
|
### Your first command (< 60 seconds)
|
|
@@ -324,9 +353,9 @@ That's it! 🎉
|
|
|
324
353
|
|
|
325
354
|
## What is SpecFact CLI?
|
|
326
355
|
|
|
327
|
-
A brownfield-first CLI that **
|
|
356
|
+
A brownfield-first CLI that **analyzes your legacy code** to find gaps, then **enforces contracts** to prevent regressions during modernization.
|
|
328
357
|
|
|
329
|
-
**Stop vibe coding. Start shipping quality code with contracts.** SpecFact automatically extracts specs from existing code, then enforces them as you modernize—preventing bugs before they reach production.
|
|
358
|
+
**Stop vibe coding. Start shipping quality code with contracts.** SpecFact automatically extracts specs from existing code, finds missing tests and contracts, then enforces them as you modernize—preventing bugs before they reach production.
|
|
330
359
|
|
|
331
360
|
**Perfect for:** Teams modernizing legacy Python systems, data pipelines, DevOps scripts
|
|
332
361
|
|
|
@@ -436,6 +465,30 @@ SpecFact CLI works with your existing tools—no new platform to learn. See real
|
|
|
436
465
|
|
|
437
466
|
**Core USP**: Pure CLI-first approach—works offline, no account required, zero vendor lock-in. Regularly showcases successful integrations that fix bugs not detected by other tools.
|
|
438
467
|
|
|
468
|
+
### 🤖 AI IDE Bridge (New in 0.17)
|
|
469
|
+
|
|
470
|
+
SpecFact now generates prompts you can use with any AI IDE for code generation:
|
|
471
|
+
|
|
472
|
+
```bash
|
|
473
|
+
# 1. Analyze your code to find gaps
|
|
474
|
+
specfact analyze gaps --bundle legacy-api
|
|
475
|
+
|
|
476
|
+
# 2. Generate AI prompt to fix a specific gap
|
|
477
|
+
specfact generate fix-prompt GAP-001
|
|
478
|
+
|
|
479
|
+
# 3. Copy prompt to your AI IDE (Cursor, Copilot, Claude)
|
|
480
|
+
# 4. AI generates the fix
|
|
481
|
+
# 5. Validate with SpecFact
|
|
482
|
+
specfact enforce sdd --bundle legacy-api
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
**Why this approach?**
|
|
486
|
+
|
|
487
|
+
- ✅ **You control the AI** - Use your preferred AI IDE and model
|
|
488
|
+
- ✅ **SpecFact validates** - Ensure AI-generated code meets contracts
|
|
489
|
+
- ✅ **No lock-in** - Works with Cursor, Copilot, Claude Code, or any AI tool
|
|
490
|
+
- ✅ **Quality gates** - Prevent AI hallucinations from reaching production
|
|
491
|
+
|
|
439
492
|
---
|
|
440
493
|
|
|
441
494
|
## See It In Action
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# SpecFact CLI
|
|
2
2
|
|
|
3
3
|
> **Stop vibe coding. Start shipping quality code with contracts.**
|
|
4
|
-
> Brownfield-first CLI:
|
|
4
|
+
> Brownfield-first CLI: Analyze legacy Python → find gaps → enforce contracts
|
|
5
5
|
|
|
6
6
|
[](https://pypi.org/project/specfact-cli/)
|
|
7
7
|
[](https://pypi.org/project/specfact-cli/)
|
|
@@ -16,16 +16,45 @@
|
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
+
## 📋 Current Version: 0.20.0 LTS (Long-Term Stable)
|
|
20
|
+
|
|
21
|
+
**🎉 v0.20.0 is the Long-Term Stable (LTS) release!** This version marks the stabilization of SpecFact CLI's core analysis and enforcement capabilities.
|
|
22
|
+
|
|
23
|
+
**SpecFact 0.20.0 LTS focuses on what it does best: analyzing legacy code and enforcing contracts.** This LTS release is production-ready and will receive bug fixes and security updates until v1.0 GA.
|
|
24
|
+
|
|
25
|
+
| Capability | Status | Description |
|
|
26
|
+
|------------|--------|-------------|
|
|
27
|
+
| **Code Analysis** | ✅ Stable | Reverse engineer legacy code into documented specs |
|
|
28
|
+
| **Gap Detection** | ✅ Stable | Find missing tests, contracts, and documentation |
|
|
29
|
+
| **Contract Enforcement** | ✅ Stable | Prevent regressions with runtime validation |
|
|
30
|
+
| **API Contract Testing** | ✅ Stable | Validate OpenAPI specs with Specmatic |
|
|
31
|
+
| **AI IDE Bridge** | ✅ New | Generate prompts for Cursor, Copilot, Claude |
|
|
32
|
+
| **Code Generation** | ⚠️ Deprecated | Coming in v1.0 with AI-assisted workflow |
|
|
33
|
+
|
|
34
|
+
**Need code generation?** Use the new bridge commands to get AI-ready prompts:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Get AI prompt to fix a gap
|
|
38
|
+
specfact generate fix-prompt GAP-001 --bundle legacy-api
|
|
39
|
+
|
|
40
|
+
# Get AI prompt to generate tests
|
|
41
|
+
specfact generate test-prompt src/auth/login.py
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
These prompts work with any AI IDE (Cursor, Copilot, Claude Code, etc.) - you control the code generation, SpecFact validates the results.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
19
48
|
## 🚀 Quick Start in 60 Seconds
|
|
20
49
|
|
|
21
50
|
### Install in 10 seconds
|
|
22
51
|
|
|
23
52
|
```bash
|
|
24
53
|
# Zero-install (recommended)
|
|
25
|
-
uvx
|
|
54
|
+
uvx specfact-cli
|
|
26
55
|
|
|
27
|
-
# Or install with pip
|
|
28
|
-
pip install specfact-cli
|
|
56
|
+
# Or install with pip (upgrade if already installed)
|
|
57
|
+
pip install -U specfact-cli
|
|
29
58
|
```
|
|
30
59
|
|
|
31
60
|
### Your first command (< 60 seconds)
|
|
@@ -49,9 +78,9 @@ That's it! 🎉
|
|
|
49
78
|
|
|
50
79
|
## What is SpecFact CLI?
|
|
51
80
|
|
|
52
|
-
A brownfield-first CLI that **
|
|
81
|
+
A brownfield-first CLI that **analyzes your legacy code** to find gaps, then **enforces contracts** to prevent regressions during modernization.
|
|
53
82
|
|
|
54
|
-
**Stop vibe coding. Start shipping quality code with contracts.** SpecFact automatically extracts specs from existing code, then enforces them as you modernize—preventing bugs before they reach production.
|
|
83
|
+
**Stop vibe coding. Start shipping quality code with contracts.** SpecFact automatically extracts specs from existing code, finds missing tests and contracts, then enforces them as you modernize—preventing bugs before they reach production.
|
|
55
84
|
|
|
56
85
|
**Perfect for:** Teams modernizing legacy Python systems, data pipelines, DevOps scripts
|
|
57
86
|
|
|
@@ -161,6 +190,30 @@ SpecFact CLI works with your existing tools—no new platform to learn. See real
|
|
|
161
190
|
|
|
162
191
|
**Core USP**: Pure CLI-first approach—works offline, no account required, zero vendor lock-in. Regularly showcases successful integrations that fix bugs not detected by other tools.
|
|
163
192
|
|
|
193
|
+
### 🤖 AI IDE Bridge (New in 0.17)
|
|
194
|
+
|
|
195
|
+
SpecFact now generates prompts you can use with any AI IDE for code generation:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
# 1. Analyze your code to find gaps
|
|
199
|
+
specfact analyze gaps --bundle legacy-api
|
|
200
|
+
|
|
201
|
+
# 2. Generate AI prompt to fix a specific gap
|
|
202
|
+
specfact generate fix-prompt GAP-001
|
|
203
|
+
|
|
204
|
+
# 3. Copy prompt to your AI IDE (Cursor, Copilot, Claude)
|
|
205
|
+
# 4. AI generates the fix
|
|
206
|
+
# 5. Validate with SpecFact
|
|
207
|
+
specfact enforce sdd --bundle legacy-api
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Why this approach?**
|
|
211
|
+
|
|
212
|
+
- ✅ **You control the AI** - Use your preferred AI IDE and model
|
|
213
|
+
- ✅ **SpecFact validates** - Ensure AI-generated code meets contracts
|
|
214
|
+
- ✅ **No lock-in** - Works with Cursor, Copilot, Claude Code, or any AI tool
|
|
215
|
+
- ✅ **Quality gates** - Prevent AI hallucinations from reaching production
|
|
216
|
+
|
|
164
217
|
---
|
|
165
218
|
|
|
166
219
|
## See It In Action
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "specfact-cli"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.20.1"
|
|
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"
|
|
@@ -31,6 +31,15 @@ on:
|
|
|
31
31
|
- block
|
|
32
32
|
- warn
|
|
33
33
|
- log
|
|
34
|
+
version_check_mode:
|
|
35
|
+
description: "Version check mode (info, warn, block)"
|
|
36
|
+
required: false
|
|
37
|
+
default: "warn"
|
|
38
|
+
type: choice
|
|
39
|
+
options:
|
|
40
|
+
- info
|
|
41
|
+
- warn
|
|
42
|
+
- block
|
|
34
43
|
|
|
35
44
|
jobs:
|
|
36
45
|
specfact-validation:
|
|
@@ -65,10 +74,13 @@ jobs:
|
|
|
65
74
|
run: |
|
|
66
75
|
BUDGET="${INPUT_BUDGET:-{{ budget }}}"
|
|
67
76
|
MODE="${INPUT_MODE:-block}"
|
|
77
|
+
VERSION_CHECK_MODE="${INPUT_VERSION_CHECK_MODE:-info}"
|
|
68
78
|
echo "budget=$BUDGET" >> $GITHUB_OUTPUT
|
|
69
79
|
echo "mode=$MODE" >> $GITHUB_OUTPUT
|
|
80
|
+
echo "version_check_mode=$VERSION_CHECK_MODE" >> $GITHUB_OUTPUT
|
|
70
81
|
echo "SPECFACT_BUDGET=$BUDGET" >> $GITHUB_ENV
|
|
71
82
|
echo "SPECFACT_MODE=$MODE" >> $GITHUB_ENV
|
|
83
|
+
echo "SPECFACT_VERSION_CHECK_MODE=$VERSION_CHECK_MODE" >> $GITHUB_ENV
|
|
72
84
|
|
|
73
85
|
- name: Run Contract Validation
|
|
74
86
|
id: repro
|
|
@@ -77,6 +89,26 @@ jobs:
|
|
|
77
89
|
specfact repro --verbose --budget {% raw %}${{ steps.validation.outputs.budget }}{% endraw %} || true
|
|
78
90
|
echo "exit_code=$?" >> $GITHUB_OUTPUT
|
|
79
91
|
|
|
92
|
+
- name: Version check
|
|
93
|
+
id: version_check
|
|
94
|
+
continue-on-error: true
|
|
95
|
+
run: |
|
|
96
|
+
VERSION_CHECK_MODE="{% raw %}${{ steps.validation.outputs.version_check_mode }}{% endraw %}"
|
|
97
|
+
echo "📌 Checking bundle version recommendation (mode: $VERSION_CHECK_MODE)..."
|
|
98
|
+
if specfact project version check --repo .; then
|
|
99
|
+
echo "version_check_passed=true" >> $GITHUB_OUTPUT
|
|
100
|
+
else
|
|
101
|
+
echo "version_check_passed=false" >> $GITHUB_OUTPUT
|
|
102
|
+
if [ "$VERSION_CHECK_MODE" = "warn" ]; then
|
|
103
|
+
echo "⚠️ Version check recommendation not followed (warn mode - continuing)"
|
|
104
|
+
elif [ "$VERSION_CHECK_MODE" = "block" ]; then
|
|
105
|
+
echo "❌ Version check recommendation not followed (block mode - failing)"
|
|
106
|
+
exit 1
|
|
107
|
+
else
|
|
108
|
+
echo "ℹ️ Version check recommendation available (info mode - continuing)"
|
|
109
|
+
fi
|
|
110
|
+
fi
|
|
111
|
+
|
|
80
112
|
- name: Find latest repro report
|
|
81
113
|
id: report
|
|
82
114
|
if: always()
|
|
@@ -68,7 +68,6 @@ from specfact_cli.commands import (
|
|
|
68
68
|
plan,
|
|
69
69
|
project_cmd,
|
|
70
70
|
repro,
|
|
71
|
-
run,
|
|
72
71
|
sdd,
|
|
73
72
|
spec,
|
|
74
73
|
sync,
|
|
@@ -329,7 +328,6 @@ app.add_typer(implement.app, name="implement", help="Execute tasks and generate
|
|
|
329
328
|
app.add_typer(enforce.app, name="enforce", help="Configure quality gates")
|
|
330
329
|
|
|
331
330
|
# 7. Workflow Orchestration
|
|
332
|
-
app.add_typer(run.app, name="run", help="Orchestrate end-to-end workflows")
|
|
333
331
|
|
|
334
332
|
# 8. Validation
|
|
335
333
|
app.add_typer(repro.app, name="repro", help="Run validation suite")
|