atomadic-forge 0.14.0__tar.gz → 0.14.1__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 (366) hide show
  1. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/workflows/customer-refactor.yml +1 -1
  2. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/CHANGELOG.md +87 -0
  3. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/PKG-INFO +6 -6
  4. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/README.md +3 -3
  5. atomadic_forge-0.14.1/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +184 -0
  6. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/pyproject.toml +3 -3
  7. atomadic_forge-0.14.1/src/atomadic_forge/__init__.py +58 -0
  8. atomadic_forge-0.14.1/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +44 -0
  9. atomadic_forge-0.14.1/src/atomadic_forge/a0_qk_constants/response_enrichment.py +38 -0
  10. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +7 -0
  11. atomadic_forge-0.14.1/src/atomadic_forge/a0_qk_constants/welcome_constants.py +38 -0
  12. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/certify_checks.py +20 -1
  13. atomadic_forge-0.14.1/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +95 -0
  14. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/forge_feedback.py +22 -0
  15. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +151 -0
  16. atomadic_forge-0.14.1/src/atomadic_forge/a1_at_functions/response_enricher.py +226 -0
  17. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/scout_walk.py +16 -1
  18. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/synergy_detect.py +29 -2
  19. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/synergy_render.py +10 -10
  20. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +32 -11
  21. atomadic_forge-0.14.1/src/atomadic_forge/a1_at_functions/welcome_narrator.py +534 -0
  22. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/wire_check.py +24 -1
  23. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/emergent_feature.py +24 -1
  24. atomadic_forge-0.14.1/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +194 -0
  25. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/mcp_server.py +58 -0
  26. atomadic_forge-0.14.1/src/atomadic_forge/a3_og_features/welcome_feature.py +197 -0
  27. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a4_sy_orchestration/cli.py +6 -0
  28. atomadic_forge-0.14.1/src/atomadic_forge/commands/enhancement.py +209 -0
  29. atomadic_forge-0.14.1/src/atomadic_forge/commands/welcome.py +75 -0
  30. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge.egg-info/PKG-INFO +6 -6
  31. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge.egg-info/SOURCES.txt +14 -0
  32. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge.egg-info/requires.txt +2 -2
  33. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_cli_smoke.py +18 -0
  34. atomadic_forge-0.14.1/tests/test_enhancement_proposal.py +306 -0
  35. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_evolve_js.py +15 -0
  36. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_mcp_protocol.py +4 -0
  37. atomadic_forge-0.14.1/tests/test_response_enricher.py +223 -0
  38. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_synergy.py +49 -0
  39. atomadic_forge-0.14.1/tests/test_welcome.py +361 -0
  40. atomadic_forge-0.14.0/src/atomadic_forge/__init__.py +0 -24
  41. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/FUNDING.yml +0 -0
  42. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  43. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  44. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  45. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/actions/forge-action/README.md +0 -0
  46. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/actions/forge-action/action.yml +0 -0
  47. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/dependabot.yml +0 -0
  48. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/pull_request_template.md +0 -0
  49. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/workflows/ci.yml +0 -0
  50. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/workflows/forge-self-certify.yml +0 -0
  51. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/workflows/release.yml +0 -0
  52. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/workflows/surface-drift.yml +0 -0
  53. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/ARCHITECTURE.md +0 -0
  54. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/CONTRIBUTING.md +0 -0
  55. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/LICENSE +0 -0
  56. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/MANIFEST.in +0 -0
  57. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/SECURITY.md +0 -0
  58. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/assets/Atomadic-Forge-01.png +0 -0
  59. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/01-getting-started.md +0 -0
  60. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/02-commands.md +0 -0
  61. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/03-tutorial.md +0 -0
  62. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/04-llm-loops.md +0 -0
  63. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/05-faq.md +0 -0
  64. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/AGENTS_GUIDE.md +0 -0
  65. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/AIR_GAPPED.md +0 -0
  66. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/CI_CD.md +0 -0
  67. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/CODEX_WALKTHROUGH.md +0 -0
  68. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/COMMANDS.md +0 -0
  69. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/FIRST_10_MINUTES.md +0 -0
  70. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/FORMALIZATION.md +0 -0
  71. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/HIVE_PRIMITIVES.md +0 -0
  72. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/HIVE_STATUS.md +0 -0
  73. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/LANDSCAPE.md +0 -0
  74. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/MARKET_POSITIONING.md +0 -0
  75. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/MIGRATION.md +0 -0
  76. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/MULTI_REPO.md +0 -0
  77. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/README.md +0 -0
  78. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/RECEIPT.md +0 -0
  79. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/RELAY_PROTOCOL.md +0 -0
  80. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/RELEASE_CHECKLIST.md +0 -0
  81. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/RELEASE_MESSAGING.md +0 -0
  82. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/ROADMAP.md +0 -0
  83. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/SHOWCASE.md +0 -0
  84. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/SIDECAR.md +0 -0
  85. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/STUDIO.md +0 -0
  86. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
  87. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/WHY_NOW.md +0 -0
  88. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
  89. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/WORLD_COLLISION.md +0 -0
  90. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/INDEX.md +0 -0
  91. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/chat.md +0 -0
  92. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/commandsmith.md +0 -0
  93. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/config.md +0 -0
  94. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/demo.md +0 -0
  95. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/emergent-then-synergy.md +0 -0
  96. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/emergent.md +0 -0
  97. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/evolve-then-iterate.md +0 -0
  98. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/evolve.md +0 -0
  99. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/feature-then-emergent.md +0 -0
  100. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/iterate.md +0 -0
  101. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/synergy-then-emergent.md +0 -0
  102. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/synergy.md +0 -0
  103. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
  104. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/compliance/CS-1.md +0 -0
  105. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
  106. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
  107. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/compliance/SR_11-7_MAPPING.md +0 -0
  108. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/tutorials/01-quickstart.md +0 -0
  109. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/tutorials/02-your-first-package.md +0 -0
  110. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/tutorials/03-the-five-tier-law.md +0 -0
  111. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/tutorials/04-plug-in-llms.md +0 -0
  112. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/tutorials/05-multi-repo-absorb.md +0 -0
  113. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/tutorials/06-javascript-quickstart.md +0 -0
  114. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/setup.cfg +0 -0
  115. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/__main__.py +0 -0
  116. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
  117. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
  118. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
  119. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
  120. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
  121. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
  122. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
  123. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
  124. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
  125. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
  126. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
  127. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
  128. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
  129. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
  130. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
  131. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
  132. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
  133. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
  134. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
  135. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
  136. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
  137. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
  138. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
  139. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
  140. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
  141. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
  142. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
  143. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
  144. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
  145. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
  146. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
  147. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
  148. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
  149. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
  150. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
  151. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
  152. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
  153. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
  154. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
  155. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
  156. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
  157. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
  158. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
  159. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
  160. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
  161. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
  162. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
  163. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
  164. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
  165. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
  166. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
  167. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
  168. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
  169. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
  170. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
  171. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
  172. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
  173. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
  174. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
  175. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
  176. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
  177. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
  178. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
  179. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
  180. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
  181. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
  182. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
  183. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
  184. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
  185. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
  186. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
  187. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
  188. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
  189. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
  190. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
  191. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
  192. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
  193. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
  194. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
  195. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
  196. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
  197. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
  198. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
  199. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
  200. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
  201. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
  202. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
  203. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
  204. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
  205. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
  206. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
  207. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
  208. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
  209. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
  210. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
  211. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
  212. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
  213. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
  214. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
  215. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
  216. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
  217. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
  218. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
  219. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
  220. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
  221. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
  222. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
  223. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
  224. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
  225. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
  226. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
  227. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
  228. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/cherry_hunter.py +0 -0
  229. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
  230. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
  231. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
  232. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
  233. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
  234. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a0_qk_constants/__init__.py +0 -0
  235. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a1_at_functions/__init__.py +0 -0
  236. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
  237. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
  238. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
  239. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
  240. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/emergent_swarm.py +0 -0
  241. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
  242. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
  243. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
  244. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
  245. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
  246. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
  247. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
  248. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
  249. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
  250. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
  251. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
  252. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
  253. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
  254. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
  255. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
  256. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
  257. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
  258. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
  259. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
  260. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
  261. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
  262. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
  263. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
  264. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/__init__.py +0 -0
  265. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/_registry.py +0 -0
  266. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/audit.py +0 -0
  267. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/chat.py +0 -0
  268. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/commandsmith.py +0 -0
  269. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/config_cmd.py +0 -0
  270. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/demo.py +0 -0
  271. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/emergent.py +0 -0
  272. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
  273. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
  274. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/evolve.py +0 -0
  275. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
  276. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
  277. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/guard_install.py +0 -0
  278. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/handoff.py +0 -0
  279. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/harvest.py +0 -0
  280. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/hive.py +0 -0
  281. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/iterate.py +0 -0
  282. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/recon_swarm.py +0 -0
  283. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/relay.py +0 -0
  284. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/surface.py +0 -0
  285. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/synergy.py +0 -0
  286. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
  287. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/wisdom.py +0 -0
  288. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
  289. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
  290. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge.egg-info/top_level.txt +0 -0
  291. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_aaaa_nexus_client.py +0 -0
  292. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_agent_hire_protocol.py +0 -0
  293. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_agent_plan.py +0 -0
  294. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_agent_summary.py +0 -0
  295. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_audit_verb.py +0 -0
  296. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_body_extractor_repairs.py +0 -0
  297. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_card_renderer.py +0 -0
  298. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_certify_operational_axis.py +0 -0
  299. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_chat.py +0 -0
  300. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_classify_tier.py +0 -0
  301. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_classify_tier_ast_signals.py +0 -0
  302. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_codex_5_complete.py +0 -0
  303. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_codex_6_enforce_polyglot.py +0 -0
  304. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_commandsmith.py +0 -0
  305. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_compiler_feedback.py +0 -0
  306. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_compliance_checker.py +0 -0
  307. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_config.py +0 -0
  308. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_copilots_copilot.py +0 -0
  309. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_cost_circuit_breaker.py +0 -0
  310. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_cs1_renderer.py +0 -0
  311. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_dedup_engine.py +0 -0
  312. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_demo.py +0 -0
  313. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_emergent_compose.py +0 -0
  314. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_emergent_signature_extract.py +0 -0
  315. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_error_codes.py +0 -0
  316. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_error_hints.py +0 -0
  317. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_exported_api_check.py +0 -0
  318. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_forge_action.py +0 -0
  319. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_forge_auth_a1.py +0 -0
  320. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_forge_auth_a2.py +0 -0
  321. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_forge_enforce.py +0 -0
  322. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_generation_quality.py +0 -0
  323. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_handoff.py +0 -0
  324. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_hierarchical_memory.py +0 -0
  325. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_hive_sync.py +0 -0
  326. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_ignore_and_docs.py +0 -0
  327. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_import_smoke.py +0 -0
  328. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_iterate_evolve.py +0 -0
  329. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_js_certify.py +0 -0
  330. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_js_parser.py +0 -0
  331. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_js_recon.py +0 -0
  332. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_js_wire.py +0 -0
  333. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_lineage_chain.py +0 -0
  334. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_ling_provider.py +0 -0
  335. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_local_signer.py +0 -0
  336. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_lsp_protocol.py +0 -0
  337. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_manifest_diff.py +0 -0
  338. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_nexus_bridge.py +0 -0
  339. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_ollama_client.py +0 -0
  340. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_pipeline.py +0 -0
  341. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_plan_apply.py +0 -0
  342. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_polyglot_swift_kotlin_go.py +0 -0
  343. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_pre_audit_smoke.py +0 -0
  344. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_precommit_hooks.py +0 -0
  345. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_progress_reporter.py +0 -0
  346. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_receipt_emitter.py +0 -0
  347. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_receipt_schema.py +0 -0
  348. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_receipt_signer.py +0 -0
  349. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_roi_calculator.py +0 -0
  350. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_sbom_emitter.py +0 -0
  351. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_scaffold.py +0 -0
  352. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_sidecar.py +0 -0
  353. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_sidecar_validate.py +0 -0
  354. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_smell_score_formula.py +0 -0
  355. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_stagnation.py +0 -0
  356. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_stub_detector.py +0 -0
  357. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_surface_export.py +0 -0
  358. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_test_runner.py +0 -0
  359. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_tier_init_rebuild.py +0 -0
  360. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_trust_gate_response.py +0 -0
  361. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_verify_suggested_recipe.py +0 -0
  362. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_whoami_cmd.py +0 -0
  363. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_wire_certify.py +0 -0
  364. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_wire_suggest_repairs.py +0 -0
  365. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_wire_type_checking.py +0 -0
  366. {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_wisdom.py +0 -0
@@ -92,7 +92,7 @@ jobs:
92
92
  echo "Customer: $CUSTOMER_EMAIL"
93
93
 
94
94
  - name: Set up Python 3.12
95
- uses: actions/setup-python@v5
95
+ uses: actions/setup-python@v6
96
96
  with:
97
97
  python-version: "3.12"
98
98
 
@@ -1,5 +1,92 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased — 2026-05-06 synergy signal and version repair
4
+
5
+ Forge-on-Forge evolution pass: `synergy_scan` now distinguishes
6
+ stdout-only `--json` switches from real artifact-writing path options
7
+ such as `--save`, `--out`, and `--report`. This removes false
8
+ JSON-handoff candidates like command groups that print JSON but do not
9
+ write an artifact file. The synergy adapter renderer also targets the
10
+ current `atomadic_forge.a4_sy_orchestration.cli` module instead of the
11
+ retired unified CLI path.
12
+
13
+ MCP doctor exposed a release drift in editable/worktree setups where
14
+ installed package metadata could still report `0.14.0a10` after the
15
+ checkout's `pyproject.toml` had advanced to `0.14.0`. Source checkouts
16
+ now prefer their local `pyproject.toml`; installed wheels continue to
17
+ fall back to package metadata.
18
+
19
+ Validation:
20
+
21
+ ```
22
+ forge emergent scan --src-root src --package atomadic_forge --top-n 10 --json
23
+ forge emergent_swarm -r ... --json
24
+ forge certify . --fail-under 100 --json
25
+ ```
26
+
27
+ Also pending in this slot:
28
+
29
+ - **`forge handoff create / list / show`** — structured agent-to-agent
30
+ session transfer at `.atomadic-forge/handoffs/<HOFF-id>.json`. CLI verb
31
+ + MCP tools `handoff_create` and `handoff_list` (surface 61 → 63).
32
+ Schema `atomadic-forge.handoff/v1` with `axiom_guard_status`
33
+ PASS|QUARANTINE so the next agent reads the trust verdict before it
34
+ resumes work. +18 tests.
35
+ - **AST-aware class classifier** — `body_extractor.detect_class_signals()`
36
+ returns `is_protocol`, `is_frozen_dataclass`, `all_static_methods`,
37
+ `has_cached_property` alongside the existing self-assign signals.
38
+ `classify_tier()` honors them BEFORE name heuristics: `Protocol → a0`,
39
+ `@dataclass(frozen=True) → a1`, all-`@staticmethod` → a1,
40
+ `@cached_property → a2`. New `classify_tier_with_confidence()`
41
+ returns `{tier, confidence, reasons}` for callers that want to route
42
+ low-confidence guesses to manual review. +17 tests.
43
+ - **`wire_check` edge cases** — `if TYPE_CHECKING:` guarded imports are
44
+ no longer flagged as runtime violations; surfaced under
45
+ `type_only_imports` for visibility. `importlib.import_module(...)`
46
+ calls land in `dynamic_import_warnings` (string-literal modules
47
+ resolved; non-literals marked `<dynamic>`). `from .X import *` always
48
+ surfaces in `star_import_warnings`. New `--strict-cycles` opt-in flag
49
+ detects same-tier file-pair cycles, reported in `same_tier_cycles`.
50
+ Backward compatible: existing v1 schema fields untouched. +10 tests.
51
+ - **First-pass tier discipline block** — `system_prompt()` (Python
52
+ variant) gains a section that mirrors the new AST-classifier signals
53
+ so the LLM lands tiers right on the first emission rather than paying
54
+ a feedback round-trip. Calls out: Protocol→a0, frozen dataclass→a1,
55
+ all-static→a1, self-assign→a2, cached_property→a2, TYPE_CHECKING
56
+ permitted, dynamic/star warnings explained. +1 test.
57
+
58
+ Cumulative: 1133 → 1177 tests, 61 → 63 MCP tools.
59
+
60
+ ## v0.14.0 — 2026-05-05 alpha-series finalization (PyPI release)
61
+
62
+ **release_commit_ts:** 2026-05-06T04:02:23Z (ef37eca)
63
+
64
+ The first non-prerelease in the v0.14.0 line. Drops the `aN` suffix
65
+ after ten alpha iterations (`a1` through `a10`) and ships the
66
+ cumulative surface to PyPI. `pip install atomadic-forge` now returns
67
+ `0.14.0` (was `0.10.0` since 2025).
68
+
69
+ Highlights (all already documented in their own alpha entries below):
70
+
71
+ - Full hive sync pipeline (`hive_register / observe / propose / vote /
72
+ result / list / deactivate / watch / needs-vote / recap`) for
73
+ multi-agent consensus over append-only public artifacts.
74
+ - AAAA-Nexus bridge: 7 LIVE primitives wired as MCP tools
75
+ (`nexus_identity_verify`, `nexus_federation_mint`,
76
+ `nexus_authorize_action`, `nexus_sys_trust_gate`,
77
+ `nexus_contract_verify`, `nexus_lineage_record`,
78
+ `nexus_ratchet_register`). Wisdom + consensus auto-mirror at
79
+ confidence ≥ 0.85.
80
+ - Local relay daemon (`forge relay serve`) — Worker → local job
81
+ dispatch over signed JSON-RPC envelopes.
82
+ - Surface artifact + drift CI gate (`surface.json` + `forge surface
83
+ emit/check/diff`).
84
+ - Wisdom DB on the MCP surface + wisdom → recipe promotion.
85
+
86
+ Surface at release: 61 MCP tools. Tests: 1131 passed, 2 skipped.
87
+ README, contact email (`thomas@atomadic.tech`), and version display
88
+ all reconciled with the live repo.
89
+
3
90
  ## v0.14.0a10 — 2026-05-06 forge hive recap (full lifecycle visualization)
4
91
 
5
92
  **release_commit_ts:** 2026-05-06T01:50:00Z
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: atomadic-forge
3
- Version: 0.14.0
3
+ Version: 0.14.1
4
4
  Summary: Atomadic Forge — absorb, enforce, emerge. Polyglot (Python · JavaScript/TypeScript · Swift · Kotlin · Go) architecture guardian for AI-generated code.
5
5
  Author: Atomadic
6
6
  License-Expression: BUSL-1.1
@@ -25,9 +25,9 @@ Requires-Dist: ruff>=0.4; extra == "dev"
25
25
  Requires-Dist: build<2,>=1; extra == "dev"
26
26
  Requires-Dist: twine<7,>=5; extra == "dev"
27
27
  Requires-Dist: tomli>=2; python_version < "3.11" and extra == "dev"
28
- Requires-Dist: cryptography<46,>=42; extra == "dev"
28
+ Requires-Dist: cryptography<48,>=42; extra == "dev"
29
29
  Provides-Extra: signing
30
- Requires-Dist: cryptography<46,>=42; extra == "signing"
30
+ Requires-Dist: cryptography<48,>=42; extra == "signing"
31
31
  Dynamic: license-file
32
32
 
33
33
  <p align="center">
@@ -283,7 +283,7 @@ generate).
283
283
  ```bash
284
284
  git clone https://github.com/atomadictech/atomadic-forge && cd atomadic-forge
285
285
  pip install -e ".[dev]"
286
- python -m pytest # 1178 collected (1176 passed, 2 skipped)
286
+ python -m pytest # 1179 collected (1177 passed, 2 skipped)
287
287
  ```
288
288
 
289
289
  ## AI Agent integration (MCP)
@@ -594,7 +594,7 @@ Forge ships with named limits. No overpromise.
594
594
  | Product | What it is | Status |
595
595
  |---------|------------|--------|
596
596
  | **AAAA-Nexus** | Trust/safety/payments substrate for autonomous agents | Live at [atomadic.tech](https://atomadic.tech) |
597
- | **Atomadic Forge** | Absorb-and-emerge engine for developers (this repo) | **v0.14.0** — on PyPI, 1176 tests, 100/100, MCP server (63 tools local · 40 on Worker), four-agent hive primitives, AAAA-Nexus bridge |
597
+ | **Atomadic Forge** | Absorb-and-emerge engine for developers (this repo) | **v0.14.0** — on PyPI, 1177 tests, 100/100, MCP server (63 tools local · 40 on Worker), four-agent hive primitives, AAAA-Nexus bridge, agent-to-agent handoffs |
598
598
  | **Atomadic Assistant** | Sovereign AI assistant with cognitive loop on Cloudflare | In development |
599
599
 
600
600
  ## Pricing
@@ -643,7 +643,7 @@ Apache 2.0.
643
643
  **Forge itself is monadic.** Every source file belongs to one tier. The repo is a worked example:
644
644
 
645
645
  ```bash
646
- python -m pytest # 1176 passed, 2 skipped
646
+ python -m pytest # 1177 passed, 2 skipped
647
647
  forge doctor # Environment check
648
648
  forge wire src/atomadic_forge # Scan for violations (PASS)
649
649
  forge certify . --fail-under 100 # Score and gate the repo (100/100)
@@ -251,7 +251,7 @@ generate).
251
251
  ```bash
252
252
  git clone https://github.com/atomadictech/atomadic-forge && cd atomadic-forge
253
253
  pip install -e ".[dev]"
254
- python -m pytest # 1178 collected (1176 passed, 2 skipped)
254
+ python -m pytest # 1179 collected (1177 passed, 2 skipped)
255
255
  ```
256
256
 
257
257
  ## AI Agent integration (MCP)
@@ -562,7 +562,7 @@ Forge ships with named limits. No overpromise.
562
562
  | Product | What it is | Status |
563
563
  |---------|------------|--------|
564
564
  | **AAAA-Nexus** | Trust/safety/payments substrate for autonomous agents | Live at [atomadic.tech](https://atomadic.tech) |
565
- | **Atomadic Forge** | Absorb-and-emerge engine for developers (this repo) | **v0.14.0** — on PyPI, 1176 tests, 100/100, MCP server (63 tools local · 40 on Worker), four-agent hive primitives, AAAA-Nexus bridge |
565
+ | **Atomadic Forge** | Absorb-and-emerge engine for developers (this repo) | **v0.14.0** — on PyPI, 1177 tests, 100/100, MCP server (63 tools local · 40 on Worker), four-agent hive primitives, AAAA-Nexus bridge, agent-to-agent handoffs |
566
566
  | **Atomadic Assistant** | Sovereign AI assistant with cognitive loop on Cloudflare | In development |
567
567
 
568
568
  ## Pricing
@@ -611,7 +611,7 @@ Apache 2.0.
611
611
  **Forge itself is monadic.** Every source file belongs to one tier. The repo is a worked example:
612
612
 
613
613
  ```bash
614
- python -m pytest # 1176 passed, 2 skipped
614
+ python -m pytest # 1177 passed, 2 skipped
615
615
  forge doctor # Environment check
616
616
  forge wire src/atomadic_forge # Scan for violations (PASS)
617
617
  forge certify . --fail-under 100 # Score and gate the repo (100/100)
@@ -0,0 +1,184 @@
1
+ # Forge Worker auto-deploy handoff
2
+
3
+ > Doc/Orchestrator — 2026-05-06T05:22Z (T-9h to Boris demo)
4
+ >
5
+ > **Owner directive**: "Make sure the forge worker has the latest
6
+ > version and we need to somehow automate the worker update whenever
7
+ > we push a new version to github with the version tag. So all users
8
+ > who connect will always use the latest mcp and forge version."
9
+
10
+ ## Current state — and why "latest" never propagates
11
+
12
+ | Surface | Version | Source |
13
+ |---------|---------|--------|
14
+ | `pip install atomadic-forge` | **`0.14.0`** | PyPI (auto-published from `atomadictech/atomadic-forge` on tag) |
15
+ | `forge` CLI / local pip MCP | **`0.14.0`** | same |
16
+ | `forge.atomadic.tech/mcp` Worker | **`0.10.0`** ← four minor versions behind | manual `wrangler deploy` |
17
+ | Worker source | local files only at `C:\!!AtomadicStandard\atomadic-forge-cloudflare-workers\mcp\` | **NO git remote, NO CI** |
18
+
19
+ Live evidence (2026-05-06T05:18Z):
20
+
21
+ ```bash
22
+ $ curl -X POST https://forge.atomadic.tech/mcp \
23
+ -H "Content-Type: application/json" \
24
+ -H "X-API-Key: $FORGE_MASTER_API_KEY" \
25
+ --data '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"doctor","arguments":{}}}'
26
+
27
+ # {"runtime": "cloudflare-worker", "worker_version": "0.10.0", ...}
28
+ ```
29
+
30
+ ## Why this is a Boris-demo P0
31
+
32
+ Research agent caught it (`WIS-research-worker-version-drift`,
33
+ `WIS-research-worker-cli-score-divergence` on `atomadic-forge`):
34
+
35
+ - Worker v0.10.0 has the **Python-only tier classifier**.
36
+ - Local CLI v0.14.0 has the **polyglot TS/JS/Python classifier**.
37
+ - Same repo certified through Worker vs local CLI returns **different scores** (hono: Worker=30, CLI=55; atomadic-forge: Worker=80, CLI=100).
38
+ - Atomadic's chat-led `FORGE_DEMO` action calls the **Worker** via `callForgeService`, so an autonomous chat-led demo will **not reproduce captured terminal numbers**.
39
+
40
+ ## Why the Worker can't auto-update today
41
+
42
+ The Python repo `atomadictech/atomadic-forge` has the full release pipeline
43
+ (GitHub Actions on tag → PyPI publish + GitHub Release). But the **Worker
44
+ source isn't there**. It's in a sibling local directory that:
45
+
46
+ 1. has no `.git` folder
47
+ 2. is not in any GitHub repo
48
+ 3. has no `wrangler.toml [build]` triggered from CI
49
+ 4. was never linked to the Python release tag
50
+
51
+ So pushing a new tag to `atomadic-forge` does nothing for the Worker. No
52
+ matter how many `v0.14.x` releases ship, `forge.atomadic.tech/mcp` keeps
53
+ serving `0.10.0` until someone runs `wrangler deploy` manually.
54
+
55
+ ## The fix path (4 steps, all out of orchestrator scope)
56
+
57
+ ### Step 1 — get the Worker source onto GitHub
58
+
59
+ Two options. Both are dev/ops decisions for Thomas + Forge agent.
60
+
61
+ **Option A: dedicated repo** (clean separation)
62
+
63
+ ```bash
64
+ cd C:\!!AtomadicStandard\atomadic-forge-cloudflare-workers
65
+ git init
66
+ git add .
67
+ git commit -m "initial: forge MCP Worker (was local-only)"
68
+ gh repo create atomadictech/atomadic-forge-cloudflare-workers --public \
69
+ --description "Cloudflare Worker hosting forge.atomadic.tech/mcp"
70
+ git push -u origin main
71
+ ```
72
+
73
+ **Option B: subfolder of atomadic-forge** (shares CI + version)
74
+
75
+ ```bash
76
+ cd C:\!!AtomadicStandard\atomadic-forge
77
+ mkdir -p cloudflare-workers
78
+ cp -r ../atomadic-forge-cloudflare-workers/mcp cloudflare-workers/mcp
79
+ git add cloudflare-workers/
80
+ git commit -m "feat(worker): import MCP Worker source for CI auto-deploy"
81
+ git push origin main
82
+ ```
83
+
84
+ **Doc/Orchestrator's recommendation: Option B.** Reasons:
85
+
86
+ - Worker version SHOULD track Python release version — they're tied conceptually.
87
+ - The same release tag (`v0.14.0`) can fan out to PyPI AND wrangler deploy in one workflow.
88
+ - Less repo-management overhead.
89
+ - Forge agent already maintains the Python CI; adding wrangler is incremental.
90
+
91
+ ### Step 2 — add the auto-deploy workflow
92
+
93
+ Create `.github/workflows/deploy-worker.yml`:
94
+
95
+ ```yaml
96
+ name: Deploy Forge MCP Worker
97
+
98
+ on:
99
+ push:
100
+ tags:
101
+ - 'v*'
102
+ workflow_dispatch:
103
+
104
+ jobs:
105
+ deploy:
106
+ runs-on: ubuntu-latest
107
+ steps:
108
+ - uses: actions/checkout@v4
109
+
110
+ - uses: actions/setup-node@v6
111
+ with:
112
+ node-version: 20
113
+
114
+ - name: Sync Worker version with release tag
115
+ working-directory: cloudflare-workers/mcp
116
+ run: |
117
+ v="${GITHUB_REF_NAME#v}"
118
+ npm pkg set version="$v"
119
+ # Inline the version into the doctor response so the runtime
120
+ # reports it without a separate import.
121
+ sed -i "s/\"worker_version\": \"[^\"]*\"/\"worker_version\": \"$v\"/" src/a4_sy_orchestration/index.ts
122
+
123
+ - name: Install
124
+ working-directory: cloudflare-workers/mcp
125
+ run: npm ci
126
+
127
+ - name: Typecheck
128
+ working-directory: cloudflare-workers/mcp
129
+ run: npm run typecheck
130
+
131
+ - name: Deploy
132
+ working-directory: cloudflare-workers/mcp
133
+ env:
134
+ CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
135
+ CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
136
+ run: npx wrangler deploy --var WORKER_VERSION:"${GITHUB_REF_NAME#v}"
137
+ ```
138
+
139
+ ### Step 3 — add Cloudflare secrets to the repo
140
+
141
+ ```bash
142
+ gh secret set CLOUDFLARE_API_TOKEN --repo atomadictech/atomadic-forge
143
+ gh secret set CLOUDFLARE_ACCOUNT_ID --repo atomadictech/atomadic-forge
144
+ ```
145
+
146
+ (Token needs `Workers Scripts: Edit` + `Account: Read`. Operator already
147
+ has these in `.env`.)
148
+
149
+ ### Step 4 — port the v0.10.0 → v0.14.x deltas into the TS Worker
150
+
151
+ This is the part that's **NOT free**. The Worker is a TS port of the
152
+ Python tier classifier; it lags the Python source. v0.14.0's polyglot
153
+ classifier (TS/JS/Python tier detection, score 55/100 on hono / atproto /
154
+ fastapi / express) needs to be ported into `cloudflare-workers/mcp/src/`.
155
+
156
+ Proposed scope split:
157
+
158
+ - **Forge agent** writes the TS port of the polyglot classifier.
159
+ - **Cognition agent** updates `callForgeService` to read the Worker's
160
+ reported `worker_version` and degrade gracefully if the Worker is older
161
+ than the local CLI.
162
+ - **Doc agent** (this file) tracks the bump in the README + status report.
163
+
164
+ ## Interim mitigation for Boris demo (T-9h)
165
+
166
+ Per `WIS-research-worker-explain-rescue` (committed 2026-05-06T04:46Z):
167
+
168
+ - The Worker's `explain_repo` tool returns GitHub metadata + a basic
169
+ certify_score. It IS demoable.
170
+ - **Path**: chat-led demo skips `recon`/`certify`, uses `explain_repo`,
171
+ discloses **once** that this is the hosted lighter version.
172
+ - Backup: terminal-led path (`run_demo_live.bat`) uses the local CLI
173
+ v0.14.0 directly — bulletproof reproduction of captured numbers.
174
+
175
+ ## Verdict
176
+
177
+ **REFINE** — auto-deploy infrastructure does not exist; bringing the
178
+ Worker to parity with the Python release is product/ops work, not
179
+ orchestration. Doc agent has documented the gap, the fix path, and
180
+ the demo-time mitigation. Action lies with Thomas (Option A vs B
181
+ choice) and the Forge / Cognition agents (CI + classifier port).
182
+
183
+ — Docs/Orchestrator
184
+ 2026-05-06T05:22Z
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "atomadic-forge"
7
- version = "0.14.0"
7
+ version = "0.14.1"
8
8
  description = "Atomadic Forge — absorb, enforce, emerge. Polyglot (Python · JavaScript/TypeScript · Swift · Kotlin · Go) architecture guardian for AI-generated code."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -38,10 +38,10 @@ dev = [
38
38
  "build>=1,<2",
39
39
  "twine>=5,<7",
40
40
  "tomli>=2; python_version<'3.11'",
41
- "cryptography>=42,<46",
41
+ "cryptography>=42,<48",
42
42
  ]
43
43
  signing = [
44
- "cryptography>=42,<46",
44
+ "cryptography>=42,<48",
45
45
  ]
46
46
 
47
47
  [project.scripts]
@@ -0,0 +1,58 @@
1
+ """Atomadic Forge — absorb, enforce, emerge.
2
+
3
+ A monadic-architecture engine for absorbing Python or JavaScript /
4
+ TypeScript repositories into a verified 5-tier layout, enforcing layered
5
+ import discipline, and surfacing emergent compositions across the
6
+ resulting catalog.
7
+
8
+ Public version surface only — every symbol lives in its tier package and
9
+ is re-exported lazily by the CLI.
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+ from pathlib import Path
15
+
16
+
17
+ def _parse_project_version(text: str) -> str | None:
18
+ try:
19
+ try:
20
+ import tomllib
21
+ except ModuleNotFoundError: # pragma: no cover - Python 3.10
22
+ import tomli as tomllib # type: ignore[no-redef]
23
+ data = tomllib.loads(text)
24
+ project = data.get("project", {})
25
+ if project.get("name") == "atomadic-forge":
26
+ version = project.get("version")
27
+ return version if isinstance(version, str) else None
28
+ except Exception:
29
+ return None
30
+ return None
31
+
32
+
33
+ def _local_pyproject_version() -> str | None:
34
+ for parent in Path(__file__).resolve().parents:
35
+ pyproject = parent / "pyproject.toml"
36
+ if not pyproject.exists():
37
+ continue
38
+ version = _parse_project_version(pyproject.read_text(encoding="utf-8"))
39
+ if version:
40
+ return version
41
+ return None
42
+
43
+
44
+ def _installed_version() -> str | None:
45
+ try:
46
+ from importlib.metadata import PackageNotFoundError as _PNF
47
+ from importlib.metadata import version as _pkg_version
48
+ try:
49
+ return _pkg_version("atomadic-forge")
50
+ except _PNF:
51
+ return None
52
+ except ImportError: # pragma: no cover - Python < 3.8 path
53
+ return None
54
+
55
+
56
+ # Source checkouts prefer their own pyproject.toml; installed wheels fall
57
+ # back to package metadata because wheel installs do not ship pyproject.toml.
58
+ __version__ = _local_pyproject_version() or _installed_version() or "0.0.0+dev"
@@ -0,0 +1,44 @@
1
+ """Tier a0 — enhancement-proposal constants.
2
+
3
+ When Forge (or an agent driving Forge) discovers a pattern strong
4
+ enough to become a new tool / feature, it can submit an enhancement
5
+ proposal. Proposals are logged as JSONL; an optional AAAA-Nexus
6
+ trust-gate call gives the proposal a trust score; publishing to
7
+ GitHub stays human-gated (never auto-posted).
8
+ """
9
+ from __future__ import annotations
10
+
11
+ from typing import Final
12
+
13
+ SCHEMA_VERSION_ENHANCEMENT_PROPOSAL_V1: Final[str] = (
14
+ "atomadic-forge.enhancement_proposal/v1"
15
+ )
16
+
17
+ PROPOSAL_DIR_REL: Final[str] = ".atomadic-forge/enhancement_proposals"
18
+ PROPOSAL_LOG_REL: Final[str] = (
19
+ ".atomadic-forge/enhancement_proposals/forge_enhancement_proposals.jsonl"
20
+ )
21
+
22
+ # Trust threshold below which a proposal is logged-only (never published).
23
+ # Above this, the proposal becomes eligible for `forge enhancement publish`
24
+ # (which still requires an explicit human approval).
25
+ DEFAULT_TRUST_THRESHOLD: Final[float] = 0.75
26
+
27
+ # Trust verdicts accepted from the trust-gate response.
28
+ TRUST_VERDICT_PASS: Final[str] = "PASS"
29
+ TRUST_VERDICT_FAIL: Final[str] = "FAIL"
30
+ TRUST_VERDICT_OFFLINE: Final[str] = "OFFLINE"
31
+ TRUST_VERDICT_VALUES: Final[frozenset[str]] = frozenset({
32
+ TRUST_VERDICT_PASS, TRUST_VERDICT_FAIL, TRUST_VERDICT_OFFLINE,
33
+ })
34
+
35
+ __all__ = [
36
+ "DEFAULT_TRUST_THRESHOLD",
37
+ "PROPOSAL_DIR_REL",
38
+ "PROPOSAL_LOG_REL",
39
+ "SCHEMA_VERSION_ENHANCEMENT_PROPOSAL_V1",
40
+ "TRUST_VERDICT_FAIL",
41
+ "TRUST_VERDICT_OFFLINE",
42
+ "TRUST_VERDICT_PASS",
43
+ "TRUST_VERDICT_VALUES",
44
+ ]
@@ -0,0 +1,38 @@
1
+ """Tier a0 — response-enrichment constants.
2
+
3
+ The ``scope`` block surfaces real measurements the tool already produced
4
+ (files scanned, symbols analyzed, traversal depth, wall-clock time)
5
+ alongside a transparent token-savings ESTIMATE. Every estimate ships
6
+ with its formula in ``tokens_saved_basis`` so a reader can audit the
7
+ math instead of trusting the number.
8
+
9
+ Defaults are conservative middle-ground heuristics. They will land in
10
+ the wrong neighborhood for any specific agent/model/prompt combo;
11
+ ``tokens_saved_basis`` is always present so callers can see exactly
12
+ how the number was derived and recompute if they want a different
13
+ baseline.
14
+ """
15
+ from __future__ import annotations
16
+
17
+ from typing import Final
18
+
19
+ SCHEMA_VERSION_SCOPE_V1: Final[str] = "atomadic-forge.scope/v1"
20
+
21
+ # Per-file token cost a human/agent would pay to manually open + scan
22
+ # one source file end-to-end. 40 tok ≈ ~150 chars ≈ a small Python
23
+ # module's signatures + dependencies (NOT full body). This is the
24
+ # lower-bound "bare review" cost; full reading + reasoning is much
25
+ # higher. We pick the lower bound deliberately so the estimate cannot
26
+ # be accused of inflating ROI.
27
+ TOKENS_PER_FILE_REVIEW: Final[int] = 40
28
+
29
+ # Per-symbol cost for traversal-style operations (emergent_scan,
30
+ # call_graph). One symbol ≈ ~12 tok of read cost when an agent is
31
+ # building a mental graph of a codebase.
32
+ TOKENS_PER_SYMBOL_TRAVERSAL: Final[int] = 12
33
+
34
+ __all__ = [
35
+ "SCHEMA_VERSION_SCOPE_V1",
36
+ "TOKENS_PER_FILE_REVIEW",
37
+ "TOKENS_PER_SYMBOL_TRAVERSAL",
38
+ ]
@@ -116,6 +116,13 @@ SCHEMA_VERSIONS: dict[str, str] = {
116
116
  # v0.14.0a9 — handoff: structured agent-to-agent session transfer
117
117
  "handoff_create": "atomadic-forge.handoff/v1",
118
118
  "handoff_list": "atomadic-forge.handoff/v1",
119
+
120
+ # v0.14.0a11 — enhancement proposals (trust-gated, human-published)
121
+ "enhancement_propose": "atomadic-forge.enhancement_proposal/v1",
122
+ "enhancement_list": "atomadic-forge.enhancement_proposal/v1",
123
+
124
+ # v0.14.0a12 — welcome: first-call handshake
125
+ "welcome": "atomadic-forge.welcome/v1",
119
126
  }
120
127
 
121
128
 
@@ -0,0 +1,38 @@
1
+ """Tier a0 — forge welcome constants.
2
+
3
+ The welcome flow is the first call an agent makes after connecting to
4
+ Forge. It runs a focused recon (scout + certify + wire) and packages
5
+ the result so the agent immediately knows three things:
6
+
7
+ 1. What state the repo is actually in (numbers, not vibes)
8
+ 2. What Forge can do for it from here (capability surface)
9
+ 3. The single most useful next call
10
+
11
+ Voice for the narrative is "senior architect reporting from a scan" —
12
+ specific, grounded, confident. No marketing copy, no sycophancy.
13
+ """
14
+ from __future__ import annotations
15
+
16
+ from typing import Final
17
+
18
+ SCHEMA_VERSION_WELCOME_V1: Final[str] = "atomadic-forge.welcome/v1"
19
+
20
+ # Score thresholds map to one-word health labels in the narrative.
21
+ HEALTH_LABEL_THRESHOLDS: Final[tuple[tuple[float, str], ...]] = (
22
+ (95.0, "production-ready"),
23
+ (85.0, "ship-ready"),
24
+ (70.0, "improving"),
25
+ (50.0, "needs work"),
26
+ (0.0, "early"),
27
+ )
28
+
29
+ # Cap suggestions / strengths so the response stays scannable.
30
+ TOP_N_STRENGTHS: Final[int] = 3
31
+ TOP_N_PRIORITIES: Final[int] = 3
32
+
33
+ __all__ = [
34
+ "HEALTH_LABEL_THRESHOLDS",
35
+ "SCHEMA_VERSION_WELCOME_V1",
36
+ "TOP_N_PRIORITIES",
37
+ "TOP_N_STRENGTHS",
38
+ ]
@@ -457,7 +457,11 @@ def certify(root: Path, *, project: str = "Atomadic project",
457
457
  scan_duration_ms = int((time.perf_counter() - _scan_start) * 1000)
458
458
  blockers = len([i for i in issues if not i.startswith(" ·")])
459
459
  verdict = "PASS" if score >= 75 and blockers == 0 else "FAIL"
460
- return {
460
+ _files_scanned_estimate = sum(
461
+ v for v in (layout_d.get("file_class_counts") or {}).values()
462
+ if isinstance(v, int)
463
+ ) or len(list((root / "src").rglob("*.py")) if (root / "src").is_dir() else [])
464
+ base = {
461
465
  "schema_version": "atomadic-forge.certify/v1",
462
466
  "project": project,
463
467
  "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
@@ -557,3 +561,18 @@ def certify(root: Path, *, project: str = "Atomadic project",
557
561
  "test_run": test_run,
558
562
  "untiered_source": count_untiered_source_files(root)},
559
563
  }
564
+ from .response_enricher import (
565
+ enrich_response as _enrich,
566
+ make_scope as _make_scope,
567
+ summarize_certify as _summarize_certify,
568
+ )
569
+ return _enrich(
570
+ base,
571
+ scope=_make_scope(
572
+ files_scanned=_files_scanned_estimate,
573
+ tiers_traversed=5,
574
+ scan_duration_ms=scan_duration_ms,
575
+ basis_kind="files",
576
+ ),
577
+ summary=_summarize_certify(base),
578
+ )