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

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