atomadic-forge 0.14.0__tar.gz → 0.15.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.
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/.github/workflows/customer-refactor.yml +1 -1
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/CHANGELOG.md +116 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/PKG-INFO +13 -6
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/README.md +10 -3
- atomadic_forge-0.15.0/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +184 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/pyproject.toml +3 -3
- atomadic_forge-0.15.0/src/atomadic_forge/__init__.py +58 -0
- atomadic_forge-0.15.0/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +44 -0
- atomadic_forge-0.15.0/src/atomadic_forge/a0_qk_constants/lifetime_savings_constants.py +21 -0
- atomadic_forge-0.15.0/src/atomadic_forge/a0_qk_constants/materialize_types.py +35 -0
- atomadic_forge-0.15.0/src/atomadic_forge/a0_qk_constants/response_enrichment.py +38 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +7 -0
- atomadic_forge-0.15.0/src/atomadic_forge/a0_qk_constants/welcome_constants.py +38 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/certify_checks.py +24 -1
- atomadic_forge-0.15.0/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +95 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/forge_feedback.py +22 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/handoff_builder.py +1 -1
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/hive_io.py +4 -3
- atomadic_forge-0.15.0/src/atomadic_forge/a1_at_functions/lifetime_savings.py +119 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +168 -1
- atomadic_forge-0.15.0/src/atomadic_forge/a1_at_functions/response_enricher.py +283 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/scout_walk.py +16 -2
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/synergy_detect.py +29 -2
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/synergy_render.py +10 -10
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +32 -11
- atomadic_forge-0.15.0/src/atomadic_forge/a1_at_functions/welcome_narrator.py +584 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/wire_check.py +28 -2
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +20 -10
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/wisdom_io.py +3 -2
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +6 -7
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -1
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a2_mo_composites/nexus_client.py +1 -1
- atomadic_forge-0.15.0/src/atomadic_forge/a3_og_features/create_feature.py +211 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/emergent_feature.py +28 -1
- atomadic_forge-0.15.0/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +195 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/forge_pipeline.py +29 -2
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/hive_sync.py +1 -2
- atomadic_forge-0.15.0/src/atomadic_forge/a3_og_features/materialize_feature.py +356 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/mcp_server.py +94 -36
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -1
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/synergy_feature.py +23 -1
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/verify_umbrella.py +28 -1
- atomadic_forge-0.15.0/src/atomadic_forge/a3_og_features/welcome_feature.py +269 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -1
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a4_sy_orchestration/cli.py +10 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/_registry.py +4 -0
- atomadic_forge-0.15.0/src/atomadic_forge/commands/create.py +143 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/emergent_swarm.py +2 -2
- atomadic_forge-0.15.0/src/atomadic_forge/commands/enhancement.py +209 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/harvest.py +1 -1
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/hive.py +2 -2
- atomadic_forge-0.15.0/src/atomadic_forge/commands/materialize.py +103 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/recon_swarm.py +1 -1
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/relay.py +1 -1
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/surface.py +0 -1
- atomadic_forge-0.15.0/src/atomadic_forge/commands/welcome.py +75 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/wisdom.py +7 -5
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge.egg-info/PKG-INFO +13 -6
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge.egg-info/SOURCES.txt +24 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge.egg-info/requires.txt +2 -2
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_cli_smoke.py +18 -0
- atomadic_forge-0.15.0/tests/test_create_feature.py +183 -0
- atomadic_forge-0.15.0/tests/test_enhancement_proposal.py +304 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_evolve_js.py +15 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_hive_sync.py +16 -3
- atomadic_forge-0.15.0/tests/test_materialize_feature.py +203 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_mcp_protocol.py +4 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_nexus_bridge.py +0 -1
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_polyglot_swift_kotlin_go.py +0 -1
- atomadic_forge-0.15.0/tests/test_response_enricher.py +222 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_surface_export.py +0 -4
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_synergy.py +49 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_verify_suggested_recipe.py +0 -2
- atomadic_forge-0.15.0/tests/test_welcome.py +402 -0
- atomadic_forge-0.15.0/tests/test_welcome_enhancements.py +280 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_wisdom.py +0 -1
- atomadic_forge-0.14.0/src/atomadic_forge/__init__.py +0 -24
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/.github/FUNDING.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/.github/actions/forge-action/README.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/.github/actions/forge-action/action.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/.github/dependabot.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/.github/pull_request_template.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/.github/workflows/ci.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/.github/workflows/forge-self-certify.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/.github/workflows/release.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/.github/workflows/surface-drift.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/ARCHITECTURE.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/CONTRIBUTING.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/LICENSE +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/MANIFEST.in +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/SECURITY.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/assets/Atomadic-Forge-01.png +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/01-getting-started.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/02-commands.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/03-tutorial.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/04-llm-loops.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/05-faq.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/AGENTS_GUIDE.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/AIR_GAPPED.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/CI_CD.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/CODEX_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/COMMANDS.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/FIRST_10_MINUTES.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/FORMALIZATION.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/HIVE_PRIMITIVES.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/HIVE_STATUS.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/LANDSCAPE.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/MARKET_POSITIONING.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/MIGRATION.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/MULTI_REPO.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/README.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/RECEIPT.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/RELAY_PROTOCOL.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/RELEASE_CHECKLIST.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/RELEASE_MESSAGING.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/ROADMAP.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/SHOWCASE.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/SIDECAR.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/STUDIO.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/WHY_NOW.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/WORLD_COLLISION.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/commands/INDEX.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/commands/chat.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/commands/commandsmith.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/commands/config.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/commands/demo.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/commands/emergent-then-synergy.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/commands/emergent.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/commands/evolve-then-iterate.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/commands/evolve.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/commands/feature-then-emergent.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/commands/iterate.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/commands/synergy-then-emergent.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/commands/synergy.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/compliance/CS-1.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/compliance/SR_11-7_MAPPING.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/tutorials/01-quickstart.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/tutorials/02-your-first-package.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/tutorials/03-the-five-tier-law.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/tutorials/04-plug-in-llms.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/tutorials/05-multi-repo-absorb.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/docs/tutorials/06-javascript-quickstart.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/setup.cfg +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/__main__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/cherry_hunter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/emergent_swarm.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/audit.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/chat.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/commandsmith.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/config_cmd.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/demo.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/emergent.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/evolve.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/guard_install.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/handoff.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/iterate.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/synergy.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/src/atomadic_forge.egg-info/top_level.txt +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_aaaa_nexus_client.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_agent_hire_protocol.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_agent_plan.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_agent_summary.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_audit_verb.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_body_extractor_repairs.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_card_renderer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_certify_operational_axis.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_chat.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_classify_tier.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_classify_tier_ast_signals.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_codex_5_complete.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_codex_6_enforce_polyglot.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_commandsmith.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_compiler_feedback.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_compliance_checker.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_config.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_copilots_copilot.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_cs1_renderer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_dedup_engine.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_demo.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_emergent_compose.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_emergent_signature_extract.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_error_codes.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_error_hints.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_exported_api_check.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_forge_action.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_forge_auth_a1.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_forge_auth_a2.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_forge_enforce.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_generation_quality.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_handoff.py +3 -3
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_hierarchical_memory.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_ignore_and_docs.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_import_smoke.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_iterate_evolve.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_js_certify.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_js_parser.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_js_recon.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_js_wire.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_lineage_chain.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_ling_provider.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_local_signer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_lsp_protocol.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_manifest_diff.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_ollama_client.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_pipeline.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_plan_apply.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_pre_audit_smoke.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_precommit_hooks.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_progress_reporter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_receipt_emitter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_receipt_schema.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_receipt_signer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_roi_calculator.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_sbom_emitter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_scaffold.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_sidecar.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_sidecar_validate.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_smell_score_formula.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_stagnation.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_stub_detector.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_test_runner.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_tier_init_rebuild.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_trust_gate_response.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_whoami_cmd.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_wire_certify.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_wire_suggest_repairs.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.15.0}/tests/test_wire_type_checking.py +0 -0
|
@@ -1,5 +1,121 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## v0.15.0 — 2026-05-06 forge create / forge materialize
|
|
6
|
+
|
|
7
|
+
Closes the loop from emergent composition discovery to a real,
|
|
8
|
+
pip-installable package on disk.
|
|
9
|
+
|
|
10
|
+
- **`forge materialize`** — emergent scan report → shippable Python
|
|
11
|
+
package. Tier-organized scaffold (a0..a4 + `__init__.py`),
|
|
12
|
+
`pyproject.toml`, `README.md`, `.gitignore`, `tests/conftest.py`,
|
|
13
|
+
`tests/__init__.py`, plus one a3 feature module + smoke test per
|
|
14
|
+
selected candidate. Slug uniqueness via candidate-id tail so name
|
|
15
|
+
collisions don't overwrite. Optional wire-check + certify pass with
|
|
16
|
+
the verdict embedded in the report. Refuses to overwrite a non-empty
|
|
17
|
+
unrelated directory. +9 tests.
|
|
18
|
+
- **`forge create`** — one-command pipeline. Resolves local seed-repo
|
|
19
|
+
paths (`src/<pkg>/`, tier-bearing dir, or auto-detect), runs
|
|
20
|
+
`emergent_swarm` across them, persists scan + receipt to
|
|
21
|
+
`.atomadic-forge/`, then pipes through `materialize` for the final
|
|
22
|
+
package. Strictly local paths — no GitHub cloning, no third-party
|
|
23
|
+
absorption. Phase 2/3 (clone + cross-framework merge) plug in ahead
|
|
24
|
+
of step 1 without changing this module's contract. +7 tests.
|
|
25
|
+
- End-to-end smoke verified on Forge itself: 570 union catalog → 25
|
|
26
|
+
candidates → 17-file package, `wire_violations=0`. On a JS-only
|
|
27
|
+
codebase (Atomadic cognition worker): 0 candidates, empty-but-valid
|
|
28
|
+
scaffold. The system reports what it found, not what was hoped for.
|
|
29
|
+
|
|
30
|
+
Also accumulated in this release:
|
|
31
|
+
|
|
32
|
+
### Synergy signal and version repair
|
|
33
|
+
|
|
34
|
+
Forge-on-Forge evolution pass: `synergy_scan` now distinguishes
|
|
35
|
+
stdout-only `--json` switches from real artifact-writing path options
|
|
36
|
+
such as `--save`, `--out`, and `--report`. This removes false
|
|
37
|
+
JSON-handoff candidates like command groups that print JSON but do not
|
|
38
|
+
write an artifact file. The synergy adapter renderer also targets the
|
|
39
|
+
current `atomadic_forge.a4_sy_orchestration.cli` module instead of the
|
|
40
|
+
retired unified CLI path.
|
|
41
|
+
|
|
42
|
+
MCP doctor exposed a release drift in editable/worktree setups where
|
|
43
|
+
installed package metadata could still report `0.14.0a10` after the
|
|
44
|
+
checkout's `pyproject.toml` had advanced to `0.14.0`. Source checkouts
|
|
45
|
+
now prefer their local `pyproject.toml`; installed wheels continue to
|
|
46
|
+
fall back to package metadata.
|
|
47
|
+
|
|
48
|
+
Validation:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
forge emergent scan --src-root src --package atomadic_forge --top-n 10 --json
|
|
52
|
+
forge emergent_swarm -r ... --json
|
|
53
|
+
forge certify . --fail-under 100 --json
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Also pending in this slot:
|
|
57
|
+
|
|
58
|
+
- **`forge handoff create / list / show`** — structured agent-to-agent
|
|
59
|
+
session transfer at `.atomadic-forge/handoffs/<HOFF-id>.json`. CLI verb
|
|
60
|
+
+ MCP tools `handoff_create` and `handoff_list` (surface 61 → 63).
|
|
61
|
+
Schema `atomadic-forge.handoff/v1` with `axiom_guard_status`
|
|
62
|
+
PASS|QUARANTINE so the next agent reads the trust verdict before it
|
|
63
|
+
resumes work. +18 tests.
|
|
64
|
+
- **AST-aware class classifier** — `body_extractor.detect_class_signals()`
|
|
65
|
+
returns `is_protocol`, `is_frozen_dataclass`, `all_static_methods`,
|
|
66
|
+
`has_cached_property` alongside the existing self-assign signals.
|
|
67
|
+
`classify_tier()` honors them BEFORE name heuristics: `Protocol → a0`,
|
|
68
|
+
`@dataclass(frozen=True) → a1`, all-`@staticmethod` → a1,
|
|
69
|
+
`@cached_property → a2`. New `classify_tier_with_confidence()`
|
|
70
|
+
returns `{tier, confidence, reasons}` for callers that want to route
|
|
71
|
+
low-confidence guesses to manual review. +17 tests.
|
|
72
|
+
- **`wire_check` edge cases** — `if TYPE_CHECKING:` guarded imports are
|
|
73
|
+
no longer flagged as runtime violations; surfaced under
|
|
74
|
+
`type_only_imports` for visibility. `importlib.import_module(...)`
|
|
75
|
+
calls land in `dynamic_import_warnings` (string-literal modules
|
|
76
|
+
resolved; non-literals marked `<dynamic>`). `from .X import *` always
|
|
77
|
+
surfaces in `star_import_warnings`. New `--strict-cycles` opt-in flag
|
|
78
|
+
detects same-tier file-pair cycles, reported in `same_tier_cycles`.
|
|
79
|
+
Backward compatible: existing v1 schema fields untouched. +10 tests.
|
|
80
|
+
- **First-pass tier discipline block** — `system_prompt()` (Python
|
|
81
|
+
variant) gains a section that mirrors the new AST-classifier signals
|
|
82
|
+
so the LLM lands tiers right on the first emission rather than paying
|
|
83
|
+
a feedback round-trip. Calls out: Protocol→a0, frozen dataclass→a1,
|
|
84
|
+
all-static→a1, self-assign→a2, cached_property→a2, TYPE_CHECKING
|
|
85
|
+
permitted, dynamic/star warnings explained. +1 test.
|
|
86
|
+
|
|
87
|
+
Cumulative: 1133 → 1177 tests, 61 → 63 MCP tools.
|
|
88
|
+
|
|
89
|
+
## v0.14.0 — 2026-05-05 alpha-series finalization (PyPI release)
|
|
90
|
+
|
|
91
|
+
**release_commit_ts:** 2026-05-06T04:02:23Z (ef37eca)
|
|
92
|
+
|
|
93
|
+
The first non-prerelease in the v0.14.0 line. Drops the `aN` suffix
|
|
94
|
+
after ten alpha iterations (`a1` through `a10`) and ships the
|
|
95
|
+
cumulative surface to PyPI. `pip install atomadic-forge` now returns
|
|
96
|
+
`0.14.0` (was `0.10.0` since 2025).
|
|
97
|
+
|
|
98
|
+
Highlights (all already documented in their own alpha entries below):
|
|
99
|
+
|
|
100
|
+
- Full hive sync pipeline (`hive_register / observe / propose / vote /
|
|
101
|
+
result / list / deactivate / watch / needs-vote / recap`) for
|
|
102
|
+
multi-agent consensus over append-only public artifacts.
|
|
103
|
+
- AAAA-Nexus bridge: 7 LIVE primitives wired as MCP tools
|
|
104
|
+
(`nexus_identity_verify`, `nexus_federation_mint`,
|
|
105
|
+
`nexus_authorize_action`, `nexus_sys_trust_gate`,
|
|
106
|
+
`nexus_contract_verify`, `nexus_lineage_record`,
|
|
107
|
+
`nexus_ratchet_register`). Wisdom + consensus auto-mirror at
|
|
108
|
+
confidence ≥ 0.85.
|
|
109
|
+
- Local relay daemon (`forge relay serve`) — Worker → local job
|
|
110
|
+
dispatch over signed JSON-RPC envelopes.
|
|
111
|
+
- Surface artifact + drift CI gate (`surface.json` + `forge surface
|
|
112
|
+
emit/check/diff`).
|
|
113
|
+
- Wisdom DB on the MCP surface + wisdom → recipe promotion.
|
|
114
|
+
|
|
115
|
+
Surface at release: 61 MCP tools. Tests: 1131 passed, 2 skipped.
|
|
116
|
+
README, contact email (`thomas@atomadic.tech`), and version display
|
|
117
|
+
all reconciled with the live repo.
|
|
118
|
+
|
|
3
119
|
## v0.14.0a10 — 2026-05-06 forge hive recap (full lifecycle visualization)
|
|
4
120
|
|
|
5
121
|
**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.
|
|
3
|
+
Version: 0.15.0
|
|
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<
|
|
28
|
+
Requires-Dist: cryptography<48,>=42; extra == "dev"
|
|
29
29
|
Provides-Extra: signing
|
|
30
|
-
Requires-Dist: cryptography<
|
|
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 #
|
|
286
|
+
python -m pytest # 1179 collected (1177 passed, 2 skipped)
|
|
287
287
|
```
|
|
288
288
|
|
|
289
289
|
## AI Agent integration (MCP)
|
|
@@ -303,6 +303,13 @@ Forge ships a **Model Context Protocol server** — add it to Cursor, Claude Cod
|
|
|
303
303
|
|
|
304
304
|
### All 63 MCP tools (local) · 40 on the deployed Worker
|
|
305
305
|
|
|
306
|
+
> **Recommended first call: `welcome`** — runs scout + certify + wire on the
|
|
307
|
+
> current repo and returns a structured situation report (score, top
|
|
308
|
+
> strengths, top priorities, suggested next call, agent guidance,
|
|
309
|
+
> capability tour, safety net). Surfaced to MCP clients via
|
|
310
|
+
> `serverInfo.recommended_first_call` and a per-tool
|
|
311
|
+
> `recommended_first_call: true` flag in `tools/list`.
|
|
312
|
+
|
|
306
313
|
Grouped by purpose. Every tool is `tools/call`-able through the MCP
|
|
307
314
|
contract; every tool returns a versioned schema (`atomadic-forge.<tool>/v<n>`).
|
|
308
315
|
Run `forge mcp serve --help` for the full surface with examples.
|
|
@@ -594,7 +601,7 @@ Forge ships with named limits. No overpromise.
|
|
|
594
601
|
| Product | What it is | Status |
|
|
595
602
|
|---------|------------|--------|
|
|
596
603
|
| **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,
|
|
604
|
+
| **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
605
|
| **Atomadic Assistant** | Sovereign AI assistant with cognitive loop on Cloudflare | In development |
|
|
599
606
|
|
|
600
607
|
## Pricing
|
|
@@ -643,7 +650,7 @@ Apache 2.0.
|
|
|
643
650
|
**Forge itself is monadic.** Every source file belongs to one tier. The repo is a worked example:
|
|
644
651
|
|
|
645
652
|
```bash
|
|
646
|
-
python -m pytest #
|
|
653
|
+
python -m pytest # 1177 passed, 2 skipped
|
|
647
654
|
forge doctor # Environment check
|
|
648
655
|
forge wire src/atomadic_forge # Scan for violations (PASS)
|
|
649
656
|
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 #
|
|
254
|
+
python -m pytest # 1179 collected (1177 passed, 2 skipped)
|
|
255
255
|
```
|
|
256
256
|
|
|
257
257
|
## AI Agent integration (MCP)
|
|
@@ -271,6 +271,13 @@ Forge ships a **Model Context Protocol server** — add it to Cursor, Claude Cod
|
|
|
271
271
|
|
|
272
272
|
### All 63 MCP tools (local) · 40 on the deployed Worker
|
|
273
273
|
|
|
274
|
+
> **Recommended first call: `welcome`** — runs scout + certify + wire on the
|
|
275
|
+
> current repo and returns a structured situation report (score, top
|
|
276
|
+
> strengths, top priorities, suggested next call, agent guidance,
|
|
277
|
+
> capability tour, safety net). Surfaced to MCP clients via
|
|
278
|
+
> `serverInfo.recommended_first_call` and a per-tool
|
|
279
|
+
> `recommended_first_call: true` flag in `tools/list`.
|
|
280
|
+
|
|
274
281
|
Grouped by purpose. Every tool is `tools/call`-able through the MCP
|
|
275
282
|
contract; every tool returns a versioned schema (`atomadic-forge.<tool>/v<n>`).
|
|
276
283
|
Run `forge mcp serve --help` for the full surface with examples.
|
|
@@ -562,7 +569,7 @@ Forge ships with named limits. No overpromise.
|
|
|
562
569
|
| Product | What it is | Status |
|
|
563
570
|
|---------|------------|--------|
|
|
564
571
|
| **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,
|
|
572
|
+
| **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
573
|
| **Atomadic Assistant** | Sovereign AI assistant with cognitive loop on Cloudflare | In development |
|
|
567
574
|
|
|
568
575
|
## Pricing
|
|
@@ -611,7 +618,7 @@ Apache 2.0.
|
|
|
611
618
|
**Forge itself is monadic.** Every source file belongs to one tier. The repo is a worked example:
|
|
612
619
|
|
|
613
620
|
```bash
|
|
614
|
-
python -m pytest #
|
|
621
|
+
python -m pytest # 1177 passed, 2 skipped
|
|
615
622
|
forge doctor # Environment check
|
|
616
623
|
forge wire src/atomadic_forge # Scan for violations (PASS)
|
|
617
624
|
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.
|
|
7
|
+
version = "0.15.0"
|
|
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,<
|
|
41
|
+
"cryptography>=42,<48",
|
|
42
42
|
]
|
|
43
43
|
signing = [
|
|
44
|
-
"cryptography>=42,<
|
|
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,21 @@
|
|
|
1
|
+
"""Tier a0 — lifetime token-savings ledger constants.
|
|
2
|
+
|
|
3
|
+
Every time a Forge welcome (or any opt-in tool) runs, it appends a
|
|
4
|
+
single JSONL line to the ledger with {timestamp, tool, tokens_saved}.
|
|
5
|
+
The welcome flow reads + sums to surface a lifetime cumulative total
|
|
6
|
+
so users see savings add up across sessions.
|
|
7
|
+
"""
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from typing import Final
|
|
11
|
+
|
|
12
|
+
LIFETIME_LEDGER_REL: Final[str] = ".atomadic-forge/tokens_saved.jsonl"
|
|
13
|
+
|
|
14
|
+
SCHEMA_VERSION_LIFETIME_SAVINGS_V1: Final[str] = (
|
|
15
|
+
"atomadic-forge.lifetime_savings/v1"
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
"LIFETIME_LEDGER_REL",
|
|
20
|
+
"SCHEMA_VERSION_LIFETIME_SAVINGS_V1",
|
|
21
|
+
]
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"""Tier a0 — types for the Materialize pipeline.
|
|
2
|
+
|
|
3
|
+
Materialize takes ranked emergent candidates and writes a fresh,
|
|
4
|
+
pip-installable Python package containing one a3 feature module per
|
|
5
|
+
selected candidate, plus a tier-organized scaffold (pyproject, README,
|
|
6
|
+
tests, tier __init__.py files).
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import TypedDict
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class MaterializedFileCard(TypedDict):
|
|
15
|
+
"""One file written during materialize."""
|
|
16
|
+
|
|
17
|
+
path: str # absolute path on disk
|
|
18
|
+
role: str # "feature" | "scaffold" | "test" | "init"
|
|
19
|
+
candidate_id: str # "" if not feature-derived
|
|
20
|
+
bytes: int
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class MaterializeReport(TypedDict):
|
|
24
|
+
"""Top-level result of `forge materialize`."""
|
|
25
|
+
|
|
26
|
+
schema_version: str # "atomadic-forge.materialize/v1"
|
|
27
|
+
generated_at_utc: str
|
|
28
|
+
out_dir: str
|
|
29
|
+
package: str
|
|
30
|
+
candidates_selected: list[str] # candidate_ids in order
|
|
31
|
+
files_written: list[MaterializedFileCard]
|
|
32
|
+
certify_score: float | None # null if --no-certify
|
|
33
|
+
certify_grade: str | None # "PASS" | "REFINE" | "FAIL" | None
|
|
34
|
+
wire_violations: int | None # null if not run
|
|
35
|
+
summary_line: str
|
|
@@ -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
|
|