atomadic-forge 0.75.3__tar.gz → 0.77.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.75.3 → atomadic_forge-0.77.0}/CHANGELOG.md +14 -0
- {atomadic_forge-0.75.3/src/atomadic_forge.egg-info → atomadic_forge-0.77.0}/PKG-INFO +8 -8
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/README.md +7 -7
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/CI_CD.md +3 -3
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/COMMANDS.md +1 -1
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/FORMALIZATION.md +2 -2
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/IDE_INTEGRATION.md +1 -1
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/MCP_TOOLS.md +2 -2
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/RECEIPT.md +2 -2
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/pyproject.toml +1 -1
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py +27 -0
- atomadic_forge-0.77.0/src/atomadic_forge/a1_at_functions/cosine_similarity.py +22 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/doc_auto_update.py +199 -7
- atomadic_forge-0.77.0/src/atomadic_forge/a1_at_functions/graft_extract.py +221 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +186 -1
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/cherry_hunter.py +31 -0
- atomadic_forge-0.77.0/src/atomadic_forge/a3_og_features/graft_feature.py +234 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a4_sy_orchestration/cli.py +442 -0
- atomadic_forge-0.77.0/src/atomadic_forge/commands/graft.py +139 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/harvest.py +22 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0/src/atomadic_forge.egg-info}/PKG-INFO +8 -8
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge.egg-info/SOURCES.txt +7 -0
- atomadic_forge-0.77.0/tests/test_cherry_dedup_class_methods.py +80 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_doc_auto_update.py +103 -0
- atomadic_forge-0.77.0/tests/test_graft_feature.py +150 -0
- atomadic_forge-0.77.0/tests/test_harvest_source_warnings.py +78 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/FUNDING.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/actions/forge-action/README.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/actions/forge-action/action.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/dependabot.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/pull_request_template.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/ci.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/customer-refactor.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/forge-self-certify.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/mcp-registry-publish.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/metrics-auto-regen.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/metrics-drift.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/publish-on-tag.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/release-readiness.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/release.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/surface-drift.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/.github/workflows/uptime.yml +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/ARCHITECTURE.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/CONTRIBUTING.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/LICENSE +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/MANIFEST.in +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/SECURITY.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/assets/Atomadic-Forge-01.png +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/01-getting-started.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/02-commands.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/03-tutorial.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/04-llm-loops.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/05-faq.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/AGENTS_GUIDE.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/AIR_GAPPED.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/CODEX_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/FIRST_10_MINUTES.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/HIVE_PRIMITIVES.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/HIVE_STATUS.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/LANDSCAPE.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/MARKET_POSITIONING.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/MIGRATION.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/MULTI_REPO.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/PROVIDERS.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/README.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/RELAY_PROTOCOL.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/RELEASE_CHECKLIST.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/RELEASE_MESSAGING.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/ROADMAP.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/SHOWCASE.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/SIDECAR.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/STUDIO.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/V0.46.0_JUSTIFICATION_REPORT.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/V0.47.0_SELF_TEST_REPORT.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/WHY_NOW.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/WORLD_COLLISION.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/INDEX.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/absorb.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/audit.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/chat.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/commandsmith.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/config.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/create.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/demo.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/emergent-swarm.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/emergent-then-synergy.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/emergent.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/enhancement.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/evolve-then-iterate.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/evolve.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/feature-then-emergent.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/guard-install.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/handoff.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/harvest.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/hive.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/iterate.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/materialize.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/metrics.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/recon-swarm.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/relay.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/surface.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/synergy-then-emergent.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/synergy.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/welcome.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/commands/wisdom.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/compliance/CS-1.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/compliance/SR_11-7_MAPPING.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/tutorials/01-quickstart.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/tutorials/02-your-first-package.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/tutorials/03-the-five-tier-law.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/tutorials/04-plug-in-llms.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/tutorials/05-multi-repo-absorb.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/docs/tutorials/06-javascript-quickstart.md +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/setup.cfg +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/__init__.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/__main__.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/lifetime_savings_constants.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/materialize_types.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/response_enrichment.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/welcome_constants.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/abstract_method_repair.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/ast_scope_lock.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/capability_scout.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/custom_provider_client.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/dead_code_check.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/forge_metrics.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/git_churn.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/harvest_absorb.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/harvest_concept_bridge.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/lifetime_savings.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/maintainability_index.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/polyglot_classify.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/polyglot_imports.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/polyglot_surface.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/repo_public_surface.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/response_enricher.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/scaffold_polyglot.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/steersman_pack.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/surface_gap_check.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/welcome_narrator.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/wire_stubs_gen.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/remote_seed_store.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a2_mo_composites/repo_public_surface_sync.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/absorb_feature.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/create_feature.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.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.75.3 → atomadic_forge-0.77.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.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/emergent_swarm.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_metrics_feature.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/materialize_feature.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/mcp_server.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/welcome_feature.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/__init__.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/_registry.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/absorb.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/audit.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/chat.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/commandsmith.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/config_cmd.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/create.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/demo.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/emergent.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/enhancement.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/evolve.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/guard_install.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/handoff.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/hive.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/iterate.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/materialize.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/metrics.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/recon_swarm.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/relay.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/surface.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/synergy.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/welcome.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/commands/wisdom.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge.egg-info/requires.txt +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge.egg-info/top_level.txt +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_aaaa_nexus_client.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_abstract_method_repair.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_agent_hire_protocol.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_agent_plan.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_agent_plan_pkg_label.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_agent_summary.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_ast_scope_lock.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_audit_verb.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_body_extractor_repairs.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_call_graph_summary.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_capability_scout.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_card_renderer.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_certify_operational_axis.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_chat.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_cherry_pick.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_classify_tier.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_classify_tier_ast_signals.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_cli_smoke.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_cli_swarm_aliases.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_codex_5_complete.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_codex_6_enforce_polyglot.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_commandsmith.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_compiler_feedback.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_compliance_checker.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_config.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_copilots_copilot.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_create_feature.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_cs1_renderer.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_custom_provider.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_dead_code_check.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_dedup_engine.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_demo.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_emergent_compose.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_emergent_signature_extract.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_emergent_synthesize_imports.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_enhancement_proposal.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_error_codes.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_error_hints.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_evolve_js.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_exported_api_check.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_finalize_scaffold.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_forge_action.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_forge_auth_a1.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_forge_auth_a2.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_forge_enforce.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_generation_quality.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_git_churn.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_handoff.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_harvest_concept_bridge.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_hierarchical_memory.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_hive_sync.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_ignore_and_docs.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_import_smoke.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_iterate_evolve.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_js_certify.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_js_parser.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_js_recon.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_js_wire.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_lineage_chain.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_ling_provider.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_local_signer.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_lsp_protocol.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_maintainability_index.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_manifest_diff.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_materialize_feature.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_mcp_lazy_bootstrap.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_mcp_protocol.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_nexus_bridge.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_ollama_client.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_pipeline.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_plan_apply.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_polyglot_cli_mcp.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_polyglot_full_pipeline.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_polyglot_hardening.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_polyglot_swift_kotlin_go.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_polyglot_symbol_parity.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_pre_audit_smoke.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_precommit_hooks.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_progress_reporter.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_receipt_emitter.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_receipt_schema.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_receipt_signer.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_remote_seed_store.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_repo_public_surface.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_response_enricher.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_roi_calculator.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_sbom_cmd_text_summary.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_sbom_emitter.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_scaffold.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_sidecar.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_sidecar_validate.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_smell_score_formula.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_stagnation.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_steersman_pack.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_stub_detector.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_surface_export.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_surface_gap_check.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_synergy.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_test_runner.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_tier_init_rebuild.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_trust_gate_response.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_verify_suggested_recipe.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_welcome.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_welcome_enhancements.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_whoami_cmd.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_wire_certify.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_wire_stubs_gen.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_wire_suggest_repairs.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_wire_type_checking.py +0 -0
- {atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/tests/test_wisdom.py +0 -0
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## v0.77.0 — 2026-05-08
|
|
6
|
+
|
|
7
|
+
- fix(forge): cherry-pick — collapse Class.method explosion (root-cause)
|
|
8
|
+
- feat(doc-update): auto-update 6 previously missed doc files on release
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
## v0.76.0 — 2026-05-08
|
|
12
|
+
|
|
13
|
+
- feat(forge): graft — surgical single-symbol cross-repo capability transfer
|
|
14
|
+
- fix(lint): clear 14 ruff violations blocking CI
|
|
15
|
+
- release: v0.75.3
|
|
16
|
+
- fix(forge): GAP-014 — harvest fail-loud on missing/empty sources
|
|
17
|
+
|
|
18
|
+
|
|
5
19
|
## v0.75.3 — 2026-05-08
|
|
6
20
|
|
|
7
21
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atomadic-forge
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.77.0
|
|
4
4
|
Summary: Atomadic Forge — absorb, enforce, emerge. Polyglot (Python · JavaScript/TypeScript · Rust · Go · Swift · Kotlin) architecture guardian for AI-generated code.
|
|
5
5
|
Author: Atomadic
|
|
6
6
|
License-Expression: BUSL-1.1
|
|
@@ -176,11 +176,11 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
|
|
|
176
176
|
| `forge plan` | Bounded execution plan with risk + rollback |
|
|
177
177
|
| `forge chat` | Terminal copilot over forge docs |
|
|
178
178
|
|
|
179
|
-
**
|
|
179
|
+
**59 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
|
|
180
180
|
|
|
181
181
|
---
|
|
182
182
|
|
|
183
|
-
## MCP Server — 10 Tools,
|
|
183
|
+
## MCP Server — 10 Tools, 116 Actions
|
|
184
184
|
|
|
185
185
|
Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aider, Devin, or any MCP-compatible agent:
|
|
186
186
|
|
|
@@ -200,7 +200,7 @@ Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aide
|
|
|
200
200
|
| Tool | Actions | What it does |
|
|
201
201
|
|------|---------|-------------|
|
|
202
202
|
| `welcome` | — | RECOMMENDED FIRST CALL: onboarding scan, score, narrative, capability tour |
|
|
203
|
-
| `explore` |
|
|
203
|
+
| `explore` | 17 | Analyze, understand, discover — recon/explain/call_graph/call_graph_summary/smell/lineage/harvest/synergy/scan/swarm/churn/surface_gaps/capability_scout/dead_code/maintainability/concept_bridge |
|
|
204
204
|
| `audit` | 23 | Quality gates, change safety, trust |
|
|
205
205
|
| `plan` | 10 | Orient + dev utilities — context/compose/policy/recipes/generate/apply/locate/commit/scaffold/steersman |
|
|
206
206
|
| `transmute` | 3 | **FLAGSHIP** spaghetti→certified pipeline — auto/cherry/finalize |
|
|
@@ -223,10 +223,10 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
223
223
|
| Metric | Value |
|
|
224
224
|
|--------|-------|
|
|
225
225
|
|
|
226
|
-
| MCP tools | **10 tools ·
|
|
227
|
-
| CLI verbs | **
|
|
228
|
-
| Source files | **
|
|
229
|
-
| Tests | **
|
|
226
|
+
| MCP tools | **10 tools · 116 actions** |
|
|
227
|
+
| CLI verbs | **59** |
|
|
228
|
+
| Source files | **232** (~47K LOC) |
|
|
229
|
+
| Tests | **1588 passing** across **115 test files** |
|
|
230
230
|
| Lean4 formal proofs | **872 theorems** (mathematically verified core logic) |
|
|
231
231
|
| Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
|
|
232
232
|
| Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
|
|
@@ -144,11 +144,11 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
|
|
|
144
144
|
| `forge plan` | Bounded execution plan with risk + rollback |
|
|
145
145
|
| `forge chat` | Terminal copilot over forge docs |
|
|
146
146
|
|
|
147
|
-
**
|
|
147
|
+
**59 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
|
|
148
148
|
|
|
149
149
|
---
|
|
150
150
|
|
|
151
|
-
## MCP Server — 10 Tools,
|
|
151
|
+
## MCP Server — 10 Tools, 116 Actions
|
|
152
152
|
|
|
153
153
|
Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aider, Devin, or any MCP-compatible agent:
|
|
154
154
|
|
|
@@ -168,7 +168,7 @@ Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aide
|
|
|
168
168
|
| Tool | Actions | What it does |
|
|
169
169
|
|------|---------|-------------|
|
|
170
170
|
| `welcome` | — | RECOMMENDED FIRST CALL: onboarding scan, score, narrative, capability tour |
|
|
171
|
-
| `explore` |
|
|
171
|
+
| `explore` | 17 | Analyze, understand, discover — recon/explain/call_graph/call_graph_summary/smell/lineage/harvest/synergy/scan/swarm/churn/surface_gaps/capability_scout/dead_code/maintainability/concept_bridge |
|
|
172
172
|
| `audit` | 23 | Quality gates, change safety, trust |
|
|
173
173
|
| `plan` | 10 | Orient + dev utilities — context/compose/policy/recipes/generate/apply/locate/commit/scaffold/steersman |
|
|
174
174
|
| `transmute` | 3 | **FLAGSHIP** spaghetti→certified pipeline — auto/cherry/finalize |
|
|
@@ -191,10 +191,10 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
191
191
|
| Metric | Value |
|
|
192
192
|
|--------|-------|
|
|
193
193
|
|
|
194
|
-
| MCP tools | **10 tools ·
|
|
195
|
-
| CLI verbs | **
|
|
196
|
-
| Source files | **
|
|
197
|
-
| Tests | **
|
|
194
|
+
| MCP tools | **10 tools · 116 actions** |
|
|
195
|
+
| CLI verbs | **59** |
|
|
196
|
+
| Source files | **232** (~47K LOC) |
|
|
197
|
+
| Tests | **1588 passing** across **115 test files** |
|
|
198
198
|
| Lean4 formal proofs | **872 theorems** (mathematically verified core logic) |
|
|
199
199
|
| Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
|
|
200
200
|
| Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
|
|
@@ -46,7 +46,7 @@ jobs:
|
|
|
46
46
|
run: |
|
|
47
47
|
pip install atomadic-forge # PyPI (preferred)
|
|
48
48
|
# Or pin to an exact tag:
|
|
49
|
-
# pip install "git+https://github.com/atomadictech/atomadic-forge@v0.
|
|
49
|
+
# pip install "git+https://github.com/atomadictech/atomadic-forge@v0.77.0"
|
|
50
50
|
# Or vendor wheels: pip install --no-index --find-links wheels/ atomadic-forge
|
|
51
51
|
|
|
52
52
|
- name: Wire scan (upward-import discipline)
|
|
@@ -97,7 +97,7 @@ forge-certify:
|
|
|
97
97
|
image: python:3.11-slim
|
|
98
98
|
timeout: 10 minutes
|
|
99
99
|
before_script:
|
|
100
|
-
- pip install "git+https://github.com/atomadictech/atomadic-forge@v0.
|
|
100
|
+
- pip install "git+https://github.com/atomadictech/atomadic-forge@v0.77.0"
|
|
101
101
|
script:
|
|
102
102
|
- forge wire src/your_package --fail-on-violations --json > wire.json
|
|
103
103
|
- forge certify . --package your_package --fail-under 75 --json > certify.json
|
|
@@ -156,7 +156,7 @@ Then in **the consuming repo's** `.pre-commit-config.yaml`:
|
|
|
156
156
|
```yaml
|
|
157
157
|
repos:
|
|
158
158
|
- repo: https://github.com/atomadictech/atomadic-forge
|
|
159
|
-
rev: v0.
|
|
159
|
+
rev: v0.77.0
|
|
160
160
|
hooks:
|
|
161
161
|
- id: forge-wire
|
|
162
162
|
- id: forge-certify
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Atomadic Forge — Command Reference
|
|
2
2
|
|
|
3
|
-
All verbs available in the `forge` CLI as of 0.
|
|
3
|
+
All verbs available in the `forge` CLI as of 0.77.0
|
|
4
4
|
|
|
5
5
|
> For the structured per-verb reference (with options, examples, and
|
|
6
6
|
> output samples), see [02-commands.md](02-commands.md). This page is
|
|
@@ -39,7 +39,7 @@ Forge certify scores out of **100** in two layers:
|
|
|
39
39
|
JS / TS packages cap at **60/100** today: they earn the four
|
|
40
40
|
structural axes, but the +25 runtime-import smoke and +30 behavioural
|
|
41
41
|
pytest are Python-only. Wiring `npm test` / Vitest into the
|
|
42
|
-
behavioural axis is on the post-v0.
|
|
42
|
+
behavioural axis is on the post-v0.77.0 roadmap.
|
|
43
43
|
|
|
44
44
|
---
|
|
45
45
|
|
|
@@ -131,7 +131,7 @@ runtime dependency makes the package unusable.
|
|
|
131
131
|
|
|
132
132
|
**Why JS/TS does not get this gate yet.** AAM §5.4 (Threats to
|
|
133
133
|
Validity) explicitly flags polyglot runtime gating as a roadmap
|
|
134
|
-
item (post-v0.
|
|
134
|
+
item (post-v0.77.0): the equivalent for JS would be an `npm test`
|
|
135
135
|
invocation, which requires a Node toolchain we do not yet bundle.
|
|
136
136
|
|
|
137
137
|
**Citation.** AAM §5.1 (Core Pipeline Pseudocode); AAM §5.4 (Threats
|
|
@@ -16,7 +16,7 @@ See `vscode-extension/README.md` for settings + usage.
|
|
|
16
16
|
|
|
17
17
|
## 2. MCP server (works with any MCP-aware assistant)
|
|
18
18
|
|
|
19
|
-
Forge ships a fully-typed MCP server with **10 tools dispatching
|
|
19
|
+
Forge ships a fully-typed MCP server with **10 tools dispatching 116 actions** spanning recon, wire, certify, plan, enforce, emergent, synergy, wisdom, lineage, hive coordination, and AAAA-Nexus trust gates. Any of these clients can attach:
|
|
20
20
|
|
|
21
21
|
- **Claude Code** (Anthropic CLI) — `claude mcp add atomadic-forge -- forge mcp serve --project ${workspaceFolder}`
|
|
22
22
|
- **Cursor** — Settings → MCP Servers → add the same command above
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Forge MCP Tools Reference
|
|
2
2
|
|
|
3
|
-
Forge ships a Model Context Protocol server exposing **10 tools dispatching
|
|
3
|
+
Forge ships a Model Context Protocol server exposing **10 tools dispatching 116 registry-callable actions**. Counts are auto-synced from `forge_metrics.json` by `doc-update`.
|
|
4
4
|
The per-tool table below lists the primary dispatch actions; the headline total also includes compatibility routes that keep older callers working.
|
|
5
5
|
All legacy tool names redirect automatically — existing callers keep working.
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ All legacy tool names redirect automatically — existing callers keep working.
|
|
|
17
17
|
| Tool | Actions | Purpose |
|
|
18
18
|
|------|---------|---------|
|
|
19
19
|
| [`welcome`](#welcome) | — | Session onboarding: scan, score, narrative, capability tour |
|
|
20
|
-
| [`explore`](#explore) |
|
|
20
|
+
| [`explore`](#explore) | 17 | Analyze and understand a codebase — recon, call graphs, smells, harvest, discovery |
|
|
21
21
|
| [`audit`](#audit) | 23 | Quality gates, change safety, trust verification |
|
|
22
22
|
| [`plan`](#plan) | 10 | Dev orientation and utilities — context packs, recipes, commit messages, steersman packs |
|
|
23
23
|
| [`transmute`](#transmute) | 3 | **FLAGSHIP** spaghetti-to-certified pipeline |
|
|
@@ -30,7 +30,7 @@ referenced from the Receipt.
|
|
|
30
30
|
{
|
|
31
31
|
"schema_version": "atomadic-forge.receipt/v1",
|
|
32
32
|
"generated_at_utc": "2026-04-28T17:42:11Z",
|
|
33
|
-
"forge_version": "0.
|
|
33
|
+
"forge_version": "0.77.0",
|
|
34
34
|
"verdict": "PASS",
|
|
35
35
|
"project": { ... },
|
|
36
36
|
"certify": { ... },
|
|
@@ -108,7 +108,7 @@ cited:
|
|
|
108
108
|
{
|
|
109
109
|
"schema_version": "atomadic-forge.receipt/v1",
|
|
110
110
|
"generated_at_utc": "2026-04-28T17:42:11Z",
|
|
111
|
-
"forge_version": "0.
|
|
111
|
+
"forge_version": "0.77.0",
|
|
112
112
|
"verdict": "PASS",
|
|
113
113
|
|
|
114
114
|
"project": {
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "atomadic-forge"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.77.0"
|
|
8
8
|
description = "Atomadic Forge — absorb, enforce, emerge. Polyglot (Python · JavaScript/TypeScript · Rust · Go · Swift · Kotlin) architecture guardian for AI-generated code."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
{atomadic_forge-0.75.3 → atomadic_forge-0.77.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py
RENAMED
|
@@ -62,6 +62,7 @@ def select_items(scout_report: dict, *, names: Iterable[str] | None = None,
|
|
|
62
62
|
"confidence": _confidence_of(s),
|
|
63
63
|
"reasons": _reasons_for(s),
|
|
64
64
|
})
|
|
65
|
+
items = _dedup_methods_under_class(items)
|
|
65
66
|
return {
|
|
66
67
|
"schema_version": "atomadic-forge.cherry/v1",
|
|
67
68
|
"source_repo": scout_report.get("repo", ""),
|
|
@@ -69,6 +70,32 @@ def select_items(scout_report: dict, *, names: Iterable[str] | None = None,
|
|
|
69
70
|
}
|
|
70
71
|
|
|
71
72
|
|
|
73
|
+
def _dedup_methods_under_class(items: list[dict]) -> list[dict]:
|
|
74
|
+
"""Collapse ``Class.method`` items when ``Class`` is already selected.
|
|
75
|
+
|
|
76
|
+
The 47-file class explosion fix: scout enumerates a class plus every
|
|
77
|
+
public method as separate symbols (``IndexStore`` and
|
|
78
|
+
``IndexStore.add``, ``IndexStore.search``, ...). Without this filter,
|
|
79
|
+
finalize copies the same source file once per qualname under
|
|
80
|
+
different slugs, exploding a single class into N near-identical files.
|
|
81
|
+
|
|
82
|
+
When the parent class is in the manifest, we drop its methods —
|
|
83
|
+
they ride along inside the class body. When the parent is absent
|
|
84
|
+
(rare; scout dropped it), we keep the methods so capability isn't
|
|
85
|
+
lost.
|
|
86
|
+
"""
|
|
87
|
+
class_quals = {it["qualname"] for it in items if "." not in it["qualname"]}
|
|
88
|
+
out: list[dict] = []
|
|
89
|
+
for it in items:
|
|
90
|
+
qual = it["qualname"]
|
|
91
|
+
if "." in qual:
|
|
92
|
+
parent = qual.rsplit(".", 1)[0]
|
|
93
|
+
if parent in class_quals:
|
|
94
|
+
continue
|
|
95
|
+
out.append(it)
|
|
96
|
+
return out
|
|
97
|
+
|
|
98
|
+
|
|
72
99
|
def _confidence_of(symbol: dict) -> float:
|
|
73
100
|
# High confidence when name tokens drove the decision; lower when we fell
|
|
74
101
|
# back to the kind-default (function→a1, class→a2). Cheap proxy: complexity
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Grafted from search_symbols.py (lines 410–423) by `forge graft`."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import math
|
|
5
|
+
|
|
6
|
+
SCHEMA_VERSION_GRAFT_COSINE_SIMILARITY = "atomadic-forge.graft.cosine_similarity/v1"
|
|
7
|
+
|
|
8
|
+
def cosine_similarity(a: list[float], b: list[float]) -> float:
|
|
9
|
+
"""Cosine similarity in pure Python (no numpy).
|
|
10
|
+
|
|
11
|
+
Returns 0.0 if either vector is zero-length or the lists differ in size.
|
|
12
|
+
Uses ``math.sqrt`` and ``sum()`` — no external deps.
|
|
13
|
+
"""
|
|
14
|
+
if not a or not b or len(a) != len(b):
|
|
15
|
+
return 0.0
|
|
16
|
+
dot = sum(x * y for x, y in zip(a, b, strict=False))
|
|
17
|
+
norm_a = math.sqrt(sum(x * x for x in a))
|
|
18
|
+
norm_b = math.sqrt(sum(y * y for y in b))
|
|
19
|
+
if norm_a == 0.0 or norm_b == 0.0:
|
|
20
|
+
return 0.0
|
|
21
|
+
return dot / (norm_a * norm_b)
|
|
22
|
+
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Zero LLM tokens. Reads forge_metrics.json, inspects MCP enum lists and CLI
|
|
4
4
|
command decorators, then rewrites bounded sections in README.md, CHANGELOG.md,
|
|
5
|
-
docs/IDE_INTEGRATION.md, WHITEPAPER.md,
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
docs/IDE_INTEGRATION.md, WHITEPAPER.md, docs/AGENTS_GUIDE.md,
|
|
6
|
+
tests/README.md, docs/CI_CD.md, docs/COMMANDS.md, docs/RECEIPT.md,
|
|
7
|
+
docs/FORMALIZATION.md, and docs/MCP_TOOLS.md programmatically. Every value
|
|
8
|
+
is derived from live code or the metrics artifact — no human-authored prose
|
|
9
|
+
is touched.
|
|
8
10
|
|
|
9
11
|
Updateable sections
|
|
10
12
|
-------------------
|
|
@@ -29,6 +31,26 @@ WHITEPAPER.md
|
|
|
29
31
|
docs/AGENTS_GUIDE.md
|
|
30
32
|
• Summary table rows matching ``| explore | NN actions |`` pattern (if present).
|
|
31
33
|
|
|
34
|
+
tests/README.md
|
|
35
|
+
• "NN test files covering N,NNN passing tests" line.
|
|
36
|
+
|
|
37
|
+
docs/CI_CD.md
|
|
38
|
+
• Git-pinned install URLs ``atomadic-forge@vX.Y.Z`` → current version.
|
|
39
|
+
• Pre-commit ``rev: vX.Y.Z`` pin → current version.
|
|
40
|
+
|
|
41
|
+
docs/COMMANDS.md
|
|
42
|
+
• "as of X.Y.Z" version anchor in header.
|
|
43
|
+
|
|
44
|
+
docs/RECEIPT.md
|
|
45
|
+
• ``"forge_version": "X.Y.Z"`` in example JSON payloads.
|
|
46
|
+
|
|
47
|
+
docs/FORMALIZATION.md
|
|
48
|
+
• ``post-vX.Y.Z`` roadmap anchors.
|
|
49
|
+
|
|
50
|
+
docs/MCP_TOOLS.md
|
|
51
|
+
• Header line ``NN tools dispatching NN registry-callable actions``.
|
|
52
|
+
• Per-tool action counts in the summary table.
|
|
53
|
+
|
|
32
54
|
Pure: no subprocess unless git is requested. No writes when dry_run=True.
|
|
33
55
|
"""
|
|
34
56
|
from __future__ import annotations
|
|
@@ -78,6 +100,33 @@ _DRIFT_TOOLS_RE = re.compile(r'(\d+)\s+MCP\s+tools')
|
|
|
78
100
|
_DRIFT_ACTIONS_RE = re.compile(r'dispatching\s+(\d+)\s+actions')
|
|
79
101
|
_DRIFT_TESTS_RE = re.compile(r'([\d,]+)\s+passing\s+tests')
|
|
80
102
|
|
|
103
|
+
# ── version-anchor regexes (update_version_anchors) ───────────────────────────
|
|
104
|
+
# tests/README.md: "NN test files covering N,NNN passing tests"
|
|
105
|
+
_TESTS_README_RE = re.compile(r'\d+ test files covering [\d,]+ passing tests')
|
|
106
|
+
|
|
107
|
+
# docs/CI_CD.md: git-pinned install URL and pre-commit rev pin
|
|
108
|
+
_CICD_GIT_URL_RE = re.compile(r'(atomadic-forge@)v[\d.]+')
|
|
109
|
+
_CICD_REV_RE = re.compile(r'(rev:\s*)v[\d.]+')
|
|
110
|
+
|
|
111
|
+
# docs/COMMANDS.md: "as of X.Y.Z" header anchor
|
|
112
|
+
_COMMANDS_VER_RE = re.compile(r'(as of )[\d.]+')
|
|
113
|
+
|
|
114
|
+
# docs/RECEIPT.md: forge_version in example JSON blocks (both occurrences)
|
|
115
|
+
_RECEIPT_VER_RE = re.compile(r'("forge_version":\s*")[\d.]+(")')
|
|
116
|
+
|
|
117
|
+
# docs/FORMALIZATION.md: "post-vX.Y.Z" roadmap anchors
|
|
118
|
+
_FORMALIZATION_POST_VER_RE = re.compile(r'post-v[\d.]+')
|
|
119
|
+
|
|
120
|
+
# docs/MCP_TOOLS.md: header count line
|
|
121
|
+
_MCP_TOOLS_HEADER_RE = re.compile(
|
|
122
|
+
r'\d+ tools dispatching \d+ registry-callable actions'
|
|
123
|
+
)
|
|
124
|
+
# docs/MCP_TOOLS.md: per-tool summary table rows
|
|
125
|
+
# Matches: | [`toolname`](#anchor) | NN | description |
|
|
126
|
+
_MCP_TOOLS_ROW_RE = re.compile(
|
|
127
|
+
r'(\|\s*\[`(?P<tool>[^`]+)`\]\(#[^)]+\)\s*\|\s*)(?P<count>\d+)(\s*\|)'
|
|
128
|
+
)
|
|
129
|
+
|
|
81
130
|
|
|
82
131
|
# ── helpers ───────────────────────────────────────────────────────────────────
|
|
83
132
|
|
|
@@ -602,12 +651,146 @@ def detect_doc_drift(project_root: Path) -> dict[str, Any]:
|
|
|
602
651
|
}
|
|
603
652
|
|
|
604
653
|
|
|
654
|
+
# ── version-anchor updater ────────────────────────────────────────────────────
|
|
655
|
+
|
|
656
|
+
def update_version_anchors(
|
|
657
|
+
project_root: Path,
|
|
658
|
+
*,
|
|
659
|
+
dry_run: bool = False,
|
|
660
|
+
) -> dict[str, Any]:
|
|
661
|
+
"""Rewrite version-pinned strings in docs that drift on every release.
|
|
662
|
+
|
|
663
|
+
Covers tests/README.md, docs/CI_CD.md, docs/COMMANDS.md, docs/RECEIPT.md,
|
|
664
|
+
docs/FORMALIZATION.md, and docs/MCP_TOOLS.md. Each pattern is keyed to
|
|
665
|
+
live forge_metrics.json so no version string needs manual updating.
|
|
666
|
+
"""
|
|
667
|
+
metrics = _load_metrics(project_root)
|
|
668
|
+
if not metrics:
|
|
669
|
+
return {
|
|
670
|
+
"schema_version": SCHEMA_VERSION_DOC_AUTO_UPDATE_V1,
|
|
671
|
+
"available": False,
|
|
672
|
+
"reason": "forge_metrics.json not found or empty",
|
|
673
|
+
"changes": [],
|
|
674
|
+
"dry_run": dry_run,
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
version = metrics.get("package_version", "")
|
|
678
|
+
test_files = metrics.get("test_files", "?")
|
|
679
|
+
test_functions = metrics.get("test_functions", "?")
|
|
680
|
+
mcp_tools = metrics.get("mcp_tools", "?")
|
|
681
|
+
mcp_actions = metrics.get("mcp_actions", "?")
|
|
682
|
+
changes: list[str] = []
|
|
683
|
+
|
|
684
|
+
# ── tests/README.md ───────────────────────────────────────────────────────
|
|
685
|
+
tests_readme = project_root / "tests" / "README.md"
|
|
686
|
+
if tests_readme.exists():
|
|
687
|
+
text = tests_readme.read_text(encoding="utf-8")
|
|
688
|
+
new_text = _TESTS_README_RE.sub(
|
|
689
|
+
f"{test_files} test files covering {test_functions} passing tests",
|
|
690
|
+
text,
|
|
691
|
+
)
|
|
692
|
+
if new_text != text:
|
|
693
|
+
if not dry_run:
|
|
694
|
+
tests_readme.write_text(new_text, encoding="utf-8")
|
|
695
|
+
changes.append(
|
|
696
|
+
f"tests/README.md: test counts → {test_files} files / {test_functions} tests"
|
|
697
|
+
)
|
|
698
|
+
|
|
699
|
+
if not version:
|
|
700
|
+
return {
|
|
701
|
+
"schema_version": SCHEMA_VERSION_DOC_AUTO_UPDATE_V1,
|
|
702
|
+
"available": True,
|
|
703
|
+
"changes": changes,
|
|
704
|
+
"warnings": ["package_version missing — skipped version-pinned files"],
|
|
705
|
+
"dry_run": dry_run,
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
# ── docs/CI_CD.md ─────────────────────────────────────────────────────────
|
|
709
|
+
cicd_path = project_root / "docs" / "CI_CD.md"
|
|
710
|
+
if cicd_path.exists():
|
|
711
|
+
text = cicd_path.read_text(encoding="utf-8")
|
|
712
|
+
new_text = _CICD_GIT_URL_RE.sub(rf"\g<1>v{version}", text)
|
|
713
|
+
new_text = _CICD_REV_RE.sub(rf"\g<1>v{version}", new_text)
|
|
714
|
+
if new_text != text:
|
|
715
|
+
if not dry_run:
|
|
716
|
+
cicd_path.write_text(new_text, encoding="utf-8")
|
|
717
|
+
changes.append(f"docs/CI_CD.md: pinned version → v{version}")
|
|
718
|
+
|
|
719
|
+
# ── docs/COMMANDS.md ──────────────────────────────────────────────────────
|
|
720
|
+
commands_path = project_root / "docs" / "COMMANDS.md"
|
|
721
|
+
if commands_path.exists():
|
|
722
|
+
text = commands_path.read_text(encoding="utf-8")
|
|
723
|
+
new_text = _COMMANDS_VER_RE.sub(rf"\g<1>{version}", text)
|
|
724
|
+
if new_text != text:
|
|
725
|
+
if not dry_run:
|
|
726
|
+
commands_path.write_text(new_text, encoding="utf-8")
|
|
727
|
+
changes.append(f"docs/COMMANDS.md: version anchor → {version}")
|
|
728
|
+
|
|
729
|
+
# ── docs/RECEIPT.md ───────────────────────────────────────────────────────
|
|
730
|
+
receipt_path = project_root / "docs" / "RECEIPT.md"
|
|
731
|
+
if receipt_path.exists():
|
|
732
|
+
text = receipt_path.read_text(encoding="utf-8")
|
|
733
|
+
new_text = _RECEIPT_VER_RE.sub(rf'\g<1>{version}\g<2>', text)
|
|
734
|
+
if new_text != text:
|
|
735
|
+
if not dry_run:
|
|
736
|
+
receipt_path.write_text(new_text, encoding="utf-8")
|
|
737
|
+
changes.append(f"docs/RECEIPT.md: forge_version → {version}")
|
|
738
|
+
|
|
739
|
+
# ── docs/FORMALIZATION.md ─────────────────────────────────────────────────
|
|
740
|
+
formalization_path = project_root / "docs" / "FORMALIZATION.md"
|
|
741
|
+
if formalization_path.exists():
|
|
742
|
+
text = formalization_path.read_text(encoding="utf-8")
|
|
743
|
+
new_text = _FORMALIZATION_POST_VER_RE.sub(f"post-v{version}", text)
|
|
744
|
+
if new_text != text:
|
|
745
|
+
if not dry_run:
|
|
746
|
+
formalization_path.write_text(new_text, encoding="utf-8")
|
|
747
|
+
changes.append(f"docs/FORMALIZATION.md: post-version anchors → post-v{version}")
|
|
748
|
+
|
|
749
|
+
# ── docs/MCP_TOOLS.md ─────────────────────────────────────────────────────
|
|
750
|
+
mcp_tools_path = project_root / "docs" / "MCP_TOOLS.md"
|
|
751
|
+
if mcp_tools_path.exists() and mcp_tools != "?" and mcp_actions != "?":
|
|
752
|
+
text = mcp_tools_path.read_text(encoding="utf-8")
|
|
753
|
+
# Header line
|
|
754
|
+
new_text = _MCP_TOOLS_HEADER_RE.sub(
|
|
755
|
+
f"{mcp_tools} tools dispatching {mcp_actions} registry-callable actions",
|
|
756
|
+
text,
|
|
757
|
+
)
|
|
758
|
+
# Per-tool summary table rows
|
|
759
|
+
action_counts = _count_mcp_actions_per_tool(project_root)
|
|
760
|
+
|
|
761
|
+
def _replace_mcp_tools_row(match: re.Match[str]) -> str:
|
|
762
|
+
tool = match.group("tool")
|
|
763
|
+
if tool not in action_counts:
|
|
764
|
+
return match.group(0)
|
|
765
|
+
new_count = str(action_counts[tool])
|
|
766
|
+
if match.group("count") == new_count:
|
|
767
|
+
return match.group(0)
|
|
768
|
+
return match.group(1) + new_count + match.group(4)
|
|
769
|
+
|
|
770
|
+
new_text = _MCP_TOOLS_ROW_RE.sub(_replace_mcp_tools_row, new_text)
|
|
771
|
+
if new_text != text:
|
|
772
|
+
if not dry_run:
|
|
773
|
+
mcp_tools_path.write_text(new_text, encoding="utf-8")
|
|
774
|
+
changes.append(
|
|
775
|
+
f"docs/MCP_TOOLS.md: header/rows → {mcp_tools} tools / {mcp_actions} actions"
|
|
776
|
+
)
|
|
777
|
+
|
|
778
|
+
return {
|
|
779
|
+
"schema_version": SCHEMA_VERSION_DOC_AUTO_UPDATE_V1,
|
|
780
|
+
"available": True,
|
|
781
|
+
"changes": changes,
|
|
782
|
+
"dry_run": dry_run,
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
|
|
605
786
|
# ── main entry point ──────────────────────────────────────────────────────────
|
|
606
787
|
|
|
607
788
|
def run_doc_auto_update(
|
|
608
789
|
project_root: Path,
|
|
609
790
|
*,
|
|
610
|
-
sections: tuple[str, ...] = (
|
|
791
|
+
sections: tuple[str, ...] = (
|
|
792
|
+
"readme", "changelog", "extended_docs", "version_anchors"
|
|
793
|
+
),
|
|
611
794
|
dry_run: bool = False,
|
|
612
795
|
) -> dict[str, Any]:
|
|
613
796
|
"""Run all doc auto-update passes.
|
|
@@ -615,9 +798,13 @@ def run_doc_auto_update(
|
|
|
615
798
|
Args:
|
|
616
799
|
project_root: Repository root.
|
|
617
800
|
sections: Which sections to update — any combination of
|
|
618
|
-
``"readme"``, ``"changelog"``,
|
|
619
|
-
Defaults to all
|
|
620
|
-
IDE_INTEGRATION.md,
|
|
801
|
+
``"readme"``, ``"changelog"``, ``"extended_docs"``, and
|
|
802
|
+
``"version_anchors"``. Defaults to all four.
|
|
803
|
+
``"extended_docs"`` patches IDE_INTEGRATION.md,
|
|
804
|
+
WHITEPAPER.md, and AGENTS_GUIDE.md.
|
|
805
|
+
``"version_anchors"`` patches tests/README.md,
|
|
806
|
+
docs/CI_CD.md, docs/COMMANDS.md, docs/RECEIPT.md,
|
|
807
|
+
docs/FORMALIZATION.md, and docs/MCP_TOOLS.md.
|
|
621
808
|
dry_run: If True, return what would change without writing.
|
|
622
809
|
|
|
623
810
|
Returns dict with ``schema_version``, ``results`` per section,
|
|
@@ -642,6 +829,11 @@ def run_doc_auto_update(
|
|
|
642
829
|
results["extended_docs"] = r
|
|
643
830
|
total += len(r.get("changes", []))
|
|
644
831
|
|
|
832
|
+
if "version_anchors" in sections:
|
|
833
|
+
r = update_version_anchors(root, dry_run=dry_run)
|
|
834
|
+
results["version_anchors"] = r
|
|
835
|
+
total += len(r.get("changes", []))
|
|
836
|
+
|
|
645
837
|
# Self-verify: residual drift after all writes confirms every pattern fired.
|
|
646
838
|
post_drift = detect_doc_drift(root) if not dry_run else {"drift_count": 0}
|
|
647
839
|
|