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