drift-analyzer 2.7.1__tar.gz → 2.7.2__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.
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/copilot-instructions.md +7 -5
- drift_analyzer-2.7.2/.github/instructions/drift-context-routing.instructions.md +40 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/instructions/drift-quality-workflow.instructions.md +2 -0
- drift_analyzer-2.7.2/.github/instructions/drift-release-mandatory.instructions.md +19 -0
- drift_analyzer-2.7.2/.github/prompts/_partials/review-checkliste.md +80 -0
- drift_analyzer-2.7.2/.github/prompts/drift-fix-loop.prompt.md +195 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/drift-effective-usage/SKILL.md +34 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/drift-pr-review/SKILL.md +6 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/CHANGELOG.md +8 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/CITATION.cff +1 -1
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/DEVELOPER.md +39 -1
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/PKG-INFO +1 -1
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/history.json +1 -1
- drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/parse/e3b0c44298fc1c149afbf4c8996fb924.json +1 -0
- drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/ts_architecture_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +1 -0
- drift_analyzer-2.7.2/decisions/ADR-033-phantom-reference-signal.md +107 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/STUDY.md +29 -31
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/algorithms/signals.md +3 -2
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/drift.schema.json +5 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/llms.txt +3 -2
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/pyproject.toml +1 -1
- drift_analyzer-2.7.2/src/drift/api/__init__.py +125 -0
- drift_analyzer-2.7.2/src/drift/api/_config.py +104 -0
- drift_analyzer-2.7.2/src/drift/api/_util.py +11 -0
- drift_analyzer-2.7.2/src/drift/api/brief.py +353 -0
- drift_analyzer-2.7.2/src/drift/api/diff.py +563 -0
- drift_analyzer-2.7.2/src/drift/api/drift_map_api.py +117 -0
- drift_analyzer-2.7.2/src/drift/api/explain.py +219 -0
- drift_analyzer-2.7.2/src/drift/api/fix_plan.py +470 -0
- drift_analyzer-2.7.2/src/drift/api/neg_context.py +134 -0
- drift_analyzer-2.7.2/src/drift/api/nudge.py +471 -0
- drift_analyzer-2.7.2/src/drift/api/scan.py +604 -0
- drift_analyzer-2.7.2/src/drift/api/validate.py +239 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/config.py +4 -0
- drift_analyzer-2.7.2/src/drift/mcp_catalog.py +170 -0
- drift_analyzer-2.7.2/src/drift/mcp_enrichment.py +133 -0
- drift_analyzer-2.7.2/src/drift/mcp_orchestration.py +724 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/mcp_server.py +15 -963
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/models.py +1 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/output/agent_tasks.py +10 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/pipeline.py +10 -1
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/precision.py +51 -1
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/session.py +4 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signal_registry.py +6 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/__init__.py +2 -0
- drift_analyzer-2.7.2/src/drift/signals/phantom_reference.py +500 -0
- drift_analyzer-2.7.2/src/drift/task_spec.py +206 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/ground_truth.py +370 -5
- drift_analyzer-2.7.2/tests/test_phantom_reference.py +377 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_plugin_api.py +9 -9
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_scan_diversity.py +35 -57
- drift_analyzer-2.7.2/tests/test_task_spec.py +239 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_telemetry.py +13 -8
- drift_analyzer-2.7.1/.github/instructions/drift-release-mandatory.instructions.md +0 -38
- drift_analyzer-2.7.1/.github/prompts/drift-fix-loop.prompt.md +0 -144
- drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/parse/e3b0c44298fc1c149afbf4c8996fb924.json +0 -1
- drift_analyzer-2.7.1/src/drift/api.py +0 -3142
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.detect-secrets.cfg +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.devcontainer/devcontainer.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.dockerignore +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.drift-baseline.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.githooks/commit-msg +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.githooks/pre-commit +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.githooks/pre-push +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/AGENTS.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/CODEOWNERS +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/DISCUSSION_TEMPLATE/ideas.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/DISCUSSION_TEMPLATE/questions.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/FUNDING.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/ISSUE_TEMPLATE/contribution_proposal.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/ISSUE_TEMPLATE/doc_drift.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/ISSUE_TEMPLATE/false_positive.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/ISSUE_TEMPLATE/good_first_issue.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/ISSUE_TEMPLATE/real_repo_evaluation.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/ISSUE_TEMPLATE/study_finding_rating.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/ISSUE_TEMPLATE/study_repo_benchmark.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/ISSUE_TEMPLATE/study_self_analysis.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/dependabot.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/instructions/drift-policy.instructions.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/instructions/drift-push-gates.instructions.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/instructions/drift-release-automation.instructions.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/labeler.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/labels.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/PR-Orchestrator.prompt.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/README.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/_partials/bewertungs-taxonomie.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/_partials/issue-filing-external.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/_partials/issue-filing.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/_partials/konventionen.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/drift-agent-ux.prompt.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/drift-agent-workflow-test.prompt.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/drift-ai-integration.prompt.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/drift-ci-gate.prompt.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/drift-onboarding.prompt.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/drift-signal-quality.prompt.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/field-tests/README.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/field-tests/drift-context-eval.prompt.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/field-tests/drift-field-test.prompt.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/field-tests/drift-finding-audit.prompt.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/prompts/release.prompt.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/release-drafter.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/repo-guard.blocklist +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/repo-root-allowlist +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/drift-adr-workflow/SKILL.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/drift-agent-prompt-authoring/SKILL.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/drift-commit-push/SKILL.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/drift-ground-truth-fixture-development/SKILL.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/drift-release/SKILL.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/drift-risk-audit-artifact-updates/SKILL.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/drift-security-triage/SKILL.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/drift-signal-development-full-lifecycle/SKILL.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/gif-creation/SKILL.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/gif-creation/references/windows-gif-workflow.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/posthog-analytics/SKILL.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/posthog-analytics/references/posthog-implementation.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/svg-distribution-design/SKILL.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/skills/svg-distribution-design/references/distribution-svg-guidelines.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/README.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/ci.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/codeql.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/dependency-review.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/doc-consistency.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/docker.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/docs.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/fp-oracle-audit.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/install-smoke.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/labeler.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/labels-sync.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/package-kpis.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/perf-regression-loop.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/publish.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/release.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/repo-guard.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/security-hygiene.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/stale.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/validate-release.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/welcome.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.github/workflows/workflow-sanity.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.gitignore +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.markdownlint-cli2.jsonc +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.pre-commit-config.yaml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.pre-commit-hooks.yaml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.secrets.baseline +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.shellcheckrc +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.vscode/mcp.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.vscode/settings.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/.vscode/tasks.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/CODE_OF_CONDUCT.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/CONTRIBUTING.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/Dockerfile +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/Formula/drift-analyzer.rb +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/LICENSE +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/Makefile +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/POLICY.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/README.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/ROADMAP.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/SECURITY.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/SUPPORT.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/action.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/01611cd8233f2aa70c571f9e8c4ebdc2.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/1e7cd9a98b3290c41e5e10dec26e35ea.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/1f2d1a22e9791d9b2f3078612aa0f786.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/226ac9d816e43df5ddc2a1f105ddc628.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/2a5d4c9a80c6ea7a6d71ccf7c05c4ad2.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/2baf118e8a0d13742b95d19cfcfa2e02.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/3ea99d008b13c9720d79eb1aa60ee1ee.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/4a8a215b34caf38fa4855682a7e35be5.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/59d0360c97970456beb61a677362a68a.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/5e610090f38b99b552831f348dfbdfff.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/6186fe9a4dbfaeaef44654495863e533.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/78756d46421bd849ad69b53db46cd81b.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/cb6867a7470df13c2227fef55eb91904.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/ce1b0ac9777a398ce99594f664bcd978.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/d784163017a2693256dad9b1540716ae.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/e174dbe14bbe023518432fa603b5f4b1.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/e6c7265a3e1a5c08fcae73860b077763.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/e914253ffba0b698dc7b3ca2da261100.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/.drift-cache-golden/parse/ec975ed99470aaa822b6caf0fa31ffc6.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/architecture_violation_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/architecture_violation_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/broad_exception_monoculture_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/broad_exception_monoculture_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/bypass_accumulation_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/bypass_accumulation_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/circular_import_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/circular_import_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/co_change_coupling_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/co_change_coupling_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/cognitive_complexity_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/cognitive_complexity_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/cohesion_deficit_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/cohesion_deficit_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/dead_code_accumulation_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/dead_code_accumulation_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/doc_impl_drift_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/doc_impl_drift_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/exception_contract_drift_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/exception_contract_drift_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/explainability_deficit_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/explainability_deficit_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/fan_out_explosion_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/fan_out_explosion_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/guard_clause_deficit_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/guard_clause_deficit_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/hardcoded_secret_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/hardcoded_secret_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/insecure_default_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/insecure_default_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/missing_authorization_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/missing_authorization_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/mutant_duplicate_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/mutant_duplicate_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/naming_contract_violation_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/naming_contract_violation_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/pattern_fragmentation_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/pattern_fragmentation_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/system_misalignment_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/phantom_reference_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/temporal_volatility_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/system_misalignment_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/ts_architecture_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/temporal_volatility_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- /drift_analyzer-2.7.1/benchmarks/corpus/.drift-cache-golden/signals/test_polarity_deficit_d524e1f3aa5d0c5a_e2453b10bd54639f593783c294ce3751.json → /drift_analyzer-2.7.2/benchmarks/corpus/.drift-cache-golden/signals/test_polarity_deficit_0e43163985631ecc_e2453b10bd54639f593783c294ce3751.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/README.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/manifest.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/connectors/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/connectors/db.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/handler_v1.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/handler_v2.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/handlers/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/handlers/auth.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/handlers/orders.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/handlers/payments.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/handlers/shipping.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/models/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/models/core.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/models/enriched.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/outlier_module.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/processors/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/processors/pricing.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/processors/transform.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/processors/validator.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/service_a.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/service_b.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/utils/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/utils/formatting.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/utils/helpers.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/src/myapp/utils/naming.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/tests/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/corpus/tests/test_api.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/benchmarks/oracle_repos.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/conda.recipe/meta.yaml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-010-finding-context-triage-policy.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-011-csv-output-format.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-012-copilot-context-actionability-pfs-nbv.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-013-scan-signal-filtering-and-per-signal-cap.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-014-mds-precision-first-scoring-readiness.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-016-security-signals-wave2-calibration.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-017-dia-false-positive-reduction.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-018-avs-co-change-precision-hardening.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-019-pfs-return-pattern-extraction.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-020-agent-fix-loop-optimization.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-021-batch-dominant-fix-loop-orchestration.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-022-mcp-session-management.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-023-canonical-examples-in-agent-output.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-024-next-step-contracts.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-025-orchestration-layer-workflow-plans-handoffs.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-025-task-queue-leasing.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-026-a2a-agent-card-http-serve.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-027-finding-status-for-suppression-transparency.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-028-analyzer-warning-channel.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-029-agent-effectiveness-features.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-029-preflight-diagnosis-and-markdown-report-export.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-030-cod-avs-eds-fp-reduction.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-031-agent-context-layer.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/ADR-032-hard-completion-gate-false-fix-relocation.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/templates/README.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/templates/adr-template.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/decisions/templates/signal-design-template.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/EPISTEMICS.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/MAINTAINER_RUNBOOK.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/OUTREACH.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/PRODUCT_STRATEGY.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/REPOSITORY_GOVERNANCE.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/ROOT_POLICY.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/adr/001-deterministic-analysis-pipeline.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/adr/002-ast-fingerprinting-for-patterns.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/adr/003-composite-scoring-model.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/adr/004-subprocess-git-parsing.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/adr/005-delta-first-score-interpretation.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/adr/006-context-tagging.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/adr/007-consistency-proxy-signals.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/adr/008-intention-contract-proxy-signals.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/distribution/README.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/distribution/awesome-submissions.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/distribution/channel-rules.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/distribution/devto-hashnode-5-repos.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/distribution/ide-discovery-mvp-spec.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/distribution/website-post-checklist.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/distribution/week1-rollout-runbook.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/drift-architecture-erosion-analysis.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/language-roadmap.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/language-support-matrix.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/migration.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/python-baseline.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs/python-rule-inventory.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/algorithms/deep-dive.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/algorithms/scoring.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/assets/logo.svg +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/assets/og-image.svg +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/assets/readme-overview.svg +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/benchmarking.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/case-studies/django.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/case-studies/fastapi.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/case-studies/index.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/case-studies/paramiko.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/case-studies/pydantic.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/changelog.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/comparisons/drift-vs-architecture-conformance.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/comparisons/drift-vs-ruff.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/comparisons/drift-vs-semgrep-codeql.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/comparisons/index.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/contributing.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/faq.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/getting-started/configuration.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/getting-started/finding-triage.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/getting-started/installation.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/getting-started/prompts.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/getting-started/quickstart.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/getting-started/team-rollout.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/getting-started/troubleshooting.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/getting-started/vibe-coding-problems.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/glossary.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/index.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/integrations.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/javascripts/prove-viewer.js +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/product/example-findings.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/product/press-brand.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/product-strategy.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/prove-it.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/reference/api-outputs.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/reference/negative-context.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/reference/performance.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/reference/signals/pfs.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/stability.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/start-here.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/study.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/stylesheets/drift.css +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/trust-evidence.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/use-cases/architectural-linter-ai-teams.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/use-cases/architecture-drift-python.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/use-cases/ci-architecture-checks-sarif.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/use-cases/index.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/docs-site/use-cases/technical-debt-ai-codebases.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/drift.example.yaml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/demo-project/README.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/demo-project/api/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/demo-project/api/routes.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/demo-project/db/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/demo-project/db/models.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/demo-project/services/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/demo-project/services/email_service.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/demo-project/services/order_service.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/demo-project/services/user_service.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/demo-project/utils/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/demo-project/utils/validators.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/demo_fastapi.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/drift-check.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/package-kpis/README.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/package-kpis/defects.csv +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/package-kpis/kpi-thresholds.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/package-kpis/usage.csv +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/vibe-coding/README.md +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/vibe-coding/claude_desktop_config.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/vibe-coding/drift-gate.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/vibe-coding/drift.yaml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/vibe-coding/mcp.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/vibe-coding/pre-push +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/vibe-coding/setup-baseline.sh +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/examples/vibe-coding/weekly-check.sh +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/hooks/docs_version.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/mkdocs.yml +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/overrides/404.html +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/overrides/home.html +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/overrides/main.html +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/__main__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/analyzer.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/analyzers/typescript/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/analyzers/typescript/_path_utils.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/analyzers/typescript/alias_resolver.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/analyzers/typescript/barrel_resolver.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/analyzers/typescript/import_graph.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/analyzers/typescript/shared.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/analyzers/typescript/workspace_boundaries.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/api_helpers.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/baseline.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/cache.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/cli.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/_io.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/analyze.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/badge.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/baseline.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/brief.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/check.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/config_cmd.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/copilot_context.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/diff_cmd.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/explain.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/export_context.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/fix_plan.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/init_cmd.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/mcp.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/patterns.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/precision_cmd.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/scan.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/self_analyze.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/serve.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/start.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/timeline.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/trend.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/commands/validate_cmd.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/context_tags.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/copilot_context.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/embeddings.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/errors.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/finding_context.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/finding_rendering.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/guardrails.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/incremental.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/ingestion/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/ingestion/ast_parser.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/ingestion/file_discovery.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/ingestion/git_history.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/ingestion/ts_parser.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/negative_context/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/negative_context/core.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/negative_context/export.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/negative_context/generators.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/negative_context.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/negative_context_export.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/next_step_contract.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/output/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/output/csv_output.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/output/github_format.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/output/json_output.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/output/markdown_report.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/output/rich_output.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/plugins.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/preflight.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/profiles.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/py.typed +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/quality_gate.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/recommendations.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/response_shaping.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/rules/tsjs/circular_module_detection.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/rules/tsjs/cross_package_import_ban.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/rules/tsjs/layer_leak_detection.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/rules/tsjs/ui_to_infra_import_ban.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/scope_resolver.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/scoring/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/scoring/engine.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/serve/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/serve/a2a_router.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/serve/agent_card.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/serve/app.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/serve/models.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signal_mapping.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/_utils.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/architecture_violation.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/base.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/broad_exception_monoculture.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/bypass_accumulation.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/circular_import.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/co_change_coupling.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/cognitive_complexity.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/cohesion_deficit.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/dead_code_accumulation.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/doc_impl_drift.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/exception_contract_drift.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/explainability_deficit.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/fan_out_explosion.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/guard_clause_deficit.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/hardcoded_secret.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/insecure_default.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/missing_authorization.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/mutant_duplicates.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/naming_contract_violation.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/pattern_fragmentation.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/system_misalignment.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/temporal_volatility.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/test_polarity_deficit.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/signals/ts_architecture.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/situational_hints.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/suppression.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/task_graph.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/telemetry.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/timeline.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/tool_metadata.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/trend_history.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/src/drift/types.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/conftest.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/__init__.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/study_samples/debt_correlation.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/study_samples/rater_matrix.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/study_samples/self_analysis_reports.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_alias_resolution/src/app.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_alias_resolution/src/core/logger.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_alias_resolution/src/shared/config.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_alias_resolution/tsconfig.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_alias_resolution_extends/src/app.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_alias_resolution_extends/src/base/logger.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_alias_resolution_extends/src/leaf/feature.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_alias_resolution_extends/src/mid/util.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_alias_resolution_extends/src/override/config.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_alias_resolution_extends/src/shared/config.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_alias_resolution_extends/tsconfig.base.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_alias_resolution_extends/tsconfig.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_alias_resolution_extends/tsconfig.mid.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_barrel_resolution/src/app.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_barrel_resolution/src/app_tsx.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_barrel_resolution/src/button.tsx +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_barrel_resolution/src/index.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_barrel_resolution/src/view/card.tsx +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_barrel_resolution/src/view/index.tsx +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_graph_relative/app.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_graph_relative/components/button.tsx +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_graph_relative/components/index.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_graph_relative/lib/util.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_cross_package/negative/cross_package_import_ban.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_cross_package/negative/package.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_cross_package/negative/packages/app/src/main.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_cross_package/negative/packages/ui/src/button.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_cross_package/positive/cross_package_import_ban.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_cross_package/positive/package.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_cross_package/positive/packages/app/src/main.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_cross_package/positive/packages/ui/src/button.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_cycles/negative/src/a.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_cycles/negative/src/b.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_cycles/positive/src/a.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_cycles/positive/src/b.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_layer_leak/negative/layer_leak_detection.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_layer_leak/negative/src/infra/storage.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_layer_leak/negative/src/ui/view.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_layer_leak/positive/layer_leak_detection.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_layer_leak/positive/src/infra/storage.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_layer_leak/positive/src/ui/view.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_ui_to_infra/negative/src/infra/storage.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_ui_to_infra/negative/src/ui/components/button.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_ui_to_infra/negative/src/ui/view.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_ui_to_infra/negative/ui_to_infra_import_ban.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_ui_to_infra/positive/src/infra/storage.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_ui_to_infra/positive/src/ui/view.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_rule_ui_to_infra/positive/ui_to_infra_import_ban.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_workspace_boundaries/package.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_workspace_boundaries/packages/app/src/main.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_workspace_boundaries/packages/ui/src/button.tsx +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/fixtures/tsjs_workspace_boundaries/vite.config.ts +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/golden/corpus_snapshot.json +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/golden/corpus_snapshot.sarif +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_a2a_serve.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_ablation.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_advisory_semantic.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_agent_context_layer.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_agent_effectiveness.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_agent_native_cli.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_agent_tasks.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_ai_tool_indicators.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_analysis_degradation.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_analysis_edge_cases.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_architecture_violation.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_ast_parser.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_avs_enhanced.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_avs_missing_patterns_evidence.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_avs_mutations.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_badge_command.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_baseline.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_batch_metadata.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_benchmark_label_keys.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_benchmark_structure.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_brief.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_bypass_accumulation.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_cache_resilience.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_ci_reality.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_circular_import.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_cli_runtime.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_co_change_coupling.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_cognitive_complexity.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_cohesion_deficit.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_compat.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_config.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_config_schema.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_config_validate.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_consistency_proxies.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_console_scripts.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_context_tags.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_copilot_context_actionability.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_copilot_context_coverage.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_csv_output.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_dead_code_accumulation.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_delta_first.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_dia_enhanced.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_diagnostic_hypothesis_contract.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_dx_features.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_eds_api_corresponding_tests.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_embeddings.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_enterprise_governance_assets.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_exception_contract_drift.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_fan_out_explosion.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_fetch_github_usage.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_fetch_pypistats.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_file_discovery.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_finding_context.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_fix_actionability.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_git_history_edge_cases.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_git_history_safety.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_golden_snapshot.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_guard_clause_deficit.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_hardcoded_secret.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_incremental.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_init_cmd.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_insecure_default.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_integration.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_issue_138_139_140.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_json_output.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_malformed_history.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_mcp_copilot.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_mcp_hardening.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_mirofish_signal_improvements.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_missing_authorization.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_model_consistency.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_module_entrypoint.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_mutant_duplicates_edge_cases.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_naming_contract_violation.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_negative_context.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_negative_context_export.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_nudge.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_orchestration_extensions.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_output_golden.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_output_minimal_and_signal_labels.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_package_kpis.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_parse_file_resilience.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_path_overrides.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_pattern_fragmentation.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_patterns_command.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_pipeline_components.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_precision_recall.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_preflight_and_report.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_property_based.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_quality_gate.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_recommendations.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_recommendations_edge_cases.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_release_automation.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_release_discipline.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_repo_hygiene.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_rule_ids.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_sarif_contract.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_scope_resolver.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_scoring.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_scoring_edge_cases.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_self_command.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_session.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_signal_contract.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_signal_crash_guard.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_signal_thresholds.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_signal_utils.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_situational_hints.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_smoke_real_repos.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_study_infrastructure.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_suppression.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_task_graph.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_task_queue.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_test_polarity_deficit.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_timeline.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_timeline_command.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_tool_metadata.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_trend_chart.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_trend_command_history.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_ts_signals_phase2.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_ts_signals_phase3.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_tsjs_alias_resolution.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_tsjs_barrel_resolution.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_tsjs_import_graph_relative.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_tsjs_rule_circular_module_detection.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_tsjs_rule_cross_package_import_ban.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_tsjs_rule_layer_leak_detection.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_tsjs_rule_ui_to_infra_import_ban.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_tsjs_workspace_boundaries.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_typescript_parser.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/tests/test_workspace_value.py +0 -0
- {drift_analyzer-2.7.1 → drift_analyzer-2.7.2}/uv.lock +0 -0
|
@@ -199,14 +199,16 @@ Wenn ein Agent Drift-Findings über MCP-Tools beheben soll, **muss** dieser Abla
|
|
|
199
199
|
|
|
200
200
|
1. **`drift_session_start(path=".", autopilot=true)`** — ein Aufruf statt vier (bündelt validate + brief + scan + fix_plan)
|
|
201
201
|
2. **`drift_nudge(session_id=..., changed_files=...)`** — nach jeder Dateiänderung als schneller Inner-Loop (~0.2 s statt ~3 s für scan)
|
|
202
|
-
3.
|
|
203
|
-
4. **`
|
|
202
|
+
3. **Test-Checkpoint nach `nudge`** — gezielte Tests per Pfad-Matrix ausführen (Tabelle in `.github/prompts/drift-fix-loop.prompt.md`, Schritt 3b); bei Fehlschlag Entscheidungsbaum anwenden: Test anpassen (Implementation-Details) oder Fix reverten (Vertrags-Regression) — kein Hard-Block
|
|
203
|
+
4. **`drift_fix_plan(session_id=..., max_tasks=1)`** — nächsten Task holen (immer `max_tasks=1`)
|
|
204
|
+
5. **`drift_diff(session_id=..., uncommitted=true)`** — nur einmal am Ende als Abschluss-Verifikation
|
|
204
205
|
|
|
205
206
|
**Verboten im Fix-Loop:**
|
|
206
207
|
- `drift_scan` nach jeder Dateiänderung (zu teuer, nutze `nudge`)
|
|
207
208
|
- `session_start` ohne `autopilot=true` (verschenkt 4 Roundtrips)
|
|
208
209
|
- `fix_plan` ohne `max_tasks=1` (unnötig große Responses)
|
|
209
210
|
- Tool-Aufrufe ohne `session_id` (verliert Kontext)
|
|
211
|
+
- Commit ohne Test-Checkpoint (Tests fallen sonst erst bei Gate 8 CI auf)
|
|
210
212
|
|
|
211
213
|
**Immer:** `agent_instruction` und `next_tool_call` aus Responses befolgen.
|
|
212
214
|
|
|
@@ -232,8 +234,8 @@ Vollständiger Developer Guide: **[DEVELOPER.md](../DEVELOPER.md)**
|
|
|
232
234
|
|
|
233
235
|
```
|
|
234
236
|
ingestion/ → signals/ → scoring/ → output/
|
|
235
|
-
AST + Git
|
|
236
|
-
(15 scoring-aktiv,
|
|
237
|
+
AST + Git 24 Detektoren Score+Severity Rich/JSON/SARIF
|
|
238
|
+
(15 scoring-aktiv, 9 report-only)
|
|
237
239
|
```
|
|
238
240
|
|
|
239
241
|
### Wichtigste Kommandos
|
|
@@ -288,7 +290,7 @@ DRIFT_SKIP_HOOKS=1 git push # ALLE Gates (äußerster Notfall)
|
|
|
288
290
|
|
|
289
291
|
| Pfad | Inhalt |
|
|
290
292
|
|------|--------|
|
|
291
|
-
| `src/drift/signals/` |
|
|
293
|
+
| `src/drift/signals/` | 24 Signale — 15 scoring-aktiv (PFS, AVS, MDS, EDS, TVS, SMS, DIA, BEM, TPD, GCD, NBV, BAT, ECM, COD, CCC) + 9 report-only (TSA, CXS, FOE, CIR, DCA, MAZ, ISD, HSC, PHR) |
|
|
292
294
|
| `src/drift/ingestion/` | AST-Parsing, Git-History, File-Discovery |
|
|
293
295
|
| `src/drift/scoring/` | Composite-Score, Module-Scores, Severity |
|
|
294
296
|
| `src/drift/output/` | Rich-Terminal, JSON, SARIF |
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
applyTo: "**"
|
|
3
|
+
description: "Kontext-Routing — Zuordnung von Aufgabentypen zu relevanten Instructions und Skills. Hilft Agenten, bei großem Instruction-Volumen die richtigen Regeln zu priorisieren."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Kontext-Routing — Welche Regeln gelten wann?
|
|
7
|
+
|
|
8
|
+
> **Zweck:** Nicht alle Instructions und Skills sind für jede Aufgabe gleich relevant.
|
|
9
|
+
> Diese Datei hilft dem Agenten, den Fokus auf die wichtigsten Regeln zu legen.
|
|
10
|
+
|
|
11
|
+
## Routing-Tabelle
|
|
12
|
+
|
|
13
|
+
| Aufgabentyp | Primäre Instructions | Relevante Skills | Primärer Fokus |
|
|
14
|
+
|-------------|---------------------|-----------------|----------------|
|
|
15
|
+
| **Signal-Arbeit** (neues Signal, Heuristik-Änderung) | drift-policy, drift-push-gates (Gate 2+7) | drift-signal-development-full-lifecycle, drift-risk-audit-artifact-updates, drift-adr-workflow | ADR-Pflicht, Audit-Pflicht, Precision/Recall |
|
|
16
|
+
| **Scoring/Gewichte** | drift-policy (§6 Priorisierung) | drift-adr-workflow | ADR-Pflicht, Benchmark-Evidence |
|
|
17
|
+
| **Output-Format** | drift-policy, drift-push-gates (Gate 7) | drift-adr-workflow, drift-risk-audit-artifact-updates | ADR-Pflicht, STRIDE-Update |
|
|
18
|
+
| **Bugfix** (`fix:`) | drift-policy, drift-push-gates (Gate 3+8) | drift-commit-push | CHANGELOG, Tests, kein ADR nötig |
|
|
19
|
+
| **Feature** (`feat:`) | drift-policy, drift-push-gates (Gate 2+3) | drift-commit-push | Feature-Evidence, Tests, CHANGELOG, STUDY.md |
|
|
20
|
+
| **Refactoring** | drift-policy, drift-quality-workflow | drift-commit-push | Kein ADR nötig, Tests grün |
|
|
21
|
+
| **Prompt/Instruction** | drift-policy | drift-agent-prompt-authoring | Shared Partials, Modellunabhängigkeit |
|
|
22
|
+
| **PR-Review** | drift-quality-workflow (Stufe 4) | drift-pr-review | Review-Checkliste (`.github/prompts/_partials/review-checkliste.md`) |
|
|
23
|
+
| **Release/Push** | drift-push-gates (alle Gates) | drift-commit-push, drift-release | Alle Gates prüfen, `make check` |
|
|
24
|
+
| **Fixture/Test** | drift-policy | drift-ground-truth-fixture-development | Precision/Recall, Ground Truth |
|
|
25
|
+
| **Dokumentation** | drift-policy (§13 Befund-Qualität) | — | Keine Gate-Pflicht außer Gate 8 |
|
|
26
|
+
|
|
27
|
+
## Priorisierungsregel
|
|
28
|
+
|
|
29
|
+
Wenn mehrere Instructions geladen sind, gilt:
|
|
30
|
+
1. **drift-policy** hat immer Vorrang (PFLICHT-GATE zuerst)
|
|
31
|
+
2. **drift-push-gates** nur relevant bei Commit/Push-Vorbereitung
|
|
32
|
+
3. **drift-quality-workflow** nur relevant bei nicht-trivialen Änderungen
|
|
33
|
+
4. **Release-Instructions** nur relevant bei `src/drift/**`-Änderungen
|
|
34
|
+
|
|
35
|
+
## Kontextreduktion
|
|
36
|
+
|
|
37
|
+
Bei einfachen Aufgaben (Doku-Fix, Typo, triviales Refactoring) reicht:
|
|
38
|
+
- Policy-Gate ausgeben
|
|
39
|
+
- Relevante Gates prüfen (meist nur Gate 8: `make check`)
|
|
40
|
+
- Kein vollständiger Quality-Workflow nötig
|
|
@@ -61,6 +61,8 @@ Keine „quick hacks" ohne Begründungsstruktur.
|
|
|
61
61
|
|
|
62
62
|
Nach jedem pushbaren Zwischenstand wird ein separater BugBot-Review-Schritt ausgeführt.
|
|
63
63
|
|
|
64
|
+
**Strukturierte Review-Checkliste verwenden:** Der Reviewer arbeitet die Checkliste unter `.github/prompts/_partials/review-checkliste.md` Punkt für Punkt ab und dokumentiert pro Punkt Ja / Nein / N/A mit Kurzbegründung. Kein Punkt darf übersprungen werden.
|
|
65
|
+
|
|
64
66
|
**Dieser Review bewertet isoliert und streng:**
|
|
65
67
|
- Korrektheit der Änderung
|
|
66
68
|
- Risiko und Edge Cases
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
applyTo: "src/drift/**"
|
|
3
|
+
description: "Releases are automated via python-semantic-release in CI. Agents must use conventional commits (feat:/fix:/BREAKING:) — no manual release command needed."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Release Automation
|
|
7
|
+
|
|
8
|
+
> **Vollständige Dokumentation:** siehe `drift-release-automation.instructions.md` (gleicher Scope).
|
|
9
|
+
|
|
10
|
+
**Kurzregel:** Conventional Commits (`feat:`, `fix:`, `BREAKING:`) verwenden — CI übernimmt Version, Tag, Release, PyPI.
|
|
11
|
+
Kein manueller Release-Befehl nötig. Fallback: `python scripts/release_automation.py --full-release`.
|
|
12
|
+
python scripts/release_automation.py --full-release
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## See Also
|
|
16
|
+
|
|
17
|
+
- Release Workflow: `.github/workflows/release.yml`
|
|
18
|
+
- PSR Configuration: `pyproject.toml` → `[tool.semantic_release]`
|
|
19
|
+
- Detailed Skill: `.github/skills/drift-release/SKILL.md`
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Review-Checkliste (Shared Reference)
|
|
2
|
+
|
|
3
|
+
> **Single Source of Truth** — Alle adversarialen Reviews verwenden diese Checkliste.
|
|
4
|
+
> Die Checkliste ersetzt keine Eigenleistung des Reviewers, sie strukturiert sie.
|
|
5
|
+
|
|
6
|
+
## Anwendung
|
|
7
|
+
|
|
8
|
+
Der Reviewer arbeitet die Checkliste Punkt für Punkt ab und dokumentiert pro Punkt:
|
|
9
|
+
- **Ja** / **Nein** / **N/A** (mit Kurzbegründung bei Nein oder N/A)
|
|
10
|
+
|
|
11
|
+
Kein Punkt darf übersprungen werden. Bei Unsicherheit: `Nein` mit Begründung.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 1. Policy-Konformität
|
|
16
|
+
|
|
17
|
+
- [ ] **Policy-Gate korrekt?** — Wurde das PFLICHT-GATE sichtbar ausgegeben, und ist die Begründung plausibel (nicht rituell)?
|
|
18
|
+
- [ ] **Zulassungskriterium nachvollziehbar?** — Ist das benannte Kriterium (Unsicherheit / Signal / Glaubwürdigkeit / Handlungsfähigkeit / Trend / Einführbarkeit) tatsächlich adressiert?
|
|
19
|
+
- [ ] **Ausschlusskriterium geprüft?** — Erzeugt die Änderung ausschließlich mehr Ausgabe/Komplexität/Features ohne benennbaren Nutzen?
|
|
20
|
+
- [ ] **Priorisierung eingehalten?** — Verdrängt die Änderung eine höherpriorisierte Aufgabe (§6)?
|
|
21
|
+
|
|
22
|
+
## 2. Scope und Boundaries
|
|
23
|
+
|
|
24
|
+
- [ ] **Scope eingehalten?** — Wurden nur Dateien geändert, die zur Aufgabe gehören?
|
|
25
|
+
- [ ] **Out-of-Scope unberührt?** — Wurden keine Dateien modifiziert, die explizit oder implizit außerhalb des Auftrags liegen?
|
|
26
|
+
- [ ] **Keine ungefragt hinzugefügten Features?** — Enthält die Änderung nur das Angefragte, keine "Verbesserungen" oder Refactorings als Beifang?
|
|
27
|
+
|
|
28
|
+
## 3. Architektur und ADR-Pflicht
|
|
29
|
+
|
|
30
|
+
- [ ] **ADR erforderlich?** — Betrifft die Änderung Signale, Scoring, Output oder Architektur-Boundaries? Falls ja: ADR unter `decisions/` vorhanden (Status `proposed` reicht)?
|
|
31
|
+
- [ ] **Architektur-Layer korrekt?** — Respektiert die Änderung den Datenfluss `ingestion → signals → scoring → output`?
|
|
32
|
+
- [ ] **Keine unzulässigen Layer-Übergriffe?** — Greift kein Modul auf eine Schicht zu, zu der es laut Architektur keinen Zugang haben sollte?
|
|
33
|
+
|
|
34
|
+
## 4. Audit-Pflicht (Policy §18)
|
|
35
|
+
|
|
36
|
+
- [ ] **Betrifft die Änderung `signals/`, `ingestion/` oder `output/`?** — Falls nein: N/A.
|
|
37
|
+
- [ ] **Audit-Artefakte aktualisiert?** — Wurde mindestens das richtige Artefakt inhaltlich (nicht nur kosmetisch) aktualisiert?
|
|
38
|
+
- Signal-Änderung → `fmea_matrix.md` + `fault_trees.md` + `risk_register.md`
|
|
39
|
+
- Input/Output-Pfad → `stride_threat_model.md` + `risk_register.md`
|
|
40
|
+
- Precision/Recall Δ > 5% → `fmea_matrix.md` (RPNs) + `risk_register.md`
|
|
41
|
+
- [ ] **Alle vier Audit-Artefakte existieren noch?** — Kein Löschrisiko?
|
|
42
|
+
|
|
43
|
+
## 5. Befund-Qualität (§13)
|
|
44
|
+
|
|
45
|
+
Nur relevant, wenn die Änderung Analyseergebnisse / Befunde betrifft.
|
|
46
|
+
|
|
47
|
+
- [ ] **Technische Nachvollziehbarkeit?** — Kann ein Dritter den Befund anhand des Codes rekonstruieren?
|
|
48
|
+
- [ ] **Reproduzierbarkeit?** — Liefert dieselbe Eingabe denselben Befund?
|
|
49
|
+
- [ ] **Eindeutige Ursachenzuordnung?** — Ist klar, welche Code-Stelle den Befund auslöst?
|
|
50
|
+
- [ ] **Nachvollziehbare Begründung?** — Steht eine Erklärung, warum dies ein Problem ist?
|
|
51
|
+
- [ ] **Erkennbare nächste Maßnahme?** — Weiß der Empfänger, was zu tun ist?
|
|
52
|
+
|
|
53
|
+
## 6. Code-Qualität
|
|
54
|
+
|
|
55
|
+
- [ ] **Docstrings vorhanden?** — Jede neue öffentliche Funktion unter `src/drift/` hat einen Docstring?
|
|
56
|
+
- [ ] **Keine offensichtlichen Bugs?** — Edge Cases, Off-by-One, Null-Handling geprüft?
|
|
57
|
+
- [ ] **Keine Sicherheitslücken?** — OWASP Top 10 beachtet (Path Traversal, Injection, etc.)?
|
|
58
|
+
- [ ] **Typisierung konsistent?** — mypy-konform, keine unannotierten öffentlichen Signaturen?
|
|
59
|
+
|
|
60
|
+
## 7. Tests
|
|
61
|
+
|
|
62
|
+
- [ ] **Tests vorhanden?** — Gibt es Tests für das neue/geänderte Verhalten?
|
|
63
|
+
- [ ] **Regressionstests?** — Bestehendes Verhalten durch Tests abgesichert?
|
|
64
|
+
- [ ] **Edge Cases abgedeckt?** — Leere Eingaben, Grenzwerte, Fehlerpfade?
|
|
65
|
+
- [ ] **Keine duplizierten Testnamen?** — Kein `def test_...`-Duplikat im selben Modul?
|
|
66
|
+
|
|
67
|
+
## 8. Commit und Gates
|
|
68
|
+
|
|
69
|
+
- [ ] **Conventional Commit korrekt?** — `feat:`, `fix:`, `refactor:`, `docs:`, `test:`, `chore:` passend gewählt?
|
|
70
|
+
- [ ] **CHANGELOG aktualisiert?** — Bei `feat:` oder `fix:`: Eintrag in `CHANGELOG.md` vorhanden?
|
|
71
|
+
- [ ] **Feature-Evidence vorhanden?** — Bei `feat:`: Tests + `benchmark_results/vX.Y.Z_*.json` + `docs/STUDY.md`?
|
|
72
|
+
- [ ] **Lockfile synchron?** — Bei `pyproject.toml`-Änderung: `uv.lock` aktualisiert?
|
|
73
|
+
|
|
74
|
+
## 9. Gesamtbewertung
|
|
75
|
+
|
|
76
|
+
- [ ] **Bekannte Restrisiken benannt?** — Sind Trade-offs oder offene Punkte explizit dokumentiert (nicht verschwiegen)?
|
|
77
|
+
- [ ] **Freigabestatus bestimmt:**
|
|
78
|
+
- `❌ NICHT BEREIT` — offene kritische Issues
|
|
79
|
+
- `⚠️ BEREIT ZUR MENSCHLICHEN PRÜFUNG` — Checks grün, aber Risiken sichtbar
|
|
80
|
+
- `✅ BEREIT ZUM MERGE` — vollständig grün, alle Gates erfüllt
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "Drift Fix-Loop"
|
|
3
|
+
description: "Optimierter Agent-Workflow zum Beheben von Drift-Findings über MCP-Sessions. Nutzt session_start(autopilot=true) + nudge als Inner-Loop für minimale Roundtrips."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Drift Fix-Loop
|
|
7
|
+
|
|
8
|
+
Dieser Prompt beschreibt den optimalen Ablauf, um Drift-Findings in einem Workspace über MCP-Tools effizient zu beheben. Der Workflow minimiert Roundtrips und nutzt die vorhandene Session-Infrastruktur vollständig aus.
|
|
9
|
+
|
|
10
|
+
> **Pflicht:** Vor Ausführung dieses Prompts das Drift Policy Gate durchlaufen
|
|
11
|
+
> (siehe `.github/prompts/_partials/konventionen.md` und `.github/instructions/drift-policy.instructions.md`).
|
|
12
|
+
|
|
13
|
+
## Relevante Referenzen
|
|
14
|
+
|
|
15
|
+
- **Instruction:** `.github/instructions/drift-policy.instructions.md`
|
|
16
|
+
- **Push Gates:** `.github/instructions/drift-push-gates.instructions.md`
|
|
17
|
+
- **Skill:** `.github/skills/drift-effective-usage/SKILL.md`
|
|
18
|
+
- **Skill:** `.github/skills/drift-commit-push/SKILL.md`
|
|
19
|
+
- **MCP-Server:** `src/drift/mcp_server.py`
|
|
20
|
+
- **Session-Management:** `src/drift/session.py`
|
|
21
|
+
|
|
22
|
+
## Warum dieser Workflow
|
|
23
|
+
|
|
24
|
+
Ein naiver Agent-Loop ruft pro Finding: `validate → scan → fix_plan → [edit] → scan → diff` auf.
|
|
25
|
+
Jeder `scan`-Aufruf führt eine vollständige Repo-Analyse durch (~1–5 s). Bei mehreren Findings multipliziert sich die Wartezeit und die Roundtrips.
|
|
26
|
+
|
|
27
|
+
**Dieser Workflow reduziert das auf:**
|
|
28
|
+
1. Einen einzigen `session_start(autopilot=true)`-Aufruf (bündelt validate + brief + scan + fix_plan)
|
|
29
|
+
2. `nudge` als schnellen Inner-Loop nach jeder Dateiänderung (~0.2 s statt ~3 s für scan)
|
|
30
|
+
3. Einen einzigen `drift_diff` als Abschluss-Verifikation
|
|
31
|
+
|
|
32
|
+
## Ablauf
|
|
33
|
+
|
|
34
|
+
### Schritt 1 — Session starten mit Autopilot
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
drift_session_start(
|
|
38
|
+
path=".",
|
|
39
|
+
autopilot=true
|
|
40
|
+
)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Dieser eine Aufruf führt automatisch `validate → brief → scan → fix_plan` aus und gibt die kombinierten Ergebnisse zurück. Die Session-ID wird in allen Folge-Aufrufen wiederverwendet.
|
|
44
|
+
|
|
45
|
+
**Wichtig:** Die `session_id` aus der Antwort merken und an **jeden** weiteren Tool-Aufruf übergeben.
|
|
46
|
+
|
|
47
|
+
### Schritt 2 — Ersten Task aus fix_plan bearbeiten
|
|
48
|
+
|
|
49
|
+
Die Autopilot-Antwort enthält bereits den `fix_plan`. Den **ersten** Task nehmen und umsetzen.
|
|
50
|
+
|
|
51
|
+
**Regel:** Immer nur einen Task gleichzeitig. Nicht mehrere Findings in einem Schritt mischen.
|
|
52
|
+
|
|
53
|
+
### Schritt 3 — Nach jeder Dateiänderung: nudge
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
drift_nudge(
|
|
57
|
+
session_id="<session_id>",
|
|
58
|
+
changed_files="<pfad/zur/geänderten/datei.py>"
|
|
59
|
+
)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
`nudge` gibt schnelles Richtungsfeedback:
|
|
63
|
+
- `direction`: improving / stable / degrading
|
|
64
|
+
- `safe_to_commit`: true / false
|
|
65
|
+
- `confidence`: pro Signal
|
|
66
|
+
|
|
67
|
+
**Wenn `direction=degrading`:** Änderung rückgängig machen, anders lösen.
|
|
68
|
+
**Wenn `safe_to_commit=true`:** Weiter mit Test-Checkpoint (Schritt 3b).
|
|
69
|
+
|
|
70
|
+
### Schritt 3b — Test-Checkpoint nach jeder Änderung
|
|
71
|
+
|
|
72
|
+
Nachdem `nudge` kein Degrading meldet, **gezielte Tests** für die geänderte Datei ausführen.
|
|
73
|
+
|
|
74
|
+
**Pfad-zu-Test-Mapping** (kürzeste Match-Regel, oben zuerst):
|
|
75
|
+
|
|
76
|
+
| Geänderte Datei (Pattern) | Gezielte Tests |
|
|
77
|
+
|---|---|
|
|
78
|
+
| `src/drift/signals/architecture_violation*` | `pytest tests/test_avs_*.py -q --tb=short` |
|
|
79
|
+
| `src/drift/signals/doc_impl_drift*` | `pytest tests/test_dia_*.py -q --tb=short` |
|
|
80
|
+
| `src/drift/signals/explainability_deficit*` | `pytest tests/test_eds_*.py -q --tb=short` |
|
|
81
|
+
| `src/drift/signals/mutant_duplicates*` | `pytest tests/test_mutant_duplicates*.py -q --tb=short` |
|
|
82
|
+
| `src/drift/signals/dead_code_accumulation*` | `pytest tests/test_dead_code*.py -q --tb=short` |
|
|
83
|
+
| `src/drift/signals/pattern_fragmentation*` | `pytest tests/test_pattern_fragmentation*.py -q --tb=short` |
|
|
84
|
+
| `src/drift/signals/naming_contract*` | `pytest tests/test_naming_contract*.py -q --tb=short` |
|
|
85
|
+
| `src/drift/signals/test_polarity_deficit*` | `pytest tests/test_test_polarity_deficit*.py -q --tb=short` |
|
|
86
|
+
| `src/drift/signals/cognitive_complexity*` | `pytest tests/test_cognitive_complexity*.py -q --tb=short` |
|
|
87
|
+
| `src/drift/signals/circular_import*` | `pytest tests/test_circular_import*.py -q --tb=short` |
|
|
88
|
+
| `src/drift/signals/guard_clause*` | `pytest tests/test_guard_clause*.py -q --tb=short` |
|
|
89
|
+
| `src/drift/signals/insecure_default*` | `pytest tests/test_insecure_default*.py -q --tb=short` |
|
|
90
|
+
| `src/drift/signals/missing_authorization*` | `pytest tests/test_missing_authorization*.py -q --tb=short` |
|
|
91
|
+
| `src/drift/signals/hardcoded_secret*` | `pytest tests/test_hardcoded_secret*.py -q --tb=short` |
|
|
92
|
+
| `src/drift/signals/exception_contract*` | `pytest tests/test_exception_contract*.py -q --tb=short` |
|
|
93
|
+
| `src/drift/signals/fan_out_explosion*` | `pytest tests/test_fan_out_explosion*.py -q --tb=short` |
|
|
94
|
+
| `src/drift/signals/cohesion_deficit*` | `pytest tests/test_cohesion_deficit*.py -q --tb=short` |
|
|
95
|
+
| `src/drift/signals/bypass_accumulation*` | `pytest tests/test_bypass_accumulation*.py -q --tb=short` |
|
|
96
|
+
| `src/drift/signals/*` (andere) | `pytest tests/test_precision_recall.py tests/test_mirofish_signal_improvements.py -q --tb=short` |
|
|
97
|
+
| `src/drift/api.py` | `pytest tests/test_brief.py tests/test_integration.py tests/test_incremental.py tests/test_fix_actionability.py tests/test_nudge.py -q --tb=short` |
|
|
98
|
+
| `src/drift/mcp_server.py` | `pytest tests/test_mcp_copilot.py tests/test_mcp_hardening.py tests/test_tool_metadata.py tests/test_negative_context_export.py -q --tb=short` |
|
|
99
|
+
| `src/drift/output/*` | `pytest tests/test_json_output.py tests/test_csv_output.py tests/test_sarif_contract.py tests/test_output_golden.py tests/test_agent_tasks.py -q --tb=short` |
|
|
100
|
+
| `src/drift/ingestion/*` | `pytest tests/test_ast_parser.py tests/test_file_discovery.py tests/test_scope_resolver.py tests/test_typescript_parser.py -q --tb=short` |
|
|
101
|
+
| `src/drift/config.py` | `pytest tests/test_config.py tests/test_config_validate.py tests/test_model_consistency.py -q --tb=short` |
|
|
102
|
+
| `src/drift/commands/*` | `pytest tests/test_self_command.py tests/test_patterns_command.py tests/test_ci_reality.py -q --tb=short` |
|
|
103
|
+
| `src/drift/session.py` | `pytest tests/test_session.py -q --tb=short` |
|
|
104
|
+
| `src/drift/incremental.py` | `pytest tests/test_incremental.py tests/test_nudge.py -q --tb=short` |
|
|
105
|
+
| Fallback (kein Treffer) | `pytest tests/ -q --tb=short --ignore=tests/test_smoke_real_repos.py --maxfail=5` |
|
|
106
|
+
|
|
107
|
+
**Bei Testfehlschlag — Entscheidungsbaum:**
|
|
108
|
+
|
|
109
|
+
| Fehlerbild | Ursache | Reaktion |
|
|
110
|
+
|---|---|---|
|
|
111
|
+
| `AttributeError: has no attribute X` | Test prüft Implementation-Details | **Test anpassen** |
|
|
112
|
+
| `TypeError: N arguments expected` | Signatur wurde geändert | **Test anpassen** |
|
|
113
|
+
| Test erwartet altes Drift-Pattern, das absichtlich entfernt wurde | Finding war Ziel des Fixes | **Test anpassen** |
|
|
114
|
+
| `AssertionError` auf dokumentiertes Public-API-Verhalten | Vertrag verletzt | **Production-Fix überdenken oder reverten** |
|
|
115
|
+
| `AssertionError` auf Rückgabewert eines öffentlichen Contracts | Semantische Regression | **Production-Fix überdenken oder reverten** |
|
|
116
|
+
|
|
117
|
+
**Kein Hard-Block:** Der Workflow wird nicht abgebrochen. Der Agent wendet den Entscheidungsbaum an und setzt mit dem bereinigten Zustand fort.
|
|
118
|
+
|
|
119
|
+
### Schritt 4 — Nächsten Task holen (falls nötig)
|
|
120
|
+
|
|
121
|
+
Wenn weitere Findings offen sind:
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
drift_fix_plan(
|
|
125
|
+
session_id="<session_id>",
|
|
126
|
+
max_tasks=1
|
|
127
|
+
)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Immer `max_tasks=1` verwenden.** Das reduziert die Response-Größe und den Parsing-Overhead erheblich.
|
|
131
|
+
|
|
132
|
+
Dann zurück zu Schritt 2.
|
|
133
|
+
|
|
134
|
+
### Schritt 5 — Abschluss-Verifikation
|
|
135
|
+
|
|
136
|
+
Erst wenn alle Tasks bearbeitet sind:
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
drift_diff(
|
|
140
|
+
session_id="<session_id>",
|
|
141
|
+
uncommitted=true
|
|
142
|
+
)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Prüfen:
|
|
146
|
+
- `resolved_count` > 0
|
|
147
|
+
- `new_count` == 0
|
|
148
|
+
- Keine Regressionen
|
|
149
|
+
|
|
150
|
+
## Zusammenfassung als Ablaufdiagramm
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
session_start(autopilot=true) ← 1 Aufruf statt 4
|
|
154
|
+
↓
|
|
155
|
+
fix_plan (in Autopilot enthalten)
|
|
156
|
+
↓
|
|
157
|
+
┌──────────────────────────────────────────┐
|
|
158
|
+
│ Task N bearbeiten │
|
|
159
|
+
│ Datei editieren │
|
|
160
|
+
│ nudge(changed_files=...) ← ~0.2 s │
|
|
161
|
+
│ direction prüfen │
|
|
162
|
+
│ ggf. korrigieren │
|
|
163
|
+
│ pytest <gezielte Tests> --tb=short ← 3b│
|
|
164
|
+
│ bei rot: Test anpassen oder reverten │
|
|
165
|
+
└─────────┬────────────────────────────────┘
|
|
166
|
+
│ safe_to_commit + Tests grün?
|
|
167
|
+
↓
|
|
168
|
+
fix_plan(max_tasks=1) ← nächster Task
|
|
169
|
+
│ keine Tasks mehr?
|
|
170
|
+
↓
|
|
171
|
+
drift_diff(uncommitted) ← Abschluss-Verifikation
|
|
172
|
+
↓
|
|
173
|
+
Commit vorbereiten
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Anti-Patterns: Was NICHT tun
|
|
177
|
+
|
|
178
|
+
| Anti-Pattern | Problem | Stattdessen |
|
|
179
|
+
|---|---|---|
|
|
180
|
+
| `drift_scan` nach jeder Dateiänderung | Volle Repo-Analyse pro Edit (~3–5 s) | `drift_nudge` verwenden (~0.2 s) |
|
|
181
|
+
| `session_start` ohne `autopilot=true` | 4 separate Roundtrips für validate/brief/scan/fix_plan | `autopilot=true` setzen |
|
|
182
|
+
| `fix_plan(max_tasks=5)` oder mehr | Große Response, Agent parst unnötig viel | `max_tasks=1` im Loop verwenden (initiale Übersicht wird von autopilot oder scan-Guidance gesteuert) |
|
|
183
|
+
| Kein `session_id` weitergeben | Jeder Aufruf verliert Kontext, kein Scope-Carry-Over | Immer `session_id` übergeben |
|
|
184
|
+
| `drift_diff` nach jedem Edit | Teurer als nötig für Zwischenfeedback | `nudge` als Inner-Loop, `diff` nur am Ende |
|
|
185
|
+
| Mehrere Findings gleichzeitig fixen | Unklar welche Änderung welchen Effekt hat | Immer ein Finding pro Iteration |
|
|
186
|
+
|
|
187
|
+
## Verhalten bei `agent_instruction` in Responses
|
|
188
|
+
|
|
189
|
+
Drift-MCP-Tools geben in jeder Antwort ein Feld `agent_instruction` zurück. **Dieses Feld befolgen.** Es enthält den empfohlenen nächsten Schritt, der zum Session-Zustand passt.
|
|
190
|
+
|
|
191
|
+
Zusätzlich gibt `next_tool_call` den konkreten nächsten Tool-Aufruf mit Parametern vor. Wenn vorhanden, diesen bevorzugt verwenden.
|
|
192
|
+
|
|
193
|
+
## Artefakte
|
|
194
|
+
|
|
195
|
+
Dieser Prompt erzeugt keine separaten Artefakte. Die Änderungen sind die Code-Fixes selbst.
|
|
@@ -181,6 +181,40 @@ Key rules:
|
|
|
181
181
|
- Follow `agent_instruction` and `next_tool_call` fields in responses
|
|
182
182
|
- Run `drift_diff` only as final verification, not after every edit
|
|
183
183
|
|
|
184
|
+
### Test-Aware Fix-Loop
|
|
185
|
+
|
|
186
|
+
After each `drift_nudge` call (when `direction` is not degrading), run targeted tests for the changed file **before** requesting the next task.
|
|
187
|
+
|
|
188
|
+
**Why:** `fix_plan`, `nudge`, and `AgentTask` contain no test awareness. The `safe_to_commit` field only evaluates drift delta — not pytest results. Test failures are otherwise only caught at push time by CI Gate 8.
|
|
189
|
+
|
|
190
|
+
**Path-to-test mapping (first match wins):**
|
|
191
|
+
|
|
192
|
+
| Changed file pattern | Run these tests |
|
|
193
|
+
|---|---|
|
|
194
|
+
| `src/drift/signals/architecture_violation*` | `pytest tests/test_avs_*.py -q --tb=short` |
|
|
195
|
+
| `src/drift/signals/doc_impl_drift*` | `pytest tests/test_dia_*.py -q --tb=short` |
|
|
196
|
+
| `src/drift/signals/explainability_deficit*` | `pytest tests/test_eds_*.py -q --tb=short` |
|
|
197
|
+
| `src/drift/signals/mutant_duplicates*` | `pytest tests/test_mutant_duplicates*.py -q --tb=short` |
|
|
198
|
+
| `src/drift/signals/dead_code_accumulation*` | `pytest tests/test_dead_code*.py -q --tb=short` |
|
|
199
|
+
| `src/drift/signals/pattern_fragmentation*` | `pytest tests/test_pattern_fragmentation*.py -q --tb=short` |
|
|
200
|
+
| `src/drift/signals/*` (other) | `pytest tests/test_precision_recall.py tests/test_mirofish_signal_improvements.py -q --tb=short` |
|
|
201
|
+
| `src/drift/api.py` | `pytest tests/test_brief.py tests/test_integration.py tests/test_nudge.py -q --tb=short` |
|
|
202
|
+
| `src/drift/mcp_server.py` | `pytest tests/test_mcp_copilot.py tests/test_mcp_hardening.py tests/test_tool_metadata.py -q --tb=short` |
|
|
203
|
+
| `src/drift/output/*` | `pytest tests/test_json_output.py tests/test_agent_tasks.py tests/test_output_golden.py -q --tb=short` |
|
|
204
|
+
| `src/drift/ingestion/*` | `pytest tests/test_ast_parser.py tests/test_file_discovery.py -q --tb=short` |
|
|
205
|
+
| `src/drift/config.py` | `pytest tests/test_config.py tests/test_config_validate.py -q --tb=short` |
|
|
206
|
+
| `src/drift/session.py` | `pytest tests/test_session.py -q --tb=short` |
|
|
207
|
+
| `src/drift/incremental.py` | `pytest tests/test_incremental.py tests/test_nudge.py -q --tb=short` |
|
|
208
|
+
| Fallback | `pytest tests/ -q --tb=short --ignore=tests/test_smoke_real_repos.py --maxfail=5` |
|
|
209
|
+
|
|
210
|
+
**On test failure — decision tree:**
|
|
211
|
+
|
|
212
|
+
- `AttributeError: has no attribute X` or `TypeError: N arguments expected` → test checks implementation details → **adapt the test**
|
|
213
|
+
- Test expects an old drift pattern that was intentionally removed → **adapt the test**
|
|
214
|
+
- `AssertionError` on documented public API behavior or return value contract → **reconsider or revert the production fix**
|
|
215
|
+
|
|
216
|
+
No hard block: the workflow continues after the decision is applied. Full mapping and decision rules: `.github/prompts/drift-fix-loop.prompt.md` (Schritt 3b).
|
|
217
|
+
|
|
184
218
|
See `.github/prompts/drift-fix-loop.prompt.md` for the detailed workflow.
|
|
185
219
|
|
|
186
220
|
## False Positive Reduction Playbook
|
|
@@ -15,6 +15,12 @@ Guide Copilot agents through a policy-conformant, evidence-based pull request re
|
|
|
15
15
|
- Evaluating signal quality, scoring changes, or output format changes
|
|
16
16
|
- Checking benchmark evidence for new features
|
|
17
17
|
|
|
18
|
+
## Strukturierte Review-Checkliste
|
|
19
|
+
|
|
20
|
+
**Pflicht-Referenz:** Die vollständige Review-Checkliste liegt unter `.github/prompts/_partials/review-checkliste.md`.
|
|
21
|
+
Bei jedem adversarialen Review wird diese Checkliste Punkt für Punkt abgearbeitet.
|
|
22
|
+
Der Reviewer dokumentiert pro Punkt **Ja / Nein / N/A** mit Kurzbegründung.
|
|
23
|
+
|
|
18
24
|
## Review Workflow
|
|
19
25
|
|
|
20
26
|
### Step 1: Policy Gate
|
|
@@ -87,6 +87,14 @@
|
|
|
87
87
|
- Map git-root-relative paths to repo-relative paths in `analyze_diff` and `parse_git_history` so `--repo` on nested subdirectories no longer leaks parent-repo file scope (#117).
|
|
88
88
|
- `drift self` error guidance now suggests valid next actions (`drift scan`/`drift analyze`) instead of invalid `--repo` flag (#120).
|
|
89
89
|
|
|
90
|
+
## [2.7.1] - 2026-04-09
|
|
91
|
+
|
|
92
|
+
Short version: Align release metadata so release-discipline checks pass.
|
|
93
|
+
|
|
94
|
+
### Changed
|
|
95
|
+
|
|
96
|
+
- Align top changelog release marker with project version `2.7.1` in `pyproject.toml`.
|
|
97
|
+
|
|
90
98
|
## [2.7.0] - 2026-04-09
|
|
91
99
|
|
|
92
100
|
Short version: Signal-filtering for scan, cross-validation fields, and false-positive reductions across multiple signals.
|
|
@@ -81,7 +81,7 @@ baselines per repository and automatically invalidates them when:
|
|
|
81
81
|
|
|
82
82
|
---
|
|
83
83
|
|
|
84
|
-
## Signals (
|
|
84
|
+
## Signals (24 total — 15 scoring-active, 9 report-only)
|
|
85
85
|
|
|
86
86
|
### Scoring-active signals
|
|
87
87
|
|
|
@@ -115,6 +115,7 @@ baselines per repository and automatically invalidates them when:
|
|
|
115
115
|
| **MAZ** | Missing Authorization | API endpoints lacking auth/authz checks (CWE-862) |
|
|
116
116
|
| **ISD** | Insecure Default | Unsafe default config patterns (CWE-1188) |
|
|
117
117
|
| **HSC** | Hardcoded Secret | Embedded secrets/tokens/credentials in source (CWE-798) |
|
|
118
|
+
| **PHR** | Phantom Reference | Unresolvable function/class references (AI hallucination indicator) |
|
|
118
119
|
|
|
119
120
|
Adding a new signal: see [CONTRIBUTING.md → Adding a new signal](CONTRIBUTING.md#adding-a-new-signal).
|
|
120
121
|
|
|
@@ -194,6 +195,43 @@ drift badge Generate shields.io badge URL
|
|
|
194
195
|
|
|
195
196
|
**Shared fixture:** `conftest.py` → `tmp_repo` creates a complete 3-layer mini-project (services/api/db).
|
|
196
197
|
|
|
198
|
+
### Quelldatei → Empfohlene Tests (Agents / Fix-Loop)
|
|
199
|
+
|
|
200
|
+
Bei Drift-Fix-Loops gezielte Tests unmittelbar nach jeder Dateiänderung ausführen — **nicht** die volle Suite pro Iteration. Kürzeste Match-Regel (oben zuerst):
|
|
201
|
+
|
|
202
|
+
| Geänderte Datei | Empfohlene Tests |
|
|
203
|
+
|---|---|
|
|
204
|
+
| `src/drift/signals/architecture_violation*` | `pytest tests/test_avs_*.py -q --tb=short` |
|
|
205
|
+
| `src/drift/signals/doc_impl_drift*` | `pytest tests/test_dia_*.py -q --tb=short` |
|
|
206
|
+
| `src/drift/signals/explainability_deficit*` | `pytest tests/test_eds_*.py -q --tb=short` |
|
|
207
|
+
| `src/drift/signals/mutant_duplicates*` | `pytest tests/test_mutant_duplicates*.py -q --tb=short` |
|
|
208
|
+
| `src/drift/signals/dead_code_accumulation*` | `pytest tests/test_dead_code*.py -q --tb=short` |
|
|
209
|
+
| `src/drift/signals/pattern_fragmentation*` | `pytest tests/test_pattern_fragmentation*.py -q --tb=short` |
|
|
210
|
+
| `src/drift/signals/naming_contract*` | `pytest tests/test_naming_contract*.py -q --tb=short` |
|
|
211
|
+
| `src/drift/signals/test_polarity_deficit*` | `pytest tests/test_test_polarity_deficit*.py -q --tb=short` |
|
|
212
|
+
| `src/drift/signals/cognitive_complexity*` | `pytest tests/test_cognitive_complexity*.py -q --tb=short` |
|
|
213
|
+
| `src/drift/signals/circular_import*` | `pytest tests/test_circular_import*.py -q --tb=short` |
|
|
214
|
+
| `src/drift/signals/guard_clause*` | `pytest tests/test_guard_clause*.py -q --tb=short` |
|
|
215
|
+
| `src/drift/signals/insecure_default*` | `pytest tests/test_insecure_default*.py -q --tb=short` |
|
|
216
|
+
| `src/drift/signals/missing_authorization*` | `pytest tests/test_missing_authorization*.py -q --tb=short` |
|
|
217
|
+
| `src/drift/signals/hardcoded_secret*` | `pytest tests/test_hardcoded_secret*.py -q --tb=short` |
|
|
218
|
+
| `src/drift/signals/exception_contract*` | `pytest tests/test_exception_contract*.py -q --tb=short` |
|
|
219
|
+
| `src/drift/signals/fan_out_explosion*` | `pytest tests/test_fan_out_explosion*.py -q --tb=short` |
|
|
220
|
+
| `src/drift/signals/cohesion_deficit*` | `pytest tests/test_cohesion_deficit*.py -q --tb=short` |
|
|
221
|
+
| `src/drift/signals/bypass_accumulation*` | `pytest tests/test_bypass_accumulation*.py -q --tb=short` |
|
|
222
|
+
| `src/drift/signals/*` (andere) | `pytest tests/test_precision_recall.py tests/test_mirofish_signal_improvements.py -q --tb=short` |
|
|
223
|
+
| `src/drift/api.py` | `pytest tests/test_brief.py tests/test_integration.py tests/test_incremental.py tests/test_fix_actionability.py tests/test_nudge.py -q --tb=short` |
|
|
224
|
+
| `src/drift/mcp_server.py` | `pytest tests/test_mcp_copilot.py tests/test_mcp_hardening.py tests/test_tool_metadata.py tests/test_negative_context_export.py -q --tb=short` |
|
|
225
|
+
| `src/drift/output/*` | `pytest tests/test_json_output.py tests/test_csv_output.py tests/test_sarif_contract.py tests/test_output_golden.py tests/test_agent_tasks.py -q --tb=short` |
|
|
226
|
+
| `src/drift/ingestion/*` | `pytest tests/test_ast_parser.py tests/test_file_discovery.py tests/test_scope_resolver.py tests/test_typescript_parser.py -q --tb=short` |
|
|
227
|
+
| `src/drift/config.py` | `pytest tests/test_config.py tests/test_config_validate.py tests/test_model_consistency.py -q --tb=short` |
|
|
228
|
+
| `src/drift/commands/*` | `pytest tests/test_self_command.py tests/test_patterns_command.py tests/test_ci_reality.py -q --tb=short` |
|
|
229
|
+
| `src/drift/session.py` | `pytest tests/test_session.py -q --tb=short` |
|
|
230
|
+
| `src/drift/incremental.py` | `pytest tests/test_incremental.py tests/test_nudge.py -q --tb=short` |
|
|
231
|
+
| Fallback | `pytest tests/ -q --tb=short --ignore=tests/test_smoke_real_repos.py --maxfail=5` |
|
|
232
|
+
|
|
233
|
+
Bei Testfehlschlag gilt: `AttributeError`/`TypeError` auf Interna → Test anpassen; `AssertionError` auf Public-API-Vertrag → Production-Fix überdenken. Vollständiger Entscheidungsbaum: `.github/prompts/drift-fix-loop.prompt.md` (Schritt 3b).
|
|
234
|
+
|
|
197
235
|
---
|
|
198
236
|
|
|
199
237
|
## Bug-Hunting Tools
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: drift-analyzer
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.2
|
|
4
4
|
Summary: Deterministic architectural drift detection for AI-accelerated Python repositories through cross-file coherence analysis
|
|
5
5
|
Project-URL: Homepage, https://mick-gsk.github.io/drift/
|
|
6
6
|
Project-URL: Repository, https://github.com/mick-gsk/drift
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file_path": "src/myapp/utils/__init__.py", "language": "python", "line_count": 0, "parse_errors": [], "functions": [], "classes": [], "imports": [], "patterns": []}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"_v": 3, "findings": []}
|