atomadic-forge 0.51.6__tar.gz → 0.52.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 (423) hide show
  1. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/mcp-registry-publish.yml +8 -4
  2. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/CHANGELOG.md +29 -0
  3. {atomadic_forge-0.51.6/src/atomadic_forge.egg-info → atomadic_forge-0.52.0}/PKG-INFO +4 -4
  4. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/README.md +3 -3
  5. atomadic_forge-0.52.0/docs/commands/INDEX.md +34 -0
  6. atomadic_forge-0.52.0/docs/commands/absorb.md +9 -0
  7. atomadic_forge-0.52.0/docs/commands/audit.md +9 -0
  8. atomadic_forge-0.52.0/docs/commands/create.md +9 -0
  9. atomadic_forge-0.52.0/docs/commands/emergent-swarm.md +19 -0
  10. atomadic_forge-0.52.0/docs/commands/enhancement.md +9 -0
  11. atomadic_forge-0.52.0/docs/commands/guard-install.md +9 -0
  12. atomadic_forge-0.52.0/docs/commands/handoff.md +9 -0
  13. atomadic_forge-0.52.0/docs/commands/harvest.md +9 -0
  14. atomadic_forge-0.52.0/docs/commands/hive.md +9 -0
  15. atomadic_forge-0.52.0/docs/commands/materialize.md +9 -0
  16. atomadic_forge-0.52.0/docs/commands/metrics.md +9 -0
  17. atomadic_forge-0.52.0/docs/commands/recon-swarm.md +9 -0
  18. atomadic_forge-0.52.0/docs/commands/relay.md +9 -0
  19. atomadic_forge-0.52.0/docs/commands/surface.md +9 -0
  20. atomadic_forge-0.52.0/docs/commands/welcome.md +9 -0
  21. atomadic_forge-0.52.0/docs/commands/wisdom.md +9 -0
  22. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/pyproject.toml +1 -1
  23. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/forge_metrics.py +65 -1
  24. atomadic_forge-0.52.0/src/atomadic_forge/a1_at_functions/harvest_absorb.py +170 -0
  25. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +0 -13
  26. atomadic_forge-0.52.0/src/atomadic_forge/a3_og_features/absorb_feature.py +134 -0
  27. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/create_feature.py +7 -62
  28. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/emergent_swarm.py +25 -0
  29. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_metrics_feature.py +1 -1
  30. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/cli.py +3 -0
  31. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/_registry.py +28 -0
  32. atomadic_forge-0.52.0/src/atomadic_forge/commands/absorb.py +96 -0
  33. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0/src/atomadic_forge.egg-info}/PKG-INFO +4 -4
  34. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/SOURCES.txt +19 -0
  35. atomadic_forge-0.51.6/docs/commands/INDEX.md +0 -18
  36. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/FUNDING.yml +0 -0
  37. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  38. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  39. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  40. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/actions/forge-action/README.md +0 -0
  41. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/actions/forge-action/action.yml +0 -0
  42. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/dependabot.yml +0 -0
  43. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/pull_request_template.md +0 -0
  44. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/ci.yml +0 -0
  45. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/customer-refactor.yml +0 -0
  46. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/forge-self-certify.yml +0 -0
  47. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/metrics-auto-regen.yml +0 -0
  48. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/metrics-drift.yml +0 -0
  49. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/publish-on-tag.yml +0 -0
  50. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/release-readiness.yml +0 -0
  51. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/release.yml +0 -0
  52. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/surface-drift.yml +0 -0
  53. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/.github/workflows/uptime.yml +0 -0
  54. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/ARCHITECTURE.md +0 -0
  55. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/CONTRIBUTING.md +0 -0
  56. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/LICENSE +0 -0
  57. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/MANIFEST.in +0 -0
  58. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/SECURITY.md +0 -0
  59. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/assets/Atomadic-Forge-01.png +0 -0
  60. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/01-getting-started.md +0 -0
  61. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/02-commands.md +0 -0
  62. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/03-tutorial.md +0 -0
  63. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/04-llm-loops.md +0 -0
  64. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/05-faq.md +0 -0
  65. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/AGENTS_GUIDE.md +0 -0
  66. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/AIR_GAPPED.md +0 -0
  67. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/CI_CD.md +0 -0
  68. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/CODEX_WALKTHROUGH.md +0 -0
  69. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/COMMANDS.md +0 -0
  70. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/FIRST_10_MINUTES.md +0 -0
  71. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/FORMALIZATION.md +0 -0
  72. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/HIVE_PRIMITIVES.md +0 -0
  73. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/HIVE_STATUS.md +0 -0
  74. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/IDE_INTEGRATION.md +0 -0
  75. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/LANDSCAPE.md +0 -0
  76. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/MARKET_POSITIONING.md +0 -0
  77. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/MIGRATION.md +0 -0
  78. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/MULTI_REPO.md +0 -0
  79. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/PROVIDERS.md +0 -0
  80. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/README.md +0 -0
  81. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/RECEIPT.md +0 -0
  82. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/RELAY_PROTOCOL.md +0 -0
  83. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/RELEASE_CHECKLIST.md +0 -0
  84. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/RELEASE_MESSAGING.md +0 -0
  85. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/ROADMAP.md +0 -0
  86. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/SHOWCASE.md +0 -0
  87. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/SIDECAR.md +0 -0
  88. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/STUDIO.md +0 -0
  89. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
  90. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/V0.46.0_JUSTIFICATION_REPORT.md +0 -0
  91. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/V0.47.0_SELF_TEST_REPORT.md +0 -0
  92. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/WHY_NOW.md +0 -0
  93. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
  94. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/WORLD_COLLISION.md +0 -0
  95. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/chat.md +0 -0
  96. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/commandsmith.md +0 -0
  97. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/config.md +0 -0
  98. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/demo.md +0 -0
  99. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/emergent-then-synergy.md +0 -0
  100. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/emergent.md +0 -0
  101. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/evolve-then-iterate.md +0 -0
  102. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/evolve.md +0 -0
  103. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/feature-then-emergent.md +0 -0
  104. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/iterate.md +0 -0
  105. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/synergy-then-emergent.md +0 -0
  106. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/commands/synergy.md +0 -0
  107. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
  108. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/compliance/CS-1.md +0 -0
  109. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
  110. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
  111. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/compliance/SR_11-7_MAPPING.md +0 -0
  112. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +0 -0
  113. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/tutorials/01-quickstart.md +0 -0
  114. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/tutorials/02-your-first-package.md +0 -0
  115. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/tutorials/03-the-five-tier-law.md +0 -0
  116. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/tutorials/04-plug-in-llms.md +0 -0
  117. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/tutorials/05-multi-repo-absorb.md +0 -0
  118. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/docs/tutorials/06-javascript-quickstart.md +0 -0
  119. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/setup.cfg +0 -0
  120. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/__init__.py +0 -0
  121. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/__main__.py +0 -0
  122. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
  123. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
  124. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
  125. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
  126. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
  127. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
  128. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +0 -0
  129. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
  130. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
  131. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
  132. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
  133. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
  134. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
  135. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/lifetime_savings_constants.py +0 -0
  136. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/materialize_types.py +0 -0
  137. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
  138. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
  139. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
  140. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
  141. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/response_enrichment.py +0 -0
  142. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
  143. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +0 -0
  144. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
  145. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
  146. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
  147. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
  148. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/welcome_constants.py +0 -0
  149. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
  150. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
  151. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
  152. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
  153. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
  154. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
  155. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
  156. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
  157. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
  158. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
  159. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
  160. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
  161. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
  162. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
  163. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
  164. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
  165. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
  166. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
  167. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
  168. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
  169. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/custom_provider_client.py +0 -0
  170. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
  171. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
  172. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
  173. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
  174. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
  175. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
  176. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +0 -0
  177. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
  178. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
  179. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
  180. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
  181. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
  182. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
  183. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
  184. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
  185. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
  186. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
  187. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
  188. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
  189. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
  190. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
  191. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/lifetime_savings.py +0 -0
  192. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
  193. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
  194. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
  195. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
  196. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
  197. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
  198. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
  199. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
  200. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
  201. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/polyglot_classify.py +0 -0
  202. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/polyglot_imports.py +0 -0
  203. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/polyglot_surface.py +0 -0
  204. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
  205. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
  206. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
  207. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
  208. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
  209. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
  210. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
  211. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
  212. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/response_enricher.py +0 -0
  213. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
  214. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
  215. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
  216. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
  217. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scaffold_polyglot.py +0 -0
  218. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
  219. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
  220. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
  221. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
  222. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
  223. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
  224. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
  225. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
  226. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
  227. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
  228. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
  229. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
  230. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
  231. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
  232. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
  233. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
  234. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
  235. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/welcome_narrator.py +0 -0
  236. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
  237. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
  238. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
  239. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
  240. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
  241. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
  242. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
  243. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
  244. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
  245. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
  246. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
  247. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
  248. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
  249. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
  250. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
  251. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
  252. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
  253. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
  254. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
  255. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
  256. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/cherry_hunter.py +0 -0
  257. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
  258. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
  259. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
  260. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
  261. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
  262. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a0_qk_constants/__init__.py +0 -0
  263. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a1_at_functions/__init__.py +0 -0
  264. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
  265. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
  266. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
  267. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
  268. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
  269. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +0 -0
  270. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
  271. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
  272. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
  273. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
  274. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
  275. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
  276. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
  277. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
  278. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
  279. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
  280. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
  281. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/materialize_feature.py +0 -0
  282. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/mcp_server.py +1 -1
  283. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
  284. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
  285. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
  286. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
  287. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
  288. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
  289. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
  290. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/welcome_feature.py +0 -0
  291. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
  292. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
  293. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
  294. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
  295. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
  296. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/__init__.py +0 -0
  297. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/audit.py +0 -0
  298. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/chat.py +0 -0
  299. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/commandsmith.py +0 -0
  300. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/config_cmd.py +0 -0
  301. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/create.py +0 -0
  302. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/demo.py +0 -0
  303. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/emergent.py +0 -0
  304. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
  305. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
  306. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/enhancement.py +0 -0
  307. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/evolve.py +0 -0
  308. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
  309. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
  310. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/guard_install.py +0 -0
  311. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/handoff.py +0 -0
  312. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/harvest.py +0 -0
  313. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/hive.py +0 -0
  314. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/iterate.py +0 -0
  315. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/materialize.py +0 -0
  316. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/metrics.py +0 -0
  317. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/recon_swarm.py +0 -0
  318. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/relay.py +0 -0
  319. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/surface.py +0 -0
  320. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/synergy.py +0 -0
  321. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
  322. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/welcome.py +0 -0
  323. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/wisdom.py +0 -0
  324. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
  325. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
  326. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/requires.txt +0 -0
  327. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/top_level.txt +0 -0
  328. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_aaaa_nexus_client.py +0 -0
  329. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_agent_hire_protocol.py +0 -0
  330. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_agent_plan.py +0 -0
  331. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_agent_plan_pkg_label.py +0 -0
  332. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_agent_summary.py +0 -0
  333. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_audit_verb.py +0 -0
  334. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_body_extractor_repairs.py +0 -0
  335. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_card_renderer.py +0 -0
  336. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_certify_operational_axis.py +0 -0
  337. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_chat.py +0 -0
  338. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_classify_tier.py +0 -0
  339. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_classify_tier_ast_signals.py +0 -0
  340. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_cli_smoke.py +0 -0
  341. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_cli_swarm_aliases.py +0 -0
  342. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_codex_5_complete.py +0 -0
  343. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_codex_6_enforce_polyglot.py +0 -0
  344. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_commandsmith.py +0 -0
  345. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_compiler_feedback.py +0 -0
  346. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_compliance_checker.py +0 -0
  347. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_config.py +0 -0
  348. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_copilots_copilot.py +0 -0
  349. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_cost_circuit_breaker.py +0 -0
  350. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_create_feature.py +0 -0
  351. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_cs1_renderer.py +0 -0
  352. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_custom_provider.py +0 -0
  353. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_dedup_engine.py +0 -0
  354. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_demo.py +0 -0
  355. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_emergent_compose.py +0 -0
  356. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_emergent_signature_extract.py +0 -0
  357. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_emergent_synthesize_imports.py +0 -0
  358. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_enhancement_proposal.py +0 -0
  359. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_error_codes.py +0 -0
  360. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_error_hints.py +0 -0
  361. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_evolve_js.py +0 -0
  362. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_exported_api_check.py +0 -0
  363. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_forge_action.py +0 -0
  364. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_forge_auth_a1.py +0 -0
  365. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_forge_auth_a2.py +0 -0
  366. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_forge_enforce.py +0 -0
  367. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_generation_quality.py +0 -0
  368. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_handoff.py +0 -0
  369. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_hierarchical_memory.py +0 -0
  370. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_hive_sync.py +0 -0
  371. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_ignore_and_docs.py +0 -0
  372. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_import_smoke.py +0 -0
  373. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_iterate_evolve.py +0 -0
  374. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_js_certify.py +0 -0
  375. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_js_parser.py +0 -0
  376. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_js_recon.py +0 -0
  377. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_js_wire.py +0 -0
  378. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_lineage_chain.py +0 -0
  379. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_ling_provider.py +0 -0
  380. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_local_signer.py +0 -0
  381. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_lsp_protocol.py +0 -0
  382. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_manifest_diff.py +0 -0
  383. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_materialize_feature.py +0 -0
  384. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_mcp_lazy_bootstrap.py +0 -0
  385. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_mcp_protocol.py +0 -0
  386. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_nexus_bridge.py +0 -0
  387. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_ollama_client.py +0 -0
  388. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_pipeline.py +0 -0
  389. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_plan_apply.py +0 -0
  390. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_polyglot_cli_mcp.py +0 -0
  391. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_polyglot_full_pipeline.py +0 -0
  392. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_polyglot_hardening.py +0 -0
  393. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_polyglot_swift_kotlin_go.py +0 -0
  394. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_polyglot_symbol_parity.py +0 -0
  395. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_pre_audit_smoke.py +0 -0
  396. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_precommit_hooks.py +0 -0
  397. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_progress_reporter.py +0 -0
  398. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_receipt_emitter.py +0 -0
  399. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_receipt_schema.py +0 -0
  400. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_receipt_signer.py +0 -0
  401. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_response_enricher.py +0 -0
  402. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_roi_calculator.py +0 -0
  403. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_sbom_cmd_text_summary.py +0 -0
  404. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_sbom_emitter.py +0 -0
  405. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_scaffold.py +0 -0
  406. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_sidecar.py +0 -0
  407. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_sidecar_validate.py +0 -0
  408. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_smell_score_formula.py +0 -0
  409. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_stagnation.py +0 -0
  410. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_stub_detector.py +0 -0
  411. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_surface_export.py +0 -0
  412. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_synergy.py +0 -0
  413. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_test_runner.py +0 -0
  414. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_tier_init_rebuild.py +0 -0
  415. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_trust_gate_response.py +0 -0
  416. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_verify_suggested_recipe.py +0 -0
  417. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_welcome.py +0 -0
  418. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_welcome_enhancements.py +0 -0
  419. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_whoami_cmd.py +0 -0
  420. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_wire_certify.py +0 -0
  421. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_wire_suggest_repairs.py +0 -0
  422. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_wire_type_checking.py +0 -0
  423. {atomadic_forge-0.51.6 → atomadic_forge-0.52.0}/tests/test_wisdom.py +0 -0
@@ -116,14 +116,18 @@ jobs:
116
116
  run: |
117
117
  set -euo pipefail
118
118
  v="${{ steps.ver.outputs.version }}"
119
- # Allow up to ~30s for the registry to propagate.
119
+ # Allow up to ~30s for the registry to propagate. The search
120
+ # endpoint returns ALL published versions; pick the one
121
+ # marked isLatest. (Earlier versions: we naively read [0]
122
+ # which returned a non-latest result.)
120
123
  for i in 1 2 3 4 5 6; do
121
124
  sleep 5
122
125
  got=$(curl -fsS "https://registry.modelcontextprotocol.io/v0/servers?search=atomadic-forge" \
123
- | jq -r '.servers[0].server.version' || echo "")
124
- echo "registry reports version: $got (want $v)"
126
+ | jq -r '.servers[] | select(._meta."io.modelcontextprotocol.registry/official".isLatest == true) | .server.version' \
127
+ || echo "")
128
+ echo "registry reports latest version: $got (want $v)"
125
129
  if [ "$got" = "$v" ]; then
126
- echo "PASS: registry shows v$v"
130
+ echo "PASS: registry shows v$v as isLatest"
127
131
  exit 0
128
132
  fi
129
133
  done
@@ -2,6 +2,35 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ### feat(emergent-swarm): hub-node penalty in `emergent_swarm` scoring
6
+
7
+ Symbols that appear in more than 3 chains are now penalised in
8
+ `score_boosted`. For each doubling of cross-chain frequency above the
9
+ threshold, 10 points are deducted from `score_boosted` (floor at 0).
10
+ This prevents a single high-connectivity connector symbol from occupying
11
+ all top-N emergent candidates; genuinely novel cross-repo chains surface
12
+ instead. Affected candidates gain two new output fields:
13
+ `hub_penalty` and `hub_max_symbol_freq`.
14
+
15
+ ### fix(forge_metrics): theorem count now reads from build attestation
16
+
17
+ `forge_metrics.py` now reads `dist/BUILD_ATTESTATION_*.json` when the
18
+ file exists, using the machine-verified Lean4 count as the canonical
19
+ source rather than a raw file scan. Count corrected: 886 → 872.
20
+ `forge_metrics.json` updated accordingly with `"basis": "build_attestation"`.
21
+
22
+ ### feat(absorb): new `forge absorb` command and supporting a1/a3 modules
23
+
24
+ `harvest_absorb.py` (a1) — pure helpers for absorbing external Python
25
+ repos: layout detection, package resolution, fingerprinting.
26
+ `absorb_feature.py` (a3) — feature composing `harvest_absorb` and
27
+ `emergent_swarm` for cross-repo composition.
28
+ `commands/absorb.py` — CLI command exposing the absorb feature.
29
+
30
+ ### fix(mcp_protocol): remove duplicate dict-key lint violations
31
+
32
+ Removed two pre-existing duplicate dict-key entries from `mcp_protocol.py`.
33
+
5
34
  ## v0.51.6 — 2026-05-07 — sequential cascade: registry fires AFTER PyPI lands
6
35
 
7
36
  v0.51.5 fired release.yml + mcp-registry-publish.yml in parallel. The
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atomadic-forge
3
- Version: 0.51.6
3
+ Version: 0.52.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
@@ -206,9 +206,9 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
206
206
  |--------|-------|
207
207
  | MCP tools | **10 tools · 64 actions** |
208
208
  | CLI verbs | **71** |
209
- | Source files | **211** (~40,145 LOC) |
210
- | Tests | **1,493 passing** across **96 test files** (1,409 static · pytest expands parametrize to 1,495 collected) |
211
- | Lean4 formal proofs | **886 theorems** across 38 files (mathematically verified core logic — IP-protected mhed-codex moat) |
209
+ | Source files | **211** (~40,195 LOC) |
210
+ | Tests | **1,495 passing** across **97 test files** (1,411 static · pytest expands parametrize to 1,495 collected) |
211
+ | Lean4 formal proofs | **872 theorems** across 30 files (mathematically verified core logic — IP-protected mhed-codex moat) |
212
212
  | Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
213
213
  | Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
214
214
  | Infrastructure cost | **$5/mo** |
@@ -174,9 +174,9 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
174
174
  |--------|-------|
175
175
  | MCP tools | **10 tools · 64 actions** |
176
176
  | CLI verbs | **71** |
177
- | Source files | **211** (~40,145 LOC) |
178
- | Tests | **1,493 passing** across **96 test files** (1,409 static · pytest expands parametrize to 1,495 collected) |
179
- | Lean4 formal proofs | **886 theorems** across 38 files (mathematically verified core logic — IP-protected mhed-codex moat) |
177
+ | Source files | **211** (~40,195 LOC) |
178
+ | Tests | **1,495 passing** across **97 test files** (1,411 static · pytest expands parametrize to 1,495 collected) |
179
+ | Lean4 formal proofs | **872 theorems** across 30 files (mathematically verified core logic — IP-protected mhed-codex moat) |
180
180
  | Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
181
181
  | Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
182
182
  | Infrastructure cost | **$5/mo** |
@@ -0,0 +1,34 @@
1
+ # ASS-ADE Commands
2
+
3
+ Auto-generated index. One row per top-level CLI verb.
4
+
5
+ | Verb | Help | Source | Surface |
6
+ |------|------|--------|---------|
7
+ | `absorb` | Absorb any Python repo (crewAI, langgraph, autogen, babyagi, …) into a tier-organized Atomadic package. | `atomadic_forge_seed` | `typer_app` |
8
+ | `audit` | Surface the .atomadic-forge lineage log: list runs, inspect saved manifests, replay history. | `atomadic_forge_seed` | `typer_app` |
9
+ | `chat` | Chat with a Forge-aware AI copilot over optional repo context. | `atomadic_forge_seed` | `typer_app` |
10
+ | `commandsmith` | ``atomadic-forge commandsmith`` — manage the auto-wired CLI command registry. | `atomadic_forge_seed` | `typer_app` |
11
+ | `config` | Configure Atomadic Forge — setup wizard + config management. | `atomadic_forge_seed` | `typer_app` |
12
+ | `create` | One-command pipeline: scan local seed repos for emergent compositions and materialize the top-N into a shippable package. | `atomadic_forge_seed` | `typer_app` |
13
+ | `demo` | One-shot launch-video verb: preset evolve + DEMO.md artifact. | `atomadic_forge_seed` | `typer_app` |
14
+ | `emergent` | Synthesise new feature candidates from existing components. | `atomadic_forge_seed` | `typer_app` |
15
+ | `emergent-swarm` | Round-5: cross-repo emergent composition discovery. Find chains visible only across the union of N repos. | `atomadic_forge_seed` | `typer_app` |
16
+ | `emergent-then-synergy` | Run emergent to emit a JSON artifact, then feed it to synergy for the next phase. | `atomadic_forge_seed` | `typer_app` |
17
+ | `enhancement` | Submit / list / show / publish Forge enhancement proposals — the self-improvement loop. Trust-gated at submission, human-gated at publish. | `atomadic_forge_seed` | `typer_app` |
18
+ | `evolve` | Recursive self-improvement: run iterate N times, each round seeded by the previous round's growing catalog. | `atomadic_forge_seed` | `typer_app` |
19
+ | `evolve-then-iterate` | Run evolve to emit a JSON artifact, then feed it to iterate for the next phase. | `atomadic_forge_seed` | `typer_app` |
20
+ | `feature-then-emergent` | Run any feature, then fan its JSON output into emergent scan to surface novel compositions. | `atomadic_forge_seed` | `typer_app` |
21
+ | `guard-install` | Round-5: install the four-layer architectural guard (pre-commit, CI workflow, CONTRIBUTING note, .forge-guard.json). | `atomadic_forge_seed` | `typer_app` |
22
+ | `handoff` | Capture a structured session handoff so the next agent can pick up where this one left off. Writes JSON to .atomadic-forge/handoffs/<session_id>.json. | `atomadic_forge_seed` | `typer_app` |
23
+ | `harvest` | Round-4: find symbols the target lacks but source repos have. Trust-gated by trust threshold. | `atomadic_forge_seed` | `typer_app` |
24
+ | `hive` | Hive sync pipeline — agent registry + observation + consensus. The 4-agent collaboration substrate. | `atomadic_forge_seed` | `typer_app` |
25
+ | `iterate` | Architecturally-coherent code generation: LLM emits, Forge enforces, loop iterates until certify clears. | `atomadic_forge_seed` | `typer_app` |
26
+ | `materialize` | Turn emergent scan candidates into a shippable Python package (scaffold + features + certify). | `atomadic_forge_seed` | `typer_app` |
27
+ | `metrics` | Emit forge_metrics.json — canonical metrics for README/CHANGELOG/welcome/worker. | `atomadic_forge_seed` | `typer_app` |
28
+ | `recon-swarm` | Round-4: walk N repos, return a unified scout report with origin_repo annotations on every symbol. | `atomadic_forge_seed` | `typer_app` |
29
+ | `relay` | Local relay daemon — receive signed job requests from the Worker MCP and dispatch them through the local CLI. v0.14.0-alpha. | `atomadic_forge_seed` | `typer_app` |
30
+ | `surface` | Emit / check / diff the canonical Forge surface artifact (single source of truth for tools, recipes, schemas). | `atomadic_forge_seed` | `typer_app` |
31
+ | `synergy` | Find feature/CLI synergies (producer-consumer pairs that aren't wired together) and optionally implement adapters. | `atomadic_forge_seed` | `typer_app` |
32
+ | `synergy-then-emergent` | Run synergy to emit a JSON artifact, then feed it to emergent for the next phase. | `atomadic_forge_seed` | `typer_app` |
33
+ | `welcome` | First-call handshake — scout + certify + wire packaged into one response so the agent immediately knows the repo state, top strengths, top priorities, and the single most useful next call. | `atomadic_forge_seed` | `typer_app` |
34
+ | `wisdom` | Record / query / list cross-session wisdom — the institutional knowledge layer between lineage events and curated recipes. | `atomadic_forge_seed` | `typer_app` |
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge absorb`
2
+
3
+ _Absorb any Python repo (crewAI, langgraph, autogen, babyagi, …) into a tier-organized Atomadic package._
4
+
5
+ - **Module**: `atomadic_forge.commands.absorb`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge audit`
2
+
3
+ _Surface the .atomadic-forge lineage log: list runs, inspect saved manifests, replay history._
4
+
5
+ - **Module**: `atomadic_forge.commands.audit`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge create`
2
+
3
+ _One-command pipeline: scan local seed repos for emergent compositions and materialize the top-N into a shippable package._
4
+
5
+ - **Module**: `atomadic_forge.commands.create`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -0,0 +1,19 @@
1
+ # `atomadic-forge emergent-swarm`
2
+
3
+ _Round-5: cross-repo emergent composition discovery. Find chains visible only across the union of N repos._
4
+
5
+ - **Module**: `atomadic_forge.commands.emergent_swarm`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
10
+ ## Scoring
11
+
12
+ Each candidate receives a `score_boosted` value. Candidates whose most
13
+ frequent constituent symbol appears in more than 3 chains across the
14
+ swarm receive a hub-node penalty: 10 points are deducted from
15
+ `score_boosted` per doubling of that symbol's cross-chain frequency
16
+ above the threshold (floor at 0). This prevents a single high-connectivity
17
+ connector from dominating all top-N slots. Penalised candidates carry
18
+ `hub_penalty` and `hub_max_symbol_freq` in their output.
19
+
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge enhancement`
2
+
3
+ _Submit / list / show / publish Forge enhancement proposals — the self-improvement loop. Trust-gated at submission, human-gated at publish._
4
+
5
+ - **Module**: `atomadic_forge.commands.enhancement`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge guard-install`
2
+
3
+ _Round-5: install the four-layer architectural guard (pre-commit, CI workflow, CONTRIBUTING note, .forge-guard.json)._
4
+
5
+ - **Module**: `atomadic_forge.commands.guard_install`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge handoff`
2
+
3
+ _Capture a structured session handoff so the next agent can pick up where this one left off. Writes JSON to .atomadic-forge/handoffs/<session_id>.json._
4
+
5
+ - **Module**: `atomadic_forge.commands.handoff`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge harvest`
2
+
3
+ _Round-4: find symbols the target lacks but source repos have. Trust-gated by trust threshold._
4
+
5
+ - **Module**: `atomadic_forge.commands.harvest`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge hive`
2
+
3
+ _Hive sync pipeline — agent registry + observation + consensus. The 4-agent collaboration substrate._
4
+
5
+ - **Module**: `atomadic_forge.commands.hive`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge materialize`
2
+
3
+ _Turn emergent scan candidates into a shippable Python package (scaffold + features + certify)._
4
+
5
+ - **Module**: `atomadic_forge.commands.materialize`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge metrics`
2
+
3
+ _Emit forge_metrics.json — canonical metrics for README/CHANGELOG/welcome/worker._
4
+
5
+ - **Module**: `atomadic_forge.commands.metrics`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge recon-swarm`
2
+
3
+ _Round-4: walk N repos, return a unified scout report with origin_repo annotations on every symbol._
4
+
5
+ - **Module**: `atomadic_forge.commands.recon_swarm`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge relay`
2
+
3
+ _Local relay daemon — receive signed job requests from the Worker MCP and dispatch them through the local CLI. v0.14.0-alpha._
4
+
5
+ - **Module**: `atomadic_forge.commands.relay`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge surface`
2
+
3
+ _Emit / check / diff the canonical Forge surface artifact (single source of truth for tools, recipes, schemas)._
4
+
5
+ - **Module**: `atomadic_forge.commands.surface`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge welcome`
2
+
3
+ _First-call handshake — scout + certify + wire packaged into one response so the agent immediately knows the repo state, top strengths, top priorities, and the single most useful next call._
4
+
5
+ - **Module**: `atomadic_forge.commands.welcome`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -0,0 +1,9 @@
1
+ # `atomadic-forge wisdom`
2
+
3
+ _Record / query / list cross-session wisdom — the institutional knowledge layer between lineage events and curated recipes._
4
+
5
+ - **Module**: `atomadic_forge.commands.wisdom`
6
+ - **Surface**: `typer_app`
7
+ - **Source root**: `atomadic_forge_seed`
8
+ - **Hidden**: `False`
9
+
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "atomadic-forge"
7
- version = "0.51.6"
7
+ version = "0.52.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"
@@ -38,12 +38,17 @@ _LEAN_THEOREM_RE = re.compile(
38
38
 
39
39
 
40
40
  def count_lean_theorems(mhed_codex_root: Path) -> dict[str, Any]:
41
- """Walk ``<mhed_codex_root>/proofs`` and count theorems + lemmas.
41
+ """Return the certified Lean theorem count for a Codex proof tree.
42
42
 
43
43
  The mhed-corpus repository is IP-protected — this function only
44
44
  surfaces aggregate counts to the public artifact. Source paths and
45
45
  file names are NEVER returned. Callers must not log the input path.
46
46
 
47
+ Prefer a build attestation when present: that file is the certified
48
+ proof-tree boundary produced by ``lake build``. A raw ``proofs/`` scan
49
+ is only a fallback for local working trees that have not produced an
50
+ attestation yet; it can overcount scratch or archived Lean files.
51
+
47
52
  Args:
48
53
  mhed_codex_root: directory containing a ``proofs/`` subtree of
49
54
  ``.lean`` files. If the directory does not exist or contains
@@ -54,6 +59,10 @@ def count_lean_theorems(mhed_codex_root: Path) -> dict[str, Any]:
54
59
  combined), ``theorems``, ``lemmas``, ``files``, ``found``.
55
60
  No paths. Counts are always int; never raises on missing path.
56
61
  """
62
+ attested = _count_lean_theorems_from_attestation(Path(mhed_codex_root))
63
+ if attested is not None:
64
+ return attested
65
+
57
66
  proofs_dir = Path(mhed_codex_root) / "proofs"
58
67
  if not proofs_dir.is_dir():
59
68
  return {
@@ -78,6 +87,61 @@ def count_lean_theorems(mhed_codex_root: Path) -> dict[str, Any]:
78
87
  "lemmas": lemmas,
79
88
  "files": len(files),
80
89
  "found": True,
90
+ "basis": "raw_proofs_scan",
91
+ }
92
+
93
+
94
+ def _count_lean_theorems_from_attestation(
95
+ mhed_codex_root: Path,
96
+ ) -> dict[str, Any] | None:
97
+ """Read the newest build attestation if one exists.
98
+
99
+ Returns only aggregate fields safe for ``forge_metrics.json``. The
100
+ per-module hashes; those are deliberately not copied into Forge's public
101
+ metrics surface. The aggregate proof-tree hash is public-safe and lets
102
+ downstream agents verify the exact attested boundary.
103
+ """
104
+ dist_dir = Path(mhed_codex_root) / "dist"
105
+ if not dist_dir.is_dir():
106
+ return None
107
+ attestations = sorted(dist_dir.glob("BUILD_ATTESTATION_*.json"))
108
+ if not attestations:
109
+ return None
110
+ try:
111
+ data = json.loads(attestations[-1].read_text(encoding="utf-8"))
112
+ except (OSError, UnicodeDecodeError, json.JSONDecodeError):
113
+ return None
114
+ totals = data.get("totals")
115
+ if not isinstance(totals, dict):
116
+ return None
117
+ try:
118
+ count = int(totals["theorems_and_lemmas"])
119
+ sorry = int(totals.get("sorry", 0))
120
+ admit = int(totals.get("admit", 0))
121
+ modules = int(totals.get("modules", 0))
122
+ agent_rule_axioms = int(totals.get("agent_rule_axioms", 0))
123
+ free_parameters = int(totals.get("free_parameters_fit_to_data", 0))
124
+ except (KeyError, TypeError, ValueError):
125
+ return None
126
+ proof_tree = data.get("proof_tree")
127
+ proof_hash = ""
128
+ if isinstance(proof_tree, dict):
129
+ proof_hash = str(proof_tree.get("sha256_of_sorted_module_hashes", ""))
130
+ return {
131
+ "count": count,
132
+ "theorems": count,
133
+ "lemmas": 0,
134
+ "files": modules,
135
+ "modules": modules,
136
+ "sorry": sorry,
137
+ "admit": admit,
138
+ "agent_rule_axioms": agent_rule_axioms,
139
+ "free_parameters_fit_to_data": free_parameters,
140
+ "found": True,
141
+ "basis": "build_attestation",
142
+ "attestation_issued_at": str(data.get("issued_at", "")),
143
+ "proof_tree_hash": proof_hash,
144
+ "lake_build_status": str(data.get("lake_build_status", "")),
81
145
  }
82
146
 
83
147
 
@@ -0,0 +1,170 @@
1
+ """Tier a1 — pure helpers for the absorb-any-repo pipeline."""
2
+ from __future__ import annotations
3
+
4
+ import hashlib
5
+ from dataclasses import dataclass
6
+ from pathlib import Path
7
+
8
+ _TIER_DIR_NAMES = (
9
+ "a0_qk_constants",
10
+ "a1_at_functions",
11
+ "a2_mo_composites",
12
+ "a3_og_features",
13
+ "a4_sy_orchestration",
14
+ )
15
+ _SKIP_DIRS = frozenset({
16
+ ".git", ".github", ".venv", "venv", "env", ".env",
17
+ "__pycache__", ".pytest_cache", ".ruff_cache", ".mypy_cache",
18
+ "node_modules", "dist", "build", ".tox", "htmlcov",
19
+ ".atomadic-forge", "eggs", ".eggs",
20
+ "tests", "test", "testing", "benchmarks",
21
+ "examples", "scripts", "tools", "fixtures", "conftest",
22
+ })
23
+
24
+
25
+ class RepoLayout(str):
26
+ ATOMADIC_TIER = "atomadic_tier"
27
+ SRC_LAYOUT = "src_layout"
28
+ MONOREPO_LIB = "monorepo_lib"
29
+ MULTI_LIB = "multi_lib"
30
+ FLAT = "flat"
31
+ UNKNOWN = "unknown"
32
+
33
+
34
+ @dataclass(frozen=True)
35
+ class ResolvedRepo:
36
+ src_root: Path
37
+ package_name: str
38
+ layout: str
39
+ repo_root: Path
40
+
41
+
42
+ def _has_tier_folders(p: Path) -> bool:
43
+ return any((p / n).is_dir() for n in _TIER_DIR_NAMES)
44
+
45
+
46
+ def _is_python_package(p: Path) -> bool:
47
+ return p.is_dir() and (p / "__init__.py").is_file()
48
+
49
+
50
+ def _find_packages_under(root: Path, max_depth: int = 3) -> list[Path]:
51
+ results: list[Path] = []
52
+
53
+ def _walk(p: Path, depth: int) -> None:
54
+ if depth > max_depth or p.name in _SKIP_DIRS:
55
+ return
56
+ if _is_python_package(p):
57
+ results.append(p)
58
+ return
59
+ for c in sorted(p.iterdir()):
60
+ if c.is_dir() and c.name not in _SKIP_DIRS:
61
+ _walk(c, depth + 1)
62
+
63
+ _walk(root, 0)
64
+ return results
65
+
66
+
67
+ def _rank_packages(pkgs: list[Path]) -> list[Path]:
68
+ def _score(p: Path) -> tuple[int, int]:
69
+ n = p.name.lower()
70
+ pen = n.endswith(("_cli", "_test", "_tests", "_bench", "_example"))
71
+ return (0 if pen else 1, len(list(p.rglob("*.py"))))
72
+
73
+ return sorted(pkgs, key=_score, reverse=True)
74
+
75
+
76
+ def classify_repo_layout(repo_root: Path | str) -> str:
77
+ p = Path(repo_root).resolve()
78
+ if _has_tier_folders(p):
79
+ return RepoLayout.ATOMADIC_TIER
80
+ src = p / "src"
81
+ if src.is_dir() and _find_packages_under(src, 1):
82
+ return RepoLayout.SRC_LAYOUT
83
+ lib = p / "lib"
84
+ if lib.is_dir() and _find_packages_under(lib, 3):
85
+ return RepoLayout.MONOREPO_LIB
86
+ libs = p / "libs"
87
+ if libs.is_dir() and _find_packages_under(libs, 2):
88
+ return RepoLayout.MULTI_LIB
89
+ if any(_is_python_package(c) for c in p.iterdir()):
90
+ return RepoLayout.FLAT
91
+ return RepoLayout.UNKNOWN
92
+
93
+
94
+ def resolve_any_python_package(repo_root: Path | str) -> ResolvedRepo:
95
+ p = Path(repo_root).resolve()
96
+ if not p.exists():
97
+ raise ValueError(f"repo does not exist: {p}")
98
+ layout = classify_repo_layout(p)
99
+ if layout == RepoLayout.ATOMADIC_TIER:
100
+ return ResolvedRepo(src_root=p, package_name=p.name, layout=layout, repo_root=p)
101
+ if layout == RepoLayout.SRC_LAYOUT:
102
+ pkgs = _find_packages_under(p / "src", 1)
103
+ if pkgs:
104
+ return ResolvedRepo(
105
+ src_root=pkgs[0], package_name=pkgs[0].name, layout=layout, repo_root=p
106
+ )
107
+ if layout == RepoLayout.MONOREPO_LIB:
108
+ pkgs = _find_packages_under(p / "lib", 4)
109
+ if pkgs:
110
+ best = _rank_packages(pkgs)[0]
111
+ return ResolvedRepo(
112
+ src_root=best, package_name=best.name, layout=layout, repo_root=p
113
+ )
114
+ if layout == RepoLayout.MULTI_LIB:
115
+ pkgs = _find_packages_under(p / "libs", 3)
116
+ if pkgs:
117
+ best = _rank_packages(pkgs)[0]
118
+ return ResolvedRepo(
119
+ src_root=best, package_name=best.name, layout=layout, repo_root=p
120
+ )
121
+ if layout == RepoLayout.FLAT:
122
+ pkgs = [c for c in p.iterdir() if _is_python_package(c) and c.name not in _SKIP_DIRS]
123
+ if pkgs:
124
+ best = max(pkgs, key=lambda x: len(list(x.rglob("*.py"))))
125
+ return ResolvedRepo(
126
+ src_root=best, package_name=best.name, layout=layout, repo_root=p
127
+ )
128
+ all_pkgs = _find_packages_under(p, 5)
129
+ if all_pkgs:
130
+ best = _rank_packages(all_pkgs)[0]
131
+ return ResolvedRepo(
132
+ src_root=best, package_name=best.name, layout=RepoLayout.UNKNOWN, repo_root=p
133
+ )
134
+ raise ValueError(
135
+ f"could not resolve a Python package under {p} (layout={layout}). "
136
+ "Ensure the repo contains at least one directory with __init__.py."
137
+ )
138
+
139
+
140
+ def build_swarm_repo_specs(repo_paths: list[Path | str]) -> list[dict]:
141
+ specs = []
142
+ for path in repo_paths:
143
+ try:
144
+ r = resolve_any_python_package(path)
145
+ specs.append({
146
+ "src_root": str(r.src_root),
147
+ "package": r.package_name,
148
+ "layout": r.layout,
149
+ "repo_root": str(r.repo_root),
150
+ })
151
+ except ValueError as e:
152
+ specs.append({
153
+ "src_root": str(path),
154
+ "package": Path(path).name,
155
+ "layout": RepoLayout.UNKNOWN,
156
+ "repo_root": str(path),
157
+ "error": str(e),
158
+ })
159
+ return specs
160
+
161
+
162
+ def fingerprint_repo(repo_root: Path | str) -> str:
163
+ p = Path(repo_root).resolve()
164
+ parts: list[str] = []
165
+ for f in sorted(p.rglob("*.py")):
166
+ try:
167
+ parts.append(f"{f.relative_to(p)}:{f.stat().st_size}")
168
+ except OSError:
169
+ continue
170
+ return hashlib.sha256("\n".join(parts[:500]).encode()).hexdigest()[:12]
@@ -3199,12 +3199,6 @@ _CLI_FALLBACKS: dict[str, str] = {
3199
3199
  "forge emergent scan <repo> --json — use explore(action=scan) via MCP | "
3200
3200
  "forge emergent swarm --json — use explore(action=swarm) via MCP"
3201
3201
  ),
3202
- # legacy names — transmute absorbed into plan in v0.39.0
3203
- "transmute": (
3204
- "forge auto <output> --apply — use plan(action=auto) via MCP | "
3205
- "forge cherry [--pick ...] — use plan(action=cherry) via MCP | "
3206
- "forge finalize <output> --apply — use plan(action=finalize) via MCP"
3207
- ),
3208
3202
  "code_intel": (
3209
3203
  "forge call-graph <qualname> --project-root <repo> --json — use explore(action=call_graph) via MCP | "
3210
3204
  "forge smell-scan --project-root <repo> --json — use explore(action=smell_scan) via MCP"
@@ -3227,13 +3221,6 @@ _CLI_FALLBACKS: dict[str, str] = {
3227
3221
  ),
3228
3222
  # legacy names — tool_factory absorbed into plan(action=scaffold) in v0.41.0
3229
3223
  "tool_factory": "MCP-only: tool_factory — use plan(action=scaffold) via MCP",
3230
- # legacy names — loop absorbed into plan in v0.39.0
3231
- "loop": (
3232
- "forge iterate run --intent '...' --output <dir> — use plan(action=iterate) via MCP | "
3233
- "MCP-only: plan(action=resume) | "
3234
- "forge evolve run --intent '...' --output <dir> — use plan(action=evolve) via MCP | "
3235
- "MCP-only: plan(action=evolve_step)"
3236
- ),
3237
3224
  "lineage": "forge surface list/show/log — use explore(action=lineage) via MCP",
3238
3225
  "hive": (
3239
3226
  "forge hive register --agent-name <name> --role <role> --json (action=register) | "