specfact-cli 0.44.0__tar.gz → 0.46.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.
Files changed (280) hide show
  1. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/PKG-INFO +97 -248
  2. specfact_cli-0.46.0/README.md +166 -0
  3. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/pyproject.toml +36 -20
  4. specfact_cli-0.46.0/resources/templates/github-action.yml.j2 +200 -0
  5. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/templates/pr-template.md.j2 +9 -0
  6. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/__init__.py +1 -1
  7. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/__init__.py +1 -1
  8. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/adapters/ado.py +122 -141
  9. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/adapters/github.py +118 -79
  10. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/adapters/openspec_parser.py +13 -15
  11. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/adapters/speckit.py +76 -38
  12. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/analyzers/ambiguity_scanner.py +17 -24
  13. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/analyzers/code_analyzer.py +113 -100
  14. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/analyzers/graph_analyzer.py +26 -5
  15. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/cli.py +200 -74
  16. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/common/logger_setup.py +62 -34
  17. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/common/logging_utils.py +3 -2
  18. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/generators/contract_generator.py +23 -25
  19. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/generators/openapi_extractor.py +57 -54
  20. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/generators/persona_exporter.py +29 -16
  21. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/generators/plan_generator.py +4 -2
  22. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/generators/test_to_openapi.py +34 -26
  23. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/generators/workflow_generator.py +7 -2
  24. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/project.py +33 -27
  25. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/init/module-package.yaml +3 -3
  26. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/init/src/commands.py +15 -0
  27. specfact_cli-0.46.0/src/specfact_cli/modules/init/src/first_run_selection.py +357 -0
  28. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/module_registry/module-package.yaml +3 -3
  29. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/module_registry/src/commands.py +508 -105
  30. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/bootstrap.py +12 -2
  31. specfact_cli-0.46.0/src/specfact_cli/registry/dependency_resolver.py +186 -0
  32. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/module_installer.py +99 -51
  33. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/module_packages.py +147 -182
  34. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/__init__.py +2 -1
  35. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/bridge_sync.py +816 -765
  36. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/bridge_watch.py +19 -23
  37. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/contract_predicates.py +21 -0
  38. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/ide_setup.py +53 -58
  39. specfact_cli-0.46.0/src/specfact_cli/utils/project_artifact_write.py +254 -0
  40. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/source_scanner.py +74 -124
  41. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/cli_first_validator.py +16 -14
  42. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/contract_validator.py +13 -37
  43. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/crosshair_runner.py +28 -20
  44. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/crosshair_summary.py +21 -8
  45. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/frameworks/fastapi.py +21 -16
  46. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/orchestrator.py +11 -9
  47. specfact_cli-0.44.0/README.md +0 -317
  48. specfact_cli-0.44.0/resources/templates/github-action.yml.j2 +0 -172
  49. specfact_cli-0.44.0/src/specfact_cli/modules/init/src/first_run_selection.py +0 -198
  50. specfact_cli-0.44.0/src/specfact_cli/registry/dependency_resolver.py +0 -109
  51. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/.gitignore +0 -0
  52. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/LICENSE +0 -0
  53. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/keys/README.md +0 -0
  54. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/keys/module-signing-public.pem +0 -0
  55. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/mappings/node-async.yaml +0 -0
  56. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/mappings/python-async.yaml +0 -0
  57. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/mappings/speckit-default.yaml +0 -0
  58. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/schemas/deviation.schema.json +0 -0
  59. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/schemas/plan.schema.json +0 -0
  60. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/schemas/protocol.schema.json +0 -0
  61. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/templates/persona/architect.md.j2 +0 -0
  62. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/templates/persona/developer.md.j2 +0 -0
  63. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/templates/persona/product-owner.md.j2 +0 -0
  64. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/templates/plan.bundle.yaml.j2 +0 -0
  65. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/templates/policies/kanban.yaml +0 -0
  66. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/templates/policies/mixed.yaml +0 -0
  67. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/templates/policies/safe.yaml +0 -0
  68. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/templates/policies/scrum.yaml +0 -0
  69. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/templates/protocol.yaml.j2 +0 -0
  70. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/resources/templates/telemetry.yaml.example +0 -0
  71. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/__main__.py +0 -0
  72. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/adapters/__init__.py +0 -0
  73. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/adapters/backlog_base.py +0 -0
  74. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/adapters/base.py +0 -0
  75. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/adapters/openspec.py +0 -0
  76. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/adapters/registry.py +0 -0
  77. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/agents/__init__.py +0 -0
  78. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/agents/analyze_agent.py +0 -0
  79. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/agents/base.py +0 -0
  80. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/agents/plan_agent.py +0 -0
  81. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/agents/registry.py +0 -0
  82. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/agents/sync_agent.py +0 -0
  83. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/analyzers/__init__.py +0 -0
  84. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/analyzers/constitution_evidence_extractor.py +0 -0
  85. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/analyzers/contract_extractor.py +0 -0
  86. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/analyzers/control_flow_analyzer.py +0 -0
  87. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/analyzers/relationship_mapper.py +0 -0
  88. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/analyzers/requirement_extractor.py +0 -0
  89. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/analyzers/test_pattern_extractor.py +0 -0
  90. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/backlog/__init__.py +0 -0
  91. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/backlog/adapters/__init__.py +0 -0
  92. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/backlog/adapters/base.py +0 -0
  93. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/backlog/converter.py +0 -0
  94. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/backlog/filters.py +0 -0
  95. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/backlog/mappers/__init__.py +0 -0
  96. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/backlog/mappers/ado_mapper.py +0 -0
  97. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/backlog/mappers/base.py +0 -0
  98. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/backlog/mappers/github_mapper.py +0 -0
  99. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/backlog/mappers/template_config.py +0 -0
  100. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/__init__.py +0 -0
  101. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/_bundle_shim.py +0 -0
  102. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/analyze.py +0 -0
  103. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/contract_cmd.py +0 -0
  104. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/drift.py +0 -0
  105. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/enforce.py +0 -0
  106. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/generate.py +0 -0
  107. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/import_cmd.py +0 -0
  108. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/init.py +0 -0
  109. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/migrate.py +0 -0
  110. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/plan.py +0 -0
  111. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/project_cmd.py +0 -0
  112. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/repro.py +0 -0
  113. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/sdd.py +0 -0
  114. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/spec.py +0 -0
  115. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/sync.py +0 -0
  116. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/update.py +0 -0
  117. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/commands/validate.py +0 -0
  118. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/common/__init__.py +0 -0
  119. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/common/bundle_factory.py +0 -0
  120. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/common/text_utils.py +0 -0
  121. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/common/utils.py +0 -0
  122. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/comparators/__init__.py +0 -0
  123. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/comparators/plan_comparator.py +0 -0
  124. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/contracts/__init__.py +0 -0
  125. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/contracts/crosshair_props.py +0 -0
  126. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/contracts/module_interface.py +0 -0
  127. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/enrichers/constitution_enricher.py +0 -0
  128. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/enrichers/plan_enricher.py +0 -0
  129. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/generators/__init__.py +0 -0
  130. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/generators/protocol_generator.py +0 -0
  131. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/generators/report_generator.py +0 -0
  132. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/generators/task_generator.py +0 -0
  133. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/groups/__init__.py +0 -0
  134. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/groups/codebase_group.py +0 -0
  135. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/groups/govern_group.py +0 -0
  136. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/groups/member_group.py +0 -0
  137. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/groups/project_group.py +0 -0
  138. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/groups/spec_group.py +0 -0
  139. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/importers/__init__.py +0 -0
  140. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/importers/speckit_converter.py +0 -0
  141. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/importers/speckit_scanner.py +0 -0
  142. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/integrations/__init__.py +0 -0
  143. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/integrations/specmatic.py +0 -0
  144. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/merge/__init__.py +0 -0
  145. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/merge/resolver.py +0 -0
  146. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/migrations/__init__.py +0 -0
  147. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/migrations/plan_migrator.py +0 -0
  148. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/__init__.py +0 -0
  149. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/backlog_item.py +0 -0
  150. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/bridge.py +0 -0
  151. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/capabilities.py +0 -0
  152. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/change.py +0 -0
  153. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/contract.py +0 -0
  154. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/deviation.py +0 -0
  155. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/dor_config.py +0 -0
  156. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/enforcement.py +0 -0
  157. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/module_package.py +0 -0
  158. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/persona_template.py +0 -0
  159. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/plan.py +0 -0
  160. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/protocol.py +0 -0
  161. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/quality.py +0 -0
  162. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/sdd.py +0 -0
  163. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/source_tracking.py +0 -0
  164. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/task.py +0 -0
  165. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/models/validation.py +0 -0
  166. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modes/__init__.py +0 -0
  167. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modes/detector.py +0 -0
  168. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modes/router.py +0 -0
  169. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/__init__.py +0 -0
  170. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/_bundle_import.py +0 -0
  171. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/init/src/__init__.py +0 -0
  172. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/init/src/app.py +0 -0
  173. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/module_io_shim.py +0 -0
  174. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/module_registry/src/__init__.py +0 -0
  175. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/module_registry/src/app.py +0 -0
  176. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/upgrade/module-package.yaml +0 -0
  177. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/upgrade/src/__init__.py +0 -0
  178. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/upgrade/src/app.py +0 -0
  179. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/modules/upgrade/src/commands.py +0 -0
  180. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/parsers/__init__.py +0 -0
  181. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/parsers/persona_importer.py +0 -0
  182. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/__init__.py +0 -0
  183. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/alias_manager.py +0 -0
  184. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/bridge_registry.py +0 -0
  185. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/crypto_validator.py +0 -0
  186. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/custom_registries.py +0 -0
  187. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/extension_registry.py +0 -0
  188. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/help_cache.py +0 -0
  189. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/marketplace_client.py +0 -0
  190. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/metadata.py +0 -0
  191. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/module_discovery.py +0 -0
  192. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/module_grouping.py +0 -0
  193. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/module_lifecycle.py +0 -0
  194. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/module_security.py +0 -0
  195. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/module_state.py +0 -0
  196. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/registry/registry.py +0 -0
  197. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/resources/semgrep/async.yml +0 -0
  198. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/resources/semgrep/code-quality.yml +0 -0
  199. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/resources/semgrep/feature-detection.yml +0 -0
  200. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/runtime.py +0 -0
  201. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/bridge_probe.py +0 -0
  202. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/bridge_sync_openspec_md_parse.py +0 -0
  203. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/bridge_sync_requirement_from_proposal.py +0 -0
  204. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/bridge_sync_requirement_helpers.py +0 -0
  205. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/bridge_sync_tasks_from_proposal.py +0 -0
  206. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/bridge_sync_what_changes_format.py +0 -0
  207. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/bridge_sync_write_openspec_from_proposal.py +0 -0
  208. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/change_detector.py +0 -0
  209. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/code_to_spec.py +0 -0
  210. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/drift_detector.py +0 -0
  211. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/repository_sync.py +0 -0
  212. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/spec_to_code.py +0 -0
  213. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/spec_to_tests.py +0 -0
  214. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/watcher.py +0 -0
  215. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/sync/watcher_enhanced.py +0 -0
  216. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/telemetry.py +0 -0
  217. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/templates/__init__.py +0 -0
  218. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/templates/defaults/defect_v1.yaml +0 -0
  219. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/templates/defaults/enabler_v1.yaml +0 -0
  220. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/templates/defaults/spike_v1.yaml +0 -0
  221. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/templates/defaults/user_story_v1.yaml +0 -0
  222. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/templates/frameworks/scrum/user_story_v1.yaml +0 -0
  223. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/templates/personas/product-owner/user_story_v1.yaml +0 -0
  224. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/templates/providers/ado/work_item_v1.yaml +0 -0
  225. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/templates/registry.py +0 -0
  226. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/templates/specification_templates.py +0 -0
  227. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/__init__.py +0 -0
  228. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/acceptance_criteria.py +0 -0
  229. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/auth_tokens.py +0 -0
  230. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/bundle_converters.py +0 -0
  231. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/bundle_loader.py +0 -0
  232. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/code_change_detector.py +0 -0
  233. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/console.py +0 -0
  234. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/content_sanitizer.py +0 -0
  235. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/context_detection.py +0 -0
  236. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/enrichment_context.py +0 -0
  237. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/enrichment_parser.py +0 -0
  238. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/env_manager.py +0 -0
  239. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/feature_keys.py +0 -0
  240. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/git.py +0 -0
  241. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/github_annotations.py +0 -0
  242. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/icontract_helpers.py +0 -0
  243. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/incremental_check.py +0 -0
  244. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/metadata.py +0 -0
  245. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/optional_deps.py +0 -0
  246. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/performance.py +0 -0
  247. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/persona_ownership.py +0 -0
  248. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/progress.py +0 -0
  249. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/progressive_disclosure.py +0 -0
  250. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/prompts.py +0 -0
  251. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/sdd_discovery.py +0 -0
  252. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/startup_checks.py +0 -0
  253. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/structure.py +0 -0
  254. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/structured_io.py +0 -0
  255. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/suggestions.py +0 -0
  256. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/terminal.py +0 -0
  257. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/utils/yaml_utils.py +0 -0
  258. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validation/__init__.py +0 -0
  259. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validation/command_audit.py +0 -0
  260. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/__init__.py +0 -0
  261. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/agile_validation.py +0 -0
  262. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/change_proposal_integration.py +0 -0
  263. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/fsm.py +0 -0
  264. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/repro_checker.py +0 -0
  265. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/schema.py +0 -0
  266. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/__init__.py +0 -0
  267. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/contract_populator.py +0 -0
  268. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/dependency_installer.py +0 -0
  269. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/framework_detector.py +0 -0
  270. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/frameworks/__init__.py +0 -0
  271. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/frameworks/base.py +0 -0
  272. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/frameworks/django.py +0 -0
  273. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/frameworks/drf.py +0 -0
  274. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/frameworks/flask.py +0 -0
  275. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/harness_generator.py +0 -0
  276. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/models.py +0 -0
  277. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/specmatic_runner.py +0 -0
  278. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/validators/sidecar/unannotated_detector.py +0 -0
  279. {specfact_cli-0.44.0 → specfact_cli-0.46.0}/src/specfact_cli/versioning/__init__.py +0 -0
  280. {specfact_cli-0.44.0 → specfact_cli-0.46.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.44.0
3
+ Version: 0.46.0
4
4
  Summary: The swiss knife CLI for agile DevOps teams. Keep backlog, specs, tests, and code in sync with validation and contract enforcement for new projects and long-lived codebases.
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
@@ -224,30 +224,29 @@ Classifier: Topic :: Software Development :: Testing
224
224
  Requires-Python: >=3.11
225
225
  Requires-Dist: azure-identity>=1.17.1
226
226
  Requires-Dist: beartype>=0.22.4
227
- Requires-Dist: cffi>=1.17.1
228
- Requires-Dist: crosshair-tool>=0.0.97
229
227
  Requires-Dist: cryptography>=43.0.0
230
228
  Requires-Dist: gitpython>=3.1.45
231
229
  Requires-Dist: graphviz>=0.20.1
232
- Requires-Dist: hypothesis>=6.142.4
233
230
  Requires-Dist: icontract>=2.7.1
234
231
  Requires-Dist: jinja2>=3.1.6
232
+ Requires-Dist: json5>=0.9.28
235
233
  Requires-Dist: jsonschema>=4.23.0
236
234
  Requires-Dist: networkx>=3.4.2
237
235
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.27.0
238
236
  Requires-Dist: opentelemetry-sdk>=1.27.0
237
+ Requires-Dist: packaging>=24.0
239
238
  Requires-Dist: pydantic>=2.12.3
240
- Requires-Dist: python-dotenv>=1.2.1
241
239
  Requires-Dist: pyyaml>=6.0.3
242
240
  Requires-Dist: questionary>=2.0.1
243
- Requires-Dist: radon>=6.0.1
244
241
  Requires-Dist: requests>=2.32.3
245
242
  Requires-Dist: rich<13.6.0,>=13.5.2
246
243
  Requires-Dist: ruamel-yaml>=0.18.16
247
- Requires-Dist: ruff>=0.14.2
248
- Requires-Dist: typer>=0.20.0
244
+ Requires-Dist: typer<0.24,>=0.20.0
249
245
  Requires-Dist: typing-extensions>=4.15.0
250
246
  Requires-Dist: watchdog>=6.0.0
247
+ Provides-Extra: contracts
248
+ Requires-Dist: crosshair-tool>=0.0.97; extra == 'contracts'
249
+ Requires-Dist: hypothesis>=6.142.4; extra == 'contracts'
251
250
  Provides-Extra: dev
252
251
  Requires-Dist: basedpyright>=1.32.1; extra == 'dev'
253
252
  Requires-Dist: bearer>=3.1.0; extra == 'dev'
@@ -268,6 +267,7 @@ Requires-Dist: pytest>=8.4.2; extra == 'dev'
268
267
  Requires-Dist: radon>=6.0.1; extra == 'dev'
269
268
  Requires-Dist: ruff>=0.14.2; extra == 'dev'
270
269
  Requires-Dist: semgrep>=1.144.0; extra == 'dev'
270
+ Requires-Dist: setuptools<82,>=69.0.0; extra == 'dev'
271
271
  Requires-Dist: tomlkit>=0.13.3; extra == 'dev'
272
272
  Requires-Dist: types-pyyaml>=6.0.12.20250516; extra == 'dev'
273
273
  Provides-Extra: enhanced-analysis
@@ -281,284 +281,133 @@ Description-Content-Type: text/markdown
281
281
 
282
282
  # SpecFact CLI
283
283
 
284
- > **SpecFact is the validation and alignment layer for software delivery.**
285
- > It adds the missing validation layer that keeps backlog intent, specifications, tests, and code
286
- > from drifting apart across AI-assisted coding, brownfield systems, and governed delivery.
287
- > Use it to move fast without losing rigor.
288
-
289
- **No API keys required. Works offline. Zero vendor lock-in.**
290
-
291
- SpecFact CLI does **not** include built-in AI. It is a deterministic local CLI
292
- that can be paired with IDE slash-command prompts so your chosen AI copilot can
293
- invoke SpecFact as part of a command chain.
284
+ > Review AI-assisted code against your own contracts.
285
+ > Catch drift before it reaches PR or main.
294
286
 
295
287
  [![PyPI version](https://img.shields.io/pypi/v/specfact-cli.svg?color=22c55e)](https://pypi.org/project/specfact-cli/)
296
288
  [![Python versions](https://img.shields.io/pypi/pyversions/specfact-cli.svg)](https://pypi.org/project/specfact-cli/)
297
289
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
298
290
  [![Status](https://img.shields.io/badge/status-beta-F59E0B.svg)](https://github.com/nold-ai/specfact-cli)
299
291
 
292
+ **No API keys required. Works offline. Zero vendor lock-in.**
293
+
300
294
  <div align="center">
301
295
 
302
- **[specfact.com](https://specfact.com)** • **[specfact.io](https://specfact.io)** • **[specfact.dev](https://specfact.dev)** • **[Documentation](https://docs.specfact.io/)** • **[Support](mailto:hello@noldai.com)**
296
+ **[Documentation](https://docs.specfact.io/)** • **[Modules](https://modules.specfact.io/)** • **[Support](mailto:hello@noldai.com)**
303
297
 
304
298
  </div>
305
299
 
306
- ---
307
-
308
- ## What is SpecFact?
309
-
310
- SpecFact is the validation and alignment layer for software delivery.
311
-
312
- It is a local CLI that helps you keep the intent behind a change aligned from
313
- backlog or idea through specifications, implementation, and checks. The “Swiss-knife CLI” metaphor
314
- fits because SpecFact gives you a set of focused tools for specific delivery problems, not a vague
315
- bag of features.
316
-
317
- In practice, SpecFact helps you:
318
- - add guardrails to AI-assisted and fast-moving greenfield work
319
- - reverse-engineer large brownfield codebases into trustworthy structured understanding
320
- - reduce the “I wanted X but got Y” drift between backlog, spec, and implementation
321
- - move from local rigor toward team and enterprise policy enforcement
322
-
323
- ## Why does it exist?
324
-
325
- Modern delivery drifts in predictable ways:
326
- - AI-generated quick wins often lack the validation layer needed for mid- and long-term reliability
327
- - brownfield systems often have missing or drifted specs, so teams need to reverse-engineer reality
328
- - backlog intent gets reinterpreted into something else before it reaches code
329
- - teams working with different skill levels, opinions, and AI IDE setups need consistent review and
330
- policy enforcement
331
-
332
- SpecFact exists to reduce that drift. It helps teams understand what is really there, express what
333
- should happen more accurately, and validate that the result still matches the original intent.
334
-
335
- ## Why should I use it?
336
-
337
- Use SpecFact if you want one of these outcomes:
338
- - ship AI-assisted changes faster without accepting fragile “looks fine to me” quality
339
- - understand a legacy or unfamiliar codebase before changing it
340
- - hand brownfield insight into OpenSpec, Spec-Kit, or other spec-first workflows
341
- - keep backlog expectations, specifications, and implementation from silently diverging
342
- - enforce shared rules consistently across developers and CI/CD
343
-
344
- ## What do I get?
345
-
346
- With SpecFact, you get:
347
- - a deterministic local CLI instead of another opaque SaaS dependency
348
- - a validation layer around fast-moving implementation work
349
- - codebase analysis and sidecar flows for brownfield understanding
350
- - stronger backlog/spec/code alignment for real delivery workflows
351
- - a path from individual rigor to organization-level policy enforcement
352
-
353
- ## How do I get started?
354
-
355
- ### Start Here (5 minutes)
356
-
357
- ### Install
300
+ ## Try it in 60 seconds
358
301
 
359
302
  ```bash
360
- # Zero-install (recommended)
361
- uvx specfact-cli@latest
362
-
363
- # Or install globally
364
- pip install -U specfact-cli
303
+ # Zero-install, no API key, works offline
304
+ uvx specfact-cli init --profile solo-developer
305
+ uvx specfact-cli code review run --path . --scope full
365
306
  ```
366
307
 
367
- ### Bootstrap
308
+ **Sample output:**
368
309
 
369
- ```bash
370
- # Recommended first run
371
- specfact init --profile solo-developer
372
- ```
310
+ ```text
311
+ SpecFact CLI - v0.46.0
373
312
 
374
- ### Get First Value
313
+ Running Ruff checks...
314
+ Running Radon complexity checks...
315
+ Running Semgrep rules...
316
+ Running AST clean-code checks...
317
+ Running basedpyright type checks...
318
+ Running pylint checks...
319
+ Running contract checks...
320
+ Running targeted tests and coverage...
375
321
 
376
- ```bash
377
- # Analyze a codebase you care about
378
- specfact code import my-project --repo .
322
+ Verdict: FAIL | CI exit: 1 | Score: 0 | Reward delta: -80
379
323
 
380
- # Snapshot the project state for follow-up workflows
381
- specfact project snapshot --bundle my-project
324
+ Findings:
325
+ - specfact_demo/enforcement.py:96 Cyclomatic complexity for run_enforcement is 16.
326
+ - specfact_demo/main.py:81 Avoid print() in source files; use structured logging instead.
327
+ - examples/buggy_math.py:4 Public function divide is missing @require/@ensure decorators.
382
328
 
383
- # Validate external code without modifying the target repo
384
- specfact code validate sidecar init my-project /path/to/repo
385
- specfact code validate sidecar run my-project /path/to/repo
329
+ Evidence bundle: docs/_support/readme-first-contact/sample-output/
386
330
  ```
387
331
 
388
- That path gives you a concrete first win: SpecFact understands your project context and gives you a
389
- validated starting point instead of jumping straight into blind change work.
332
+ **Star this repo if the output is useful.** Open an issue if you want the workflow adapted for your stack.
390
333
 
391
- ### AI IDE Setup
334
+ **Already installed the CLI?** Use:
392
335
 
393
336
  ```bash
394
- specfact init ide
395
- specfact init ide --ide cursor
396
- specfact init ide --ide vscode
337
+ specfact init --profile solo-developer
338
+ specfact code review run --path . --scope full
397
339
  ```
398
340
 
399
- `specfact init ide` discovers prompt resources from installed workflow modules and exports them to
400
- your IDE. If module prompt payloads are not installed yet, the CLI uses packaged fallback resources.
401
-
402
- ## Choose Your Path
403
-
404
- ### Greenfield and AI-assisted delivery
405
-
406
- Use SpecFact as the validation layer around fast-moving implementation work.
407
-
408
- Start with:
409
- - `specfact init --profile solo-developer`
410
- - `specfact code validate sidecar init <bundle> /path/to/repo`
411
- - `specfact code validate sidecar run <bundle> /path/to/repo`
412
-
413
- ### Brownfield and reverse engineering
414
-
415
- Use SpecFact to understand an existing system before you change it, then hand that understanding
416
- into spec-first tools such as OpenSpec or Spec-Kit.
417
-
418
- Start with:
419
- - `specfact code import my-project --repo .`
420
- - `specfact project snapshot --bundle my-project`
421
- - `specfact code validate sidecar init my-project /path/to/repo`
422
- - `specfact code validate sidecar run my-project /path/to/repo`
423
-
424
- ### Backlog to code alignment
425
-
426
- Use SpecFact when the problem is not only code quality, but drift between expectations and delivery.
427
- Backlog commands require a backlog-enabled profile or installed backlog bundle before the workflow
428
- commands are available.
429
-
430
- Start with:
431
- - `specfact init --profile backlog-team`
432
- - `specfact backlog ceremony standup ...`
433
- - `specfact backlog ceremony refinement ...`
434
- - `specfact backlog verify-readiness --bundle <bundle-name>`
435
-
436
- ### Team and policy enforcement
437
-
438
- Use SpecFact when multiple developers and AI IDEs need consistent checks and review behavior.
439
-
440
- Start with:
441
- - `specfact backlog verify-readiness --bundle <bundle-name>`
442
- - `specfact govern ...`
443
- - CI validation flows that keep the same rules active outside local development
444
-
445
- ## How do I get started if I want more?
446
-
447
- **Next steps**
448
-
449
- - **[Core CLI docs](docs/index.md)** for the core runtime, bootstrap, validation, and command topology
450
- - **[Reference: command topology](docs/reference/commands.md)** for grouped command surfaces
451
- - **[Canonical modules docs site](https://modules.specfact.io/)** for bundle-deep workflows
452
-
453
- ## Documentation Topology
341
+ The sample output comes from a pinned capture against `nold-ai/specfact-demo-repo`. Reproduce it with `docs/_support/readme-first-contact/capture-readme-output.sh`; capture metadata lives alongside the raw logs in `docs/_support/readme-first-contact/sample-output/`.
454
342
 
455
- `docs.specfact.io` is the canonical starting point for SpecFact.
456
-
457
- - Core CLI/runtime/platform documentation remains owned by `specfact-cli`.
458
- - Module-specific deep docs are canonically owned by `specfact-cli-modules`.
459
- - The live modules docs site is published at `https://modules.specfact.io/`.
460
-
461
- Use this repository's docs for the overall product story, runtime lifecycle, command topology,
462
- trust model, and getting-started flow. Use the modules docs site when you want deeper workflow,
463
- adapter, and module-authoring guidance.
343
+ ## What SpecFact does
464
344
 
465
- ### Migration Note (Flat Commands Removed)
345
+ - **Reviews AI-assisted changes deterministically** — compare code against contracts, clean-code rules, and policy gates
346
+ - **Extracts structure from existing code** — reverse-engineer brownfield repos before you change them
347
+ - **Blocks drift before merge** — use the same checks locally, in pre-commit, and in CI
348
+ - **Links backlog intent to code reality** — connect backlog, specs, validation, and implementation
349
+ - **Stays local-first** — no cloud account, no vendor lock-in, no built-in model dependency
466
350
 
467
- As of `0.40.0`, flat root commands are removed. Use grouped commands:
351
+ ## What is SpecFact?
468
352
 
469
- - `specfact validate ...` -> `specfact code validate ...`
470
- - `specfact plan ...` -> removed; use `specfact project devops-flow` or `specfact project snapshot`
471
- - `specfact policy ...` -> removed; use `specfact backlog verify-readiness`
353
+ SpecFact is a local CLI for catching backlog/spec/code drift before it becomes expensive. It gives solo developers, legacy maintainers, and teams a validation layer around AI-assisted delivery, brownfield reverse engineering, and contract-first reviews.
472
354
 
473
- ### Backlog Bridge (60 seconds)
355
+ It exists because delivery drifts in predictable ways:
474
356
 
475
- SpecFact's USP is closing the drift gap between **backlog -> specs -> code**.
476
- These commands require the backlog bundle to be installed first, for example via
477
- `specfact init --profile backlog-team` or `specfact init --install backlog`.
357
+ - AI-assisted code lands faster than validation catches up
358
+ - brownfield systems rarely have trustworthy up-to-date specs
359
+ - backlog intent gets reinterpreted before it reaches code
360
+ - teams need the same review rules across IDEs, CI, and pull requests
478
361
 
479
- ```bash
480
- # 1) Initialize backlog config + field mapping
481
- specfact backlog init-config --force
482
- specfact backlog map-fields --provider ado --ado-org <org> --ado-project "<project>"
362
+ ## Add SpecFact to your workflow
483
363
 
484
- # 2) Run ceremony workflows on real backlog scope
485
- specfact backlog ceremony standup ado --ado-org <org> --ado-project "<project>" --state any --assignee any --limit 5
486
- specfact backlog ceremony refinement ado --ado-org <org> --ado-project "<project>" --id <work-item-id> --preview
364
+ **Pre-commit hook**
487
365
 
488
- # 3) Keep backlog + spec intent aligned (avoid silent drift)
489
- specfact backlog verify-readiness --bundle <bundle-name>
366
+ ```yaml
367
+ - repo: https://github.com/nold-ai/specfact-cli
368
+ rev: v0.46.0
369
+ hooks:
370
+ - id: specfact-smart-checks
490
371
  ```
491
372
 
492
- Compatibility note: `specfact backlog daily ...` and `specfact backlog refine ...` still exist, but the preferred entrypoints are `backlog ceremony standup` and `backlog ceremony refinement`.
373
+ **GitHub Actions**
493
374
 
494
- For GitHub, replace adapter/org/project with:
495
- `specfact backlog ceremony standup github --repo-owner <owner> --repo-name <repo> --state any --assignee any --limit 5`
496
-
497
- **AI IDE quick start**
498
-
499
- ```bash
500
- # In your IDE chat (Cursor, VS Code, Copilot, etc.)
501
- /specfact.01-import my-project --repo .
375
+ ```yaml
376
+ - name: SpecFact Gate
377
+ run: uvx specfact-cli@latest govern enforce stage --preset minimal
502
378
  ```
503
379
 
504
- ---
380
+ ## How SpecFact is built
505
381
 
506
- ## Who It Is For
382
+ SpecFact uses the same discipline it asks you to trust:
507
383
 
508
- - **Vibe coders and new builders** who want to ship fast with guardrails and confidence.
509
- - **Legacy professionals** who want AI speed without lowering standards.
510
- - **DevOps and engineering leaders** who need evidence and repeatable workflows.
384
+ 1. Outside-in research on the workflow or drift problem
385
+ 2. Public **OpenSpec** proposal and spec deltas
386
+ 3. TDD evidence before implementation
387
+ 4. Dogfooding with `specfact code review`
388
+ 5. Format, type-check, contract-test, and docs quality gates
389
+ 6. PR review with evidence artifacts
390
+ 7. Release through the same reproducible CLI paths
511
391
 
512
- ---
392
+ ## For teams and organizations
513
393
 
514
- ## The Missing Link (Coder + DevOps Bridge)
394
+ SpecFact still scales beyond the solo-developer entry path:
515
395
 
516
- Most tools help **either** coders **or** agile teams. SpecFact does both:
396
+ - **Backlog + ceremony workflows** for GitHub, Azure DevOps, Jira, and Linear
397
+ - **DoR/DoD and policy enforcement** for teams that need repeatable gates
398
+ - **Evidence-backed PR review** with the same checks used locally
399
+ - **CI/CD adoption path** that keeps validation deterministic instead of model-driven
517
400
 
518
- - **Backlog sync that is actually strong**: round-trip sync + refinement with GitHub, Azure DevOps, Jira, Linear.
519
- - **Ceremony support teams can run**: standup, refinement, sprint planning, flow metrics (Scrum/Kanban/SAFe).
520
- - **Policy + validation**: DoR/DoD/flow checks plus contract enforcement for production-grade stability.
401
+ Start with:
521
402
 
522
- Recommended command entrypoints:
523
403
  - `specfact backlog ceremony standup ...`
524
404
  - `specfact backlog ceremony refinement ...`
525
405
  - `specfact backlog verify-readiness --bundle <bundle-name>`
526
- - `specfact backlog analyze-deps --bundle <bundle-name>`
527
-
528
- What the backlog readiness and ceremony commands do in practice:
529
- - Turns team agreements (DoR, DoD, flow checks) into executable checks against your real backlog data.
530
- - Shows exactly what is missing per item (for example missing acceptance criteria or definition of done).
531
- - Runs structured ceremony workflows directly from the CLI.
532
-
533
- Start with:
534
- - `specfact backlog ceremony standup --help`
535
- - `specfact backlog verify-readiness --bundle <bundle-name>`
536
- - `specfact backlog refine --help`
537
-
538
- ---
539
-
540
- ## Core CLI Features
541
-
542
- The `specfact-cli` repository owns the platform-level features that every workflow bundle depends on:
543
-
544
- - `specfact init` for first-run bootstrap and IDE setup.
545
- - `specfact module` for install/list/show/search/enable/disable/uninstall/upgrade lifecycle flows.
546
- - `specfact upgrade` for CLI upgrades.
547
- - Runtime contracts, registry bootstrapping, trust checks, logging, and shared orchestration.
548
- - The grouped command surface that mounts installed bundle families under `project`, `backlog`, `code`, `spec`, and `govern`.
549
-
550
- ## Official Modules Integration
551
-
552
- Official workflow behavior now ships from `nold-ai/specfact-cli-modules`.
553
- The core CLI discovers those bundle packages, mounts their command groups, and enforces compatibility, trust, and lifecycle rules.
406
+ - `specfact govern ...`
554
407
 
555
- Installed official bundles expose the current grouped surfaces:
408
+ ## Module system
556
409
 
557
- - `specfact project ...`
558
- - `specfact backlog ...`
559
- - `specfact code ...`
560
- - `specfact spec ...`
561
- - `specfact govern ...`
410
+ Official workflow behavior ships from `nold-ai/specfact-cli-modules`. The core CLI owns bootstrap, runtime contracts, trust checks, logging, and the grouped command surface. Installed modules add families such as `project`, `backlog`, `code`, `spec`, and `govern`.
562
411
 
563
412
  Install examples:
564
413
 
@@ -566,33 +415,33 @@ Install examples:
566
415
  specfact module install nold-ai/specfact-project
567
416
  specfact module install nold-ai/specfact-backlog
568
417
  specfact module install nold-ai/specfact-codebase
569
- specfact module install nold-ai/specfact-spec
418
+ specfact module install nold-ai/specfact-code-review
570
419
  specfact module install nold-ai/specfact-govern
571
420
  ```
572
421
 
573
- If startup warns that bundled modules are missing or outdated, run:
422
+ If startup warns that modules are missing or outdated, run:
574
423
 
575
424
  ```bash
576
425
  specfact module init --scope project
577
426
  specfact module init
578
427
  ```
579
428
 
580
- Use this repo's docs for the current CLI/runtime release branch and the overall process of how official modules plug into the core platform.
581
- Use `https://modules.specfact.io/` for the in-depth backlog, project, spec, govern, adapter, and module-authoring guides.
429
+ ## Documentation topology
582
430
 
583
- ---
431
+ `docs.specfact.io` is the canonical starting point for SpecFact.
584
432
 
585
- ## How It Works (High Level)
433
+ - Core CLI/runtime/platform documentation remains owned by `specfact-cli`
434
+ - Module-specific deep docs are canonically owned by `specfact-cli-modules`
435
+ - The live modules docs site is published at `https://modules.specfact.io/`
586
436
 
587
- 1. **Bootstrap**: install the CLI and initialize the official bundles you need.
588
- 2. **Analyze or sync**: import code, connect backlog systems, or sync external artifacts into project bundles.
589
- 3. **Validate**: run spec, governance, and sidecar validation flows before implementation or release.
590
- 4. **Iterate safely**: use module-provided workflows while the core runtime keeps command mounting, trust, and lifecycle consistent.
437
+ Use this repository's docs for the product story, runtime lifecycle, command topology, trust model, and getting-started flow. Use the modules docs site when you want deeper workflow, adapter, and module-authoring guidance.
591
438
 
592
- ## Where SpecFact Fits
439
+ ## How do I get started if I want more?
593
440
 
594
- SpecFact complements your stack rather than replacing it.
441
+ Next steps:
595
442
 
596
- - **Spec-Kit/OpenSpec** for authoring and change tracking
597
- - **Backlog tools** for planning and delivery
598
- - **CI/CD** for enforcement and regression prevention
443
+ - **[Core CLI docs](docs/index.md)** for the core runtime, bootstrap, and validation flow
444
+ - **[Installation guide](https://docs.specfact.io/getting-started/installation/)** for uvx-first and persistent CLI setup
445
+ - **[Quickstart](https://docs.specfact.io/getting-started/quickstart/)** for the first repo review path
446
+ - **[Reference: command topology](docs/reference/commands.md)** for grouped command surfaces
447
+ - **[Canonical modules docs site](https://modules.specfact.io/)** for bundle-deep workflows
@@ -0,0 +1,166 @@
1
+ # SpecFact CLI
2
+
3
+ > Review AI-assisted code against your own contracts.
4
+ > Catch drift before it reaches PR or main.
5
+
6
+ [![PyPI version](https://img.shields.io/pypi/v/specfact-cli.svg?color=22c55e)](https://pypi.org/project/specfact-cli/)
7
+ [![Python versions](https://img.shields.io/pypi/pyversions/specfact-cli.svg)](https://pypi.org/project/specfact-cli/)
8
+ [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
9
+ [![Status](https://img.shields.io/badge/status-beta-F59E0B.svg)](https://github.com/nold-ai/specfact-cli)
10
+
11
+ **No API keys required. Works offline. Zero vendor lock-in.**
12
+
13
+ <div align="center">
14
+
15
+ **[Documentation](https://docs.specfact.io/)** • **[Modules](https://modules.specfact.io/)** • **[Support](mailto:hello@noldai.com)**
16
+
17
+ </div>
18
+
19
+ ## Try it in 60 seconds
20
+
21
+ ```bash
22
+ # Zero-install, no API key, works offline
23
+ uvx specfact-cli init --profile solo-developer
24
+ uvx specfact-cli code review run --path . --scope full
25
+ ```
26
+
27
+ **Sample output:**
28
+
29
+ ```text
30
+ SpecFact CLI - v0.46.0
31
+
32
+ Running Ruff checks...
33
+ Running Radon complexity checks...
34
+ Running Semgrep rules...
35
+ Running AST clean-code checks...
36
+ Running basedpyright type checks...
37
+ Running pylint checks...
38
+ Running contract checks...
39
+ Running targeted tests and coverage...
40
+
41
+ Verdict: FAIL | CI exit: 1 | Score: 0 | Reward delta: -80
42
+
43
+ Findings:
44
+ - specfact_demo/enforcement.py:96 Cyclomatic complexity for run_enforcement is 16.
45
+ - specfact_demo/main.py:81 Avoid print() in source files; use structured logging instead.
46
+ - examples/buggy_math.py:4 Public function divide is missing @require/@ensure decorators.
47
+
48
+ Evidence bundle: docs/_support/readme-first-contact/sample-output/
49
+ ```
50
+
51
+ ⭐ **Star this repo if the output is useful.** Open an issue if you want the workflow adapted for your stack.
52
+
53
+ **Already installed the CLI?** Use:
54
+
55
+ ```bash
56
+ specfact init --profile solo-developer
57
+ specfact code review run --path . --scope full
58
+ ```
59
+
60
+ The sample output comes from a pinned capture against `nold-ai/specfact-demo-repo`. Reproduce it with `docs/_support/readme-first-contact/capture-readme-output.sh`; capture metadata lives alongside the raw logs in `docs/_support/readme-first-contact/sample-output/`.
61
+
62
+ ## What SpecFact does
63
+
64
+ - **Reviews AI-assisted changes deterministically** — compare code against contracts, clean-code rules, and policy gates
65
+ - **Extracts structure from existing code** — reverse-engineer brownfield repos before you change them
66
+ - **Blocks drift before merge** — use the same checks locally, in pre-commit, and in CI
67
+ - **Links backlog intent to code reality** — connect backlog, specs, validation, and implementation
68
+ - **Stays local-first** — no cloud account, no vendor lock-in, no built-in model dependency
69
+
70
+ ## What is SpecFact?
71
+
72
+ SpecFact is a local CLI for catching backlog/spec/code drift before it becomes expensive. It gives solo developers, legacy maintainers, and teams a validation layer around AI-assisted delivery, brownfield reverse engineering, and contract-first reviews.
73
+
74
+ It exists because delivery drifts in predictable ways:
75
+
76
+ - AI-assisted code lands faster than validation catches up
77
+ - brownfield systems rarely have trustworthy up-to-date specs
78
+ - backlog intent gets reinterpreted before it reaches code
79
+ - teams need the same review rules across IDEs, CI, and pull requests
80
+
81
+ ## Add SpecFact to your workflow
82
+
83
+ **Pre-commit hook**
84
+
85
+ ```yaml
86
+ - repo: https://github.com/nold-ai/specfact-cli
87
+ rev: v0.46.0
88
+ hooks:
89
+ - id: specfact-smart-checks
90
+ ```
91
+
92
+ **GitHub Actions**
93
+
94
+ ```yaml
95
+ - name: SpecFact Gate
96
+ run: uvx specfact-cli@latest govern enforce stage --preset minimal
97
+ ```
98
+
99
+ ## How SpecFact is built
100
+
101
+ SpecFact uses the same discipline it asks you to trust:
102
+
103
+ 1. Outside-in research on the workflow or drift problem
104
+ 2. Public **OpenSpec** proposal and spec deltas
105
+ 3. TDD evidence before implementation
106
+ 4. Dogfooding with `specfact code review`
107
+ 5. Format, type-check, contract-test, and docs quality gates
108
+ 6. PR review with evidence artifacts
109
+ 7. Release through the same reproducible CLI paths
110
+
111
+ ## For teams and organizations
112
+
113
+ SpecFact still scales beyond the solo-developer entry path:
114
+
115
+ - **Backlog + ceremony workflows** for GitHub, Azure DevOps, Jira, and Linear
116
+ - **DoR/DoD and policy enforcement** for teams that need repeatable gates
117
+ - **Evidence-backed PR review** with the same checks used locally
118
+ - **CI/CD adoption path** that keeps validation deterministic instead of model-driven
119
+
120
+ Start with:
121
+
122
+ - `specfact backlog ceremony standup ...`
123
+ - `specfact backlog ceremony refinement ...`
124
+ - `specfact backlog verify-readiness --bundle <bundle-name>`
125
+ - `specfact govern ...`
126
+
127
+ ## Module system
128
+
129
+ Official workflow behavior ships from `nold-ai/specfact-cli-modules`. The core CLI owns bootstrap, runtime contracts, trust checks, logging, and the grouped command surface. Installed modules add families such as `project`, `backlog`, `code`, `spec`, and `govern`.
130
+
131
+ Install examples:
132
+
133
+ ```bash
134
+ specfact module install nold-ai/specfact-project
135
+ specfact module install nold-ai/specfact-backlog
136
+ specfact module install nold-ai/specfact-codebase
137
+ specfact module install nold-ai/specfact-code-review
138
+ specfact module install nold-ai/specfact-govern
139
+ ```
140
+
141
+ If startup warns that modules are missing or outdated, run:
142
+
143
+ ```bash
144
+ specfact module init --scope project
145
+ specfact module init
146
+ ```
147
+
148
+ ## Documentation topology
149
+
150
+ `docs.specfact.io` is the canonical starting point for SpecFact.
151
+
152
+ - Core CLI/runtime/platform documentation remains owned by `specfact-cli`
153
+ - Module-specific deep docs are canonically owned by `specfact-cli-modules`
154
+ - The live modules docs site is published at `https://modules.specfact.io/`
155
+
156
+ Use this repository's docs for the product story, runtime lifecycle, command topology, trust model, and getting-started flow. Use the modules docs site when you want deeper workflow, adapter, and module-authoring guidance.
157
+
158
+ ## How do I get started if I want more?
159
+
160
+ Next steps:
161
+
162
+ - **[Core CLI docs](docs/index.md)** for the core runtime, bootstrap, and validation flow
163
+ - **[Installation guide](https://docs.specfact.io/getting-started/installation/)** for uvx-first and persistent CLI setup
164
+ - **[Quickstart](https://docs.specfact.io/getting-started/quickstart/)** for the first repo review path
165
+ - **[Reference: command topology](docs/reference/commands.md)** for grouped command surfaces
166
+ - **[Canonical modules docs site](https://modules.specfact.io/)** for bundle-deep workflows