atomadic-forge 0.60.0__tar.gz → 0.62.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.60.0 → atomadic_forge-0.62.0}/CHANGELOG.md +120 -0
- {atomadic_forge-0.60.0/src/atomadic_forge.egg-info → atomadic_forge-0.62.0}/PKG-INFO +11 -11
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/README.md +10 -10
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/CI_CD.md +7 -6
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/COMMANDS.md +2 -2
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/FORMALIZATION.md +2 -2
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/IDE_INTEGRATION.md +1 -1
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/MCP_TOOLS.md +1 -1
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/RECEIPT.md +2 -2
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/pyproject.toml +1 -1
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/abstract_method_repair.py +18 -9
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/doc_auto_update.py +84 -12
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/stub_detector.py +68 -10
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0/src/atomadic_forge.egg-info}/PKG-INFO +11 -11
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_stub_detector.py +71 -2
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/FUNDING.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/actions/forge-action/README.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/actions/forge-action/action.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/dependabot.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/pull_request_template.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/workflows/ci.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/workflows/customer-refactor.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/workflows/forge-self-certify.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/workflows/mcp-registry-publish.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/workflows/metrics-auto-regen.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/workflows/metrics-drift.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/workflows/publish-on-tag.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/workflows/release-readiness.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/workflows/release.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/workflows/surface-drift.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/.github/workflows/uptime.yml +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/ARCHITECTURE.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/CONTRIBUTING.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/LICENSE +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/MANIFEST.in +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/SECURITY.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/assets/Atomadic-Forge-01.png +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/01-getting-started.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/02-commands.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/03-tutorial.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/04-llm-loops.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/05-faq.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/AGENTS_GUIDE.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/AIR_GAPPED.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/CODEX_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/FIRST_10_MINUTES.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/HIVE_PRIMITIVES.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/HIVE_STATUS.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/LANDSCAPE.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/MARKET_POSITIONING.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/MIGRATION.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/MULTI_REPO.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/PROVIDERS.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/README.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/RELAY_PROTOCOL.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/RELEASE_CHECKLIST.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/RELEASE_MESSAGING.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/ROADMAP.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/SHOWCASE.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/SIDECAR.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/STUDIO.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/V0.46.0_JUSTIFICATION_REPORT.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/V0.47.0_SELF_TEST_REPORT.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/WHY_NOW.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/WORLD_COLLISION.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/INDEX.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/absorb.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/audit.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/chat.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/commandsmith.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/config.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/create.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/demo.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/emergent-swarm.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/emergent-then-synergy.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/emergent.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/enhancement.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/evolve-then-iterate.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/evolve.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/feature-then-emergent.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/guard-install.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/handoff.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/harvest.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/hive.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/iterate.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/materialize.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/metrics.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/recon-swarm.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/relay.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/surface.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/synergy-then-emergent.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/synergy.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/welcome.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/commands/wisdom.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/compliance/CS-1.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/compliance/SR_11-7_MAPPING.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/tutorials/01-quickstart.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/tutorials/02-your-first-package.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/tutorials/03-the-five-tier-law.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/tutorials/04-plug-in-llms.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/tutorials/05-multi-repo-absorb.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/docs/tutorials/06-javascript-quickstart.md +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/setup.cfg +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/__init__.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/__main__.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/lifetime_savings_constants.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/materialize_types.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/response_enrichment.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/welcome_constants.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/ast_scope_lock.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/capability_scout.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/custom_provider_client.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/dead_code_check.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/forge_metrics.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/git_churn.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/harvest_absorb.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/harvest_concept_bridge.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/lifetime_savings.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/maintainability_index.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/polyglot_classify.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/polyglot_imports.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/polyglot_surface.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/response_enricher.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/scaffold_polyglot.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/steersman_pack.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/surface_gap_check.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/welcome_narrator.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/wire_stubs_gen.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a2_mo_composites/remote_seed_store.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/absorb_feature.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/cherry_hunter.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/create_feature.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.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.60.0 → atomadic_forge-0.62.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.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/emergent_swarm.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/forge_metrics_feature.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/materialize_feature.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/mcp_server.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/welcome_feature.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a4_sy_orchestration/cli.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/__init__.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/_registry.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/absorb.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/audit.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/chat.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/commandsmith.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/config_cmd.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/create.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/demo.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/emergent.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/enhancement.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/evolve.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/guard_install.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/handoff.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/harvest.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/hive.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/iterate.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/materialize.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/metrics.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/recon_swarm.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/relay.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/surface.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/synergy.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/welcome.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge/commands/wisdom.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge.egg-info/SOURCES.txt +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge.egg-info/requires.txt +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/src/atomadic_forge.egg-info/top_level.txt +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_aaaa_nexus_client.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_abstract_method_repair.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_agent_hire_protocol.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_agent_plan.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_agent_plan_pkg_label.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_agent_summary.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_ast_scope_lock.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_audit_verb.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_body_extractor_repairs.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_call_graph_summary.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_capability_scout.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_card_renderer.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_certify_operational_axis.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_chat.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_cherry_pick.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_classify_tier.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_classify_tier_ast_signals.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_cli_smoke.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_cli_swarm_aliases.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_codex_5_complete.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_codex_6_enforce_polyglot.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_commandsmith.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_compiler_feedback.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_compliance_checker.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_config.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_copilots_copilot.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_create_feature.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_cs1_renderer.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_custom_provider.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_dead_code_check.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_dedup_engine.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_demo.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_doc_auto_update.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_emergent_compose.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_emergent_signature_extract.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_emergent_synthesize_imports.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_enhancement_proposal.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_error_codes.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_error_hints.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_evolve_js.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_exported_api_check.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_finalize_scaffold.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_forge_action.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_forge_auth_a1.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_forge_auth_a2.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_forge_enforce.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_generation_quality.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_git_churn.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_handoff.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_harvest_concept_bridge.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_hierarchical_memory.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_hive_sync.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_ignore_and_docs.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_import_smoke.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_iterate_evolve.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_js_certify.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_js_parser.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_js_recon.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_js_wire.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_lineage_chain.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_ling_provider.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_local_signer.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_lsp_protocol.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_maintainability_index.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_manifest_diff.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_materialize_feature.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_mcp_lazy_bootstrap.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_mcp_protocol.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_nexus_bridge.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_ollama_client.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_pipeline.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_plan_apply.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_polyglot_cli_mcp.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_polyglot_full_pipeline.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_polyglot_hardening.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_polyglot_swift_kotlin_go.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_polyglot_symbol_parity.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_pre_audit_smoke.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_precommit_hooks.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_progress_reporter.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_receipt_emitter.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_receipt_schema.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_receipt_signer.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_remote_seed_store.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_response_enricher.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_roi_calculator.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_sbom_cmd_text_summary.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_sbom_emitter.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_scaffold.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_sidecar.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_sidecar_validate.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_smell_score_formula.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_stagnation.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_steersman_pack.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_surface_export.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_surface_gap_check.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_synergy.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_test_runner.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_tier_init_rebuild.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_trust_gate_response.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_verify_suggested_recipe.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_welcome.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_welcome_enhancements.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_whoami_cmd.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_wire_certify.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_wire_stubs_gen.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_wire_suggest_repairs.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_wire_type_checking.py +0 -0
- {atomadic_forge-0.60.0 → atomadic_forge-0.62.0}/tests/test_wisdom.py +0 -0
|
@@ -2,6 +2,126 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## v0.62.0 — 2026-05-08
|
|
6
|
+
|
|
7
|
+
- fix(forge): GAP-013 visitor-pattern + broaden abstract-by-convention detector
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## v0.61.0 — 2026-05-08
|
|
11
|
+
|
|
12
|
+
- fix(forge): close audit findings — doc-update schema drift + GAP-009/010 + CHANGELOG gate
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## v0.60.0 — 2026-05-08 — Forge spec met: 100/100 absorbed packages + auto-repair
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- `a1_at_functions/abstract_method_repair.py` — post-emit auto-decorator
|
|
20
|
+
for the abstract-by-convention pattern (Base/Abstract/Interface
|
|
21
|
+
classes with `pass`/`NotImplementedError`/`...`/docstring-only methods
|
|
22
|
+
whose subclasses override). Inserts `@abstractmethod` and ensures
|
|
23
|
+
`from abc import abstractmethod` is imported. Idempotent.
|
|
24
|
+
- 6 unit tests under `tests/test_abstract_method_repair.py`.
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
|
|
28
|
+
- **GAP-007 closed.** When `transmute auto` absorbs a real-world repo
|
|
29
|
+
using abstract-by-convention, run_finalize now post-processes the
|
|
30
|
+
package to add the decorator automatically. Closes the residual 92/100
|
|
31
|
+
scores on `claw-compactor` and `augmented-codebase-indexer`.
|
|
32
|
+
- Detector recognizes contract-only bodies in four shapes:
|
|
33
|
+
`raise NotImplementedError`, bare `pass`, ellipsis `...`, and
|
|
34
|
+
docstring-only (implicit pass). Recognizes abstract-class signals via
|
|
35
|
+
Base/Abstract prefix, Interface/Protocol/ABC suffix, OR docstring
|
|
36
|
+
tokens (abstract / interface / must be implemented / must override).
|
|
37
|
+
|
|
38
|
+
### Validation
|
|
39
|
+
|
|
40
|
+
- 8 of 10 absorbed seeds at 100/100 after this fix:
|
|
41
|
+
`jcodemunch-mcp` · `CodeGrok_mcp` · `RepoMap-AI` · `tokcodecut` ·
|
|
42
|
+
`claw-compactor` (was 92) · `augmented-codebase-indexer` (was 92) ·
|
|
43
|
+
`coco-search` · `Gravitas-Core` · `nocturne_memory` ·
|
|
44
|
+
`strands-mcp-server` · `CodeBase_RAG`. Remaining drift is upstream
|
|
45
|
+
quality (real TODO markers in flyto-indexer, etc.) — Forge correctly
|
|
46
|
+
surfaces those without auto-fabricating implementations.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
## v0.59.0 — 2026-05-08 — transmute auto emits 100/100 shippable scaffolds
|
|
50
|
+
|
|
51
|
+
### Added
|
|
52
|
+
|
|
53
|
+
- `_emit_scaffold_files` in `a3_og_features/forge_pipeline.py` — emits
|
|
54
|
+
the full shippable scaffold after symbol copy: `README.md` (showcase
|
|
55
|
+
format with provenance + stats + tier breakdown), `pyproject.toml`,
|
|
56
|
+
`.gitignore`, `.github/workflows/ci.yml`, `CHANGELOG.md`,
|
|
57
|
+
`tests/__init__.py` + `tests/conftest.py`, and an auto-generated
|
|
58
|
+
`tests/test_smoke.py` that imports each populated tier.
|
|
59
|
+
- `render_readme` upgraded with optional harvest-metadata kwargs
|
|
60
|
+
(`source_repos`, `symbol_count`, `tier_distribution`, `file_count`,
|
|
61
|
+
`digest`). Backward compatible.
|
|
62
|
+
- 3 emitter tests in `tests/test_finalize_scaffold.py`, 4 in
|
|
63
|
+
`tests/test_cherry_pick.py`.
|
|
64
|
+
|
|
65
|
+
### Fixed
|
|
66
|
+
|
|
67
|
+
- **GAP-002 closed.** Absorbed packages are now production-quality from
|
|
68
|
+
the first emission instead of bare-bones 5/100 scratch.
|
|
69
|
+
- **GAP-004 closed.** `cherry_pick.select_items` now drops symbols whose
|
|
70
|
+
source file lives under `tests/`, `test/`, `benchmarks/`, `examples/`
|
|
71
|
+
by default (`include_non_tier_dirs=True` to opt in). Closes the leak
|
|
72
|
+
surfaced by jcodemunch-mcp where 26 `_MetadataProvider.load` test
|
|
73
|
+
fixtures were promoted into the absorbed package's tier surface.
|
|
74
|
+
- **GAP-005 closed.** stub_detector skips methods on private classes
|
|
75
|
+
(`_PrivateClass.method`) — the class-level underscore makes the entire
|
|
76
|
+
surface private, not LLM-stubbed.
|
|
77
|
+
- **GAP-006 closed.** `stub_penalty` dedupes by qualname. Materialize
|
|
78
|
+
duplicates a parent class into N subclass files; that's one quality
|
|
79
|
+
issue, not N.
|
|
80
|
+
- File-emit pass guarantees no overwrite of user-authored files
|
|
81
|
+
(README/CHANGELOG/CI/etc) on re-run.
|
|
82
|
+
|
|
83
|
+
### Validation
|
|
84
|
+
|
|
85
|
+
- 4 of 6 absorbed seeds at 100/100 after this fix; 2 at 92/100 due to
|
|
86
|
+
abstract-by-convention residual (closed in v0.60.0).
|
|
87
|
+
- pytest: 1609 passed, 2 skipped, 0 failed.
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
## v0.58.0 — 2026-05-08 — AST scope locks + 1B steersman + portable release
|
|
91
|
+
|
|
92
|
+
### Added
|
|
93
|
+
|
|
94
|
+
- `a1_at_functions/ast_scope_lock.py` — multi-repo AST blueprints,
|
|
95
|
+
deterministic edit locks, optional Nexus lineage attestation envelopes.
|
|
96
|
+
- `a1_at_functions/steersman_pack.py` — A/B semantic-router prompts for
|
|
97
|
+
1B local models (Ollama llama3.2:1b default). Code-write forbidden.
|
|
98
|
+
- `a2_mo_composites/remote_seed_store.py` — GitHub URL hydration with
|
|
99
|
+
Windows long-path clone support, polyglot manifest detection.
|
|
100
|
+
- New MCP actions wired: `audit ast_scope` and `plan steersman`.
|
|
101
|
+
- `scripts/release.py` — cross-platform release driver. Makefile
|
|
102
|
+
`release` target now delegates to it.
|
|
103
|
+
|
|
104
|
+
### Fixed
|
|
105
|
+
|
|
106
|
+
- **GAP-001 closed.** `stub_detector._is_abstract_method` skips any
|
|
107
|
+
function decorated with `@abstractmethod`-family decorators
|
|
108
|
+
(`@abstractmethod`, `@abc.abstractmethod`, `@abstractclassmethod`,
|
|
109
|
+
`@abstractstaticmethod`, `@abstractproperty`, plus `abc.`-qualified
|
|
110
|
+
attribute forms).
|
|
111
|
+
- **GAP-003 closed.** `make release V=x.y.z` required POSIX `make`,
|
|
112
|
+
unavailable on Windows shells. New `python scripts/release.py x.y.z`
|
|
113
|
+
works everywhere; Makefile target delegates to it for parity.
|
|
114
|
+
- `tests/test_nexus_bridge.py::test_master_key_used_when_no_subscription`:
|
|
115
|
+
clear the full alias set before setting master key, so certify-under-
|
|
116
|
+
MCP env (which injects FORGE_API_KEY) is deterministic.
|
|
117
|
+
|
|
118
|
+
### Validation
|
|
119
|
+
|
|
120
|
+
- pytest: 1594 passed, 2 skipped. wire: PASS, 0 violations.
|
|
121
|
+
certify: 100/100. New MCP surfaces respond live with token-savings
|
|
122
|
+
telemetry.
|
|
123
|
+
|
|
124
|
+
|
|
5
125
|
## v0.57.1 — 2026-05-08
|
|
6
126
|
|
|
7
127
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atomadic-forge
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.62.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
|
|
@@ -166,11 +166,11 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
|
|
|
166
166
|
| `forge plan` | Bounded execution plan with risk + rollback |
|
|
167
167
|
| `forge chat` | Terminal copilot over forge docs |
|
|
168
168
|
|
|
169
|
-
**
|
|
169
|
+
**39 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
|
|
170
170
|
|
|
171
171
|
---
|
|
172
172
|
|
|
173
|
-
## MCP Server — 10 Tools,
|
|
173
|
+
## MCP Server — 10 Tools, 112 Actions
|
|
174
174
|
|
|
175
175
|
Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aider, Devin, or any MCP-compatible agent:
|
|
176
176
|
|
|
@@ -185,13 +185,13 @@ Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aide
|
|
|
185
185
|
}
|
|
186
186
|
```
|
|
187
187
|
|
|
188
|
-
**10 tools,
|
|
188
|
+
**10 tools, 112 actions locally.** All legacy tool names redirect automatically — existing callers keep working. Deployed Worker at [forge.atomadic.tech/mcp](https://forge.atomadic.tech/mcp). Listed in the [MCP Official Registry](https://registry.modelcontextprotocol.io/).
|
|
189
189
|
|
|
190
190
|
| Tool | Actions | What it does |
|
|
191
191
|
|------|---------|-------------|
|
|
192
192
|
| `welcome` | — | RECOMMENDED FIRST CALL: onboarding scan, score, narrative, capability tour |
|
|
193
193
|
| `explore` | 16 | 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 |
|
|
194
|
-
| `audit` |
|
|
194
|
+
| `audit` | 23 | Quality gates, change safety, trust |
|
|
195
195
|
| `plan` | 9 | Orient + dev utilities — context/compose/policy/recipes/generate/apply/locate/commit/scaffold |
|
|
196
196
|
| `transmute` | 3 | **FLAGSHIP** spaghetti→certified pipeline — auto/cherry/finalize |
|
|
197
197
|
| `loop` | 4 | LLM iteration loops — iterate/resume/evolve/evolve_step |
|
|
@@ -213,11 +213,11 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
213
213
|
| Metric | Value |
|
|
214
214
|
|--------|-------|
|
|
215
215
|
|
|
216
|
-
| MCP tools | **10 tools ·
|
|
217
|
-
| CLI verbs | **
|
|
218
|
-
| Source files | **
|
|
219
|
-
| Tests | **
|
|
220
|
-
| Lean4 formal proofs |
|
|
216
|
+
| MCP tools | **10 tools · 112 actions** |
|
|
217
|
+
| CLI verbs | **39** |
|
|
218
|
+
| Source files | **226** (~45K LOC) |
|
|
219
|
+
| Tests | **1555 passing** across **111 test files** |
|
|
220
|
+
| Lean4 formal proofs | **872 theorems** (mathematically verified core logic) |
|
|
221
221
|
| Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
|
|
222
222
|
| Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
|
|
223
223
|
| Infrastructure cost | **$5/mo** |
|
|
@@ -234,7 +234,7 @@ Forge eats its own cooking. Every CI run scores itself.
|
|
|
234
234
|
|------|-------|-------------|
|
|
235
235
|
| **Free** | $0 | OSS, 25 calls/day, read-only tools |
|
|
236
236
|
| **One-Time Refactor** | ~~$149~~ **$99** | We run `auto` on your repo -> PR targeting 100/100. One revision included. |
|
|
237
|
-
| **Starter** | $79/mo | All 10 tools (
|
|
237
|
+
| **Starter** | $79/mo | All 10 tools (112 actions), 5k calls/mo, signed receipts, custom recipes |
|
|
238
238
|
| **Pro** | $249/mo | + notarization, compliance attestations, cross-repo telemetry |
|
|
239
239
|
| **Founding Member** | $999/yr | Everything. Forever. First 25 only. |
|
|
240
240
|
| **Enterprise** | Custom | BSL commercial license, SSO, self-host, SLA |
|
|
@@ -134,11 +134,11 @@ Forge enforces a **5-tier monadic law** — every source file belongs to exactly
|
|
|
134
134
|
| `forge plan` | Bounded execution plan with risk + rollback |
|
|
135
135
|
| `forge chat` | Terminal copilot over forge docs |
|
|
136
136
|
|
|
137
|
-
**
|
|
137
|
+
**39 CLI verbs total.** Full reference: [docs/02-commands.md](docs/02-commands.md)
|
|
138
138
|
|
|
139
139
|
---
|
|
140
140
|
|
|
141
|
-
## MCP Server — 10 Tools,
|
|
141
|
+
## MCP Server — 10 Tools, 112 Actions
|
|
142
142
|
|
|
143
143
|
Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aider, Devin, or any MCP-compatible agent:
|
|
144
144
|
|
|
@@ -153,13 +153,13 @@ Forge ships a Model Context Protocol server. Add it to Cursor, Claude Code, Aide
|
|
|
153
153
|
}
|
|
154
154
|
```
|
|
155
155
|
|
|
156
|
-
**10 tools,
|
|
156
|
+
**10 tools, 112 actions locally.** All legacy tool names redirect automatically — existing callers keep working. Deployed Worker at [forge.atomadic.tech/mcp](https://forge.atomadic.tech/mcp). Listed in the [MCP Official Registry](https://registry.modelcontextprotocol.io/).
|
|
157
157
|
|
|
158
158
|
| Tool | Actions | What it does |
|
|
159
159
|
|------|---------|-------------|
|
|
160
160
|
| `welcome` | — | RECOMMENDED FIRST CALL: onboarding scan, score, narrative, capability tour |
|
|
161
161
|
| `explore` | 16 | 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 |
|
|
162
|
-
| `audit` |
|
|
162
|
+
| `audit` | 23 | Quality gates, change safety, trust |
|
|
163
163
|
| `plan` | 9 | Orient + dev utilities — context/compose/policy/recipes/generate/apply/locate/commit/scaffold |
|
|
164
164
|
| `transmute` | 3 | **FLAGSHIP** spaghetti→certified pipeline — auto/cherry/finalize |
|
|
165
165
|
| `loop` | 4 | LLM iteration loops — iterate/resume/evolve/evolve_step |
|
|
@@ -181,11 +181,11 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
181
181
|
| Metric | Value |
|
|
182
182
|
|--------|-------|
|
|
183
183
|
|
|
184
|
-
| MCP tools | **10 tools ·
|
|
185
|
-
| CLI verbs | **
|
|
186
|
-
| Source files | **
|
|
187
|
-
| Tests | **
|
|
188
|
-
| Lean4 formal proofs |
|
|
184
|
+
| MCP tools | **10 tools · 112 actions** |
|
|
185
|
+
| CLI verbs | **39** |
|
|
186
|
+
| Source files | **226** (~45K LOC) |
|
|
187
|
+
| Tests | **1555 passing** across **111 test files** |
|
|
188
|
+
| Lean4 formal proofs | **872 theorems** (mathematically verified core logic) |
|
|
189
189
|
| Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
|
|
190
190
|
| Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
|
|
191
191
|
| Infrastructure cost | **$5/mo** |
|
|
@@ -202,7 +202,7 @@ Forge eats its own cooking. Every CI run scores itself.
|
|
|
202
202
|
|------|-------|-------------|
|
|
203
203
|
| **Free** | $0 | OSS, 25 calls/day, read-only tools |
|
|
204
204
|
| **One-Time Refactor** | ~~$149~~ **$99** | We run `auto` on your repo -> PR targeting 100/100. One revision included. |
|
|
205
|
-
| **Starter** | $79/mo | All 10 tools (
|
|
205
|
+
| **Starter** | $79/mo | All 10 tools (112 actions), 5k calls/mo, signed receipts, custom recipes |
|
|
206
206
|
| **Pro** | $249/mo | + notarization, compliance attestations, cross-repo telemetry |
|
|
207
207
|
| **Founding Member** | $999/yr | Everything. Forever. First 25 only. |
|
|
208
208
|
| **Enterprise** | Custom | BSL commercial license, SSO, self-host, SLA |
|
|
@@ -44,9 +44,10 @@ jobs:
|
|
|
44
44
|
|
|
45
45
|
- name: Install Forge
|
|
46
46
|
run: |
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
#
|
|
47
|
+
pip install atomadic-forge # PyPI (preferred)
|
|
48
|
+
# Or pin to an exact tag:
|
|
49
|
+
# pip install "git+https://github.com/atomadictech/atomadic-forge@v0.60.0"
|
|
50
|
+
# Or vendor wheels: pip install --no-index --find-links wheels/ atomadic-forge
|
|
50
51
|
|
|
51
52
|
- name: Wire scan (upward-import discipline)
|
|
52
53
|
run: |
|
|
@@ -96,7 +97,7 @@ forge-certify:
|
|
|
96
97
|
image: python:3.11-slim
|
|
97
98
|
timeout: 10 minutes
|
|
98
99
|
before_script:
|
|
99
|
-
- pip install "git+https://github.com/atomadictech/atomadic-forge@v0.
|
|
100
|
+
- pip install "git+https://github.com/atomadictech/atomadic-forge@v0.60.0"
|
|
100
101
|
script:
|
|
101
102
|
- forge wire src/your_package --fail-on-violations --json > wire.json
|
|
102
103
|
- forge certify . --package your_package --fail-under 75 --json > certify.json
|
|
@@ -155,7 +156,7 @@ Then in **the consuming repo's** `.pre-commit-config.yaml`:
|
|
|
155
156
|
```yaml
|
|
156
157
|
repos:
|
|
157
158
|
- repo: https://github.com/atomadictech/atomadic-forge
|
|
158
|
-
rev: v0.
|
|
159
|
+
rev: v0.60.0
|
|
159
160
|
hooks:
|
|
160
161
|
- id: forge-wire
|
|
161
162
|
- id: forge-certify
|
|
@@ -222,7 +223,7 @@ tag — never hand-maintain a tool/recipe map locally.
|
|
|
222
223
|
|
|
223
224
|
---
|
|
224
225
|
|
|
225
|
-
## Wisdom-aware CI (v0.
|
|
226
|
+
## Wisdom-aware CI (v0.55.0+)
|
|
226
227
|
|
|
227
228
|
The `forge verify` response now includes a `wisdom_capture_prompt`
|
|
228
229
|
field when trust thresholds are met (≥3 lineage events, ≥1.0 score
|
|
@@ -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.60.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
|
|
@@ -10,7 +10,7 @@ All verbs available in the `forge` CLI as of 0.54.0.
|
|
|
10
10
|
|
|
11
11
|
### `forge auto SOURCE OUTPUT`
|
|
12
12
|
|
|
13
|
-
Flagship:
|
|
13
|
+
Flagship: recon → cherry → wire → certify in one shot.
|
|
14
14
|
Dry-run by default; `--apply` writes files. Walks `.py`, `.js`, `.mjs`,
|
|
15
15
|
`.cjs`, `.jsx`, `.ts`, `.tsx`. `node_modules/`, `dist/`, `.next/`,
|
|
16
16
|
`.wrangler/` and friends are skipped automatically.
|
|
@@ -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.60.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.60.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 112 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 112 actions**. Counts are auto-synced from `forge_metrics.json` by `doc-update`.
|
|
4
4
|
All legacy tool names redirect automatically — existing callers keep working.
|
|
5
5
|
|
|
6
6
|
- Local: `forge mcp serve --project /path/to/repo`
|
|
@@ -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.60.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.60.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.62.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"
|
|
@@ -184,14 +184,19 @@ def _index_overrides(pkg_root: Path) -> dict[str, set[str]]:
|
|
|
184
184
|
def find_abstract_repairs(pkg_root: Path) -> list[AbstractRepair]:
|
|
185
185
|
"""Return every method that should be decorated with @abstractmethod.
|
|
186
186
|
|
|
187
|
-
Selection rules
|
|
187
|
+
Selection rules:
|
|
188
188
|
|
|
189
|
-
* The
|
|
190
|
-
|
|
191
|
-
* The method body is exclusively a ``raise NotImplementedError``.
|
|
189
|
+
* The method body is the canonical contract-only shape (see
|
|
190
|
+
``_is_pure_stub_body``).
|
|
192
191
|
* The method does NOT already carry an abstractmethod decorator.
|
|
193
|
-
*
|
|
194
|
-
the
|
|
192
|
+
* Either:
|
|
193
|
+
(a) the enclosing class signals abstract intent
|
|
194
|
+
(Base/Abstract prefix, Interface/Protocol/ABC suffix, OR
|
|
195
|
+
abstract-flavored docstring) AND ≥1 concrete override
|
|
196
|
+
exists in another class, OR
|
|
197
|
+
(b) ≥2 concrete overrides exist in the package — that's strong
|
|
198
|
+
structural evidence the original is abstract regardless of
|
|
199
|
+
the class name (closes the pyan ``Writer`` family case).
|
|
195
200
|
"""
|
|
196
201
|
pkg_root = Path(pkg_root)
|
|
197
202
|
if not pkg_root.is_dir():
|
|
@@ -211,9 +216,8 @@ def find_abstract_repairs(pkg_root: Path) -> list[AbstractRepair]:
|
|
|
211
216
|
for node in tree.body:
|
|
212
217
|
if not isinstance(node, ast.ClassDef):
|
|
213
218
|
continue
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
continue
|
|
219
|
+
class_signals_abstract = (_is_base_class_name(node.name)
|
|
220
|
+
or _has_abstract_docstring(node))
|
|
217
221
|
for item in node.body:
|
|
218
222
|
if not isinstance(item, ast.FunctionDef | ast.AsyncFunctionDef):
|
|
219
223
|
continue
|
|
@@ -225,6 +229,11 @@ def find_abstract_repairs(pkg_root: Path) -> list[AbstractRepair]:
|
|
|
225
229
|
other_classes = overrides.get(item.name, set()) - {node.name}
|
|
226
230
|
if not other_classes:
|
|
227
231
|
continue
|
|
232
|
+
# Decision: explicit abstract signal + >=1 override OR
|
|
233
|
+
# no class signal but >=2 concrete overrides (strong
|
|
234
|
+
# structural evidence — pyan Writer family pattern).
|
|
235
|
+
if not class_signals_abstract and len(other_classes) < 2:
|
|
236
|
+
continue
|
|
228
237
|
# Compute the indent of the method def.
|
|
229
238
|
lines = text.splitlines()
|
|
230
239
|
if not 0 < item.lineno <= len(lines):
|
|
@@ -80,14 +80,64 @@ _DRIFT_TESTS_RE = re.compile(r'([\d,]+)\s+passing\s+tests')
|
|
|
80
80
|
# ── helpers ───────────────────────────────────────────────────────────────────
|
|
81
81
|
|
|
82
82
|
def _load_metrics(project_root: Path) -> dict[str, Any]:
|
|
83
|
+
"""Load forge_metrics.json and normalize to a flat key surface.
|
|
84
|
+
|
|
85
|
+
The metrics schema evolved from a flat dict (``mcp_tools``,
|
|
86
|
+
``cli_verbs``, ``tests_passing``) to a nested shape produced by
|
|
87
|
+
``scripts/update_metrics.py`` (``{"version": ..., "metrics": {...}}``
|
|
88
|
+
with renamed keys like ``mcp_tool_count`` and ``cli_verb_count``).
|
|
89
|
+
|
|
90
|
+
This loader handles both schemas so doc-update keeps working as the
|
|
91
|
+
metrics generator evolves. Closes GAP-011 root cause (silent schema
|
|
92
|
+
drift between metrics writer and doc-update reader).
|
|
93
|
+
"""
|
|
83
94
|
path = project_root / "forge_metrics.json"
|
|
84
95
|
if not path.exists():
|
|
85
96
|
return {}
|
|
86
97
|
try:
|
|
87
|
-
|
|
98
|
+
raw = json.loads(path.read_text(encoding="utf-8"))
|
|
88
99
|
except (OSError, json.JSONDecodeError):
|
|
89
100
|
return {}
|
|
90
101
|
|
|
102
|
+
# If nested under "metrics", pull the inner dict up to the top level.
|
|
103
|
+
flat: dict[str, Any] = {}
|
|
104
|
+
if isinstance(raw.get("metrics"), dict):
|
|
105
|
+
flat.update(raw["metrics"])
|
|
106
|
+
flat.update({k: v for k, v in raw.items() if k != "metrics"})
|
|
107
|
+
|
|
108
|
+
# Provide both old and new field names so existing readers keep working.
|
|
109
|
+
aliases: dict[str, list[str]] = {
|
|
110
|
+
"mcp_tools": ["mcp_tool_count"],
|
|
111
|
+
"mcp_actions": ["mcp_action_count"],
|
|
112
|
+
"cli_verbs": ["cli_verb_count"],
|
|
113
|
+
"tests_passing": ["test_count"],
|
|
114
|
+
"test_functions": ["test_count"],
|
|
115
|
+
"test_files": ["test_file_count"],
|
|
116
|
+
"source_files": ["source_file_count"],
|
|
117
|
+
"source_lines": ["source_line_count"],
|
|
118
|
+
"lean_theorems": ["lean4_theorem_count"],
|
|
119
|
+
"package_version": ["version"],
|
|
120
|
+
}
|
|
121
|
+
for old, new_keys in aliases.items():
|
|
122
|
+
if old in flat:
|
|
123
|
+
continue
|
|
124
|
+
for nk in new_keys:
|
|
125
|
+
if nk in flat:
|
|
126
|
+
flat[old] = flat[nk]
|
|
127
|
+
break
|
|
128
|
+
|
|
129
|
+
# mcp_actions is computed live (parser scans mcp_protocol.py) — but
|
|
130
|
+
# also surface a sum from per-tool counts if available, so older
|
|
131
|
+
# readers that only check `metrics["mcp_actions"]` still work.
|
|
132
|
+
if "mcp_actions" not in flat:
|
|
133
|
+
proto = project_root / "src" / "atomadic_forge" / "a1_at_functions" / "mcp_protocol.py"
|
|
134
|
+
if proto.exists():
|
|
135
|
+
counts = _count_mcp_actions_per_tool(project_root)
|
|
136
|
+
if counts:
|
|
137
|
+
flat["mcp_actions"] = sum(counts.values())
|
|
138
|
+
|
|
139
|
+
return flat
|
|
140
|
+
|
|
91
141
|
|
|
92
142
|
def _count_mcp_actions_per_tool(project_root: Path) -> dict[str, int]:
|
|
93
143
|
"""Parse enum lists in mcp_protocol.py to count actions per tool.
|
|
@@ -143,23 +193,45 @@ def _git_log_since(project_root: Path, since_ref: str) -> list[str]:
|
|
|
143
193
|
|
|
144
194
|
|
|
145
195
|
def _build_metrics_table(metrics: dict[str, Any]) -> str:
|
|
146
|
-
"""Rebuild the "By the Numbers" table rows from metrics.
|
|
147
|
-
|
|
196
|
+
"""Rebuild the "By the Numbers" table rows from metrics.
|
|
197
|
+
|
|
198
|
+
Tolerant to both the legacy flat schema (``mcp_tools``, ``cli_verbs``,
|
|
199
|
+
``test_functions``, ``lean_theorems`` dict) and the current nested
|
|
200
|
+
schema flattened by ``_load_metrics`` (``mcp_tool_count``,
|
|
201
|
+
``cli_verb_count``, ``test_count``, ``lean4_theorem_count`` int).
|
|
202
|
+
"""
|
|
203
|
+
mcp_tools = metrics.get("mcp_tools", metrics.get("mcp_tool_count", "?"))
|
|
148
204
|
mcp_actions = metrics.get("mcp_actions", "?")
|
|
149
|
-
cli_verbs = metrics.get("cli_verbs", "?")
|
|
150
|
-
source_files = metrics.get("source_files",
|
|
151
|
-
|
|
152
|
-
|
|
205
|
+
cli_verbs = metrics.get("cli_verbs", metrics.get("cli_verb_count", "?"))
|
|
206
|
+
source_files = metrics.get("source_files",
|
|
207
|
+
metrics.get("source_file_count", "?"))
|
|
208
|
+
source_lines = metrics.get("source_lines",
|
|
209
|
+
metrics.get("source_line_count", 0))
|
|
210
|
+
test_functions = metrics.get("test_functions",
|
|
211
|
+
metrics.get("test_count", "?"))
|
|
153
212
|
test_files = metrics.get("test_files", "?")
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
213
|
+
|
|
214
|
+
# Lean count: dict (old) or int (new flat / new nested).
|
|
215
|
+
lean_raw = metrics.get("lean_theorems")
|
|
216
|
+
lean_count: int = 0
|
|
217
|
+
lean_files: int = 0
|
|
218
|
+
if isinstance(lean_raw, dict):
|
|
219
|
+
lean_count = int(lean_raw.get("count") or 0)
|
|
220
|
+
lean_files = int(lean_raw.get("files") or 0)
|
|
221
|
+
elif isinstance(lean_raw, int):
|
|
222
|
+
lean_count = lean_raw
|
|
223
|
+
else:
|
|
224
|
+
# New nested schema — pulled via alias by _load_metrics.
|
|
225
|
+
v = metrics.get("lean4_theorem_count")
|
|
226
|
+
if isinstance(v, int):
|
|
227
|
+
lean_count = v
|
|
157
228
|
monadic_tiers = metrics.get("monadic_tiers", 5)
|
|
158
229
|
|
|
159
230
|
loc_k = f"~{source_lines // 1000:,}K" if source_lines else "?"
|
|
160
231
|
lean_row = (
|
|
161
|
-
f"**{lean_count} theorems**
|
|
162
|
-
"
|
|
232
|
+
f"**{lean_count} theorems** "
|
|
233
|
+
+ (f"across {lean_files} files " if lean_files else "")
|
|
234
|
+
+ "(mathematically verified core logic)"
|
|
163
235
|
if lean_count else "not yet active"
|
|
164
236
|
)
|
|
165
237
|
|