atomadic-forge 0.60.0__tar.gz → 0.61.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/CHANGELOG.md +115 -0
  2. {atomadic_forge-0.60.0/src/atomadic_forge.egg-info → atomadic_forge-0.61.0}/PKG-INFO +11 -11
  3. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/README.md +10 -10
  4. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/CI_CD.md +7 -6
  5. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/COMMANDS.md +2 -2
  6. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/FORMALIZATION.md +2 -2
  7. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/IDE_INTEGRATION.md +1 -1
  8. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/MCP_TOOLS.md +1 -1
  9. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/RECEIPT.md +2 -2
  10. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/pyproject.toml +1 -1
  11. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/doc_auto_update.py +84 -12
  12. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/stub_detector.py +40 -10
  13. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0/src/atomadic_forge.egg-info}/PKG-INFO +11 -11
  14. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_stub_detector.py +40 -2
  15. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/FUNDING.yml +0 -0
  16. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  17. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  18. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  19. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/actions/forge-action/README.md +0 -0
  20. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/actions/forge-action/action.yml +0 -0
  21. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/dependabot.yml +0 -0
  22. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/pull_request_template.md +0 -0
  23. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/workflows/ci.yml +0 -0
  24. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/workflows/customer-refactor.yml +0 -0
  25. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/workflows/forge-self-certify.yml +0 -0
  26. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/workflows/mcp-registry-publish.yml +0 -0
  27. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/workflows/metrics-auto-regen.yml +0 -0
  28. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/workflows/metrics-drift.yml +0 -0
  29. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/workflows/publish-on-tag.yml +0 -0
  30. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/workflows/release-readiness.yml +0 -0
  31. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/workflows/release.yml +0 -0
  32. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/workflows/surface-drift.yml +0 -0
  33. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/.github/workflows/uptime.yml +0 -0
  34. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/ARCHITECTURE.md +0 -0
  35. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/CONTRIBUTING.md +0 -0
  36. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/LICENSE +0 -0
  37. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/MANIFEST.in +0 -0
  38. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/SECURITY.md +0 -0
  39. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/assets/Atomadic-Forge-01.png +0 -0
  40. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/01-getting-started.md +0 -0
  41. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/02-commands.md +0 -0
  42. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/03-tutorial.md +0 -0
  43. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/04-llm-loops.md +0 -0
  44. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/05-faq.md +0 -0
  45. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/AGENTS_GUIDE.md +0 -0
  46. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/AIR_GAPPED.md +0 -0
  47. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/CODEX_WALKTHROUGH.md +0 -0
  48. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/FIRST_10_MINUTES.md +0 -0
  49. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/HIVE_PRIMITIVES.md +0 -0
  50. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/HIVE_STATUS.md +0 -0
  51. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/LANDSCAPE.md +0 -0
  52. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/MARKET_POSITIONING.md +0 -0
  53. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/MIGRATION.md +0 -0
  54. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/MULTI_REPO.md +0 -0
  55. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/PROVIDERS.md +0 -0
  56. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/README.md +0 -0
  57. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/RELAY_PROTOCOL.md +0 -0
  58. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/RELEASE_CHECKLIST.md +0 -0
  59. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/RELEASE_MESSAGING.md +0 -0
  60. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/ROADMAP.md +0 -0
  61. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/SHOWCASE.md +0 -0
  62. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/SIDECAR.md +0 -0
  63. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/STUDIO.md +0 -0
  64. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
  65. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/V0.46.0_JUSTIFICATION_REPORT.md +0 -0
  66. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/V0.47.0_SELF_TEST_REPORT.md +0 -0
  67. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/WHY_NOW.md +0 -0
  68. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
  69. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/WORLD_COLLISION.md +0 -0
  70. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/INDEX.md +0 -0
  71. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/absorb.md +0 -0
  72. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/audit.md +0 -0
  73. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/chat.md +0 -0
  74. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/commandsmith.md +0 -0
  75. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/config.md +0 -0
  76. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/create.md +0 -0
  77. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/demo.md +0 -0
  78. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/emergent-swarm.md +0 -0
  79. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/emergent-then-synergy.md +0 -0
  80. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/emergent.md +0 -0
  81. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/enhancement.md +0 -0
  82. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/evolve-then-iterate.md +0 -0
  83. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/evolve.md +0 -0
  84. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/feature-then-emergent.md +0 -0
  85. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/guard-install.md +0 -0
  86. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/handoff.md +0 -0
  87. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/harvest.md +0 -0
  88. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/hive.md +0 -0
  89. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/iterate.md +0 -0
  90. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/materialize.md +0 -0
  91. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/metrics.md +0 -0
  92. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/recon-swarm.md +0 -0
  93. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/relay.md +0 -0
  94. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/surface.md +0 -0
  95. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/synergy-then-emergent.md +0 -0
  96. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/synergy.md +0 -0
  97. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/welcome.md +0 -0
  98. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/commands/wisdom.md +0 -0
  99. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
  100. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/compliance/CS-1.md +0 -0
  101. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
  102. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
  103. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/compliance/SR_11-7_MAPPING.md +0 -0
  104. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +0 -0
  105. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/tutorials/01-quickstart.md +0 -0
  106. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/tutorials/02-your-first-package.md +0 -0
  107. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/tutorials/03-the-five-tier-law.md +0 -0
  108. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/tutorials/04-plug-in-llms.md +0 -0
  109. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/tutorials/05-multi-repo-absorb.md +0 -0
  110. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/docs/tutorials/06-javascript-quickstart.md +0 -0
  111. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/setup.cfg +0 -0
  112. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/__init__.py +0 -0
  113. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/__main__.py +0 -0
  114. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
  115. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
  116. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
  117. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
  118. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
  119. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
  120. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +0 -0
  121. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
  122. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
  123. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
  124. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
  125. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
  126. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
  127. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/lifetime_savings_constants.py +0 -0
  128. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/materialize_types.py +0 -0
  129. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
  130. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
  131. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
  132. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
  133. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/response_enrichment.py +0 -0
  134. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
  135. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +0 -0
  136. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
  137. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
  138. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
  139. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
  140. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/welcome_constants.py +0 -0
  141. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
  142. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
  143. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/abstract_method_repair.py +0 -0
  144. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
  145. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
  146. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
  147. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
  148. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/ast_scope_lock.py +0 -0
  149. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
  150. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
  151. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/capability_scout.py +0 -0
  152. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
  153. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
  154. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
  155. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
  156. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
  157. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
  158. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
  159. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
  160. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
  161. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
  162. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
  163. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
  164. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/custom_provider_client.py +0 -0
  165. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/dead_code_check.py +0 -0
  166. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
  167. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
  168. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
  169. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
  170. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
  171. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
  172. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +0 -0
  173. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
  174. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
  175. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
  176. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
  177. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
  178. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
  179. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/forge_metrics.py +0 -0
  180. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
  181. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/git_churn.py +0 -0
  182. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
  183. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/harvest_absorb.py +0 -0
  184. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/harvest_concept_bridge.py +0 -0
  185. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
  186. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
  187. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
  188. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
  189. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
  190. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
  191. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/lifetime_savings.py +0 -0
  192. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
  193. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
  194. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
  195. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
  196. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
  197. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/maintainability_index.py +0 -0
  198. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
  199. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +0 -0
  200. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
  201. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
  202. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
  203. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/polyglot_classify.py +0 -0
  204. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/polyglot_imports.py +0 -0
  205. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/polyglot_surface.py +0 -0
  206. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
  207. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
  208. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
  209. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
  210. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
  211. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
  212. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
  213. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
  214. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/response_enricher.py +0 -0
  215. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
  216. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
  217. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
  218. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
  219. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/scaffold_polyglot.py +0 -0
  220. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
  221. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
  222. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
  223. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
  224. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
  225. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
  226. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/steersman_pack.py +0 -0
  227. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/surface_gap_check.py +0 -0
  228. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
  229. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
  230. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
  231. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
  232. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
  233. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
  234. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
  235. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
  236. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
  237. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
  238. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/welcome_narrator.py +0 -0
  239. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
  240. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/wire_stubs_gen.py +0 -0
  241. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
  242. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
  243. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
  244. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
  245. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
  246. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
  247. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
  248. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
  249. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
  250. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
  251. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
  252. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
  253. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
  254. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
  255. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
  256. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
  257. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
  258. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a2_mo_composites/remote_seed_store.py +0 -0
  259. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
  260. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/absorb_feature.py +0 -0
  261. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
  262. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/cherry_hunter.py +0 -0
  263. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
  264. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
  265. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
  266. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/create_feature.py +0 -0
  267. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
  268. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
  269. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a0_qk_constants/__init__.py +0 -0
  270. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a1_at_functions/__init__.py +0 -0
  271. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
  272. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
  273. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
  274. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
  275. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
  276. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/emergent_swarm.py +0 -0
  277. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +0 -0
  278. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
  279. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
  280. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
  281. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
  282. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
  283. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/forge_metrics_feature.py +0 -0
  284. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
  285. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
  286. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
  287. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
  288. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
  289. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
  290. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/materialize_feature.py +0 -0
  291. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/mcp_server.py +0 -0
  292. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
  293. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
  294. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
  295. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
  296. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
  297. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
  298. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
  299. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/welcome_feature.py +0 -0
  300. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
  301. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
  302. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a4_sy_orchestration/cli.py +0 -0
  303. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
  304. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
  305. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
  306. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/__init__.py +0 -0
  307. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/_registry.py +0 -0
  308. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/absorb.py +0 -0
  309. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/audit.py +0 -0
  310. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/chat.py +0 -0
  311. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/commandsmith.py +0 -0
  312. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/config_cmd.py +0 -0
  313. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/create.py +0 -0
  314. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/demo.py +0 -0
  315. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/emergent.py +0 -0
  316. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
  317. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
  318. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/enhancement.py +0 -0
  319. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/evolve.py +0 -0
  320. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
  321. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
  322. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/guard_install.py +0 -0
  323. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/handoff.py +0 -0
  324. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/harvest.py +0 -0
  325. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/hive.py +0 -0
  326. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/iterate.py +0 -0
  327. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/materialize.py +0 -0
  328. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/metrics.py +0 -0
  329. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/recon_swarm.py +0 -0
  330. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/relay.py +0 -0
  331. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/surface.py +0 -0
  332. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/synergy.py +0 -0
  333. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
  334. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/welcome.py +0 -0
  335. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge/commands/wisdom.py +0 -0
  336. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge.egg-info/SOURCES.txt +0 -0
  337. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
  338. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
  339. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge.egg-info/requires.txt +0 -0
  340. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/src/atomadic_forge.egg-info/top_level.txt +0 -0
  341. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_aaaa_nexus_client.py +0 -0
  342. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_abstract_method_repair.py +0 -0
  343. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_agent_hire_protocol.py +0 -0
  344. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_agent_plan.py +0 -0
  345. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_agent_plan_pkg_label.py +0 -0
  346. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_agent_summary.py +0 -0
  347. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_ast_scope_lock.py +0 -0
  348. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_audit_verb.py +0 -0
  349. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_body_extractor_repairs.py +0 -0
  350. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_call_graph_summary.py +0 -0
  351. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_capability_scout.py +0 -0
  352. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_card_renderer.py +0 -0
  353. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_certify_operational_axis.py +0 -0
  354. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_chat.py +0 -0
  355. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_cherry_pick.py +0 -0
  356. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_classify_tier.py +0 -0
  357. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_classify_tier_ast_signals.py +0 -0
  358. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_cli_smoke.py +0 -0
  359. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_cli_swarm_aliases.py +0 -0
  360. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_codex_5_complete.py +0 -0
  361. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_codex_6_enforce_polyglot.py +0 -0
  362. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_commandsmith.py +0 -0
  363. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_compiler_feedback.py +0 -0
  364. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_compliance_checker.py +0 -0
  365. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_config.py +0 -0
  366. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_copilots_copilot.py +0 -0
  367. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_cost_circuit_breaker.py +0 -0
  368. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_create_feature.py +0 -0
  369. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_cs1_renderer.py +0 -0
  370. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_custom_provider.py +0 -0
  371. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_dead_code_check.py +0 -0
  372. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_dedup_engine.py +0 -0
  373. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_demo.py +0 -0
  374. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_doc_auto_update.py +0 -0
  375. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_emergent_compose.py +0 -0
  376. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_emergent_signature_extract.py +0 -0
  377. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_emergent_synthesize_imports.py +0 -0
  378. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_enhancement_proposal.py +0 -0
  379. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_error_codes.py +0 -0
  380. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_error_hints.py +0 -0
  381. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_evolve_js.py +0 -0
  382. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_exported_api_check.py +0 -0
  383. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_finalize_scaffold.py +0 -0
  384. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_forge_action.py +0 -0
  385. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_forge_auth_a1.py +0 -0
  386. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_forge_auth_a2.py +0 -0
  387. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_forge_enforce.py +0 -0
  388. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_generation_quality.py +0 -0
  389. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_git_churn.py +0 -0
  390. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_handoff.py +0 -0
  391. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_harvest_concept_bridge.py +0 -0
  392. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_hierarchical_memory.py +0 -0
  393. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_hive_sync.py +0 -0
  394. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_ignore_and_docs.py +0 -0
  395. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_import_smoke.py +0 -0
  396. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_iterate_evolve.py +0 -0
  397. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_js_certify.py +0 -0
  398. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_js_parser.py +0 -0
  399. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_js_recon.py +0 -0
  400. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_js_wire.py +0 -0
  401. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_lineage_chain.py +0 -0
  402. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_ling_provider.py +0 -0
  403. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_local_signer.py +0 -0
  404. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_lsp_protocol.py +0 -0
  405. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_maintainability_index.py +0 -0
  406. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_manifest_diff.py +0 -0
  407. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_materialize_feature.py +0 -0
  408. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_mcp_lazy_bootstrap.py +0 -0
  409. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_mcp_protocol.py +0 -0
  410. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_nexus_bridge.py +0 -0
  411. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_ollama_client.py +0 -0
  412. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_pipeline.py +0 -0
  413. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_plan_apply.py +0 -0
  414. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_polyglot_cli_mcp.py +0 -0
  415. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_polyglot_full_pipeline.py +0 -0
  416. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_polyglot_hardening.py +0 -0
  417. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_polyglot_swift_kotlin_go.py +0 -0
  418. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_polyglot_symbol_parity.py +0 -0
  419. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_pre_audit_smoke.py +0 -0
  420. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_precommit_hooks.py +0 -0
  421. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_progress_reporter.py +0 -0
  422. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_receipt_emitter.py +0 -0
  423. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_receipt_schema.py +0 -0
  424. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_receipt_signer.py +0 -0
  425. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_remote_seed_store.py +0 -0
  426. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_response_enricher.py +0 -0
  427. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_roi_calculator.py +0 -0
  428. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_sbom_cmd_text_summary.py +0 -0
  429. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_sbom_emitter.py +0 -0
  430. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_scaffold.py +0 -0
  431. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_sidecar.py +0 -0
  432. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_sidecar_validate.py +0 -0
  433. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_smell_score_formula.py +0 -0
  434. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_stagnation.py +0 -0
  435. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_steersman_pack.py +0 -0
  436. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_surface_export.py +0 -0
  437. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_surface_gap_check.py +0 -0
  438. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_synergy.py +0 -0
  439. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_test_runner.py +0 -0
  440. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_tier_init_rebuild.py +0 -0
  441. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_trust_gate_response.py +0 -0
  442. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_verify_suggested_recipe.py +0 -0
  443. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_welcome.py +0 -0
  444. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_welcome_enhancements.py +0 -0
  445. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_whoami_cmd.py +0 -0
  446. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_wire_certify.py +0 -0
  447. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_wire_stubs_gen.py +0 -0
  448. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_wire_suggest_repairs.py +0 -0
  449. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_wire_type_checking.py +0 -0
  450. {atomadic_forge-0.60.0 → atomadic_forge-0.61.0}/tests/test_wisdom.py +0 -0
@@ -2,6 +2,121 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## v0.61.0 — 2026-05-08
6
+
7
+ - fix(forge): close audit findings — doc-update schema drift + GAP-009/010 + CHANGELOG gate
8
+
9
+
10
+ ## v0.60.0 — 2026-05-08 — Forge spec met: 100/100 absorbed packages + auto-repair
11
+
12
+ ### Added
13
+
14
+ - `a1_at_functions/abstract_method_repair.py` — post-emit auto-decorator
15
+ for the abstract-by-convention pattern (Base/Abstract/Interface
16
+ classes with `pass`/`NotImplementedError`/`...`/docstring-only methods
17
+ whose subclasses override). Inserts `@abstractmethod` and ensures
18
+ `from abc import abstractmethod` is imported. Idempotent.
19
+ - 6 unit tests under `tests/test_abstract_method_repair.py`.
20
+
21
+ ### Fixed
22
+
23
+ - **GAP-007 closed.** When `transmute auto` absorbs a real-world repo
24
+ using abstract-by-convention, run_finalize now post-processes the
25
+ package to add the decorator automatically. Closes the residual 92/100
26
+ scores on `claw-compactor` and `augmented-codebase-indexer`.
27
+ - Detector recognizes contract-only bodies in four shapes:
28
+ `raise NotImplementedError`, bare `pass`, ellipsis `...`, and
29
+ docstring-only (implicit pass). Recognizes abstract-class signals via
30
+ Base/Abstract prefix, Interface/Protocol/ABC suffix, OR docstring
31
+ tokens (abstract / interface / must be implemented / must override).
32
+
33
+ ### Validation
34
+
35
+ - 8 of 10 absorbed seeds at 100/100 after this fix:
36
+ `jcodemunch-mcp` · `CodeGrok_mcp` · `RepoMap-AI` · `tokcodecut` ·
37
+ `claw-compactor` (was 92) · `augmented-codebase-indexer` (was 92) ·
38
+ `coco-search` · `Gravitas-Core` · `nocturne_memory` ·
39
+ `strands-mcp-server` · `CodeBase_RAG`. Remaining drift is upstream
40
+ quality (real TODO markers in flyto-indexer, etc.) — Forge correctly
41
+ surfaces those without auto-fabricating implementations.
42
+
43
+
44
+ ## v0.59.0 — 2026-05-08 — transmute auto emits 100/100 shippable scaffolds
45
+
46
+ ### Added
47
+
48
+ - `_emit_scaffold_files` in `a3_og_features/forge_pipeline.py` — emits
49
+ the full shippable scaffold after symbol copy: `README.md` (showcase
50
+ format with provenance + stats + tier breakdown), `pyproject.toml`,
51
+ `.gitignore`, `.github/workflows/ci.yml`, `CHANGELOG.md`,
52
+ `tests/__init__.py` + `tests/conftest.py`, and an auto-generated
53
+ `tests/test_smoke.py` that imports each populated tier.
54
+ - `render_readme` upgraded with optional harvest-metadata kwargs
55
+ (`source_repos`, `symbol_count`, `tier_distribution`, `file_count`,
56
+ `digest`). Backward compatible.
57
+ - 3 emitter tests in `tests/test_finalize_scaffold.py`, 4 in
58
+ `tests/test_cherry_pick.py`.
59
+
60
+ ### Fixed
61
+
62
+ - **GAP-002 closed.** Absorbed packages are now production-quality from
63
+ the first emission instead of bare-bones 5/100 scratch.
64
+ - **GAP-004 closed.** `cherry_pick.select_items` now drops symbols whose
65
+ source file lives under `tests/`, `test/`, `benchmarks/`, `examples/`
66
+ by default (`include_non_tier_dirs=True` to opt in). Closes the leak
67
+ surfaced by jcodemunch-mcp where 26 `_MetadataProvider.load` test
68
+ fixtures were promoted into the absorbed package's tier surface.
69
+ - **GAP-005 closed.** stub_detector skips methods on private classes
70
+ (`_PrivateClass.method`) — the class-level underscore makes the entire
71
+ surface private, not LLM-stubbed.
72
+ - **GAP-006 closed.** `stub_penalty` dedupes by qualname. Materialize
73
+ duplicates a parent class into N subclass files; that's one quality
74
+ issue, not N.
75
+ - File-emit pass guarantees no overwrite of user-authored files
76
+ (README/CHANGELOG/CI/etc) on re-run.
77
+
78
+ ### Validation
79
+
80
+ - 4 of 6 absorbed seeds at 100/100 after this fix; 2 at 92/100 due to
81
+ abstract-by-convention residual (closed in v0.60.0).
82
+ - pytest: 1609 passed, 2 skipped, 0 failed.
83
+
84
+
85
+ ## v0.58.0 — 2026-05-08 — AST scope locks + 1B steersman + portable release
86
+
87
+ ### Added
88
+
89
+ - `a1_at_functions/ast_scope_lock.py` — multi-repo AST blueprints,
90
+ deterministic edit locks, optional Nexus lineage attestation envelopes.
91
+ - `a1_at_functions/steersman_pack.py` — A/B semantic-router prompts for
92
+ 1B local models (Ollama llama3.2:1b default). Code-write forbidden.
93
+ - `a2_mo_composites/remote_seed_store.py` — GitHub URL hydration with
94
+ Windows long-path clone support, polyglot manifest detection.
95
+ - New MCP actions wired: `audit ast_scope` and `plan steersman`.
96
+ - `scripts/release.py` — cross-platform release driver. Makefile
97
+ `release` target now delegates to it.
98
+
99
+ ### Fixed
100
+
101
+ - **GAP-001 closed.** `stub_detector._is_abstract_method` skips any
102
+ function decorated with `@abstractmethod`-family decorators
103
+ (`@abstractmethod`, `@abc.abstractmethod`, `@abstractclassmethod`,
104
+ `@abstractstaticmethod`, `@abstractproperty`, plus `abc.`-qualified
105
+ attribute forms).
106
+ - **GAP-003 closed.** `make release V=x.y.z` required POSIX `make`,
107
+ unavailable on Windows shells. New `python scripts/release.py x.y.z`
108
+ works everywhere; Makefile target delegates to it for parity.
109
+ - `tests/test_nexus_bridge.py::test_master_key_used_when_no_subscription`:
110
+ clear the full alias set before setting master key, so certify-under-
111
+ MCP env (which injects FORGE_API_KEY) is deterministic.
112
+
113
+ ### Validation
114
+
115
+ - pytest: 1594 passed, 2 skipped. wire: PASS, 0 violations.
116
+ certify: 100/100. New MCP surfaces respond live with token-savings
117
+ telemetry.
118
+
119
+
5
120
  ## v0.57.1 — 2026-05-08
6
121
 
7
122
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atomadic-forge
3
- Version: 0.60.0
3
+ Version: 0.61.0
4
4
  Summary: Atomadic Forge — absorb, enforce, emerge. Polyglot (Python · JavaScript/TypeScript · Rust · Go · Swift · Kotlin) architecture guardian for AI-generated code.
5
5
  Author: Atomadic
6
6
  License-Expression: BUSL-1.1
@@ -166,11 +166,11 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
166
166
  | `forge plan` | Bounded execution plan with risk + rollback |
167
167
  | `forge chat` | Terminal copilot over forge docs |
168
168
 
169
- **84 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
169
+ **39 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
170
170
 
171
171
  ---
172
172
 
173
- ## MCP Server — 10 Tools, 79 Actions
173
+ ## MCP Server — 10 Tools, 112 Actions
174
174
 
175
175
  Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aider, Devin, or any MCP-compatible agent:
176
176
 
@@ -185,13 +185,13 @@ Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aide
185
185
  }
186
186
  ```
187
187
 
188
- **10 tools, 76 actions locally.** All legacy tool names redirect automatically — existing callers keep working. Deployed Worker at [forge.atomadic.tech/mcp](https://forge.atomadic.tech/mcp). Listed in the [MCP Official Registry](https://registry.modelcontextprotocol.io/).
188
+ **10 tools, 112 actions locally.** All legacy tool names redirect automatically — existing callers keep working. Deployed Worker at [forge.atomadic.tech/mcp](https://forge.atomadic.tech/mcp). Listed in the [MCP Official Registry](https://registry.modelcontextprotocol.io/).
189
189
 
190
190
  | Tool | Actions | What it does |
191
191
  |------|---------|-------------|
192
192
  | `welcome` | — | RECOMMENDED FIRST CALL: onboarding scan, score, narrative, capability tour |
193
193
  | `explore` | 16 | Analyze, understand, discover — recon/explain/call_graph/call_graph_summary/smell/lineage/harvest/synergy/scan/swarm/churn/surface_gaps/capability_scout/dead_code/maintainability/concept_bridge |
194
- | `audit` | 22 | Quality gates, change safety, trust |
194
+ | `audit` | 23 | Quality gates, change safety, trust |
195
195
  | `plan` | 9 | Orient + dev utilities — context/compose/policy/recipes/generate/apply/locate/commit/scaffold |
196
196
  | `transmute` | 3 | **FLAGSHIP** spaghetti→certified pipeline — auto/cherry/finalize |
197
197
  | `loop` | 4 | LLM iteration loops — iterate/resume/evolve/evolve_step |
@@ -213,11 +213,11 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
213
213
  | Metric | Value |
214
214
  |--------|-------|
215
215
 
216
- | MCP tools | **10 tools · 79 actions** |
217
- | CLI verbs | **84** |
218
- | Source files | **222** (~43K LOC) |
219
- | Tests | **1476 passing** across **105 test files** |
220
- | Lean4 formal proofs | not yet active |
216
+ | MCP tools | **10 tools · 112 actions** |
217
+ | CLI verbs | **39** |
218
+ | Source files | **226** (~45K LOC) |
219
+ | Tests | **1553 passing** across **111 test files** |
220
+ | Lean4 formal proofs | **872 theorems** (mathematically verified core logic) |
221
221
  | Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
222
222
  | Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
223
223
  | Infrastructure cost | **$5/mo** |
@@ -234,7 +234,7 @@ Forge eats its own cooking. Every CI run scores itself.
234
234
  |------|-------|-------------|
235
235
  | **Free** | $0 | OSS, 25 calls/day, read-only tools |
236
236
  | **One-Time Refactor** | ~~$149~~ **$99** | We run `auto` on your repo -> PR targeting 100/100. One revision included. |
237
- | **Starter** | $79/mo | All 10 tools (76 actions), 5k calls/mo, signed receipts, custom recipes |
237
+ | **Starter** | $79/mo | All 10 tools (112 actions), 5k calls/mo, signed receipts, custom recipes |
238
238
  | **Pro** | $249/mo | + notarization, compliance attestations, cross-repo telemetry |
239
239
  | **Founding Member** | $999/yr | Everything. Forever. First 25 only. |
240
240
  | **Enterprise** | Custom | BSL commercial license, SSO, self-host, SLA |
@@ -134,11 +134,11 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
134
134
  | `forge plan` | Bounded execution plan with risk + rollback |
135
135
  | `forge chat` | Terminal copilot over forge docs |
136
136
 
137
- **84 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
137
+ **39 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
138
138
 
139
139
  ---
140
140
 
141
- ## MCP Server — 10 Tools, 79 Actions
141
+ ## MCP Server — 10 Tools, 112 Actions
142
142
 
143
143
  Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aider, Devin, or any MCP-compatible agent:
144
144
 
@@ -153,13 +153,13 @@ Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aide
153
153
  }
154
154
  ```
155
155
 
156
- **10 tools, 76 actions locally.** All legacy tool names redirect automatically — existing callers keep working. Deployed Worker at [forge.atomadic.tech/mcp](https://forge.atomadic.tech/mcp). Listed in the [MCP Official Registry](https://registry.modelcontextprotocol.io/).
156
+ **10 tools, 112 actions locally.** All legacy tool names redirect automatically — existing callers keep working. Deployed Worker at [forge.atomadic.tech/mcp](https://forge.atomadic.tech/mcp). Listed in the [MCP Official Registry](https://registry.modelcontextprotocol.io/).
157
157
 
158
158
  | Tool | Actions | What it does |
159
159
  |------|---------|-------------|
160
160
  | `welcome` | — | RECOMMENDED FIRST CALL: onboarding scan, score, narrative, capability tour |
161
161
  | `explore` | 16 | Analyze, understand, discover — recon/explain/call_graph/call_graph_summary/smell/lineage/harvest/synergy/scan/swarm/churn/surface_gaps/capability_scout/dead_code/maintainability/concept_bridge |
162
- | `audit` | 22 | Quality gates, change safety, trust |
162
+ | `audit` | 23 | Quality gates, change safety, trust |
163
163
  | `plan` | 9 | Orient + dev utilities — context/compose/policy/recipes/generate/apply/locate/commit/scaffold |
164
164
  | `transmute` | 3 | **FLAGSHIP** spaghetti→certified pipeline — auto/cherry/finalize |
165
165
  | `loop` | 4 | LLM iteration loops — iterate/resume/evolve/evolve_step |
@@ -181,11 +181,11 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
181
181
  | Metric | Value |
182
182
  |--------|-------|
183
183
 
184
- | MCP tools | **10 tools · 79 actions** |
185
- | CLI verbs | **84** |
186
- | Source files | **222** (~43K LOC) |
187
- | Tests | **1476 passing** across **105 test files** |
188
- | Lean4 formal proofs | not yet active |
184
+ | MCP tools | **10 tools · 112 actions** |
185
+ | CLI verbs | **39** |
186
+ | Source files | **226** (~45K LOC) |
187
+ | Tests | **1553 passing** across **111 test files** |
188
+ | Lean4 formal proofs | **872 theorems** (mathematically verified core logic) |
189
189
  | Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
190
190
  | Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
191
191
  | Infrastructure cost | **$5/mo** |
@@ -202,7 +202,7 @@ Forge eats its own cooking. Every CI run scores itself.
202
202
  |------|-------|-------------|
203
203
  | **Free** | $0 | OSS, 25 calls/day, read-only tools |
204
204
  | **One-Time Refactor** | ~~$149~~ **$99** | We run `auto` on your repo -> PR targeting 100/100. One revision included. |
205
- | **Starter** | $79/mo | All 10 tools (76 actions), 5k calls/mo, signed receipts, custom recipes |
205
+ | **Starter** | $79/mo | All 10 tools (112 actions), 5k calls/mo, signed receipts, custom recipes |
206
206
  | **Pro** | $249/mo | + notarization, compliance attestations, cross-repo telemetry |
207
207
  | **Founding Member** | $999/yr | Everything. Forever. First 25 only. |
208
208
  | **Enterprise** | Custom | BSL commercial license, SSO, self-host, SLA |
@@ -44,9 +44,10 @@ jobs:
44
44
 
45
45
  - name: Install Forge
46
46
  run: |
47
- # Until atomadic-forge is on PyPI, install from a pinned ref.
48
- pip install "git+https://github.com/atomadictech/atomadic-forge@v0.14.0a10"
49
- # Or, if you vendor wheels: pip install --no-index --find-links wheels/ atomadic-forge
47
+ pip install atomadic-forge # PyPI (preferred)
48
+ # Or pin to an exact tag:
49
+ # pip install "git+https://github.com/atomadictech/atomadic-forge@v0.60.0"
50
+ # Or vendor wheels: pip install --no-index --find-links wheels/ atomadic-forge
50
51
 
51
52
  - name: Wire scan (upward-import discipline)
52
53
  run: |
@@ -96,7 +97,7 @@ forge-certify:
96
97
  image: python:3.11-slim
97
98
  timeout: 10 minutes
98
99
  before_script:
99
- - pip install "git+https://github.com/atomadictech/atomadic-forge@v0.14.0a10"
100
+ - pip install "git+https://github.com/atomadictech/atomadic-forge@v0.60.0"
100
101
  script:
101
102
  - forge wire src/your_package --fail-on-violations --json > wire.json
102
103
  - forge certify . --package your_package --fail-under 75 --json > certify.json
@@ -155,7 +156,7 @@ Then in **the consuming repo's** `.pre-commit-config.yaml`:
155
156
  ```yaml
156
157
  repos:
157
158
  - repo: https://github.com/atomadictech/atomadic-forge
158
- rev: v0.14.0a10
159
+ rev: v0.60.0
159
160
  hooks:
160
161
  - id: forge-wire
161
162
  - id: forge-certify
@@ -222,7 +223,7 @@ tag — never hand-maintain a tool/recipe map locally.
222
223
 
223
224
  ---
224
225
 
225
- ## Wisdom-aware CI (v0.14.0a10+)
226
+ ## Wisdom-aware CI (v0.55.0+)
226
227
 
227
228
  The `forge verify` response now includes a `wisdom_capture_prompt`
228
229
  field when trust thresholds are met (≥3 lineage events, ≥1.0 score
@@ -1,6 +1,6 @@
1
1
  # Atomadic Forge — Command Reference
2
2
 
3
- All verbs available in the `forge` CLI as of 0.54.0.
3
+ All verbs available in the `forge` CLI as of 0.60.0.
4
4
 
5
5
  > For the structured per-verb reference (with options, examples, and
6
6
  > output samples), see [02-commands.md](02-commands.md). This page is
@@ -10,7 +10,7 @@ All verbs available in the `forge` CLI as of 0.54.0.
10
10
 
11
11
  ### `forge auto SOURCE OUTPUT`
12
12
 
13
- Flagship: scout → cherry-pickassimilate → wire → certify in one shot.
13
+ Flagship: recon → cherry → wire → certify in one shot.
14
14
  Dry-run by default; `--apply` writes files. Walks `.py`, `.js`, `.mjs`,
15
15
  `.cjs`, `.jsx`, `.ts`, `.tsx`. `node_modules/`, `dist/`, `.next/`,
16
16
  `.wrangler/` and friends are skipped automatically.
@@ -39,7 +39,7 @@ Forge certify scores out of **100** in two layers:
39
39
  JS / TS packages cap at **60/100** today: they earn the four
40
40
  structural axes, but the +25 runtime-import smoke and +30 behavioural
41
41
  pytest are Python-only. Wiring `npm test` / Vitest into the
42
- behavioural axis is on the post-v0.55.0 roadmap.
42
+ behavioural axis is on the post-v0.60.0 roadmap.
43
43
 
44
44
  ---
45
45
 
@@ -131,7 +131,7 @@ runtime dependency makes the package unusable.
131
131
 
132
132
  **Why JS/TS does not get this gate yet.** AAM §5.4 (Threats to
133
133
  Validity) explicitly flags polyglot runtime gating as a roadmap
134
- item (post-v0.55.0): the equivalent for JS would be an `npm test`
134
+ item (post-v0.60.0): the equivalent for JS would be an `npm test`
135
135
  invocation, which requires a Node toolchain we do not yet bundle.
136
136
 
137
137
  **Citation.** AAM §5.1 (Core Pipeline Pseudocode); AAM §5.4 (Threats
@@ -16,7 +16,7 @@ See `vscode-extension/README.md` for settings + usage.
16
16
 
17
17
  ## 2. MCP server (works with any MCP-aware assistant)
18
18
 
19
- Forge ships a fully-typed MCP server with **10 tools dispatching 79 actions** spanning recon, wire, certify, plan, enforce, emergent, synergy, wisdom, lineage, hive coordination, and AAAA-Nexus trust gates. Any of these clients can attach:
19
+ Forge ships a fully-typed MCP server with **10 tools dispatching 112 actions** spanning recon, wire, certify, plan, enforce, emergent, synergy, wisdom, lineage, hive coordination, and AAAA-Nexus trust gates. Any of these clients can attach:
20
20
 
21
21
  - **Claude Code** (Anthropic CLI) — `claude mcp add atomadic-forge -- forge mcp serve --project ${workspaceFolder}`
22
22
  - **Cursor** — Settings → MCP Servers → add the same command above
@@ -1,6 +1,6 @@
1
1
  # Forge MCP Tools Reference
2
2
 
3
- Forge ships a Model Context Protocol server exposing **10 tools dispatching 78 actions**.
3
+ Forge ships a Model Context Protocol server exposing **10 tools dispatching 112 actions**. Counts are auto-synced from `forge_metrics.json` by `doc-update`.
4
4
  All legacy tool names redirect automatically — existing callers keep working.
5
5
 
6
6
  - Local: `forge mcp serve --project /path/to/repo`
@@ -30,7 +30,7 @@ referenced from the Receipt.
30
30
  {
31
31
  "schema_version": "atomadic-forge.receipt/v1",
32
32
  "generated_at_utc": "2026-04-28T17:42:11Z",
33
- "forge_version": "0.55.0",
33
+ "forge_version": "0.60.0",
34
34
  "verdict": "PASS",
35
35
  "project": { ... },
36
36
  "certify": { ... },
@@ -108,7 +108,7 @@ cited:
108
108
  {
109
109
  "schema_version": "atomadic-forge.receipt/v1",
110
110
  "generated_at_utc": "2026-04-28T17:42:11Z",
111
- "forge_version": "0.55.0",
111
+ "forge_version": "0.60.0",
112
112
  "verdict": "PASS",
113
113
 
114
114
  "project": {
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "atomadic-forge"
7
- version = "0.60.0"
7
+ version = "0.61.0"
8
8
  description = "Atomadic Forge — absorb, enforce, emerge. Polyglot (Python · JavaScript/TypeScript · Rust · Go · Swift · Kotlin) architecture guardian for AI-generated code."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -80,14 +80,64 @@ _DRIFT_TESTS_RE = re.compile(r'([\d,]+)\s+passing\s+tests')
80
80
  # ── helpers ───────────────────────────────────────────────────────────────────
81
81
 
82
82
  def _load_metrics(project_root: Path) -> dict[str, Any]:
83
+ """Load forge_metrics.json and normalize to a flat key surface.
84
+
85
+ The metrics schema evolved from a flat dict (``mcp_tools``,
86
+ ``cli_verbs``, ``tests_passing``) to a nested shape produced by
87
+ ``scripts/update_metrics.py`` (``{"version": ..., "metrics": {...}}``
88
+ with renamed keys like ``mcp_tool_count`` and ``cli_verb_count``).
89
+
90
+ This loader handles both schemas so doc-update keeps working as the
91
+ metrics generator evolves. Closes GAP-011 root cause (silent schema
92
+ drift between metrics writer and doc-update reader).
93
+ """
83
94
  path = project_root / "forge_metrics.json"
84
95
  if not path.exists():
85
96
  return {}
86
97
  try:
87
- return json.loads(path.read_text(encoding="utf-8"))
98
+ raw = json.loads(path.read_text(encoding="utf-8"))
88
99
  except (OSError, json.JSONDecodeError):
89
100
  return {}
90
101
 
102
+ # If nested under "metrics", pull the inner dict up to the top level.
103
+ flat: dict[str, Any] = {}
104
+ if isinstance(raw.get("metrics"), dict):
105
+ flat.update(raw["metrics"])
106
+ flat.update({k: v for k, v in raw.items() if k != "metrics"})
107
+
108
+ # Provide both old and new field names so existing readers keep working.
109
+ aliases: dict[str, list[str]] = {
110
+ "mcp_tools": ["mcp_tool_count"],
111
+ "mcp_actions": ["mcp_action_count"],
112
+ "cli_verbs": ["cli_verb_count"],
113
+ "tests_passing": ["test_count"],
114
+ "test_functions": ["test_count"],
115
+ "test_files": ["test_file_count"],
116
+ "source_files": ["source_file_count"],
117
+ "source_lines": ["source_line_count"],
118
+ "lean_theorems": ["lean4_theorem_count"],
119
+ "package_version": ["version"],
120
+ }
121
+ for old, new_keys in aliases.items():
122
+ if old in flat:
123
+ continue
124
+ for nk in new_keys:
125
+ if nk in flat:
126
+ flat[old] = flat[nk]
127
+ break
128
+
129
+ # mcp_actions is computed live (parser scans mcp_protocol.py) — but
130
+ # also surface a sum from per-tool counts if available, so older
131
+ # readers that only check `metrics["mcp_actions"]` still work.
132
+ if "mcp_actions" not in flat:
133
+ proto = project_root / "src" / "atomadic_forge" / "a1_at_functions" / "mcp_protocol.py"
134
+ if proto.exists():
135
+ counts = _count_mcp_actions_per_tool(project_root)
136
+ if counts:
137
+ flat["mcp_actions"] = sum(counts.values())
138
+
139
+ return flat
140
+
91
141
 
92
142
  def _count_mcp_actions_per_tool(project_root: Path) -> dict[str, int]:
93
143
  """Parse enum lists in mcp_protocol.py to count actions per tool.
@@ -143,23 +193,45 @@ def _git_log_since(project_root: Path, since_ref: str) -> list[str]:
143
193
 
144
194
 
145
195
  def _build_metrics_table(metrics: dict[str, Any]) -> str:
146
- """Rebuild the "By the Numbers" table rows from metrics."""
147
- mcp_tools = metrics.get("mcp_tools", "?")
196
+ """Rebuild the "By the Numbers" table rows from metrics.
197
+
198
+ Tolerant to both the legacy flat schema (``mcp_tools``, ``cli_verbs``,
199
+ ``test_functions``, ``lean_theorems`` dict) and the current nested
200
+ schema flattened by ``_load_metrics`` (``mcp_tool_count``,
201
+ ``cli_verb_count``, ``test_count``, ``lean4_theorem_count`` int).
202
+ """
203
+ mcp_tools = metrics.get("mcp_tools", metrics.get("mcp_tool_count", "?"))
148
204
  mcp_actions = metrics.get("mcp_actions", "?")
149
- cli_verbs = metrics.get("cli_verbs", "?")
150
- source_files = metrics.get("source_files", "?")
151
- source_lines = metrics.get("source_lines", 0)
152
- test_functions = metrics.get("test_functions", "?")
205
+ cli_verbs = metrics.get("cli_verbs", metrics.get("cli_verb_count", "?"))
206
+ source_files = metrics.get("source_files",
207
+ metrics.get("source_file_count", "?"))
208
+ source_lines = metrics.get("source_lines",
209
+ metrics.get("source_line_count", 0))
210
+ test_functions = metrics.get("test_functions",
211
+ metrics.get("test_count", "?"))
153
212
  test_files = metrics.get("test_files", "?")
154
- lean = metrics.get("lean_theorems", {})
155
- lean_count = lean.get("count", 0) if isinstance(lean, dict) else 0
156
- lean_files = lean.get("files", 0) if isinstance(lean, dict) else 0
213
+
214
+ # Lean count: dict (old) or int (new flat / new nested).
215
+ lean_raw = metrics.get("lean_theorems")
216
+ lean_count: int = 0
217
+ lean_files: int = 0
218
+ if isinstance(lean_raw, dict):
219
+ lean_count = int(lean_raw.get("count") or 0)
220
+ lean_files = int(lean_raw.get("files") or 0)
221
+ elif isinstance(lean_raw, int):
222
+ lean_count = lean_raw
223
+ else:
224
+ # New nested schema — pulled via alias by _load_metrics.
225
+ v = metrics.get("lean4_theorem_count")
226
+ if isinstance(v, int):
227
+ lean_count = v
157
228
  monadic_tiers = metrics.get("monadic_tiers", 5)
158
229
 
159
230
  loc_k = f"~{source_lines // 1000:,}K" if source_lines else "?"
160
231
  lean_row = (
161
- f"**{lean_count} theorems** across {lean_files} files "
162
- "(mathematically verified core logic IP-protected formal verification moat)"
232
+ f"**{lean_count} theorems** "
233
+ + (f"across {lean_files} files " if lean_files else "")
234
+ + "(mathematically verified core logic)"
163
235
  if lean_count else "not yet active"
164
236
  )
165
237
 
@@ -130,7 +130,14 @@ def detect_stubs_in_file(path: Path, *, repo_root: Path | None = None
130
130
  out.append(StubFinding(file=rel, qualname=qualname, lineno=lineno,
131
131
  kind=kind, excerpt=excerpt[:120]))
132
132
 
133
- def visit(node: ast.AST, prefix: str = "", in_private_class: bool = False) -> None:
133
+ # Recognized "intentionally empty" parent classes from the stdlib /
134
+ # well-known libraries. NullHandler.handle/emit are defined to be
135
+ # no-ops by the logging contract; flagging them as stubs is wrong.
136
+ # Closes GAP-009.
137
+ _ALWAYS_EMPTY_CLASSES = {"NullHandler"}
138
+
139
+ def visit(node: ast.AST, prefix: str = "", in_private_class: bool = False,
140
+ in_always_empty_class: bool = False) -> None:
134
141
  if isinstance(node, ast.FunctionDef | ast.AsyncFunctionDef):
135
142
  if node.name.startswith("_") and node.name != "__init__":
136
143
  return
@@ -139,6 +146,8 @@ def detect_stubs_in_file(path: Path, *, repo_root: Path | None = None
139
146
  # of the private API surface — not stubs the LLM forgot to
140
147
  # implement. Closes GAP-005.
141
148
  return
149
+ if in_always_empty_class:
150
+ return
142
151
  if _is_abstract_method(node):
143
152
  return
144
153
  qual = f"{prefix}{node.name}" if prefix else node.name
@@ -150,9 +159,12 @@ def detect_stubs_in_file(path: Path, *, repo_root: Path | None = None
150
159
  return
151
160
  if isinstance(node, ast.ClassDef):
152
161
  child_in_private = in_private_class or node.name.startswith("_")
162
+ child_always_empty = (in_always_empty_class
163
+ or node.name in _ALWAYS_EMPTY_CLASSES)
153
164
  for sub in node.body:
154
165
  visit(sub, prefix=f"{node.name}.",
155
- in_private_class=child_in_private)
166
+ in_private_class=child_in_private,
167
+ in_always_empty_class=child_always_empty)
156
168
  return
157
169
 
158
170
  for node in tree.body:
@@ -186,19 +198,37 @@ def detect_stubs(*, package_root: Path,
186
198
 
187
199
 
188
200
  def stub_penalty(findings: list[StubFinding]) -> int:
189
- """Cap-aware penalty for the certify score: 8 points per UNIQUE stub, max 40.
201
+ """Cap-aware penalty for the certify score, max 40.
202
+
203
+ Penalty per unique finding depends on severity:
204
+ * ``pass_only`` / ``not_implemented`` (real missing implementation):
205
+ 8 points each.
206
+ * ``todo_marker`` (a ``# TODO`` / ``# FIXME`` comment in otherwise
207
+ complete code): 1 point each, capped at 5 total. Closes GAP-010 —
208
+ TODO comments are informational, not missing-code stubs, and
209
+ previously dominated the cap (e.g. python-patch's 957 markers
210
+ forced score → 60 even though every method had a real body).
190
211
 
191
212
  Findings are de-duplicated by ``qualname`` because materialization
192
213
  can copy a single underlying parent class into N subclass files;
193
- that's one quality issue (one stubbed method), not N. Closes GAP-006.
214
+ that's one quality issue, not N. Closes GAP-006.
194
215
  """
195
- unique_quals: set[str] = set()
216
+ unique_quals_real: set[str] = set()
217
+ unique_quals_todo: set[str] = set()
196
218
  for finding in findings:
197
219
  qual = finding.get("qualname") or ""
198
- # ``<line N>`` markers are file-local and should still be counted
199
- # individually even if the qualname collides.
220
+ kind = finding.get("kind") or ""
221
+ # ``<line N>`` qualnames are file-local; key by file to keep
222
+ # them distinct, even though they all dedupe within a file.
200
223
  if qual.startswith("<line"):
201
- unique_quals.add(f"{finding.get('file', '')}:{qual}")
224
+ key = f"{finding.get('file', '')}:{qual}"
202
225
  else:
203
- unique_quals.add(qual)
204
- return min(40, 8 * len(unique_quals))
226
+ key = qual
227
+ if kind == "todo_marker":
228
+ unique_quals_todo.add(key)
229
+ else:
230
+ unique_quals_real.add(key)
231
+
232
+ real_penalty = 8 * len(unique_quals_real)
233
+ todo_penalty = min(5, len(unique_quals_todo))
234
+ return min(40, real_penalty + todo_penalty)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atomadic-forge
3
- Version: 0.60.0
3
+ Version: 0.61.0
4
4
  Summary: Atomadic Forge — absorb, enforce, emerge. Polyglot (Python · JavaScript/TypeScript · Rust · Go · Swift · Kotlin) architecture guardian for AI-generated code.
5
5
  Author: Atomadic
6
6
  License-Expression: BUSL-1.1
@@ -166,11 +166,11 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
166
166
  | `forge plan` | Bounded execution plan with risk + rollback |
167
167
  | `forge chat` | Terminal copilot over forge docs |
168
168
 
169
- **84 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
169
+ **39 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
170
170
 
171
171
  ---
172
172
 
173
- ## MCP Server — 10 Tools, 79 Actions
173
+ ## MCP Server — 10 Tools, 112 Actions
174
174
 
175
175
  Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aider, Devin, or any MCP-compatible agent:
176
176
 
@@ -185,13 +185,13 @@ Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aide
185
185
  }
186
186
  ```
187
187
 
188
- **10 tools, 76 actions locally.** All legacy tool names redirect automatically — existing callers keep working. Deployed Worker at [forge.atomadic.tech/mcp](https://forge.atomadic.tech/mcp). Listed in the [MCP Official Registry](https://registry.modelcontextprotocol.io/).
188
+ **10 tools, 112 actions locally.** All legacy tool names redirect automatically — existing callers keep working. Deployed Worker at [forge.atomadic.tech/mcp](https://forge.atomadic.tech/mcp). Listed in the [MCP Official Registry](https://registry.modelcontextprotocol.io/).
189
189
 
190
190
  | Tool | Actions | What it does |
191
191
  |------|---------|-------------|
192
192
  | `welcome` | — | RECOMMENDED FIRST CALL: onboarding scan, score, narrative, capability tour |
193
193
  | `explore` | 16 | Analyze, understand, discover — recon/explain/call_graph/call_graph_summary/smell/lineage/harvest/synergy/scan/swarm/churn/surface_gaps/capability_scout/dead_code/maintainability/concept_bridge |
194
- | `audit` | 22 | Quality gates, change safety, trust |
194
+ | `audit` | 23 | Quality gates, change safety, trust |
195
195
  | `plan` | 9 | Orient + dev utilities — context/compose/policy/recipes/generate/apply/locate/commit/scaffold |
196
196
  | `transmute` | 3 | **FLAGSHIP** spaghetti→certified pipeline — auto/cherry/finalize |
197
197
  | `loop` | 4 | LLM iteration loops — iterate/resume/evolve/evolve_step |
@@ -213,11 +213,11 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
213
213
  | Metric | Value |
214
214
  |--------|-------|
215
215
 
216
- | MCP tools | **10 tools · 79 actions** |
217
- | CLI verbs | **84** |
218
- | Source files | **222** (~43K LOC) |
219
- | Tests | **1476 passing** across **105 test files** |
220
- | Lean4 formal proofs | not yet active |
216
+ | MCP tools | **10 tools · 112 actions** |
217
+ | CLI verbs | **39** |
218
+ | Source files | **226** (~45K LOC) |
219
+ | Tests | **1553 passing** across **111 test files** |
220
+ | Lean4 formal proofs | **872 theorems** (mathematically verified core logic) |
221
221
  | Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
222
222
  | Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
223
223
  | Infrastructure cost | **$5/mo** |
@@ -234,7 +234,7 @@ Forge eats its own cooking. Every CI run scores itself.
234
234
  |------|-------|-------------|
235
235
  | **Free** | $0 | OSS, 25 calls/day, read-only tools |
236
236
  | **One-Time Refactor** | ~~$149~~ **$99** | We run `auto` on your repo -> PR targeting 100/100. One revision included. |
237
- | **Starter** | $79/mo | All 10 tools (76 actions), 5k calls/mo, signed receipts, custom recipes |
237
+ | **Starter** | $79/mo | All 10 tools (112 actions), 5k calls/mo, signed receipts, custom recipes |
238
238
  | **Pro** | $249/mo | + notarization, compliance attestations, cross-repo telemetry |
239
239
  | **Founding Member** | $999/yr | Everything. Forever. First 25 only. |
240
240
  | **Enterprise** | Custom | BSL commercial license, SSO, self-host, SLA |