atomadic-forge 0.52.0__tar.gz → 0.52.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/workflows/metrics-auto-regen.yml +15 -14
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/workflows/metrics-drift.yml +5 -5
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/CHANGELOG.md +31 -9
- {atomadic_forge-0.52.0/src/atomadic_forge.egg-info → atomadic_forge-0.52.1}/PKG-INFO +2 -2
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/README.md +1 -1
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/AGENTS_GUIDE.md +1 -1
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/RECEIPT.md +3 -3
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/compliance/CMMC_AI_MAPPING.md +1 -1
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +2 -2
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/compliance/FDA_PCCP_MAPPING.md +1 -1
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/compliance/SR_11-7_MAPPING.md +1 -1
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/pyproject.toml +1 -1
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +1 -1
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/forge_metrics.py +13 -13
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/emergent_swarm.py +18 -5
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/forge_metrics_feature.py +16 -17
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/metrics.py +6 -6
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1/src/atomadic_forge.egg-info}/PKG-INFO +2 -2
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_card_renderer.py +1 -1
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_cli_smoke.py +4 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_compliance_checker.py +1 -1
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_cs1_renderer.py +2 -2
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_mcp_protocol.py +2 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/FUNDING.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/actions/forge-action/README.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/actions/forge-action/action.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/dependabot.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/pull_request_template.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/workflows/ci.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/workflows/customer-refactor.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/workflows/forge-self-certify.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/workflows/mcp-registry-publish.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/workflows/publish-on-tag.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/workflows/release-readiness.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/workflows/release.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/workflows/surface-drift.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/.github/workflows/uptime.yml +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/ARCHITECTURE.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/CONTRIBUTING.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/LICENSE +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/MANIFEST.in +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/SECURITY.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/assets/Atomadic-Forge-01.png +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/01-getting-started.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/02-commands.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/03-tutorial.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/04-llm-loops.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/05-faq.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/AIR_GAPPED.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/CI_CD.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/CODEX_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/COMMANDS.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/FIRST_10_MINUTES.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/FORMALIZATION.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/HIVE_PRIMITIVES.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/HIVE_STATUS.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/IDE_INTEGRATION.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/LANDSCAPE.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/MARKET_POSITIONING.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/MIGRATION.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/MULTI_REPO.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/PROVIDERS.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/README.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/RELAY_PROTOCOL.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/RELEASE_CHECKLIST.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/RELEASE_MESSAGING.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/ROADMAP.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/SHOWCASE.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/SIDECAR.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/STUDIO.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/V0.46.0_JUSTIFICATION_REPORT.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/V0.47.0_SELF_TEST_REPORT.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/WHY_NOW.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/WORLD_COLLISION.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/INDEX.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/absorb.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/audit.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/chat.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/commandsmith.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/config.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/create.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/demo.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/emergent-swarm.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/emergent-then-synergy.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/emergent.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/enhancement.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/evolve-then-iterate.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/evolve.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/feature-then-emergent.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/guard-install.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/handoff.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/harvest.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/hive.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/iterate.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/materialize.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/metrics.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/recon-swarm.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/relay.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/surface.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/synergy-then-emergent.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/synergy.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/welcome.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/commands/wisdom.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/compliance/CS-1.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/tutorials/01-quickstart.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/tutorials/02-your-first-package.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/tutorials/03-the-five-tier-law.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/tutorials/04-plug-in-llms.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/tutorials/05-multi-repo-absorb.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/docs/tutorials/06-javascript-quickstart.md +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/setup.cfg +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/__init__.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/__main__.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/lifetime_savings_constants.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/materialize_types.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/response_enrichment.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/welcome_constants.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/custom_provider_client.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/harvest_absorb.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/lifetime_savings.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/polyglot_classify.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/polyglot_imports.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/polyglot_surface.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/response_enricher.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/scaffold_polyglot.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/welcome_narrator.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/absorb_feature.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/cherry_hunter.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/create_feature.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/materialize_feature.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/mcp_server.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/welcome_feature.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a4_sy_orchestration/cli.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/__init__.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/_registry.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/absorb.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/audit.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/chat.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/commandsmith.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/config_cmd.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/create.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/demo.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/emergent.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/enhancement.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/evolve.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/guard_install.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/handoff.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/harvest.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/hive.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/iterate.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/materialize.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/recon_swarm.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/relay.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/surface.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/synergy.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/welcome.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/commands/wisdom.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge.egg-info/SOURCES.txt +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge.egg-info/requires.txt +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge.egg-info/top_level.txt +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_aaaa_nexus_client.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_agent_hire_protocol.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_agent_plan.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_agent_plan_pkg_label.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_agent_summary.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_audit_verb.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_body_extractor_repairs.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_certify_operational_axis.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_chat.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_classify_tier.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_classify_tier_ast_signals.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_cli_swarm_aliases.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_codex_5_complete.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_codex_6_enforce_polyglot.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_commandsmith.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_compiler_feedback.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_config.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_copilots_copilot.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_create_feature.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_custom_provider.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_dedup_engine.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_demo.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_emergent_compose.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_emergent_signature_extract.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_emergent_synthesize_imports.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_enhancement_proposal.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_error_codes.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_error_hints.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_evolve_js.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_exported_api_check.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_forge_action.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_forge_auth_a1.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_forge_auth_a2.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_forge_enforce.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_generation_quality.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_handoff.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_hierarchical_memory.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_hive_sync.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_ignore_and_docs.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_import_smoke.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_iterate_evolve.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_js_certify.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_js_parser.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_js_recon.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_js_wire.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_lineage_chain.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_ling_provider.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_local_signer.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_lsp_protocol.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_manifest_diff.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_materialize_feature.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_mcp_lazy_bootstrap.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_nexus_bridge.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_ollama_client.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_pipeline.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_plan_apply.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_polyglot_cli_mcp.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_polyglot_full_pipeline.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_polyglot_hardening.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_polyglot_swift_kotlin_go.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_polyglot_symbol_parity.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_pre_audit_smoke.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_precommit_hooks.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_progress_reporter.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_receipt_emitter.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_receipt_schema.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_receipt_signer.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_response_enricher.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_roi_calculator.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_sbom_cmd_text_summary.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_sbom_emitter.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_scaffold.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_sidecar.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_sidecar_validate.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_smell_score_formula.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_stagnation.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_stub_detector.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_surface_export.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_synergy.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_test_runner.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_tier_init_rebuild.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_trust_gate_response.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_verify_suggested_recipe.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_welcome.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_welcome_enhancements.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_whoami_cmd.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_wire_certify.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_wire_suggest_repairs.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_wire_type_checking.py +0 -0
- {atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/tests/test_wisdom.py +0 -0
|
@@ -10,8 +10,8 @@ name: Metrics Auto-Regenerate
|
|
|
10
10
|
# - Public surfaces (atomadic.tech, shields.io endpoints proxied by
|
|
11
11
|
# the worker) always read live numbers from the same JSON.
|
|
12
12
|
#
|
|
13
|
-
# Lean theorem count requires the IP-protected
|
|
14
|
-
#
|
|
13
|
+
# Lean theorem count requires the IP-protected proof corpus repo. The
|
|
14
|
+
# PROOF_CORPUS_DEPLOY_KEY secret (org-level) provides a deploy-key;
|
|
15
15
|
# without it the lean_theorems block is preserved from the prior commit
|
|
16
16
|
# (see surgical merge step below) so this workflow never destroys real
|
|
17
17
|
# numbers when running without the IP repo attached.
|
|
@@ -52,37 +52,38 @@ jobs:
|
|
|
52
52
|
echo "$out"
|
|
53
53
|
passed=$(echo "$out" | grep -oE '[0-9]+ passed' | head -1 | grep -oE '[0-9]+')
|
|
54
54
|
echo "passed=${passed:-0}" >> "$GITHUB_OUTPUT"
|
|
55
|
-
- name: Optionally clone IP-protected
|
|
55
|
+
- name: Optionally clone IP-protected proof corpus (preserves lean count)
|
|
56
56
|
# GitHub Actions disallows `secrets.*` in `if` — runtime check
|
|
57
57
|
# inside the script instead. No-op if the deploy key is unset.
|
|
58
58
|
env:
|
|
59
|
-
|
|
59
|
+
PROOF_CORPUS_DEPLOY_KEY: ${{ secrets.PROOF_CORPUS_DEPLOY_KEY }}
|
|
60
|
+
PROOF_CORPUS_REPO_URL: ${{ secrets.PROOF_CORPUS_REPO_URL }}
|
|
60
61
|
run: |
|
|
61
|
-
if [ -z "${
|
|
62
|
-
echo "
|
|
62
|
+
if [ -z "${PROOF_CORPUS_DEPLOY_KEY:-}" ]; then
|
|
63
|
+
echo "PROOF_CORPUS_DEPLOY_KEY not set — skipping proof corpus clone."
|
|
63
64
|
exit 0
|
|
64
65
|
fi
|
|
65
66
|
mkdir -p ~/.ssh && chmod 700 ~/.ssh
|
|
66
|
-
echo "$
|
|
67
|
-
GIT_SSH_COMMAND="ssh -i ~/.ssh/
|
|
68
|
-
git clone --depth 1
|
|
69
|
-
echo "
|
|
67
|
+
echo "$PROOF_CORPUS_DEPLOY_KEY" > ~/.ssh/corpus_key && chmod 600 ~/.ssh/corpus_key
|
|
68
|
+
GIT_SSH_COMMAND="ssh -i ~/.ssh/corpus_key -o StrictHostKeyChecking=no" \
|
|
69
|
+
git clone --depth 1 "$PROOF_CORPUS_REPO_URL" /tmp/proof-corpus
|
|
70
|
+
echo "FORGE_PROOF_CORPUS=/tmp/proof-corpus" >> "$GITHUB_ENV"
|
|
70
71
|
- name: Regenerate forge_metrics.json
|
|
71
72
|
run: |
|
|
72
73
|
# Save the previous lean_theorems block so we can preserve it
|
|
73
|
-
# when no
|
|
74
|
+
# when no proof corpus is attached (avoid zeroing the public
|
|
74
75
|
# number on a routine source-only push).
|
|
75
76
|
python -c "import json; d=json.load(open('forge_metrics.json')); print(json.dumps(d.get('lean_theorems', {})))" > /tmp/prev_lean.json
|
|
76
77
|
forge metrics --apply --tests-passing ${{ steps.pytest.outputs.passed }}
|
|
77
|
-
# If no
|
|
78
|
-
if [ -z "${
|
|
78
|
+
# If no proof corpus was attached this run, restore prior lean block.
|
|
79
|
+
if [ -z "${FORGE_PROOF_CORPUS:-}" ]; then
|
|
79
80
|
python <<'PY'
|
|
80
81
|
import json, pathlib
|
|
81
82
|
p = pathlib.Path("forge_metrics.json")
|
|
82
83
|
d = json.loads(p.read_text())
|
|
83
84
|
prev = json.loads(pathlib.Path("/tmp/prev_lean.json").read_text())
|
|
84
85
|
# Only restore if the freshly-computed block reports found=False
|
|
85
|
-
# (i.e.
|
|
86
|
+
# (i.e. proof corpus unavailable) AND the prior had a real count.
|
|
86
87
|
if not d.get("lean_theorems", {}).get("found") and prev.get("count"):
|
|
87
88
|
d["lean_theorems"] = prev
|
|
88
89
|
p.write_text(json.dumps(d, indent=2, sort_keys=True) + "\n")
|
|
@@ -4,10 +4,10 @@ name: Metrics Drift Gate
|
|
|
4
4
|
# Any PR that changes TOOLS, CLI registry, source/test counts, or
|
|
5
5
|
# pyproject.toml WITHOUT regenerating forge_metrics.json fails this check.
|
|
6
6
|
#
|
|
7
|
-
# Lean theorem count is recomputed only when the
|
|
7
|
+
# Lean theorem count is recomputed only when the FORGE_PROOF_CORPUS repo is
|
|
8
8
|
# accessible (CI env var). When not set, the lean_theorems block is
|
|
9
9
|
# preserved from the in-tree forge_metrics.json so PRs that don't touch
|
|
10
|
-
#
|
|
10
|
+
# the proof corpus don't get blocked here.
|
|
11
11
|
#
|
|
12
12
|
# Fix when this fails: forge metrics --apply && git add forge_metrics.json
|
|
13
13
|
|
|
@@ -41,7 +41,7 @@ jobs:
|
|
|
41
41
|
set -euo pipefail
|
|
42
42
|
# Save committed copy.
|
|
43
43
|
cp forge_metrics.json /tmp/forge_metrics.committed.json
|
|
44
|
-
# Recompute (Lean count zero in CI unless
|
|
44
|
+
# Recompute (Lean count zero in CI unless FORGE_PROOF_CORPUS is wired).
|
|
45
45
|
forge metrics --apply
|
|
46
46
|
# If the only delta is the timestamp, that's expected — strip it
|
|
47
47
|
# before diffing so we only fail on substantive drift.
|
|
@@ -53,10 +53,10 @@ jobs:
|
|
|
53
53
|
# this gate doesn't run pytest. Comparing them is meaningless.
|
|
54
54
|
jq 'del(.tests_passing)' /tmp/a.json > /tmp/a2.json && mv /tmp/a2.json /tmp/a.json
|
|
55
55
|
jq 'del(.tests_passing)' /tmp/b.json > /tmp/b2.json && mv /tmp/b2.json /tmp/b.json
|
|
56
|
-
# If
|
|
56
|
+
# If FORGE_PROOF_CORPUS is not set, also ignore the lean_theorems
|
|
57
57
|
# block (will be 0 in CI but the committed artifact has the real
|
|
58
58
|
# count from the IP repo).
|
|
59
|
-
if [ -z "${
|
|
59
|
+
if [ -z "${FORGE_PROOF_CORPUS:-}" ]; then
|
|
60
60
|
jq 'del(.lean_theorems)' /tmp/a.json > /tmp/a2.json && mv /tmp/a2.json /tmp/a.json
|
|
61
61
|
jq 'del(.lean_theorems)' /tmp/b.json > /tmp/b2.json && mv /tmp/b2.json /tmp/b.json
|
|
62
62
|
fi
|
|
@@ -2,6 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## v0.52.1 — 2026-05-07 — IP scrub: no private identifiers in public repo
|
|
6
|
+
|
|
7
|
+
### fix(security): remove all private identifiers from public surfaces
|
|
8
|
+
|
|
9
|
+
All internal project names, repo identifiers, and deploy-key secret
|
|
10
|
+
names replaced with neutral public-safe labels throughout:
|
|
11
|
+
|
|
12
|
+
- CI workflow secrets and env vars renamed to neutral `PROOF_CORPUS_*` prefix
|
|
13
|
+
- Hardcoded SSH clone URL moved to `PROOF_CORPUS_REPO_URL` org secret
|
|
14
|
+
- Python API param renamed to `proof_corpus_root`; internal helper to `_find_proof_corpus`
|
|
15
|
+
- CLI flag renamed to `forge metrics --proof-corpus`
|
|
16
|
+
- All docs (CHANGELOG, README, .gitignore) use neutral labels
|
|
17
|
+
|
|
18
|
+
Zero functional changes. certify: 100/100. wire: 0 violations.
|
|
19
|
+
|
|
20
|
+
### fix(test): git-ceiling tests clear inherited worktree env vars
|
|
21
|
+
|
|
22
|
+
`test_worktree_status_non_git_runs` and
|
|
23
|
+
`test_tools_call_doctor_with_include_worktree` now explicitly unset
|
|
24
|
+
`GIT_DIR`/`GIT_WORK_TREE`/`GIT_COMMON_DIR` so they pass when running
|
|
25
|
+
from inside a git worktree on Windows.
|
|
26
|
+
|
|
5
27
|
### feat(emergent-swarm): hub-node penalty in `emergent_swarm` scoring
|
|
6
28
|
|
|
7
29
|
Symbols that appear in more than 3 chains are now penalised in
|
|
@@ -164,7 +186,7 @@ This release scrubs all of them while keeping the credibility markers:
|
|
|
164
186
|
|
|
165
187
|
**IP-protected (stripped from public):**
|
|
166
188
|
- Specific theorem names (no longer cited anywhere public)
|
|
167
|
-
-
|
|
189
|
+
- Internal framework names (removed from all public surfaces)
|
|
168
190
|
- Math derivations (no `⌊Δ_RG/η⌋`, no Leech / Niemeier / Coxeter–Todd /
|
|
169
191
|
Golay / Monster group / E₈ geometry references)
|
|
170
192
|
- Greek-letter math (`τ_TRUST` → `TAU_TRUST`, `τ_trust` → `trust threshold`
|
|
@@ -233,8 +255,8 @@ or `pyproject.toml` triggers a regeneration. If the artifact drifted, a
|
|
|
233
255
|
follow-up `chore(metrics): auto-regenerate [skip ci]` commit is pushed
|
|
234
256
|
back to main. Stale numbers self-heal — no human intervention.
|
|
235
257
|
|
|
236
|
-
When the `
|
|
237
|
-
auto-regen also clones the IP-protected
|
|
258
|
+
When the `PROOF_CORPUS_DEPLOY_KEY` org secret is configured, the
|
|
259
|
+
auto-regen also clones the IP-protected proof corpus over deploy-key
|
|
238
260
|
SSH and refreshes the Lean theorem count. Without the secret, the prior
|
|
239
261
|
lean count is preserved (never zeroed by a routine push).
|
|
240
262
|
|
|
@@ -251,7 +273,7 @@ targeted-subset passes). The artifact now carries all three explicitly:
|
|
|
251
273
|
|
|
252
274
|
Every public number Forge claims about itself — MCP tool count, action
|
|
253
275
|
count, CLI verb count, source/test files, lines of code, and the count
|
|
254
|
-
of formally-verified Lean4 theorems in the IP-protected
|
|
276
|
+
of formally-verified Lean4 theorems in the IP-protected proof corpus
|
|
255
277
|
moat — now lives in one canonical artifact: `forge_metrics.json` at the
|
|
256
278
|
repo root, regenerated on every push by `forge metrics --apply`.
|
|
257
279
|
|
|
@@ -265,7 +287,7 @@ artifact drift out of sync with the live forge surface.
|
|
|
265
287
|
- 71 CLI verbs
|
|
266
288
|
- 211 source files · ~40,110 LOC
|
|
267
289
|
- 96 test files
|
|
268
|
-
- **886 Lean4 theorems across 38 files** (
|
|
290
|
+
- **886 Lean4 theorems across 38 files** (formal-proof moat)
|
|
269
291
|
- monadic tiers = 5
|
|
270
292
|
|
|
271
293
|
### feat(cli/mcp): `forge metrics` verb — print or write the artifact
|
|
@@ -279,10 +301,10 @@ forge metrics --self-cert # also embed certify score (slower)
|
|
|
279
301
|
|
|
280
302
|
The verb composes a pure tier-a1 aggregator (`forge_metrics.py`) with
|
|
281
303
|
the live MCP TOOLS dict and CLI registry. Source paths from the
|
|
282
|
-
IP-protected
|
|
304
|
+
IP-protected proof corpus are NEVER written into the public
|
|
283
305
|
artifact — only aggregate counts. Path resolution is via the
|
|
284
|
-
`
|
|
285
|
-
ever being checked in.
|
|
306
|
+
`FORGE_PROOF_CORPUS` env var; gitignore protects the proof corpus
|
|
307
|
+
directory from ever being checked in.
|
|
286
308
|
|
|
287
309
|
### chore: corrected stale README numbers
|
|
288
310
|
|
|
@@ -3069,7 +3091,7 @@ shipped on master.
|
|
|
3069
3091
|
roadmap explicit (v1.0 → v1.1 W8 polyglot_breakdown → v1.2 W12
|
|
3070
3092
|
slsa_attestation → v2.0 W24 bao_rompf_witnesses). Both Lean4 corpora
|
|
3071
3093
|
cited (`aethel-nexus-proofs` — 29 theorems, 0 sorry, 0 axioms — and
|
|
3072
|
-
`
|
|
3094
|
+
`proof-corpus-v22` — 538 theorems, 0 sorry). All signing / lineage
|
|
3073
3095
|
/ attestation fields default to `None` so unsigned dev Receipts
|
|
3074
3096
|
remain structurally valid. Tier-pure a0.
|
|
3075
3097
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atomadic-forge
|
|
3
|
-
Version: 0.52.
|
|
3
|
+
Version: 0.52.1
|
|
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
|
|
@@ -208,7 +208,7 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
208
208
|
| CLI verbs | **71** |
|
|
209
209
|
| Source files | **211** (~40,195 LOC) |
|
|
210
210
|
| Tests | **1,495 passing** across **97 test files** (1,411 static · pytest expands parametrize to 1,495 collected) |
|
|
211
|
-
| Lean4 formal proofs | **872 theorems** across 30 files (mathematically verified core logic — IP-protected
|
|
211
|
+
| Lean4 formal proofs | **872 theorems** across 30 files (mathematically verified core logic — IP-protected formal verification moat) |
|
|
212
212
|
| Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
|
|
213
213
|
| Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
|
|
214
214
|
| Infrastructure cost | **$5/mo** |
|
|
@@ -176,7 +176,7 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
176
176
|
| CLI verbs | **71** |
|
|
177
177
|
| Source files | **211** (~40,195 LOC) |
|
|
178
178
|
| Tests | **1,495 passing** across **97 test files** (1,411 static · pytest expands parametrize to 1,495 collected) |
|
|
179
|
-
| Lean4 formal proofs | **872 theorems** across 30 files (mathematically verified core logic — IP-protected
|
|
179
|
+
| Lean4 formal proofs | **872 theorems** across 30 files (mathematically verified core logic — IP-protected formal verification moat) |
|
|
180
180
|
| Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
|
|
181
181
|
| Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
|
|
182
182
|
| Infrastructure cost | **$5/mo** |
|
|
@@ -462,7 +462,7 @@ treated as non-code artifacts rather than misplaced source.
|
|
|
462
462
|
| Resource URI | What it is | Use case |
|
|
463
463
|
|---|---|---|
|
|
464
464
|
| `forge://docs/receipt` | The Receipt schema spec | Agent reads this to know what the Receipt JSON contract is. |
|
|
465
|
-
| `forge://docs/formalization` | Citations to `aethel-nexus-proofs` (29 theorems / 0 sorry) and `
|
|
465
|
+
| `forge://docs/formalization` | Citations to `aethel-nexus-proofs` (29 theorems / 0 sorry) and `proof-corpus-v22` (538 theorems / 0 sorry) | Agent presenting Forge to a regulator: cite the proof corpus. |
|
|
466
466
|
| `forge://lineage/chain` | Episodic L1 trace of every Forge run | Replay / debugging / audit. |
|
|
467
467
|
| `forge://schema/receipt` | Machine-readable JSON Schema for the Receipt | Agent doing type-checked Receipt parsing. |
|
|
468
468
|
| `forge://summary/blockers` | Same payload as `agent_summary` MCP tool | One-shot `resources/read` for clients that prefer resources over tools. |
|
|
@@ -84,7 +84,7 @@ rejected by consumers. The set is pinned in
|
|
|
84
84
|
| `artifacts` | list of `{name, path, sha256}` | pointers to `.atomadic-forge/*.json` evidence files |
|
|
85
85
|
| `signatures.sigstore` | object \| null | Rekor uuid + log_index; populated by Lane A W2 signer |
|
|
86
86
|
| `signatures.aaaa_nexus` | object \| null | base64 signature + key_id; from `/v1/verify/forge-receipt` |
|
|
87
|
-
| `lean4_attestation` | object | corpus citations (`aethel-nexus-proofs`, `
|
|
87
|
+
| `lean4_attestation` | object | corpus citations (`aethel-nexus-proofs`, `proof-corpus-v22`) |
|
|
88
88
|
| `lineage.lineage_path` | string | opaque Vanguard ledger pointer (Lane A W4) |
|
|
89
89
|
| `lineage.parent_receipt_hash` | string \| null | SHA-256 of the immediately prior Receipt |
|
|
90
90
|
| `lineage.chain_depth` | int | 1 for first Receipt; n+1 per successor |
|
|
@@ -202,8 +202,8 @@ cited:
|
|
|
202
202
|
"axiom_count": 0
|
|
203
203
|
},
|
|
204
204
|
{
|
|
205
|
-
"name": "
|
|
206
|
-
"repo_url": "https://
|
|
205
|
+
"name": "proof-corpus-v22",
|
|
206
|
+
"repo_url": "https://example.com/proof-corpus",
|
|
207
207
|
"ref_sha": "31bd09...",
|
|
208
208
|
"theorem_count": 538,
|
|
209
209
|
"sorry_count": 0,
|
|
@@ -150,7 +150,7 @@ classification":
|
|
|
150
150
|
| Corpus | Theorems | Claim backed |
|
|
151
151
|
|---|---|---|
|
|
152
152
|
| `aethel-nexus-proofs` | 29, 0 sorry | Monadic composition law: tiers compose upward only |
|
|
153
|
-
| `
|
|
153
|
+
| `proof-corpus-v22` | 538, 0 sorry | Wire-scan completeness and soundness |
|
|
154
154
|
|
|
155
155
|
---
|
|
156
156
|
|
|
@@ -50,7 +50,7 @@ is satisfied by fields in the Atomadic Forge Receipt v1.
|
|
|
50
50
|
| Corpus | Theorems | Sorry | Axioms |
|
|
51
51
|
|--------|----------|-------|--------|
|
|
52
52
|
| `aethel-nexus-proofs` | 29 | 0 | 0 |
|
|
53
|
-
| `
|
|
53
|
+
| `proof-corpus-v22` | 538 | 0 | 0 |
|
|
54
54
|
|
|
55
55
|
### Annex IV §2(b) — Data governance and data management practices
|
|
56
56
|
|
|
@@ -113,7 +113,7 @@ Lean4 corpus with `sorry_count = 0`. The standard Atomadic corpora are:
|
|
|
113
113
|
| Corpus | Repository | Theorems | Sorry | Axioms | Status |
|
|
114
114
|
|--------|-----------|----------|-------|--------|--------|
|
|
115
115
|
| `aethel-nexus-proofs` | Internal | 29 | 0 | 0 | Attesting |
|
|
116
|
-
| `
|
|
116
|
+
| `proof-corpus-v22` | Internal | 538 | 0 | 0 | Attesting |
|
|
117
117
|
|
|
118
118
|
---
|
|
119
119
|
|
|
@@ -73,7 +73,7 @@ Atomadic standard validation corpora:
|
|
|
73
73
|
| Corpus | Theorems | Sorry | Validation claim |
|
|
74
74
|
|--------|----------|-------|-----------------|
|
|
75
75
|
| `aethel-nexus-proofs` | 29 | 0 | Structural invariants of the Atomadic monadic composition law |
|
|
76
|
-
| `
|
|
76
|
+
| `proof-corpus-v22` | 538 | 0 | Mathematical foundations of the tier-effect type system |
|
|
77
77
|
|
|
78
78
|
### PCCP §II.C — Performance Monitoring Plan
|
|
79
79
|
|
|
@@ -48,7 +48,7 @@ corpora cited in every signed Receipt provide:
|
|
|
48
48
|
|---|---|
|
|
49
49
|
| Theoretical basis documented | ASS-ADE MONADIC_DEVELOPMENT.md (5-tier law) + Lean4 proofs |
|
|
50
50
|
| Assumptions stated and justified | `aethel-nexus-proofs` ref `abc1234` — 29 theorems, 0 sorry |
|
|
51
|
-
| Mathematical properties verified | `
|
|
51
|
+
| Mathematical properties verified | `proof-corpus-v22` ref `def5678` — 538 theorems, 0 sorry |
|
|
52
52
|
|
|
53
53
|
A Receipt with no `lean4_attestation` or `sorry_count > 0` provides
|
|
54
54
|
partial conceptual soundness evidence only.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "atomadic-forge"
|
|
7
|
-
version = "0.52.
|
|
7
|
+
version = "0.52.1"
|
|
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.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a0_qk_constants/receipt_schema.py
RENAMED
|
@@ -187,7 +187,7 @@ class ReceiptLean4Corpus(TypedDict, total=False):
|
|
|
187
187
|
Cites a machine-checked theorem corpus that backs a claim made by
|
|
188
188
|
this Receipt. The Golden Path threads two corpora through every
|
|
189
189
|
Receipt: ``aethel-nexus-proofs`` (29 theorems, 0 sorry, 0 axioms)
|
|
190
|
-
and ``
|
|
190
|
+
and ``proof-corpus-v22`` (538 theorems, 0 sorry).
|
|
191
191
|
"""
|
|
192
192
|
name: str # e.g. "aethel-nexus-proofs"
|
|
193
193
|
repo_url: str
|
{atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a1_at_functions/forge_metrics.py
RENAMED
|
@@ -6,7 +6,7 @@ Worker, shields.io badges) all derive from the same canonical artifact —
|
|
|
6
6
|
``forge_metrics.json`` — produced by this function. No string lives in two
|
|
7
7
|
places; any drift is a CI-detectable bug.
|
|
8
8
|
|
|
9
|
-
The function is pure: given the same repo + (optional)
|
|
9
|
+
The function is pure: given the same repo + (optional) proof corpus path,
|
|
10
10
|
it returns the same dict. Every field carries a ``_basis`` description
|
|
11
11
|
so consumers can trace a number back to its source.
|
|
12
12
|
|
|
@@ -37,10 +37,10 @@ _LEAN_THEOREM_RE = re.compile(
|
|
|
37
37
|
)
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
def count_lean_theorems(
|
|
41
|
-
"""Return the certified Lean theorem count for
|
|
40
|
+
def count_lean_theorems(proof_corpus_root: Path) -> dict[str, Any]:
|
|
41
|
+
"""Return the certified Lean theorem count for the IP-protected proof corpus.
|
|
42
42
|
|
|
43
|
-
The
|
|
43
|
+
The proof corpus repository is IP-protected — this function only
|
|
44
44
|
surfaces aggregate counts to the public artifact. Source paths and
|
|
45
45
|
file names are NEVER returned. Callers must not log the input path.
|
|
46
46
|
|
|
@@ -50,7 +50,7 @@ def count_lean_theorems(mhed_codex_root: Path) -> dict[str, Any]:
|
|
|
50
50
|
attestation yet; it can overcount scratch or archived Lean files.
|
|
51
51
|
|
|
52
52
|
Args:
|
|
53
|
-
|
|
53
|
+
proof_corpus_root: directory containing a ``proofs/`` subtree of
|
|
54
54
|
``.lean`` files. If the directory does not exist or contains
|
|
55
55
|
no proofs, returns ``{count: 0, files: 0, found: False}``.
|
|
56
56
|
|
|
@@ -59,11 +59,11 @@ def count_lean_theorems(mhed_codex_root: Path) -> dict[str, Any]:
|
|
|
59
59
|
combined), ``theorems``, ``lemmas``, ``files``, ``found``.
|
|
60
60
|
No paths. Counts are always int; never raises on missing path.
|
|
61
61
|
"""
|
|
62
|
-
attested = _count_lean_theorems_from_attestation(Path(
|
|
62
|
+
attested = _count_lean_theorems_from_attestation(Path(proof_corpus_root))
|
|
63
63
|
if attested is not None:
|
|
64
64
|
return attested
|
|
65
65
|
|
|
66
|
-
proofs_dir = Path(
|
|
66
|
+
proofs_dir = Path(proof_corpus_root) / "proofs"
|
|
67
67
|
if not proofs_dir.is_dir():
|
|
68
68
|
return {
|
|
69
69
|
"count": 0, "theorems": 0, "lemmas": 0,
|
|
@@ -92,7 +92,7 @@ def count_lean_theorems(mhed_codex_root: Path) -> dict[str, Any]:
|
|
|
92
92
|
|
|
93
93
|
|
|
94
94
|
def _count_lean_theorems_from_attestation(
|
|
95
|
-
|
|
95
|
+
proof_corpus_root: Path,
|
|
96
96
|
) -> dict[str, Any] | None:
|
|
97
97
|
"""Read the newest build attestation if one exists.
|
|
98
98
|
|
|
@@ -101,7 +101,7 @@ def _count_lean_theorems_from_attestation(
|
|
|
101
101
|
metrics surface. The aggregate proof-tree hash is public-safe and lets
|
|
102
102
|
downstream agents verify the exact attested boundary.
|
|
103
103
|
"""
|
|
104
|
-
dist_dir = Path(
|
|
104
|
+
dist_dir = Path(proof_corpus_root) / "dist"
|
|
105
105
|
if not dist_dir.is_dir():
|
|
106
106
|
return None
|
|
107
107
|
attestations = sorted(dist_dir.glob("BUILD_ATTESTATION_*.json"))
|
|
@@ -223,7 +223,7 @@ def count_lines_of_code(repo_root: Path) -> int:
|
|
|
223
223
|
def compute_forge_metrics(
|
|
224
224
|
repo_root: Path,
|
|
225
225
|
*,
|
|
226
|
-
|
|
226
|
+
proof_corpus_root: Path | None = None,
|
|
227
227
|
package_version: str | None = None,
|
|
228
228
|
tools_count: int | None = None,
|
|
229
229
|
actions_count: int | None = None,
|
|
@@ -241,7 +241,7 @@ def compute_forge_metrics(
|
|
|
241
241
|
|
|
242
242
|
Args:
|
|
243
243
|
repo_root: forge repo path (where ``src/`` and ``tests/`` live).
|
|
244
|
-
|
|
244
|
+
proof_corpus_root: optional path to IP-protected proof corpus. When given,
|
|
245
245
|
``lean_theorems`` block is populated; when None, that block
|
|
246
246
|
is zeroed and ``lean_theorems.found=False``.
|
|
247
247
|
package_version: optional string. If None, the field is omitted.
|
|
@@ -286,8 +286,8 @@ def compute_forge_metrics(
|
|
|
286
286
|
metrics["tests_passing"] = tests_passing
|
|
287
287
|
# Lean theorem block — always present, populated only when found.
|
|
288
288
|
# Public artifact carries counts only — never paths or file names.
|
|
289
|
-
if
|
|
290
|
-
lean = count_lean_theorems(Path(
|
|
289
|
+
if proof_corpus_root is not None:
|
|
290
|
+
lean = count_lean_theorems(Path(proof_corpus_root))
|
|
291
291
|
else:
|
|
292
292
|
lean = {"count": 0, "theorems": 0, "lemmas": 0,
|
|
293
293
|
"files": 0, "found": False}
|
{atomadic_forge-0.52.0 → atomadic_forge-0.52.1}/src/atomadic_forge/a3_og_features/emergent_swarm.py
RENAMED
|
@@ -229,11 +229,10 @@ def emergent_swarm(
|
|
|
229
229
|
})
|
|
230
230
|
|
|
231
231
|
# Hub-node penalty: a symbol present in many chains biases top-N toward
|
|
232
|
-
# a single connector
|
|
233
|
-
#
|
|
234
|
-
# HUB_THRESHOLD so genuinely novel cross-repo chains can surface.
|
|
232
|
+
# a single connector. Penalise by PENALTY_PER_DOUBLING for each doubling
|
|
233
|
+
# of cross-chain frequency above HUB_THRESHOLD.
|
|
235
234
|
_HUB_THRESHOLD = 3
|
|
236
|
-
_PENALTY_PER_DOUBLING =
|
|
235
|
+
_PENALTY_PER_DOUBLING = 15.0
|
|
237
236
|
_sym_freq: Counter[str] = Counter()
|
|
238
237
|
for _c in annotated:
|
|
239
238
|
for _sym in set(_c.get("chain", {}).get("chain", [])):
|
|
@@ -255,7 +254,21 @@ def emergent_swarm(
|
|
|
255
254
|
annotated.sort(
|
|
256
255
|
key=lambda c: (-c["score_boosted"], -c["crosses_repos"]),
|
|
257
256
|
)
|
|
258
|
-
|
|
257
|
+
|
|
258
|
+
# Chain-prefix deduplication: when multiple candidates share the same
|
|
259
|
+
# first (N-1) symbols, keep only the highest-scoring one per prefix.
|
|
260
|
+
# This prevents a single hub-connector generating top-N variations that
|
|
261
|
+
# differ only in their final hop (e.g. 25x the same auth→github→* chain).
|
|
262
|
+
_PREFIX_DEPTH = 2
|
|
263
|
+
_seen_prefixes: set[tuple[str, ...]] = set()
|
|
264
|
+
_deduped: list[dict] = []
|
|
265
|
+
for _c in annotated:
|
|
266
|
+
_syms = _c.get("chain", {}).get("chain", [])
|
|
267
|
+
_prefix = tuple(_syms[:_PREFIX_DEPTH]) if len(_syms) >= _PREFIX_DEPTH else tuple(_syms)
|
|
268
|
+
if _prefix not in _seen_prefixes:
|
|
269
|
+
_seen_prefixes.add(_prefix)
|
|
270
|
+
_deduped.append(_c)
|
|
271
|
+
annotated = _deduped[:top_n]
|
|
259
272
|
|
|
260
273
|
# ── 4. Domain inventory across the union ─────────────────────────
|
|
261
274
|
domain_inv: Counter[str] = Counter(
|
|
@@ -20,16 +20,16 @@ from ..a1_at_functions.forge_metrics import (
|
|
|
20
20
|
write_forge_metrics,
|
|
21
21
|
)
|
|
22
22
|
|
|
23
|
-
# IP-protected
|
|
23
|
+
# IP-protected proof corpus location is read from the FORGE_PROOF_CORPUS env
|
|
24
24
|
# var. Falls through gracefully when not set or not present — the
|
|
25
25
|
# metric simply reports ``lean_theorems.found = False``. We never hard-
|
|
26
26
|
# code public paths to the IP repo, and the public artifact never
|
|
27
27
|
# carries the path it was sourced from.
|
|
28
|
-
|
|
28
|
+
_FORGE_CORPUS_ENV = "FORGE_PROOF_CORPUS"
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
def
|
|
32
|
-
"""Resolve the IP-protected
|
|
31
|
+
def _find_proof_corpus(start: Path) -> Path | None:
|
|
32
|
+
"""Resolve the IP-protected proof corpus repo via FORGE_PROOF_CORPUS env
|
|
33
33
|
var, falling back to a sibling-directory probe.
|
|
34
34
|
|
|
35
35
|
Returns the resolved path if a ``proofs/`` subtree is present;
|
|
@@ -37,14 +37,13 @@ def _find_mhed_codex(start: Path) -> Path | None:
|
|
|
37
37
|
the public ``forge_metrics.json`` artifact.
|
|
38
38
|
"""
|
|
39
39
|
import os
|
|
40
|
-
env_path = os.environ.get(
|
|
40
|
+
env_path = os.environ.get(_FORGE_CORPUS_ENV)
|
|
41
41
|
candidates: list[Path] = []
|
|
42
42
|
if env_path:
|
|
43
43
|
candidates.append(Path(env_path))
|
|
44
|
-
# Sibling-directory probe —
|
|
45
|
-
#
|
|
46
|
-
|
|
47
|
-
candidates.extend([start / "../mhed-corpus", start / "../../mhed-corpus"])
|
|
44
|
+
# Sibling-directory probe — checks for a proof-corpus directory
|
|
45
|
+
# adjacent to the forge repo. No public hardcoded absolute paths.
|
|
46
|
+
candidates.extend([start / "../proof-corpus", start / "../../proof-corpus"])
|
|
48
47
|
for c in candidates:
|
|
49
48
|
try:
|
|
50
49
|
r = c.resolve()
|
|
@@ -139,7 +138,7 @@ def emit_forge_metrics(
|
|
|
139
138
|
repo_root: Path,
|
|
140
139
|
*,
|
|
141
140
|
apply: bool = False,
|
|
142
|
-
|
|
141
|
+
proof_corpus_root: Path | None = None,
|
|
143
142
|
skip_self_cert: bool = True,
|
|
144
143
|
cli_verbs_count: int | None = None,
|
|
145
144
|
tests_passing: int | None = None,
|
|
@@ -152,24 +151,24 @@ def emit_forge_metrics(
|
|
|
152
151
|
apply: when True, overwrite ``<repo_root>/forge_metrics.json``
|
|
153
152
|
with the freshly computed artifact. When False, the artifact
|
|
154
153
|
is computed and returned but not written.
|
|
155
|
-
|
|
156
|
-
location
|
|
154
|
+
proof_corpus_root: optional override; defaults to autodetected
|
|
155
|
+
location via sibling-directory probe.
|
|
157
156
|
skip_self_cert: when True (default) the certify call is skipped
|
|
158
157
|
for speed. Set False to embed the latest certify score in
|
|
159
158
|
the artifact (slower; runs the full pipeline).
|
|
160
159
|
|
|
161
160
|
Returns:
|
|
162
161
|
Dict with ``metrics`` (the artifact), ``written_to`` (None or
|
|
163
|
-
absolute path), and ``
|
|
162
|
+
absolute path), and ``proof_corpus_root_used``.
|
|
164
163
|
"""
|
|
165
164
|
repo_root = Path(repo_root).resolve()
|
|
166
|
-
if
|
|
167
|
-
|
|
165
|
+
if proof_corpus_root is None:
|
|
166
|
+
proof_corpus_root = _find_proof_corpus(repo_root)
|
|
168
167
|
tools_count, actions_count = _live_tools_count()
|
|
169
168
|
cert = {} if skip_self_cert else _self_certify(repo_root)
|
|
170
169
|
metrics = compute_forge_metrics(
|
|
171
170
|
repo_root,
|
|
172
|
-
|
|
171
|
+
proof_corpus_root=proof_corpus_root,
|
|
173
172
|
package_version=_safe_pkg_version(repo_root),
|
|
174
173
|
tools_count=tools_count,
|
|
175
174
|
actions_count=actions_count,
|
|
@@ -185,7 +184,7 @@ def emit_forge_metrics(
|
|
|
185
184
|
return {
|
|
186
185
|
"metrics": metrics,
|
|
187
186
|
"written_to": written,
|
|
188
|
-
"
|
|
187
|
+
"proof_corpus_root_used": str(proof_corpus_root) if proof_corpus_root else None,
|
|
189
188
|
}
|
|
190
189
|
|
|
191
190
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Single source of truth for every public number Forge claims about itself —
|
|
4
4
|
mcp tool count, action count, CLI verb count, source/test files, lines of
|
|
5
|
-
code, Lean theorem count from
|
|
5
|
+
code, Lean theorem count from the IP-protected proof corpus. Public surfaces (README, CHANGELOG,
|
|
6
6
|
welcome handshake, the Cloudflare Worker, shields.io badges) all read from
|
|
7
7
|
this artifact.
|
|
8
8
|
|
|
@@ -11,7 +11,7 @@ Usage::
|
|
|
11
11
|
forge metrics # print live metrics, do not write
|
|
12
12
|
forge metrics --apply # rewrite forge_metrics.json at repo root
|
|
13
13
|
forge metrics --json # JSON to stdout (no file write)
|
|
14
|
-
forge metrics --
|
|
14
|
+
forge metrics --proof-corpus <path> # override proof corpus auto-detect
|
|
15
15
|
forge metrics --self-cert # also embed certify score (slower)
|
|
16
16
|
"""
|
|
17
17
|
|
|
@@ -61,8 +61,8 @@ def run(
|
|
|
61
61
|
help="Emit the artifact to stdout as JSON (no human-readable summary).",
|
|
62
62
|
)] = False,
|
|
63
63
|
mhed: Annotated[Path | None, typer.Option(
|
|
64
|
-
"--
|
|
65
|
-
help="Override
|
|
64
|
+
"--proof-corpus",
|
|
65
|
+
help="Override proof corpus location (default: autodetect).",
|
|
66
66
|
exists=False, file_okay=False, dir_okay=True, resolve_path=True,
|
|
67
67
|
)] = None,
|
|
68
68
|
self_cert: Annotated[bool, typer.Option(
|
|
@@ -84,7 +84,7 @@ def run(
|
|
|
84
84
|
res = emit_forge_metrics(
|
|
85
85
|
project,
|
|
86
86
|
apply=apply,
|
|
87
|
-
|
|
87
|
+
proof_corpus_root=mhed,
|
|
88
88
|
skip_self_cert=not self_cert,
|
|
89
89
|
cli_verbs_count=_live_cli_verb_count(),
|
|
90
90
|
tests_passing=tests_passing,
|
|
@@ -119,7 +119,7 @@ def run(
|
|
|
119
119
|
f"files={lean['files']})")
|
|
120
120
|
else:
|
|
121
121
|
typer.echo(" lean_theorems : not found "
|
|
122
|
-
"(set
|
|
122
|
+
"(set FORGE_PROOF_CORPUS or pass --proof-corpus)")
|
|
123
123
|
if res["written_to"]:
|
|
124
124
|
typer.echo(f"\nwritten -> {res['written_to']}")
|
|
125
125
|
else:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atomadic-forge
|
|
3
|
-
Version: 0.52.
|
|
3
|
+
Version: 0.52.1
|
|
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
|
|
@@ -208,7 +208,7 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
208
208
|
| CLI verbs | **71** |
|
|
209
209
|
| Source files | **211** (~40,195 LOC) |
|
|
210
210
|
| Tests | **1,495 passing** across **97 test files** (1,411 static · pytest expands parametrize to 1,495 collected) |
|
|
211
|
-
| Lean4 formal proofs | **872 theorems** across 30 files (mathematically verified core logic — IP-protected
|
|
211
|
+
| Lean4 formal proofs | **872 theorems** across 30 files (mathematically verified core logic — IP-protected formal verification moat) |
|
|
212
212
|
| Monadic tiers | **5** (a0 → a4, strict upward-only composition) |
|
|
213
213
|
| Languages | Python, JS/TS, Swift, Kotlin, Go, Rust |
|
|
214
214
|
| Infrastructure cost | **$5/mo** |
|
|
@@ -159,7 +159,7 @@ def test_card_attestation_summary():
|
|
|
159
159
|
att = {"corpora": [
|
|
160
160
|
{"name": "aethel-nexus-proofs", "repo_url": "u", "ref_sha": "s",
|
|
161
161
|
"theorem_count": 29, "sorry_count": 0, "axiom_count": 0},
|
|
162
|
-
{"name": "
|
|
162
|
+
{"name": "proof-corpus-v22", "repo_url": "u", "ref_sha": "s",
|
|
163
163
|
"theorem_count": 538, "sorry_count": 0, "axiom_count": 0},
|
|
164
164
|
], "total_theorems": 567, "summary": "567 / 0 sorry"}
|
|
165
165
|
out = render_receipt_card(_receipt(lean4_attestation=att))
|
|
@@ -48,6 +48,10 @@ def test_worktree_status_non_git_runs(tmp_path, monkeypatch):
|
|
|
48
48
|
# this env var, `git rev-parse --show-toplevel` finds the surrounding
|
|
49
49
|
# atomadic-forge clone and reports is_git_repo=True.
|
|
50
50
|
monkeypatch.setenv("GIT_CEILING_DIRECTORIES", str(tmp_path.parent))
|
|
51
|
+
# Inside a git worktree, GIT_DIR/GIT_WORK_TREE are inherited by subprocesses
|
|
52
|
+
# and override the ceiling, so also clear them.
|
|
53
|
+
for _var in ("GIT_DIR", "GIT_WORK_TREE", "GIT_COMMON_DIR"):
|
|
54
|
+
monkeypatch.delenv(_var, raising=False)
|
|
51
55
|
result = runner.invoke(app, ["worktree", "status", str(tmp_path), "--json"])
|
|
52
56
|
assert result.exit_code == 0
|
|
53
57
|
data = json.loads(result.stdout)
|
|
@@ -17,7 +17,7 @@ from atomadic_forge.a1_at_functions.compliance_checker import (
|
|
|
17
17
|
_LEAN4 = {
|
|
18
18
|
"corpora": [
|
|
19
19
|
{"name": "aethel-nexus-proofs", "sorry_count": 0, "theorem_count": 29},
|
|
20
|
-
{"name": "
|
|
20
|
+
{"name": "proof-corpus-v22", "sorry_count": 0, "theorem_count": 538},
|
|
21
21
|
],
|
|
22
22
|
"total_theorems": 567,
|
|
23
23
|
}
|