atomadic-forge 0.5.1__tar.gz → 0.5.3__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 (278) hide show
  1. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/CHANGELOG.md +61 -0
  2. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/PKG-INFO +15 -8
  3. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/README.md +14 -7
  4. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/05-faq.md +8 -4
  5. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/AGENTS_GUIDE.md +25 -13
  6. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/COMMANDS.md +44 -16
  7. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/FIRST_10_MINUTES.md +1 -1
  8. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/pyproject.toml +1 -1
  9. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/__init__.py +1 -1
  10. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +3 -30
  11. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +28 -1
  12. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/patch_scorer.py +14 -9
  13. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/preflight_change.py +20 -6
  14. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/test_selector.py +30 -5
  15. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/tool_composer.py +8 -3
  16. atomadic_forge-0.5.3/src/atomadic_forge/a1_at_functions/validation_commands.py +183 -0
  17. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a4_sy_orchestration/cli.py +73 -0
  18. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge.egg-info/PKG-INFO +15 -8
  19. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge.egg-info/SOURCES.txt +1 -0
  20. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_codex_5_complete.py +37 -0
  21. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_copilots_copilot.py +40 -0
  22. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_mcp_protocol.py +17 -0
  23. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  24. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  25. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  26. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/actions/forge-action/README.md +0 -0
  27. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/actions/forge-action/action.yml +0 -0
  28. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/dependabot.yml +0 -0
  29. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/pull_request_template.md +0 -0
  30. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/workflows/ci.yml +0 -0
  31. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/workflows/customer-refactor.yml +0 -0
  32. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/workflows/forge-self-certify.yml +0 -0
  33. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/workflows/forge-studio-ci.yml +0 -0
  34. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/.github/workflows/release.yml +0 -0
  35. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/ARCHITECTURE.md +0 -0
  36. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/CONTRIBUTING.md +0 -0
  37. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/LICENSE +0 -0
  38. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/MANIFEST.in +0 -0
  39. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/SECURITY.md +0 -0
  40. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/assets/Atomadic-Forge-01.png +0 -0
  41. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/01-getting-started.md +0 -0
  42. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/02-commands.md +0 -0
  43. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/03-tutorial.md +0 -0
  44. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/04-llm-loops.md +0 -0
  45. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/AIR_GAPPED.md +0 -0
  46. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/CI_CD.md +0 -0
  47. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/CODEX_WALKTHROUGH.md +0 -0
  48. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/FORMALIZATION.md +0 -0
  49. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/LANDSCAPE.md +0 -0
  50. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/MARKET_POSITIONING.md +0 -0
  51. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/MULTI_REPO.md +0 -0
  52. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/README.md +0 -0
  53. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/RECEIPT.md +0 -0
  54. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/RELEASE_CHECKLIST.md +0 -0
  55. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/RELEASE_MESSAGING.md +0 -0
  56. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/ROADMAP.md +0 -0
  57. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/SHOWCASE.md +0 -0
  58. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/SIDECAR.md +0 -0
  59. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/STUDIO.md +0 -0
  60. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/WHY_NOW.md +0 -0
  61. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/INDEX.md +0 -0
  62. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/chat.md +0 -0
  63. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/commandsmith.md +0 -0
  64. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/config.md +0 -0
  65. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/demo.md +0 -0
  66. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/emergent-then-synergy.md +0 -0
  67. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/emergent.md +0 -0
  68. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/evolve-then-iterate.md +0 -0
  69. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/evolve.md +0 -0
  70. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/feature-then-emergent.md +0 -0
  71. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/iterate.md +0 -0
  72. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/synergy-then-emergent.md +0 -0
  73. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/commands/synergy.md +0 -0
  74. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
  75. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/compliance/CS-1.md +0 -0
  76. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
  77. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
  78. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/compliance/SR_11-7_MAPPING.md +0 -0
  79. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/tutorials/01-quickstart.md +0 -0
  80. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/tutorials/02-your-first-package.md +0 -0
  81. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/tutorials/03-the-five-tier-law.md +0 -0
  82. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/tutorials/04-plug-in-llms.md +0 -0
  83. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/tutorials/05-multi-repo-absorb.md +0 -0
  84. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/docs/tutorials/06-javascript-quickstart.md +0 -0
  85. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/setup.cfg +0 -0
  86. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/__main__.py +0 -0
  87. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
  88. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
  89. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
  90. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
  91. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
  92. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
  93. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
  94. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
  95. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
  96. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
  97. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
  98. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
  99. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
  100. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
  101. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
  102. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
  103. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
  104. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
  105. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
  106. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
  107. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
  108. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
  109. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
  110. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
  111. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
  112. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
  113. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
  114. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
  115. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
  116. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
  117. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
  118. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
  119. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
  120. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
  121. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
  122. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
  123. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
  124. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
  125. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
  126. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
  127. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
  128. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
  129. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
  130. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
  131. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
  132. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
  133. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
  134. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
  135. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
  136. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
  137. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
  138. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
  139. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
  140. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
  141. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
  142. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
  143. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
  144. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
  145. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
  146. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
  147. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
  148. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
  149. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
  150. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
  151. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
  152. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
  153. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
  154. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
  155. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
  156. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
  157. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
  158. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
  159. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
  160. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
  161. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
  162. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
  163. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
  164. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
  165. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
  166. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
  167. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
  168. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
  169. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
  170. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
  171. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
  172. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
  173. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
  174. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
  175. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
  176. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a0_qk_constants/__init__.py +0 -0
  177. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a1_at_functions/__init__.py +0 -0
  178. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
  179. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
  180. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
  181. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
  182. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
  183. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
  184. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
  185. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
  186. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
  187. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
  188. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
  189. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/mcp_server.py +0 -0
  190. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
  191. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
  192. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
  193. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
  194. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
  195. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
  196. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/__init__.py +0 -0
  197. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/_registry.py +0 -0
  198. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/audit.py +0 -0
  199. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/chat.py +0 -0
  200. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/commandsmith.py +0 -0
  201. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/config_cmd.py +0 -0
  202. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/demo.py +0 -0
  203. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/emergent.py +0 -0
  204. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
  205. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/evolve.py +0 -0
  206. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
  207. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
  208. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/iterate.py +0 -0
  209. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/synergy.py +0 -0
  210. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
  211. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
  212. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
  213. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge.egg-info/requires.txt +0 -0
  214. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/src/atomadic_forge.egg-info/top_level.txt +0 -0
  215. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_aaaa_nexus_client.py +0 -0
  216. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_agent_plan.py +0 -0
  217. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_agent_summary.py +0 -0
  218. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_audit_verb.py +0 -0
  219. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_badge_worker.py +0 -0
  220. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_body_extractor_repairs.py +0 -0
  221. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_card_renderer.py +0 -0
  222. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_certify_operational_axis.py +0 -0
  223. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_chat.py +0 -0
  224. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_classify_tier.py +0 -0
  225. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_cli_smoke.py +0 -0
  226. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_codex_6_enforce_polyglot.py +0 -0
  227. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_commandsmith.py +0 -0
  228. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_compiler_feedback.py +0 -0
  229. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_compliance_checker.py +0 -0
  230. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_config.py +0 -0
  231. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_cs1_renderer.py +0 -0
  232. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_demo.py +0 -0
  233. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_emergent_compose.py +0 -0
  234. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_emergent_signature_extract.py +0 -0
  235. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_error_codes.py +0 -0
  236. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_error_hints.py +0 -0
  237. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_evolve_js.py +0 -0
  238. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_exported_api_check.py +0 -0
  239. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_forge_action.py +0 -0
  240. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_forge_auth_a1.py +0 -0
  241. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_forge_auth_a2.py +0 -0
  242. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_forge_enforce.py +0 -0
  243. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_generation_quality.py +0 -0
  244. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_ignore_and_docs.py +0 -0
  245. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_import_smoke.py +0 -0
  246. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_iterate_evolve.py +0 -0
  247. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_js_certify.py +0 -0
  248. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_js_parser.py +0 -0
  249. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_js_recon.py +0 -0
  250. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_js_wire.py +0 -0
  251. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_lineage_chain.py +0 -0
  252. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_local_signer.py +0 -0
  253. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_lsp_protocol.py +0 -0
  254. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_manifest_diff.py +0 -0
  255. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_ollama_client.py +0 -0
  256. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_pipeline.py +0 -0
  257. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_plan_apply.py +0 -0
  258. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_pre_audit_smoke.py +0 -0
  259. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_precommit_hooks.py +0 -0
  260. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_progress_reporter.py +0 -0
  261. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_receipt_emitter.py +0 -0
  262. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_receipt_schema.py +0 -0
  263. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_receipt_signer.py +0 -0
  264. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_roi_calculator.py +0 -0
  265. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_sbom_emitter.py +0 -0
  266. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_scaffold.py +0 -0
  267. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_sidecar.py +0 -0
  268. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_sidecar_validate.py +0 -0
  269. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_stagnation.py +0 -0
  270. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_stub_detector.py +0 -0
  271. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_synergy.py +0 -0
  272. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_test_runner.py +0 -0
  273. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_tier_init_rebuild.py +0 -0
  274. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_trust_gate_response.py +0 -0
  275. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_vscode_extension_manifest.py +0 -0
  276. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_whoami_cmd.py +0 -0
  277. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_wire_certify.py +0 -0
  278. {atomadic_forge-0.5.1 → atomadic_forge-0.5.3}/tests/test_wire_suggest_repairs.py +0 -0
@@ -1,5 +1,66 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.3 - Documentation metadata sync
4
+
5
+ Small follow-up to `0.5.2` so the published package description and
6
+ current-facing docs no longer advertise stale `0.3.x` version strings,
7
+ old test counts, or the pre-`0.5.2` MCP tool count.
8
+
9
+ ### Fixed
10
+
11
+ - README install and contributor snippets now show the current Forge
12
+ version family and `937 passed, 2 skipped`.
13
+ - Current ecosystem positioning now reflects the `0.5.3` PyPI line and
14
+ 23-tool MCP surface.
15
+ - First-run and VS Code extension docs now reference the current MCP
16
+ surface/version expectations.
17
+
18
+ ---
19
+
20
+ ## 0.5.2 - Agent ergonomics and language-aware guidance
21
+
22
+ Implements the first round of quality-of-life improvements from the
23
+ Forge agent review. This release makes Forge friendlier when an agent
24
+ uses it on JavaScript repos, documentation/research patches, or live
25
+ MCP connections.
26
+
27
+ ### Added
28
+
29
+ - `forge mcp doctor` smoke-tests MCP stdio with framed `initialize`,
30
+ `tools/list`, and `shutdown` requests. It reports version, project
31
+ root, tool count, framed-stdio status, server exit code, and a
32
+ recovery hint.
33
+ - `tools/list` entries now include a `cli_command` fallback so agents
34
+ can switch from MCP to shell without guessing command names.
35
+ - Shared validation heuristics now detect `package.json` scripts,
36
+ JS/TS tests, tier roots, and release-gate commands.
37
+
38
+ ### Improved
39
+
40
+ - `context-pack` prefers `npm run verify` / `npm test` for JavaScript
41
+ projects and derives `forge wire` gates from real tier roots.
42
+ - `preflight` recognizes non-code artifacts such as `docs/`,
43
+ `research/`, `.github/`, and `cognition/guides/` as valid project
44
+ memory instead of misplaced source.
45
+ - `select-tests` discovers JS/TS test files and avoids mirror pytest
46
+ requirements for documentation-only changes.
47
+ - `score-patch` no longer treats docs/research-only diffs as code
48
+ changes without tests, and emits language-aware validation commands
49
+ when a project root is provided.
50
+ - `compose-tools verify_patch` now maps to
51
+ `score_patch -> select_tests -> wire -> certify`.
52
+ - Hidden worktrees, experiment directories, build output, and
53
+ `node_modules` are skipped when deriving release-gate wire roots.
54
+
55
+ ### Tests
56
+
57
+ - Added regression tests for JavaScript validation selection,
58
+ non-code artifact preflight, docs-only patch scoring, exact
59
+ `verify_patch` recipe matching, MCP CLI fallback metadata, and
60
+ `forge mcp doctor`.
61
+
62
+ ---
63
+
3
64
  ## 0.5.1 — MCP stdio framing compatibility
4
65
 
5
66
  Fixes `forge mcp serve` for MCP hosts that use LSP-style
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atomadic-forge
3
- Version: 0.5.1
3
+ Version: 0.5.3
4
4
  Summary: Atomadic Forge — absorb, enforce, emerge. Polyglot (Python + JavaScript/TypeScript) architecture guardian for AI-generated code.
5
5
  Author: Atomadic
6
6
  License-Expression: BUSL-1.1
@@ -185,7 +185,7 @@ Each tier is a layer of **verified building blocks**. Higher tiers never invent
185
185
 
186
186
  ```bash
187
187
  pip install atomadic-forge
188
- forge --version # atomadic-forge 0.3.2
188
+ forge --version # atomadic-forge 0.5.3
189
189
  forge doctor # environment check
190
190
  ```
191
191
 
@@ -198,7 +198,7 @@ generate).
198
198
  ```bash
199
199
  git clone https://github.com/atomadictech/atomadic-forge && cd atomadic-forge
200
200
  pip install -e ".[dev]"
201
- python -m pytest # 841 passing, 2 skipped
201
+ python -m pytest # 937 passed, 2 skipped
202
202
  ```
203
203
 
204
204
  ## AI Agent integration (MCP)
@@ -216,14 +216,21 @@ Forge ships a **Model Context Protocol server** — add it to Cursor, Claude Cod
216
216
  }
217
217
  ```
218
218
 
219
- **21 tools exposed:** `recon` · `wire` · `certify` · `enforce` · `audit_list` · `auto_plan` · `auto_step` · `auto_apply` · `context_pack` · `preflight_change` · `score_patch` · `select_tests` · `rollback_plan` · `explain_repo` · `adapt_plan` · `compose_tools` · `load_policy` · `why_did_this_change` · `what_failed_last_time` · `list_recipes` · `get_recipe`
219
+ **23 tools exposed:** `recon` · `wire` · `certify` · `enforce` · `audit_list` · `auto_plan` · `auto_step` · `auto_apply` · `context_pack` · `preflight_change` · `score_patch` · `select_tests` · `rollback_plan` · `explain_repo` · `adapt_plan` · `compose_tools` · `load_policy` · `why_did_this_change` · `what_failed_last_time` · `list_recipes` · `get_recipe` · `trust_gate_response` · `exported_api_check`
220
220
 
221
221
  **5 resources:** Receipt schema · formalization docs · lineage chain · blocker summary · verdicts
222
222
 
223
223
  ```bash
224
224
  forge mcp serve --help # full tool + resource listing with examples
225
+ forge mcp doctor --project . --json
225
226
  ```
226
227
 
228
+ As of `0.5.2`, `tools/list` includes a `cli_command` fallback for
229
+ each MCP tool. `context-pack`, `preflight`, `select-tests`, and
230
+ `score-patch` also use language-aware validation commands so
231
+ JavaScript projects get `npm run verify` / `npm test` guidance and
232
+ documentation/research paths are treated as non-code project memory.
233
+
227
234
  ### Subscription required for `forge mcp serve`
228
235
 
229
236
  Every `tools/call` against the MCP server is gated behind a paid Forge
@@ -370,7 +377,7 @@ Forge waits before returning a clear provider error.
370
377
 
371
378
  | Command | Purpose |
372
379
  |---------|---------|
373
- | `forge mcp serve` | Stdio JSON-RPC MCP server — 21 tools for Cursor / Claude Code / Aider / Devin. |
380
+ | `forge mcp serve` | Stdio JSON-RPC MCP server — 23 tools for Cursor / Claude Code / Aider / Devin. |
374
381
  | `forge plan / plan-list / plan-show / plan-step / plan-apply` | Agent plan persistence and step-by-step apply. |
375
382
  | `forge iterate` | LLM loop: intent → code → absorb → wire → score → iterate. Single shot. |
376
383
  | `forge evolve` | Recursive improvement: N rounds, catalog grows each round. |
@@ -442,7 +449,7 @@ Forge ships with named limits. No overpromise.
442
449
  | Product | What it is | Status |
443
450
  |---------|------------|--------|
444
451
  | **AAAA-Nexus** | Trust/safety/payments substrate for autonomous agents | Live at [atomadic.tech](https://atomadic.tech) |
445
- | **Atomadic Forge** | Absorb-and-emerge engine for developers (this repo) | **0.3.2** — on PyPI, 841 tests, 100/100, MCP server, desktop GUI |
452
+ | **Atomadic Forge** | Absorb-and-emerge engine for developers (this repo) | **0.5.3** — on PyPI, 937 tests, 100/100, 23-tool MCP server, desktop GUI |
446
453
  | **Atomadic Assistant** | Sovereign AI assistant with cognitive loop on Cloudflare | In development |
447
454
 
448
455
  ## License
@@ -470,7 +477,7 @@ Apache 2.0.
470
477
  **Forge itself is monadic.** Every source file belongs to one tier. The repo is a worked example:
471
478
 
472
479
  ```bash
473
- python -m pytest # 841 passing, 2 skipped
480
+ python -m pytest # 937 passed, 2 skipped
474
481
  forge doctor # Environment check
475
482
  forge wire src/atomadic_forge # Scan for violations (PASS)
476
483
  forge certify . --fail-under 100 # Score and gate the repo (100/100)
@@ -492,7 +499,7 @@ forge commandsmith smoke # Smoke-test all 36+ registered verbs
492
499
  - ✓ **100/100 certify** — forge scores itself on every CI run
493
500
  - ✓ **0 wire violations** — forge passes its own import-law scan
494
501
  - ✓ **On PyPI** — `pip install atomadic-forge`
495
- - ✓ **MCP server** — 21 tools, 5 resources; works with Cursor, Claude Code, Aider, Devin
502
+ - ✓ **MCP server** — 23 tools, 5 resources; works with Cursor, Claude Code, Aider, Devin
496
503
  - ✓ **Desktop GUI** — Forge Studio (Tauri 2 + React)
497
504
  - ✓ **Ed25519 signing** — `forge certify --local-sign`
498
505
  - ✓ **CycloneDX SBOM** — `forge sbom`
@@ -153,7 +153,7 @@ Each tier is a layer of **verified building blocks**. Higher tiers never invent
153
153
 
154
154
  ```bash
155
155
  pip install atomadic-forge
156
- forge --version # atomadic-forge 0.3.2
156
+ forge --version # atomadic-forge 0.5.3
157
157
  forge doctor # environment check
158
158
  ```
159
159
 
@@ -166,7 +166,7 @@ generate).
166
166
  ```bash
167
167
  git clone https://github.com/atomadictech/atomadic-forge && cd atomadic-forge
168
168
  pip install -e ".[dev]"
169
- python -m pytest # 841 passing, 2 skipped
169
+ python -m pytest # 937 passed, 2 skipped
170
170
  ```
171
171
 
172
172
  ## AI Agent integration (MCP)
@@ -184,14 +184,21 @@ Forge ships a **Model Context Protocol server** — add it to Cursor, Claude Cod
184
184
  }
185
185
  ```
186
186
 
187
- **21 tools exposed:** `recon` · `wire` · `certify` · `enforce` · `audit_list` · `auto_plan` · `auto_step` · `auto_apply` · `context_pack` · `preflight_change` · `score_patch` · `select_tests` · `rollback_plan` · `explain_repo` · `adapt_plan` · `compose_tools` · `load_policy` · `why_did_this_change` · `what_failed_last_time` · `list_recipes` · `get_recipe`
187
+ **23 tools exposed:** `recon` · `wire` · `certify` · `enforce` · `audit_list` · `auto_plan` · `auto_step` · `auto_apply` · `context_pack` · `preflight_change` · `score_patch` · `select_tests` · `rollback_plan` · `explain_repo` · `adapt_plan` · `compose_tools` · `load_policy` · `why_did_this_change` · `what_failed_last_time` · `list_recipes` · `get_recipe` · `trust_gate_response` · `exported_api_check`
188
188
 
189
189
  **5 resources:** Receipt schema · formalization docs · lineage chain · blocker summary · verdicts
190
190
 
191
191
  ```bash
192
192
  forge mcp serve --help # full tool + resource listing with examples
193
+ forge mcp doctor --project . --json
193
194
  ```
194
195
 
196
+ As of `0.5.2`, `tools/list` includes a `cli_command` fallback for
197
+ each MCP tool. `context-pack`, `preflight`, `select-tests`, and
198
+ `score-patch` also use language-aware validation commands so
199
+ JavaScript projects get `npm run verify` / `npm test` guidance and
200
+ documentation/research paths are treated as non-code project memory.
201
+
195
202
  ### Subscription required for `forge mcp serve`
196
203
 
197
204
  Every `tools/call` against the MCP server is gated behind a paid Forge
@@ -338,7 +345,7 @@ Forge waits before returning a clear provider error.
338
345
 
339
346
  | Command | Purpose |
340
347
  |---------|---------|
341
- | `forge mcp serve` | Stdio JSON-RPC MCP server — 21 tools for Cursor / Claude Code / Aider / Devin. |
348
+ | `forge mcp serve` | Stdio JSON-RPC MCP server — 23 tools for Cursor / Claude Code / Aider / Devin. |
342
349
  | `forge plan / plan-list / plan-show / plan-step / plan-apply` | Agent plan persistence and step-by-step apply. |
343
350
  | `forge iterate` | LLM loop: intent → code → absorb → wire → score → iterate. Single shot. |
344
351
  | `forge evolve` | Recursive improvement: N rounds, catalog grows each round. |
@@ -410,7 +417,7 @@ Forge ships with named limits. No overpromise.
410
417
  | Product | What it is | Status |
411
418
  |---------|------------|--------|
412
419
  | **AAAA-Nexus** | Trust/safety/payments substrate for autonomous agents | Live at [atomadic.tech](https://atomadic.tech) |
413
- | **Atomadic Forge** | Absorb-and-emerge engine for developers (this repo) | **0.3.2** — on PyPI, 841 tests, 100/100, MCP server, desktop GUI |
420
+ | **Atomadic Forge** | Absorb-and-emerge engine for developers (this repo) | **0.5.3** — on PyPI, 937 tests, 100/100, 23-tool MCP server, desktop GUI |
414
421
  | **Atomadic Assistant** | Sovereign AI assistant with cognitive loop on Cloudflare | In development |
415
422
 
416
423
  ## License
@@ -438,7 +445,7 @@ Apache 2.0.
438
445
  **Forge itself is monadic.** Every source file belongs to one tier. The repo is a worked example:
439
446
 
440
447
  ```bash
441
- python -m pytest # 841 passing, 2 skipped
448
+ python -m pytest # 937 passed, 2 skipped
442
449
  forge doctor # Environment check
443
450
  forge wire src/atomadic_forge # Scan for violations (PASS)
444
451
  forge certify . --fail-under 100 # Score and gate the repo (100/100)
@@ -460,7 +467,7 @@ forge commandsmith smoke # Smoke-test all 36+ registered verbs
460
467
  - ✓ **100/100 certify** — forge scores itself on every CI run
461
468
  - ✓ **0 wire violations** — forge passes its own import-law scan
462
469
  - ✓ **On PyPI** — `pip install atomadic-forge`
463
- - ✓ **MCP server** — 21 tools, 5 resources; works with Cursor, Claude Code, Aider, Devin
470
+ - ✓ **MCP server** — 23 tools, 5 resources; works with Cursor, Claude Code, Aider, Devin
464
471
  - ✓ **Desktop GUI** — Forge Studio (Tauri 2 + React)
465
472
  - ✓ **Ed25519 signing** — `forge certify --local-sign`
466
473
  - ✓ **CycloneDX SBOM** — `forge sbom`
@@ -429,27 +429,31 @@ config:
429
429
  }
430
430
  ```
431
431
 
432
- Once registered, the agent gets **21 tools** + **5 resources** (the
433
- full Codex-1..5 surface as of `v0.3.0`). The 21 tools group into
432
+ Once registered, the agent gets **23 tools** + **5 resources** (the
433
+ full Codex-1..5 surface plus response/API trust gates). The 23 tools group into
434
434
  *inventory* (`recon` / `wire` / `certify` / `enforce` / `audit_list` /
435
435
  `agent_summary`), *action loop* (`auto_plan` / `auto_step` /
436
436
  `auto_apply`), and *Copilot's Copilot* (`context_pack` /
437
437
  `preflight_change` / `score_patch` / `select_tests` / `rollback_plan` /
438
438
  `explain_repo` / `adapt_plan` / `compose_tools` / `load_policy` /
439
439
  `why_did_this_change` / `what_failed_last_time` / `list_recipes` /
440
- `get_recipe`). See the full **[Agents Guide](AGENTS_GUIDE.md)** for
440
+ `get_recipe` / `trust_gate_response` / `exported_api_check`). See the full **[Agents Guide](AGENTS_GUIDE.md)** for
441
441
  integration patterns, the agent-friendly `agent_summary` /
442
442
  `context_pack` tools, the Forge Receipt schema agents should
443
443
  consume, F-code routing for mechanical fixes, the proposal-engine
444
444
  flow, and best practices.
445
445
 
446
+ For MCP troubleshooting, run `forge mcp doctor --project . --json`.
447
+ As of `0.5.2`, `tools/list` also includes a `cli_command` fallback for
448
+ each MCP tool, and validation hints are language-aware.
449
+
446
450
  ### What's the difference between AGENTS.md and the Agents Guide?
447
451
 
448
452
  - **`AGENTS.md`** at the repo root is for agents *building* Forge —
449
453
  the dev contract: tier discipline, F-code namespace, schema
450
454
  versioning, branch hygiene, the verification lane.
451
455
  - **`docs/AGENTS_GUIDE.md`** is for agents *using* Forge — Cursor /
452
- Claude Code / Aider / etc. integrating via MCP, calling the 21
456
+ Claude Code / Aider / etc. integrating via MCP, calling the 23
453
457
  tools, consuming Receipts, running `preflight_change` /
454
458
  `score_patch` guardrails, applying mechanical fixes via `enforce`.
455
459
 
@@ -42,26 +42,23 @@ Claude Code / Aider / your own):
42
42
  }
43
43
  ```
44
44
 
45
- Once registered, the agent gets **21 tools** + **5 resources** in its
46
- tool list (the full Codex-1..5 surface, shipped at v0.3.0). No
45
+ Once registered, the agent gets **23 tools** + **5 resources** in its
46
+ tool list. No
47
47
  additional setup.
48
48
 
49
49
  Smoke test that the server is reachable:
50
50
 
51
51
  ```bash
52
- printf '%s\n%s\n%s\n' \
53
- '{"jsonrpc":"2.0","id":1,"method":"initialize"}' \
54
- '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
55
- '{"jsonrpc":"2.0","id":3,"method":"shutdown"}' \
56
- | forge mcp serve --project .
52
+ forge mcp doctor --project . --json
57
53
  ```
58
54
 
59
- returns `serverInfo`, the 21 tool schemas, and `{}` for shutdown.
55
+ Returns Forge version, tool count, framed-stdio status, and the next
56
+ recovery command if the MCP host needs a restart.
60
57
  Or against the installed CLI:
61
58
 
62
59
  ```bash
63
60
  $ forge --version
64
- atomadic-forge 0.3.0
61
+ atomadic-forge 0.5.3
65
62
  ```
66
63
 
67
64
  The `--version` flag (and `-V`) is the canonical "Forge is wired in
@@ -69,7 +66,7 @@ correctly" smoke check — pin it in your setup scripts.
69
66
 
70
67
  ---
71
68
 
72
- ## The 21 MCP tools — by phase of an agent's lifecycle
69
+ ## The 23 MCP tools — by phase of an agent's lifecycle
73
70
 
74
71
  | Inventory (read-only) | Action loop | Copilot's Copilot |
75
72
  |---|---|---|
@@ -86,6 +83,8 @@ correctly" smoke check — pin it in your setup scripts.
86
83
  | | | `what_failed_last_time` |
87
84
  | | | `list_recipes` |
88
85
  | | | `get_recipe` |
86
+ | | | `trust_gate_response` |
87
+ | | | `exported_api_check` |
89
88
 
90
89
  **Inventory tools — read-only state queries.** Cheap; safe to call
91
90
  in a loop:
@@ -126,6 +125,12 @@ always-on senior engineer beside the coding agent:
126
125
  | **`what_failed_last_time`** ← *Codex-5* | `what_failed/v1` — historical failures scoped to an area | "What went wrong here before — so I don't repeat it?" |
127
126
  | **`list_recipes`** ← *Codex-5* | catalogue of golden-path recipes | First-orientation. Pre-baked: `release_hardening`, `add_cli_command`, `fix_wire_violation`, `add_feature`, `publish_mcp`. |
128
127
  | **`get_recipe`** ← *Codex-5* | `recipe/v1` — step-by-step plan | "Walk me through `release_hardening` step by step." |
128
+ | **`trust_gate_response`** | `trust_gate/v1` — response hallucination checks | Before sending generated implementation notes or code snippets back to a human. |
129
+ | **`exported_api_check`** | `exported_api_check/v1` — docstring/API promise verification | Before publishing generated modules that claim public functions in docs. |
130
+
131
+ Every `tools/list` entry includes a `cli_command` fallback. If the MCP
132
+ transport drops, use that command shape directly in the shell while
133
+ you restart the editor or MCP host.
129
134
 
130
135
  (Plus four `plan_list` / `plan_show` / `plan_step` / `plan_apply`
131
136
  verbs from Codex-3 — same 1:1 mapping to the CLI verbs of the same
@@ -139,13 +144,20 @@ name.)
139
144
  orientation; `preflight_change` *before* every write;
140
145
  `score_patch` *after* drafting the diff. Forge is the always-on
141
146
  senior engineer reviewing each step.
142
- 3. **Proposal-engine (full 21 tools)**: `auto_plan` for direction,
147
+ 3. **Proposal-engine (full 23 tools)**: `auto_plan` for direction,
143
148
  `adapt_plan` for capability-aware filtering, `auto_apply` to
144
149
  execute, `enforce` for mechanical fixes, `rollback_plan` if
145
150
  anything regresses, `why_did_this_change` /
146
151
  `what_failed_last_time` for historical context. Forge drives;
147
152
  the agent supplies LLM context where Forge can't mechanize.
148
153
 
154
+ `context_pack`, `preflight_change`, `select_tests`, and `score_patch`
155
+ are language-aware as of `0.5.2`: JavaScript projects with
156
+ `package.json` scripts get `npm run verify` / `npm test`, tier wire
157
+ commands are derived from real tier roots, and documentation paths
158
+ such as `docs/`, `research/`, `.github/`, and `cognition/guides/` are
159
+ treated as non-code artifacts rather than misplaced source.
160
+
149
161
  ---
150
162
 
151
163
  ## The 5 MCP resources
@@ -356,7 +368,7 @@ Forge's normative answer; only the *attestation chain* is missing.
356
368
  | Symptom | Likely cause | Fix |
357
369
  |---|---|---|
358
370
  | Tools list returns 0 tools | MCP client didn't pass `--project .` | Check args in MCP config |
359
- | Tools list returns < 21 (e.g. 6 or 10) | Old `forge` install (pre-v0.3.0) | `pip install -U atomadic-forge` (or `pip install -e .` from the repo). Pin `forge --version >= 0.3.0`. |
371
+ | Tools list returns < 23 (e.g. 21 or 10) | Old `forge` install | `pip install -U atomadic-forge` (or `pip install -e .` from the repo). Pin `forge --version >= 0.5.3`. |
360
372
  | `wire` says PASS but agent still hits import errors | Agent is running tests in a different working directory | `--project` should match the test cwd |
361
373
  | `certify` returns score 90 instead of 100 | Project has no `.github/workflows/` and no `CHANGELOG.md` (operational axis is 0) | Add either; both are 5pts |
362
374
  | Receipt's `signatures` is null | `AAAA_NEXUS_API_KEY` not set, or AAAA-Nexus endpoint not yet shipped | Soft-fail behavior — Receipt is still valid for local use |
@@ -423,7 +435,7 @@ control plane around any coding agent**:
423
435
  true` when the agent's intent fans out across more than 8 files
424
436
  (configurable). CLI exits 1 in that case so a pre-commit hook can
425
437
  block.
426
- - **`score_patch`** (MCP-only: `score_patch`) — diff-level risk
438
+ - **`score_patch`** (CLI: `forge score-patch`, MCP: `score_patch`) — diff-level risk
427
439
  preview. Given a unified-diff string, surfaces architectural_risk
428
440
  (new upward imports), public_api_risk (`__init__.py` touched),
429
441
  release_risk (pyproject / version / CHANGELOG / LICENSE), test_risk
@@ -1,6 +1,6 @@
1
1
  # Atomadic Forge — Command Reference
2
2
 
3
- All verbs available in the `forge` CLI as of 0.2.2.
3
+ All verbs available in the `forge` CLI as of 0.5.3.
4
4
 
5
5
  ## Pipeline / absorption
6
6
 
@@ -206,7 +206,7 @@ clean shutdown. The soft-fail contract from `receipt_signer.py`
206
206
  applies — every tool gracefully degrades when an upstream (e.g.,
207
207
  AAAA-Nexus signing) is unreachable.
208
208
 
209
- **The 21 MCP tools, grouped by phase of an agent's lifecycle:**
209
+ **The 23 MCP tools, grouped by phase of an agent's lifecycle:**
210
210
 
211
211
  | Inventory (read-only) | Action loop | Copilot's Copilot |
212
212
  |---|---|---|
@@ -223,11 +223,28 @@ AAAA-Nexus signing) is unreachable.
223
223
  | | | `what_failed_last_time` |
224
224
  | | | `list_recipes` |
225
225
  | | | `get_recipe` |
226
+ | | | `trust_gate_response` |
227
+ | | | `exported_api_check` |
226
228
 
227
229
  **5 MCP resources:** `forge://docs/receipt`, `forge://docs/formalization`,
228
230
  `forge://lineage/chain`, `forge://schema/receipt`,
229
231
  `forge://summary/blockers`.
230
232
 
233
+ ### `forge mcp doctor`
234
+
235
+ Agent-facing MCP health check. It starts the local stdio server in
236
+ memory, sends framed `initialize`, `tools/list`, and `shutdown`
237
+ requests, and reports whether the transport path is healthy.
238
+
239
+ ```bash
240
+ forge mcp doctor --project . --json
241
+ ```
242
+
243
+ Returns `atomadic-forge.mcp_doctor/v1` with Forge version, project
244
+ root, tool count, framed-stdio status, server exit code, and a
245
+ `next_command`. If this passes but your editor's live MCP tools fail,
246
+ restart the MCP host/editor so it respawns the server.
247
+
231
248
  What this unlocks per Golden Path Lane C: the Forge Receipt JSON
232
249
  becomes consumable by every major coding-agent platform via the same
233
250
  schema as `forge certify --emit-receipt` — *one Receipt across
@@ -317,10 +334,11 @@ a repo. Wraps scout + wire + certify and adds:
317
334
  - `architecture_law` — pinned 5-tier law text (so the agent doesn't
318
335
  have to look it up).
319
336
  - `tier_map`, `blockers_summary`, `best_next_action`.
320
- - `test_commands` — detected from pyproject / tox.ini / package.json /
321
- Cargo.toml / Makefile.
322
- - `release_gate` — the canonical `ruff && pytest && wire && certify
323
- 75` recipe.
337
+ - `test_commands` — language-aware detection from `package.json`
338
+ scripts, pyproject / tox.ini, Cargo.toml, or Makefile.
339
+ - `release_gate` — language-aware validation: JS repos prefer
340
+ `npm run verify` / `npm test`, Python repos get pytest/ruff, and
341
+ `forge wire` targets real tier roots instead of hard-coded `src`.
324
342
  - `risky_files`, `recent_lineage`, `pinned_resources`.
325
343
 
326
344
  ```bash
@@ -339,10 +357,13 @@ write, emits `atomadic-forge.preflight/v1` with:
339
357
  - `forbidden_imports` — tiers above this file's tier (read-only, but
340
358
  the agent should treat as hard rules before drafting).
341
359
  - `likely_tests` — mirror-style: `tests/test_<stem>.py`,
342
- `<stem>_test.py`, etc.
360
+ `<stem>_test.py`, JS/TS `*.test.*` / `*.spec.*`, etc.
343
361
  - `siblings_to_read` — first 5 `.py` siblings in the same dir.
344
362
  - Overall `write_scope_too_broad` flag (default threshold = 8 files;
345
363
  override with `--scope-threshold N`).
364
+ - Non-code artifacts under `docs/`, `research/`, `.github/`,
365
+ `cognition/guides/`, and similar paths are accepted as project
366
+ memory with no tier warning.
346
367
 
347
368
  ```bash
348
369
  forge preflight 'Add a parser helper' \
@@ -353,17 +374,22 @@ Exits **1** when `write_scope_too_broad` is true — designed to be
353
374
  called from a pre-commit hook or an agent's tool-use loop. Add
354
375
  `--json` for machine-readable output.
355
376
 
356
- (`score_patch` diff-scoring of a candidate unified-diff — is
357
- intentionally MCP-only. Diff strings are awkward as positional CLI
358
- args; agents pipe the diff through the `score_patch` MCP tool
359
- instead.)
377
+ `score_patch` also has a CLI front door:
378
+
379
+ ```bash
380
+ git diff | forge score-patch --project-root .
381
+ forge score-patch --file patch.diff --project-root .
382
+ ```
383
+
384
+ When a project root is supplied, its suggested validation commands use
385
+ the same language-aware gate as `context-pack`.
360
386
 
361
- ### Copilot's Copilot — the rest of Codex-5 (MCP-only)
387
+ ### Copilot's Copilot — the rest of Codex-5
362
388
 
363
389
  The 8 modules added in `276a092` (Codex's items #5–#12) ship as MCP
364
- tools rather than CLI verbs. Agents consume them through the running
365
- `forge mcp serve` over stdio JSON-RPC. Each returns a versioned JSON
366
- schema agents should treat as a contract:
390
+ tools and CLI verbs. Agents can consume them through `forge mcp serve`
391
+ or use the `cli_command` fallback exposed by `tools/list`. Each returns
392
+ a versioned JSON schema agents should treat as a contract:
367
393
 
368
394
  | MCP tool | Schema | What it answers |
369
395
  |---|---|---|
@@ -376,6 +402,8 @@ schema agents should treat as a contract:
376
402
  | `adapt_plan` | `atomadic-forge.agent_plan_adapted/v1` | Filter an `agent_plan/v1` for a specific agent's capability set (`edit_files`, `run_commands`, `network`, `review`, `delegate`). Each card gets `recommended_handling`: `apply` / `delegate` / `ask_human` / `report_only`. |
377
403
  | `compose_tools` | n/a (returns ordered tool list) | Goal-keyword → ordered tool sequence. Pre-baked recipes: `orient`, `release_check`, `fix_violation`, `before_edit`, `verify_patch`. |
378
404
  | `list_recipes` / `get_recipe` | `atomadic-forge.recipe/v1` | Golden-path playbooks: `release_hardening`, `add_cli_command`, `fix_wire_violation`, `add_feature`, `publish_mcp`. Each recipe is a step-by-step plan agents can `get_recipe` and execute. |
405
+ | `trust_gate_response` | `trust_gate/v1` | Check generated responses for unresolved imports, syntax errors, stub-pattern code, false capability claims, and placeholder URLs. |
406
+ | `exported_api_check` | `exported_api_check/v1` | Verify that docstring-promised public APIs resolve to actual top-level definitions. |
379
407
 
380
408
  These complete Codex's 12-item Copilot's Copilot enumeration — items
381
409
  #5–#12. Items #1–#3 are the Codex-4 hero primitives
@@ -391,7 +419,7 @@ Prints the installed Forge version and exits 0. Hardened in v0.3.0
391
419
 
392
420
  ```bash
393
421
  $ forge --version
394
- atomadic-forge 0.3.0
422
+ atomadic-forge 0.5.3
395
423
  ```
396
424
 
397
425
  ### `.forge` sidecars — Lane D W8
@@ -185,7 +185,7 @@ You now know enough to use Forge productively. For specific topics:
185
185
  - [tutorials/](tutorials/) — quickstart tutorials and the JS / TS path.
186
186
  - **[AGENTS_GUIDE.md](AGENTS_GUIDE.md)** — using Forge from a coding
187
187
  agent (Cursor / Claude Code / Aider / Devin / Copilot / Codex) via
188
- the built-in MCP server. One config snippet, **21 tools**, 5
188
+ the built-in MCP server. One config snippet, **23 tools**, 5
189
189
  resources. The fastest way to put Forge in front of every PR your
190
190
  team's agents touch.
191
191
  - [MULTI_REPO.md](MULTI_REPO.md) — absorbing more than one repo at once.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "atomadic-forge"
7
- version = "0.5.1"
7
+ version = "0.5.3"
8
8
  description = "Atomadic Forge — absorb, enforce, emerge. Polyglot (Python + JavaScript/TypeScript) architecture guardian for AI-generated code."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -9,4 +9,4 @@ Public version surface only — every symbol lives in its tier package and
9
9
  is re-exported lazily by the CLI.
10
10
  """
11
11
 
12
- __version__ = "0.5.1"
12
+ __version__ = "0.5.3"
@@ -20,6 +20,7 @@ from typing import TypedDict
20
20
 
21
21
  from .agent_summary import summarize_blockers
22
22
  from .lineage_reader import read_lineage
23
+ from .validation_commands import detect_test_commands, release_gate_commands
23
24
 
24
25
  SCHEMA_VERSION_CONTEXT_PACK_V1 = "atomadic-forge.context_pack/v1"
25
26
 
@@ -86,40 +87,12 @@ def _read_repo_purpose(project_root: Path) -> str:
86
87
 
87
88
 
88
89
  def _detect_test_commands(project_root: Path) -> list[str]:
89
- cmds: list[str] = []
90
- if (project_root / "pyproject.toml").exists():
91
- cmds.append("python -m pytest")
92
- if (project_root / "tox.ini").exists():
93
- cmds.append("tox")
94
- if (project_root / "package.json").exists():
95
- cmds.append("npm test")
96
- if (project_root / "Cargo.toml").exists():
97
- cmds.append("cargo test")
98
- if (project_root / "Makefile").exists():
99
- # Look for a 'test' target.
100
- try:
101
- mk = (project_root / "Makefile").read_text(
102
- encoding="utf-8", errors="replace")
103
- if re.search(r"^test:", mk, re.MULTILINE):
104
- cmds.append("make test")
105
- except OSError:
106
- pass
107
- if not cmds:
108
- cmds.append("# no test runner detected — add tests/ + pytest")
109
- return cmds
90
+ return detect_test_commands(project_root)
110
91
 
111
92
 
112
93
  def _release_gate(project_root: Path) -> list[str]:
113
94
  """Heuristic release gate: lint + tests + wire + certify ≥ 75."""
114
- gate: list[str] = []
115
- if (project_root / "pyproject.toml").exists():
116
- gate.append("python -m ruff check .")
117
- gate.extend([
118
- "python -m pytest",
119
- "forge wire src --fail-on-violations",
120
- "forge certify . --fail-under 75",
121
- ])
122
- return gate
95
+ return release_gate_commands(project_root)
123
96
 
124
97
 
125
98
  def _risky_files(lineage: list[dict], top_n: int = 10) -> list[dict]:
@@ -884,6 +884,32 @@ TOOLS: dict[str, dict[str, Any]] = {
884
884
  },
885
885
  }
886
886
 
887
+ _CLI_FALLBACKS: dict[str, str] = {
888
+ "recon": "forge recon <repo> --json",
889
+ "wire": "forge wire <tier-root> --json",
890
+ "certify": "forge certify <project-root> --json",
891
+ "enforce": "forge enforce <tier-root>",
892
+ "audit_list": "forge audit list --json",
893
+ "auto_plan": "forge plan <repo> --json",
894
+ "auto_step": "forge plan-step <plan-id> <card-id> --project <repo>",
895
+ "auto_apply": "forge plan-apply <plan-id> --project <repo>",
896
+ "context_pack": "forge context-pack <project-root> --json",
897
+ "preflight_change": "forge preflight <intent> <file...> --project <repo> --json",
898
+ "score_patch": "git diff | forge score-patch --project-root <repo>",
899
+ "select_tests": "forge select-tests --file <path> --project-root <repo> <intent>",
900
+ "rollback_plan": "forge rollback-plan --file <path> --project-root <repo>",
901
+ "explain_repo": "forge explain-repo <project-root>",
902
+ "adapt_plan": "forge adapt-plan --file <plan.json>",
903
+ "compose_tools": "forge compose-tools <goal>",
904
+ "load_policy": "forge load-policy <project-root>",
905
+ "why_did_this_change": "forge why-did-this-change <file> --project-root <repo>",
906
+ "what_failed_last_time": "forge what-failed-last-time <area> --project-root <repo>",
907
+ "list_recipes": "forge recipes --json",
908
+ "get_recipe": "forge recipes <name> --json",
909
+ "trust_gate_response": "MCP-only: trust_gate_response",
910
+ "exported_api_check": "MCP-only: exported_api_check",
911
+ }
912
+
887
913
 
888
914
  # --- Resource registry ---------------------------------------------------
889
915
 
@@ -1093,7 +1119,8 @@ def _list_tools() -> dict[str, Any]:
1093
1119
  "tools": [
1094
1120
  {"name": t["name"],
1095
1121
  "description": t["description"],
1096
- "inputSchema": t["inputSchema"]}
1122
+ "inputSchema": t["inputSchema"],
1123
+ "cli_command": _CLI_FALLBACKS.get(t["name"], "")}
1097
1124
  for t in TOOLS.values()
1098
1125
  ],
1099
1126
  }