atomadic-forge 0.75.3__tar.gz → 0.77.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 (460) hide show
  1. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/CHANGELOG.md +14 -0
  2. {atomadic_forge-0.75.3/src/atomadic_forge.egg-info → atomadic_forge-0.77.0}/PKG-INFO +8 -8
  3. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/README.md +7 -7
  4. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/CI_CD.md +3 -3
  5. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/COMMANDS.md +1 -1
  6. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/FORMALIZATION.md +2 -2
  7. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/IDE_INTEGRATION.md +1 -1
  8. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/MCP_TOOLS.md +2 -2
  9. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/RECEIPT.md +2 -2
  10. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/pyproject.toml +1 -1
  11. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py +27 -0
  12. atomadic_forge-0.77.0/src/atomadic_forge/a1_at_functions/cosine_similarity.py +22 -0
  13. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/doc_auto_update.py +199 -7
  14. atomadic_forge-0.77.0/src/atomadic_forge/a1_at_functions/graft_extract.py +221 -0
  15. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +186 -1
  16. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/cherry_hunter.py +31 -0
  17. atomadic_forge-0.77.0/src/atomadic_forge/a3_og_features/graft_feature.py +234 -0
  18. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a4_sy_orchestration/cli.py +442 -0
  19. atomadic_forge-0.77.0/src/atomadic_forge/commands/graft.py +139 -0
  20. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/harvest.py +22 -0
  21. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0/src/atomadic_forge.egg-info}/PKG-INFO +8 -8
  22. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge.egg-info/SOURCES.txt +7 -0
  23. atomadic_forge-0.77.0/tests/test_cherry_dedup_class_methods.py +80 -0
  24. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_doc_auto_update.py +103 -0
  25. atomadic_forge-0.77.0/tests/test_graft_feature.py +150 -0
  26. atomadic_forge-0.77.0/tests/test_harvest_source_warnings.py +78 -0
  27. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/FUNDING.yml +0 -0
  28. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  29. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  30. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  31. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/actions/forge-action/README.md +0 -0
  32. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/actions/forge-action/action.yml +0 -0
  33. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/dependabot.yml +0 -0
  34. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/pull_request_template.md +0 -0
  35. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/ci.yml +0 -0
  36. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/customer-refactor.yml +0 -0
  37. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/forge-self-certify.yml +0 -0
  38. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/mcp-registry-publish.yml +0 -0
  39. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/metrics-auto-regen.yml +0 -0
  40. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/metrics-drift.yml +0 -0
  41. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/publish-on-tag.yml +0 -0
  42. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/release-readiness.yml +0 -0
  43. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/release.yml +0 -0
  44. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/surface-drift.yml +0 -0
  45. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/uptime.yml +0 -0
  46. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/ARCHITECTURE.md +0 -0
  47. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/CONTRIBUTING.md +0 -0
  48. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/LICENSE +0 -0
  49. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/MANIFEST.in +0 -0
  50. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/SECURITY.md +0 -0
  51. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/assets/Atomadic-Forge-01.png +0 -0
  52. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/01-getting-started.md +0 -0
  53. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/02-commands.md +0 -0
  54. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/03-tutorial.md +0 -0
  55. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/04-llm-loops.md +0 -0
  56. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/05-faq.md +0 -0
  57. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/AGENTS_GUIDE.md +0 -0
  58. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/AIR_GAPPED.md +0 -0
  59. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/CODEX_WALKTHROUGH.md +0 -0
  60. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/FIRST_10_MINUTES.md +0 -0
  61. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/HIVE_PRIMITIVES.md +0 -0
  62. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/HIVE_STATUS.md +0 -0
  63. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/LANDSCAPE.md +0 -0
  64. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/MARKET_POSITIONING.md +0 -0
  65. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/MIGRATION.md +0 -0
  66. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/MULTI_REPO.md +0 -0
  67. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/PROVIDERS.md +0 -0
  68. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/README.md +0 -0
  69. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/RELAY_PROTOCOL.md +0 -0
  70. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/RELEASE_CHECKLIST.md +0 -0
  71. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/RELEASE_MESSAGING.md +0 -0
  72. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/ROADMAP.md +0 -0
  73. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/SHOWCASE.md +0 -0
  74. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/SIDECAR.md +0 -0
  75. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/STUDIO.md +0 -0
  76. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
  77. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/V0.46.0_JUSTIFICATION_REPORT.md +0 -0
  78. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/V0.47.0_SELF_TEST_REPORT.md +0 -0
  79. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/WHY_NOW.md +0 -0
  80. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
  81. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/WORLD_COLLISION.md +0 -0
  82. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/INDEX.md +0 -0
  83. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/absorb.md +0 -0
  84. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/audit.md +0 -0
  85. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/chat.md +0 -0
  86. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/commandsmith.md +0 -0
  87. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/config.md +0 -0
  88. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/create.md +0 -0
  89. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/demo.md +0 -0
  90. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/emergent-swarm.md +0 -0
  91. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/emergent-then-synergy.md +0 -0
  92. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/emergent.md +0 -0
  93. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/enhancement.md +0 -0
  94. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/evolve-then-iterate.md +0 -0
  95. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/evolve.md +0 -0
  96. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/feature-then-emergent.md +0 -0
  97. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/guard-install.md +0 -0
  98. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/handoff.md +0 -0
  99. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/harvest.md +0 -0
  100. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/hive.md +0 -0
  101. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/iterate.md +0 -0
  102. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/materialize.md +0 -0
  103. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/metrics.md +0 -0
  104. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/recon-swarm.md +0 -0
  105. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/relay.md +0 -0
  106. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/surface.md +0 -0
  107. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/synergy-then-emergent.md +0 -0
  108. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/synergy.md +0 -0
  109. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/welcome.md +0 -0
  110. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/wisdom.md +0 -0
  111. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
  112. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/compliance/CS-1.md +0 -0
  113. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
  114. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
  115. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/compliance/SR_11-7_MAPPING.md +0 -0
  116. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +0 -0
  117. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/tutorials/01-quickstart.md +0 -0
  118. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/tutorials/02-your-first-package.md +0 -0
  119. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/tutorials/03-the-five-tier-law.md +0 -0
  120. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/tutorials/04-plug-in-llms.md +0 -0
  121. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/tutorials/05-multi-repo-absorb.md +0 -0
  122. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/tutorials/06-javascript-quickstart.md +0 -0
  123. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/setup.cfg +0 -0
  124. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/__init__.py +0 -0
  125. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/__main__.py +0 -0
  126. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
  127. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
  128. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
  129. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
  130. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
  131. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
  132. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +0 -0
  133. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
  134. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
  135. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
  136. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
  137. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
  138. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
  139. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/lifetime_savings_constants.py +0 -0
  140. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/materialize_types.py +0 -0
  141. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
  142. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
  143. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
  144. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
  145. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/response_enrichment.py +0 -0
  146. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
  147. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +0 -0
  148. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
  149. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
  150. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
  151. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
  152. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/welcome_constants.py +0 -0
  153. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
  154. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
  155. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/abstract_method_repair.py +0 -0
  156. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
  157. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
  158. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
  159. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
  160. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/ast_scope_lock.py +0 -0
  161. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
  162. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
  163. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/capability_scout.py +0 -0
  164. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
  165. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
  166. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
  167. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
  168. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
  169. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
  170. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
  171. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
  172. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
  173. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
  174. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
  175. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/custom_provider_client.py +0 -0
  176. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/dead_code_check.py +0 -0
  177. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
  178. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
  179. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
  180. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
  181. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
  182. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
  183. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +0 -0
  184. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
  185. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
  186. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
  187. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
  188. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
  189. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
  190. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/forge_metrics.py +0 -0
  191. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
  192. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/git_churn.py +0 -0
  193. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
  194. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/harvest_absorb.py +0 -0
  195. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/harvest_concept_bridge.py +0 -0
  196. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
  197. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
  198. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
  199. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
  200. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
  201. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
  202. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/lifetime_savings.py +0 -0
  203. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
  204. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
  205. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
  206. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
  207. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
  208. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/maintainability_index.py +0 -0
  209. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
  210. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
  211. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
  212. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
  213. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/polyglot_classify.py +0 -0
  214. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/polyglot_imports.py +0 -0
  215. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/polyglot_surface.py +0 -0
  216. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
  217. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
  218. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
  219. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
  220. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
  221. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
  222. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
  223. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/repo_public_surface.py +0 -0
  224. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
  225. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/response_enricher.py +0 -0
  226. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
  227. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
  228. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
  229. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
  230. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/scaffold_polyglot.py +0 -0
  231. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
  232. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
  233. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
  234. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
  235. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
  236. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
  237. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/steersman_pack.py +0 -0
  238. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
  239. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/surface_gap_check.py +0 -0
  240. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
  241. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
  242. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
  243. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
  244. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
  245. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
  246. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
  247. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
  248. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
  249. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
  250. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/welcome_narrator.py +0 -0
  251. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
  252. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/wire_stubs_gen.py +0 -0
  253. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
  254. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
  255. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
  256. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
  257. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
  258. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
  259. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
  260. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
  261. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
  262. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
  263. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
  264. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
  265. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
  266. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
  267. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
  268. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
  269. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
  270. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/remote_seed_store.py +0 -0
  271. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/repo_public_surface_sync.py +0 -0
  272. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
  273. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/absorb_feature.py +0 -0
  274. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
  275. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
  276. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
  277. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
  278. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/create_feature.py +0 -0
  279. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
  280. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
  281. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a0_qk_constants/__init__.py +0 -0
  282. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a1_at_functions/__init__.py +0 -0
  283. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
  284. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
  285. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
  286. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
  287. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
  288. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/emergent_swarm.py +0 -0
  289. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +0 -0
  290. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
  291. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
  292. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
  293. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
  294. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
  295. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_metrics_feature.py +0 -0
  296. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
  297. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
  298. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
  299. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
  300. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
  301. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
  302. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/materialize_feature.py +0 -0
  303. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/mcp_server.py +0 -0
  304. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
  305. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
  306. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
  307. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
  308. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
  309. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
  310. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
  311. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/welcome_feature.py +0 -0
  312. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
  313. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
  314. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
  315. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
  316. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
  317. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/__init__.py +0 -0
  318. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/_registry.py +0 -0
  319. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/absorb.py +0 -0
  320. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/audit.py +0 -0
  321. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/chat.py +0 -0
  322. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/commandsmith.py +0 -0
  323. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/config_cmd.py +0 -0
  324. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/create.py +0 -0
  325. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/demo.py +0 -0
  326. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/emergent.py +0 -0
  327. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
  328. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
  329. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/enhancement.py +0 -0
  330. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/evolve.py +0 -0
  331. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
  332. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
  333. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/guard_install.py +0 -0
  334. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/handoff.py +0 -0
  335. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/hive.py +0 -0
  336. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/iterate.py +0 -0
  337. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/materialize.py +0 -0
  338. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/metrics.py +0 -0
  339. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/recon_swarm.py +0 -0
  340. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/relay.py +0 -0
  341. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/surface.py +0 -0
  342. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/synergy.py +0 -0
  343. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
  344. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/welcome.py +0 -0
  345. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/wisdom.py +0 -0
  346. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
  347. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
  348. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge.egg-info/requires.txt +0 -0
  349. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge.egg-info/top_level.txt +0 -0
  350. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_aaaa_nexus_client.py +0 -0
  351. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_abstract_method_repair.py +0 -0
  352. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_agent_hire_protocol.py +0 -0
  353. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_agent_plan.py +0 -0
  354. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_agent_plan_pkg_label.py +0 -0
  355. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_agent_summary.py +0 -0
  356. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_ast_scope_lock.py +0 -0
  357. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_audit_verb.py +0 -0
  358. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_body_extractor_repairs.py +0 -0
  359. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_call_graph_summary.py +0 -0
  360. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_capability_scout.py +0 -0
  361. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_card_renderer.py +0 -0
  362. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_certify_operational_axis.py +0 -0
  363. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_chat.py +0 -0
  364. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_cherry_pick.py +0 -0
  365. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_classify_tier.py +0 -0
  366. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_classify_tier_ast_signals.py +0 -0
  367. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_cli_smoke.py +0 -0
  368. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_cli_swarm_aliases.py +0 -0
  369. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_codex_5_complete.py +0 -0
  370. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_codex_6_enforce_polyglot.py +0 -0
  371. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_commandsmith.py +0 -0
  372. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_compiler_feedback.py +0 -0
  373. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_compliance_checker.py +0 -0
  374. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_config.py +0 -0
  375. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_copilots_copilot.py +0 -0
  376. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_cost_circuit_breaker.py +0 -0
  377. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_create_feature.py +0 -0
  378. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_cs1_renderer.py +0 -0
  379. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_custom_provider.py +0 -0
  380. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_dead_code_check.py +0 -0
  381. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_dedup_engine.py +0 -0
  382. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_demo.py +0 -0
  383. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_emergent_compose.py +0 -0
  384. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_emergent_signature_extract.py +0 -0
  385. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_emergent_synthesize_imports.py +0 -0
  386. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_enhancement_proposal.py +0 -0
  387. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_error_codes.py +0 -0
  388. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_error_hints.py +0 -0
  389. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_evolve_js.py +0 -0
  390. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_exported_api_check.py +0 -0
  391. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_finalize_scaffold.py +0 -0
  392. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_forge_action.py +0 -0
  393. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_forge_auth_a1.py +0 -0
  394. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_forge_auth_a2.py +0 -0
  395. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_forge_enforce.py +0 -0
  396. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_generation_quality.py +0 -0
  397. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_git_churn.py +0 -0
  398. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_handoff.py +0 -0
  399. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_harvest_concept_bridge.py +0 -0
  400. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_hierarchical_memory.py +0 -0
  401. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_hive_sync.py +0 -0
  402. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_ignore_and_docs.py +0 -0
  403. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_import_smoke.py +0 -0
  404. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_iterate_evolve.py +0 -0
  405. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_js_certify.py +0 -0
  406. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_js_parser.py +0 -0
  407. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_js_recon.py +0 -0
  408. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_js_wire.py +0 -0
  409. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_lineage_chain.py +0 -0
  410. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_ling_provider.py +0 -0
  411. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_local_signer.py +0 -0
  412. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_lsp_protocol.py +0 -0
  413. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_maintainability_index.py +0 -0
  414. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_manifest_diff.py +0 -0
  415. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_materialize_feature.py +0 -0
  416. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_mcp_lazy_bootstrap.py +0 -0
  417. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_mcp_protocol.py +0 -0
  418. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_nexus_bridge.py +0 -0
  419. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_ollama_client.py +0 -0
  420. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_pipeline.py +0 -0
  421. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_plan_apply.py +0 -0
  422. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_polyglot_cli_mcp.py +0 -0
  423. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_polyglot_full_pipeline.py +0 -0
  424. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_polyglot_hardening.py +0 -0
  425. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_polyglot_swift_kotlin_go.py +0 -0
  426. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_polyglot_symbol_parity.py +0 -0
  427. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_pre_audit_smoke.py +0 -0
  428. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_precommit_hooks.py +0 -0
  429. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_progress_reporter.py +0 -0
  430. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_receipt_emitter.py +0 -0
  431. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_receipt_schema.py +0 -0
  432. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_receipt_signer.py +0 -0
  433. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_remote_seed_store.py +0 -0
  434. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_repo_public_surface.py +0 -0
  435. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_response_enricher.py +0 -0
  436. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_roi_calculator.py +0 -0
  437. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_sbom_cmd_text_summary.py +0 -0
  438. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_sbom_emitter.py +0 -0
  439. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_scaffold.py +0 -0
  440. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_sidecar.py +0 -0
  441. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_sidecar_validate.py +0 -0
  442. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_smell_score_formula.py +0 -0
  443. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_stagnation.py +0 -0
  444. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_steersman_pack.py +0 -0
  445. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_stub_detector.py +0 -0
  446. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_surface_export.py +0 -0
  447. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_surface_gap_check.py +0 -0
  448. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_synergy.py +0 -0
  449. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_test_runner.py +0 -0
  450. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_tier_init_rebuild.py +0 -0
  451. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_trust_gate_response.py +0 -0
  452. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_verify_suggested_recipe.py +0 -0
  453. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_welcome.py +0 -0
  454. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_welcome_enhancements.py +0 -0
  455. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_whoami_cmd.py +0 -0
  456. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_wire_certify.py +0 -0
  457. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_wire_stubs_gen.py +0 -0
  458. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_wire_suggest_repairs.py +0 -0
  459. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_wire_type_checking.py +0 -0
  460. {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_wisdom.py +0 -0
@@ -2,6 +2,20 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## v0.77.0 — 2026-05-08
6
+
7
+ - fix(forge): cherry-pick — collapse Class.method explosion (root-cause)
8
+ - feat(doc-update): auto-update 6 previously missed doc files on release
9
+
10
+
11
+ ## v0.76.0 — 2026-05-08
12
+
13
+ - feat(forge): graft — surgical single-symbol cross-repo capability transfer
14
+ - fix(lint): clear 14 ruff violations blocking CI
15
+ - release: v0.75.3
16
+ - fix(forge): GAP-014 — harvest fail-loud on missing/empty sources
17
+
18
+
5
19
  ## v0.75.3 — 2026-05-08
6
20
 
7
21
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atomadic-forge
3
- Version: 0.75.3
3
+ Version: 0.77.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
@@ -176,11 +176,11 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
176
176
  | `forge plan` | Bounded execution plan with risk + rollback |
177
177
  | `forge chat` | Terminal copilot over forge docs |
178
178
 
179
- **84 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
179
+ **59 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
180
180
 
181
181
  ---
182
182
 
183
- ## MCP Server — 10 Tools, 112 Actions
183
+ ## MCP Server — 10 Tools, 116 Actions
184
184
 
185
185
  Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aider, Devin, or any MCP-compatible agent:
186
186
 
@@ -200,7 +200,7 @@ Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aide
200
200
  | Tool | Actions | What it does |
201
201
  |------|---------|-------------|
202
202
  | `welcome` | — | RECOMMENDED FIRST CALL: onboarding scan, score, narrative, capability tour |
203
- | `explore` | 16 | Analyze, understand, discover — recon/explain/call_graph/call_graph_summary/smell/lineage/harvest/synergy/scan/swarm/churn/surface_gaps/capability_scout/dead_code/maintainability/concept_bridge |
203
+ | `explore` | 17 | Analyze, understand, discover — recon/explain/call_graph/call_graph_summary/smell/lineage/harvest/synergy/scan/swarm/churn/surface_gaps/capability_scout/dead_code/maintainability/concept_bridge |
204
204
  | `audit` | 23 | Quality gates, change safety, trust |
205
205
  | `plan` | 10 | Orient + dev utilities — context/compose/policy/recipes/generate/apply/locate/commit/scaffold/steersman |
206
206
  | `transmute` | 3 | **FLAGSHIP** spaghetti→certified pipeline — auto/cherry/finalize |
@@ -223,10 +223,10 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
223
223
  | Metric | Value |
224
224
  |--------|-------|
225
225
 
226
- | MCP tools | **10 tools · 112 actions** |
227
- | CLI verbs | **84** |
228
- | Source files | **228** (~45K LOC) |
229
- | Tests | **1555 passing** across **112 test files** |
226
+ | MCP tools | **10 tools · 116 actions** |
227
+ | CLI verbs | **59** |
228
+ | Source files | **232** (~47K LOC) |
229
+ | Tests | **1588 passing** across **115 test files** |
230
230
  | Lean4 formal proofs | **872 theorems** (mathematically verified core logic) |
231
231
  | Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
232
232
  | Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
@@ -144,11 +144,11 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
144
144
  | `forge plan` | Bounded execution plan with risk + rollback |
145
145
  | `forge chat` | Terminal copilot over forge docs |
146
146
 
147
- **84 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
147
+ **59 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
148
148
 
149
149
  ---
150
150
 
151
- ## MCP Server — 10 Tools, 112 Actions
151
+ ## MCP Server — 10 Tools, 116 Actions
152
152
 
153
153
  Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aider, Devin, or any MCP-compatible agent:
154
154
 
@@ -168,7 +168,7 @@ Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aide
168
168
  | Tool | Actions | What it does |
169
169
  |------|---------|-------------|
170
170
  | `welcome` | — | RECOMMENDED FIRST CALL: onboarding scan, score, narrative, capability tour |
171
- | `explore` | 16 | Analyze, understand, discover — recon/explain/call_graph/call_graph_summary/smell/lineage/harvest/synergy/scan/swarm/churn/surface_gaps/capability_scout/dead_code/maintainability/concept_bridge |
171
+ | `explore` | 17 | Analyze, understand, discover — recon/explain/call_graph/call_graph_summary/smell/lineage/harvest/synergy/scan/swarm/churn/surface_gaps/capability_scout/dead_code/maintainability/concept_bridge |
172
172
  | `audit` | 23 | Quality gates, change safety, trust |
173
173
  | `plan` | 10 | Orient + dev utilities — context/compose/policy/recipes/generate/apply/locate/commit/scaffold/steersman |
174
174
  | `transmute` | 3 | **FLAGSHIP** spaghetti→certified pipeline — auto/cherry/finalize |
@@ -191,10 +191,10 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
191
191
  | Metric | Value |
192
192
  |--------|-------|
193
193
 
194
- | MCP tools | **10 tools · 112 actions** |
195
- | CLI verbs | **84** |
196
- | Source files | **228** (~45K LOC) |
197
- | Tests | **1555 passing** across **112 test files** |
194
+ | MCP tools | **10 tools · 116 actions** |
195
+ | CLI verbs | **59** |
196
+ | Source files | **232** (~47K LOC) |
197
+ | Tests | **1588 passing** across **115 test files** |
198
198
  | Lean4 formal proofs | **872 theorems** (mathematically verified core logic) |
199
199
  | Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
200
200
  | Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
@@ -46,7 +46,7 @@ jobs:
46
46
  run: |
47
47
  pip install atomadic-forge # PyPI (preferred)
48
48
  # Or pin to an exact tag:
49
- # pip install "git+https://github.com/atomadictech/atomadic-forge@v0.60.0"
49
+ # pip install "git+https://github.com/atomadictech/atomadic-forge@v0.77.0"
50
50
  # Or vendor wheels: pip install --no-index --find-links wheels/ atomadic-forge
51
51
 
52
52
  - name: Wire scan (upward-import discipline)
@@ -97,7 +97,7 @@ forge-certify:
97
97
  image: python:3.11-slim
98
98
  timeout: 10 minutes
99
99
  before_script:
100
- - pip install "git+https://github.com/atomadictech/atomadic-forge@v0.60.0"
100
+ - pip install "git+https://github.com/atomadictech/atomadic-forge@v0.77.0"
101
101
  script:
102
102
  - forge wire src/your_package --fail-on-violations --json > wire.json
103
103
  - forge certify . --package your_package --fail-under 75 --json > certify.json
@@ -156,7 +156,7 @@ Then in **the consuming repo's** `.pre-commit-config.yaml`:
156
156
  ```yaml
157
157
  repos:
158
158
  - repo: https://github.com/atomadictech/atomadic-forge
159
- rev: v0.60.0
159
+ rev: v0.77.0
160
160
  hooks:
161
161
  - id: forge-wire
162
162
  - id: forge-certify
@@ -1,6 +1,6 @@
1
1
  # Atomadic Forge — Command Reference
2
2
 
3
- All verbs available in the `forge` CLI as of 0.60.0.
3
+ All verbs available in the `forge` CLI as of 0.77.0
4
4
 
5
5
  > For the structured per-verb reference (with options, examples, and
6
6
  > output samples), see [02-commands.md](02-commands.md). This page is
@@ -39,7 +39,7 @@ Forge certify scores out of **100** in two layers:
39
39
  JS / TS packages cap at **60/100** today: they earn the four
40
40
  structural axes, but the +25 runtime-import smoke and +30 behavioural
41
41
  pytest are Python-only. Wiring `npm test` / Vitest into the
42
- behavioural axis is on the post-v0.60.0 roadmap.
42
+ behavioural axis is on the post-v0.77.0 roadmap.
43
43
 
44
44
  ---
45
45
 
@@ -131,7 +131,7 @@ runtime dependency makes the package unusable.
131
131
 
132
132
  **Why JS/TS does not get this gate yet.** AAM §5.4 (Threats to
133
133
  Validity) explicitly flags polyglot runtime gating as a roadmap
134
- item (post-v0.60.0): the equivalent for JS would be an `npm test`
134
+ item (post-v0.77.0): the equivalent for JS would be an `npm test`
135
135
  invocation, which requires a Node toolchain we do not yet bundle.
136
136
 
137
137
  **Citation.** AAM §5.1 (Core Pipeline Pseudocode); AAM §5.4 (Threats
@@ -16,7 +16,7 @@ See `vscode-extension/README.md` for settings + usage.
16
16
 
17
17
  ## 2. MCP server (works with any MCP-aware assistant)
18
18
 
19
- Forge ships a fully-typed MCP server with **10 tools dispatching 112 actions** spanning recon, wire, certify, plan, enforce, emergent, synergy, wisdom, lineage, hive coordination, and AAAA-Nexus trust gates. Any of these clients can attach:
19
+ Forge ships a fully-typed MCP server with **10 tools dispatching 116 actions** spanning recon, wire, certify, plan, enforce, emergent, synergy, wisdom, lineage, hive coordination, and AAAA-Nexus trust gates. Any of these clients can attach:
20
20
 
21
21
  - **Claude Code** (Anthropic CLI) — `claude mcp add atomadic-forge -- forge mcp serve --project ${workspaceFolder}`
22
22
  - **Cursor** — Settings → MCP Servers → add the same command above
@@ -1,6 +1,6 @@
1
1
  # Forge MCP Tools Reference
2
2
 
3
- Forge ships a Model Context Protocol server exposing **10 tools dispatching 112 registry-callable actions**. Counts are auto-synced from `forge_metrics.json` by `doc-update`.
3
+ Forge ships a Model Context Protocol server exposing **10 tools dispatching 116 registry-callable actions**. Counts are auto-synced from `forge_metrics.json` by `doc-update`.
4
4
  The per-tool table below lists the primary dispatch actions; the headline total also includes compatibility routes that keep older callers working.
5
5
  All legacy tool names redirect automatically — existing callers keep working.
6
6
 
@@ -17,7 +17,7 @@ All legacy tool names redirect automatically — existing callers keep working.
17
17
  | Tool | Actions | Purpose |
18
18
  |------|---------|---------|
19
19
  | [`welcome`](#welcome) | — | Session onboarding: scan, score, narrative, capability tour |
20
- | [`explore`](#explore) | 16 | Analyze and understand a codebase — recon, call graphs, smells, harvest, discovery |
20
+ | [`explore`](#explore) | 17 | Analyze and understand a codebase — recon, call graphs, smells, harvest, discovery |
21
21
  | [`audit`](#audit) | 23 | Quality gates, change safety, trust verification |
22
22
  | [`plan`](#plan) | 10 | Dev orientation and utilities — context packs, recipes, commit messages, steersman packs |
23
23
  | [`transmute`](#transmute) | 3 | **FLAGSHIP** spaghetti-to-certified pipeline |
@@ -30,7 +30,7 @@ referenced from the Receipt.
30
30
  {
31
31
  "schema_version": "atomadic-forge.receipt/v1",
32
32
  "generated_at_utc": "2026-04-28T17:42:11Z",
33
- "forge_version": "0.60.0",
33
+ "forge_version": "0.77.0",
34
34
  "verdict": "PASS",
35
35
  "project": { ... },
36
36
  "certify": { ... },
@@ -108,7 +108,7 @@ cited:
108
108
  {
109
109
  "schema_version": "atomadic-forge.receipt/v1",
110
110
  "generated_at_utc": "2026-04-28T17:42:11Z",
111
- "forge_version": "0.60.0",
111
+ "forge_version": "0.77.0",
112
112
  "verdict": "PASS",
113
113
 
114
114
  "project": {
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "atomadic-forge"
7
- version = "0.75.3"
7
+ version = "0.77.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"
@@ -62,6 +62,7 @@ def select_items(scout_report: dict, *, names: Iterable[str] | None = None,
62
62
  "confidence": _confidence_of(s),
63
63
  "reasons": _reasons_for(s),
64
64
  })
65
+ items = _dedup_methods_under_class(items)
65
66
  return {
66
67
  "schema_version": "atomadic-forge.cherry/v1",
67
68
  "source_repo": scout_report.get("repo", ""),
@@ -69,6 +70,32 @@ def select_items(scout_report: dict, *, names: Iterable[str] | None = None,
69
70
  }
70
71
 
71
72
 
73
+ def _dedup_methods_under_class(items: list[dict]) -> list[dict]:
74
+ """Collapse ``Class.method`` items when ``Class`` is already selected.
75
+
76
+ The 47-file class explosion fix: scout enumerates a class plus every
77
+ public method as separate symbols (``IndexStore`` and
78
+ ``IndexStore.add``, ``IndexStore.search``, ...). Without this filter,
79
+ finalize copies the same source file once per qualname under
80
+ different slugs, exploding a single class into N near-identical files.
81
+
82
+ When the parent class is in the manifest, we drop its methods —
83
+ they ride along inside the class body. When the parent is absent
84
+ (rare; scout dropped it), we keep the methods so capability isn't
85
+ lost.
86
+ """
87
+ class_quals = {it["qualname"] for it in items if "." not in it["qualname"]}
88
+ out: list[dict] = []
89
+ for it in items:
90
+ qual = it["qualname"]
91
+ if "." in qual:
92
+ parent = qual.rsplit(".", 1)[0]
93
+ if parent in class_quals:
94
+ continue
95
+ out.append(it)
96
+ return out
97
+
98
+
72
99
  def _confidence_of(symbol: dict) -> float:
73
100
  # High confidence when name tokens drove the decision; lower when we fell
74
101
  # back to the kind-default (function→a1, class→a2). Cheap proxy: complexity
@@ -0,0 +1,22 @@
1
+ """Grafted from search_symbols.py (lines 410–423) by `forge graft`."""
2
+ from __future__ import annotations
3
+
4
+ import math
5
+
6
+ SCHEMA_VERSION_GRAFT_COSINE_SIMILARITY = "atomadic-forge.graft.cosine_similarity/v1"
7
+
8
+ def cosine_similarity(a: list[float], b: list[float]) -> float:
9
+ """Cosine similarity in pure Python (no numpy).
10
+
11
+ Returns 0.0 if either vector is zero-length or the lists differ in size.
12
+ Uses ``math.sqrt`` and ``sum()`` — no external deps.
13
+ """
14
+ if not a or not b or len(a) != len(b):
15
+ return 0.0
16
+ dot = sum(x * y for x, y in zip(a, b, strict=False))
17
+ norm_a = math.sqrt(sum(x * x for x in a))
18
+ norm_b = math.sqrt(sum(y * y for y in b))
19
+ if norm_a == 0.0 or norm_b == 0.0:
20
+ return 0.0
21
+ return dot / (norm_a * norm_b)
22
+
@@ -2,9 +2,11 @@
2
2
 
3
3
  Zero LLM tokens. Reads forge_metrics.json, inspects MCP enum lists and CLI
4
4
  command decorators, then rewrites bounded sections in README.md, CHANGELOG.md,
5
- docs/IDE_INTEGRATION.md, WHITEPAPER.md, and docs/AGENTS_GUIDE.md
6
- programmatically. Every value is derived from live code or the metrics artifact
7
- no human-authored prose is touched.
5
+ docs/IDE_INTEGRATION.md, WHITEPAPER.md, docs/AGENTS_GUIDE.md,
6
+ tests/README.md, docs/CI_CD.md, docs/COMMANDS.md, docs/RECEIPT.md,
7
+ docs/FORMALIZATION.md, and docs/MCP_TOOLS.md programmatically. Every value
8
+ is derived from live code or the metrics artifact — no human-authored prose
9
+ is touched.
8
10
 
9
11
  Updateable sections
10
12
  -------------------
@@ -29,6 +31,26 @@ WHITEPAPER.md
29
31
  docs/AGENTS_GUIDE.md
30
32
  • Summary table rows matching ``| explore | NN actions |`` pattern (if present).
31
33
 
34
+ tests/README.md
35
+ • "NN test files covering N,NNN passing tests" line.
36
+
37
+ docs/CI_CD.md
38
+ • Git-pinned install URLs ``atomadic-forge@vX.Y.Z`` → current version.
39
+ • Pre-commit ``rev: vX.Y.Z`` pin → current version.
40
+
41
+ docs/COMMANDS.md
42
+ • "as of X.Y.Z" version anchor in header.
43
+
44
+ docs/RECEIPT.md
45
+ • ``"forge_version": "X.Y.Z"`` in example JSON payloads.
46
+
47
+ docs/FORMALIZATION.md
48
+ • ``post-vX.Y.Z`` roadmap anchors.
49
+
50
+ docs/MCP_TOOLS.md
51
+ • Header line ``NN tools dispatching NN registry-callable actions``.
52
+ • Per-tool action counts in the summary table.
53
+
32
54
  Pure: no subprocess unless git is requested. No writes when dry_run=True.
33
55
  """
34
56
  from __future__ import annotations
@@ -78,6 +100,33 @@ _DRIFT_TOOLS_RE = re.compile(r'(\d+)\s+MCP\s+tools')
78
100
  _DRIFT_ACTIONS_RE = re.compile(r'dispatching\s+(\d+)\s+actions')
79
101
  _DRIFT_TESTS_RE = re.compile(r'([\d,]+)\s+passing\s+tests')
80
102
 
103
+ # ── version-anchor regexes (update_version_anchors) ───────────────────────────
104
+ # tests/README.md: "NN test files covering N,NNN passing tests"
105
+ _TESTS_README_RE = re.compile(r'\d+ test files covering [\d,]+ passing tests')
106
+
107
+ # docs/CI_CD.md: git-pinned install URL and pre-commit rev pin
108
+ _CICD_GIT_URL_RE = re.compile(r'(atomadic-forge@)v[\d.]+')
109
+ _CICD_REV_RE = re.compile(r'(rev:\s*)v[\d.]+')
110
+
111
+ # docs/COMMANDS.md: "as of X.Y.Z" header anchor
112
+ _COMMANDS_VER_RE = re.compile(r'(as of )[\d.]+')
113
+
114
+ # docs/RECEIPT.md: forge_version in example JSON blocks (both occurrences)
115
+ _RECEIPT_VER_RE = re.compile(r'("forge_version":\s*")[\d.]+(")')
116
+
117
+ # docs/FORMALIZATION.md: "post-vX.Y.Z" roadmap anchors
118
+ _FORMALIZATION_POST_VER_RE = re.compile(r'post-v[\d.]+')
119
+
120
+ # docs/MCP_TOOLS.md: header count line
121
+ _MCP_TOOLS_HEADER_RE = re.compile(
122
+ r'\d+ tools dispatching \d+ registry-callable actions'
123
+ )
124
+ # docs/MCP_TOOLS.md: per-tool summary table rows
125
+ # Matches: | [`toolname`](#anchor) | NN | description |
126
+ _MCP_TOOLS_ROW_RE = re.compile(
127
+ r'(\|\s*\[`(?P<tool>[^`]+)`\]\(#[^)]+\)\s*\|\s*)(?P<count>\d+)(\s*\|)'
128
+ )
129
+
81
130
 
82
131
  # ── helpers ───────────────────────────────────────────────────────────────────
83
132
 
@@ -602,12 +651,146 @@ def detect_doc_drift(project_root: Path) -> dict[str, Any]:
602
651
  }
603
652
 
604
653
 
654
+ # ── version-anchor updater ────────────────────────────────────────────────────
655
+
656
+ def update_version_anchors(
657
+ project_root: Path,
658
+ *,
659
+ dry_run: bool = False,
660
+ ) -> dict[str, Any]:
661
+ """Rewrite version-pinned strings in docs that drift on every release.
662
+
663
+ Covers tests/README.md, docs/CI_CD.md, docs/COMMANDS.md, docs/RECEIPT.md,
664
+ docs/FORMALIZATION.md, and docs/MCP_TOOLS.md. Each pattern is keyed to
665
+ live forge_metrics.json so no version string needs manual updating.
666
+ """
667
+ metrics = _load_metrics(project_root)
668
+ if not metrics:
669
+ return {
670
+ "schema_version": SCHEMA_VERSION_DOC_AUTO_UPDATE_V1,
671
+ "available": False,
672
+ "reason": "forge_metrics.json not found or empty",
673
+ "changes": [],
674
+ "dry_run": dry_run,
675
+ }
676
+
677
+ version = metrics.get("package_version", "")
678
+ test_files = metrics.get("test_files", "?")
679
+ test_functions = metrics.get("test_functions", "?")
680
+ mcp_tools = metrics.get("mcp_tools", "?")
681
+ mcp_actions = metrics.get("mcp_actions", "?")
682
+ changes: list[str] = []
683
+
684
+ # ── tests/README.md ───────────────────────────────────────────────────────
685
+ tests_readme = project_root / "tests" / "README.md"
686
+ if tests_readme.exists():
687
+ text = tests_readme.read_text(encoding="utf-8")
688
+ new_text = _TESTS_README_RE.sub(
689
+ f"{test_files} test files covering {test_functions} passing tests",
690
+ text,
691
+ )
692
+ if new_text != text:
693
+ if not dry_run:
694
+ tests_readme.write_text(new_text, encoding="utf-8")
695
+ changes.append(
696
+ f"tests/README.md: test counts → {test_files} files / {test_functions} tests"
697
+ )
698
+
699
+ if not version:
700
+ return {
701
+ "schema_version": SCHEMA_VERSION_DOC_AUTO_UPDATE_V1,
702
+ "available": True,
703
+ "changes": changes,
704
+ "warnings": ["package_version missing — skipped version-pinned files"],
705
+ "dry_run": dry_run,
706
+ }
707
+
708
+ # ── docs/CI_CD.md ─────────────────────────────────────────────────────────
709
+ cicd_path = project_root / "docs" / "CI_CD.md"
710
+ if cicd_path.exists():
711
+ text = cicd_path.read_text(encoding="utf-8")
712
+ new_text = _CICD_GIT_URL_RE.sub(rf"\g<1>v{version}", text)
713
+ new_text = _CICD_REV_RE.sub(rf"\g<1>v{version}", new_text)
714
+ if new_text != text:
715
+ if not dry_run:
716
+ cicd_path.write_text(new_text, encoding="utf-8")
717
+ changes.append(f"docs/CI_CD.md: pinned version → v{version}")
718
+
719
+ # ── docs/COMMANDS.md ──────────────────────────────────────────────────────
720
+ commands_path = project_root / "docs" / "COMMANDS.md"
721
+ if commands_path.exists():
722
+ text = commands_path.read_text(encoding="utf-8")
723
+ new_text = _COMMANDS_VER_RE.sub(rf"\g<1>{version}", text)
724
+ if new_text != text:
725
+ if not dry_run:
726
+ commands_path.write_text(new_text, encoding="utf-8")
727
+ changes.append(f"docs/COMMANDS.md: version anchor → {version}")
728
+
729
+ # ── docs/RECEIPT.md ───────────────────────────────────────────────────────
730
+ receipt_path = project_root / "docs" / "RECEIPT.md"
731
+ if receipt_path.exists():
732
+ text = receipt_path.read_text(encoding="utf-8")
733
+ new_text = _RECEIPT_VER_RE.sub(rf'\g<1>{version}\g<2>', text)
734
+ if new_text != text:
735
+ if not dry_run:
736
+ receipt_path.write_text(new_text, encoding="utf-8")
737
+ changes.append(f"docs/RECEIPT.md: forge_version → {version}")
738
+
739
+ # ── docs/FORMALIZATION.md ─────────────────────────────────────────────────
740
+ formalization_path = project_root / "docs" / "FORMALIZATION.md"
741
+ if formalization_path.exists():
742
+ text = formalization_path.read_text(encoding="utf-8")
743
+ new_text = _FORMALIZATION_POST_VER_RE.sub(f"post-v{version}", text)
744
+ if new_text != text:
745
+ if not dry_run:
746
+ formalization_path.write_text(new_text, encoding="utf-8")
747
+ changes.append(f"docs/FORMALIZATION.md: post-version anchors → post-v{version}")
748
+
749
+ # ── docs/MCP_TOOLS.md ─────────────────────────────────────────────────────
750
+ mcp_tools_path = project_root / "docs" / "MCP_TOOLS.md"
751
+ if mcp_tools_path.exists() and mcp_tools != "?" and mcp_actions != "?":
752
+ text = mcp_tools_path.read_text(encoding="utf-8")
753
+ # Header line
754
+ new_text = _MCP_TOOLS_HEADER_RE.sub(
755
+ f"{mcp_tools} tools dispatching {mcp_actions} registry-callable actions",
756
+ text,
757
+ )
758
+ # Per-tool summary table rows
759
+ action_counts = _count_mcp_actions_per_tool(project_root)
760
+
761
+ def _replace_mcp_tools_row(match: re.Match[str]) -> str:
762
+ tool = match.group("tool")
763
+ if tool not in action_counts:
764
+ return match.group(0)
765
+ new_count = str(action_counts[tool])
766
+ if match.group("count") == new_count:
767
+ return match.group(0)
768
+ return match.group(1) + new_count + match.group(4)
769
+
770
+ new_text = _MCP_TOOLS_ROW_RE.sub(_replace_mcp_tools_row, new_text)
771
+ if new_text != text:
772
+ if not dry_run:
773
+ mcp_tools_path.write_text(new_text, encoding="utf-8")
774
+ changes.append(
775
+ f"docs/MCP_TOOLS.md: header/rows → {mcp_tools} tools / {mcp_actions} actions"
776
+ )
777
+
778
+ return {
779
+ "schema_version": SCHEMA_VERSION_DOC_AUTO_UPDATE_V1,
780
+ "available": True,
781
+ "changes": changes,
782
+ "dry_run": dry_run,
783
+ }
784
+
785
+
605
786
  # ── main entry point ──────────────────────────────────────────────────────────
606
787
 
607
788
  def run_doc_auto_update(
608
789
  project_root: Path,
609
790
  *,
610
- sections: tuple[str, ...] = ("readme", "changelog", "extended_docs"),
791
+ sections: tuple[str, ...] = (
792
+ "readme", "changelog", "extended_docs", "version_anchors"
793
+ ),
611
794
  dry_run: bool = False,
612
795
  ) -> dict[str, Any]:
613
796
  """Run all doc auto-update passes.
@@ -615,9 +798,13 @@ def run_doc_auto_update(
615
798
  Args:
616
799
  project_root: Repository root.
617
800
  sections: Which sections to update — any combination of
618
- ``"readme"``, ``"changelog"``, and ``"extended_docs"``.
619
- Defaults to all three. ``"extended_docs"`` patches
620
- IDE_INTEGRATION.md, WHITEPAPER.md, and AGENTS_GUIDE.md.
801
+ ``"readme"``, ``"changelog"``, ``"extended_docs"``, and
802
+ ``"version_anchors"``. Defaults to all four.
803
+ ``"extended_docs"`` patches IDE_INTEGRATION.md,
804
+ WHITEPAPER.md, and AGENTS_GUIDE.md.
805
+ ``"version_anchors"`` patches tests/README.md,
806
+ docs/CI_CD.md, docs/COMMANDS.md, docs/RECEIPT.md,
807
+ docs/FORMALIZATION.md, and docs/MCP_TOOLS.md.
621
808
  dry_run: If True, return what would change without writing.
622
809
 
623
810
  Returns dict with ``schema_version``, ``results`` per section,
@@ -642,6 +829,11 @@ def run_doc_auto_update(
642
829
  results["extended_docs"] = r
643
830
  total += len(r.get("changes", []))
644
831
 
832
+ if "version_anchors" in sections:
833
+ r = update_version_anchors(root, dry_run=dry_run)
834
+ results["version_anchors"] = r
835
+ total += len(r.get("changes", []))
836
+
645
837
  # Self-verify: residual drift after all writes confirms every pattern fired.
646
838
  post_drift = detect_doc_drift(root) if not dry_run else {"drift_count": 0}
647
839