arcgraph 0.2.0__tar.gz → 0.2.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.
- {arcgraph-0.2.0 → arcgraph-0.2.1}/.github/workflows/ci.yml +8 -8
- {arcgraph-0.2.0 → arcgraph-0.2.1}/PKG-INFO +32 -15
- {arcgraph-0.2.0 → arcgraph-0.2.1}/README.md +31 -14
- {arcgraph-0.2.0 → arcgraph-0.2.1}/RELEASE_NOTES.md +2 -1
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/_build_provenance.json +3 -3
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/coverage.py +114 -21
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/cli.py +2 -5
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/cli_support.py +25 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/docs.py +18 -10
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/precision.py +19 -6
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/client-setup.md +9 -5
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/external-trial-guide.md +5 -5
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/package-readiness.md +1 -1
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/release-tooling.md +11 -4
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/release_notes/v0.2.0.md +7 -3
- arcgraph-0.2.1/docs/release_notes/v0.2.1.md +65 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/package-lock.json +2 -2
- {arcgraph-0.2.0 → arcgraph-0.2.1}/package.json +1 -1
- {arcgraph-0.2.0 → arcgraph-0.2.1}/pyproject.toml +1 -1
- {arcgraph-0.2.0 → arcgraph-0.2.1}/scripts/arcgraph_external_trial_bundle.py +3 -3
- {arcgraph-0.2.0 → arcgraph-0.2.1}/scripts/install-arcgraph-precision-tools.ps1 +38 -13
- {arcgraph-0.2.0 → arcgraph-0.2.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/.github/dependabot.yml +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/.gitignore +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/CODE_OF_CONDUCT.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/CONTRIBUTING.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/LICENSE +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/SECURITY.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/SUPPORT.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/__init__.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/__init__.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/arq_adapter.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/celery_adapter.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/common.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/django_adapter.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/fastapi_adapter.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/fastapi_routes.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/logging_adapter.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/mcp_adapter.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/pydantic_adapter.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/pytest_adapter.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/pytest_collection.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/pytest_fixtures.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/pytest_types.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/registry.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/service_container_adapter.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/sqlalchemy_adapter.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/adapters/typer_click_adapter.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/__init__.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/bindings.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/callable_types.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/calls/__init__.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/calls/analyzer.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/calls/constants.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/calls/context.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/calls/lexical.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/constructor_methods.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/exports.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/external_dependencies.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/external_types.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/fastapi_dependencies.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/har_trace.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/imports.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/operators.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/otel_trace.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/overloads.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/precise_references.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/precision_positions.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/python_scopes.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/runtime_trace.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/similarity.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/stdlib_functions.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/symbols.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/type_unions.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/analyzers/types.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/assets/__init__.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/assets/workbench/__init__.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/assets/workbench/index.html +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/assets/workbench/vendor/LICENSE.d3.txt +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/assets/workbench/vendor/d3.v7.min.js +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/__init__.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/baseline.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/changed_regions.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/contracts.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/errors.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/evidence.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/graph_delta.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/identities.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/paths.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/pins.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/planner.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/protected_surfaces.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/provider.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/service.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/source_provider.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/store.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/trusted_runners.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/verdicts.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/verification_plan.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/change/verifier.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/__init__.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/_structure_worker.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/artifact_inputs.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/assurance.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/binding_metrics.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/build_inputs.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/cleanup.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/confidence_profiles.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/evidence_manifest.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/expression_kinds.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/fact_storage.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/force_graph_export.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/freshness.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/graph_store.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/ids.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/language_tiers.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/merge.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/metadata.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/operation_lock.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/passes.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/payload_policy.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/precise_references.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/project_environment.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/query_engine.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/recovery.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/scanner.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/schemas.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/semantic.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/semantic_metrics.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/sharing_retry.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/storage_codec.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/structural.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/structure.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/target_resolver.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/type_metrics.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/unresolved_classification.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/utils.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/visual_contract.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/core/visual_slice_engine.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/__init__.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/agent_capabilities.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/agent_help.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/benchmark.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/ci.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/cli_change.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/cli_feedback.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/cli_ops.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/cli_trial.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/cli_visual.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/cli_workspace.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/client_setup.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/human_output.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/local_state.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/mcp_server.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/mcp_tools.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/metrics.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/ops.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/project_probe.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/reports.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/stdio_encoding.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/trace.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/trace_recorder.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/trial_feedback.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/trial_setup.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/visual_server.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/visual_slice.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/visual_smoke.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/workbench.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/interfaces/workspace.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/__init__.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/contracts.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/external_frontend.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/external_l3_frontends.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/external_protocol.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/frontends.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/indexer.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/openapi_frontend.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/python_frontend.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/python_reuse.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/reindexer.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/scip_frontend.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/typescript_extractor/declarations.mjs +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/typescript_extractor/edges.mjs +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/typescript_extractor/graph_primitives.mjs +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/typescript_extractor/module_resolution.mjs +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/typescript_extractor/runtime.mjs +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/typescript_extractor/similarity.mjs +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/typescript_extractor/similarity_runner.mjs +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/typescript_extractor/sources.mjs +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/typescript_extractor.mjs +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/typescript_frameworks.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/typescript_frontend.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/pipeline/typescript_references.mjs +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/providers/__init__.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/providers/context_provider.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/providers/flow_payload.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/providers/memory_connector.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/providers/orchestrator.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/providers/relationship_payload.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/providers/risk_provider.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/providers/why_provider.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/__init__.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/anchors.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/artifact_inputs.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/backends.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/build.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/contract.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/declaration_policy.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/disk_structure.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/external_targets.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/frozen.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/graph_projection.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/implementation.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/import_scan.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/install.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/journal.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/json_stream.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/lsp.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/projection.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/public_owners.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/records.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/reuse.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/runtime.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/search_paths.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/snapshot.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/static_writes.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/structure_facts.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/structure_provider.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/transport.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/semantic/uri_paths.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/arcgraph/version_info.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/agent-reading-guide.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/architecture.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/change-preflight.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/change-safety.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/clean-checkout-smoke.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/examples/agent-context.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/examples/evidence-inputs.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/examples/external-l3-payload.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/examples/impact-analysis.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/examples/mcp_readonly_host.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/examples/source-checkout-smoke.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/language-support.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/mcp-usage.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/provenance.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/release_notes/v0.1.0-rc10.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/release_notes/v0.1.0-rc7.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/release_notes/v0.1.0-rc8.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/release_notes/v0.1.0-rc9.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/release_notes/v0.1.0.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/docs/runbook.md +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/hatch_build.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/scripts/arcgraph.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/scripts/arcgraph_clean_checkout_smoke.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/scripts/arcgraph_mcp_protocol_probe.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/scripts/arcgraph_multi_project_trial_probe.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/scripts/arcgraph_package_readiness_smoke.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/scripts/arcgraph_release_candidate_check.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/scripts/arcgraph_release_gate.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/scripts/arcgraph_source_checkout_smoke.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/scripts/arcgraph_text_encoding_check.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/scripts/arcgraph_trial_contract.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/scripts/arcgraph_wheel_policy.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/scripts/semantic_shadow.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/viz/.gitignore +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/viz/extract_graph.py +0 -0
- {arcgraph-0.2.0 → arcgraph-0.2.1}/viz/index.html +0 -0
|
@@ -37,7 +37,7 @@ jobs:
|
|
|
37
37
|
python-version: '3.11'
|
|
38
38
|
cache: pip
|
|
39
39
|
|
|
40
|
-
- uses: actions/setup-node@
|
|
40
|
+
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7
|
|
41
41
|
with:
|
|
42
42
|
node-version: '20'
|
|
43
43
|
cache: npm
|
|
@@ -78,7 +78,7 @@ jobs:
|
|
|
78
78
|
|
|
79
79
|
- name: Upload coverage evidence
|
|
80
80
|
if: always()
|
|
81
|
-
uses: actions/upload-artifact@
|
|
81
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
|
|
82
82
|
with:
|
|
83
83
|
name: coverage-python-3.11
|
|
84
84
|
path: output/arcgraph/coverage.xml
|
|
@@ -118,7 +118,7 @@ jobs:
|
|
|
118
118
|
python-version: ${{ matrix.python }}
|
|
119
119
|
cache: pip
|
|
120
120
|
|
|
121
|
-
- uses: actions/setup-node@
|
|
121
|
+
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7
|
|
122
122
|
with:
|
|
123
123
|
node-version: '20'
|
|
124
124
|
cache: npm
|
|
@@ -178,7 +178,7 @@ jobs:
|
|
|
178
178
|
python-version: ${{ matrix.python }}
|
|
179
179
|
cache: pip
|
|
180
180
|
|
|
181
|
-
- uses: actions/setup-node@
|
|
181
|
+
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7
|
|
182
182
|
with:
|
|
183
183
|
node-version: '20'
|
|
184
184
|
cache: npm
|
|
@@ -195,7 +195,7 @@ jobs:
|
|
|
195
195
|
|
|
196
196
|
- name: Upload package provenance
|
|
197
197
|
if: always()
|
|
198
|
-
uses: actions/upload-artifact@
|
|
198
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
|
|
199
199
|
with:
|
|
200
200
|
name: package-readiness-${{ matrix.os }}-py${{ matrix.python }}-${{ matrix.mcp_line }}
|
|
201
201
|
path: output/release/package-readiness.json
|
|
@@ -225,7 +225,7 @@ jobs:
|
|
|
225
225
|
python-version: '3.11'
|
|
226
226
|
cache: pip
|
|
227
227
|
|
|
228
|
-
- uses: actions/setup-node@
|
|
228
|
+
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7
|
|
229
229
|
with:
|
|
230
230
|
node-version: ${{ matrix.node }}
|
|
231
231
|
cache: npm
|
|
@@ -259,7 +259,7 @@ jobs:
|
|
|
259
259
|
python-version: '3.12'
|
|
260
260
|
cache: pip
|
|
261
261
|
|
|
262
|
-
- uses: actions/setup-node@
|
|
262
|
+
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7
|
|
263
263
|
with:
|
|
264
264
|
node-version: '20'
|
|
265
265
|
cache: npm
|
|
@@ -290,7 +290,7 @@ jobs:
|
|
|
290
290
|
|
|
291
291
|
- name: Upload security evidence
|
|
292
292
|
if: always()
|
|
293
|
-
uses: actions/upload-artifact@
|
|
293
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7
|
|
294
294
|
with:
|
|
295
295
|
name: security-evidence
|
|
296
296
|
path: output/security
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: arcgraph
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Local-first code semantic graph engine for AI agents and code intelligence.
|
|
5
5
|
Project-URL: Homepage, https://github.com/glyphevo/arcgraph
|
|
6
6
|
Project-URL: Repository, https://github.com/glyphevo/arcgraph
|
|
@@ -80,7 +80,7 @@ With ArcGraph:
|
|
|
80
80
|
|
|
81
81
|
ArcGraph is published on PyPI, and
|
|
82
82
|
[RELEASE_NOTES.md](https://github.com/glyphevo/arcgraph/blob/main/RELEASE_NOTES.md)
|
|
83
|
-
lists the published versions. This source version, 0.2.
|
|
83
|
+
lists the published versions. This source version, 0.2.1, is a beta release.
|
|
84
84
|
Install ArcGraph into a dedicated virtual environment or tool environment and
|
|
85
85
|
reuse that one `arcgraph` executable across projects:
|
|
86
86
|
|
|
@@ -94,13 +94,13 @@ or, with uv:
|
|
|
94
94
|
uv tool install --python 3.11 "arcgraph[mcp]"
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
-
0.
|
|
98
|
-
|
|
97
|
+
0.2.0 requires Python 3.11 to 3.14; pip refuses other versions (0.1.0 required
|
|
98
|
+
3.11 or 3.12). Pin the exact version you tested, for example `arcgraph[mcp]==0.2.0`. An unpinned install
|
|
99
99
|
picks the newest version on PyPI that is not a pre-release; pip installs one of the earlier 0.1.0rc7–0.1.0rc10 pre-releases
|
|
100
100
|
only when you name its version or pass `--pre`. The `mcp` extra is only needed
|
|
101
|
-
to run the MCP server. Installs of 0.
|
|
101
|
+
to run the MCP server. Installs of 0.2.0 from PyPI were tested: pip with the
|
|
102
102
|
`mcp` extra on macOS, Windows and Linux (Ubuntu 24.04 under WSL), each with
|
|
103
|
-
Python 3.11 and 3.
|
|
103
|
+
Python 3.11, 3.12, 3.13 and 3.14, and `uv tool install --python 3.11` on macOS.
|
|
104
104
|
`arcgraph version --json` reports the commit the installed copy was built from.
|
|
105
105
|
|
|
106
106
|
To install the development version from this repository instead, replace the
|
|
@@ -121,8 +121,8 @@ commit you are using.
|
|
|
121
121
|
|
|
122
122
|
Requirements:
|
|
123
123
|
|
|
124
|
-
- Python 3.11
|
|
125
|
-
|
|
124
|
+
- Python 3.11 to 3.14 for 0.2.0 and the source on `main`; 3.11 or 3.12 for
|
|
125
|
+
0.1.0 from PyPI.
|
|
126
126
|
- Node.js and a resolvable TypeScript compiler API when analyzing
|
|
127
127
|
TypeScript/JavaScript projects. The Python wheel includes ArcGraph's `.mjs`
|
|
128
128
|
extractor but does not include `node_modules/typescript`; provide the runtime
|
|
@@ -240,7 +240,10 @@ python scripts/arcgraph.py <command>
|
|
|
240
240
|
```
|
|
241
241
|
|
|
242
242
|
On a clean Windows machine, install Python 3.11 to 3.14 and Node.js/npm first. Optional
|
|
243
|
-
precision tools can be installed with
|
|
243
|
+
precision tools can be installed with the script below. It installs `pyright` and, since
|
|
244
|
+
scip v0.7.1 publishes no Windows binary, builds `scip.exe` from a clone of the v0.7.1 tag,
|
|
245
|
+
so it also needs Go and Git. `scip-python` 0.6.6 fails while loading on native Windows;
|
|
246
|
+
run `arcgraph precision scip-python` in WSL with the macOS/Linux steps below.
|
|
244
247
|
|
|
245
248
|
```powershell
|
|
246
249
|
powershell -ExecutionPolicy Bypass -File scripts\install-arcgraph-precision-tools.ps1
|
|
@@ -252,14 +255,28 @@ tools directly:
|
|
|
252
255
|
|
|
253
256
|
```bash
|
|
254
257
|
npm install -g @sourcegraph/scip-python@0.6.6 pyright@1.1.409
|
|
255
|
-
go install github.com/scip-code/scip/cmd/scip@v0.7.1
|
|
256
258
|
```
|
|
257
259
|
|
|
258
|
-
The first command provides `scip-python`, `pyright`, and `pyright-langserver
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
260
|
+
The first command provides `scip-python`, `pyright`, and `pyright-langserver`.
|
|
261
|
+
`scip` is not installable with `go install package@version`: scip v0.7.1
|
|
262
|
+
declares a `replace` directive in its `go.mod`, and the Go toolchain refuses
|
|
263
|
+
that for a versioned install. Download the prebuilt binary for your platform
|
|
264
|
+
from the [scip v0.7.1 release](https://github.com/scip-code/scip/releases/tag/v0.7.1)
|
|
265
|
+
and verify the published checksum:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
curl -fsSLO https://github.com/scip-code/scip/releases/download/v0.7.1/scip-darwin-arm64.tar.gz
|
|
269
|
+
curl -fsSLO https://github.com/scip-code/scip/releases/download/v0.7.1/scip-darwin-arm64.tar.gz.sha256
|
|
270
|
+
shasum -a 256 -c scip-darwin-arm64.tar.gz.sha256
|
|
271
|
+
tar -xzf scip-darwin-arm64.tar.gz
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
The same release publishes `scip-darwin-amd64.tar.gz`,
|
|
275
|
+
`scip-linux-amd64.tar.gz` and `scip-linux-arm64.tar.gz`, each with its own
|
|
276
|
+
`.sha256` file; use `sha256sum -c` instead of `shasum -a 256 -c` on Linux.
|
|
277
|
+
The extracted `scip` binary provides `scip`. Then pass the generated JSON
|
|
278
|
+
artifacts to `arcgraph build`. The GitHub Actions `CI` workflow does not
|
|
279
|
+
install these tools, so it is not a fallback for generating this evidence.
|
|
263
280
|
|
|
264
281
|
## Quickstart
|
|
265
282
|
|
|
@@ -38,7 +38,7 @@ With ArcGraph:
|
|
|
38
38
|
|
|
39
39
|
ArcGraph is published on PyPI, and
|
|
40
40
|
[RELEASE_NOTES.md](https://github.com/glyphevo/arcgraph/blob/main/RELEASE_NOTES.md)
|
|
41
|
-
lists the published versions. This source version, 0.2.
|
|
41
|
+
lists the published versions. This source version, 0.2.1, is a beta release.
|
|
42
42
|
Install ArcGraph into a dedicated virtual environment or tool environment and
|
|
43
43
|
reuse that one `arcgraph` executable across projects:
|
|
44
44
|
|
|
@@ -52,13 +52,13 @@ or, with uv:
|
|
|
52
52
|
uv tool install --python 3.11 "arcgraph[mcp]"
|
|
53
53
|
```
|
|
54
54
|
|
|
55
|
-
0.
|
|
56
|
-
|
|
55
|
+
0.2.0 requires Python 3.11 to 3.14; pip refuses other versions (0.1.0 required
|
|
56
|
+
3.11 or 3.12). Pin the exact version you tested, for example `arcgraph[mcp]==0.2.0`. An unpinned install
|
|
57
57
|
picks the newest version on PyPI that is not a pre-release; pip installs one of the earlier 0.1.0rc7–0.1.0rc10 pre-releases
|
|
58
58
|
only when you name its version or pass `--pre`. The `mcp` extra is only needed
|
|
59
|
-
to run the MCP server. Installs of 0.
|
|
59
|
+
to run the MCP server. Installs of 0.2.0 from PyPI were tested: pip with the
|
|
60
60
|
`mcp` extra on macOS, Windows and Linux (Ubuntu 24.04 under WSL), each with
|
|
61
|
-
Python 3.11 and 3.
|
|
61
|
+
Python 3.11, 3.12, 3.13 and 3.14, and `uv tool install --python 3.11` on macOS.
|
|
62
62
|
`arcgraph version --json` reports the commit the installed copy was built from.
|
|
63
63
|
|
|
64
64
|
To install the development version from this repository instead, replace the
|
|
@@ -79,8 +79,8 @@ commit you are using.
|
|
|
79
79
|
|
|
80
80
|
Requirements:
|
|
81
81
|
|
|
82
|
-
- Python 3.11
|
|
83
|
-
|
|
82
|
+
- Python 3.11 to 3.14 for 0.2.0 and the source on `main`; 3.11 or 3.12 for
|
|
83
|
+
0.1.0 from PyPI.
|
|
84
84
|
- Node.js and a resolvable TypeScript compiler API when analyzing
|
|
85
85
|
TypeScript/JavaScript projects. The Python wheel includes ArcGraph's `.mjs`
|
|
86
86
|
extractor but does not include `node_modules/typescript`; provide the runtime
|
|
@@ -198,7 +198,10 @@ python scripts/arcgraph.py <command>
|
|
|
198
198
|
```
|
|
199
199
|
|
|
200
200
|
On a clean Windows machine, install Python 3.11 to 3.14 and Node.js/npm first. Optional
|
|
201
|
-
precision tools can be installed with
|
|
201
|
+
precision tools can be installed with the script below. It installs `pyright` and, since
|
|
202
|
+
scip v0.7.1 publishes no Windows binary, builds `scip.exe` from a clone of the v0.7.1 tag,
|
|
203
|
+
so it also needs Go and Git. `scip-python` 0.6.6 fails while loading on native Windows;
|
|
204
|
+
run `arcgraph precision scip-python` in WSL with the macOS/Linux steps below.
|
|
202
205
|
|
|
203
206
|
```powershell
|
|
204
207
|
powershell -ExecutionPolicy Bypass -File scripts\install-arcgraph-precision-tools.ps1
|
|
@@ -210,14 +213,28 @@ tools directly:
|
|
|
210
213
|
|
|
211
214
|
```bash
|
|
212
215
|
npm install -g @sourcegraph/scip-python@0.6.6 pyright@1.1.409
|
|
213
|
-
go install github.com/scip-code/scip/cmd/scip@v0.7.1
|
|
214
216
|
```
|
|
215
217
|
|
|
216
|
-
The first command provides `scip-python`, `pyright`, and `pyright-langserver
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
218
|
+
The first command provides `scip-python`, `pyright`, and `pyright-langserver`.
|
|
219
|
+
`scip` is not installable with `go install package@version`: scip v0.7.1
|
|
220
|
+
declares a `replace` directive in its `go.mod`, and the Go toolchain refuses
|
|
221
|
+
that for a versioned install. Download the prebuilt binary for your platform
|
|
222
|
+
from the [scip v0.7.1 release](https://github.com/scip-code/scip/releases/tag/v0.7.1)
|
|
223
|
+
and verify the published checksum:
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
curl -fsSLO https://github.com/scip-code/scip/releases/download/v0.7.1/scip-darwin-arm64.tar.gz
|
|
227
|
+
curl -fsSLO https://github.com/scip-code/scip/releases/download/v0.7.1/scip-darwin-arm64.tar.gz.sha256
|
|
228
|
+
shasum -a 256 -c scip-darwin-arm64.tar.gz.sha256
|
|
229
|
+
tar -xzf scip-darwin-arm64.tar.gz
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
The same release publishes `scip-darwin-amd64.tar.gz`,
|
|
233
|
+
`scip-linux-amd64.tar.gz` and `scip-linux-arm64.tar.gz`, each with its own
|
|
234
|
+
`.sha256` file; use `sha256sum -c` instead of `shasum -a 256 -c` on Linux.
|
|
235
|
+
The extracted `scip` binary provides `scip`. Then pass the generated JSON
|
|
236
|
+
artifacts to `arcgraph build`. The GitHub Actions `CI` workflow does not
|
|
237
|
+
install these tools, so it is not a fallback for generating this evidence.
|
|
221
238
|
|
|
222
239
|
## Quickstart
|
|
223
240
|
|
|
@@ -5,7 +5,8 @@ notes themselves are the only place their content is written down.
|
|
|
5
5
|
|
|
6
6
|
| Version | Status | Notes |
|
|
7
7
|
| --- | --- | --- |
|
|
8
|
-
| 0.2.
|
|
8
|
+
| 0.2.1 | Declared source version on `main`; not yet published | [v0.2.1](docs/release_notes/v0.2.1.md) |
|
|
9
|
+
| 0.2.0 | Published on PyPI on 2026-10-21 as a beta release | [v0.2.0](docs/release_notes/v0.2.0.md) |
|
|
9
10
|
| 0.1.0 | Published on PyPI on 2026-10-05 as a beta release | [v0.1.0](docs/release_notes/v0.1.0.md) |
|
|
10
11
|
| 0.1.0rc10 | Published on PyPI on 2026-10-04 as an alpha developer-preview pre-release | [v0.1.0-rc10](docs/release_notes/v0.1.0-rc10.md) |
|
|
11
12
|
| 0.1.0rc9 | Published on PyPI on 2026-10-03 as an alpha developer-preview pre-release | [v0.1.0-rc9](docs/release_notes/v0.1.0-rc9.md) |
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"build_version": "0.2.
|
|
2
|
+
"build_version": "0.2.1",
|
|
3
3
|
"schema_version": "1.0.0",
|
|
4
4
|
"source": {
|
|
5
|
-
"commit_sha": "
|
|
6
|
-
"tree_sha": "
|
|
5
|
+
"commit_sha": "282eb8a89ecb063c573d40e32b65b794c32d1664",
|
|
6
|
+
"tree_sha": "aaa5ce029ba8d0a08d40933498eeffcbdc235544",
|
|
7
7
|
"working_tree_clean": true,
|
|
8
8
|
"working_tree_status_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
|
9
9
|
}
|
|
@@ -26,6 +26,10 @@ class CoverageAnalysis:
|
|
|
26
26
|
warnings: list[BuildWarning] = field(default_factory=list)
|
|
27
27
|
status: str = "unavailable"
|
|
28
28
|
metrics: dict[str, Any] = field(default_factory=dict)
|
|
29
|
+
# True when a file's test contexts all failed to match an indexed test
|
|
30
|
+
# node: the per-test evidence for that file is missing, so the coverage
|
|
31
|
+
# status is partial even when aggregate edges exist.
|
|
32
|
+
test_contexts_unmatched: bool = False
|
|
29
33
|
|
|
30
34
|
|
|
31
35
|
class CoverageCollector:
|
|
@@ -209,10 +213,14 @@ class CoverageCollector:
|
|
|
209
213
|
metrics={"format": "coverage.py"},
|
|
210
214
|
)
|
|
211
215
|
symbols = self._symbol_nodes(nodes)
|
|
216
|
+
context_index = self._coverage_context_index(nodes)
|
|
217
|
+
resolved_contexts: dict[str, Node | None] = {}
|
|
212
218
|
aggregate = self._coverage_node(path, "coverage.py")
|
|
213
219
|
edges = {}
|
|
214
220
|
unmatched = malformed = 0
|
|
215
221
|
unknown_contexts = set()
|
|
222
|
+
unmatched_test_contexts = set()
|
|
223
|
+
matched_test_contexts = set()
|
|
216
224
|
for raw_path, item in payload["files"].items():
|
|
217
225
|
if not isinstance(item, dict) or not isinstance(
|
|
218
226
|
item.get("executed_lines"), list
|
|
@@ -246,14 +254,20 @@ class CoverageCollector:
|
|
|
246
254
|
if isinstance(name, str) and name:
|
|
247
255
|
contexts.setdefault(name, set()).add(int(number))
|
|
248
256
|
for name, covered in contexts.items():
|
|
249
|
-
|
|
250
|
-
aggregate
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
+
if not name:
|
|
258
|
+
source = aggregate
|
|
259
|
+
else:
|
|
260
|
+
is_test_context = self._coverage_context_parts(name) is not None
|
|
261
|
+
source = self._coverage_test_context(
|
|
262
|
+
name, context_index, module_by_path, resolved_contexts
|
|
263
|
+
)
|
|
264
|
+
if source is None:
|
|
265
|
+
unknown_contexts.add(name)
|
|
266
|
+
if is_test_context:
|
|
267
|
+
unmatched_test_contexts.add(name)
|
|
268
|
+
continue
|
|
269
|
+
if is_test_context:
|
|
270
|
+
matched_test_contexts.add(name)
|
|
257
271
|
targets = [
|
|
258
272
|
module_by_path[file_path],
|
|
259
273
|
*[
|
|
@@ -297,9 +311,25 @@ class CoverageCollector:
|
|
|
297
311
|
properties["contexts"] = sorted(
|
|
298
312
|
set(properties["contexts"]) | {name}
|
|
299
313
|
)
|
|
314
|
+
warnings = []
|
|
315
|
+
if unmatched_test_contexts:
|
|
316
|
+
examples = sorted(unmatched_test_contexts)[:5]
|
|
317
|
+
warnings.append(
|
|
318
|
+
BuildWarning(
|
|
319
|
+
kind="coverage_python_unmatched_contexts",
|
|
320
|
+
path=self._display_path(path),
|
|
321
|
+
message=(
|
|
322
|
+
f"{len(unmatched_test_contexts)} coverage.py test context(s) "
|
|
323
|
+
"did not match an indexed test node: " + ", ".join(examples)
|
|
324
|
+
),
|
|
325
|
+
)
|
|
326
|
+
)
|
|
300
327
|
return CoverageAnalysis(
|
|
301
328
|
nodes=[aggregate] if edges else [],
|
|
302
329
|
edges=sorted(edges.values(), key=lambda e: (e.source, e.target, e.kind)),
|
|
330
|
+
warnings=warnings,
|
|
331
|
+
test_contexts_unmatched=bool(unmatched_test_contexts)
|
|
332
|
+
and not matched_test_contexts,
|
|
303
333
|
metrics={
|
|
304
334
|
"format": "coverage.py",
|
|
305
335
|
"entries_total": len(payload["files"]),
|
|
@@ -309,24 +339,83 @@ class CoverageCollector:
|
|
|
309
339
|
},
|
|
310
340
|
)
|
|
311
341
|
|
|
312
|
-
|
|
313
|
-
|
|
342
|
+
@staticmethod
|
|
343
|
+
def _coverage_context_index(nodes: list[Node]) -> dict[tuple[str, str], list[Node]]:
|
|
344
|
+
"""Index the nodes a coverage.py test context can name, once per analysis.
|
|
345
|
+
|
|
346
|
+
Keyed by (path, qualname): the pytest adapter adds a ``test_case`` node
|
|
347
|
+
with the same path and qualname as the test function, so one key can
|
|
348
|
+
hold both.
|
|
349
|
+
"""
|
|
350
|
+
index: dict[tuple[str, str], list[Node]] = {}
|
|
351
|
+
for node in nodes:
|
|
352
|
+
if (
|
|
353
|
+
node.kind not in {"function", "method", "test_case"}
|
|
354
|
+
or not node.path
|
|
355
|
+
or not node.qualname
|
|
356
|
+
):
|
|
357
|
+
continue
|
|
358
|
+
index.setdefault((node.path, node.qualname), []).append(node)
|
|
359
|
+
return index
|
|
360
|
+
|
|
361
|
+
@staticmethod
|
|
362
|
+
def _coverage_context_parts(context: str) -> tuple[str, list[str]] | None:
|
|
363
|
+
"""Split a pytest-cov context name into (path, qualname parts).
|
|
364
|
+
|
|
365
|
+
Returns None for a name that is not a single pytest node id: static
|
|
366
|
+
contexts (``""``, ``production``) and names with several node ids are
|
|
367
|
+
not test contexts and are never matched to a test node.
|
|
368
|
+
"""
|
|
314
369
|
identifiers = [part for part in context.split("|") if "::" in part]
|
|
315
370
|
if len(identifiers) != 1:
|
|
316
371
|
return None
|
|
317
372
|
path, *parts = identifiers[0].split("::")
|
|
318
|
-
|
|
319
|
-
if file_path is None or not parts:
|
|
373
|
+
if not path or not parts:
|
|
320
374
|
return None
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
]
|
|
329
|
-
|
|
375
|
+
return path, parts
|
|
376
|
+
|
|
377
|
+
def _coverage_test_context(
|
|
378
|
+
self,
|
|
379
|
+
context: str,
|
|
380
|
+
index: dict[tuple[str, str], list[Node]],
|
|
381
|
+
modules: dict[str, Node],
|
|
382
|
+
resolved: dict[str, Node | None],
|
|
383
|
+
) -> Node | None:
|
|
384
|
+
# pytest-cov node ids may have static prefixes and phase suffixes.
|
|
385
|
+
if context in resolved:
|
|
386
|
+
return resolved[context]
|
|
387
|
+
parts = self._coverage_context_parts(context)
|
|
388
|
+
node: Node | None = None
|
|
389
|
+
if parts is not None:
|
|
390
|
+
path, qualname_parts = parts
|
|
391
|
+
file_path = self._match_file_path(self._normalized_path(path), modules)
|
|
392
|
+
if file_path is not None:
|
|
393
|
+
qualname = ".".join(part.split("[", 1)[0] for part in qualname_parts)
|
|
394
|
+
node = self._match_context_node(
|
|
395
|
+
index, file_path, modules[file_path].qualname + "." + qualname
|
|
396
|
+
)
|
|
397
|
+
resolved[context] = node
|
|
398
|
+
return node
|
|
399
|
+
|
|
400
|
+
@staticmethod
|
|
401
|
+
def _match_context_node(
|
|
402
|
+
index: dict[tuple[str, str], list[Node]], file_path: str, qualname: str
|
|
403
|
+
) -> Node | None:
|
|
404
|
+
"""Pick the node a context names: the test case first, then the function.
|
|
405
|
+
|
|
406
|
+
The pytest adapter registers a ``test_case`` node with the same path and
|
|
407
|
+
qualname as the test function; the test case is the node that carries
|
|
408
|
+
the per-test evidence, so it wins. Without one, a single function or
|
|
409
|
+
method is the only unambiguous match.
|
|
410
|
+
"""
|
|
411
|
+
matches = index.get((file_path, qualname), [])
|
|
412
|
+
test_cases = [node for node in matches if node.kind == "test_case"]
|
|
413
|
+
if len(test_cases) == 1:
|
|
414
|
+
return test_cases[0]
|
|
415
|
+
if test_cases:
|
|
416
|
+
return None
|
|
417
|
+
functions = [node for node in matches if node.kind in {"function", "method"}]
|
|
418
|
+
return functions[0] if len(functions) == 1 else None
|
|
330
419
|
|
|
331
420
|
def _analyze_istanbul_json(
|
|
332
421
|
self,
|
|
@@ -657,6 +746,10 @@ class CoverageCollector:
|
|
|
657
746
|
),
|
|
658
747
|
)
|
|
659
748
|
)
|
|
749
|
+
if analysis.test_contexts_unmatched:
|
|
750
|
+
# The report has test contexts and none of them matched, so the
|
|
751
|
+
# per-test evidence is missing even if aggregate edges exist.
|
|
752
|
+
status = "partial"
|
|
660
753
|
|
|
661
754
|
covered_files = sorted(
|
|
662
755
|
{
|
|
@@ -132,6 +132,7 @@ from arcgraph.interfaces.cli_visual import ( # noqa: F401
|
|
|
132
132
|
from arcgraph.interfaces.cli_support import ( # noqa: F401
|
|
133
133
|
output_location,
|
|
134
134
|
handle_export,
|
|
135
|
+
precision_tools_fix,
|
|
135
136
|
print_json,
|
|
136
137
|
python_checks,
|
|
137
138
|
query_engine,
|
|
@@ -1860,11 +1861,7 @@ def handle_doctor(args: argparse.Namespace) -> dict[str, Any]:
|
|
|
1860
1861
|
"name": "precision_tools",
|
|
1861
1862
|
"status": "warn",
|
|
1862
1863
|
"message": f"Missing: {', '.join(missing_tools)}.",
|
|
1863
|
-
"fix": (
|
|
1864
|
-
"Run scripts/install-arcgraph-precision-tools.ps1 (Windows) or "
|
|
1865
|
-
"install scip-python, scip, pyright manually. "
|
|
1866
|
-
"Precision tools are optional; builds work without them."
|
|
1867
|
-
),
|
|
1864
|
+
"fix": precision_tools_fix(),
|
|
1868
1865
|
}
|
|
1869
1866
|
)
|
|
1870
1867
|
|
|
@@ -174,6 +174,31 @@ def python_checks(repo_root: Path, *, semantic_state=None) -> list[dict[str, Any
|
|
|
174
174
|
return checks
|
|
175
175
|
|
|
176
176
|
|
|
177
|
+
def precision_tools_fix() -> str:
|
|
178
|
+
"""doctor's repair hint for missing precision tools, per platform.
|
|
179
|
+
|
|
180
|
+
Windows has a repository script that installs scip and pyright; scip-python
|
|
181
|
+
0.6.6 does not run on native Windows and is run in WSL. macOS and Linux
|
|
182
|
+
install the npm tools and take scip from its official release, which is
|
|
183
|
+
what the README documents for those platforms.
|
|
184
|
+
"""
|
|
185
|
+
|
|
186
|
+
if platform.system() == "Windows":
|
|
187
|
+
return (
|
|
188
|
+
"Run scripts/install-arcgraph-precision-tools.ps1 to install scip "
|
|
189
|
+
"and pyright; scip-python 0.6.6 does not run on native Windows, so "
|
|
190
|
+
"run `arcgraph precision scip-python` in WSL. Precision tools are "
|
|
191
|
+
"optional; builds work without them."
|
|
192
|
+
)
|
|
193
|
+
return (
|
|
194
|
+
"Install scip-python and pyright with `npm install -g "
|
|
195
|
+
"@sourcegraph/scip-python@0.6.6 pyright@1.1.409`, and scip v0.7.1 from "
|
|
196
|
+
"the official release "
|
|
197
|
+
"(https://github.com/scip-code/scip/releases/tag/v0.7.1). "
|
|
198
|
+
"Precision tools are optional; builds work without them."
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
|
|
177
202
|
def query_engine(args: argparse.Namespace) -> QueryEngine:
|
|
178
203
|
repo_root = Path(args.repo_root).resolve()
|
|
179
204
|
return QueryEngine((repo_root / args.output_dir).resolve())
|
|
@@ -51,7 +51,7 @@ def _docs_payload(topic: str) -> dict[str, Any]:
|
|
|
51
51
|
{
|
|
52
52
|
"title": "Prepare One Project",
|
|
53
53
|
"items": [
|
|
54
|
-
'Install ArcGraph in a persistent tool environment or venv; MCP clients require the mcp extra. ArcGraph is beta software; the repository\'s RELEASE_NOTES.md lists the published versions. ArcGraph is published on PyPI: install it with `uv tool install --python 3.11 "arcgraph[mcp]"` or `python -m pip install "arcgraph[mcp]"` (pip installs of 0.
|
|
54
|
+
'Install ArcGraph in a persistent tool environment or venv; MCP clients require the mcp extra. ArcGraph is beta software; the repository\'s RELEASE_NOTES.md lists the published versions. ArcGraph is published on PyPI: install it with `uv tool install --python 3.11 "arcgraph[mcp]"` or `python -m pip install "arcgraph[mcp]"` (pip installs of 0.2.0 from PyPI were tested on macOS, Windows and Linux with Python 3.11 to 3.14; pin the exact version you tested, for example `arcgraph[mcp]==0.2.0`), or from the GitHub repository with `"arcgraph[mcp] @ git+https://github.com/glyphevo/arcgraph.git"`. A disposable uvx environment is not managed by setup. Git tags and GitHub releases carry the same files as the matching PyPI version; npm and Docker/GHCR are not published.',
|
|
55
55
|
"From the target project, run `arcgraph setup --client claude|codex|cursor|hermes|pi`, selecting one client. It explicitly builds or refreshes the index, probes the runtime, then writes one client entry.",
|
|
56
56
|
"Use `--dry-run` for a plan without writes, indexing or subprocesses; `--client-config PATH` overrides the destination, not client discovery; `--timeout SECONDS` sets a positive per-step timeout.",
|
|
57
57
|
"Global options precede setup: `arcgraph --repo-root /path/to/project --output-dir /path/to/index setup --client codex`. Default output is project/output/arcgraph. Indexing, MCP and CLI guidance share the same absolute paths. Source scope follows ordinary project configuration and detection; inspect it with doctor.",
|
|
@@ -209,7 +209,7 @@ def _docs_payload(topic: str) -> dict[str, Any]:
|
|
|
209
209
|
"title": "Local Install And Upgrade",
|
|
210
210
|
"items": [
|
|
211
211
|
"ArcGraph is on PyPI and can also be installed from a source checkout; ArcGraph is beta software. Git tags (`v` followed by the version) and GitHub releases carry the same two files as the matching version on PyPI. npm and Docker/GHCR package paths are not published.",
|
|
212
|
-
"ArcGraph requires Python 3.11 to 3.14 (`requires-python >=3.11,<3.15`); 0.1.0
|
|
212
|
+
"ArcGraph requires Python 3.11 to 3.14 (`requires-python >=3.11,<3.15`); 0.1.0 required 3.11 or 3.12. Create and activate a virtual environment before installing when you want an isolated local tool.",
|
|
213
213
|
"From a source checkout, run `python -m pip install --upgrade -e .` in the ArcGraph project directory to install or refresh the `arcgraph` CLI.",
|
|
214
214
|
'For development and local validation, run `python -m pip install -e ".[dev]"`; use the analyzed project\'s locked npm install when TypeScript/JavaScript analysis is required.',
|
|
215
215
|
"Node.js and a resolvable TypeScript compiler API are runtime dependencies for TypeScript/JavaScript analysis, not merely test dependencies. The Python wheel includes the `.mjs` extractor but not `node_modules/typescript`.",
|
|
@@ -233,7 +233,7 @@ def _docs_payload(topic: str) -> dict[str, Any]:
|
|
|
233
233
|
"Pyright export metrics include total probes, requestable probes, skipped unmappable probes, request count, resolved type info, and unresolved probes.",
|
|
234
234
|
"The Windows precision-tools install script pins `pyright@1.1.409`; local full evidence profiles should use the same version unless intentionally testing compatibility. GitHub Actions does not currently install or run Pyright.",
|
|
235
235
|
"Pass the resulting JSON to `arcgraph build --scip-index output/arcgraph/scip-index.json --pyright-export output/arcgraph/pyright-export.json`; missing or invalid precision input remains explicit as `precision=ast_fallback_only` or `precision_partial`.",
|
|
236
|
-
"On Windows, run `scripts/install-arcgraph-precision-tools.ps1` to install
|
|
236
|
+
"On Windows, run `scripts/install-arcgraph-precision-tools.ps1` to install `pyright@1.1.409` and build `scip.exe v0.7.1` with Go from a clone of the v0.7.1 tag (Go and Git are required; scip publishes no Windows binary). `@sourcegraph/scip-python@0.6.6` does not run on native Windows (it fails while loading), so run `arcgraph precision scip-python` in WSL with the Linux install steps. On macOS and Linux, take `scip` v0.7.1 from the prebuilt binary on its official release and check the published checksum. GitHub Actions is not currently a working fallback for this, since it neither installs these tools nor runs at all while disabled.",
|
|
237
237
|
],
|
|
238
238
|
},
|
|
239
239
|
{
|
|
@@ -749,7 +749,7 @@ def _docs_payload(topic: str) -> dict[str, Any]:
|
|
|
749
749
|
"`arcgraph precision scip-python`, `arcgraph precision scip-json`, and `arcgraph precision pyright` generate JSON artifacts accepted by `arcgraph build --scip-index ... --pyright-export ...`.",
|
|
750
750
|
"`runtime_trace=available|partial|unavailable` describes explicit runtime trace import status.",
|
|
751
751
|
"A small CI smoke trace proves the runtime evidence chain and stale detection only; broad dynamic behavior coverage requires an intentionally broader trace profile.",
|
|
752
|
-
"`coverage=available|partial|unavailable` describes test coverage input status; `partial` means the file was stale, invalid, or produced only partial evidence.",
|
|
752
|
+
"`coverage=available|partial|unavailable` describes test coverage input status; `partial` means the file was stale, invalid, or produced only partial evidence, including a coverage.py report whose test contexts all failed to match an indexed test.",
|
|
753
753
|
],
|
|
754
754
|
},
|
|
755
755
|
{
|
|
@@ -849,11 +849,12 @@ def _docs_payload(topic: str) -> dict[str, Any]:
|
|
|
849
849
|
"title": "ArcGraph Quickstart",
|
|
850
850
|
"sections": [
|
|
851
851
|
{
|
|
852
|
-
"title": "Install
|
|
852
|
+
"title": "Install",
|
|
853
853
|
"items": [
|
|
854
|
-
|
|
855
|
-
"
|
|
856
|
-
"
|
|
854
|
+
'ArcGraph requires Python 3.11 to 3.14 (`requires-python >=3.11,<3.15`; 0.1.0 required 3.11 or 3.12) and is published on PyPI: `python -m pip install "arcgraph[mcp]"` or `uv tool install --python 3.11 "arcgraph[mcp]"` installs the CLI, and the `mcp` extra is only needed to run the MCP server.',
|
|
855
|
+
"Pin the exact version you tested, for example `arcgraph[mcp]==0.2.0`; `arcgraph version --json` reports the commit the installed copy was built from.",
|
|
856
|
+
"From a source checkout, create and activate a virtual environment, then run `python -m pip install --upgrade pip`.",
|
|
857
|
+
"Run `python -m pip install -e .` to install the CLI from that checkout.",
|
|
857
858
|
'Run `python -m pip install -e ".[dev]"` when you need development dependencies or local validation.',
|
|
858
859
|
"For TypeScript/JavaScript analysis, Node.js and a TypeScript compiler API must be resolvable at runtime. Use the analyzed project's locked npm install; the Python wheel includes the `.mjs` extractor but not `node_modules/typescript`.",
|
|
859
860
|
"For ArcGraph's own TypeScript golden tests from a source checkout, run `npm ci` in the ArcGraph checkout; that is development setup, not the analyzed project's product runtime.",
|
|
@@ -972,7 +973,7 @@ def _docs_payload(topic: str) -> dict[str, Any]:
|
|
|
972
973
|
"Run `python scripts/arcgraph.py build` to rebuild the self-index at the current commit.",
|
|
973
974
|
"Run `python scripts/arcgraph.py ci` and require 0 fail / 0 warn.",
|
|
974
975
|
"Run `python scripts/arcgraph_release_gate.py` to validate freshness, CI status, wheel buildability, and packaged release assets.",
|
|
975
|
-
"Run `python scripts/arcgraph_release_candidate_check.py --wheel dist/arcgraph-0.2.
|
|
976
|
+
"Run `python scripts/arcgraph_release_candidate_check.py --wheel dist/arcgraph-0.2.1-py3-none-any.whl --sdist dist/arcgraph-0.2.1.tar.gz --repo-root . --output output/arcgraph/reports/v0.2.1-smoke.json` to smoke the installed wheel before tagging or publishing. Its `wheel-source-provenance` check records the wheel SHA-256 and passes only when the wheel's embedded build provenance names the same commit and tree as `--repo-root` HEAD and records a clean build working tree, so neither a stale `dist/` artifact from an earlier commit nor a wheel built over uncommitted edits can be validated under the current version label. Its `clean-rebuild-identical` check then clones that HEAD into a fresh directory, runs an isolated `python -m build` there, and requires the rebuilt wheel and sdist to carry the same file names and identical bytes as the two files given, so an archive edited after the build (a changed dependency declaration, entry point or script) is rejected even when its RECORD was regenerated to match. The build backend is pinned to an exact version in `pyproject.toml` to reduce drift between the two builds; the pin covers only that direct requirement, so a change in a transitive build dependency or in the environment can still make the comparison fail, which is the safe direction, and the check records the Python, build frontend and backend versions it used. A side carrying no provenance at all, or no repository head to rebuild, is reported as `warn` rather than claimed as bound, and `--allow-source-mismatch` downgrades a real disagreement to a disclosed warning; report `status` is then `warn`, never `pass`, and the bundle assembler accepts only `pass`.",
|
|
976
977
|
"Maintainers can assemble a local external-trial bundle with `python scripts/arcgraph_external_trial_bundle.py`; run it with `--help` for its inputs. It publishes, tags and pushes nothing, and it requires saved evidence of a completed successful remote CI push run on `main` for the exact candidate commit.",
|
|
977
978
|
"Review `arcgraph docs schema-governance` before changing `SCHEMA_VERSION`, graph storage, resolver defaults, or evidence import schemas.",
|
|
978
979
|
"Review `arcgraph docs frontend-contract` before adding, removing, or changing a language frontend.",
|
|
@@ -1110,7 +1111,7 @@ def _docs_payload(topic: str) -> dict[str, Any]:
|
|
|
1110
1111
|
"title": "Partial Semantic Results",
|
|
1111
1112
|
"items": [
|
|
1112
1113
|
"When precision inputs are missing, `precision=ast_fallback_only` is expected and should be reported.",
|
|
1113
|
-
"
|
|
1114
|
+
"On native Windows, run `arcgraph precision scip-python` in WSL: `@sourcegraph/scip-python@0.6.6` fails while loading on Windows. If `scip` or `pyright` is missing on Windows, run `scripts/install-arcgraph-precision-tools.ps1`; if Go is missing, install it with `winget install --id GoLang.Go -e` or pass `-InstallGoWithWinget`, and if Git is missing, install it with `winget install --id Git.Git -e`.",
|
|
1114
1115
|
"If local `scip-python`, `scip`, or `pyright-langserver` is unavailable and cannot be installed, use WSL/Linux/CI for evidence generation or run fast `arcgraph ci` while reporting `precision=ast_fallback_only`, `precision_partial`, or `type_precision_complete=false` explicitly.",
|
|
1115
1116
|
"Unresolved callsites are diagnostics, not silent drops; inspect `arcgraph unresolved TARGET`, filter with `--category`, or use `--release-blocking-only` before a python_full release.",
|
|
1116
1117
|
"Do not infer unresolved risk from a callback-like name or a test path. `true_dynamic_call` requires analyzer-recorded dynamic dispatch (including a visible runtime local binding), while ordinary unresolved test calls remain `static_candidate`.",
|
|
@@ -1135,6 +1136,13 @@ def _docs_payload(topic: str) -> dict[str, Any]:
|
|
|
1135
1136
|
"topic": topic,
|
|
1136
1137
|
"title": "Schema Migration Notes",
|
|
1137
1138
|
"sections": [
|
|
1139
|
+
{
|
|
1140
|
+
"title": "0.2.1",
|
|
1141
|
+
"items": [
|
|
1142
|
+
"coverage.py test contexts resolve to the pytest test case node; rebuild with `--coverage` to replace the aggregate-only edges an earlier build imported. Unmatched test contexts raise coverage_python_unmatched_contexts; when none match, coverage is `partial` and the coverage_inputs check of `arcgraph ci` warns (fails with --require-coverage).",
|
|
1143
|
+
"On native Windows, run `arcgraph precision scip-python` in WSL; scripts/install-arcgraph-precision-tools.ps1 builds scip from source with Go and Git and no longer installs scip-python.",
|
|
1144
|
+
],
|
|
1145
|
+
},
|
|
1138
1146
|
{
|
|
1139
1147
|
"title": "0.2.0",
|
|
1140
1148
|
"items": [
|