specsmith 0.15.0.dev555__tar.gz → 0.15.0.dev556__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 (301) hide show
  1. {specsmith-0.15.0.dev555/src/specsmith.egg-info → specsmith-0.15.0.dev556}/PKG-INFO +4 -2
  2. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/README.md +3 -1
  3. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/pyproject.toml +1 -1
  4. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/config.py +8 -0
  5. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/importer.py +6 -0
  6. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/languages.py +11 -0
  7. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/scaffolder.py +11 -0
  8. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/software_engineering.py +230 -0
  9. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/tools.py +30 -0
  10. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556/src/specsmith.egg-info}/PKG-INFO +4 -2
  11. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/LICENSE +0 -0
  12. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/setup.cfg +0 -0
  13. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/epistemic/__init__.py +0 -0
  14. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/epistemic/belief.py +0 -0
  15. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/epistemic/certainty.py +0 -0
  16. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/epistemic/failure_graph.py +0 -0
  17. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/epistemic/py.typed +0 -0
  18. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/epistemic/recovery.py +0 -0
  19. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/epistemic/session.py +0 -0
  20. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/epistemic/stress_tester.py +0 -0
  21. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/epistemic/trace.py +0 -0
  22. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/__init__.py +0 -0
  23. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/__main__.py +0 -0
  24. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/__init__.py +0 -0
  25. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/broker.py +0 -0
  26. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/chat_runner.py +0 -0
  27. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/cleanup.py +0 -0
  28. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/context_seed.py +0 -0
  29. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/core.py +0 -0
  30. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/dispatch/__init__.py +0 -0
  31. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/dispatch/_status.py +0 -0
  32. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/dispatch/dag.py +0 -0
  33. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/dispatch/dispatcher.py +0 -0
  34. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/dispatch/events.py +0 -0
  35. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/dispatch/result.py +0 -0
  36. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/endpoints.py +0 -0
  37. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/events.py +0 -0
  38. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/execution_profiles.py +0 -0
  39. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/fallback.py +0 -0
  40. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/hf_leaderboard.py +0 -0
  41. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/hf_sync.py +0 -0
  42. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/indexer.py +0 -0
  43. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/llm_client.py +0 -0
  44. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/mcp.py +0 -0
  45. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/memory.py +0 -0
  46. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/model_intelligence.py +0 -0
  47. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/model_profiles.py +0 -0
  48. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/orchestrator.py +0 -0
  49. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/permissions.py +0 -0
  50. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/profiles.py +0 -0
  51. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/provider_registry.py +0 -0
  52. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/repl.py +0 -0
  53. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/router.py +0 -0
  54. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/rules.py +0 -0
  55. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/runner.py +0 -0
  56. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/safety.py +0 -0
  57. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/spawner.py +0 -0
  58. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/suggester.py +0 -0
  59. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/teams.py +0 -0
  60. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/tools.py +0 -0
  61. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/verifier.py +0 -0
  62. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/agent/voice.py +0 -0
  63. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/architect.py +0 -0
  64. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/auditor.py +0 -0
  65. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/auth.py +0 -0
  66. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/block_export.py +0 -0
  67. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/channel.py +0 -0
  68. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/ci_manager.py +0 -0
  69. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/cli.py +0 -0
  70. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/commands/__init__.py +0 -0
  71. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/commands/intelligence.py +0 -0
  72. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/compliance/__init__.py +0 -0
  73. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/compliance/_compat.py +0 -0
  74. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/compliance/checker.py +0 -0
  75. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/compliance/evidence.py +0 -0
  76. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/compliance/regulations.py +0 -0
  77. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/compliance/reporter.py +0 -0
  78. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/compressor.py +0 -0
  79. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/console_utils.py +0 -0
  80. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/context_orchestrator.py +0 -0
  81. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/context_window.py +0 -0
  82. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/credit_analyzer.py +0 -0
  83. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/credits.py +0 -0
  84. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/datasources/__init__.py +0 -0
  85. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/datasources/base.py +0 -0
  86. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/datasources/citations.py +0 -0
  87. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/datasources/fpd.py +0 -0
  88. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/datasources/odp.py +0 -0
  89. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/datasources/patentsview.py +0 -0
  90. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/datasources/pfw.py +0 -0
  91. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/datasources/ppubs.py +0 -0
  92. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/datasources/ptab.py +0 -0
  93. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/differ.py +0 -0
  94. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/doctor.py +0 -0
  95. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/drive.py +0 -0
  96. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/editor.py +0 -0
  97. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/epistemic/__init__.py +0 -0
  98. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/epistemic/belief.py +0 -0
  99. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/epistemic/certainty.py +0 -0
  100. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/epistemic/failure_graph.py +0 -0
  101. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/epistemic/recovery.py +0 -0
  102. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/epistemic/stress_tester.py +0 -0
  103. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/esdb/__init__.py +0 -0
  104. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/esdb/_license.py +0 -0
  105. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/esdb/bridge.py +0 -0
  106. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/esdb/sqlite_store.py +0 -0
  107. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/eval/__init__.py +0 -0
  108. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/eval/builtins.py +0 -0
  109. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/eval/runner.py +0 -0
  110. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/executor.py +0 -0
  111. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/exporter.py +0 -0
  112. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/governance_logic.py +0 -0
  113. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/governance_store.py +0 -0
  114. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/governance_yaml.py +0 -0
  115. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/gui/__init__.py +0 -0
  116. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/gui/app.py +0 -0
  117. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/gui/main_window.py +0 -0
  118. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/gui/session_tab.py +0 -0
  119. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/gui/theme.py +0 -0
  120. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/gui/widgets/__init__.py +0 -0
  121. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/gui/widgets/chat_view.py +0 -0
  122. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/gui/widgets/input_bar.py +0 -0
  123. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/gui/widgets/provider_bar.py +0 -0
  124. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/gui/widgets/token_meter.py +0 -0
  125. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/gui/widgets/tool_panel.py +0 -0
  126. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/gui/widgets/update_checker.py +0 -0
  127. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/gui/worker.py +0 -0
  128. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/history_search.py +0 -0
  129. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/instinct.py +0 -0
  130. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/integrations/__init__.py +0 -0
  131. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/integrations/agent_skill.py +0 -0
  132. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/integrations/aider.py +0 -0
  133. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/integrations/base.py +0 -0
  134. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/integrations/claude_code.py +0 -0
  135. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/integrations/codity.py +0 -0
  136. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/integrations/copilot.py +0 -0
  137. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/integrations/cursor.py +0 -0
  138. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/integrations/gemini.py +0 -0
  139. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/integrations/windsurf.py +0 -0
  140. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/issue_reporter.py +0 -0
  141. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/ledger.py +0 -0
  142. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/mcp_generator.py +0 -0
  143. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/mcp_server.py +0 -0
  144. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/migrations/__init__.py +0 -0
  145. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/migrations/m001_governance_yaml.py +0 -0
  146. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/migrations/m002_agents_slim.py +0 -0
  147. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/migrations/m003_compliance_init.py +0 -0
  148. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/migrations/m004_ledger_esdb.py +0 -0
  149. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/migrations/m005_agent_run_tool.py +0 -0
  150. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/migrations/m006_session_governance.py +0 -0
  151. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/migrations/runner.py +0 -0
  152. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/ollama_cmds.py +0 -0
  153. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/patent.py +0 -0
  154. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/paths.py +0 -0
  155. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/phase.py +0 -0
  156. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/plugins.py +0 -0
  157. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/profiles.py +0 -0
  158. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/rate_limits.py +0 -0
  159. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/releaser.py +0 -0
  160. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/requirements.py +0 -0
  161. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/requirements_parser.py +0 -0
  162. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/retrieval.py +0 -0
  163. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/safe_write.py +0 -0
  164. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/serve.py +0 -0
  165. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/session.py +0 -0
  166. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/session_init.py +0 -0
  167. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/session_store.py +0 -0
  168. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/__init__.py +0 -0
  169. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/ai_agents.py +0 -0
  170. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/cloud.py +0 -0
  171. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/corporate.py +0 -0
  172. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/cross_platform.py +0 -0
  173. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/data_engineering.py +0 -0
  174. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/devops.py +0 -0
  175. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/docs.py +0 -0
  176. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/embedded.py +0 -0
  177. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/governance.py +0 -0
  178. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/hardware.py +0 -0
  179. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/mobile.py +0 -0
  180. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/platform_engineering.py +0 -0
  181. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/productivity.py +0 -0
  182. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/specsmith_skills.py +0 -0
  183. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/ssh.py +0 -0
  184. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills/web_backend.py +0 -0
  185. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/skills_builder.py +0 -0
  186. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/sync.py +0 -0
  187. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/agents.md.j2 +0 -0
  188. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/community/bug_report.md.j2 +0 -0
  189. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/community/code_of_conduct.md.j2 +0 -0
  190. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/community/contributing.md.j2 +0 -0
  191. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/community/feature_request.md.j2 +0 -0
  192. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/community/license-Apache-2.0.j2 +0 -0
  193. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/community/license-MIT.j2 +0 -0
  194. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/community/pull_request_template.md.j2 +0 -0
  195. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/community/security.md.j2 +0 -0
  196. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/docs/architecture.md.j2 +0 -0
  197. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/docs/mkdocs.yml.j2 +0 -0
  198. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/docs/readthedocs.yaml.j2 +0 -0
  199. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/docs/requirements.md.j2 +0 -0
  200. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/docs/test-spec.md.j2 +0 -0
  201. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/editorconfig.j2 +0 -0
  202. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/gitattributes.j2 +0 -0
  203. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/gitignore.j2 +0 -0
  204. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/go/go.mod.j2 +0 -0
  205. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/go/main.go.j2 +0 -0
  206. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/governance/belief-registry.md.j2 +0 -0
  207. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/governance/context-budget.md.j2 +0 -0
  208. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/governance/drift-metrics.md.j2 +0 -0
  209. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/governance/epistemic-axioms.md.j2 +0 -0
  210. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/governance/failure-modes.md.j2 +0 -0
  211. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/governance/lifecycle.md.j2 +0 -0
  212. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/governance/roles.md.j2 +0 -0
  213. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/governance/rules.md.j2 +0 -0
  214. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/governance/session-protocol.md.j2 +0 -0
  215. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/governance/uncertainty-map.md.j2 +0 -0
  216. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/governance/verification.md.j2 +0 -0
  217. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/js/package.json.j2 +0 -0
  218. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/ledger.md.j2 +0 -0
  219. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/python/cli.py.j2 +0 -0
  220. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/python/init.py.j2 +0 -0
  221. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/python/pyproject.toml.j2 +0 -0
  222. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/readme.md.j2 +0 -0
  223. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/rust/Cargo.toml.j2 +0 -0
  224. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/rust/main.rs.j2 +0 -0
  225. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/scripts/exec.cmd.j2 +0 -0
  226. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/scripts/exec.sh.j2 +0 -0
  227. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/scripts/run.cmd.j2 +0 -0
  228. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/scripts/run.sh.j2 +0 -0
  229. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/scripts/setup.cmd.j2 +0 -0
  230. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/scripts/setup.sh.j2 +0 -0
  231. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/templates/workflows/release.yml.j2 +0 -0
  232. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/tool_installer.py +0 -0
  233. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/toolrules.py +0 -0
  234. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/trace.py +0 -0
  235. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/updater.py +0 -0
  236. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/upgrader.py +0 -0
  237. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/validator.py +0 -0
  238. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/vcs/__init__.py +0 -0
  239. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/vcs/base.py +0 -0
  240. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/vcs/bitbucket.py +0 -0
  241. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/vcs/github.py +0 -0
  242. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/vcs/gitlab.py +0 -0
  243. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/vcs_commands.py +0 -0
  244. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/wi_store.py +0 -0
  245. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/wireframes.py +0 -0
  246. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith/workspace.py +0 -0
  247. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith.egg-info/SOURCES.txt +0 -0
  248. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith.egg-info/dependency_links.txt +0 -0
  249. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith.egg-info/entry_points.txt +0 -0
  250. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith.egg-info/requires.txt +0 -0
  251. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/src/specsmith.egg-info/top_level.txt +0 -0
  252. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_CMD_001.py +0 -0
  253. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_agent_profiles.py +0 -0
  254. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_agent_run_feedback.py +0 -0
  255. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_agent_runner_ready.py +0 -0
  256. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_ai_client.py +0 -0
  257. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_ai_intelligence.py +0 -0
  258. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_auditor.py +0 -0
  259. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_channel.py +0 -0
  260. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_chat_diff_decision.py +0 -0
  261. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_chat_runner_openai_compat.py +0 -0
  262. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_chat_stdin_protocol.py +0 -0
  263. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_cli.py +0 -0
  264. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_cli_workflows_history_drive.py +0 -0
  265. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_compliance.py +0 -0
  266. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_compliance_governance.py +0 -0
  267. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_compressor.py +0 -0
  268. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_dispatch.py +0 -0
  269. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_e2e_nexus.py +0 -0
  270. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_endpoints_cli.py +0 -0
  271. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_endpoints_store.py +0 -0
  272. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_epistemic.py +0 -0
  273. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_esdb_license.py +0 -0
  274. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_esdb_sqlite.py +0 -0
  275. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_fallback_chain.py +0 -0
  276. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_importer.py +0 -0
  277. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_integrations.py +0 -0
  278. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_integrations_codity.py +0 -0
  279. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_intelligence.py +0 -0
  280. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_issue_reporter.py +0 -0
  281. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_mcp_client.py +0 -0
  282. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_mcp_server.py +0 -0
  283. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_new_modules.py +0 -0
  284. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_nexus.py +0 -0
  285. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_permissions.py +0 -0
  286. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_phase1_4_new.py +0 -0
  287. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_phase34_completion.py +0 -0
  288. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_rate_limits.py +0 -0
  289. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_req_248_262.py +0 -0
  290. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_req_358_359.py +0 -0
  291. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_scaffolder.py +0 -0
  292. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_skill_marketplace.py +0 -0
  293. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_skills_mcp.py +0 -0
  294. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_smoke.py +0 -0
  295. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_suggester.py +0 -0
  296. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_tools.py +0 -0
  297. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_validator.py +0 -0
  298. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_vcs.py +0 -0
  299. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_warp_parity.py +0 -0
  300. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_warp_parity_followup.py +0 -0
  301. {specsmith-0.15.0.dev555 → specsmith-0.15.0.dev556}/tests/test_wi_lifecycle.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.15.0.dev555
3
+ Version: 0.15.0.dev556
4
4
  Summary: AEE governance toolkit for AI-assisted development — session preflight gates, multi-agent dispatch, requirements↔test traceability, ESDB persistence, MCP server, and skills for Warp, Cursor, Claude Code, Copilot, Windsurf, and Aider.
5
5
  Author: Layer1Labs Silicon, Inc.
6
6
  License-Expression: MIT
@@ -941,7 +941,7 @@ Supported tools: **Synthesis:** vivado, quartus, radiant, diamond, gowin.
941
941
 
942
942
  ---
943
943
 
944
- ## 63 Project Types
944
+ ## 64 Project Types
945
945
 
946
946
  **Python:** `cli-python`, `library-python`, `backend-frontend`, `backend-frontend-tray`, `embedded-python-hmi`, `research-python`.
947
947
 
@@ -969,6 +969,8 @@ Supported tools: **Synthesis:** vivado, quartus, radiant, diamond, gowin.
969
969
 
970
970
  **Business / Legal / AEE:** `business-plan`, `legal-compliance`, `monorepo`, `browser-extension`, `epistemic-pipeline`, `knowledge-engineering`, `aee-research`.
971
971
 
972
+ **Declarative / Formal:** `brief-lang` (Brief v0.14.0 — contract-enforced logic language, `.bv`/`.sbv`/`.ebv`/`.rbv`).
973
+
972
974
  ---
973
975
 
974
976
  ## epistemic Library
@@ -863,7 +863,7 @@ Supported tools: **Synthesis:** vivado, quartus, radiant, diamond, gowin.
863
863
 
864
864
  ---
865
865
 
866
- ## 63 Project Types
866
+ ## 64 Project Types
867
867
 
868
868
  **Python:** `cli-python`, `library-python`, `backend-frontend`, `backend-frontend-tray`, `embedded-python-hmi`, `research-python`.
869
869
 
@@ -891,6 +891,8 @@ Supported tools: **Synthesis:** vivado, quartus, radiant, diamond, gowin.
891
891
 
892
892
  **Business / Legal / AEE:** `business-plan`, `legal-compliance`, `monorepo`, `browser-extension`, `epistemic-pipeline`, `knowledge-engineering`, `aee-research`.
893
893
 
894
+ **Declarative / Formal:** `brief-lang` (Brief v0.14.0 — contract-enforced logic language, `.bv`/`.sbv`/`.ebv`/`.rbv`).
895
+
894
896
  ---
895
897
 
896
898
  ## epistemic Library
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "specsmith"
7
- version = "0.15.0.dev555"
7
+ version = "0.15.0.dev556"
8
8
  description = "AEE governance toolkit for AI-assisted development — session preflight gates, multi-agent dispatch, requirements↔test traceability, ESDB persistence, MCP server, and skills for Warp, Cursor, Claude Code, Copilot, Windsurf, and Aider."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -96,6 +96,10 @@ class ProjectType(str, Enum):
96
96
  # Desktop
97
97
  DESKTOP_ELECTRON = "desktop-electron" # Electron desktop app
98
98
  DESKTOP_TAURI = "desktop-tauri" # Tauri desktop app (Rust + WebView)
99
+ # Brief lang — declarative contract-enforced logic language (github.com/Randozart/brief-lang)
100
+ # Version anchor: v0.14.0 @ commit 6a43c4aebcc5c6c774dbc2908445fb19486e8043 (2026-06-14)
101
+ # No release tags exist yet; version string + commit hash are both recorded.
102
+ BRIEF_LANG = "brief-lang" # .bv/.sbv/.rbv/.ebv project using brief-compiler
99
103
 
100
104
 
101
105
  class Platform(str, Enum):
@@ -604,6 +608,8 @@ _TYPE_LABELS: dict[str, str] = {
604
608
  # Desktop
605
609
  ProjectType.DESKTOP_ELECTRON: "Desktop application (Electron)",
606
610
  ProjectType.DESKTOP_TAURI: "Desktop application (Tauri — Rust + WebView)",
611
+ # Brief lang
612
+ ProjectType.BRIEF_LANG: "Brief lang — declarative contract-enforced logic language (v0.14.0)",
607
613
  }
608
614
 
609
615
  _SECTION_REFS: dict[str, str] = {
@@ -662,4 +668,6 @@ _SECTION_REFS: dict[str, str] = {
662
668
  # Desktop
663
669
  ProjectType.DESKTOP_ELECTRON: "17.48",
664
670
  ProjectType.DESKTOP_TAURI: "17.49",
671
+ # Brief lang
672
+ ProjectType.BRIEF_LANG: "17.50",
665
673
  }
@@ -1100,6 +1100,12 @@ def _infer_type(result: DetectionResult) -> ProjectType:
1100
1100
  lang = result.primary_language
1101
1101
  build = result.build_system
1102
1102
 
1103
+ # Brief lang — .bv/.sbv/.rbv/.ebv files are unambiguous; check before Rust
1104
+ # (the brief-lang compiler repo is Rust + .bv files; .bv files are the signal)
1105
+ # Version anchor: v0.14.0 @ 6a43c4ae (github.com/Randozart/brief-lang)
1106
+ if lang == "brief":
1107
+ return ProjectType.BRIEF_LANG
1108
+
1103
1109
  # Hardware types
1104
1110
  if lang in ("vhdl", "verilog", "systemverilog"):
1105
1111
  return ProjectType.FPGA_RTL
@@ -131,6 +131,15 @@ EXT_LANG: dict[str, str] = {
131
131
  ".kicad_sch": "kicad",
132
132
  ".kicad_pro": "kicad",
133
133
  ".sch": "kicad", # legacy KiCad schematic
134
+ # Brief lang (github.com/Randozart/brief-lang v0.14.0 @ 6a43c4ae)
135
+ # All variants map to the same language key; strictness is a compiler flag, not a language.
136
+ ".bv": "brief", # Brief — declarative contract logic (normal mode)
137
+ ".sbv": "brief", # Strict Brief — hard errors on incomplete contracts
138
+ ".rbv": "brief", # Rendered Brief — Brief + web UI (HTML/CSS/SVG → WASM)
139
+ ".ebv": "brief", # Embedded Brief — Brief + hardware triggers (FPGA/ARM)
140
+ ".dbv": "brief", # Data Brief — configuration data
141
+ ".dbvs": "brief", # Data Brief Schema — FFI bindings / target specs
142
+ ".dbvl": "brief", # Data Brief Lines — line-based databases
134
143
  # Data science
135
144
  ".r": "r",
136
145
  ".rmd": "r",
@@ -197,6 +206,7 @@ LANG_DISPLAY: dict[str, str] = {
197
206
  "latex": "LaTeX",
198
207
  "bibtex": "BibTeX",
199
208
  "asciidoc": "AsciiDoc",
209
+ "brief": "Brief",
200
210
  "kicad": "KiCad",
201
211
  "r": "R",
202
212
  "julia": "Julia",
@@ -264,6 +274,7 @@ LANG_CATEGORY: dict[str, str] = {
264
274
  "latex": "Documentation",
265
275
  "bibtex": "Documentation",
266
276
  "asciidoc": "Documentation",
277
+ "brief": "Declarative / Formal",
267
278
  "kicad": "Hardware / EDA",
268
279
  "r": "Data Science",
269
280
  "julia": "Data Science",
@@ -284,6 +284,17 @@ def _get_empty_dirs(config: ProjectConfig, target: Path) -> list[Path]:
284
284
  )
285
285
  elif config.type in (ProjectType.CLI_RUST, ProjectType.LIBRARY_RUST):
286
286
  dirs.extend([target / "src", target / "tests", target / "benches"])
287
+ elif config.type == ProjectType.BRIEF_LANG:
288
+ # Brief lang project: .bv sources, library modules, contract tests
289
+ # brief-compiler check src/ — lint pass
290
+ # brief-compiler rust src/main.bv — compile to Rust
291
+ dirs.extend(
292
+ [
293
+ target / "src", # .bv source files
294
+ target / "lib", # imported .bv library modules
295
+ target / "tests", # contract test .bv files
296
+ ]
297
+ )
287
298
  elif config.type in (ProjectType.CLI_GO,):
288
299
  dirs.extend([target / "cmd", target / "internal", target / "pkg", target / "tests"])
289
300
  elif config.type in (ProjectType.CLI_C, ProjectType.LIBRARY_C):
@@ -1188,6 +1188,236 @@ git remote prune origin
1188
1188
  - [ ] CI passing before requesting review
1189
1189
  - [ ] All review comments addressed or explained
1190
1190
  - [ ] Branch deleted after merge
1191
+ """,
1192
+ ),
1193
+ # ── Brief lang ────────────────────────────────────────────────────────────
1194
+ SkillEntry(
1195
+ slug="brief-lang",
1196
+ name="Brief lang — declarative contract-enforced logic language",
1197
+ description=(
1198
+ "End-to-end workflow for projects using Brief (v0.14.0): file variants, "
1199
+ "compiler commands, contract syntax (txn/rct/let/[pre][post]), "
1200
+ "build targets (Rust/C/LLVM/WASM/VHDL/COBOL), and governance rules."
1201
+ ),
1202
+ domain=SkillDomain.SOFTWARE_ENGINEERING,
1203
+ tags=[
1204
+ "brief",
1205
+ "brief-lang",
1206
+ "declarative",
1207
+ "contracts",
1208
+ "transactions",
1209
+ "state-machine",
1210
+ "llvm",
1211
+ "wasm",
1212
+ "fpga",
1213
+ "cobol",
1214
+ "formal-verification",
1215
+ "rust",
1216
+ ],
1217
+ project_types=["brief-lang"],
1218
+ platforms=["windows", "linux", "macos"],
1219
+ prerequisites=["brief-compiler", "cargo"],
1220
+ body="""\
1221
+ # Brief lang
1222
+
1223
+ **Version anchor: v0.14.0 — commit `6a43c4aebcc5c6c774dbc2908445fb19486e8043` (2026-06-14)**
1224
+ No release tags exist yet. Both the declared version and the commit hash are kept for
1225
+ reproducibility. Update this file when Brief ships a tagged release.
1226
+
1227
+ Source: https://github.com/Randozart/brief-lang
1228
+
1229
+ ## What is Brief?
1230
+
1231
+ Brief is a declarative, contract-enforced logic language for verifiable state machines.
1232
+ Programs are a set of *transactions* whose preconditions and postconditions the compiler
1233
+ proves. Execution is inferred: a reactor loop fires transactions automatically when their
1234
+ preconditions are met. Brief transpiles to many imperative backends — Rust, C, LLVM IR,
1235
+ COBOL, SystemVerilog, VHDL, and browser WASM.
1236
+
1237
+ ## File variants
1238
+
1239
+ | Extension | Variant | Targets |
1240
+ |-----------|---------|--------|
1241
+ | `.bv` | Brief (normal) | LLVM → binary, COBOL |
1242
+ | `.sbv` | Strict Brief | Same — hard errors on incomplete contracts |
1243
+ | `.rbv` | Rendered Brief | Browser: WASM + JS + HTML + CSS + SVG |
1244
+ | `.ebv` | Embedded Brief | FPGA (VHDL/SystemVerilog), ARM bare-metal |
1245
+ | `.dbv` | Data Brief | Configuration data (all targets) |
1246
+ | `.dbvs` | Data Brief Schema | FFI bindings / target specs |
1247
+ | `.dbvl` | Data Brief Lines | Line-based databases |
1248
+
1249
+ Prefer `.sbv` for production code — the proof engine enforces complete contracts.
1250
+
1251
+ ## Build the compiler (required — no pre-built binaries at v0.14.0)
1252
+
1253
+ ```bash
1254
+ git clone https://github.com/Randozart/brief-lang.git
1255
+ cd brief-lang
1256
+ git checkout 6a43c4aebcc5c6c774dbc2908445fb19486e8043 # pin to v0.14.0
1257
+ cargo build --release
1258
+ # Compiler is now at ./target/release/brief-compiler
1259
+ export PATH="$PWD/target/release:$PATH"
1260
+ ```
1261
+
1262
+ ## Compiler commands (v0.14.0)
1263
+
1264
+ ```bash
1265
+ # Type-check only (fast — use in CI lint step)
1266
+ brief-compiler check counter.bv
1267
+
1268
+ # Strict mode — proof engine, hard errors (use in CI typecheck step)
1269
+ brief-compiler check --strict counter.sbv
1270
+ brief-compiler check --strict counter.bv # force strict on .bv file
1271
+
1272
+ # Compile to backend
1273
+ brief-compiler rust counter.bv # → Rust source
1274
+ brief-compiler c counter.bv # → C source
1275
+ brief-compiler llvm counter.bv # → LLVM IR (.ll)
1276
+ brief-compiler compile counter.bv --target aarch64.dbvs # → AArch64 asm
1277
+ brief-compiler compile counter.bv --target x86_64.dbvs # → x86-64 asm
1278
+
1279
+ # Hardware targets
1280
+ brief-compiler compile counter.ebv --target vhdl.dbvs # → VHDL
1281
+ brief-compiler compile counter.ebv --target systemverilog.dbvs # → SV
1282
+
1283
+ # Web target
1284
+ brief-compiler compile app.rbv --target wasm.dbvs # → WASM + JS glue
1285
+
1286
+ # FFI bindings from a C header
1287
+ brief-compiler bind mylib.h # generates mylib.dbvs
1288
+
1289
+ # Metropolitan shared-memory service
1290
+ brief-compiler metrod connect WeatherApi # bind to a running service
1291
+
1292
+ # LSP server (for editor integration)
1293
+ brief-compiler lsp
1294
+
1295
+ # Run compiler-internal tests (requires Cargo.toml)
1296
+ cargo test --lib
1297
+ ```
1298
+
1299
+ ## Language syntax
1300
+
1301
+ ### Variables
1302
+ ```brief
1303
+ let counter: Int = 0;
1304
+ let name: String = "Alice";
1305
+ ```
1306
+
1307
+ ### Transactions — the core unit
1308
+ ```brief
1309
+ txn increment() [counter < 100][counter == @counter + 1] {
1310
+ &counter = counter + 1; // &var = mutation
1311
+ term; // required terminator
1312
+ };
1313
+
1314
+ // @counter = "counter before this transaction"
1315
+ // [pre][post] = precondition and postcondition contracts
1316
+ ```
1317
+
1318
+ ### Reactive transactions — fire automatically
1319
+ ```brief
1320
+ rct txn auto_save() [dirty && !saving][!dirty] {
1321
+ save_to_disk();
1322
+ &dirty = false;
1323
+ term;
1324
+ };
1325
+ // Fires whenever dirty==true and saving==false — no polling, no event handlers
1326
+ ```
1327
+
1328
+ ### Guards (replaces if/else)
1329
+ ```brief
1330
+ [x > 0] { &result = x * 2; };
1331
+ [x < 0] { &result = x * -1; };
1332
+ [x == 0] { escape; }; // escape = rollback this transaction
1333
+ ```
1334
+
1335
+ ### Entry point
1336
+ ```brief
1337
+ txn main() [true][true] {
1338
+ increment();
1339
+ increment();
1340
+ term;
1341
+ };
1342
+ ```
1343
+
1344
+ ### Contract patterns
1345
+ ```brief
1346
+ // Withdraw with full pre+post contract
1347
+ txn withdraw(amount: Int)
1348
+ [amount > 0 && balance >= amount] // precondition
1349
+ [balance == @balance - amount] // postcondition
1350
+ {
1351
+ &balance = balance - amount;
1352
+ term;
1353
+ };
1354
+
1355
+ // Partial contract — compiles with warnings (.bv)
1356
+ txn log_event(msg: String) [true][] {
1357
+ write_log(msg);
1358
+ term;
1359
+ };
1360
+ ```
1361
+
1362
+ ### FFI (Metropolitan interface)
1363
+ ```brief
1364
+ // Declare an external function via .dbvs binding
1365
+ use std::io::PrintLine; // from std/bindings/io.dbvs
1366
+
1367
+ txn greet(name: String) [true][true] {
1368
+ PrintLine(name);
1369
+ term;
1370
+ };
1371
+ ```
1372
+
1373
+ ## Project layout (specsmith scaffold)
1374
+
1375
+ ```
1376
+ src/ — .bv / .sbv primary source files
1377
+ lib/ — .bv library modules (imported by src/)
1378
+ tests/ — contract test .bv files
1379
+ target/ — build output (gitignored)
1380
+ ```
1381
+
1382
+ ## CI workflow (GitHub Actions)
1383
+
1384
+ ```yaml
1385
+ steps:
1386
+ - uses: dtolnay/rust-toolchain@stable
1387
+ - name: Build brief-compiler (v0.14.0 @ 6a43c4ae)
1388
+ run: |
1389
+ git clone https://github.com/Randozart/brief-lang.git brief-lang
1390
+ cd brief-lang && git checkout 6a43c4aebcc5c6c774dbc2908445fb19486e8043
1391
+ cargo build --release
1392
+ echo "$PWD/brief-lang/target/release" >> $GITHUB_PATH
1393
+
1394
+ - name: Lint (brief-compiler check)
1395
+ run: brief-compiler check src/
1396
+
1397
+ - name: Typecheck (strict mode)
1398
+ run: brief-compiler check --strict src/
1399
+
1400
+ - name: Build to Rust
1401
+ run: brief-compiler rust src/main.bv
1402
+ ```
1403
+
1404
+ ## Governance rules for Brief projects
1405
+
1406
+ - Every transaction MUST declare at least a precondition or postcondition — H13.
1407
+ - `.sbv` (strict mode) is required for all production code paths.
1408
+ - Compiler output (`target/`) is a **derived artifact** — never hand-edit generated Rust/C.
1409
+ - FFI boundaries declared via `.dbvs` files are governance artifacts: treat them like API specs.
1410
+ - `escape;` (rollback) must be documented with a comment explaining the failure condition.
1411
+ - Contract completeness = proof coverage: treat incomplete contracts as audit warnings.
1412
+
1413
+ ## Common pitfalls
1414
+
1415
+ - `term;` is required at the end of every transaction body — missing it is a parse error.
1416
+ - `@var` refers to the variable value *before* the transaction; `var` after reassignment is the new value.
1417
+ - `.bv` files compile with warnings for incomplete contracts; `.sbv` makes them errors.
1418
+ - The Metropolitan FFI is the only way to interact with foreign code — no inline foreign calls.
1419
+ - The reactor loop infers execution order; don't assume sequential call order between transactions.
1420
+ - `brief-compiler lsp` provides editor integration — configure it in your IDE before writing Brief.
1191
1421
  """,
1192
1422
  ),
1193
1423
  SkillEntry(
@@ -12,6 +12,14 @@ if TYPE_CHECKING:
12
12
 
13
13
  from specsmith.config import ProjectType
14
14
 
15
+ # ---------------------------------------------------------------------------
16
+ # Brief lang version anchor — no release tags exist; both identifiers are kept.
17
+ # Update both when a new Brief version is adopted.
18
+ # ---------------------------------------------------------------------------
19
+ BRIEF_LANG_VERSION: str = "v0.14.0"
20
+ BRIEF_LANG_COMMIT: str = "6a43c4aebcc5c6c774dbc2908445fb19486e8043"
21
+ BRIEF_LANG_COMMIT_SHORT: str = BRIEF_LANG_COMMIT[:8] # 6a43c4ae
22
+
15
23
 
16
24
  @dataclass(frozen=True)
17
25
  class ToolSet:
@@ -504,6 +512,21 @@ _TOOL_REGISTRY: dict[ProjectType, ToolSet] = {
504
512
  format=["prettier"],
505
513
  compliance=["specsmith trace verify"],
506
514
  ),
515
+ # --- Brief lang (v0.14.0 @ 6a43c4ae, github.com/Randozart/brief-lang) ---
516
+ # brief-compiler check — type-checker + contract verifier (normal mode)
517
+ # brief-compiler check --strict — proof engine; hard errors on incomplete contracts
518
+ # cargo test --lib — compiler-internal tests (Cargo.toml must exist)
519
+ # brief-compiler rust — primary software build target
520
+ # brief-compiler llvm — compile to LLVM IR
521
+ # brief-compiler lsp — start LSP server for editor integration
522
+ ProjectType.BRIEF_LANG: ToolSet(
523
+ lint=["brief-compiler check"],
524
+ typecheck=["brief-compiler check --strict"],
525
+ test=["cargo test --lib"],
526
+ build=["brief-compiler rust", "brief-compiler llvm"],
527
+ security=[],
528
+ format=[],
529
+ ),
507
530
  }
508
531
 
509
532
 
@@ -615,6 +638,13 @@ LANG_CI_META: dict[str, dict[str, str]] = {
615
638
  "docker_image": "gcc:latest",
616
639
  "install": "",
617
640
  },
641
+ # Brief lang — compiler is built from source (Rust), no pre-built binary yet
642
+ "brief": {
643
+ "gh_setup": " - uses: dtolnay/rust-toolchain@stable\n",
644
+ "docker_image": "rust:latest",
645
+ "install": "cargo build --release",
646
+ "brief_compiler": "./target/release/brief-compiler",
647
+ },
618
648
  "terraform": {
619
649
  "gh_setup": " - uses: hashicorp/setup-terraform@v3\n",
620
650
  "docker_image": "hashicorp/terraform:latest",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specsmith
3
- Version: 0.15.0.dev555
3
+ Version: 0.15.0.dev556
4
4
  Summary: AEE governance toolkit for AI-assisted development — session preflight gates, multi-agent dispatch, requirements↔test traceability, ESDB persistence, MCP server, and skills for Warp, Cursor, Claude Code, Copilot, Windsurf, and Aider.
5
5
  Author: Layer1Labs Silicon, Inc.
6
6
  License-Expression: MIT
@@ -941,7 +941,7 @@ Supported tools: **Synthesis:** vivado, quartus, radiant, diamond, gowin.
941
941
 
942
942
  ---
943
943
 
944
- ## 63 Project Types
944
+ ## 64 Project Types
945
945
 
946
946
  **Python:** `cli-python`, `library-python`, `backend-frontend`, `backend-frontend-tray`, `embedded-python-hmi`, `research-python`.
947
947
 
@@ -969,6 +969,8 @@ Supported tools: **Synthesis:** vivado, quartus, radiant, diamond, gowin.
969
969
 
970
970
  **Business / Legal / AEE:** `business-plan`, `legal-compliance`, `monorepo`, `browser-extension`, `epistemic-pipeline`, `knowledge-engineering`, `aee-research`.
971
971
 
972
+ **Declarative / Formal:** `brief-lang` (Brief v0.14.0 — contract-enforced logic language, `.bv`/`.sbv`/`.ebv`/`.rbv`).
973
+
972
974
  ---
973
975
 
974
976
  ## epistemic Library