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.
Files changed (167) hide show
  1. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/PKG-INFO +60 -7
  2. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/README.md +59 -6
  3. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/pyproject.toml +1 -1
  4. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/github-action.yml.j2 +32 -0
  5. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/__init__.py +1 -1
  6. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/__init__.py +1 -1
  7. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/cli.py +0 -2
  8. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/__init__.py +0 -1
  9. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/generate.py +656 -59
  10. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/implement.py +22 -14
  11. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/init.py +95 -9
  12. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/project_cmd.py +202 -1
  13. specfact_cli-0.20.1/src/specfact_cli/commands/repro.py +459 -0
  14. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/resources/semgrep/code-quality.yml +4 -5
  15. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/resources/semgrep/feature-detection.yml +16 -17
  16. specfact_cli-0.20.1/src/specfact_cli/utils/env_manager.py +443 -0
  17. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/validators/repro_checker.py +154 -52
  18. specfact_cli-0.20.1/src/specfact_cli/versioning/__init__.py +16 -0
  19. specfact_cli-0.20.1/src/specfact_cli/versioning/analyzer.py +235 -0
  20. specfact_cli-0.16.3/src/specfact_cli/commands/repro.py +0 -226
  21. specfact_cli-0.16.3/src/specfact_cli/commands/run.py +0 -604
  22. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/.gitignore +0 -0
  23. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/LICENSE.md +0 -0
  24. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/mappings/node-async.yaml +0 -0
  25. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/mappings/python-async.yaml +0 -0
  26. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/mappings/speckit-default.yaml +0 -0
  27. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/shared/cli-enforcement.md +0 -0
  28. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.01-import.md +0 -0
  29. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.02-plan.md +0 -0
  30. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.03-review.md +0 -0
  31. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.04-sdd.md +0 -0
  32. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.05-enforce.md +0 -0
  33. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.06-sync.md +0 -0
  34. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.07-contracts.md +0 -0
  35. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.compare.md +0 -0
  36. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/prompts/specfact.validate.md +0 -0
  37. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/schemas/deviation.schema.json +0 -0
  38. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/schemas/plan.schema.json +0 -0
  39. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/schemas/protocol.schema.json +0 -0
  40. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/persona/architect.md.j2 +0 -0
  41. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/persona/developer.md.j2 +0 -0
  42. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/persona/product-owner.md.j2 +0 -0
  43. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/plan.bundle.yaml.j2 +0 -0
  44. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/pr-template.md.j2 +0 -0
  45. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/protocol.yaml.j2 +0 -0
  46. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/resources/templates/telemetry.yaml.example +0 -0
  47. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/agents/__init__.py +0 -0
  48. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/agents/analyze_agent.py +0 -0
  49. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/agents/base.py +0 -0
  50. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/agents/plan_agent.py +0 -0
  51. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/agents/registry.py +0 -0
  52. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/agents/sync_agent.py +0 -0
  53. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/__init__.py +0 -0
  54. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/ambiguity_scanner.py +0 -0
  55. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/code_analyzer.py +0 -0
  56. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/constitution_evidence_extractor.py +0 -0
  57. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/contract_extractor.py +0 -0
  58. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/control_flow_analyzer.py +0 -0
  59. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/graph_analyzer.py +0 -0
  60. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/relationship_mapper.py +0 -0
  61. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/requirement_extractor.py +0 -0
  62. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/analyzers/test_pattern_extractor.py +0 -0
  63. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/analyze.py +0 -0
  64. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/bridge.py +0 -0
  65. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/contract_cmd.py +0 -0
  66. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/drift.py +0 -0
  67. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/enforce.py +0 -0
  68. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/import_cmd.py +0 -0
  69. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/migrate.py +0 -0
  70. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/plan.py +0 -0
  71. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/sdd.py +0 -0
  72. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/spec.py +0 -0
  73. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/commands/sync.py +0 -0
  74. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/common/__init__.py +0 -0
  75. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/common/logger_setup.py +0 -0
  76. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/common/logging_utils.py +0 -0
  77. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/common/text_utils.py +0 -0
  78. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/common/utils.py +0 -0
  79. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/comparators/__init__.py +0 -0
  80. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/comparators/plan_comparator.py +0 -0
  81. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/enrichers/constitution_enricher.py +0 -0
  82. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/enrichers/plan_enricher.py +0 -0
  83. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/__init__.py +0 -0
  84. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/contract_generator.py +0 -0
  85. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/openapi_extractor.py +0 -0
  86. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/persona_exporter.py +0 -0
  87. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/plan_generator.py +0 -0
  88. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/protocol_generator.py +0 -0
  89. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/report_generator.py +0 -0
  90. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/task_generator.py +0 -0
  91. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/test_to_openapi.py +0 -0
  92. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/generators/workflow_generator.py +0 -0
  93. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/importers/__init__.py +0 -0
  94. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/importers/speckit_converter.py +0 -0
  95. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/importers/speckit_scanner.py +0 -0
  96. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/integrations/__init__.py +0 -0
  97. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/integrations/specmatic.py +0 -0
  98. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/merge/__init__.py +0 -0
  99. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/merge/resolver.py +0 -0
  100. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/migrations/__init__.py +0 -0
  101. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/migrations/plan_migrator.py +0 -0
  102. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/__init__.py +0 -0
  103. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/bridge.py +0 -0
  104. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/contract.py +0 -0
  105. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/deviation.py +0 -0
  106. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/enforcement.py +0 -0
  107. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/persona_template.py +0 -0
  108. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/plan.py +0 -0
  109. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/project.py +0 -0
  110. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/protocol.py +0 -0
  111. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/quality.py +0 -0
  112. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/sdd.py +0 -0
  113. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/source_tracking.py +0 -0
  114. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/models/task.py +0 -0
  115. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/modes/__init__.py +0 -0
  116. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/modes/detector.py +0 -0
  117. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/modes/router.py +0 -0
  118. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/parsers/__init__.py +0 -0
  119. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/parsers/persona_importer.py +0 -0
  120. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/resources/semgrep/async.yml +0 -0
  121. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/runtime.py +0 -0
  122. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/__init__.py +0 -0
  123. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/bridge_probe.py +0 -0
  124. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/bridge_sync.py +0 -0
  125. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/bridge_watch.py +0 -0
  126. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/change_detector.py +0 -0
  127. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/code_to_spec.py +0 -0
  128. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/drift_detector.py +0 -0
  129. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/repository_sync.py +0 -0
  130. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/spec_to_code.py +0 -0
  131. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/spec_to_tests.py +0 -0
  132. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/speckit_sync.py +0 -0
  133. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/watcher.py +0 -0
  134. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/sync/watcher_enhanced.py +0 -0
  135. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/telemetry.py +0 -0
  136. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/templates/__init__.py +0 -0
  137. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/templates/bridge_templates.py +0 -0
  138. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/templates/specification_templates.py +0 -0
  139. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/__init__.py +0 -0
  140. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/acceptance_criteria.py +0 -0
  141. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/bundle_loader.py +0 -0
  142. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/console.py +0 -0
  143. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/context_detection.py +0 -0
  144. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/enrichment_context.py +0 -0
  145. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/enrichment_parser.py +0 -0
  146. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/feature_keys.py +0 -0
  147. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/git.py +0 -0
  148. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/github_annotations.py +0 -0
  149. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/ide_setup.py +0 -0
  150. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/incremental_check.py +0 -0
  151. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/optional_deps.py +0 -0
  152. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/performance.py +0 -0
  153. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/progress.py +0 -0
  154. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/progressive_disclosure.py +0 -0
  155. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/prompts.py +0 -0
  156. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/sdd_discovery.py +0 -0
  157. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/source_scanner.py +0 -0
  158. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/structure.py +0 -0
  159. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/structured_io.py +0 -0
  160. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/suggestions.py +0 -0
  161. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/utils/yaml_utils.py +0 -0
  162. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/validators/__init__.py +0 -0
  163. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/validators/agile_validation.py +0 -0
  164. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/validators/cli_first_validator.py +0 -0
  165. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/validators/contract_validator.py +0 -0
  166. {specfact_cli-0.16.3 → specfact_cli-0.20.1}/src/specfact_cli/validators/fsm.py +0 -0
  167. {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.16.3
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: Reverse engineer legacy Python → specsenforced contracts
279
+ > Brownfield-first CLI: Analyze legacy Python → find gaps enforce contracts
280
280
 
281
281
  [![PyPI version](https://img.shields.io/pypi/v/specfact-cli.svg)](https://pypi.org/project/specfact-cli/)
282
282
  [![Python versions](https://img.shields.io/pypi/pyversions/specfact-cli.svg)](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 --from specfact-cli specfact
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 **reverse engineers your legacy code** into documented specs, then prevents regressions with runtime contract enforcement.
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: Reverse engineer legacy Python → specsenforced contracts
4
+ > Brownfield-first CLI: Analyze legacy Python → find gaps enforce contracts
5
5
 
6
6
  [![PyPI version](https://img.shields.io/pypi/v/specfact-cli.svg)](https://pypi.org/project/specfact-cli/)
7
7
  [![Python versions](https://img.shields.io/pypi/pyversions/specfact-cli.svg)](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 --from specfact-cli specfact
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 **reverse engineers your legacy code** into documented specs, then prevents regressions with runtime contract enforcement.
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.16.3"
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()
@@ -3,4 +3,4 @@ SpecFact CLI - Spec→Contract→Sentinel tool for contract-driven development.
3
3
  """
4
4
 
5
5
  # Define the package version (kept in sync with pyproject.toml and setup.py)
6
- __version__ = "0.16.3"
6
+ __version__ = "0.20.1"
@@ -9,6 +9,6 @@ This package provides command-line tools for:
9
9
  - Validating reproducibility
10
10
  """
11
11
 
12
- __version__ = "0.16.3"
12
+ __version__ = "0.20.1"
13
13
 
14
14
  __all__ = ["__version__"]
@@ -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")
@@ -18,7 +18,6 @@ from specfact_cli.commands import (
18
18
  plan,
19
19
  project_cmd,
20
20
  repro,
21
- run,
22
21
  sdd,
23
22
  spec,
24
23
  sync,