atomadic-forge 0.56.0__tar.gz → 0.57.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 (440) hide show
  1. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/workflows/metrics-auto-regen.yml +4 -2
  2. {atomadic_forge-0.56.0/src/atomadic_forge.egg-info → atomadic_forge-0.57.0}/PKG-INFO +1 -1
  3. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/AGENTS_GUIDE.md +2 -2
  4. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/pyproject.toml +1 -1
  5. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +57 -0
  6. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/doc_auto_update.py +36 -13
  7. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a4_sy_orchestration/cli.py +145 -1
  8. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0/src/atomadic_forge.egg-info}/PKG-INFO +1 -1
  9. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/FUNDING.yml +0 -0
  10. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  11. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  12. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  13. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/actions/forge-action/README.md +0 -0
  14. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/actions/forge-action/action.yml +0 -0
  15. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/dependabot.yml +0 -0
  16. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/pull_request_template.md +0 -0
  17. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/workflows/ci.yml +0 -0
  18. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/workflows/customer-refactor.yml +0 -0
  19. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/workflows/forge-self-certify.yml +0 -0
  20. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/workflows/mcp-registry-publish.yml +0 -0
  21. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/workflows/metrics-drift.yml +0 -0
  22. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/workflows/publish-on-tag.yml +0 -0
  23. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/workflows/release-readiness.yml +0 -0
  24. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/workflows/release.yml +0 -0
  25. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/workflows/surface-drift.yml +0 -0
  26. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/.github/workflows/uptime.yml +0 -0
  27. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/ARCHITECTURE.md +0 -0
  28. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/CHANGELOG.md +0 -0
  29. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/CONTRIBUTING.md +0 -0
  30. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/LICENSE +0 -0
  31. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/MANIFEST.in +0 -0
  32. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/README.md +0 -0
  33. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/SECURITY.md +0 -0
  34. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/assets/Atomadic-Forge-01.png +0 -0
  35. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/01-getting-started.md +0 -0
  36. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/02-commands.md +0 -0
  37. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/03-tutorial.md +0 -0
  38. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/04-llm-loops.md +0 -0
  39. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/05-faq.md +0 -0
  40. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/AIR_GAPPED.md +0 -0
  41. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/CI_CD.md +0 -0
  42. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/CODEX_WALKTHROUGH.md +0 -0
  43. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/COMMANDS.md +0 -0
  44. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/FIRST_10_MINUTES.md +0 -0
  45. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/FORMALIZATION.md +0 -0
  46. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/HIVE_PRIMITIVES.md +0 -0
  47. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/HIVE_STATUS.md +0 -0
  48. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/IDE_INTEGRATION.md +0 -0
  49. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/LANDSCAPE.md +0 -0
  50. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/MARKET_POSITIONING.md +0 -0
  51. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/MCP_TOOLS.md +0 -0
  52. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/MIGRATION.md +0 -0
  53. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/MULTI_REPO.md +0 -0
  54. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/PROVIDERS.md +0 -0
  55. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/README.md +0 -0
  56. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/RECEIPT.md +0 -0
  57. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/RELAY_PROTOCOL.md +0 -0
  58. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/RELEASE_CHECKLIST.md +0 -0
  59. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/RELEASE_MESSAGING.md +0 -0
  60. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/ROADMAP.md +0 -0
  61. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/SHOWCASE.md +0 -0
  62. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/SIDECAR.md +0 -0
  63. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/STUDIO.md +0 -0
  64. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
  65. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/V0.46.0_JUSTIFICATION_REPORT.md +0 -0
  66. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/V0.47.0_SELF_TEST_REPORT.md +0 -0
  67. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/WHY_NOW.md +0 -0
  68. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
  69. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/WORLD_COLLISION.md +0 -0
  70. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/INDEX.md +0 -0
  71. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/absorb.md +0 -0
  72. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/audit.md +0 -0
  73. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/chat.md +0 -0
  74. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/commandsmith.md +0 -0
  75. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/config.md +0 -0
  76. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/create.md +0 -0
  77. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/demo.md +0 -0
  78. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/emergent-swarm.md +0 -0
  79. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/emergent-then-synergy.md +0 -0
  80. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/emergent.md +0 -0
  81. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/enhancement.md +0 -0
  82. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/evolve-then-iterate.md +0 -0
  83. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/evolve.md +0 -0
  84. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/feature-then-emergent.md +0 -0
  85. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/guard-install.md +0 -0
  86. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/handoff.md +0 -0
  87. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/harvest.md +0 -0
  88. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/hive.md +0 -0
  89. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/iterate.md +0 -0
  90. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/materialize.md +0 -0
  91. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/metrics.md +0 -0
  92. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/recon-swarm.md +0 -0
  93. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/relay.md +0 -0
  94. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/surface.md +0 -0
  95. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/synergy-then-emergent.md +0 -0
  96. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/synergy.md +0 -0
  97. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/welcome.md +0 -0
  98. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/commands/wisdom.md +0 -0
  99. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
  100. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/compliance/CS-1.md +0 -0
  101. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
  102. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
  103. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/compliance/SR_11-7_MAPPING.md +0 -0
  104. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +0 -0
  105. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/tutorials/01-quickstart.md +0 -0
  106. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/tutorials/02-your-first-package.md +0 -0
  107. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/tutorials/03-the-five-tier-law.md +0 -0
  108. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/tutorials/04-plug-in-llms.md +0 -0
  109. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/tutorials/05-multi-repo-absorb.md +0 -0
  110. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/docs/tutorials/06-javascript-quickstart.md +0 -0
  111. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/setup.cfg +0 -0
  112. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/__init__.py +0 -0
  113. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/__main__.py +0 -0
  114. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
  115. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
  116. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
  117. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
  118. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
  119. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
  120. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +0 -0
  121. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
  122. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
  123. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
  124. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
  125. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
  126. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
  127. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/lifetime_savings_constants.py +0 -0
  128. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/materialize_types.py +0 -0
  129. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
  130. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
  131. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
  132. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
  133. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/response_enrichment.py +0 -0
  134. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
  135. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +0 -0
  136. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
  137. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
  138. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
  139. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
  140. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/welcome_constants.py +0 -0
  141. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
  142. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
  143. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
  144. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
  145. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
  146. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
  147. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
  148. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/capability_scout.py +0 -0
  149. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
  150. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
  151. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
  152. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
  153. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
  154. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
  155. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
  156. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
  157. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
  158. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
  159. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
  160. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
  161. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/custom_provider_client.py +0 -0
  162. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/dead_code_check.py +0 -0
  163. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
  164. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
  165. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
  166. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
  167. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
  168. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
  169. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +0 -0
  170. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
  171. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
  172. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
  173. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
  174. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
  175. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
  176. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/forge_metrics.py +0 -0
  177. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
  178. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/git_churn.py +0 -0
  179. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
  180. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/harvest_absorb.py +0 -0
  181. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/harvest_concept_bridge.py +0 -0
  182. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
  183. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
  184. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
  185. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
  186. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
  187. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
  188. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/lifetime_savings.py +0 -0
  189. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
  190. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
  191. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
  192. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
  193. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
  194. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/maintainability_index.py +0 -0
  195. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
  196. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +0 -0
  197. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
  198. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
  199. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
  200. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/polyglot_classify.py +0 -0
  201. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/polyglot_imports.py +0 -0
  202. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/polyglot_surface.py +0 -0
  203. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
  204. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
  205. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
  206. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
  207. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
  208. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
  209. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
  210. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
  211. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/response_enricher.py +0 -0
  212. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
  213. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
  214. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
  215. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
  216. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/scaffold_polyglot.py +0 -0
  217. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
  218. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
  219. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
  220. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
  221. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
  222. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
  223. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
  224. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/surface_gap_check.py +0 -0
  225. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
  226. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
  227. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
  228. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
  229. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
  230. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
  231. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
  232. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
  233. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
  234. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
  235. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/welcome_narrator.py +0 -0
  236. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
  237. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/wire_stubs_gen.py +0 -0
  238. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
  239. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
  240. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
  241. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
  242. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
  243. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
  244. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
  245. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
  246. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
  247. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
  248. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
  249. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
  250. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
  251. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
  252. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
  253. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
  254. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
  255. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
  256. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/absorb_feature.py +0 -0
  257. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
  258. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/cherry_hunter.py +0 -0
  259. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
  260. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
  261. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
  262. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/create_feature.py +0 -0
  263. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
  264. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
  265. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a0_qk_constants/__init__.py +0 -0
  266. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a1_at_functions/__init__.py +0 -0
  267. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
  268. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
  269. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
  270. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
  271. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
  272. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/emergent_swarm.py +0 -0
  273. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +0 -0
  274. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
  275. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
  276. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
  277. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
  278. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
  279. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/forge_metrics_feature.py +0 -0
  280. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
  281. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
  282. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
  283. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
  284. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
  285. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
  286. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/materialize_feature.py +0 -0
  287. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/mcp_server.py +0 -0
  288. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
  289. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
  290. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
  291. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
  292. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
  293. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
  294. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
  295. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/welcome_feature.py +0 -0
  296. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
  297. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
  298. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
  299. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
  300. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
  301. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/__init__.py +0 -0
  302. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/_registry.py +0 -0
  303. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/absorb.py +0 -0
  304. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/audit.py +0 -0
  305. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/chat.py +0 -0
  306. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/commandsmith.py +0 -0
  307. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/config_cmd.py +0 -0
  308. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/create.py +0 -0
  309. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/demo.py +0 -0
  310. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/emergent.py +0 -0
  311. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
  312. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
  313. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/enhancement.py +0 -0
  314. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/evolve.py +0 -0
  315. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
  316. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
  317. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/guard_install.py +0 -0
  318. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/handoff.py +0 -0
  319. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/harvest.py +0 -0
  320. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/hive.py +0 -0
  321. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/iterate.py +0 -0
  322. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/materialize.py +0 -0
  323. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/metrics.py +0 -0
  324. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/recon_swarm.py +0 -0
  325. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/relay.py +0 -0
  326. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/surface.py +0 -0
  327. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/synergy.py +0 -0
  328. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
  329. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/welcome.py +0 -0
  330. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge/commands/wisdom.py +0 -0
  331. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge.egg-info/SOURCES.txt +0 -0
  332. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
  333. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
  334. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge.egg-info/requires.txt +0 -0
  335. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/src/atomadic_forge.egg-info/top_level.txt +0 -0
  336. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_aaaa_nexus_client.py +0 -0
  337. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_agent_hire_protocol.py +0 -0
  338. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_agent_plan.py +0 -0
  339. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_agent_plan_pkg_label.py +0 -0
  340. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_agent_summary.py +0 -0
  341. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_audit_verb.py +0 -0
  342. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_body_extractor_repairs.py +0 -0
  343. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_call_graph_summary.py +0 -0
  344. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_capability_scout.py +0 -0
  345. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_card_renderer.py +0 -0
  346. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_certify_operational_axis.py +0 -0
  347. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_chat.py +0 -0
  348. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_classify_tier.py +0 -0
  349. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_classify_tier_ast_signals.py +0 -0
  350. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_cli_smoke.py +0 -0
  351. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_cli_swarm_aliases.py +0 -0
  352. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_codex_5_complete.py +0 -0
  353. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_codex_6_enforce_polyglot.py +0 -0
  354. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_commandsmith.py +0 -0
  355. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_compiler_feedback.py +0 -0
  356. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_compliance_checker.py +0 -0
  357. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_config.py +0 -0
  358. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_copilots_copilot.py +0 -0
  359. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_cost_circuit_breaker.py +0 -0
  360. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_create_feature.py +0 -0
  361. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_cs1_renderer.py +0 -0
  362. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_custom_provider.py +0 -0
  363. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_dead_code_check.py +0 -0
  364. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_dedup_engine.py +0 -0
  365. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_demo.py +0 -0
  366. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_doc_auto_update.py +0 -0
  367. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_emergent_compose.py +0 -0
  368. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_emergent_signature_extract.py +0 -0
  369. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_emergent_synthesize_imports.py +0 -0
  370. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_enhancement_proposal.py +0 -0
  371. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_error_codes.py +0 -0
  372. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_error_hints.py +0 -0
  373. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_evolve_js.py +0 -0
  374. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_exported_api_check.py +0 -0
  375. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_forge_action.py +0 -0
  376. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_forge_auth_a1.py +0 -0
  377. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_forge_auth_a2.py +0 -0
  378. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_forge_enforce.py +0 -0
  379. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_generation_quality.py +0 -0
  380. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_git_churn.py +0 -0
  381. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_handoff.py +0 -0
  382. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_harvest_concept_bridge.py +0 -0
  383. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_hierarchical_memory.py +0 -0
  384. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_hive_sync.py +0 -0
  385. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_ignore_and_docs.py +0 -0
  386. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_import_smoke.py +0 -0
  387. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_iterate_evolve.py +0 -0
  388. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_js_certify.py +0 -0
  389. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_js_parser.py +0 -0
  390. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_js_recon.py +0 -0
  391. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_js_wire.py +0 -0
  392. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_lineage_chain.py +0 -0
  393. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_ling_provider.py +0 -0
  394. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_local_signer.py +0 -0
  395. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_lsp_protocol.py +0 -0
  396. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_maintainability_index.py +0 -0
  397. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_manifest_diff.py +0 -0
  398. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_materialize_feature.py +0 -0
  399. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_mcp_lazy_bootstrap.py +0 -0
  400. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_mcp_protocol.py +0 -0
  401. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_nexus_bridge.py +0 -0
  402. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_ollama_client.py +0 -0
  403. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_pipeline.py +0 -0
  404. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_plan_apply.py +0 -0
  405. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_polyglot_cli_mcp.py +0 -0
  406. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_polyglot_full_pipeline.py +0 -0
  407. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_polyglot_hardening.py +0 -0
  408. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_polyglot_swift_kotlin_go.py +0 -0
  409. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_polyglot_symbol_parity.py +0 -0
  410. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_pre_audit_smoke.py +0 -0
  411. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_precommit_hooks.py +0 -0
  412. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_progress_reporter.py +0 -0
  413. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_receipt_emitter.py +0 -0
  414. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_receipt_schema.py +0 -0
  415. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_receipt_signer.py +0 -0
  416. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_response_enricher.py +0 -0
  417. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_roi_calculator.py +0 -0
  418. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_sbom_cmd_text_summary.py +0 -0
  419. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_sbom_emitter.py +0 -0
  420. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_scaffold.py +0 -0
  421. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_sidecar.py +0 -0
  422. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_sidecar_validate.py +0 -0
  423. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_smell_score_formula.py +0 -0
  424. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_stagnation.py +0 -0
  425. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_stub_detector.py +0 -0
  426. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_surface_export.py +0 -0
  427. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_surface_gap_check.py +0 -0
  428. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_synergy.py +0 -0
  429. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_test_runner.py +0 -0
  430. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_tier_init_rebuild.py +0 -0
  431. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_trust_gate_response.py +0 -0
  432. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_verify_suggested_recipe.py +0 -0
  433. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_welcome.py +0 -0
  434. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_welcome_enhancements.py +0 -0
  435. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_whoami_cmd.py +0 -0
  436. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_wire_certify.py +0 -0
  437. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_wire_stubs_gen.py +0 -0
  438. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_wire_suggest_repairs.py +0 -0
  439. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_wire_type_checking.py +0 -0
  440. {atomadic_forge-0.56.0 → atomadic_forge-0.57.0}/tests/test_wisdom.py +0 -0
@@ -95,10 +95,12 @@ jobs:
95
95
  run: |
96
96
  git config user.name "atomadic-bot"
97
97
  git config user.email "bot@atomadic.tech"
98
- if git diff --quiet -- forge_metrics.json README.md CHANGELOG.md; then
98
+ if git diff --quiet -- forge_metrics.json README.md CHANGELOG.md \
99
+ WHITEPAPER.md docs/IDE_INTEGRATION.md docs/AGENTS_GUIDE.md; then
99
100
  echo "metrics and docs already current — no commit"
100
101
  exit 0
101
102
  fi
102
- git add forge_metrics.json README.md CHANGELOG.md
103
+ git add forge_metrics.json README.md CHANGELOG.md \
104
+ WHITEPAPER.md docs/IDE_INTEGRATION.md docs/AGENTS_GUIDE.md
103
105
  git commit -m "chore(metrics): auto-regenerate metrics + docs [skip ci]"
104
106
  git push origin main
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atomadic-forge
3
- Version: 0.56.0
3
+ Version: 0.57.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
@@ -341,9 +341,9 @@ agent tool-selection can route by trigger phrase. Quick reference:
341
341
 
342
342
  ---
343
343
 
344
- ## The 61 MCP tools — by phase of an agent's lifecycle
344
+ ## The 10 MCP tools — by phase of an agent's lifecycle
345
345
 
346
- > **v0.10.0 surface consolidation:** 11 tools merged into 6 umbrellas
346
+ > **v0.47.0 surface consolidation:** 66 individual tools merged into 10 umbrellas
347
347
  > with **zero capability loss**. See
348
348
  > [MIGRATION.md](MIGRATION.md#removed-in-v0100) for the full mapping.
349
349
  > The retired names are listed in `surface.json` →
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "atomadic-forge"
7
- version = "0.56.0"
7
+ version = "0.57.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"
@@ -15,6 +15,7 @@ from __future__ import annotations
15
15
 
16
16
  import json
17
17
  import re
18
+ import subprocess
18
19
  from collections import Counter
19
20
  from pathlib import Path
20
21
  from typing import TypedDict
@@ -128,6 +129,7 @@ class ContextPack(TypedDict, total=False):
128
129
  release_gate: list[str]
129
130
  risky_files: list[dict]
130
131
  recent_lineage: list[dict]
132
+ git_state: dict # branch, commits_ahead, modified/staged/untracked files
131
133
  pinned_resources: list[str]
132
134
  focus: str
133
135
  intent: str
@@ -140,6 +142,59 @@ class ContextPack(TypedDict, total=False):
140
142
  token_estimate: int # rough token count (chars // 4); repomix synthesis
141
143
 
142
144
 
145
+ def _git_state(project_root: Path) -> dict:
146
+ """Return branch, commits_ahead_of_main, and pending file lists.
147
+
148
+ Fails gracefully — returns ``{"available": False}`` when git is absent
149
+ or the directory is not a repository.
150
+ """
151
+ def _run(*args: str) -> str:
152
+ try:
153
+ r = subprocess.run(
154
+ list(args), cwd=str(project_root),
155
+ capture_output=True, text=True, timeout=5,
156
+ )
157
+ return r.stdout.strip() if r.returncode == 0 else ""
158
+ except Exception:
159
+ return ""
160
+
161
+ branch = _run("git", "rev-parse", "--abbrev-ref", "HEAD")
162
+ if not branch:
163
+ return {"available": False}
164
+
165
+ # Commits ahead of main (or master).
166
+ main_branch = "main"
167
+ ahead_raw = _run("git", "rev-list", "--count", f"{main_branch}..HEAD")
168
+ if not ahead_raw:
169
+ main_branch = "master"
170
+ ahead_raw = _run("git", "rev-list", "--count", f"{main_branch}..HEAD")
171
+ commits_ahead = int(ahead_raw) if ahead_raw.isdigit() else 0
172
+
173
+ # Pending file state.
174
+ status_raw = _run("git", "status", "--porcelain")
175
+ modified, staged, untracked = [], [], []
176
+ for line in status_raw.splitlines():
177
+ if len(line) < 4:
178
+ continue
179
+ index_s, work_s, path = line[0], line[1], line[3:]
180
+ if index_s not in (" ", "?") and index_s != "?":
181
+ staged.append(path)
182
+ if work_s == "M":
183
+ modified.append(path)
184
+ if index_s == "?" and work_s == "?":
185
+ untracked.append(path)
186
+
187
+ return {
188
+ "available": True,
189
+ "branch": branch,
190
+ "commits_ahead_of_main": commits_ahead,
191
+ "staged": staged,
192
+ "modified_unstaged": modified,
193
+ "untracked": untracked,
194
+ "clean": not (staged or modified or untracked),
195
+ }
196
+
197
+
143
198
  def _read_repo_purpose(project_root: Path) -> str:
144
199
  """Best-effort: pull the first paragraph from the README, or the
145
200
  pyproject description. Falls back to the directory name."""
@@ -427,6 +482,7 @@ def emit_context_pack(
427
482
  "why": _why, "next_command": _cmd, "kind": "suggestion"}
428
483
 
429
484
  lineage = read_lineage(project_root, last=20)
485
+ git_st = _git_state(project_root)
430
486
  release_gate = _release_gate(project_root)
431
487
  policy = _build_policy(project_root)
432
488
  workflow_recipe = _build_workflow_recipe(intent)
@@ -458,6 +514,7 @@ def emit_context_pack(
458
514
  release_gate=release_gate,
459
515
  risky_files=_risky_files(lineage),
460
516
  recent_lineage=lineage[-10:] if lineage else [],
517
+ git_state=git_st,
461
518
  pinned_resources=[
462
519
  "forge://docs/receipt",
463
520
  "forge://docs/formalization",
@@ -60,19 +60,21 @@ _CHANGELOG_VER_RE = re.compile(r"^## v(\d+\.\d+\.\d+)", re.MULTILINE)
60
60
  # IDE_INTEGRATION.md: matches "**NN tools**" or "**NN tools dispatching NN actions**"
61
61
  _IDE_TOOLS_RE = re.compile(r'\*\*\d+ tools(?:\s+dispatching\s+\d+\s+actions)?\*\*')
62
62
 
63
- # WHITEPAPER.md: matches "NN MCP tools dispatching NN actions" (whole phrase)
64
- _WP_TOOLS_PHRASE_RE = re.compile(r'\d+ MCP tools dispatching \d+ actions')
65
- # WHITEPAPER.md: matches "NN passing tests"
66
- _WP_TESTS_RE = re.compile(r'(\d+) passing tests')
63
+ # WHITEPAPER.md: matches "NN MCP tools [word] dispatching NN actions" (optional mid-word)
64
+ _WP_TOOLS_PHRASE_RE = re.compile(r'(\d+) MCP tools(?:\s+\w+)? dispatching (\d+) actions')
65
+ # WHITEPAPER.md: matches "NN,NNN passing tests" or "NN passing tests"
66
+ _WP_TESTS_RE = re.compile(r'([\d,]+) passing tests')
67
67
 
68
68
  # AGENTS_GUIDE.md: matches "| explore | NN actions |" style rows
69
69
  _AG_EXPLORE_RE = re.compile(r'(\|\s*`?explore`?\s*\|\s*)(\d+)(\s*actions?\s*\|)',
70
70
  re.IGNORECASE)
71
+ # AGENTS_GUIDE.md: matches "## The NN MCP tools" headings
72
+ _AG_HEADING_TOOLS_RE = re.compile(r'(## The )\d+( MCP tools)')
71
73
 
72
74
  # Drift detection: broad number-before-keyword patterns
73
75
  _DRIFT_TOOLS_RE = re.compile(r'(\d+)\s+MCP\s+tools')
74
76
  _DRIFT_ACTIONS_RE = re.compile(r'dispatching\s+(\d+)\s+actions')
75
- _DRIFT_TESTS_RE = re.compile(r'(\d+)\s+passing\s+tests')
77
+ _DRIFT_TESTS_RE = re.compile(r'([\d,]+)\s+passing\s+tests')
76
78
 
77
79
 
78
80
  # ── helpers ───────────────────────────────────────────────────────────────────
@@ -350,6 +352,7 @@ def update_extended_docs(
350
352
  mcp_actions = metrics.get("mcp_actions", "?")
351
353
  test_functions = metrics.get("test_functions", "?")
352
354
  changes: list[str] = []
355
+ warnings: list[str] = []
353
356
 
354
357
  # ── 1. IDE_INTEGRATION.md ─────────────────────────────────────────────────
355
358
  ide_path = project_root / "docs" / "IDE_INTEGRATION.md"
@@ -364,6 +367,8 @@ def update_extended_docs(
364
367
  f"IDE_INTEGRATION.md: tools/actions → {mcp_tools} tools dispatching "
365
368
  f"{mcp_actions} actions ({n} occurrence(s))"
366
369
  )
370
+ elif n == 0:
371
+ warnings.append("IDE_INTEGRATION.md: tools pattern matched 0 — format may have changed")
367
372
 
368
373
  # ── 2. WHITEPAPER.md ──────────────────────────────────────────────────────
369
374
  wp_path = project_root / "WHITEPAPER.md"
@@ -376,6 +381,8 @@ def update_extended_docs(
376
381
  changes.append(
377
382
  f"WHITEPAPER.md: MCP tools phrase → {new_phrase} ({n_tools} occurrence(s))"
378
383
  )
384
+ elif n_tools == 0:
385
+ warnings.append("WHITEPAPER.md: MCP-tools-phrase pattern matched 0 — format may have changed")
379
386
  new_wp2, n_tests = _WP_TESTS_RE.subn(
380
387
  lambda m: f"{test_functions} passing tests", wp_text
381
388
  )
@@ -384,6 +391,8 @@ def update_extended_docs(
384
391
  changes.append(
385
392
  f"WHITEPAPER.md: passing tests → {test_functions} ({n_tests} occurrence(s))"
386
393
  )
394
+ elif n_tests == 0:
395
+ warnings.append("WHITEPAPER.md: passing-tests pattern matched 0 — format may have changed")
387
396
  if any("WHITEPAPER" in c for c in changes) and not dry_run:
388
397
  wp_path.write_text(wp_text, encoding="utf-8")
389
398
 
@@ -395,16 +404,26 @@ def update_extended_docs(
395
404
  lambda m: m.group(1) + str(mcp_actions) + m.group(3), ag_text
396
405
  )
397
406
  if n_ag and new_ag != ag_text:
398
- if not dry_run:
399
- ag_path.write_text(new_ag, encoding="utf-8")
400
407
  changes.append(
401
408
  f"AGENTS_GUIDE.md: explore actions → {mcp_actions} ({n_ag} occurrence(s))"
402
409
  )
410
+ ag_text = new_ag
411
+ new_ag2, n_heading = _AG_HEADING_TOOLS_RE.subn(
412
+ lambda m: m.group(1) + str(mcp_tools) + m.group(2), ag_text
413
+ )
414
+ if n_heading and new_ag2 != ag_text:
415
+ changes.append(
416
+ f"AGENTS_GUIDE.md: heading tool count → {mcp_tools} ({n_heading} occurrence(s))"
417
+ )
418
+ ag_text = new_ag2
419
+ if any("AGENTS_GUIDE" in c for c in changes) and not dry_run:
420
+ ag_path.write_text(ag_text, encoding="utf-8")
403
421
 
404
422
  return {
405
423
  "schema_version": SCHEMA_VERSION_DOC_AUTO_UPDATE_V1,
406
424
  "available": True,
407
425
  "changes": changes,
426
+ "warnings": warnings,
408
427
  "dry_run": dry_run,
409
428
  }
410
429
 
@@ -476,7 +495,7 @@ def detect_doc_drift(project_root: Path) -> dict[str, Any]:
476
495
  "found_value": found, "expected_value": mcp_actions,
477
496
  })
478
497
  for m in _DRIFT_TESTS_RE.finditer(line):
479
- found = int(m.group(1))
498
+ found = int(m.group(1).replace(",", ""))
480
499
  if found != test_functions:
481
500
  drift_items.append({
482
501
  "file": rel, "line": lineno, "pattern": "passing tests",
@@ -499,7 +518,7 @@ def detect_doc_drift(project_root: Path) -> dict[str, Any]:
499
518
  def run_doc_auto_update(
500
519
  project_root: Path,
501
520
  *,
502
- sections: tuple[str, ...] = ("readme", "changelog"),
521
+ sections: tuple[str, ...] = ("readme", "changelog", "extended_docs"),
503
522
  dry_run: bool = False,
504
523
  ) -> dict[str, Any]:
505
524
  """Run all doc auto-update passes.
@@ -508,12 +527,12 @@ def run_doc_auto_update(
508
527
  project_root: Repository root.
509
528
  sections: Which sections to update — any combination of
510
529
  ``"readme"``, ``"changelog"``, and ``"extended_docs"``.
511
- ``"extended_docs"`` updates IDE_INTEGRATION.md,
512
- WHITEPAPER.md, and docs/AGENTS_GUIDE.md.
530
+ Defaults to all three. ``"extended_docs"`` patches
531
+ IDE_INTEGRATION.md, WHITEPAPER.md, and AGENTS_GUIDE.md.
513
532
  dry_run: If True, return what would change without writing.
514
533
 
515
- Returns dict with ``schema_version``, ``results`` per section, and
516
- aggregate ``total_changes`` count.
534
+ Returns dict with ``schema_version``, ``results`` per section,
535
+ aggregate ``total_changes`` count, and ``post_drift`` residual check.
517
536
  """
518
537
  root = Path(project_root).resolve()
519
538
  results: dict[str, Any] = {}
@@ -534,10 +553,14 @@ def run_doc_auto_update(
534
553
  results["extended_docs"] = r
535
554
  total += len(r.get("changes", []))
536
555
 
556
+ # Self-verify: residual drift after all writes confirms every pattern fired.
557
+ post_drift = detect_doc_drift(root) if not dry_run else {"drift_count": 0}
558
+
537
559
  return {
538
560
  "schema_version": SCHEMA_VERSION_DOC_AUTO_UPDATE_V1,
539
561
  "available": True,
540
562
  "dry_run": dry_run,
541
563
  "total_changes": total,
542
564
  "results": results,
565
+ "post_drift": post_drift,
543
566
  }
@@ -1472,6 +1472,25 @@ def auto_wire_cmd(
1472
1472
  "results": results,
1473
1473
  }
1474
1474
 
1475
+ # Self-verify: run ruff --fix on every file modified during a real apply.
1476
+ ruff_results: list[str] = []
1477
+ if not dry_run and wired:
1478
+ import subprocess as _sp
1479
+ patched: set[str] = set()
1480
+ for r in results:
1481
+ patched.update(r.get("files_modified", []))
1482
+ for rel in sorted(patched):
1483
+ abs_path = str(project_root / rel)
1484
+ rv = _sp.run(
1485
+ ["python", "-m", "ruff", "check", "--fix", abs_path],
1486
+ cwd=str(project_root), capture_output=True, text=True,
1487
+ )
1488
+ if rv.returncode != 0:
1489
+ ruff_results.append(f"ruff WARN {rel}: {rv.stdout.strip()[:120]}")
1490
+ else:
1491
+ ruff_results.append(f"ruff OK {rel}")
1492
+ summary["ruff_self_verify"] = ruff_results
1493
+
1475
1494
  if json_out:
1476
1495
  typer.echo(json.dumps(summary, indent=2, default=str))
1477
1496
  return
@@ -1487,6 +1506,8 @@ def auto_wire_cmd(
1487
1506
  typer.echo(f" [{status}] {r.get('module', '?')}.{r.get('function', '?')}")
1488
1507
  for e in r.get("errors", []):
1489
1508
  typer.echo(f" ! {e}", err=True)
1509
+ for line in ruff_results:
1510
+ typer.echo(f" {line}")
1490
1511
  if not dry_run and wired:
1491
1512
  typer.echo("\n Run: forge certify --project . to verify the wiring")
1492
1513
 
@@ -1625,7 +1646,7 @@ def doc_update_cmd(
1625
1646
  "extended_docs patches IDE_INTEGRATION.md, WHITEPAPER.md, "
1626
1647
  "and docs/AGENTS_GUIDE.md."
1627
1648
  ),
1628
- )] = "readme,changelog",
1649
+ )] = "readme,changelog,extended_docs",
1629
1650
  dry_run: Annotated[bool, typer.Option(
1630
1651
  "--dry-run",
1631
1652
  help="Show what would change without writing.")] = False,
@@ -2318,6 +2339,129 @@ def _register_specialty_apps() -> None:
2318
2339
  fg="yellow", err=True)
2319
2340
 
2320
2341
 
2342
+ @app.command("bump")
2343
+ def bump_cmd(
2344
+ part: Annotated[str, typer.Argument(
2345
+ help="Version part to increment: patch, minor, or major.")] = "patch",
2346
+ project_root: Annotated[Path, typer.Option(
2347
+ "--project",
2348
+ exists=True, file_okay=False, dir_okay=True, resolve_path=True,
2349
+ help="Project root.")] = Path("."),
2350
+ push: Annotated[bool, typer.Option(
2351
+ "--push/--no-push",
2352
+ help="Push commit + tag to origin after bumping.")] = True,
2353
+ tag: Annotated[bool, typer.Option(
2354
+ "--tag/--no-tag",
2355
+ help="Create an annotated git tag.")] = True,
2356
+ dry_run: Annotated[bool, typer.Option(
2357
+ "--dry-run", help="Show what would change without writing.")] = False,
2358
+ ) -> None:
2359
+ """Bump version, regenerate all docs, commit, tag, and push in one command.
2360
+
2361
+ Reads the current version from pyproject.toml, increments the requested
2362
+ part (default: patch), writes the new version, runs ``forge doc-update``
2363
+ (all sections), stages all touched files, commits, optionally tags, and
2364
+ pushes — with no manual steps required.
2365
+
2366
+ Examples::
2367
+
2368
+ forge bump # patch: 0.56.0 → 0.56.1
2369
+ forge bump minor # minor: 0.56.0 → 0.57.0
2370
+ forge bump major # major: 0.56.0 → 1.0.0
2371
+ forge bump --no-push # commit + tag locally only
2372
+ forge bump --dry-run # preview without writing
2373
+ """
2374
+ import re as _re
2375
+ import subprocess as _sp
2376
+
2377
+ root = Path(project_root).resolve()
2378
+ pyproject = root / "pyproject.toml"
2379
+
2380
+ if not pyproject.exists():
2381
+ typer.echo("bump: pyproject.toml not found", err=True)
2382
+ raise typer.Exit(1)
2383
+
2384
+ text = pyproject.read_text(encoding="utf-8")
2385
+ m = _re.search(r'^(version\s*=\s*")(\d+)\.(\d+)\.(\d+)(")', text, _re.MULTILINE)
2386
+ if not m:
2387
+ typer.echo("bump: could not parse version from pyproject.toml", err=True)
2388
+ raise typer.Exit(1)
2389
+
2390
+ major, minor, patch_n = int(m.group(2)), int(m.group(3)), int(m.group(4))
2391
+ old_version = f"{major}.{minor}.{patch_n}"
2392
+
2393
+ if part == "major":
2394
+ major += 1
2395
+ minor = 0
2396
+ patch_n = 0
2397
+ elif part == "minor":
2398
+ minor += 1
2399
+ patch_n = 0
2400
+ elif part == "patch":
2401
+ patch_n += 1
2402
+ else:
2403
+ typer.echo(f"bump: unknown part '{part}' — use patch, minor, or major", err=True)
2404
+ raise typer.Exit(1)
2405
+
2406
+ new_version = f"{major}.{minor}.{patch_n}"
2407
+ typer.echo(f"bump: {old_version} → {new_version}")
2408
+
2409
+ if dry_run:
2410
+ typer.echo(f"[DRY RUN] would write pyproject.toml v{new_version}, "
2411
+ "run doc-update --sections readme changelog extended_docs, "
2412
+ f"commit, {'tag v' + new_version + ', ' if tag else ''}{'push' if push else 'no push'}")
2413
+ return
2414
+
2415
+ # 1. Write new version into pyproject.toml.
2416
+ new_text = text[: m.start(2)] + new_version + text[m.end(4):]
2417
+ pyproject.write_text(new_text, encoding="utf-8")
2418
+
2419
+ # 2. Regenerate all doc sections (changelog will prepend the new version entry).
2420
+ from ..a1_at_functions.doc_auto_update import run_doc_auto_update
2421
+ doc_result = run_doc_auto_update(
2422
+ root, sections=("readme", "changelog", "extended_docs"),
2423
+ )
2424
+ doc_total = doc_result.get("total_changes", 0)
2425
+ typer.echo(f"bump: docs updated ({doc_total} change(s))")
2426
+
2427
+ # Report any residual drift so the user knows if a regex didn't fire.
2428
+ post_drift = doc_result.get("post_drift", {})
2429
+ if post_drift.get("drift_count", 0):
2430
+ typer.echo(f" ⚠ post-update drift: {post_drift['drift_count']} item(s) still stale "
2431
+ "— check doc_auto_update regexes", err=True)
2432
+
2433
+ # 3. Stage all potentially-modified files.
2434
+ candidates = [
2435
+ "pyproject.toml", "README.md", "CHANGELOG.md",
2436
+ "WHITEPAPER.md", "docs/IDE_INTEGRATION.md", "docs/AGENTS_GUIDE.md",
2437
+ ]
2438
+ to_add = [c for c in candidates if (root / c).exists()]
2439
+ _sp.run(["git", "add"] + to_add, cwd=str(root), check=True)
2440
+
2441
+ # 4. Commit.
2442
+ commit_msg = f"release: v{new_version}"
2443
+ _sp.run(["git", "commit", "-m", commit_msg], cwd=str(root), check=True)
2444
+ typer.echo(f"bump: committed '{commit_msg}'")
2445
+
2446
+ # 5. Tag.
2447
+ tag_name = f"v{new_version}"
2448
+ if tag:
2449
+ _sp.run(
2450
+ ["git", "tag", "-a", tag_name, "-m", f"Release {tag_name}"],
2451
+ cwd=str(root), check=True,
2452
+ )
2453
+ typer.echo(f"bump: tagged {tag_name}")
2454
+
2455
+ # 6. Push.
2456
+ if push:
2457
+ _sp.run(["git", "push", "origin", "main"], cwd=str(root), check=True)
2458
+ if tag:
2459
+ _sp.run(["git", "push", "origin", tag_name], cwd=str(root), check=True)
2460
+ typer.echo(f"bump: pushed to origin (tag: {tag_name if tag else 'none'})")
2461
+
2462
+ typer.echo(f"bump: v{new_version} live ✓")
2463
+
2464
+
2321
2465
  _register_specialty_apps()
2322
2466
 
2323
2467
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atomadic-forge
3
- Version: 0.56.0
3
+ Version: 0.57.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
File without changes