atomadic-forge 0.51.5__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.5 → atomadic_forge-0.52.0}/.github/workflows/mcp-registry-publish.yml +8 -4
  2. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/workflows/publish-on-tag.yml +6 -8
  3. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/workflows/release.yml +22 -0
  4. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/CHANGELOG.md +44 -0
  5. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/PKG-INFO +4 -4
  6. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/README.md +3 -3
  7. atomadic_forge-0.52.0/docs/commands/INDEX.md +34 -0
  8. atomadic_forge-0.52.0/docs/commands/absorb.md +9 -0
  9. atomadic_forge-0.52.0/docs/commands/audit.md +9 -0
  10. atomadic_forge-0.52.0/docs/commands/create.md +9 -0
  11. atomadic_forge-0.52.0/docs/commands/emergent-swarm.md +19 -0
  12. atomadic_forge-0.52.0/docs/commands/enhancement.md +9 -0
  13. atomadic_forge-0.52.0/docs/commands/guard-install.md +9 -0
  14. atomadic_forge-0.52.0/docs/commands/handoff.md +9 -0
  15. atomadic_forge-0.52.0/docs/commands/harvest.md +9 -0
  16. atomadic_forge-0.52.0/docs/commands/hive.md +9 -0
  17. atomadic_forge-0.52.0/docs/commands/materialize.md +9 -0
  18. atomadic_forge-0.52.0/docs/commands/metrics.md +9 -0
  19. atomadic_forge-0.52.0/docs/commands/recon-swarm.md +9 -0
  20. atomadic_forge-0.52.0/docs/commands/relay.md +9 -0
  21. atomadic_forge-0.52.0/docs/commands/surface.md +9 -0
  22. atomadic_forge-0.52.0/docs/commands/welcome.md +9 -0
  23. atomadic_forge-0.52.0/docs/commands/wisdom.md +9 -0
  24. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/pyproject.toml +1 -1
  25. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/forge_metrics.py +65 -1
  26. atomadic_forge-0.52.0/src/atomadic_forge/a1_at_functions/harvest_absorb.py +170 -0
  27. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +0 -13
  28. atomadic_forge-0.52.0/src/atomadic_forge/a3_og_features/absorb_feature.py +134 -0
  29. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/create_feature.py +7 -62
  30. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/emergent_swarm.py +25 -0
  31. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_metrics_feature.py +1 -1
  32. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/cli.py +3 -0
  33. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/_registry.py +28 -0
  34. atomadic_forge-0.52.0/src/atomadic_forge/commands/absorb.py +96 -0
  35. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/PKG-INFO +4 -4
  36. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/SOURCES.txt +19 -0
  37. atomadic_forge-0.51.5/docs/commands/INDEX.md +0 -18
  38. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/FUNDING.yml +0 -0
  39. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  40. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  41. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  42. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/actions/forge-action/README.md +0 -0
  43. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/actions/forge-action/action.yml +0 -0
  44. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/dependabot.yml +0 -0
  45. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/pull_request_template.md +0 -0
  46. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/workflows/ci.yml +0 -0
  47. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/workflows/customer-refactor.yml +0 -0
  48. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/workflows/forge-self-certify.yml +0 -0
  49. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/workflows/metrics-auto-regen.yml +0 -0
  50. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/workflows/metrics-drift.yml +0 -0
  51. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/workflows/release-readiness.yml +0 -0
  52. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/workflows/surface-drift.yml +0 -0
  53. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/.github/workflows/uptime.yml +0 -0
  54. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/ARCHITECTURE.md +0 -0
  55. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/CONTRIBUTING.md +0 -0
  56. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/LICENSE +0 -0
  57. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/MANIFEST.in +0 -0
  58. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/SECURITY.md +0 -0
  59. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/assets/Atomadic-Forge-01.png +0 -0
  60. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/01-getting-started.md +0 -0
  61. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/02-commands.md +0 -0
  62. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/03-tutorial.md +0 -0
  63. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/04-llm-loops.md +0 -0
  64. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/05-faq.md +0 -0
  65. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/AGENTS_GUIDE.md +0 -0
  66. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/AIR_GAPPED.md +0 -0
  67. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/CI_CD.md +0 -0
  68. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/CODEX_WALKTHROUGH.md +0 -0
  69. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/COMMANDS.md +0 -0
  70. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/FIRST_10_MINUTES.md +0 -0
  71. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/FORMALIZATION.md +0 -0
  72. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/HIVE_PRIMITIVES.md +0 -0
  73. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/HIVE_STATUS.md +0 -0
  74. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/IDE_INTEGRATION.md +0 -0
  75. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/LANDSCAPE.md +0 -0
  76. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/MARKET_POSITIONING.md +0 -0
  77. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/MIGRATION.md +0 -0
  78. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/MULTI_REPO.md +0 -0
  79. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/PROVIDERS.md +0 -0
  80. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/README.md +0 -0
  81. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/RECEIPT.md +0 -0
  82. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/RELAY_PROTOCOL.md +0 -0
  83. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/RELEASE_CHECKLIST.md +0 -0
  84. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/RELEASE_MESSAGING.md +0 -0
  85. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/ROADMAP.md +0 -0
  86. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/SHOWCASE.md +0 -0
  87. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/SIDECAR.md +0 -0
  88. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/STUDIO.md +0 -0
  89. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
  90. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/V0.46.0_JUSTIFICATION_REPORT.md +0 -0
  91. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/V0.47.0_SELF_TEST_REPORT.md +0 -0
  92. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/WHY_NOW.md +0 -0
  93. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
  94. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/WORLD_COLLISION.md +0 -0
  95. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/commands/chat.md +0 -0
  96. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/commands/commandsmith.md +0 -0
  97. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/commands/config.md +0 -0
  98. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/commands/demo.md +0 -0
  99. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/commands/emergent-then-synergy.md +0 -0
  100. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/commands/emergent.md +0 -0
  101. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/commands/evolve-then-iterate.md +0 -0
  102. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/commands/evolve.md +0 -0
  103. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/commands/feature-then-emergent.md +0 -0
  104. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/commands/iterate.md +0 -0
  105. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/commands/synergy-then-emergent.md +0 -0
  106. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/commands/synergy.md +0 -0
  107. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
  108. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/compliance/CS-1.md +0 -0
  109. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
  110. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
  111. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/compliance/SR_11-7_MAPPING.md +0 -0
  112. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +0 -0
  113. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/tutorials/01-quickstart.md +0 -0
  114. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/tutorials/02-your-first-package.md +0 -0
  115. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/tutorials/03-the-five-tier-law.md +0 -0
  116. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/tutorials/04-plug-in-llms.md +0 -0
  117. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/tutorials/05-multi-repo-absorb.md +0 -0
  118. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/docs/tutorials/06-javascript-quickstart.md +0 -0
  119. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/setup.cfg +0 -0
  120. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/__init__.py +0 -0
  121. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/__main__.py +0 -0
  122. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
  123. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
  124. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
  125. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
  126. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
  127. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
  128. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +0 -0
  129. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
  130. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
  131. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
  132. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
  133. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
  134. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
  135. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/lifetime_savings_constants.py +0 -0
  136. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/materialize_types.py +0 -0
  137. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
  138. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
  139. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
  140. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
  141. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/response_enrichment.py +0 -0
  142. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
  143. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +0 -0
  144. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
  145. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
  146. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
  147. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
  148. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/welcome_constants.py +0 -0
  149. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
  150. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
  151. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
  152. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
  153. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
  154. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
  155. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
  156. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
  157. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
  158. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
  159. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
  160. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
  161. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
  162. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
  163. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
  164. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
  165. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
  166. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
  167. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
  168. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
  169. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/custom_provider_client.py +0 -0
  170. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
  171. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
  172. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
  173. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
  174. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
  175. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
  176. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +0 -0
  177. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
  178. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
  179. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
  180. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
  181. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
  182. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
  183. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
  184. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
  185. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
  186. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
  187. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
  188. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
  189. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
  190. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
  191. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/lifetime_savings.py +0 -0
  192. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
  193. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
  194. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
  195. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
  196. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
  197. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
  198. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
  199. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
  200. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
  201. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/polyglot_classify.py +0 -0
  202. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/polyglot_imports.py +0 -0
  203. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/polyglot_surface.py +0 -0
  204. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
  205. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
  206. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
  207. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
  208. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
  209. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
  210. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
  211. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
  212. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/response_enricher.py +0 -0
  213. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
  214. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
  215. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
  216. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
  217. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scaffold_polyglot.py +0 -0
  218. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
  219. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
  220. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
  221. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
  222. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
  223. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
  224. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
  225. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
  226. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
  227. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
  228. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
  229. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
  230. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
  231. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
  232. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
  233. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
  234. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
  235. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/welcome_narrator.py +0 -0
  236. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
  237. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
  238. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
  239. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
  240. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
  241. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
  242. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
  243. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
  244. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
  245. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
  246. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
  247. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
  248. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
  249. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
  250. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
  251. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
  252. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
  253. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
  254. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
  255. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
  256. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/cherry_hunter.py +0 -0
  257. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
  258. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
  259. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
  260. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
  261. {atomadic_forge-0.51.5 → 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.5 → 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.5 → 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.5 → 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.5 → 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.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
  267. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
  268. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
  269. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +0 -0
  270. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
  271. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
  272. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
  273. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
  274. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
  275. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
  276. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
  277. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
  278. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
  279. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
  280. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
  281. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/materialize_feature.py +0 -0
  282. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/mcp_server.py +1 -1
  283. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
  284. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
  285. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
  286. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
  287. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
  288. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
  289. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
  290. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/welcome_feature.py +0 -0
  291. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
  292. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
  293. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
  294. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
  295. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
  296. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/__init__.py +0 -0
  297. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/audit.py +0 -0
  298. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/chat.py +0 -0
  299. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/commandsmith.py +0 -0
  300. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/config_cmd.py +0 -0
  301. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/create.py +0 -0
  302. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/demo.py +0 -0
  303. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/emergent.py +0 -0
  304. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
  305. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
  306. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/enhancement.py +0 -0
  307. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/evolve.py +0 -0
  308. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
  309. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
  310. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/guard_install.py +0 -0
  311. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/handoff.py +0 -0
  312. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/harvest.py +0 -0
  313. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/hive.py +0 -0
  314. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/iterate.py +0 -0
  315. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/materialize.py +0 -0
  316. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/metrics.py +0 -0
  317. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/recon_swarm.py +0 -0
  318. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/relay.py +0 -0
  319. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/surface.py +0 -0
  320. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/synergy.py +0 -0
  321. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
  322. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/welcome.py +0 -0
  323. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge/commands/wisdom.py +0 -0
  324. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
  325. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
  326. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/requires.txt +0 -0
  327. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/src/atomadic_forge.egg-info/top_level.txt +0 -0
  328. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_aaaa_nexus_client.py +0 -0
  329. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_agent_hire_protocol.py +0 -0
  330. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_agent_plan.py +0 -0
  331. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_agent_plan_pkg_label.py +0 -0
  332. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_agent_summary.py +0 -0
  333. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_audit_verb.py +0 -0
  334. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_body_extractor_repairs.py +0 -0
  335. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_card_renderer.py +0 -0
  336. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_certify_operational_axis.py +0 -0
  337. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_chat.py +0 -0
  338. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_classify_tier.py +0 -0
  339. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_classify_tier_ast_signals.py +0 -0
  340. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_cli_smoke.py +0 -0
  341. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_cli_swarm_aliases.py +0 -0
  342. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_codex_5_complete.py +0 -0
  343. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_codex_6_enforce_polyglot.py +0 -0
  344. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_commandsmith.py +0 -0
  345. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_compiler_feedback.py +0 -0
  346. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_compliance_checker.py +0 -0
  347. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_config.py +0 -0
  348. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_copilots_copilot.py +0 -0
  349. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_cost_circuit_breaker.py +0 -0
  350. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_create_feature.py +0 -0
  351. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_cs1_renderer.py +0 -0
  352. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_custom_provider.py +0 -0
  353. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_dedup_engine.py +0 -0
  354. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_demo.py +0 -0
  355. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_emergent_compose.py +0 -0
  356. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_emergent_signature_extract.py +0 -0
  357. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_emergent_synthesize_imports.py +0 -0
  358. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_enhancement_proposal.py +0 -0
  359. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_error_codes.py +0 -0
  360. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_error_hints.py +0 -0
  361. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_evolve_js.py +0 -0
  362. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_exported_api_check.py +0 -0
  363. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_forge_action.py +0 -0
  364. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_forge_auth_a1.py +0 -0
  365. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_forge_auth_a2.py +0 -0
  366. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_forge_enforce.py +0 -0
  367. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_generation_quality.py +0 -0
  368. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_handoff.py +0 -0
  369. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_hierarchical_memory.py +0 -0
  370. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_hive_sync.py +0 -0
  371. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_ignore_and_docs.py +0 -0
  372. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_import_smoke.py +0 -0
  373. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_iterate_evolve.py +0 -0
  374. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_js_certify.py +0 -0
  375. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_js_parser.py +0 -0
  376. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_js_recon.py +0 -0
  377. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_js_wire.py +0 -0
  378. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_lineage_chain.py +0 -0
  379. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_ling_provider.py +0 -0
  380. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_local_signer.py +0 -0
  381. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_lsp_protocol.py +0 -0
  382. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_manifest_diff.py +0 -0
  383. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_materialize_feature.py +0 -0
  384. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_mcp_lazy_bootstrap.py +0 -0
  385. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_mcp_protocol.py +0 -0
  386. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_nexus_bridge.py +0 -0
  387. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_ollama_client.py +0 -0
  388. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_pipeline.py +0 -0
  389. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_plan_apply.py +0 -0
  390. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_polyglot_cli_mcp.py +0 -0
  391. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_polyglot_full_pipeline.py +0 -0
  392. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_polyglot_hardening.py +0 -0
  393. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_polyglot_swift_kotlin_go.py +0 -0
  394. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_polyglot_symbol_parity.py +0 -0
  395. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_pre_audit_smoke.py +0 -0
  396. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_precommit_hooks.py +0 -0
  397. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_progress_reporter.py +0 -0
  398. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_receipt_emitter.py +0 -0
  399. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_receipt_schema.py +0 -0
  400. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_receipt_signer.py +0 -0
  401. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_response_enricher.py +0 -0
  402. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_roi_calculator.py +0 -0
  403. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_sbom_cmd_text_summary.py +0 -0
  404. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_sbom_emitter.py +0 -0
  405. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_scaffold.py +0 -0
  406. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_sidecar.py +0 -0
  407. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_sidecar_validate.py +0 -0
  408. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_smell_score_formula.py +0 -0
  409. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_stagnation.py +0 -0
  410. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_stub_detector.py +0 -0
  411. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_surface_export.py +0 -0
  412. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_synergy.py +0 -0
  413. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_test_runner.py +0 -0
  414. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_tier_init_rebuild.py +0 -0
  415. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_trust_gate_response.py +0 -0
  416. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_verify_suggested_recipe.py +0 -0
  417. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_welcome.py +0 -0
  418. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_welcome_enhancements.py +0 -0
  419. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_whoami_cmd.py +0 -0
  420. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_wire_certify.py +0 -0
  421. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_wire_suggest_repairs.py +0 -0
  422. {atomadic_forge-0.51.5 → atomadic_forge-0.52.0}/tests/test_wire_type_checking.py +0 -0
  423. {atomadic_forge-0.51.5 → 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
@@ -96,11 +96,11 @@ jobs:
96
96
  --title "Atomadic Forge ${{ github.ref_name }}" \
97
97
  --notes-file /tmp/release_notes.md
98
98
 
99
- - name: Fire downstream workflows (PyPI publish + Registry publish)
100
- # The release event is silenced by GitHub Actions when the
101
- # release was created via GITHUB_TOKEN. Use workflow_dispatch
102
- # instead it DOES cascade via GITHUB_TOKEN. Both downstream
103
- # workflows accept workflow_dispatch with `version` input.
99
+ - name: Fire release.yml (which then fires registry after PyPI)
100
+ # Sequential cascade: publish-on-tag release.yml (PyPI
101
+ # publish) mcp-registry-publish.yml. release.yml's last step
102
+ # fires the registry via gh workflow run only AFTER PyPI lands,
103
+ # so the registry's PyPI-presence check never 404s.
104
104
  env:
105
105
  GH_TOKEN: ${{ github.token }}
106
106
  V: ${{ steps.version.outputs.version }}
@@ -108,9 +108,7 @@ jobs:
108
108
  set +e
109
109
  gh workflow run release.yml --repo atomadictech/atomadic-forge \
110
110
  -f version="$V" || echo "::warning::release.yml dispatch failed"
111
- gh workflow run mcp-registry-publish.yml --repo atomadictech/atomadic-forge \
112
- -f version="$V" || echo "::warning::mcp-registry-publish.yml dispatch failed"
113
- echo "downstream workflows dispatched for v$V"
111
+ echo "release.yml dispatched for v$V (registry will follow after PyPI)"
114
112
  exit 0
115
113
 
116
114
  - name: Dispatch worker redeploy (soft-fail; never blocks release)
@@ -17,6 +17,9 @@ on:
17
17
  permissions:
18
18
  contents: read
19
19
  id-token: write
20
+ # v0.51.6 — actions: write so this workflow can fire the registry
21
+ # publish via gh workflow run after PyPI succeeds.
22
+ actions: write
20
23
 
21
24
  jobs:
22
25
  build:
@@ -64,3 +67,22 @@ jobs:
64
67
 
65
68
  - name: Publish distributions
66
69
  uses: pypa/gh-action-pypi-publish@release/v1
70
+
71
+ - name: Trigger MCP Registry publish (sequential — only after PyPI lands)
72
+ # The registry validates against PyPI; firing it before PyPI
73
+ # propagates returns 404. Only fire after our PyPI publish
74
+ # step has succeeded — guaranteed by needs:[build] + this
75
+ # step's position in publish-pypi.
76
+ env:
77
+ GH_TOKEN: ${{ github.token }}
78
+ V: ${{ github.event.inputs.version || github.event.release.tag_name }}
79
+ run: |
80
+ set +e
81
+ # Strip leading v if it's a tag name.
82
+ v="${V#v}"
83
+ gh workflow run mcp-registry-publish.yml \
84
+ --repo atomadictech/atomadic-forge \
85
+ -f version="$v" \
86
+ || echo "::warning::registry dispatch failed (worker can be triggered manually)"
87
+ echo "registry publish dispatched for v$v"
88
+ exit 0
@@ -2,6 +2,50 @@
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
+
34
+ ## v0.51.6 — 2026-05-07 — sequential cascade: registry fires AFTER PyPI lands
35
+
36
+ v0.51.5 fired release.yml + mcp-registry-publish.yml in parallel. The
37
+ registry workflow's wait-for-PyPI loop timed out (60s) because PyPI
38
+ build+publish+CDN propagation took longer.
39
+
40
+ Switched to a strict sequential cascade:
41
+ 1. publish-on-tag.yml fires release.yml only
42
+ 2. release.yml builds, uploads, publishes to PyPI
43
+ 3. release.yml's LAST step fires mcp-registry-publish.yml
44
+ 4. mcp-registry-publish.yml's wait-for-PyPI loop now never has to
45
+ wait long because PyPI is already there
46
+
47
+ This is the final piece of the zero-touch chain.
48
+
5
49
  ## v0.51.5 — 2026-05-07 — final cascade fix: workflow_dispatch instead of release event
6
50
 
7
51
  v0.51.4's PAT-based cascade failed because the fine-grained
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atomadic-forge
3
- Version: 0.51.5
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.5"
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