specsmith 0.11.3.dev436__tar.gz → 0.11.3.dev438__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 (284) hide show
  1. {specsmith-0.11.3.dev436/src/specsmith.egg-info → specsmith-0.11.3.dev438}/PKG-INFO +22 -2
  2. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/README.md +21 -1
  3. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/pyproject.toml +1 -1
  4. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/__init__.py +2 -0
  5. specsmith-0.11.3.dev438/src/specsmith/integrations/codity.py +296 -0
  6. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/governance.py +109 -0
  7. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/agents.md.j2 +11 -0
  8. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438/src/specsmith.egg-info}/PKG-INFO +22 -2
  9. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith.egg-info/SOURCES.txt +2 -0
  10. specsmith-0.11.3.dev438/tests/test_integrations_codity.py +282 -0
  11. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/LICENSE +0 -0
  12. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/setup.cfg +0 -0
  13. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/__init__.py +0 -0
  14. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/belief.py +0 -0
  15. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/certainty.py +0 -0
  16. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/failure_graph.py +0 -0
  17. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/py.typed +0 -0
  18. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/recovery.py +0 -0
  19. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/session.py +0 -0
  20. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/stress_tester.py +0 -0
  21. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/epistemic/trace.py +0 -0
  22. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/__init__.py +0 -0
  23. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/__main__.py +0 -0
  24. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/__init__.py +0 -0
  25. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/broker.py +0 -0
  26. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/chat_runner.py +0 -0
  27. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/cleanup.py +0 -0
  28. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/context_seed.py +0 -0
  29. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/core.py +0 -0
  30. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/dispatch/__init__.py +0 -0
  31. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/dispatch/_status.py +0 -0
  32. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/dispatch/dag.py +0 -0
  33. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
  34. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/dispatch/events.py +0 -0
  35. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/dispatch/result.py +0 -0
  36. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/endpoints.py +0 -0
  37. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/events.py +0 -0
  38. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/execution_profiles.py +0 -0
  39. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/fallback.py +0 -0
  40. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/hf_leaderboard.py +0 -0
  41. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/hf_sync.py +0 -0
  42. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/indexer.py +0 -0
  43. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/llm_client.py +0 -0
  44. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/mcp.py +0 -0
  45. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/memory.py +0 -0
  46. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/model_intelligence.py +0 -0
  47. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/model_profiles.py +0 -0
  48. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/orchestrator.py +0 -0
  49. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/permissions.py +0 -0
  50. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/profiles.py +0 -0
  51. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/provider_registry.py +0 -0
  52. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/repl.py +0 -0
  53. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/router.py +0 -0
  54. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/rules.py +0 -0
  55. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/runner.py +0 -0
  56. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/safety.py +0 -0
  57. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/spawner.py +0 -0
  58. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/suggester.py +0 -0
  59. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/teams.py +0 -0
  60. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/tools.py +0 -0
  61. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/verifier.py +0 -0
  62. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/agent/voice.py +0 -0
  63. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/architect.py +0 -0
  64. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/auditor.py +0 -0
  65. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/auth.py +0 -0
  66. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/block_export.py +0 -0
  67. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/channel.py +0 -0
  68. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/ci_manager.py +0 -0
  69. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/cli.py +0 -0
  70. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/commands/__init__.py +0 -0
  71. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/commands/intelligence.py +0 -0
  72. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/compliance/__init__.py +0 -0
  73. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/compliance/_compat.py +0 -0
  74. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/compliance/checker.py +0 -0
  75. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/compliance/evidence.py +0 -0
  76. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/compliance/regulations.py +0 -0
  77. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/compliance/reporter.py +0 -0
  78. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/compressor.py +0 -0
  79. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/config.py +0 -0
  80. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/console_utils.py +0 -0
  81. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/context_orchestrator.py +0 -0
  82. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/context_window.py +0 -0
  83. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/credit_analyzer.py +0 -0
  84. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/credits.py +0 -0
  85. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/__init__.py +0 -0
  86. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/base.py +0 -0
  87. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/citations.py +0 -0
  88. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/fpd.py +0 -0
  89. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/odp.py +0 -0
  90. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/patentsview.py +0 -0
  91. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/pfw.py +0 -0
  92. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/ppubs.py +0 -0
  93. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/datasources/ptab.py +0 -0
  94. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/differ.py +0 -0
  95. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/doctor.py +0 -0
  96. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/drive.py +0 -0
  97. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/editor.py +0 -0
  98. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/epistemic/__init__.py +0 -0
  99. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/epistemic/belief.py +0 -0
  100. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/epistemic/certainty.py +0 -0
  101. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/epistemic/failure_graph.py +0 -0
  102. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/epistemic/recovery.py +0 -0
  103. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/epistemic/stress_tester.py +0 -0
  104. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/esdb/__init__.py +0 -0
  105. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/esdb/bridge.py +0 -0
  106. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/eval/__init__.py +0 -0
  107. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/eval/builtins.py +0 -0
  108. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/eval/runner.py +0 -0
  109. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/executor.py +0 -0
  110. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/exporter.py +0 -0
  111. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/governance_logic.py +0 -0
  112. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/governance_store.py +0 -0
  113. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/governance_yaml.py +0 -0
  114. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/__init__.py +0 -0
  115. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/app.py +0 -0
  116. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/main_window.py +0 -0
  117. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/session_tab.py +0 -0
  118. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/theme.py +0 -0
  119. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/widgets/__init__.py +0 -0
  120. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/widgets/chat_view.py +0 -0
  121. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/widgets/input_bar.py +0 -0
  122. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/widgets/provider_bar.py +0 -0
  123. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/widgets/token_meter.py +0 -0
  124. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/widgets/tool_panel.py +0 -0
  125. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/widgets/update_checker.py +0 -0
  126. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/gui/worker.py +0 -0
  127. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/history_search.py +0 -0
  128. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/importer.py +0 -0
  129. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/instinct.py +0 -0
  130. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/agent_skill.py +0 -0
  131. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/aider.py +0 -0
  132. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/base.py +0 -0
  133. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/claude_code.py +0 -0
  134. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/copilot.py +0 -0
  135. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/cursor.py +0 -0
  136. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/gemini.py +0 -0
  137. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/integrations/windsurf.py +0 -0
  138. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/issue_reporter.py +0 -0
  139. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/languages.py +0 -0
  140. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/ledger.py +0 -0
  141. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/mcp_generator.py +0 -0
  142. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/__init__.py +0 -0
  143. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
  144. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/m002_agents_slim.py +0 -0
  145. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/m003_compliance_init.py +0 -0
  146. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
  147. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
  148. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/m006_session_governance.py +0 -0
  149. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/migrations/runner.py +0 -0
  150. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/ollama_cmds.py +0 -0
  151. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/patent.py +0 -0
  152. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/paths.py +0 -0
  153. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/phase.py +0 -0
  154. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/plugins.py +0 -0
  155. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/profiles.py +0 -0
  156. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/rate_limits.py +0 -0
  157. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/releaser.py +0 -0
  158. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/requirements.py +0 -0
  159. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/requirements_parser.py +0 -0
  160. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/retrieval.py +0 -0
  161. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/safe_write.py +0 -0
  162. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/scaffolder.py +0 -0
  163. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/serve.py +0 -0
  164. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/session.py +0 -0
  165. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/session_init.py +0 -0
  166. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/session_store.py +0 -0
  167. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/__init__.py +0 -0
  168. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/cloud.py +0 -0
  169. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/corporate.py +0 -0
  170. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/cross_platform.py +0 -0
  171. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/devops.py +0 -0
  172. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/docs.py +0 -0
  173. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/embedded.py +0 -0
  174. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/hardware.py +0 -0
  175. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/mobile.py +0 -0
  176. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/productivity.py +0 -0
  177. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills/ssh.py +0 -0
  178. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/skills_builder.py +0 -0
  179. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/sync.py +0 -0
  180. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
  181. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
  182. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/contributing.md.j2 +0 -0
  183. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
  184. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
  185. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/license-MIT.j2 +0 -0
  186. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
  187. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/community/security.md.j2 +0 -0
  188. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  189. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
  190. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
  191. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  192. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  193. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/editorconfig.j2 +0 -0
  194. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/gitattributes.j2 +0 -0
  195. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/gitignore.j2 +0 -0
  196. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/go/go.mod.j2 +0 -0
  197. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/go/main.go.j2 +0 -0
  198. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
  199. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  200. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  201. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
  202. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
  203. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
  204. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  205. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  206. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
  207. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
  208. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  209. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/js/package.json.j2 +0 -0
  210. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/ledger.md.j2 +0 -0
  211. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/python/cli.py.j2 +0 -0
  212. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/python/init.py.j2 +0 -0
  213. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
  214. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/readme.md.j2 +0 -0
  215. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
  216. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/rust/main.rs.j2 +0 -0
  217. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  218. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  219. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  220. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  221. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
  222. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
  223. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
  224. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/tool_installer.py +0 -0
  225. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/toolrules.py +0 -0
  226. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/tools.py +0 -0
  227. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/trace.py +0 -0
  228. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/updater.py +0 -0
  229. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/upgrader.py +0 -0
  230. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/validator.py +0 -0
  231. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/vcs/__init__.py +0 -0
  232. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/vcs/base.py +0 -0
  233. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/vcs/bitbucket.py +0 -0
  234. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/vcs/github.py +0 -0
  235. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/vcs/gitlab.py +0 -0
  236. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/vcs_commands.py +0 -0
  237. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/wireframes.py +0 -0
  238. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith/workspace.py +0 -0
  239. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith.egg-info/dependency_links.txt +0 -0
  240. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith.egg-info/entry_points.txt +0 -0
  241. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith.egg-info/requires.txt +0 -0
  242. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/src/specsmith.egg-info/top_level.txt +0 -0
  243. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_CMD_001.py +0 -0
  244. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_agent_profiles.py +0 -0
  245. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_agent_runner_ready.py +0 -0
  246. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_ai_client.py +0 -0
  247. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_ai_intelligence.py +0 -0
  248. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_auditor.py +0 -0
  249. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_channel.py +0 -0
  250. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_chat_diff_decision.py +0 -0
  251. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_chat_runner_openai_compat.py +0 -0
  252. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_chat_stdin_protocol.py +0 -0
  253. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_cli.py +0 -0
  254. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_cli_workflows_history_drive.py +0 -0
  255. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_compliance.py +0 -0
  256. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_compressor.py +0 -0
  257. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_dispatch.py +0 -0
  258. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_e2e_nexus.py +0 -0
  259. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_endpoints_cli.py +0 -0
  260. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_endpoints_store.py +0 -0
  261. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_epistemic.py +0 -0
  262. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_fallback_chain.py +0 -0
  263. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_importer.py +0 -0
  264. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_integrations.py +0 -0
  265. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_intelligence.py +0 -0
  266. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_issue_reporter.py +0 -0
  267. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_mcp_client.py +0 -0
  268. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_new_modules.py +0 -0
  269. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_nexus.py +0 -0
  270. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_permissions.py +0 -0
  271. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_phase1_4_new.py +0 -0
  272. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_phase34_completion.py +0 -0
  273. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_rate_limits.py +0 -0
  274. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_req_248_262.py +0 -0
  275. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_scaffolder.py +0 -0
  276. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_skill_marketplace.py +0 -0
  277. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_skills_mcp.py +0 -0
  278. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_smoke.py +0 -0
  279. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_suggester.py +0 -0
  280. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_tools.py +0 -0
  281. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_validator.py +0 -0
  282. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_vcs.py +0 -0
  283. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_warp_parity.py +0 -0
  284. {specsmith-0.11.3.dev436 → specsmith-0.11.3.dev438}/tests/test_warp_parity_followup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.11.3.dev436
3
+ Version: 0.11.3.dev438
4
4
  Summary: Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands.
5
5
  Author: BitConcepts
6
6
  License-Expression: MIT
@@ -274,8 +274,9 @@ be overwritten by the next sync.
274
274
  | `docs/requirements/yaml_governance.yml` | REQ-300..312 | YAML governance layer |
275
275
  | `docs/requirements/multiagent_compliance.yml` | REQ-313..320 | Multi-agent governance traceability |
276
276
  | `docs/requirements/dispatch.yml` | REQ-321..334 | Multi-agent DAG dispatcher |
277
+ | `docs/requirements/overflow.yml` | REQ-335..356 | VCS ops, skills catalog, ESDB namespace, session governance, modern web types, Codity.ai integration |
277
278
 
278
- **Migration from Markdown-primary:** Run
279
+ **Migration from Markdown-primary:**
279
280
  `scripts/migrate_governance_to_yaml.py` once to convert an existing project.
280
281
  Idempotent — safe to re-run.
281
282
 
@@ -934,6 +935,25 @@ production LLM systems:
934
935
 
935
936
  ---
936
937
 
938
+ ## Codity.ai AI Code Review Integration
939
+
940
+ specsmith can scaffold [Codity.ai](https://codity.ai) AI code review into any project:
941
+
942
+ ```bash
943
+ specsmith integrate codity --project-dir ./my-project
944
+ ```
945
+
946
+ This generates:
947
+ - `.github/workflows/codity-review.yml` (GitHub Actions) or `.gitlab-ci-codity.yml` / `.azure-pipelines/codity-review.yml` depending on your VCS
948
+ - `docs/codity-setup.md` — one-time setup checklist
949
+ - Appends a TODO checklist to `LEDGER.md`
950
+
951
+ **AGENTS.md rule (REQ-355):** Projects with Codity configured SHOULD run `codity review --staged` before any commit touching production code. HIGH-severity findings are blocking; MEDIUM findings require inline acknowledgement.
952
+
953
+ See the `codity-ai-review` governance skill (`specsmith skill install codity-ai-review`) for the full CLI workflow reference.
954
+
955
+ ---
956
+
937
957
  ## The specsmith Bootstrap
938
958
 
939
959
  specsmith governs itself — the specsmith repo is a specsmith-managed project. Run `specsmith audit`
@@ -202,8 +202,9 @@ be overwritten by the next sync.
202
202
  | `docs/requirements/yaml_governance.yml` | REQ-300..312 | YAML governance layer |
203
203
  | `docs/requirements/multiagent_compliance.yml` | REQ-313..320 | Multi-agent governance traceability |
204
204
  | `docs/requirements/dispatch.yml` | REQ-321..334 | Multi-agent DAG dispatcher |
205
+ | `docs/requirements/overflow.yml` | REQ-335..356 | VCS ops, skills catalog, ESDB namespace, session governance, modern web types, Codity.ai integration |
205
206
 
206
- **Migration from Markdown-primary:** Run
207
+ **Migration from Markdown-primary:**
207
208
  `scripts/migrate_governance_to_yaml.py` once to convert an existing project.
208
209
  Idempotent — safe to re-run.
209
210
 
@@ -862,6 +863,25 @@ production LLM systems:
862
863
 
863
864
  ---
864
865
 
866
+ ## Codity.ai AI Code Review Integration
867
+
868
+ specsmith can scaffold [Codity.ai](https://codity.ai) AI code review into any project:
869
+
870
+ ```bash
871
+ specsmith integrate codity --project-dir ./my-project
872
+ ```
873
+
874
+ This generates:
875
+ - `.github/workflows/codity-review.yml` (GitHub Actions) or `.gitlab-ci-codity.yml` / `.azure-pipelines/codity-review.yml` depending on your VCS
876
+ - `docs/codity-setup.md` — one-time setup checklist
877
+ - Appends a TODO checklist to `LEDGER.md`
878
+
879
+ **AGENTS.md rule (REQ-355):** Projects with Codity configured SHOULD run `codity review --staged` before any commit touching production code. HIGH-severity findings are blocking; MEDIUM findings require inline acknowledgement.
880
+
881
+ See the `codity-ai-review` governance skill (`specsmith skill install codity-ai-review`) for the full CLI workflow reference.
882
+
883
+ ---
884
+
865
885
  ## The specsmith Bootstrap
866
886
 
867
887
  specsmith governs itself — the specsmith repo is a specsmith-managed project. Run `specsmith audit`
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "specsmith"
7
- version = "0.11.3.dev436"
7
+ version = "0.11.3.dev438"
8
8
  description = "Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -28,6 +28,7 @@ def _load_adapters() -> None:
28
28
  from specsmith.integrations.agent_skill import AgentSkillAdapter
29
29
  from specsmith.integrations.aider import AiderAdapter
30
30
  from specsmith.integrations.claude_code import ClaudeCodeAdapter
31
+ from specsmith.integrations.codity import CodityAdapter
31
32
  from specsmith.integrations.copilot import CopilotAdapter
32
33
  from specsmith.integrations.cursor import CursorAdapter
33
34
  from specsmith.integrations.gemini import GeminiAdapter
@@ -36,6 +37,7 @@ def _load_adapters() -> None:
36
37
  for cls in (
37
38
  AgentSkillAdapter,
38
39
  ClaudeCodeAdapter,
40
+ CodityAdapter,
39
41
  CursorAdapter,
40
42
  CopilotAdapter,
41
43
  GeminiAdapter,
@@ -0,0 +1,296 @@
1
+ # SPDX-License-Identifier: MIT
2
+ # Copyright (c) 2026 BitConcepts, LLC. All rights reserved.
3
+ """Codity.ai integration adapter.
4
+
5
+ Generates a GitHub Actions (or GitLab CI / Azure Pipelines) workflow that
6
+ runs ``codity review --staged`` on every pull-request, plus appends a setup
7
+ checklist to LEDGER.md and writes a starter Codity configuration hint.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from pathlib import Path
13
+
14
+ from specsmith.config import ProjectConfig
15
+ from specsmith.integrations.base import AgentAdapter
16
+
17
+
18
+ class CodityAdapter(AgentAdapter):
19
+ """Scaffold Codity.ai AI-code-review integration files."""
20
+
21
+ @property
22
+ def name(self) -> str:
23
+ return "codity"
24
+
25
+ @property
26
+ def description(self) -> str:
27
+ return "Codity.ai AI code review (.github/workflows/codity-review.yml)"
28
+
29
+ # ------------------------------------------------------------------
30
+ # Public API
31
+ # ------------------------------------------------------------------
32
+
33
+ def generate(self, config: ProjectConfig, target: Path) -> list[Path]:
34
+ """Generate Codity.ai integration files.
35
+
36
+ Creates:
37
+ - ``.github/workflows/codity-review.yml`` (or GitLab/Azure variant)
38
+ - ``docs/codity-setup.md`` — one-time setup checklist
39
+ Appends:
40
+ - ``LEDGER.md`` — Codity setup TODO entry
41
+ """
42
+ created: list[Path] = []
43
+
44
+ vcs = self._detect_vcs(target)
45
+ workflow_path = self._write_workflow(config, target, vcs)
46
+ if workflow_path:
47
+ created.append(workflow_path)
48
+
49
+ setup_doc = self._write_setup_doc(config, target, vcs)
50
+ created.append(setup_doc)
51
+
52
+ self._append_ledger(target, vcs)
53
+
54
+ return created
55
+
56
+ # ------------------------------------------------------------------
57
+ # Internal helpers
58
+ # ------------------------------------------------------------------
59
+
60
+ def _detect_vcs(self, target: Path) -> str:
61
+ """Detect VCS host from scaffold.yml or directory layout.
62
+
63
+ Returns one of: ``"github"``, ``"gitlab"``, ``"azure"``.
64
+ Defaults to ``"github"`` when the host cannot be determined.
65
+ """
66
+ scaffold = target / "scaffold.yml"
67
+ if scaffold.exists():
68
+ text = scaffold.read_text(encoding="utf-8")
69
+ if "gitlab" in text.lower():
70
+ return "gitlab"
71
+ if "azure" in text.lower() or "azuredevops" in text.lower():
72
+ return "azure"
73
+ # Structural heuristics
74
+ if (target / ".gitlab-ci.yml").exists():
75
+ return "gitlab"
76
+ if (target / "azure-pipelines.yml").exists():
77
+ return "azure"
78
+ return "github"
79
+
80
+ # ---- workflow writers -------------------------------------------
81
+
82
+ def _write_workflow(self, config: ProjectConfig, target: Path, vcs: str) -> Path | None:
83
+ if vcs == "github":
84
+ return self._write_github_workflow(config, target)
85
+ if vcs == "gitlab":
86
+ return self._write_gitlab_workflow(config, target)
87
+ if vcs == "azure":
88
+ return self._write_azure_workflow(config, target)
89
+ return None
90
+
91
+ def _write_github_workflow(self, config: ProjectConfig, target: Path) -> Path:
92
+ workflows_dir = target / ".github" / "workflows"
93
+ workflows_dir.mkdir(parents=True, exist_ok=True)
94
+ workflow_path = workflows_dir / "codity-review.yml"
95
+ content = f"""\
96
+ # Codity.ai AI Code Review — {config.name}
97
+ # Generated by specsmith (specsmith integrate codity)
98
+ #
99
+ # Prerequisites:
100
+ # 1. Install the Codity GitHub App: https://github.com/apps/codity
101
+ # 2. (Optional) Restrict to specific repos in the App settings.
102
+ #
103
+ # The workflow runs on every pull-request and posts inline AI review
104
+ # comments directly on the PR diff.
105
+
106
+ name: Codity AI Review
107
+
108
+ on:
109
+ pull_request:
110
+ branches: ["**"]
111
+
112
+ permissions:
113
+ contents: read
114
+ pull-requests: write
115
+
116
+ jobs:
117
+ codity-review:
118
+ name: Codity AI Review
119
+ runs-on: ubuntu-latest
120
+ steps:
121
+ - name: Checkout
122
+ uses: actions/checkout@v4
123
+ with:
124
+ fetch-depth: 0 # full history for diff context
125
+
126
+ - name: Install Codity CLI
127
+ run: curl -fsSL https://cli.codity.ai/install.sh | sh
128
+
129
+ - name: Run Codity review
130
+ env:
131
+ CODITY_ACCESS_TOKEN: ${{{{ secrets.CODITY_ACCESS_TOKEN }}}}
132
+ run: codity review --staged
133
+ """
134
+ workflow_path.write_text(content, encoding="utf-8")
135
+ return workflow_path
136
+
137
+ def _write_gitlab_workflow(self, config: ProjectConfig, target: Path) -> Path:
138
+ ci_path = target / ".gitlab-ci-codity.yml"
139
+ content = f"""\
140
+ # Codity.ai AI Code Review — {config.name}
141
+ # Generated by specsmith (specsmith integrate codity)
142
+ #
143
+ # Prerequisites:
144
+ # 1. Configure a GitLab PAT: codity config set-pat --provider gitlab
145
+ # 2. Store it as CI/CD variable CODITY_GITLAB_PAT in GitLab settings.
146
+
147
+ stages:
148
+ - review
149
+
150
+ codity-review:
151
+ stage: review
152
+ image: debian:bookworm-slim
153
+ only:
154
+ - merge_requests
155
+ variables:
156
+ CODITY_ACCESS_TOKEN: $CODITY_ACCESS_TOKEN
157
+ script:
158
+ - apt-get update -qq && apt-get install -y -qq curl
159
+ - curl -fsSL https://cli.codity.ai/install.sh | sh
160
+ - codity config set-pat --provider gitlab --token "$CODITY_GITLAB_PAT"
161
+ - codity review --staged
162
+ """
163
+ ci_path.write_text(content, encoding="utf-8")
164
+ return ci_path
165
+
166
+ def _write_azure_workflow(self, config: ProjectConfig, target: Path) -> Path:
167
+ pipelines_dir = target / ".azure-pipelines"
168
+ pipelines_dir.mkdir(parents=True, exist_ok=True)
169
+ pipeline_path = pipelines_dir / "codity-review.yml"
170
+ content = f"""\
171
+ # Codity.ai AI Code Review — {config.name}
172
+ # Generated by specsmith (specsmith integrate codity)
173
+ #
174
+ # Prerequisites:
175
+ # 1. Configure an Azure DevOps PAT: codity config set-pat --provider azure
176
+ # 2. Store it as pipeline variable CODITY_AZURE_PAT (secret).
177
+
178
+ trigger: none
179
+
180
+ pr:
181
+ branches:
182
+ include:
183
+ - "*"
184
+
185
+ pool:
186
+ vmImage: ubuntu-latest
187
+
188
+ steps:
189
+ - script: curl -fsSL https://cli.codity.ai/install.sh | sh
190
+ displayName: Install Codity CLI
191
+
192
+ - script: |
193
+ codity config set-pat --provider azure --token "$(CODITY_AZURE_PAT)"
194
+ codity review --staged
195
+ displayName: Run Codity AI Review
196
+ env:
197
+ CODITY_ACCESS_TOKEN: $(CODITY_ACCESS_TOKEN)
198
+ """
199
+ pipeline_path.write_text(content, encoding="utf-8")
200
+ return pipeline_path
201
+
202
+ # ---- setup doc --------------------------------------------------
203
+
204
+ def _write_setup_doc(self, config: ProjectConfig, target: Path, vcs: str) -> Path:
205
+ docs_dir = target / "docs"
206
+ docs_dir.mkdir(parents=True, exist_ok=True)
207
+ doc_path = docs_dir / "codity-setup.md"
208
+
209
+ pat_note = ""
210
+ if vcs == "gitlab":
211
+ pat_note = (
212
+ "\n5. Set GitLab PAT: `codity config set-pat --provider gitlab`\n"
213
+ "6. Add `CODITY_GITLAB_PAT` as a CI/CD variable in GitLab.\n"
214
+ )
215
+ elif vcs == "azure":
216
+ pat_note = (
217
+ "\n5. Set Azure DevOps PAT: `codity config set-pat --provider azure`\n"
218
+ "6. Add `CODITY_AZURE_PAT` as a secret pipeline variable.\n"
219
+ )
220
+
221
+ content = f"""\
222
+ # Codity.ai Setup — {config.name}
223
+
224
+ > Generated by `specsmith integrate codity`.
225
+
226
+ ## One-time setup checklist
227
+
228
+ 1. Install Codity CLI:
229
+ ```bash
230
+ curl -fsSL https://cli.codity.ai/install.sh | sh
231
+ ```
232
+
233
+ 2. Authenticate:
234
+ ```bash
235
+ codity login # opens browser — magic-link auth
236
+ ```
237
+
238
+ 3. Initialise in this project:
239
+ ```bash
240
+ codity init
241
+ ```
242
+
243
+ 4. (GitHub) Install the Codity GitHub App:
244
+ <https://github.com/apps/codity>{pat_note}
245
+
246
+ ## Daily usage
247
+
248
+ | Command | Effect |
249
+ |---|---|
250
+ | `codity review --staged` | AI review of staged changes |
251
+ | `codity scan --staged` | Security & quality scan of staged changes |
252
+ | `codity test-gen --staged` | Generate tests for staged changes |
253
+ | `codity doctor` | Health-check CLI + project config |
254
+
255
+ ## Config location
256
+
257
+ `~/.codity/config.yaml` — or set `CODITY_ACCESS_TOKEN` env var to override.
258
+
259
+ ## AGENTS.md rule
260
+
261
+ Projects with Codity configured SHOULD run `codity review --staged` before
262
+ any commit that touches production code. Treat HIGH-severity findings as
263
+ blocking; MEDIUM findings require inline acknowledgement.
264
+ """
265
+ doc_path.write_text(content, encoding="utf-8")
266
+ return doc_path
267
+
268
+ # ---- ledger append ----------------------------------------------
269
+
270
+ def _append_ledger(self, target: Path, vcs: str) -> None:
271
+ ledger = target / "LEDGER.md"
272
+ if not ledger.exists():
273
+ return
274
+ entry = (
275
+ "\n## TODO: Codity.ai Setup\n\n"
276
+ "- [ ] Run `codity login` and complete browser auth\n"
277
+ "- [ ] Run `codity init` in project root\n"
278
+ )
279
+ if vcs == "github":
280
+ entry += "- [ ] Install Codity GitHub App: https://github.com/apps/codity\n"
281
+ entry += (
282
+ "- [ ] Add `CODITY_ACCESS_TOKEN` to repo secrets (optional — App handles auth)\n"
283
+ )
284
+ elif vcs == "gitlab":
285
+ entry += (
286
+ "- [ ] `codity config set-pat --provider gitlab` "
287
+ "and add `CODITY_GITLAB_PAT` to CI/CD vars\n"
288
+ )
289
+ elif vcs == "azure":
290
+ entry += (
291
+ "- [ ] `codity config set-pat --provider azure` "
292
+ "and add `CODITY_AZURE_PAT` to pipeline vars\n"
293
+ )
294
+ entry += "- [ ] Run `codity doctor` to verify setup\n"
295
+ with ledger.open("a", encoding="utf-8") as f:
296
+ f.write(entry)
@@ -631,6 +631,115 @@ Increment NNN by scanning existing PAR entries in `docs/LEDGER.md`.
631
631
  - Filed artifacts in `docs/ip/filings/` are immutable.
632
632
  - Normative content lives under `docs/ip/specs/` only.
633
633
  - Experiment data belongs in `cpsc-engine-rtl`, not cpsc-core.
634
+ """,
635
+ ),
636
+ SkillEntry(
637
+ slug="codity-ai-review",
638
+ name="Codity.ai AI Review — staged-diff code review, security scan, test-gen",
639
+ description=(
640
+ "Codity.ai CLI workflow: install, authenticate, initialise, and run "
641
+ "codity review --staged / scan --staged / test-gen --staged on every commit "
642
+ "that touches production code. Covers GitHub App, GitLab PAT, Azure PAT "
643
+ "setup, CI integration via specsmith integrate codity, and the AGENTS.md rule."
644
+ ),
645
+ domain=SkillDomain.GOVERNANCE,
646
+ tags=[
647
+ "codity",
648
+ "ai-review",
649
+ "code-review",
650
+ "security",
651
+ "test-gen",
652
+ "ci",
653
+ "github",
654
+ "gitlab",
655
+ "azure",
656
+ "staged",
657
+ "pre-commit",
658
+ ],
659
+ prerequisites=[],
660
+ body="""\
661
+ # Codity.ai AI Review Skill
662
+
663
+ Codity.ai provides AI-powered code review, security scanning, and test
664
+ generation that runs against staged changes (`--staged`) before every commit
665
+ that touches production code.
666
+
667
+ ## Installation
668
+ ```bash
669
+ curl -fsSL https://cli.codity.ai/install.sh | sh
670
+ ```
671
+
672
+ ## Authentication
673
+ ```bash
674
+ codity login # browser magic-link; no password required
675
+ ```
676
+ Config stored at `~/.codity/config.yaml`.
677
+ Override with env var: `CODITY_ACCESS_TOKEN=<token>`.
678
+
679
+ ## Project initialisation (once per repo)
680
+ ```bash
681
+ codity init
682
+ ```
683
+
684
+ ## Daily commands (run on staged changes)
685
+
686
+ | Command | Effect |
687
+ |---|---|
688
+ | `codity review --staged` | AI inline code review of staged diff |
689
+ | `codity scan --staged` | Security & quality scan of staged diff |
690
+ | `codity test-gen --staged` | Generate tests for staged changes |
691
+ | `codity doctor` | Health-check CLI + project config |
692
+
693
+ ## AGENTS.md rule (non-negotiable)
694
+
695
+ Projects with Codity configured SHOULD run `codity review --staged` before
696
+ any commit that touches production code.
697
+
698
+ - **HIGH severity** findings are **blocking** — do not commit until resolved.
699
+ - **MEDIUM severity** findings require inline acknowledgement in the commit
700
+ message or PR description.
701
+ - Run `codity scan --staged` for security issues on any auth/crypto/infra change.
702
+
703
+ ## CI integration (via specsmith)
704
+
705
+ ```bash
706
+ specsmith integrate codity --project-dir .
707
+ ```
708
+
709
+ This scaffolds:
710
+ - `.github/workflows/codity-review.yml` (GitHub Actions)
711
+ - `.gitlab-ci-codity.yml` (GitLab CI, when gitlab detected)
712
+ - `.azure-pipelines/codity-review.yml` (Azure Pipelines, when azure detected)
713
+ - `docs/codity-setup.md` — one-time setup checklist
714
+ - Appends TODO items to `LEDGER.md`
715
+
716
+ ## VCS-specific setup
717
+
718
+ ### GitHub (recommended)
719
+ 1. Install the Codity GitHub App: <https://github.com/apps/codity>
720
+ 2. Grant access to your repo(s).
721
+ 3. (Optional) Add `CODITY_ACCESS_TOKEN` as a repo secret for CLI auth.
722
+
723
+ ### GitLab
724
+ ```bash
725
+ codity config set-pat --provider gitlab --token <YOUR_PAT>
726
+ ```
727
+ Add `CODITY_GITLAB_PAT` as a CI/CD variable (masked, protected).
728
+
729
+ ### Azure DevOps
730
+ ```bash
731
+ codity config set-pat --provider azure --token <YOUR_PAT>
732
+ ```
733
+ Add `CODITY_AZURE_PAT` as a secret pipeline variable.
734
+
735
+ ## Health check
736
+ ```bash
737
+ codity doctor
738
+ # Expected output:
739
+ # ✓ CLI version: x.y.z
740
+ # ✓ Authenticated: <email>
741
+ # ✓ Project: initialised
742
+ ```
634
743
  """,
635
744
  ),
636
745
  SkillEntry(
@@ -103,6 +103,17 @@ Agents MUST defer to specsmith for ALL governance decisions.
103
103
 
104
104
  ---
105
105
 
106
+ ## Codity.ai Code Review (if configured)
107
+
108
+ If `codity doctor` exits 0 (Codity is configured), run
109
+ `codity review --staged` before any commit touching production code.
110
+ - **HIGH severity** findings block the commit.
111
+ - **MEDIUM severity** requires inline acknowledgement in the commit message.
112
+
113
+ To set up Codity: `specsmith integrate codity --project-dir .`
114
+
115
+ ---
116
+
106
117
  **Project:** {{ project.name }}
107
118
  **Type:** {{ project.type_label }}
108
119
  **Platforms:** {{ project.platform_names | join(', ') }}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.11.3.dev436
3
+ Version: 0.11.3.dev438
4
4
  Summary: Applied Epistemic Engineering toolkit — AEE agent sessions, execution profiles, FPGA/HDL governance, tool installer, 50+ CLI commands.
5
5
  Author: BitConcepts
6
6
  License-Expression: MIT
@@ -274,8 +274,9 @@ be overwritten by the next sync.
274
274
  | `docs/requirements/yaml_governance.yml` | REQ-300..312 | YAML governance layer |
275
275
  | `docs/requirements/multiagent_compliance.yml` | REQ-313..320 | Multi-agent governance traceability |
276
276
  | `docs/requirements/dispatch.yml` | REQ-321..334 | Multi-agent DAG dispatcher |
277
+ | `docs/requirements/overflow.yml` | REQ-335..356 | VCS ops, skills catalog, ESDB namespace, session governance, modern web types, Codity.ai integration |
277
278
 
278
- **Migration from Markdown-primary:** Run
279
+ **Migration from Markdown-primary:**
279
280
  `scripts/migrate_governance_to_yaml.py` once to convert an existing project.
280
281
  Idempotent — safe to re-run.
281
282
 
@@ -934,6 +935,25 @@ production LLM systems:
934
935
 
935
936
  ---
936
937
 
938
+ ## Codity.ai AI Code Review Integration
939
+
940
+ specsmith can scaffold [Codity.ai](https://codity.ai) AI code review into any project:
941
+
942
+ ```bash
943
+ specsmith integrate codity --project-dir ./my-project
944
+ ```
945
+
946
+ This generates:
947
+ - `.github/workflows/codity-review.yml` (GitHub Actions) or `.gitlab-ci-codity.yml` / `.azure-pipelines/codity-review.yml` depending on your VCS
948
+ - `docs/codity-setup.md` — one-time setup checklist
949
+ - Appends a TODO checklist to `LEDGER.md`
950
+
951
+ **AGENTS.md rule (REQ-355):** Projects with Codity configured SHOULD run `codity review --staged` before any commit touching production code. HIGH-severity findings are blocking; MEDIUM findings require inline acknowledgement.
952
+
953
+ See the `codity-ai-review` governance skill (`specsmith skill install codity-ai-review`) for the full CLI workflow reference.
954
+
955
+ ---
956
+
937
957
  ## The specsmith Bootstrap
938
958
 
939
959
  specsmith governs itself — the specsmith repo is a specsmith-managed project. Run `specsmith audit`
@@ -162,6 +162,7 @@ src/specsmith/integrations/agent_skill.py
162
162
  src/specsmith/integrations/aider.py
163
163
  src/specsmith/integrations/base.py
164
164
  src/specsmith/integrations/claude_code.py
165
+ src/specsmith/integrations/codity.py
165
166
  src/specsmith/integrations/copilot.py
166
167
  src/specsmith/integrations/cursor.py
167
168
  src/specsmith/integrations/gemini.py
@@ -258,6 +259,7 @@ tests/test_epistemic.py
258
259
  tests/test_fallback_chain.py
259
260
  tests/test_importer.py
260
261
  tests/test_integrations.py
262
+ tests/test_integrations_codity.py
261
263
  tests/test_intelligence.py
262
264
  tests/test_issue_reporter.py
263
265
  tests/test_mcp_client.py