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.
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/workflows/customer-refactor.yml +1 -1
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/CHANGELOG.md +87 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/PKG-INFO +6 -6
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/README.md +3 -3
- atomadic_forge-0.14.1/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +184 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/pyproject.toml +3 -3
- atomadic_forge-0.14.1/src/atomadic_forge/__init__.py +58 -0
- atomadic_forge-0.14.1/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +44 -0
- atomadic_forge-0.14.1/src/atomadic_forge/a0_qk_constants/response_enrichment.py +38 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +7 -0
- atomadic_forge-0.14.1/src/atomadic_forge/a0_qk_constants/welcome_constants.py +38 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/certify_checks.py +20 -1
- atomadic_forge-0.14.1/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +95 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/forge_feedback.py +22 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +151 -0
- atomadic_forge-0.14.1/src/atomadic_forge/a1_at_functions/response_enricher.py +226 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/scout_walk.py +16 -1
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/synergy_detect.py +29 -2
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/synergy_render.py +10 -10
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +32 -11
- atomadic_forge-0.14.1/src/atomadic_forge/a1_at_functions/welcome_narrator.py +534 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/wire_check.py +24 -1
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/emergent_feature.py +24 -1
- atomadic_forge-0.14.1/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +194 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/mcp_server.py +58 -0
- atomadic_forge-0.14.1/src/atomadic_forge/a3_og_features/welcome_feature.py +197 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a4_sy_orchestration/cli.py +6 -0
- atomadic_forge-0.14.1/src/atomadic_forge/commands/enhancement.py +209 -0
- atomadic_forge-0.14.1/src/atomadic_forge/commands/welcome.py +75 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge.egg-info/PKG-INFO +6 -6
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge.egg-info/SOURCES.txt +14 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge.egg-info/requires.txt +2 -2
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_cli_smoke.py +18 -0
- atomadic_forge-0.14.1/tests/test_enhancement_proposal.py +306 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_evolve_js.py +15 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_mcp_protocol.py +4 -0
- atomadic_forge-0.14.1/tests/test_response_enricher.py +223 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_synergy.py +49 -0
- atomadic_forge-0.14.1/tests/test_welcome.py +361 -0
- atomadic_forge-0.14.0/src/atomadic_forge/__init__.py +0 -24
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/FUNDING.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/actions/forge-action/README.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/actions/forge-action/action.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/dependabot.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/pull_request_template.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/workflows/ci.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/workflows/forge-self-certify.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/workflows/release.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/.github/workflows/surface-drift.yml +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/ARCHITECTURE.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/CONTRIBUTING.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/LICENSE +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/MANIFEST.in +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/SECURITY.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/assets/Atomadic-Forge-01.png +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/01-getting-started.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/02-commands.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/03-tutorial.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/04-llm-loops.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/05-faq.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/AGENTS_GUIDE.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/AIR_GAPPED.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/CI_CD.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/CODEX_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/COMMANDS.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/FIRST_10_MINUTES.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/FORMALIZATION.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/HIVE_PRIMITIVES.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/HIVE_STATUS.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/LANDSCAPE.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/MARKET_POSITIONING.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/MIGRATION.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/MULTI_REPO.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/README.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/RECEIPT.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/RELAY_PROTOCOL.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/RELEASE_CHECKLIST.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/RELEASE_MESSAGING.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/ROADMAP.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/SHOWCASE.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/SIDECAR.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/STUDIO.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/WHY_NOW.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/WORLD_COLLISION.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/INDEX.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/chat.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/commandsmith.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/config.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/demo.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/emergent-then-synergy.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/emergent.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/evolve-then-iterate.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/evolve.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/feature-then-emergent.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/iterate.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/synergy-then-emergent.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/commands/synergy.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/compliance/CS-1.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/compliance/SR_11-7_MAPPING.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/tutorials/01-quickstart.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/tutorials/02-your-first-package.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/tutorials/03-the-five-tier-law.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/tutorials/04-plug-in-llms.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/tutorials/05-multi-repo-absorb.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/docs/tutorials/06-javascript-quickstart.md +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/setup.cfg +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/__main__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/cherry_hunter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/emergent_swarm.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/__init__.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/_registry.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/audit.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/chat.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/commandsmith.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/config_cmd.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/demo.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/emergent.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/evolve.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/guard_install.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/handoff.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/harvest.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/hive.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/iterate.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/recon_swarm.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/relay.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/surface.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/synergy.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/commands/wisdom.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge.egg-info/top_level.txt +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_aaaa_nexus_client.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_agent_hire_protocol.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_agent_plan.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_agent_summary.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_audit_verb.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_body_extractor_repairs.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_card_renderer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_certify_operational_axis.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_chat.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_classify_tier.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_classify_tier_ast_signals.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_codex_5_complete.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_codex_6_enforce_polyglot.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_commandsmith.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_compiler_feedback.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_compliance_checker.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_config.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_copilots_copilot.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_cs1_renderer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_dedup_engine.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_demo.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_emergent_compose.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_emergent_signature_extract.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_error_codes.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_error_hints.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_exported_api_check.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_forge_action.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_forge_auth_a1.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_forge_auth_a2.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_forge_enforce.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_generation_quality.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_handoff.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_hierarchical_memory.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_hive_sync.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_ignore_and_docs.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_import_smoke.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_iterate_evolve.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_js_certify.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_js_parser.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_js_recon.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_js_wire.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_lineage_chain.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_ling_provider.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_local_signer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_lsp_protocol.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_manifest_diff.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_nexus_bridge.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_ollama_client.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_pipeline.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_plan_apply.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_polyglot_swift_kotlin_go.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_pre_audit_smoke.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_precommit_hooks.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_progress_reporter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_receipt_emitter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_receipt_schema.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_receipt_signer.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_roi_calculator.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_sbom_emitter.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_scaffold.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_sidecar.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_sidecar_validate.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_smell_score_formula.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_stagnation.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_stub_detector.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_surface_export.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_test_runner.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_tier_init_rebuild.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_trust_gate_response.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_verify_suggested_recipe.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_whoami_cmd.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_wire_certify.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_wire_suggest_repairs.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_wire_type_checking.py +0 -0
- {atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/tests/test_wisdom.py +0 -0
|
@@ -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.
|
|
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<
|
|
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)
|
|
@@ -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,
|
|
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 #
|
|
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 #
|
|
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,
|
|
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 #
|
|
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.
|
|
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,<
|
|
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,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
|
+
]
|
{atomadic_forge-0.14.0 → atomadic_forge-0.14.1}/src/atomadic_forge/a1_at_functions/certify_checks.py
RENAMED
|
@@ -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
|
-
|
|
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
|
+
)
|