atomadic-forge 0.61.0__tar.gz → 0.63.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.61.0 → atomadic_forge-0.63.0}/CHANGELOG.md +10 -0
- {atomadic_forge-0.61.0/src/atomadic_forge.egg-info → atomadic_forge-0.63.0}/PKG-INFO +2 -2
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/README.md +1 -1
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/pyproject.toml +1 -1
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/abstract_method_repair.py +18 -9
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/stub_detector.py +30 -2
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0/src/atomadic_forge.egg-info}/PKG-INFO +2 -2
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_stub_detector.py +31 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/FUNDING.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/actions/forge-action/README.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/actions/forge-action/action.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/dependabot.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/pull_request_template.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/workflows/ci.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/workflows/customer-refactor.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/workflows/forge-self-certify.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/workflows/mcp-registry-publish.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/workflows/metrics-auto-regen.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/workflows/metrics-drift.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/workflows/publish-on-tag.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/workflows/release-readiness.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/workflows/release.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/workflows/surface-drift.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/.github/workflows/uptime.yml +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/ARCHITECTURE.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/CONTRIBUTING.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/LICENSE +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/MANIFEST.in +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/SECURITY.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/assets/Atomadic-Forge-01.png +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/01-getting-started.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/02-commands.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/03-tutorial.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/04-llm-loops.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/05-faq.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/AGENTS_GUIDE.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/AIR_GAPPED.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/CI_CD.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/CODEX_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/COMMANDS.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/FIRST_10_MINUTES.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/FORMALIZATION.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/HIVE_PRIMITIVES.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/HIVE_STATUS.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/IDE_INTEGRATION.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/LANDSCAPE.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/MARKET_POSITIONING.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/MCP_TOOLS.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/MIGRATION.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/MULTI_REPO.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/PROVIDERS.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/README.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/RECEIPT.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/RELAY_PROTOCOL.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/RELEASE_CHECKLIST.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/RELEASE_MESSAGING.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/ROADMAP.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/SHOWCASE.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/SIDECAR.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/STUDIO.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/TOOL_FACTORY_WALKTHROUGH.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/V0.46.0_JUSTIFICATION_REPORT.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/V0.47.0_SELF_TEST_REPORT.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/WHY_NOW.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/WORKER_VS_LOCAL_MCP.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/WORLD_COLLISION.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/INDEX.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/absorb.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/audit.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/chat.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/commandsmith.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/config.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/create.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/demo.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/emergent-swarm.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/emergent-then-synergy.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/emergent.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/enhancement.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/evolve-then-iterate.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/evolve.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/feature-then-emergent.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/guard-install.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/handoff.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/harvest.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/hive.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/iterate.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/materialize.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/metrics.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/recon-swarm.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/relay.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/surface.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/synergy-then-emergent.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/synergy.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/welcome.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/commands/wisdom.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/compliance/CMMC_AI_MAPPING.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/compliance/CS-1.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/compliance/FDA_PCCP_MAPPING.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/compliance/SR_11-7_MAPPING.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/tutorials/01-quickstart.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/tutorials/02-your-first-package.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/tutorials/03-the-five-tier-law.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/tutorials/04-plug-in-llms.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/tutorials/05-multi-repo-absorb.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/tutorials/06-javascript-quickstart.md +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/setup.cfg +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/__init__.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/__main__.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/auth_constants.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/enhancement_proposal_constants.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/error_codes.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/handoff_constants.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/hive_constants.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/lifetime_savings_constants.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/materialize_types.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/mhed_invariants.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/nexus_constants.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/policy_schema.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/response_enrichment.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/roi_constants.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/schema_version_registry.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/welcome_constants.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/wisdom_constants.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/agent_memory.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/agent_summary.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/ast_scope_lock.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/call_graph.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/capability_scout.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/card_renderer.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/certify_checks.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/chat_context.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/code_signature.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/compliance_checker.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/custom_provider_client.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/dead_code_check.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/doc_auto_update.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/enforce_planner.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/enhancement_proposal_builder.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/error_hints.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/exported_api_check.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/forge_auth.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/forge_locate.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/forge_metrics.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/git_churn.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/handoff_builder.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/harvest_absorb.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/harvest_concept_bridge.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/hive_consensus_math.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/hive_io.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/intent_similarity.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/js_parser.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/lifetime_savings.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/lineage_chain.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/lineage_reader.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/llm_client.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/local_signer.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/maintainability_index.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/manifest_diff.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/patch_scorer.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/plan_adapter.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/policy_loader.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/polyglot_classify.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/polyglot_imports.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/polyglot_surface.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/preflight_change.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/progress_reporter.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/provider_resolver.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/recipes.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/repo_explainer.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/research_note_distiller.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/response_enricher.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/roi_calculator.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/rollback_planner.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/scaffold_polyglot.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/scout_walk.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/smell_scan.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/steersman_pack.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/surface_gap_check.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/test_runner.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/test_selector.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/tool_composer.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/validation_commands.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/welcome_narrator.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/wire_check.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/wire_stubs_gen.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/wisdom_capture.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/wisdom_io.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/wisdom_promote.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/wisdom_recall.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/worktree_status.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a2_mo_composites/evolve_session_store.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a2_mo_composites/iterate_session_store.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a2_mo_composites/nexus_client.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a2_mo_composites/plan_store.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a2_mo_composites/remote_seed_store.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/absorb_feature.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/cherry_hunter.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/cna_check.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/commit_compose.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/create_feature.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/dedup_engine.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.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.61.0 → atomadic_forge-0.63.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.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/demo_runner.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/emergent_feature.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/emergent_swarm.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/enhancement_proposal_feature.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/forge_enforce.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/forge_evolve_session.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/forge_loop.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/forge_loop_session.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/forge_metrics_feature.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/forge_pipeline.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/guard_install.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/handoff_feature.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/hive_sync.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/lsp_server.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/materialize_feature.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/mcp_server.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/nexus_bridge.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/relay_daemon.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/surface_export.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/synergy_feature.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/tool_factory.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/verify_umbrella.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/welcome_feature.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a3_og_features/wisdom_feature.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a4_sy_orchestration/cli.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/__init__.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/_registry.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/absorb.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/audit.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/chat.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/commandsmith.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/config_cmd.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/create.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/demo.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/emergent.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/emergent_swarm.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/enhancement.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/evolve.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/guard_install.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/handoff.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/harvest.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/hive.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/iterate.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/materialize.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/metrics.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/recon_swarm.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/relay.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/surface.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/synergy.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/welcome.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/commands/wisdom.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge.egg-info/SOURCES.txt +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge.egg-info/requires.txt +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge.egg-info/top_level.txt +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_aaaa_nexus_client.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_abstract_method_repair.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_agent_hire_protocol.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_agent_plan.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_agent_plan_pkg_label.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_agent_summary.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_ast_scope_lock.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_audit_verb.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_body_extractor_repairs.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_call_graph_summary.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_capability_scout.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_card_renderer.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_certify_operational_axis.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_chat.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_cherry_pick.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_classify_tier.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_classify_tier_ast_signals.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_cli_smoke.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_cli_swarm_aliases.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_codex_5_complete.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_codex_6_enforce_polyglot.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_commandsmith.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_compiler_feedback.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_compliance_checker.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_config.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_copilots_copilot.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_cost_circuit_breaker.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_create_feature.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_cs1_renderer.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_custom_provider.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_dead_code_check.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_dedup_engine.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_demo.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_doc_auto_update.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_emergent_compose.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_emergent_signature_extract.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_emergent_synthesize_imports.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_enhancement_proposal.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_error_codes.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_error_hints.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_evolve_js.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_exported_api_check.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_finalize_scaffold.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_forge_action.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_forge_auth_a1.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_forge_auth_a2.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_forge_enforce.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_generation_quality.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_git_churn.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_handoff.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_harvest_concept_bridge.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_hierarchical_memory.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_hive_sync.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_ignore_and_docs.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_import_smoke.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_iterate_evolve.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_js_certify.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_js_parser.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_js_recon.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_js_wire.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_lineage_chain.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_ling_provider.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_local_signer.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_lsp_protocol.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_maintainability_index.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_manifest_diff.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_materialize_feature.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_mcp_lazy_bootstrap.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_mcp_protocol.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_nexus_bridge.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_ollama_client.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_pipeline.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_plan_apply.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_polyglot_cli_mcp.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_polyglot_full_pipeline.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_polyglot_hardening.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_polyglot_swift_kotlin_go.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_polyglot_symbol_parity.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_pre_audit_smoke.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_precommit_hooks.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_progress_reporter.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_receipt_emitter.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_receipt_schema.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_receipt_signer.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_remote_seed_store.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_response_enricher.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_roi_calculator.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_sbom_cmd_text_summary.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_sbom_emitter.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_scaffold.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_sidecar.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_sidecar_validate.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_smell_score_formula.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_stagnation.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_steersman_pack.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_surface_export.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_surface_gap_check.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_synergy.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_test_runner.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_tier_init_rebuild.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_trust_gate_response.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_verify_suggested_recipe.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_welcome.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_welcome_enhancements.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_whoami_cmd.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_wire_certify.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_wire_stubs_gen.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_wire_suggest_repairs.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_wire_type_checking.py +0 -0
- {atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/tests/test_wisdom.py +0 -0
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## v0.63.0 — 2026-05-08
|
|
6
|
+
|
|
7
|
+
- docs: HARVEST_LEDGER.md — proof the prompt-to-shippable spec is met
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## v0.62.0 — 2026-05-08
|
|
11
|
+
|
|
12
|
+
- fix(forge): GAP-013 visitor-pattern + broaden abstract-by-convention detector
|
|
13
|
+
|
|
14
|
+
|
|
5
15
|
## v0.61.0 — 2026-05-08
|
|
6
16
|
|
|
7
17
|
- fix(forge): close audit findings — doc-update schema drift + GAP-009/010 + CHANGELOG gate
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atomadic-forge
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.63.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
|
|
@@ -216,7 +216,7 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
216
216
|
| MCP tools | **10 tools · 112 actions** |
|
|
217
217
|
| CLI verbs | **39** |
|
|
218
218
|
| Source files | **226** (~45K LOC) |
|
|
219
|
-
| Tests | **
|
|
219
|
+
| Tests | **1555 passing** across **111 test files** |
|
|
220
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 |
|
|
@@ -184,7 +184,7 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
184
184
|
| MCP tools | **10 tools · 112 actions** |
|
|
185
185
|
| CLI verbs | **39** |
|
|
186
186
|
| Source files | **226** (~45K LOC) |
|
|
187
|
-
| Tests | **
|
|
187
|
+
| Tests | **1555 passing** across **111 test files** |
|
|
188
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 |
|
|
@@ -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.63.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):
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/stub_detector.py
RENAMED
|
@@ -136,8 +136,29 @@ def detect_stubs_in_file(path: Path, *, repo_root: Path | None = None
|
|
|
136
136
|
# Closes GAP-009.
|
|
137
137
|
_ALWAYS_EMPTY_CLASSES = {"NullHandler"}
|
|
138
138
|
|
|
139
|
+
def _is_visitor_class(cls: ast.ClassDef) -> bool:
|
|
140
|
+
"""A class whose base name contains Visitor/Walker is by convention
|
|
141
|
+
an AST/IR walker. Its ``visit_X`` / ``walk_X`` methods commonly
|
|
142
|
+
``pass`` for node types it doesn't care about — that's the
|
|
143
|
+
pattern, not a stub. Closes GAP-013.
|
|
144
|
+
"""
|
|
145
|
+
for base in cls.bases:
|
|
146
|
+
target = base.attr if isinstance(base, ast.Attribute) else None
|
|
147
|
+
if isinstance(base, ast.Name):
|
|
148
|
+
target = base.id
|
|
149
|
+
if target and ("Visitor" in target or "Walker" in target
|
|
150
|
+
or "NodeVisitor" in target):
|
|
151
|
+
return True
|
|
152
|
+
# The class itself may name-signal the pattern.
|
|
153
|
+
return ("Visitor" in cls.name or "Walker" in cls.name)
|
|
154
|
+
|
|
155
|
+
def _is_visitor_method(name: str) -> bool:
|
|
156
|
+
return (name.startswith("visit_") or name.startswith("walk_")
|
|
157
|
+
or name.startswith("process_"))
|
|
158
|
+
|
|
139
159
|
def visit(node: ast.AST, prefix: str = "", in_private_class: bool = False,
|
|
140
|
-
in_always_empty_class: bool = False
|
|
160
|
+
in_always_empty_class: bool = False,
|
|
161
|
+
in_visitor_class: bool = False) -> None:
|
|
141
162
|
if isinstance(node, ast.FunctionDef | ast.AsyncFunctionDef):
|
|
142
163
|
if node.name.startswith("_") and node.name != "__init__":
|
|
143
164
|
return
|
|
@@ -148,6 +169,11 @@ def detect_stubs_in_file(path: Path, *, repo_root: Path | None = None
|
|
|
148
169
|
return
|
|
149
170
|
if in_always_empty_class:
|
|
150
171
|
return
|
|
172
|
+
if (in_visitor_class and _is_visitor_method(node.name)
|
|
173
|
+
and _function_body_is_pass_only(node)):
|
|
174
|
+
# Visitor base class methods that pass for ignored node
|
|
175
|
+
# types are the documented pattern, not stubs. GAP-013.
|
|
176
|
+
return
|
|
151
177
|
if _is_abstract_method(node):
|
|
152
178
|
return
|
|
153
179
|
qual = f"{prefix}{node.name}" if prefix else node.name
|
|
@@ -161,10 +187,12 @@ def detect_stubs_in_file(path: Path, *, repo_root: Path | None = None
|
|
|
161
187
|
child_in_private = in_private_class or node.name.startswith("_")
|
|
162
188
|
child_always_empty = (in_always_empty_class
|
|
163
189
|
or node.name in _ALWAYS_EMPTY_CLASSES)
|
|
190
|
+
child_in_visitor = in_visitor_class or _is_visitor_class(node)
|
|
164
191
|
for sub in node.body:
|
|
165
192
|
visit(sub, prefix=f"{node.name}.",
|
|
166
193
|
in_private_class=child_in_private,
|
|
167
|
-
in_always_empty_class=child_always_empty
|
|
194
|
+
in_always_empty_class=child_always_empty,
|
|
195
|
+
in_visitor_class=child_in_visitor)
|
|
168
196
|
return
|
|
169
197
|
|
|
170
198
|
for node in tree.body:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: atomadic-forge
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.63.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
|
|
@@ -216,7 +216,7 @@ Full tool reference: [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md) | First call: `welco
|
|
|
216
216
|
| MCP tools | **10 tools · 112 actions** |
|
|
217
217
|
| CLI verbs | **39** |
|
|
218
218
|
| Source files | **226** (~45K LOC) |
|
|
219
|
-
| Tests | **
|
|
219
|
+
| Tests | **1555 passing** across **111 test files** |
|
|
220
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 |
|
|
@@ -147,6 +147,37 @@ def test_stub_penalty_capped(tmp_path):
|
|
|
147
147
|
assert stub_penalty(findings) == 40 # cap
|
|
148
148
|
|
|
149
149
|
|
|
150
|
+
def test_does_not_flag_visitor_pass_methods(tmp_path):
|
|
151
|
+
"""GAP-013: ast.NodeVisitor subclasses ``pass`` for node types they
|
|
152
|
+
intentionally ignore. That's the pattern, not a stub."""
|
|
153
|
+
_write(
|
|
154
|
+
tmp_path / "f.py",
|
|
155
|
+
"import ast\n"
|
|
156
|
+
"class CallVisitor(ast.NodeVisitor):\n"
|
|
157
|
+
" def visit_Name(self, node):\n"
|
|
158
|
+
" pass\n"
|
|
159
|
+
" def visit_Constant(self, node):\n"
|
|
160
|
+
" pass\n"
|
|
161
|
+
" def visit_Call(self, node):\n"
|
|
162
|
+
" return self.calls.append(node)\n",
|
|
163
|
+
)
|
|
164
|
+
findings = detect_stubs_in_file(tmp_path / "f.py", repo_root=tmp_path)
|
|
165
|
+
assert findings == []
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def test_visitor_only_skips_visit_prefix_methods(tmp_path):
|
|
169
|
+
"""A non-visit_* method on a Visitor class is still flagged."""
|
|
170
|
+
_write(
|
|
171
|
+
tmp_path / "f.py",
|
|
172
|
+
"import ast\n"
|
|
173
|
+
"class V(ast.NodeVisitor):\n"
|
|
174
|
+
" def helper(self):\n"
|
|
175
|
+
" pass\n",
|
|
176
|
+
)
|
|
177
|
+
findings = detect_stubs_in_file(tmp_path / "f.py", repo_root=tmp_path)
|
|
178
|
+
assert any(f["qualname"] == "V.helper" for f in findings)
|
|
179
|
+
|
|
180
|
+
|
|
150
181
|
def test_does_not_flag_null_handler(tmp_path):
|
|
151
182
|
"""GAP-009: stdlib pattern — NullHandler.handle/emit are intentional no-ops."""
|
|
152
183
|
_write(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/docs/handoffs/WORKER_AUTO_DEPLOY_2026-05-06.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/auth_constants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/emergent_types.py
RENAMED
|
File without changes
|
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/error_codes.py
RENAMED
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/forge_types.py
RENAMED
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/gen_language.py
RENAMED
|
File without changes
|
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/hive_constants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/policy_schema.py
RENAMED
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/receipt_schema.py
RENAMED
|
File without changes
|
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/roi_constants.py
RENAMED
|
File without changes
|
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/semantic_types.py
RENAMED
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py
RENAMED
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/synergy_types.py
RENAMED
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a0_qk_constants/tier_names.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/agent_memory.py
RENAMED
|
File without changes
|
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/agent_summary.py
RENAMED
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/ast_scope_lock.py
RENAMED
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/body_extractor.py
RENAMED
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/call_graph.py
RENAMED
|
File without changes
|
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/card_renderer.py
RENAMED
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/certify_checks.py
RENAMED
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/chat_context.py
RENAMED
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/cherry_pick.py
RENAMED
|
File without changes
|
{atomadic_forge-0.61.0 → atomadic_forge-0.63.0}/src/atomadic_forge/a1_at_functions/classify_tier.py
RENAMED
|
File without changes
|