dry-lint 1.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dry_lint-1.6.0/.gitignore +11 -0
- dry_lint-1.6.0/.pre-commit-hooks.yaml +32 -0
- dry_lint-1.6.0/AGENTS.md +26 -0
- dry_lint-1.6.0/CONTRIBUTING.md +24 -0
- dry_lint-1.6.0/LICENSE +202 -0
- dry_lint-1.6.0/PKG-INFO +349 -0
- dry_lint-1.6.0/README.md +314 -0
- dry_lint-1.6.0/action.yml +282 -0
- dry_lint-1.6.0/counter/README.md +53 -0
- dry_lint-1.6.0/counter/src/lint.js +2 -0
- dry_lint-1.6.0/counter/src/tally.js +297 -0
- dry_lint-1.6.0/counter/src/worker.js +139 -0
- dry_lint-1.6.0/docs/adoption-playbook.md +362 -0
- dry_lint-1.6.0/docs/agent-feedback-curves.csv +313 -0
- dry_lint-1.6.0/docs/agent-feedback-experiment.md +105 -0
- dry_lint-1.6.0/docs/agent-feedback-results.json +8321 -0
- dry_lint-1.6.0/docs/agent-reviewed-discovery.md +101 -0
- dry_lint-1.6.0/docs/assets/avatar.png +0 -0
- dry_lint-1.6.0/docs/assets/dry-lint-mark.svg +5 -0
- dry_lint-1.6.0/docs/assets/four-cent-discovery.svg +2292 -0
- dry_lint-1.6.0/docs/assets/historical-discovery.csv +55 -0
- dry_lint-1.6.0/docs/assets/icon.png +0 -0
- dry_lint-1.6.0/docs/assets/lint.png +0 -0
- dry_lint-1.6.0/docs/assets/operation-block-performance.json +973 -0
- dry_lint-1.6.0/docs/assets/readme-hero-dark.svg +20 -0
- dry_lint-1.6.0/docs/assets/readme-hero-light.svg +20 -0
- dry_lint-1.6.0/docs/assets/social-preview.png +0 -0
- dry_lint-1.6.0/docs/assets/social-preview.svg +10 -0
- dry_lint-1.6.0/docs/assets/sticky-banner-dark.svg +13 -0
- dry_lint-1.6.0/docs/assets/sticky-banner-light.svg +13 -0
- dry_lint-1.6.0/docs/benchmark-backgrounds.md +125 -0
- dry_lint-1.6.0/docs/benchmark.md +563 -0
- dry_lint-1.6.0/docs/budgeted-recall.md +124 -0
- dry_lint-1.6.0/docs/case-studies/pytest-obligation-cleanup.md +157 -0
- dry_lint-1.6.0/docs/case-studies/pytest-selective.md +140 -0
- dry_lint-1.6.0/docs/channel-trial.md +187 -0
- dry_lint-1.6.0/docs/comment-preview.md +81 -0
- dry_lint-1.6.0/docs/context-probe.md +81 -0
- dry_lint-1.6.0/docs/coverage-exploration.md +336 -0
- dry_lint-1.6.0/docs/cpu-embedding.md +192 -0
- dry_lint-1.6.0/docs/cpu-recovery.md +46 -0
- dry_lint-1.6.0/docs/cpu-tail-rrf.md +61 -0
- dry_lint-1.6.0/docs/design.md +324 -0
- dry_lint-1.6.0/docs/detectors.md +105 -0
- dry_lint-1.6.0/docs/discovery-comparers.md +87 -0
- dry_lint-1.6.0/docs/dryer-comparison.md +172 -0
- dry_lint-1.6.0/docs/enablement-results.json +515 -0
- dry_lint-1.6.0/docs/enablement-results.md +164 -0
- dry_lint-1.6.0/docs/four-cent-discovery-curves.csv +1714 -0
- dry_lint-1.6.0/docs/four-cent-discovery-results.json +1777 -0
- dry_lint-1.6.0/docs/four-cent-discovery.md +220 -0
- dry_lint-1.6.0/docs/function-indexes.md +107 -0
- dry_lint-1.6.0/docs/github-action.md +386 -0
- dry_lint-1.6.0/docs/historical-discovery.md +249 -0
- dry_lint-1.6.0/docs/judges.md +231 -0
- dry_lint-1.6.0/docs/model-adoption.md +136 -0
- dry_lint-1.6.0/docs/model-duplication.md +288 -0
- dry_lint-1.6.0/docs/operation-block-performance.md +64 -0
- dry_lint-1.6.0/docs/operation-blocks.md +250 -0
- dry_lint-1.6.0/docs/plugins.md +246 -0
- dry_lint-1.6.0/docs/production-discovery-results.json +2407 -0
- dry_lint-1.6.0/docs/production-discovery-results.md +106 -0
- dry_lint-1.6.0/docs/production-discovery.md +188 -0
- dry_lint-1.6.0/docs/protected-exploration-curves.csv +379 -0
- dry_lint-1.6.0/docs/protected-exploration.md +203 -0
- dry_lint-1.6.0/docs/research/agentic-judge/CASES.md +59 -0
- dry_lint-1.6.0/docs/research/agentic-judge/CORPUS.md +15 -0
- dry_lint-1.6.0/docs/research/agentic-judge/FULL-RERUN.json +46 -0
- dry_lint-1.6.0/docs/research/agentic-judge/HANDOFF.json +21 -0
- dry_lint-1.6.0/docs/research/agentic-judge/PR-body.md +20 -0
- dry_lint-1.6.0/docs/research/agentic-judge/PR-title.txt +1 -0
- dry_lint-1.6.0/docs/research/agentic-judge/README.md +109 -0
- dry_lint-1.6.0/docs/research/agentic-judge/REPRODUCTION.md +42 -0
- dry_lint-1.6.0/docs/research/agentic-judge/SHA256SUMS +143 -0
- dry_lint-1.6.0/docs/research/agentic-judge/audit.py +43 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/background-acquisition.json +153 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/evidence/conclusion/COMPARATOR-V3-AMENDMENT.json +13 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/evidence/funded-rounds/round1/final-join/metrics.json +68 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/evidence/funded-rounds/round2/paired-baselines-repair-v3/analysis/metrics.json +62 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/evidence/resolution/followup-results/summary.json +205 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/holds.json +9 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/metrics.json +380 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/README.md +16 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/EXPERIMENT.json.txt +1 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/agentic-claude/analyze.py.txt +204 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/agentic-claude/check_sdk_constructor.py.txt +60 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/agentic-claude/check_sdk_requests.py.txt +123 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/agentic-claude/commands.json.txt +9 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/agentic-claude/diagnostic_text_parser.py.txt +146 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/agentic-claude/finalize_prereg.py.txt +67 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/agentic-claude/harness.py.txt +696 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/agentic-claude/prepare.py.txt +233 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/agentic-claude/test_diagnostic_text_parser.py.txt +66 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/agentic-claude/test_harness.py.txt +216 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/analyze_funded.py.txt +174 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/check_paired_baselines.py.txt +61 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/check_root_paired_baselines.py.txt +58 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/export_paired_baselines.py.txt +90 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/join_round1_source.py.txt +63 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/paired_baseline_adapter.py.txt +75 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/root_paired_baselines.py.txt +66 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round1/EXPERIMENT.json.txt +1 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round1/analyze_round1.py.txt +87 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round1/check_control_schedule.py.txt +63 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round1/check_topup.py.txt +90 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round1/freeze_requests.py.txt +80 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round1/prepare_supply.py.txt +246 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round1/run_topup.py.txt +135 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round1/teacher_v3_adapter.py.txt +80 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/EXPERIMENT.json.txt +1 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/check_control_schedule.py.txt +63 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/check_literal_search.py.txt +51 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/check_round2.py.txt +106 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/freeze_requests.py.txt +80 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/paired-baselines-repair-v2/EXPERIMENT.json.txt +1 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/paired-baselines-repair-v2/adapter.py.txt +95 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/paired-baselines-repair-v2/check.py.txt +93 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/paired-baselines-repair-v2/instruction-diff.txt.txt +30 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/paired-baselines-repair-v2/prepare.py.txt +83 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/paired-baselines-repair-v2/root_runner.py.txt +66 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/paired-baselines-repair-v3/EXPERIMENT.json.txt +32 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/paired-baselines-repair-v3/adapter.py.txt +95 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/paired-baselines-repair-v3/analyze.py.txt +95 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/paired-baselines-repair-v3/check.py.txt +112 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/paired-baselines-repair-v3/instruction-diff.txt.txt +4 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/paired-baselines-repair-v3/repair_budget_runner.py.txt +161 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/paired-baselines-repair-v3/root_runner.py.txt +72 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/prepare_supply.py.txt +261 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/run_round2.py.txt +135 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/funded-rounds/round2/teacher_v4_adapter.py.txt +142 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/resolution/EXPERIMENT.json.txt +19 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/resolution/analyze_teacher_v2.py.txt +159 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/resolution/attribute_teacher_failures.py.txt +89 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/resolution/check_parallel_teacher.py.txt +122 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/resolution/check_teacher_v2.py.txt +91 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/resolution/commands.json.txt +6 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/resolution/evaluate_followup.py.txt +151 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/resolution/run_teacher_v2_parallel.py.txt +60 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/resolution/source_novelty.py.txt +54 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/resolution/teacher_v2.py.txt +214 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/resolution/test_followup_scoring.py.txt +72 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/lab/resolution/validate_followup.py.txt +158 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/pyproject.toml.txt +71 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/__init__.py.txt +3 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/__main__.py.txt +5 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/action.py.txt +717 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/baseline.py.txt +370 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/bench.py.txt +274 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/bench_background.py.txt +88 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/cli.py.txt +1009 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/commits.py.txt +161 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/comparers.py.txt +62 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/comparison.py.txt +288 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/comparison_helpers.py.txt +85 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/costs.py.txt +152 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/detector.py.txt +354 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/discovery.py.txt +160 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/dryer.py.txt +96 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/evidence.py.txt +65 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/extractors.py.txt +81 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/feedback.py.txt +50 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/function_index.py.txt +203 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/functions.py.txt +386 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/git.py.txt +25 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/github.py.txt +11 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/index.py.txt +44 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/index_github.py.txt +183 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/judges/__init__.py.txt +30 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/judges/anthropic.py.txt +102 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/judges/command.py.txt +263 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/judges/gemini.py.txt +25 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/judges/http.py.txt +54 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/judges/jev.py.txt +224 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/judges/model_jev.py.txt +114 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/judges/subscription.py.txt +76 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/judging.py.txt +289 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/labelling.py.txt +402 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/ledger.py.txt +573 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/model_review.py.txt +123 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/model_shapes.py.txt +307 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/models.py.txt +270 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/plugins.py.txt +120 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/policies.py.txt +63 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/presets.py.txt +149 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/python_schemas.py.txt +113 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/ranking.py.txt +43 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/replay.py.txt +174 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/report.py.txt +848 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/schema_policy.py.txt +235 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/settings.py.txt +205 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/source_context.py.txt +69 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/sticky.py.txt +384 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/store.py.txt +228 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/src/dry_lint/typescript.py.txt +386 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/original/product/uv.lock.txt +1106 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/paired-round1.json +1174 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/provenance.json +881 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/recordings.json +6509 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/source-files.json.gz +0 -0
- dry_lint-1.6.0/docs/research/agentic-judge/data/source-pins.json +30 -0
- dry_lint-1.6.0/docs/research/agentic-judge/hydrate.py +37 -0
- dry_lint-1.6.0/docs/research/agentic-judge/licenses/BerriAI--litellm.txt +26 -0
- dry_lint-1.6.0/docs/research/agentic-judge/licenses/OpenHands--software-agent-sdk.txt +21 -0
- dry_lint-1.6.0/docs/research/agentic-judge/licenses/anomalyco--opencode.txt +21 -0
- dry_lint-1.6.0/docs/research/agentic-judge/licenses/dry-lint.txt +202 -0
- dry_lint-1.6.0/docs/research/agentic-judge/licenses/pingdotgg--t3code.txt +21 -0
- dry_lint-1.6.0/docs/research/agentic-judge/materialize.py +21 -0
- dry_lint-1.6.0/docs/research/agentic-judge/native.py +30 -0
- dry_lint-1.6.0/docs/research/agentic-judge/reproduce.py +186 -0
- dry_lint-1.6.0/docs/research/budget-ranking/DATA-CONTRACT.json +46 -0
- dry_lint-1.6.0/docs/research/budget-ranking/HANDOFF.json +30 -0
- dry_lint-1.6.0/docs/research/budget-ranking/PR-body.md +24 -0
- dry_lint-1.6.0/docs/research/budget-ranking/PR-title.txt +1 -0
- dry_lint-1.6.0/docs/research/budget-ranking/README.md +111 -0
- dry_lint-1.6.0/docs/research/budget-ranking/SHA256SUMS +112 -0
- dry_lint-1.6.0/docs/research/budget-ranking/VALIDATION.md +11 -0
- dry_lint-1.6.0/docs/research/budget-ranking/algorithm.py +54 -0
- dry_lint-1.6.0/docs/research/budget-ranking/backgrounds.py +37 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0010/case.json +450 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0010/claude-answer.json +51 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0010/claude-request.txt +136 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0010/jev-answer.json +25 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0010/jev-request.txt +1 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0018/case.json +466 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0018/claude-answer.json +51 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0018/claude-request.txt +233 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0018/jev-answer.json +25 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0018/jev-request.txt +1 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0059/case.json +423 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0059/claude-answer.json +51 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0059/claude-request.txt +163 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0059/jev-answer.json +25 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R1-0059/jev-request.txt +1 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R2-0019/case.json +506 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R2-0019/claude-answer.json +41 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R2-0019/claude-request.txt +918 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R2-0019/jev-answer.json +25 -0
- dry_lint-1.6.0/docs/research/budget-ranking/cases/BR-R2-0019/jev-request.txt +1 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/DISJOINTNESS-RECEIPT.json +25 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/GOLD-ADMISSION-REGRESSION.json +121 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/algorithm-input.json +1806 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/LICENSE.txt +202 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/build_funded_round1.py.txt +242 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/build_funded_round2_public.py.txt +283 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/funded-rounds/public_budget_revised_funding_adapter_v1.py.txt +76 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/funded-rounds/public_ranking_intake.py.txt +115 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/funded-rounds/seal_public_ranking_intake.py.txt +90 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/join_public_funded_round.py.txt +116 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/join_public_funded_round_v2.py.txt +123 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/join_public_source_truth.py.txt +94 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/pyproject.toml.txt +71 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/run_experiment.py.txt +521 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/run_fair_fixed_revision.py.txt +163 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/__init__.py.txt +3 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/__main__.py.txt +5 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/action.py.txt +717 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/baseline.py.txt +370 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/bench.py.txt +274 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/bench_background.py.txt +88 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/cli.py.txt +1009 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/commits.py.txt +161 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/comparers.py.txt +62 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/comparison.py.txt +288 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/comparison_helpers.py.txt +85 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/costs.py.txt +152 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/detector.py.txt +354 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/discovery.py.txt +160 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/dryer.py.txt +96 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/evidence.py.txt +65 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/extractors.py.txt +81 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/feedback.py.txt +50 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/function_index.py.txt +203 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/functions.py.txt +386 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/git.py.txt +25 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/github.py.txt +11 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/index.py.txt +44 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/index_github.py.txt +183 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/judges/__init__.py.txt +30 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/judges/anthropic.py.txt +102 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/judges/command.py.txt +263 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/judges/gemini.py.txt +25 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/judges/http.py.txt +54 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/judges/jev.py.txt +224 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/judges/model_jev.py.txt +114 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/judges/subscription.py.txt +76 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/judging.py.txt +289 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/labelling.py.txt +402 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/ledger.py.txt +573 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/model_review.py.txt +123 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/model_shapes.py.txt +307 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/models.py.txt +270 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/plugins.py.txt +120 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/policies.py.txt +63 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/presets.py.txt +149 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/python_schemas.py.txt +113 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/ranking.py.txt +43 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/replay.py.txt +174 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/report.py.txt +848 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/schema_policy.py.txt +235 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/settings.py.txt +205 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/source_context.py.txt +69 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/sticky.py.txt +384 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/store.py.txt +228 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/src/dry_lint/typescript.py.txt +386 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/archived-code/uv.lock.txt +1106 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/background-catalog-lookup.json +32 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/expected-replay.json +119 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/metrics.json +36 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/private-aggregates.json +1 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/provenance.json +530 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/recordings.json.gz +0 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/selected-source-files.json.gz +0 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/source-manifest.json +738 -0
- dry_lint-1.6.0/docs/research/budget-ranking/data/specifications.json +153 -0
- dry_lint-1.6.0/docs/research/budget-ranking/hydrate.py +59 -0
- dry_lint-1.6.0/docs/research/budget-ranking/licenses/BerriAI--litellm.txt +26 -0
- dry_lint-1.6.0/docs/research/budget-ranking/licenses/OpenHands--software-agent-sdk.txt +21 -0
- dry_lint-1.6.0/docs/research/budget-ranking/licenses/anomalyco--opencode.txt +21 -0
- dry_lint-1.6.0/docs/research/budget-ranking/licenses/dry-lint-Apache-2.0.txt +202 -0
- dry_lint-1.6.0/docs/research/budget-ranking/licenses/pingdotgg--t3code.txt +21 -0
- dry_lint-1.6.0/docs/research/budget-ranking/replay.py +142 -0
- dry_lint-1.6.0/docs/research/budget-ranking/verify.py +76 -0
- dry_lint-1.6.0/docs/research/contract-tokens/.gitignore +2 -0
- dry_lint-1.6.0/docs/research/contract-tokens/CHECKS.json +394 -0
- dry_lint-1.6.0/docs/research/contract-tokens/CORPUS.json +838 -0
- dry_lint-1.6.0/docs/research/contract-tokens/HANDOFF.json +15 -0
- dry_lint-1.6.0/docs/research/contract-tokens/PR-body.md +20 -0
- dry_lint-1.6.0/docs/research/contract-tokens/PR-title.txt +1 -0
- dry_lint-1.6.0/docs/research/contract-tokens/PROVENANCE.json +65 -0
- dry_lint-1.6.0/docs/research/contract-tokens/README.md +67 -0
- dry_lint-1.6.0/docs/research/contract-tokens/SHA256SUMS +40 -0
- dry_lint-1.6.0/docs/research/contract-tokens/acquire.py +22 -0
- dry_lint-1.6.0/docs/research/contract-tokens/aggregate.py +23 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/evidence/MANIFEST.json +38 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/evidence/README.md +24 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/evidence/final-source-decision.json +1 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/evidence/original-metrics.json +1 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/evidence/revised-metrics.json +210 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/evidence/verify_evidence.py +44 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/feed-provenance.json +10 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/final-source-decisions.json +123 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/held-request-templates.json +1 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/implementation.json.gz +0 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/observations.jsonl +142 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/paired-records.json.gz +0 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/policy-admissions.jsonl +39 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/recorded-replay.json +154 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/selected-cases.json.gz +0 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/source-files.json.gz +0 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/source-manifest.json +3461 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/source-pins.json +16 -0
- dry_lint-1.6.0/docs/research/contract-tokens/data/transform-inputs.json +49 -0
- dry_lint-1.6.0/docs/research/contract-tokens/hydrate.py +31 -0
- dry_lint-1.6.0/docs/research/contract-tokens/implementation/README.md +1 -0
- dry_lint-1.6.0/docs/research/contract-tokens/implementation/lab--funded-rounds--round2--conjunctive.py.txt +146 -0
- dry_lint-1.6.0/docs/research/contract-tokens/implementation/lab--measured_contract_tokens.py.txt +735 -0
- dry_lint-1.6.0/docs/research/contract-tokens/licenses/BerriAI--litellm.txt +26 -0
- dry_lint-1.6.0/docs/research/contract-tokens/licenses/OpenHands--software-agent-sdk.txt +21 -0
- dry_lint-1.6.0/docs/research/contract-tokens/licenses/anomalyco--opencode.txt +21 -0
- dry_lint-1.6.0/docs/research/contract-tokens/licenses/dry-lint.txt +202 -0
- dry_lint-1.6.0/docs/research/contract-tokens/licenses/pingdotgg--t3code.txt +21 -0
- dry_lint-1.6.0/docs/research/contract-tokens/reproduce.py +133 -0
- dry_lint-1.6.0/docs/research/contract-tokens/transform.py +35 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/CASES.md +118 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/CORPUS.md +15 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/FULL-RERUN.json +56 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/HANDOFF.json +26 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/PR-body.md +21 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/PR-title.txt +1 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/README.md +134 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/REPRODUCTION.md +48 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/SHA256SUMS +159 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/VALIDATION.json +65 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/audit.py +43 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/anonymous-regression-pairs.json +2232 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/background-acquisition.json +1060 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/evidence/acquisition.json +90 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/evidence/cache-measurements.json +28 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/evidence/conclusion/disputed-source-sensitivity.json +188 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/evidence/funded-rounds/round2/emission-summary.json +11 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/evidence/funded-rounds/round2/matched-sparse-baseline-summary.json +16 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/evidence/funded-rounds/round2/projection-policy.json +15 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/evidence/funded-rounds/round2/regression/comparison-summary.json +49 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/evidence/promotion/CPUE04-directional-emissions.jsonl +215 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/evidence/promotion/CPUE04.json +31 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/evidence/promotion/default3/production-summary.json +24 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/evidence/promotion/production-summary.json +24 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/holds.json +9 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/metrics.json +53 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/README.md +17 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/EXPERIMENT.json.txt +160 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/acquire.py.txt +98 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/build_handoff.py.txt +103 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/conclusion/disputed_source_sensitivity.py.txt +24 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/conclusion/join_source_review.py.txt +25 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/discover.py.txt +179 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/embed.py.txt +187 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/environment.json.txt +10 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/experiment.py.txt +688 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/freeze.py.txt +151 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/EXPERIMENT.json.txt +32 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/adjudication_sensitivity.py.txt +69 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/bind_coordinator_acceptance.py.txt +83 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/commands.json.txt +22 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/coverage_tables.py.txt +181 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/encode.py.txt +201 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/execution-failures/nullable-drifted-summary-v1/experiment.py.txt +687 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/execution-failures/nullable-drifted-summary-v1/run_full.py.txt +588 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/export_span_inputs.py.txt +158 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/finalize.py.txt +389 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/finish_all.py.txt +66 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/freeze_policy_results.py.txt +82 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/make_batch1.py.txt +291 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/migrate_spans.py.txt +237 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/migration_receipt.py.txt +191 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/models.py.txt +167 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/paired_summary.py.txt +182 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/prepare.py.txt +174 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/prepare_available.py.txt +32 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/project_intake.py.txt +232 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/resource_call.py.txt +46 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/run_full.py.txt +598 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/runtime_receipt.py.txt +41 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/span-audit.py.txt +27 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/span-migration/helper-v1/resolver.py.txt +248 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/span-migration/pre-helper-v1/experiment.py.txt +624 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/span_adapter.py.txt +31 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/full-corpus/validate_batch.py.txt +191 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/audit_round2_ranks.py.txt +27 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/discover_round1.py.txt +129 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/discover_round2.py.txt +136 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/matched_sparse_baselines.py.txt +51 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/project_round1.py.txt +18 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/project_round2.py.txt +18 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/round1/EXPERIMENT.json.txt +15 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/round2/EXPERIMENT.json.txt +16 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/round2/REPRODUCE.json.txt +47 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/round2/projection-policy.json.txt +15 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/summarize_round2.py.txt +27 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/translate_central.py.txt +59 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/translate_round2.py.txt +59 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/validate_round1.py.txt +35 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/funded-rounds/validate_round2.py.txt +42 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/make_packets.py.txt +173 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/measure_sparse.py.txt +38 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/pilot-preserved/experiment.py.txt +618 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/promotion/EXPERIMENT.json.txt +15 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/promotion/compare.py.txt +121 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/promotion/cpue04_directions.py.txt +47 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/promotion/freeze_funded.py.txt +68 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/promotion/project_v2.py.txt +50 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/reproduce.sh.txt +24 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/runtime-requirements.lock.txt +20 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/summarize.py.txt +228 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/validate.py.txt +130 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/lab/validate_queue.py.txt +200 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/pyproject.toml.txt +72 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/__init__.py.txt +3 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/__main__.py.txt +5 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/action.py.txt +717 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/baseline.py.txt +370 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/bench.py.txt +274 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/bench_background.py.txt +88 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/cli.py.txt +1009 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/commits.py.txt +161 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/comparers.py.txt +62 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/comparison.py.txt +288 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/comparison_helpers.py.txt +85 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/costs.py.txt +152 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/cpu_embedding.py.txt +275 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/detector.py.txt +363 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/discovery.py.txt +160 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/dryer.py.txt +96 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/evidence.py.txt +65 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/extractors.py.txt +81 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/feedback.py.txt +50 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/function_index.py.txt +203 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/functions.py.txt +386 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/git.py.txt +25 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/github.py.txt +11 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/index.py.txt +44 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/index_github.py.txt +183 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/judges/__init__.py.txt +30 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/judges/anthropic.py.txt +102 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/judges/command.py.txt +263 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/judges/gemini.py.txt +25 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/judges/http.py.txt +54 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/judges/jev.py.txt +224 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/judges/model_jev.py.txt +114 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/judges/subscription.py.txt +76 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/judging.py.txt +289 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/labelling.py.txt +402 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/ledger.py.txt +573 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/model_review.py.txt +123 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/model_shapes.py.txt +307 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/models.py.txt +270 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/plugins.py.txt +121 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/policies.py.txt +63 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/presets.py.txt +149 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/python_schemas.py.txt +113 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/ranking.py.txt +43 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/replay.py.txt +174 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/report.py.txt +848 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/schema_policy.py.txt +235 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/settings.py.txt +205 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/source_context.py.txt +69 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/sticky.py.txt +384 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/store.py.txt +228 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/src/dry_lint/typescript.py.txt +386 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/original/product/uv.lock.txt +1348 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/paired-round2.json +1730 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/provenance.json +922 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/recordings.json +1810 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/selected-vectors.json +3172 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/source-files.json.gz +0 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/source-pins.json +9 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/data/wide-round2.json +3714 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/hydrate.py +37 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/licenses/BerriAI--litellm.txt +26 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/licenses/dry-lint.txt +202 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/materialize.py +21 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/native.py +30 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/COORDINATOR-ISOLATED-RESULT.json +18 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/COORDINATOR-REPLAY-RESULT.json +21 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/COVERAGE.json +26 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/DATA-RECEIPT.json +31 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/EXAMPLES.json +38 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/FINAL-ADDITIVE-CHECK.json +10 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/MATCHED-SUMMARY.json +453 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/PUBLICATION-PROVENANCE.json +40 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/README.md +72 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/REPLAY-RESULT.json +18 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/RUNNER-MANIFEST.json +86 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/common.py +68 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/hybrid.py +300 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/matched-results.json +155 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/multiquery.py +174 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/payments.json +38 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/recordings.py +27 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/regression-summary.json +380 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/replay.py +203 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/requirements.txt +5 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/retrieval.py +115 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/raw-rank-followup/tail_index.py +59 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/reproduce.py +186 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/EXPERIMENT-v1.json +21 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/EXPERIMENT-v2-implementation-amendment.json +58 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/EXPERIMENT-v2.json +59 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/FINAL-RESULTS.json +704 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/FINAL-VERIFICATION.json +22 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/README.md +75 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/all-cases-numeric.jsonl +118 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced/LICENSE-runtime +202 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced/MANIFEST.json +10 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced/UPSTREAM-MANIFEST.json +22 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced/reproduce.py +367 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced/requirements.txt +2 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced/runtime.zip +0 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced-posthoc/LICENSE-software-agent-sdk +21 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced-posthoc/MANIFEST.json +18 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced-posthoc/README.md +29 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced-posthoc/UPSTREAM-MANIFEST.json +16 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced-posthoc/accepted-source-public.json +117 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced-posthoc/balanced-dependency.json +4 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced-posthoc/native-snapshots.zip +0 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced-posthoc/recordings.json.gz +0 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced-posthoc/replay.py +112 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced-posthoc/summary.json +138 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced-posthoc/validation.json +10 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/balanced-posthoc/verification.txt +13 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/census-summary.json +14 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/final-cohort-supplement-disposition.json +154 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/final-tests.log +2 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/held-hydration.jsonl +75 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/hydrate.py +42 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/implementation/harness.py +146 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/implementation/pr109/costs.py +152 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/implementation/pr109/cpu_embedding.py +243 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/implementation/pr109/judges/command.py +263 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/implementation/pr109/judges/jev.py +224 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/implementation/selection.py +67 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/implementation/successor.py +33 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/implementation/test_successor.py +32 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/implementation/views.py +64 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/manifest.json +96 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/native-source-coverage-by-background.csv +17 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/native-source-coverage-by-background.jsonl +16 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/native-source-exclusions.json +7 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/native-view-coverage.json +5 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/public-extension-v2/rows.jsonl +115 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/public-extension-v2/summary.json +255 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/replay.py +95 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/runtime-cache-measurement.json +37 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/selected-cases.json.gz +0 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/source-coverage-amendment.json +235 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/sources/OpenHands__software-agent-sdk/cfae94d00e7addaa592ee7c9a92ebb4939b13034/LICENSE +21 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/sources/OpenHands__software-agent-sdk/cfae94d00e7addaa592ee7c9a92ebb4939b13034/openhands/sdk/agent/agent.py +413 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/sources/OpenHands__software-agent-sdk/cfae94d00e7addaa592ee7c9a92ebb4939b13034/openhands/sdk/llm/llm.py +928 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/sources/OpenHands__software-agent-sdk/cfae94d00e7addaa592ee7c9a92ebb4939b13034/openhands/sdk/llm/utils/metrics.py +310 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/sources/OpenHands__software-agent-sdk/cfae94d00e7addaa592ee7c9a92ebb4939b13034/openhands/sdk/security/llm_analyzer.py +29 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/sources/anomalyco__opencode/51626eee903ea31fde7f41deb6a3430c939d9d90/LICENSE +21 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/sources/anomalyco__opencode/51626eee903ea31fde7f41deb6a3430c939d9d90/packages/core/src/models-dev.ts +451 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/sources/anomalyco__opencode/51626eee903ea31fde7f41deb6a3430c939d9d90/packages/core/src/plugin/provider/openai.ts +438 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/sources/anomalyco__opencode/51626eee903ea31fde7f41deb6a3430c939d9d90/packages/core/src/plugin/provider/opencode.ts +714 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/sources/anomalyco__opencode/51626eee903ea31fde7f41deb6a3430c939d9d90/packages/core/src/v1/config/migrate.ts +263 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/sources/anomalyco__opencode/51626eee903ea31fde7f41deb6a3430c939d9d90/packages/tui/src/component/logo.tsx +79 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/sources/anomalyco__opencode/51626eee903ea31fde7f41deb6a3430c939d9d90/packages/tui/src/util/presentation.ts +35 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/sources/gigaverse-app__dry-lint/b6b8db3aecbf0ea9bccaef5eced516415ccbfd83/LICENSE +202 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/sources/gigaverse-app__dry-lint/b6b8db3aecbf0ea9bccaef5eced516415ccbfd83/scripts/make_assets.py +170 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/unresolved-competitor-impact.json +23 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/unresolved-report-query-influence.jsonl +2 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/v2-regression-summary.json +29 -0
- dry_lint-1.6.0/docs/research/cpu-embeddings/tail-recovery/v2-standalone-original-summary.json +35 -0
- dry_lint-1.6.0/docs/research/funded-recall/README.md +61 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/COORDINATOR-VERIFICATION.json +21 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/PR-SUMMARY.md +1 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/README.md +98 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/SHA256SUMS +47 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/audit.py +45 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/evidence.json +117 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/implementation/ORIGINS.json +32 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/implementation/README.md +10 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/implementation/anthropic.py +102 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/implementation/coverage_round2.py +247 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/implementation/jev.py +224 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/implementation/score_coverage_round2.py +186 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/implementation/trace_evaluate.py +153 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/implementation/trace_followup.py +266 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/paired-results.csv +33 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/.gitignore +2 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/INVENTORY.json +151 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/README.md +148 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/SHA256SUMS +30 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/VERIFICATION.md +31 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/acquire.py +38 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/archive.py +16 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/build_export.py +233 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/common.py +101 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/hydrate.py +67 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/implementation-provenance.json +13 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/implementation.json.gz +0 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/inspect_case.py +74 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/kit.py +16 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/licenses/BerriAI--litellm.txt +26 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/licenses/OpenHands--software-agent-sdk.txt +21 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/licenses/anomalyco--opencode.txt +21 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/licenses/dry-lint-Apache-2.0.txt +202 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/licenses/pingdotgg--t3code.txt +21 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/live.py +115 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/native-verification.json +29 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/native.py +133 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/prompts.json +1 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/public_safety.py +48 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/published-paired-results.csv +33 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/recordings.json.gz +0 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/reproduce.py +257 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/source-files.json.gz +0 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/source-pins.json +1 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/test_kit.py +113 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/reproduction/transforms.py +33 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/request-hash-receipts.jsonl +80 -0
- dry_lint-1.6.0/docs/research/funded-recall/context/source-pins.json +466 -0
- dry_lint-1.6.0/docs/research/historical-recovery/LICENSE-APACHE-2.0.txt +202 -0
- dry_lint-1.6.0/docs/research/historical-recovery/README.md +130 -0
- dry_lint-1.6.0/docs/research/historical-recovery/REPRODUCTION.md +83 -0
- dry_lint-1.6.0/docs/research/historical-recovery/SHA256SUMS +54 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/final-report-correction/replay_h05_final.py.txt +96 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/guarded/final_counts.py.txt +27 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/guarded/provider_support.py.txt +117 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/guarded/replay.py.txt +354 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/guarded/report.py.txt +123 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/historical-template.txt +20 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/manifest.json +290 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/native/judge_history.py.txt +492 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/native/replay.py.txt +206 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/native/replay_coverage.py.txt +237 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/native/summarize.py.txt +66 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/production/comparers.py.txt +62 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/production/costs.py.txt +153 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/production/detector.py.txt +354 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/production/discovery.py.txt +157 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/production/index.py.txt +44 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/production/judges/anthropic.py.txt +102 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/production/judges/command.py.txt +263 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/production/judging.py.txt +281 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/production/presets.py.txt +150 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/production/report.py.txt +847 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/production/settings.py.txt +206 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/protected-reference-templates.json.txt +10 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/shared-operations-template.txt +46 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/source-recovery/continue.py.txt +92 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/source-recovery/h02_support.py.txt +333 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/source-recovery/handoff.py.txt +179 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/source-recovery/provider.py.txt +67 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/source-recovery/run.py.txt +146 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/source-recovery/settled_provider_support.py.txt +108 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/sparse/run.py.txt +117 -0
- dry_lint-1.6.0/docs/research/historical-recovery/archive/sparse/validate.py.txt +46 -0
- dry_lint-1.6.0/docs/research/historical-recovery/config/balanced.json +79 -0
- dry_lint-1.6.0/docs/research/historical-recovery/config/half-name.json +22 -0
- dry_lint-1.6.0/docs/research/historical-recovery/config/native-recorded-contracts.json +48 -0
- dry_lint-1.6.0/docs/research/historical-recovery/config/native-replay.json +22 -0
- dry_lint-1.6.0/docs/research/historical-recovery/config/prompt-contract.json +10 -0
- dry_lint-1.6.0/docs/research/historical-recovery/expected.json +800 -0
- dry_lint-1.6.0/docs/research/historical-recovery/inputs/weight-projections.json +285 -0
- dry_lint-1.6.0/docs/research/historical-recovery/recordings/guarded-deltas.json +48 -0
- dry_lint-1.6.0/docs/research/historical-recovery/recordings/guarded-first-loss.json +85 -0
- dry_lint-1.6.0/docs/research/historical-recovery/recordings/guarded-physical.json +6 -0
- dry_lint-1.6.0/docs/research/historical-recovery/recordings/guarded.json +160 -0
- dry_lint-1.6.0/docs/research/historical-recovery/recordings/independent-review.json +51 -0
- dry_lint-1.6.0/docs/research/historical-recovery/recordings/native-first-loss.json +162 -0
- dry_lint-1.6.0/docs/research/historical-recovery/recordings/native.json +178 -0
- dry_lint-1.6.0/docs/research/historical-recovery/recordings/provenance.json +30 -0
- dry_lint-1.6.0/docs/research/historical-recovery/recordings/source-recovery.json +33 -0
- dry_lint-1.6.0/docs/research/historical-recovery/recordings/sparse.json +126 -0
- dry_lint-1.6.0/docs/research/historical-recovery/reproduce.py +183 -0
- dry_lint-1.6.0/docs/research/historical-recovery/validation.json +36 -0
- dry_lint-1.6.0/docs/research/linked-docs/.gitignore +2 -0
- dry_lint-1.6.0/docs/research/linked-docs/CHECKS.json +532 -0
- dry_lint-1.6.0/docs/research/linked-docs/CORPUS.json +838 -0
- dry_lint-1.6.0/docs/research/linked-docs/HANDOFF.json +15 -0
- dry_lint-1.6.0/docs/research/linked-docs/PR-body.md +20 -0
- dry_lint-1.6.0/docs/research/linked-docs/PR-title.txt +1 -0
- dry_lint-1.6.0/docs/research/linked-docs/PROVENANCE.json +65 -0
- dry_lint-1.6.0/docs/research/linked-docs/README.md +110 -0
- dry_lint-1.6.0/docs/research/linked-docs/SHA256SUMS +40 -0
- dry_lint-1.6.0/docs/research/linked-docs/acquire.py +22 -0
- dry_lint-1.6.0/docs/research/linked-docs/aggregate.py +24 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/evidence/PR110-AUDIT.json +1 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/evidence/README.md +65 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/evidence/metrics.json +1 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/evidence/portable-public-prior-phase-attribution.jsonl +12 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/evidence/portable-public-requests.jsonl +128 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/evidence/portable-source-review-v1.jsonl +7 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/feed-provenance.json +10 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/final-source-decisions.json +255 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/held-request-templates.json +1 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/implementation.json.gz +0 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/linked-window-inputs.json +1606 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/observations.jsonl +128 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/paired-records.json.gz +0 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/policy-admissions.jsonl +106 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/recorded-replay.json +242 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/selected-cases.json.gz +0 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/source-files.json.gz +0 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/source-manifest.json +3176 -0
- dry_lint-1.6.0/docs/research/linked-docs/data/source-pins.json +16 -0
- dry_lint-1.6.0/docs/research/linked-docs/hydrate.py +31 -0
- dry_lint-1.6.0/docs/research/linked-docs/implementation/README.md +1 -0
- dry_lint-1.6.0/docs/research/linked-docs/implementation/lab--funded-rounds--evaluate_round2.py.txt +50 -0
- dry_lint-1.6.0/docs/research/linked-docs/implementation/lab--linked_docs.py.txt +361 -0
- dry_lint-1.6.0/docs/research/linked-docs/licenses/BerriAI--litellm.txt +26 -0
- dry_lint-1.6.0/docs/research/linked-docs/licenses/OpenHands--software-agent-sdk.txt +21 -0
- dry_lint-1.6.0/docs/research/linked-docs/licenses/anomalyco--opencode.txt +21 -0
- dry_lint-1.6.0/docs/research/linked-docs/licenses/dry-lint.txt +202 -0
- dry_lint-1.6.0/docs/research/linked-docs/licenses/pingdotgg--t3code.txt +21 -0
- dry_lint-1.6.0/docs/research/linked-docs/reproduce.py +138 -0
- dry_lint-1.6.0/docs/research/linked-docs/transform.py +35 -0
- dry_lint-1.6.0/docs/research/model-function/DATA-CONTRACT.json +138 -0
- dry_lint-1.6.0/docs/research/model-function/HANDOFF.json +33 -0
- dry_lint-1.6.0/docs/research/model-function/PR-body.md +27 -0
- dry_lint-1.6.0/docs/research/model-function/PR-title.txt +1 -0
- dry_lint-1.6.0/docs/research/model-function/README.md +123 -0
- dry_lint-1.6.0/docs/research/model-function/SHA256SUMS +123 -0
- dry_lint-1.6.0/docs/research/model-function/VALIDATION.md +13 -0
- dry_lint-1.6.0/docs/research/model-function/algorithm.py +36 -0
- dry_lint-1.6.0/docs/research/model-function/backgrounds.py +37 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-41a0b0cb6b53/case.json +504 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-41a0b0cb6b53/claude-answer.json +51 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-41a0b0cb6b53/claude-request.txt +97 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-41a0b0cb6b53/jev-answer.json +25 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-41a0b0cb6b53/jev-request.txt +1 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-540f9bcdc2b2/case.json +629 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-540f9bcdc2b2/claude-answer.json +51 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-540f9bcdc2b2/claude-request.txt +104 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-540f9bcdc2b2/jev-answer.json +25 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-540f9bcdc2b2/jev-request.txt +1 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-7e77ae1ff789/case.json +401 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-7e77ae1ff789/claude-answer.json +51 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-7e77ae1ff789/claude-request.txt +108 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-7e77ae1ff789/jev-answer.json +25 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-7e77ae1ff789/jev-request.txt +1 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-857c073a93d2/case.json +477 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-857c073a93d2/claude-answer.json +51 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-857c073a93d2/claude-request.txt +146 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-857c073a93d2/jev-answer.json +25 -0
- dry_lint-1.6.0/docs/research/model-function/cases/MF-FC-857c073a93d2/jev-request.txt +1 -0
- dry_lint-1.6.0/docs/research/model-function/data/algorithm-input.json +667 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/LICENSE.txt +202 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/build_review_queue.py.txt +330 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/full-corpus-followup/export_novel_batch.py.txt +430 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/full-corpus-followup/model_gold_diagnostic.py.txt +49 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/full-corpus-followup/query_spans.py.txt +113 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/full-corpus-followup/replication_core.py.txt +861 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/full-corpus-followup/run_full_corpus.py.txt +469 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/full-corpus-followup/ts_ownership.py.txt +312 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/full-corpus-followup/validate_novel_batch.py.txt +159 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/funded-rounds/contract_operations.py.txt +127 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/funded-rounds/expand_round2.py.txt +121 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/funded-rounds/prepare_round.py.txt +432 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/funded-rounds/prepare_round2.py.txt +416 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/funded-rounds/prepare_round2_supplement.py.txt +424 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/funded-rounds/project_round1.py.txt +55 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/funded-rounds/project_round2_precision.py.txt +56 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/funded-rounds/project_round2_supplement.py.txt +56 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/funded-rounds/run_round2.py.txt +159 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/funded-rounds/seal_intake.py.txt +100 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/funded-rounds/seal_round2_intake.py.txt +102 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/funded-rounds/seal_round2_supplement.py.txt +110 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/pyproject.toml.txt +71 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/run_experiment.py.txt +860 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/__init__.py.txt +3 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/__main__.py.txt +5 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/action.py.txt +717 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/baseline.py.txt +370 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/bench.py.txt +274 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/bench_background.py.txt +88 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/cli.py.txt +1009 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/commits.py.txt +161 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/comparers.py.txt +62 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/comparison.py.txt +288 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/comparison_helpers.py.txt +85 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/costs.py.txt +152 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/detector.py.txt +354 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/discovery.py.txt +160 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/dryer.py.txt +96 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/evidence.py.txt +65 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/extractors.py.txt +81 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/feedback.py.txt +50 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/function_index.py.txt +203 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/functions.py.txt +386 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/git.py.txt +25 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/github.py.txt +11 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/index.py.txt +44 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/index_github.py.txt +183 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/judges/__init__.py.txt +30 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/judges/anthropic.py.txt +102 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/judges/command.py.txt +263 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/judges/gemini.py.txt +25 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/judges/http.py.txt +54 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/judges/jev.py.txt +224 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/judges/model_jev.py.txt +114 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/judges/subscription.py.txt +76 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/judging.py.txt +289 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/labelling.py.txt +402 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/ledger.py.txt +573 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/model_review.py.txt +123 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/model_shapes.py.txt +307 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/models.py.txt +270 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/plugins.py.txt +120 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/policies.py.txt +63 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/presets.py.txt +149 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/python_schemas.py.txt +113 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/ranking.py.txt +43 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/replay.py.txt +174 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/report.py.txt +848 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/schema_policy.py.txt +235 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/settings.py.txt +205 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/source_context.py.txt +69 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/sticky.py.txt +384 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/store.py.txt +228 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/src/dry_lint/typescript.py.txt +386 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/summarize_experiment.py.txt +127 -0
- dry_lint-1.6.0/docs/research/model-function/data/archived-code/uv.lock.txt +1106 -0
- dry_lint-1.6.0/docs/research/model-function/data/background-catalog-lookup.json +72 -0
- dry_lint-1.6.0/docs/research/model-function/data/expected-replay.json +168 -0
- dry_lint-1.6.0/docs/research/model-function/data/frozen-metrics.json +204 -0
- dry_lint-1.6.0/docs/research/model-function/data/metrics.json +53 -0
- dry_lint-1.6.0/docs/research/model-function/data/private-aggregates.json +1 -0
- dry_lint-1.6.0/docs/research/model-function/data/provenance.json +638 -0
- dry_lint-1.6.0/docs/research/model-function/data/recordings.json.gz +0 -0
- dry_lint-1.6.0/docs/research/model-function/data/selected-source-files.json.gz +0 -0
- dry_lint-1.6.0/docs/research/model-function/data/source-manifest.json +1186 -0
- dry_lint-1.6.0/docs/research/model-function/data/specifications.json +165 -0
- dry_lint-1.6.0/docs/research/model-function/hydrate.py +59 -0
- dry_lint-1.6.0/docs/research/model-function/licenses/BerriAI--litellm.txt +26 -0
- dry_lint-1.6.0/docs/research/model-function/licenses/OpenHands--software-agent-sdk.txt +21 -0
- dry_lint-1.6.0/docs/research/model-function/licenses/anomalyco--opencode.txt +21 -0
- dry_lint-1.6.0/docs/research/model-function/licenses/dry-lint-Apache-2.0.txt +202 -0
- dry_lint-1.6.0/docs/research/model-function/licenses/pingdotgg--t3code.txt +21 -0
- dry_lint-1.6.0/docs/research/model-function/replay.py +142 -0
- dry_lint-1.6.0/docs/research/model-function/verify.py +76 -0
- dry_lint-1.6.0/docs/research/operation-blocks/CASES.md +120 -0
- dry_lint-1.6.0/docs/research/operation-blocks/CORPUS.md +15 -0
- dry_lint-1.6.0/docs/research/operation-blocks/FULL-RERUN.json +45 -0
- dry_lint-1.6.0/docs/research/operation-blocks/HANDOFF.json +26 -0
- dry_lint-1.6.0/docs/research/operation-blocks/PR-body.md +22 -0
- dry_lint-1.6.0/docs/research/operation-blocks/PR-title.txt +1 -0
- dry_lint-1.6.0/docs/research/operation-blocks/README.md +103 -0
- dry_lint-1.6.0/docs/research/operation-blocks/REPRODUCTION.md +46 -0
- dry_lint-1.6.0/docs/research/operation-blocks/SHA256SUMS +128 -0
- dry_lint-1.6.0/docs/research/operation-blocks/VALIDATION.json +90 -0
- dry_lint-1.6.0/docs/research/operation-blocks/audit.py +43 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/background-acquisition.json +72 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/evidence/environment.json +24 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/evidence/full-corpus-followup/span-v2-migration/paired-summary.json +609 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/evidence/funded-rounds/round2/full-source-stage-summary.json +94 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/evidence/funded-rounds/round2/paired-selector-transitions.json +12 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/holds.json +9 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/metrics.json +224 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/README.md +17 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/EXPERIMENT.json.txt +78 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/commands.sh.txt +20 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/controls.py.txt +190 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/diagnostics.py.txt +232 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/environment.json.txt +24 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/explicit_policies.py.txt +85 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/finalize.py.txt +259 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/all_profile_intake.py.txt +119 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/audit_proposals.py.txt +102 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/audit_spans.py.txt +92 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/commands.sh.txt +25 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/consume_shared_spans.py.txt +89 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/coordinate_audit.py.txt +216 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/derive_v2.py.txt +177 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/finish.py.txt +160 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/intake_outcomes.py.txt +214 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/migrate.py.txt +302 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/optimized_blocks.py.txt +74 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/prepare.py.txt +77 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/queue.py.txt +312 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/run.py.txt +559 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/span-v2-migration/commands.sh.txt +12 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/span-v2-migration/shared_resolver_v1.py.txt +248 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/summarize.py.txt +490 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/full-corpus-followup/validate.py.txt +90 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/funded-rounds/finalize_evidence.py.txt +28 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/funded-rounds/round1/concept-topup-v1/prepare.py.txt +89 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/funded-rounds/round1/outcomes-v1/join.py.txt +79 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/funded-rounds/round1/prepare.py.txt +320 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/funded-rounds/round2/PREREGISTRATION.json.txt +24 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/funded-rounds/round2/default3-rejection-audit-v1/prepare.py.txt +92 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/funded-rounds/round2/full_source_audit.py.txt +47 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/funded-rounds/round2/prepare.py.txt +123 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/funded-rounds/round2/prepare_rejection_audit.py.txt +103 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/funded-rounds/round2/residual_blocks.py.txt +62 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/funded-rounds/verify_report.py.txt +82 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/handoff.py.txt +263 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/observations.py.txt +118 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/operation_blocks.py.txt +702 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/operation_blocks_capture_v1.py.txt +484 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/promotion/commands.sh.txt +16 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/promotion/compare_frozen.py.txt +226 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/prompt_cost_compatibility.py.txt +157 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/lab/validate.py.txt +158 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/pyproject.toml.txt +71 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/__init__.py.txt +3 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/__main__.py.txt +5 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/action.py.txt +717 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/baseline.py.txt +370 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/bench.py.txt +274 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/bench_background.py.txt +88 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/cli.py.txt +1009 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/commits.py.txt +161 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/comparers.py.txt +62 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/comparison.py.txt +288 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/comparison_helpers.py.txt +85 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/costs.py.txt +152 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/detector.py.txt +363 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/discovery.py.txt +160 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/dryer.py.txt +96 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/evidence.py.txt +65 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/extractors.py.txt +81 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/feedback.py.txt +50 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/function_index.py.txt +203 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/functions.py.txt +386 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/git.py.txt +25 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/github.py.txt +11 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/index.py.txt +44 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/index_github.py.txt +183 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/judges/__init__.py.txt +30 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/judges/anthropic.py.txt +102 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/judges/command.py.txt +263 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/judges/gemini.py.txt +25 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/judges/http.py.txt +54 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/judges/jev.py.txt +224 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/judges/model_jev.py.txt +114 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/judges/subscription.py.txt +76 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/judging.py.txt +289 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/labelling.py.txt +402 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/ledger.py.txt +573 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/model_review.py.txt +123 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/model_shapes.py.txt +307 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/models.py.txt +270 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/operation_blocks.py.txt +242 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/plugins.py.txt +121 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/policies.py.txt +63 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/presets.py.txt +149 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/python_schemas.py.txt +113 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/ranking.py.txt +43 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/replay.py.txt +174 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/report.py.txt +848 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/schema_policy.py.txt +235 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/settings.py.txt +205 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/source_context.py.txt +69 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/sticky.py.txt +384 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/store.py.txt +228 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/src/dry_lint/typescript.py.txt +386 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/original/product/uv.lock.txt +1106 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/paired-round2.json +1307 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/provenance.json +728 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/recordings.json +1485 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/selected-original-regions.json +1492 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/source-files.json.gz +0 -0
- dry_lint-1.6.0/docs/research/operation-blocks/data/source-pins.json +9 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/README.md +65 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/LICENSE-litellm +26 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/LICENSE-runtime +202 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/LICENSE-software-agent-sdk +21 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/MANIFEST.json +22 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/README.md +51 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/input-provenance.json +1082 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/jev-truncation.json +130 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/native-deltas.json +1058 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/native-snapshots.zip +0 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/recordings.json.gz +0 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/reproduce.py +367 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/requirements.txt +2 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/runtime.zip +0 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/selected-cases.json +938 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/summary.json +63 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/test_reproduce.py +54 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/tests.txt +2 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/balanced/verification.txt +64 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/performance/README.md +42 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/performance/SAFETY-ARGUMENT.txt +10 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/performance/bench.py +161 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/performance/inputs.json +87 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/performance/metrics.json +973 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/performance/novel_edits.py +105 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/performance/origin.json +9 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/performance/parity.py +305 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/production-evidence.json +378 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/production-parity-runtime.md +57 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/HANDOFF.json +27 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/MANIFEST.json +619 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/NATIVE-RERUN.md +41 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/README.md +47 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/TABLES.md +59 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/build_package.py +313 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/data/blocks-regression.jsonl +115 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/data/contexts.jsonl +14 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/data/cpu-regression.jsonl +115 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/data/labels.jsonl +75 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/expected/direction-table.jsonl +348 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/expected/floor-samefile.csv +23 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/expected/floor-samefile.jsonl +22 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/expected/regression-table.csv +45 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/expected/regression-table.jsonl +44 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/expected/stage-counts.jsonl +132 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/blocks.py +234 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/checks.py +119 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/common.py +66 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/cpu.py +247 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/final_check.py +66 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/freeze_inputs.py +50 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/__init__.py +3 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/__main__.py +5 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/action.py +717 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/baseline.py +370 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/bench.py +274 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/bench_background.py +88 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/cli.py +1009 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/commits.py +161 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/comparers.py +62 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/comparison.py +288 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/comparison_helpers.py +85 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/costs.py +152 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/cpu_embedding.py +243 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/detector.py +367 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/discovery.py +160 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/dryer.py +96 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/evidence.py +65 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/extractors.py +81 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/feedback.py +50 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/function_index.py +203 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/functions.py +386 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/git.py +25 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/github.py +11 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/index.py +44 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/index_github.py +183 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/judges/__init__.py +30 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/judges/anthropic.py +102 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/judges/command.py +263 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/judges/gemini.py +25 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/judges/http.py +54 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/judges/jev.py +224 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/judges/model_jev.py +114 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/judges/subscription.py +76 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/judging.py +289 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/labelling.py +402 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/ledger.py +573 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/model_review.py +123 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/model_shapes.py +307 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/models.py +270 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/operation_blocks.py +242 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/plugins.py +122 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/policies.py +63 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/presets.py +149 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/python_schemas.py +113 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/ranking.py +43 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/replay.py +174 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/report.py +848 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/schema_policy.py +235 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/settings.py +205 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/source_context.py +69 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/sticky.py +384 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/store.py +228 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/frozen-pr109/src/dry_lint/typescript.py +386 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/harness.py +146 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/helper_fallback_v1.py +109 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/materialize.py +204 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/reproduce.sh +11 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/run-python +7 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/summarize.py +329 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/trace.py +20 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/verify_contract.py +23 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/harness/views.py +64 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/historical-output-snapshot.json +4860 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/licenses/dry-lint-LICENSE.txt +202 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/licenses/provenance.json +34 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/licenses/pytest-obligation-389c5bb8-LICENSE.txt +202 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/licenses/pytest-obligation-d39f77ea-LICENSE.txt +202 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/licenses/pytest-selective-ae130637-LICENSE.txt +202 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/native_rerun.py +110 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/provenance/checks.json +14 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/provenance/cpu-contract-check.json +91 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/provenance/cpu-replay-parity.json +5 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/provenance/dependencies.json +16 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/provenance/export.json +111 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/provenance/final-check.json +27 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/provenance/frozen-source-manifest.json +343 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/provenance/input-proofs.json +88 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/provenance/policies.json +75 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/provenance/runtime-summary.json +6 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/replay.py +248 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/test_replay.py +87 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/validation/historical-immutability.json +7 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/validation/lint-final.txt +1 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/validation/native-preflight.txt +1 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/validation/replay-tests.json +16 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/verify.py +46 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/manifest.json +116 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/pytest-obligation/389c5bb8/1034-function.txt +4 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/pytest-obligation/389c5bb8/1622-function.txt +13 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/pytest-obligation/389c5bb8/969-function.txt +2 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/pytest-obligation/389c5bb8/package/src/pytest_obligation/integrations/mongodb.py +208 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/pytest-obligation/389c5bb8/package/src/pytest_obligation/integrations/redis.py +212 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/pytest-obligation/389c5bb8/package/src/pytest_obligation/worker_death.py +93 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/pytest-obligation/d39f77ea/1037-function.txt +10 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/pytest-obligation/d39f77ea/971-function.txt +8 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/pytest-obligation/d39f77ea/package/src/pytest_obligation/integrations/mongodb.py +213 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/pytest-obligation/d39f77ea/package/src/pytest_obligation/integrations/redis.py +217 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/pytest-selective/ae130637/237-function.txt +14 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/pytest-selective/ae130637/271-function.txt +34 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/pytest-selective/ae130637/src/pytest_selective/pytest_expansion.py +535 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/public-extension/worked-cases/pytest-selective/ae130637/src/pytest_selective/working_tree.py +43 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/LiteLLM-LICENSE.txt +26 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/OpenHands-LICENSE.txt +21 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/README.md +46 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/SHA256SUMS.json +23 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/admissions.jsonl.gz +0 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/answers.jsonl.gz +0 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/baseline_operation_blocks.py +242 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/cases.jsonl.gz +0 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/concept-prompt.txt +22 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/configuration.json +37 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/dry-lint-LICENSE.txt +202 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/helper_fallback_v1.py +109 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/input-audit.json +357 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/questions.jsonl.gz +0 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/recipe.json +23 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/replay-result.json +41 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/replay.py +148 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/retrieval-recordings.jsonl.gz +0 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/shared-operations-prompt.txt +46 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/source-decisions.jsonl.gz +0 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/test_replay_policy.py +25 -0
- dry_lint-1.6.0/docs/research/operation-blocks/helper-recovery/r1/verify_hashes.py +8 -0
- dry_lint-1.6.0/docs/research/operation-blocks/hydrate.py +37 -0
- dry_lint-1.6.0/docs/research/operation-blocks/licenses/BerriAI--litellm.txt +26 -0
- dry_lint-1.6.0/docs/research/operation-blocks/licenses/dry-lint.txt +202 -0
- dry_lint-1.6.0/docs/research/operation-blocks/materialize.py +21 -0
- dry_lint-1.6.0/docs/research/operation-blocks/native.py +36 -0
- dry_lint-1.6.0/docs/research/operation-blocks/reproduce.py +186 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/DATA-CONTRACT.json +74 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/HANDOFF.json +32 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/PR-body.md +24 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/PR-title.txt +1 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/README.md +113 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/SHA256SUMS +132 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/VALIDATION.md +11 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/algorithm.py +36 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/backgrounds.py +37 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/ENS-L2002/case.json +323 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/ENS-L2002/claude-answer.json +51 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/ENS-L2002/claude-request.txt +214 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/ENS-L2002/jev-answer.json +25 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/ENS-L2002/jev-request.txt +1 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/SE-R2-001/case.json +391 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/SE-R2-001/claude-answer.json +51 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/SE-R2-001/claude-request.txt +138 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/SE-R2-001/jev-answer.json +25 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/SE-R2-001/jev-request.txt +1 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/SE-R2-016/case.json +386 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/SE-R2-016/claude-answer.json +51 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/SE-R2-016/claude-request.txt +156 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/SE-R2-016/jev-answer.json +25 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/cases/SE-R2-016/jev-request.txt +1 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/algorithm-input.json +198 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/LICENSE.txt +202 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/experiment.py.txt +731 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/full-corpus/resolver.py.txt +243 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/full-corpus/run.py.txt +892 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/funded-rounds/round1/build_canonical_plans.py.txt +41 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/funded-rounds/round1/prepare.py.txt +168 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/funded-rounds/round1/validate_active.py.txt +62 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/funded-rounds/round2/build_canonical_plans.py.txt +41 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/funded-rounds/round2/gold_regression.py.txt +97 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/funded-rounds/round2/operation_gate.py.txt +13 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/funded-rounds/round2/prepare.py.txt +187 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/funded-rounds/round2/validate_active.py.txt +62 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/learned-ensemble-v1/audit_fixed.py.txt +26 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/learned-ensemble-v1/complementarity_receipt.py.txt +41 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/learned-ensemble-v1/evaluate.py.txt +80 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/learned-ensemble-v1/finalize.py.txt +36 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/learned-ensemble-v1/fit_oof.py.txt +67 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/learned-ensemble-v1/prepare_features.py.txt +147 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/learned-ensemble-v1/summarize.py.txt +59 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/learned-ensemble-v1/verify.py.txt +43 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/make_queue.py.txt +214 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/promotion-combination/native-order-v2/answers_and_intake.py.txt +71 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/promotion-combination/native-order-v2/run.py.txt +176 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/promotion-combination/product_selection.py.txt +45 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/promotion-combination/reconcile_block1.py.txt +59 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/promotion-combination/run.py.txt +156 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/pyproject.toml.txt +71 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/register.py.txt +115 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/span-resolution-original-run.py.txt +909 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/__init__.py.txt +3 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/__main__.py.txt +5 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/action.py.txt +717 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/baseline.py.txt +370 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/bench.py.txt +274 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/bench_background.py.txt +88 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/cli.py.txt +1009 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/commits.py.txt +161 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/comparers.py.txt +62 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/comparison.py.txt +288 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/comparison_helpers.py.txt +85 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/costs.py.txt +152 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/detector.py.txt +354 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/discovery.py.txt +160 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/dryer.py.txt +96 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/evidence.py.txt +65 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/extractors.py.txt +81 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/feedback.py.txt +50 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/function_index.py.txt +203 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/functions.py.txt +386 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/git.py.txt +25 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/github.py.txt +11 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/index.py.txt +44 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/index_github.py.txt +183 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/judges/__init__.py.txt +30 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/judges/anthropic.py.txt +102 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/judges/command.py.txt +263 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/judges/gemini.py.txt +25 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/judges/http.py.txt +54 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/judges/jev.py.txt +224 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/judges/model_jev.py.txt +114 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/judges/subscription.py.txt +76 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/judging.py.txt +289 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/labelling.py.txt +402 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/ledger.py.txt +573 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/model_review.py.txt +123 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/model_shapes.py.txt +307 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/models.py.txt +270 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/plugins.py.txt +120 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/policies.py.txt +63 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/presets.py.txt +149 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/python_schemas.py.txt +113 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/ranking.py.txt +43 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/replay.py.txt +174 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/report.py.txt +848 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/schema_policy.py.txt +235 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/settings.py.txt +205 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/source_context.py.txt +69 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/sticky.py.txt +384 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/store.py.txt +228 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/src/dry_lint/typescript.py.txt +386 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/archived-code/uv.lock.txt +1106 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/background-catalog-lookup.json +72 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/block-cap-comparison-rows.jsonl.gz +0 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/block-cap-comparison.json +149 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/expected-replay.json +121 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/learned-comparison.json +176 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/matched-regression-rows.jsonl.gz +0 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/metrics.json +128 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/private-aggregates.json +8 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/provenance.json +725 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/recommended-config.json +36 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/recordings.json.gz +0 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/regression-scope-rows.jsonl.gz +0 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/reviewed-writeback-case.json +14 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/runtime.json +102 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/selected-source-files.json.gz +0 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/source-manifest.json +842 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/specifications.json +474 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/static-publication-boundary.json +149 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/data/supported-regression.json +113 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/hydrate.py +59 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/licenses/BerriAI--litellm.txt +26 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/licenses/OpenHands--software-agent-sdk.txt +21 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/licenses/anomalyco--opencode.txt +21 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/licenses/dry-lint-Apache-2.0.txt +202 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/licenses/pingdotgg--t3code.txt +21 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/raw-rank-followup/README.md +42 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/raw-rank-followup/audit-summary.json +59 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/replay.py +142 -0
- dry_lint-1.6.0/docs/research/signal-ensemble/verify.py +76 -0
- dry_lint-1.6.0/docs/research/token-hygiene/.gitignore +2 -0
- dry_lint-1.6.0/docs/research/token-hygiene/CHECKS.json +215 -0
- dry_lint-1.6.0/docs/research/token-hygiene/CORPUS.json +838 -0
- dry_lint-1.6.0/docs/research/token-hygiene/HANDOFF.json +15 -0
- dry_lint-1.6.0/docs/research/token-hygiene/PR-body.md +20 -0
- dry_lint-1.6.0/docs/research/token-hygiene/PR-title.txt +1 -0
- dry_lint-1.6.0/docs/research/token-hygiene/PROVENANCE.json +86 -0
- dry_lint-1.6.0/docs/research/token-hygiene/README.md +73 -0
- dry_lint-1.6.0/docs/research/token-hygiene/SHA256SUMS +41 -0
- dry_lint-1.6.0/docs/research/token-hygiene/acquire.py +22 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/evidence/DECISION.md +3 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/evidence/MANIFEST.json +69 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/evidence/README.md +35 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/evidence/default-four-losses.jsonl +4 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/evidence/metrics.json +1 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/evidence/novel-outcomes.jsonl +96 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/evidence/paired-rows.jsonl.gz +0 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/evidence/source-outcomes.jsonl +2 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/evidence/verify_evidence.py +44 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/feed-provenance.json +10 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/final-source-decisions.json +34 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/held-request-templates.json +6032 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/implementation.json.gz +0 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/observations.jsonl +192 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/policy-admissions.jsonl +96 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/recorded-replay.json +140 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/selected-cases.json.gz +0 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/source-files.json.gz +0 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/source-manifest.json +4667 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/source-pins.json +36 -0
- dry_lint-1.6.0/docs/research/token-hygiene/data/transform-inputs.json +351 -0
- dry_lint-1.6.0/docs/research/token-hygiene/hydrate.py +31 -0
- dry_lint-1.6.0/docs/research/token-hygiene/implementation/README.md +1 -0
- dry_lint-1.6.0/docs/research/token-hygiene/implementation/lab--funded-rounds--round2--evaluate.py.txt +134 -0
- dry_lint-1.6.0/docs/research/token-hygiene/implementation/lab--token-hygiene--experiment.py.txt +515 -0
- dry_lint-1.6.0/docs/research/token-hygiene/licenses/BerriAI--litellm.txt +26 -0
- dry_lint-1.6.0/docs/research/token-hygiene/licenses/OpenHands--software-agent-sdk.txt +21 -0
- dry_lint-1.6.0/docs/research/token-hygiene/licenses/anomalyco--opencode.txt +21 -0
- dry_lint-1.6.0/docs/research/token-hygiene/licenses/dry-lint.txt +202 -0
- dry_lint-1.6.0/docs/research/token-hygiene/licenses/pingdotgg--t3code.txt +21 -0
- dry_lint-1.6.0/docs/research/token-hygiene/reproduce.py +133 -0
- dry_lint-1.6.0/docs/research/token-hygiene/transform.py +47 -0
- dry_lint-1.6.0/docs/research/vector-expansion/.gitignore +2 -0
- dry_lint-1.6.0/docs/research/vector-expansion/CHECKS.json +354 -0
- dry_lint-1.6.0/docs/research/vector-expansion/CORPUS.json +838 -0
- dry_lint-1.6.0/docs/research/vector-expansion/HANDOFF.json +15 -0
- dry_lint-1.6.0/docs/research/vector-expansion/PR-body.md +20 -0
- dry_lint-1.6.0/docs/research/vector-expansion/PR-title.txt +1 -0
- dry_lint-1.6.0/docs/research/vector-expansion/PROVENANCE.json +51 -0
- dry_lint-1.6.0/docs/research/vector-expansion/README.md +101 -0
- dry_lint-1.6.0/docs/research/vector-expansion/SHA256SUMS +40 -0
- dry_lint-1.6.0/docs/research/vector-expansion/acquire.py +22 -0
- dry_lint-1.6.0/docs/research/vector-expansion/aggregate.py +16 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/evidence/CLAIM-EVIDENCE.json +30 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/evidence/DECISION.md +46 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/evidence/FINAL-METRICS.json +1 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/evidence/SOURCE-D-RECEIPT.json +229 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/feed-provenance.json +15 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/final-source-decisions.json +600 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/held-request-templates.json +1 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/implementation.json.gz +0 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/observations.jsonl +254 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/paired-records.json.gz +0 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/policy-admissions.jsonl +128 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/recorded-replay.json +168 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/selected-cases.json.gz +0 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/source-files.json.gz +0 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/source-manifest.json +5336 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/source-pins.json +16 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/supplemental-observations.jsonl +12 -0
- dry_lint-1.6.0/docs/research/vector-expansion/data/transform-inputs.json +926 -0
- dry_lint-1.6.0/docs/research/vector-expansion/hydrate.py +31 -0
- dry_lint-1.6.0/docs/research/vector-expansion/implementation/README.md +1 -0
- dry_lint-1.6.0/docs/research/vector-expansion/implementation/lab--full-corpus--vector_engine.py.txt +103 -0
- dry_lint-1.6.0/docs/research/vector-expansion/implementation/lab--funded-rounds--round2--source_pmi.py.txt +83 -0
- dry_lint-1.6.0/docs/research/vector-expansion/licenses/BerriAI--litellm.txt +26 -0
- dry_lint-1.6.0/docs/research/vector-expansion/licenses/OpenHands--software-agent-sdk.txt +21 -0
- dry_lint-1.6.0/docs/research/vector-expansion/licenses/anomalyco--opencode.txt +21 -0
- dry_lint-1.6.0/docs/research/vector-expansion/licenses/dry-lint.txt +202 -0
- dry_lint-1.6.0/docs/research/vector-expansion/licenses/pingdotgg--t3code.txt +21 -0
- dry_lint-1.6.0/docs/research/vector-expansion/reproduce.py +139 -0
- dry_lint-1.6.0/docs/research/vector-expansion/run_original.py +38 -0
- dry_lint-1.6.0/docs/research/vector-expansion/transform.py +54 -0
- dry_lint-1.6.0/docs/research-plan.md +171 -0
- dry_lint-1.6.0/docs/research-results.md +24 -0
- dry_lint-1.6.0/docs/retrieval-presets.md +162 -0
- dry_lint-1.6.0/docs/semantic-signal-trial.md +131 -0
- dry_lint-1.6.0/docs/sweeps.md +153 -0
- dry_lint-1.6.0/docs/tfidf-enrichment-research.md +561 -0
- dry_lint-1.6.0/docs/typescript.md +100 -0
- dry_lint-1.6.0/docs/work-in-progress/tickets/codex-agent-feedback-judging-test-plan.md +27 -0
- dry_lint-1.6.0/docs/work-in-progress/tickets/codex-budgeted-discovery-test-plan.md +29 -0
- dry_lint-1.6.0/docs/work-in-progress/tickets/codex-consolidation-context-test-plan.md +28 -0
- dry_lint-1.6.0/docs/work-in-progress/tickets/codex-coverage-exploration-test-plan.md +22 -0
- dry_lint-1.6.0/docs/work-in-progress/tickets/codex-model-policy-discovery-test-plan.md +61 -0
- dry_lint-1.6.0/docs/work-in-progress/tickets/codex-production-discovery-test-plan.md +17 -0
- dry_lint-1.6.0/docs/work-in-progress/tickets/codex-protected-shared-operations-test-plan.md +24 -0
- dry_lint-1.6.0/docs/work-in-progress/tickets/codex-versioned-function-index-test-plan.md +12 -0
- dry_lint-1.6.0/docs/work-in-progress/tickets/language-adapters-test-plan.md +38 -0
- dry_lint-1.6.0/docs/work-in-progress/tickets/shallow-single-sticky-test-plan.md +15 -0
- dry_lint-1.6.0/docs/work-in-progress/tickets/sticky-comparison-test-plan.md +8 -0
- dry_lint-1.6.0/docs/workspaces.md +148 -0
- dry_lint-1.6.0/examples/backgrounds/due/33857688849a481a794b46295f4080dca853cc0f.json.gz +0 -0
- dry_lint-1.6.0/examples/backgrounds/due/6a68131774a25b6a7b6a192ca578be9b7ab5e1d4.json.gz +0 -0
- dry_lint-1.6.0/examples/backgrounds/due/701d2167dc7ca192bfd2c9c5e98e1c377a5f23a0.json.gz +0 -0
- dry_lint-1.6.0/examples/backgrounds/due/8d4d100b3a9ffb2ef259931508f0ccde87a968dd.json.gz +0 -0
- dry_lint-1.6.0/examples/backgrounds/due/d45977a85f1804d8c6cbc3b35d02fd61438f7531.json.gz +0 -0
- dry_lint-1.6.0/examples/backgrounds/due/manifest.json +95 -0
- dry_lint-1.6.0/examples/backgrounds/pytest-obligation/389c5bb84f7ab186fa9c7815c2e15cb9332b67a4.json.gz +0 -0
- dry_lint-1.6.0/examples/backgrounds/pytest-obligation/d39f77ea343a25bf0a065376ea7a50ed38c7b2f6.json.gz +0 -0
- dry_lint-1.6.0/examples/backgrounds/pytest-obligation/manifest.json +233 -0
- dry_lint-1.6.0/examples/backgrounds/pytest-selective/4ab22f35385bb0e3225cf9d40877b559d45c23dc.json.gz +0 -0
- dry_lint-1.6.0/examples/backgrounds/pytest-selective/ae1306377dda82d1d0a6fa0b43dbb612d69d72b2.json.gz +0 -0
- dry_lint-1.6.0/examples/backgrounds/pytest-selective/manifest.json +197 -0
- dry_lint-1.6.0/examples/comment-report.json +94 -0
- dry_lint-1.6.0/examples/dry-lint-audit.yml +117 -0
- dry_lint-1.6.0/examples/dry-lint-judge.yml +26 -0
- dry_lint-1.6.0/examples/dry-lint.yml +39 -0
- dry_lint-1.6.0/examples/due-consolidation-gold.toml +755 -0
- dry_lint-1.6.0/examples/fake_judge.py +11 -0
- dry_lint-1.6.0/examples/gold.toml +891 -0
- dry_lint-1.6.0/examples/pre-commit-config.yaml +15 -0
- dry_lint-1.6.0/examples/pytest-obligation-gold.toml +574 -0
- dry_lint-1.6.0/examples/pytest-selective-gold.toml +481 -0
- dry_lint-1.6.0/examples/research/budget-family-proof/LITELLM-LICENSE +26 -0
- dry_lint-1.6.0/examples/research/budget-family-proof/README.md +174 -0
- dry_lint-1.6.0/examples/research/budget-family-proof/detect.py +80 -0
- dry_lint-1.6.0/examples/research/budget-family-proof/extraction.patch +252 -0
- dry_lint-1.6.0/examples/research/budget-family-proof/family-tfidf-diagnostic.py +114 -0
- dry_lint-1.6.0/examples/research/budget-family-proof/reproduce.py +53 -0
- dry_lint-1.6.0/examples/research/budget-family-proof/study.py +442 -0
- dry_lint-1.6.0/examples/research/budget-family-proof/test_equivalence.py +547 -0
- dry_lint-1.6.0/examples/research/grounded-operation-claims/README.md +117 -0
- dry_lint-1.6.0/examples/research/grounded-operation-claims/policy.py +82 -0
- dry_lint-1.6.0/examples/research/grounded-operation-claims/reproduce.py +302 -0
- dry_lint-1.6.0/examples/research/residual-budget/README.md +181 -0
- dry_lint-1.6.0/examples/research/residual-budget/recorded_judge.py +202 -0
- dry_lint-1.6.0/examples/research/residual-budget/replay_frozen.py +148 -0
- dry_lint-1.6.0/examples/research/residual-budget/test_portable.py +46 -0
- dry_lint-1.6.0/examples/residual-discovery.toml +13 -0
- dry_lint-1.6.0/pyproject.toml +74 -0
- dry_lint-1.6.0/scripts/audit_history.py +69 -0
- dry_lint-1.6.0/scripts/audit_judging.py +128 -0
- dry_lint-1.6.0/scripts/benchmark_channel_trial.py +228 -0
- dry_lint-1.6.0/scripts/benchmark_semantic_signals.py +104 -0
- dry_lint-1.6.0/scripts/capture_history.py +130 -0
- dry_lint-1.6.0/scripts/channel_trial.py +209 -0
- dry_lint-1.6.0/scripts/compare_detectors.py +141 -0
- dry_lint-1.6.0/scripts/compare_history.py +173 -0
- dry_lint-1.6.0/scripts/freeze_bench_background.py +35 -0
- dry_lint-1.6.0/scripts/install-action.sh +23 -0
- dry_lint-1.6.0/scripts/judge_history.py +492 -0
- dry_lint-1.6.0/scripts/make_assets.py +172 -0
- dry_lint-1.6.0/scripts/model_judge_probe.py +89 -0
- dry_lint-1.6.0/scripts/model_probe.py +71 -0
- dry_lint-1.6.0/scripts/model_retrieval_trial.py +155 -0
- dry_lint-1.6.0/scripts/probe_context.py +130 -0
- dry_lint-1.6.0/scripts/probe_coverage.py +156 -0
- dry_lint-1.6.0/scripts/render_png.py +29 -0
- dry_lint-1.6.0/scripts/replay_coverage.py +237 -0
- dry_lint-1.6.0/scripts/replay_presets.py +685 -0
- dry_lint-1.6.0/scripts/replay_production.py +170 -0
- dry_lint-1.6.0/scripts/research_mining/README.md +140 -0
- dry_lint-1.6.0/scripts/research_mining/__init__.py +1 -0
- dry_lint-1.6.0/scripts/research_mining/__main__.py +66 -0
- dry_lint-1.6.0/scripts/research_mining/audit.py +179 -0
- dry_lint-1.6.0/scripts/research_mining/demo.py +116 -0
- dry_lint-1.6.0/scripts/research_mining/exact_cache.py +125 -0
- dry_lint-1.6.0/scripts/research_mining/source.py +83 -0
- dry_lint-1.6.0/scripts/score_comparison.py +79 -0
- dry_lint-1.6.0/scripts/score_history.py +175 -0
- dry_lint-1.6.0/scripts/semantic_signals.py +212 -0
- dry_lint-1.6.0/scripts/test_action_install.py +98 -0
- dry_lint-1.6.0/src/dry_lint/__init__.py +3 -0
- dry_lint-1.6.0/src/dry_lint/__main__.py +5 -0
- dry_lint-1.6.0/src/dry_lint/action.py +717 -0
- dry_lint-1.6.0/src/dry_lint/baseline.py +370 -0
- dry_lint-1.6.0/src/dry_lint/bench.py +274 -0
- dry_lint-1.6.0/src/dry_lint/bench_background.py +88 -0
- dry_lint-1.6.0/src/dry_lint/cli.py +1009 -0
- dry_lint-1.6.0/src/dry_lint/commits.py +161 -0
- dry_lint-1.6.0/src/dry_lint/comparer_resources.py +31 -0
- dry_lint-1.6.0/src/dry_lint/comparers.py +66 -0
- dry_lint-1.6.0/src/dry_lint/comparison.py +288 -0
- dry_lint-1.6.0/src/dry_lint/comparison_helpers.py +85 -0
- dry_lint-1.6.0/src/dry_lint/costs.py +152 -0
- dry_lint-1.6.0/src/dry_lint/cpu_embedding.py +278 -0
- dry_lint-1.6.0/src/dry_lint/cpu_tail.py +163 -0
- dry_lint-1.6.0/src/dry_lint/detector.py +387 -0
- dry_lint-1.6.0/src/dry_lint/discovery.py +173 -0
- dry_lint-1.6.0/src/dry_lint/dryer.py +103 -0
- dry_lint-1.6.0/src/dry_lint/evidence.py +65 -0
- dry_lint-1.6.0/src/dry_lint/extractors.py +126 -0
- dry_lint-1.6.0/src/dry_lint/feedback.py +50 -0
- dry_lint-1.6.0/src/dry_lint/function_index.py +203 -0
- dry_lint-1.6.0/src/dry_lint/functions.py +386 -0
- dry_lint-1.6.0/src/dry_lint/git.py +25 -0
- dry_lint-1.6.0/src/dry_lint/github.py +11 -0
- dry_lint-1.6.0/src/dry_lint/index.py +44 -0
- dry_lint-1.6.0/src/dry_lint/index_github.py +183 -0
- dry_lint-1.6.0/src/dry_lint/judges/__init__.py +30 -0
- dry_lint-1.6.0/src/dry_lint/judges/anthropic.py +102 -0
- dry_lint-1.6.0/src/dry_lint/judges/command.py +263 -0
- dry_lint-1.6.0/src/dry_lint/judges/gemini.py +25 -0
- dry_lint-1.6.0/src/dry_lint/judges/http.py +54 -0
- dry_lint-1.6.0/src/dry_lint/judges/jev.py +224 -0
- dry_lint-1.6.0/src/dry_lint/judges/model_jev.py +114 -0
- dry_lint-1.6.0/src/dry_lint/judges/subscription.py +76 -0
- dry_lint-1.6.0/src/dry_lint/judging.py +324 -0
- dry_lint-1.6.0/src/dry_lint/labelling.py +402 -0
- dry_lint-1.6.0/src/dry_lint/ledger.py +573 -0
- dry_lint-1.6.0/src/dry_lint/model_review.py +123 -0
- dry_lint-1.6.0/src/dry_lint/model_shapes.py +307 -0
- dry_lint-1.6.0/src/dry_lint/models.py +287 -0
- dry_lint-1.6.0/src/dry_lint/operation_blocks.py +428 -0
- dry_lint-1.6.0/src/dry_lint/plugins.py +123 -0
- dry_lint-1.6.0/src/dry_lint/policies.py +63 -0
- dry_lint-1.6.0/src/dry_lint/presets.py +176 -0
- dry_lint-1.6.0/src/dry_lint/python_schemas.py +113 -0
- dry_lint-1.6.0/src/dry_lint/ranking.py +43 -0
- dry_lint-1.6.0/src/dry_lint/replay.py +174 -0
- dry_lint-1.6.0/src/dry_lint/report.py +848 -0
- dry_lint-1.6.0/src/dry_lint/schema_policy.py +235 -0
- dry_lint-1.6.0/src/dry_lint/settings.py +240 -0
- dry_lint-1.6.0/src/dry_lint/source_context.py +69 -0
- dry_lint-1.6.0/src/dry_lint/statement_views.py +114 -0
- dry_lint-1.6.0/src/dry_lint/sticky.py +384 -0
- dry_lint-1.6.0/src/dry_lint/store.py +228 -0
- dry_lint-1.6.0/src/dry_lint/typescript.py +395 -0
- dry_lint-1.6.0/tests/conftest.py +261 -0
- dry_lint-1.6.0/tests/test_action.py +1406 -0
- dry_lint-1.6.0/tests/test_action_install.py +25 -0
- dry_lint-1.6.0/tests/test_action_sticky.py +502 -0
- dry_lint-1.6.0/tests/test_adopter_keys.py +80 -0
- dry_lint-1.6.0/tests/test_adopter_policies.py +154 -0
- dry_lint-1.6.0/tests/test_audit_judging.py +95 -0
- dry_lint-1.6.0/tests/test_bench.py +245 -0
- dry_lint-1.6.0/tests/test_bench_background.py +93 -0
- dry_lint-1.6.0/tests/test_cascade_history.py +125 -0
- dry_lint-1.6.0/tests/test_channel_trial.py +283 -0
- dry_lint-1.6.0/tests/test_cleanup_gold.py +72 -0
- dry_lint-1.6.0/tests/test_cli.py +523 -0
- dry_lint-1.6.0/tests/test_commits.py +97 -0
- dry_lint-1.6.0/tests/test_comparer_resources.py +216 -0
- dry_lint-1.6.0/tests/test_comparers.py +60 -0
- dry_lint-1.6.0/tests/test_comparison.py +386 -0
- dry_lint-1.6.0/tests/test_comparison_helpers.py +81 -0
- dry_lint-1.6.0/tests/test_consolidation.py +255 -0
- dry_lint-1.6.0/tests/test_costs.py +137 -0
- dry_lint-1.6.0/tests/test_coverage_replay.py +283 -0
- dry_lint-1.6.0/tests/test_cpu_embedding.py +320 -0
- dry_lint-1.6.0/tests/test_cpu_recovery.py +66 -0
- dry_lint-1.6.0/tests/test_cpu_tail.py +214 -0
- dry_lint-1.6.0/tests/test_detector.py +504 -0
- dry_lint-1.6.0/tests/test_discovery.py +337 -0
- dry_lint-1.6.0/tests/test_example_workflows.py +27 -0
- dry_lint-1.6.0/tests/test_examples.py +162 -0
- dry_lint-1.6.0/tests/test_function_index.py +176 -0
- dry_lint-1.6.0/tests/test_functions.py +257 -0
- dry_lint-1.6.0/tests/test_history_judging.py +325 -0
- dry_lint-1.6.0/tests/test_history_replay.py +70 -0
- dry_lint-1.6.0/tests/test_index.py +31 -0
- dry_lint-1.6.0/tests/test_index_github.py +329 -0
- dry_lint-1.6.0/tests/test_judges.py +378 -0
- dry_lint-1.6.0/tests/test_judging.py +383 -0
- dry_lint-1.6.0/tests/test_labelling.py +385 -0
- dry_lint-1.6.0/tests/test_language_analysis.py +323 -0
- dry_lint-1.6.0/tests/test_ledger.py +474 -0
- dry_lint-1.6.0/tests/test_model_adoption.py +373 -0
- dry_lint-1.6.0/tests/test_model_discovery.py +82 -0
- dry_lint-1.6.0/tests/test_model_judge.py +142 -0
- dry_lint-1.6.0/tests/test_model_shapes.py +285 -0
- dry_lint-1.6.0/tests/test_models.py +35 -0
- dry_lint-1.6.0/tests/test_operation_blocks.py +487 -0
- dry_lint-1.6.0/tests/test_operation_blocks_preparation.py +153 -0
- dry_lint-1.6.0/tests/test_plugins.py +71 -0
- dry_lint-1.6.0/tests/test_pre_commit_hook.py +51 -0
- dry_lint-1.6.0/tests/test_presets.py +158 -0
- dry_lint-1.6.0/tests/test_protected_history.py +137 -0
- dry_lint-1.6.0/tests/test_release.py +25 -0
- dry_lint-1.6.0/tests/test_replay.py +170 -0
- dry_lint-1.6.0/tests/test_replay_presets.py +432 -0
- dry_lint-1.6.0/tests/test_report.py +580 -0
- dry_lint-1.6.0/tests/test_reporting_lanes.py +247 -0
- dry_lint-1.6.0/tests/test_research_mining.py +524 -0
- dry_lint-1.6.0/tests/test_residual_discovery.py +306 -0
- dry_lint-1.6.0/tests/test_schema_policy.py +231 -0
- dry_lint-1.6.0/tests/test_semantic_signals.py +163 -0
- dry_lint-1.6.0/tests/test_settings.py +56 -0
- dry_lint-1.6.0/tests/test_shared_operations.py +90 -0
- dry_lint-1.6.0/tests/test_sources.py +215 -0
- dry_lint-1.6.0/tests/test_store.py +295 -0
- dry_lint-1.6.0/tests/test_sweep.py +526 -0
- dry_lint-1.6.0/tests/test_typescript.py +346 -0
- dry_lint-1.6.0/tests/test_workspace.py +153 -0
- dry_lint-1.6.0/uv.lock +1348 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# For the coding agent committing the change: it checks each finding itself, so the hook reports at the agent preset's
|
|
2
|
+
# low threshold. `args: [--preset, auto]` puts a person's precision-first judging back.
|
|
3
|
+
- id: dry-lint
|
|
4
|
+
name: dry-lint
|
|
5
|
+
description: Flag staged function duplication and model consolidation candidates. Use --no-models to opt out of models.
|
|
6
|
+
entry: dry-lint check --staged --preset agent --env-file .env
|
|
7
|
+
language: python
|
|
8
|
+
additional_dependencies: ["anthropic>=1.0", "python-dotenv>=1,<2"] # the `hooks` extra: Claude judges, and .env
|
|
9
|
+
types_or: [python, javascript, jsx, ts, tsx]
|
|
10
|
+
stages: [pre-commit]
|
|
11
|
+
pass_filenames: false
|
|
12
|
+
require_serial: true
|
|
13
|
+
# What the hook above saw fixed or dismissed before the commit, written into the commit's message as trailers so
|
|
14
|
+
# the pull request's comment counts it. Install its stage once: `pre-commit install -t prepare-commit-msg`.
|
|
15
|
+
- id: dry-lint-schema-policy
|
|
16
|
+
name: dry-lint schema ownership
|
|
17
|
+
description: Enforce explicitly configured Python structured-output schema boundaries.
|
|
18
|
+
entry: dry-lint schema-check --staged
|
|
19
|
+
language: python
|
|
20
|
+
additional_dependencies: ["anthropic>=1.0", "python-dotenv>=1,<2"] # share the other hooks' environment
|
|
21
|
+
pass_filenames: false
|
|
22
|
+
always_run: true
|
|
23
|
+
stages: [pre-commit]
|
|
24
|
+
|
|
25
|
+
- id: dry-lint-trailers
|
|
26
|
+
name: dry-lint trailers
|
|
27
|
+
description: Record in the commit message the duplicates dry-lint's hook kept out before the commit.
|
|
28
|
+
entry: dry-lint trailers
|
|
29
|
+
language: python
|
|
30
|
+
additional_dependencies: ["anthropic>=1.0", "python-dotenv>=1,<2"] # the same environment as the hook above
|
|
31
|
+
stages: [prepare-commit-msg]
|
|
32
|
+
always_run: true
|
dry_lint-1.6.0/AGENTS.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Working on dry-lint
|
|
2
|
+
|
|
3
|
+
Follow [CONTRIBUTING.md](CONTRIBUTING.md) to set up, lint and test. Read [docs/design.md](docs/design.md) before
|
|
4
|
+
changing the pipeline, a file format or the store, and [docs/plugins.md](docs/plugins.md) before adding a plugin.
|
|
5
|
+
|
|
6
|
+
- **Adopters bring their own keys, always.** dry-lint is open source and never ships, holds, proxies or pays for an
|
|
7
|
+
API key, a model, or judge execution. Every judge runs on credentials the adopting repository passes in (action
|
|
8
|
+
inputs, its own environment), at its own cost; with none, dry-lint judges nothing and only lists look-alikes. No
|
|
9
|
+
input defaults to a credential other than the run's own `github.token`, and no code path calls a model on an
|
|
10
|
+
account or endpoint dry-lint operates. The only service dry-lint runs is the opt-out counter, which receives
|
|
11
|
+
anonymous counts, never credentials or code. No change that breaks this is accepted, whatever it would enable;
|
|
12
|
+
`tests/test_adopter_keys.py` guards it. See [docs/design.md](docs/design.md#adopters-bring-their-own-keys).
|
|
13
|
+
- The pipeline, the file formats, the reuse rules and the reports are core; extractors, comparers, judges and store
|
|
14
|
+
backends are plugins. A new way to compare or judge is a plugin, not a branch in core.
|
|
15
|
+
- Keep the detector stateless and model-free, and the judge separate. Anything slow belongs behind the verdict
|
|
16
|
+
store. Change a file format only with a `schema` bump.
|
|
17
|
+
- A stored verdict may be reused only when the answer cannot have changed. Any rule that reuses more verdicts needs
|
|
18
|
+
an argument, and a test, that the answer still holds.
|
|
19
|
+
- Decisions made by people go in code (`# dry-lint: distinct-from`) or in configuration (`patterns`), never in the
|
|
20
|
+
verdict store.
|
|
21
|
+
- dry-lint should pass on its own code: run `uv run dry-lint check` before you push.
|
|
22
|
+
|
|
23
|
+
## GitHub Actions versions
|
|
24
|
+
|
|
25
|
+
- ALWAYS use published major-version tags for established GitHub Actions, for example `actions/checkout@v7` and `actions/upload-artifact@v7`, so compatible fixes arrive without per-commit maintenance. NEVER replace those tags with commit hashes unless the user explicitly requests that exact exception. If a publisher has no major-version tag, use its published release tag rather than inventing a ref or substituting a hash.
|
|
26
|
+
- ALWAYS use the `v1` major-version tag for dry-lint: `gigaverse-app/dry-lint@v1` for Actions, `@v1` for CLI installs, and `rev: v1` for pre-commit hooks. Do not use commit SHAs or minor/patch release pins. Apply the same ref in workflow examples and adoption instructions.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Install Python 3.11+ and [uv](https://docs.astral.sh/uv/), then:
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
uv sync --locked
|
|
7
|
+
uvx pre-commit install
|
|
8
|
+
uv run ruff check .
|
|
9
|
+
uv run ruff format .
|
|
10
|
+
uv run pytest -q --cov
|
|
11
|
+
uv build
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
When changing the action installer, also run `uv run python scripts/test_action_install.py` with Bash and uv
|
|
15
|
+
on PATH. It performs real installs in temporary Python and Node repositories; CI runs it on Linux, macOS and
|
|
16
|
+
Windows. The ordinary pytest suite stays offline.
|
|
17
|
+
|
|
18
|
+
- **Tests use real objects.** A temporary git repository stands in for a pull request; judges run as real
|
|
19
|
+
subprocesses, or against `httpx.MockTransport`. New code needs full coverage, and a bug fix needs a test of the
|
|
20
|
+
invariant it broke.
|
|
21
|
+
- **Thresholds and judge wording come from measurements.** If you change them, re-measure and update
|
|
22
|
+
[docs/benchmark.md](docs/benchmark.md). If you change the Jev questions, bump `PROMPT_VERSION`.
|
|
23
|
+
- **Assets.** Regenerate them from `docs/assets/lint.png` with `uv run --with pillow python scripts/make_assets.py`, then
|
|
24
|
+
`uv run --with playwright==1.58.0 python scripts/render_png.py`.
|
dry_lint-1.6.0/LICENSE
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
|
|
2
|
+
Apache License
|
|
3
|
+
Version 2.0, January 2004
|
|
4
|
+
http://www.apache.org/licenses/
|
|
5
|
+
|
|
6
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
7
|
+
|
|
8
|
+
1. Definitions.
|
|
9
|
+
|
|
10
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
11
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
12
|
+
|
|
13
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
14
|
+
the copyright owner that is granting the License.
|
|
15
|
+
|
|
16
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
17
|
+
other entities that control, are controlled by, or are under common
|
|
18
|
+
control with that entity. For the purposes of this definition,
|
|
19
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
20
|
+
direction or management of such entity, whether by contract or
|
|
21
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
22
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
23
|
+
|
|
24
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
25
|
+
exercising permissions granted by this License.
|
|
26
|
+
|
|
27
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
28
|
+
including but not limited to software source code, documentation
|
|
29
|
+
source, and configuration files.
|
|
30
|
+
|
|
31
|
+
"Object" form shall mean any form resulting from mechanical
|
|
32
|
+
transformation or translation of a Source form, including but
|
|
33
|
+
not limited to compiled object code, generated documentation,
|
|
34
|
+
and conversions to other media types.
|
|
35
|
+
|
|
36
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
37
|
+
Object form, made available under the License, as indicated by a
|
|
38
|
+
copyright notice that is included in or attached to the work
|
|
39
|
+
(an example is provided in the Appendix below).
|
|
40
|
+
|
|
41
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
42
|
+
form, that is based on (or derived from) the Work and for which the
|
|
43
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
44
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
45
|
+
of this License, Derivative Works shall not include works that remain
|
|
46
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
47
|
+
the Work and Derivative Works thereof.
|
|
48
|
+
|
|
49
|
+
"Contribution" shall mean any work of authorship, including
|
|
50
|
+
the original version of the Work and any modifications or additions
|
|
51
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
52
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
53
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
54
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
55
|
+
means any form of electronic, verbal, or written communication sent
|
|
56
|
+
to the Licensor or its representatives, including but not limited to
|
|
57
|
+
communication on electronic mailing lists, source code control systems,
|
|
58
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
59
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
60
|
+
excluding communication that is conspicuously marked or otherwise
|
|
61
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
62
|
+
|
|
63
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
64
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
65
|
+
subsequently incorporated within the Work.
|
|
66
|
+
|
|
67
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
68
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
69
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
70
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
71
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
72
|
+
Work and such Derivative Works in Source or Object form.
|
|
73
|
+
|
|
74
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
75
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
76
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
77
|
+
(except as stated in this section) patent license to make, have made,
|
|
78
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
79
|
+
where such license applies only to those patent claims licensable
|
|
80
|
+
by such Contributor that are necessarily infringed by their
|
|
81
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
82
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
83
|
+
institute patent litigation against any entity (including a
|
|
84
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
85
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
86
|
+
or contributory patent infringement, then any patent licenses
|
|
87
|
+
granted to You under this License for that Work shall terminate
|
|
88
|
+
as of the date such litigation is filed.
|
|
89
|
+
|
|
90
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
91
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
92
|
+
modifications, and in Source or Object form, provided that You
|
|
93
|
+
meet the following conditions:
|
|
94
|
+
|
|
95
|
+
(a) You must give any other recipients of the Work or
|
|
96
|
+
Derivative Works a copy of this License; and
|
|
97
|
+
|
|
98
|
+
(b) You must cause any modified files to carry prominent notices
|
|
99
|
+
stating that You changed the files; and
|
|
100
|
+
|
|
101
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
102
|
+
that You distribute, all copyright, patent, trademark, and
|
|
103
|
+
attribution notices from the Source form of the Work,
|
|
104
|
+
excluding those notices that do not pertain to any part of
|
|
105
|
+
the Derivative Works; and
|
|
106
|
+
|
|
107
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
108
|
+
distribution, then any Derivative Works that You distribute must
|
|
109
|
+
include a readable copy of the attribution notices contained
|
|
110
|
+
within such NOTICE file, excluding those notices that do not
|
|
111
|
+
pertain to any part of the Derivative Works, in at least one
|
|
112
|
+
of the following places: within a NOTICE text file distributed
|
|
113
|
+
as part of the Derivative Works; within the Source form or
|
|
114
|
+
documentation, if provided along with the Derivative Works; or,
|
|
115
|
+
within a display generated by the Derivative Works, if and
|
|
116
|
+
wherever such third-party notices normally appear. The contents
|
|
117
|
+
of the NOTICE file are for informational purposes only and
|
|
118
|
+
do not modify the License. You may add Your own attribution
|
|
119
|
+
notices within Derivative Works that You distribute, alongside
|
|
120
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
121
|
+
that such additional attribution notices cannot be construed
|
|
122
|
+
as modifying the License.
|
|
123
|
+
|
|
124
|
+
You may add Your own copyright statement to Your modifications and
|
|
125
|
+
may provide additional or different license terms and conditions
|
|
126
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
127
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
128
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
129
|
+
the conditions stated in this License.
|
|
130
|
+
|
|
131
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
132
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
133
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
134
|
+
this License, without any additional terms or conditions.
|
|
135
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
136
|
+
the terms of any separate license agreement you may have executed
|
|
137
|
+
with Licensor regarding such Contributions.
|
|
138
|
+
|
|
139
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
140
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
141
|
+
except as required for reasonable and customary use in describing the
|
|
142
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
143
|
+
|
|
144
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
145
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
146
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
147
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
148
|
+
implied, including, without limitation, any warranties or conditions
|
|
149
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
150
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
151
|
+
appropriateness of using or redistributing the Work and assume any
|
|
152
|
+
risks associated with Your exercise of permissions under this License.
|
|
153
|
+
|
|
154
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
155
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
156
|
+
unless required by applicable law (such as deliberate and grossly
|
|
157
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
158
|
+
liable to You for damages, including any direct, indirect, special,
|
|
159
|
+
incidental, or consequential damages of any character arising as a
|
|
160
|
+
result of this License or out of the use or inability to use the
|
|
161
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
162
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
163
|
+
other commercial damages or losses), even if such Contributor
|
|
164
|
+
has been advised of the possibility of such damages.
|
|
165
|
+
|
|
166
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
167
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
168
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
169
|
+
or other liability obligations and/or rights consistent with this
|
|
170
|
+
License. However, in accepting such obligations, You may act only
|
|
171
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
172
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
173
|
+
defend, and hold each Contributor harmless for any liability
|
|
174
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
175
|
+
of your accepting any such warranty or additional liability.
|
|
176
|
+
|
|
177
|
+
END OF TERMS AND CONDITIONS
|
|
178
|
+
|
|
179
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
180
|
+
|
|
181
|
+
To apply the Apache License to your work, attach the following
|
|
182
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
183
|
+
replaced with your own identifying information. (Don't include
|
|
184
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
185
|
+
comment syntax for the file format. We also recommend that a
|
|
186
|
+
file or class name and description of purpose be included on the
|
|
187
|
+
same "printed page" as the copyright notice for easier
|
|
188
|
+
identification within third-party archives.
|
|
189
|
+
|
|
190
|
+
Copyright [yyyy] [name of copyright owner]
|
|
191
|
+
|
|
192
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
193
|
+
you may not use this file except in compliance with the License.
|
|
194
|
+
You may obtain a copy of the License at
|
|
195
|
+
|
|
196
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
197
|
+
|
|
198
|
+
Unless required by applicable law or agreed to in writing, software
|
|
199
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
200
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
201
|
+
See the License for the specific language governing permissions and
|
|
202
|
+
limitations under the License.
|
dry_lint-1.6.0/PKG-INFO
ADDED
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: dry-lint
|
|
3
|
+
Version: 1.6.0
|
|
4
|
+
Summary: Find code that re-implements what your codebase already does, judge it, and say so on the pull request
|
|
5
|
+
Project-URL: Homepage, https://github.com/gigaverse-app/dry-lint
|
|
6
|
+
Project-URL: Documentation, https://github.com/gigaverse-app/dry-lint/tree/main/docs
|
|
7
|
+
Project-URL: Repository, https://github.com/gigaverse-app/dry-lint
|
|
8
|
+
Project-URL: Issues, https://github.com/gigaverse-app/dry-lint/issues
|
|
9
|
+
Author: Gigaverse
|
|
10
|
+
License-Expression: Apache-2.0
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: code-duplication,code-review,dry,duplication,github-actions,linter,llm,pre-commit
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
17
|
+
Classifier: Typing :: Typed
|
|
18
|
+
Requires-Python: >=3.11
|
|
19
|
+
Requires-Dist: httpx<1,>=0.28
|
|
20
|
+
Requires-Dist: pydantic<3,>=2.11
|
|
21
|
+
Requires-Dist: tree-sitter-typescript<0.24,>=0.23
|
|
22
|
+
Requires-Dist: tree-sitter<0.26,>=0.25
|
|
23
|
+
Provides-Extra: anthropic
|
|
24
|
+
Requires-Dist: anthropic>=1.0; extra == 'anthropic'
|
|
25
|
+
Provides-Extra: cpu-embedding
|
|
26
|
+
Requires-Dist: numpy<3,>=2.2; extra == 'cpu-embedding'
|
|
27
|
+
Requires-Dist: onnxruntime<1.32,>=1.31.1; extra == 'cpu-embedding'
|
|
28
|
+
Requires-Dist: tokenizers<0.24,>=0.23.3; extra == 'cpu-embedding'
|
|
29
|
+
Provides-Extra: hooks
|
|
30
|
+
Requires-Dist: anthropic>=1.0; extra == 'hooks'
|
|
31
|
+
Requires-Dist: python-dotenv<2,>=1; extra == 'hooks'
|
|
32
|
+
Provides-Extra: s3
|
|
33
|
+
Requires-Dist: boto3>=1.35; extra == 's3'
|
|
34
|
+
Description-Content-Type: text/markdown
|
|
35
|
+
|
|
36
|
+
<p align="center">
|
|
37
|
+
<picture>
|
|
38
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/readme-hero-dark.svg">
|
|
39
|
+
<img alt="dry-lint: one concept, one implementation" src="docs/assets/readme-hero-light.svg" width="100%">
|
|
40
|
+
</picture>
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
<p align="center">
|
|
44
|
+
<a href="https://github.com/gigaverse-app/dry-lint/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/gigaverse-app/dry-lint/ci.yml?branch=main&label=CI&logo=githubactions&logoColor=white&labelColor=24292F"></a>
|
|
45
|
+
<a href="#the-counter"><img alt="Duplicates kept out" src="https://img.shields.io/endpoint?url=https%3A%2F%2Fdry-lint-counter.gigaverse-oss.workers.dev%2Fv1%2Fbadge%3Fmetric%3Dkept-out"></a>
|
|
46
|
+
<a href="pyproject.toml"><img alt="Python 3.11+" src="https://img.shields.io/badge/python-3.11%2B-7E4FC9?logo=python&logoColor=white&labelColor=24292F"></a>
|
|
47
|
+
<a href="docs/typescript.md"><img alt="TypeScript" src="https://img.shields.io/badge/typescript-supported-7E4FC9?logo=typescript&logoColor=white&labelColor=24292F"></a>
|
|
48
|
+
<a href="LICENSE"><img alt="Apache 2.0" src="https://img.shields.io/badge/license-Apache--2.0-7E4FC9?labelColor=24292F"></a>
|
|
49
|
+
<a href="https://dry-lint.readthedocs.io/en/latest/"><img alt="Documentation" src="https://readthedocs.org/projects/dry-lint/badge/?version=latest"></a>
|
|
50
|
+
</p>
|
|
51
|
+
|
|
52
|
+
<p align="center"><a href="https://dry-lint.readthedocs.io/en/latest/">Read the documentation</a> · <a href="https://dry-lint.readthedocs.io/en/latest/ecosystem/">Related tools</a></p>
|
|
53
|
+
|
|
54
|
+
Coding agents rarely copy and paste. They write *new* code for a job the codebase already does: a second
|
|
55
|
+
`truncate`, another pagination loop, a fresh Mongo query helper, each slightly different. Copy-paste detectors
|
|
56
|
+
(pylint's `duplicate-code`, jscpd) look for repeated lines, so they miss this. Every rewrite is also a chance to
|
|
57
|
+
drift: one version rounds, the other truncates, and callers get different answers to the same question.
|
|
58
|
+
|
|
59
|
+
dry-lint finds functions in a pull request that look like they re-implement something that already exists. A
|
|
60
|
+
judge decides whether each pair really is one concept, and the result goes back as PR annotations and one comment
|
|
61
|
+
([see one](docs/comment-preview.md)):
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
src/widgets/caption.py:1: preview_caption_text looks like src/text.py::shorten_text (drifted)
|
|
65
|
+
judge 0.91; the two already behave differently; call the existing function;
|
|
66
|
+
similarity 0.71; if they are different concepts, add
|
|
67
|
+
`# dry-lint: distinct-from src/text.py::shorten_text`
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**You bring your own keys.** dry-lint never provides API keys, models or judge execution: judges run on the
|
|
71
|
+
credentials your repository passes in, at your cost, and without any it only lists look-alikes
|
|
72
|
+
([design](docs/design.md#adopters-bring-their-own-keys)).
|
|
73
|
+
|
|
74
|
+
<a href="#the-counter">
|
|
75
|
+
<picture>
|
|
76
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://dry-lint-counter.gigaverse-oss.workers.dev/v1/sign.svg?theme=dark">
|
|
77
|
+
<img alt="Duplicate functions dry-lint has kept out of codebases" src="https://dry-lint-counter.gigaverse-oss.workers.dev/v1/sign.svg" width="100%">
|
|
78
|
+
</picture>
|
|
79
|
+
</a>
|
|
80
|
+
|
|
81
|
+
## Quick start
|
|
82
|
+
|
|
83
|
+
Python, TypeScript and TSX work out of the box. TypeScript repositories need no Python project, `bun install`,
|
|
84
|
+
Node or build step: dry-lint installs its own tools and parses source without executing your code
|
|
85
|
+
([TypeScript and Bun](docs/typescript.md) covers monorepos).
|
|
86
|
+
|
|
87
|
+
### Try it locally, without an API key
|
|
88
|
+
|
|
89
|
+
Install [uv](https://docs.astral.sh/uv/getting-started/installation/), open a terminal in your Git repository,
|
|
90
|
+
and run:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
uvx --no-config --python 3.13 --from git+https://github.com/gigaverse-app/dry-lint dry-lint scan --judge none --limit 30
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
uv downloads Python and runs dry-lint in its own environment, so nothing is added to your project. This lists
|
|
97
|
+
look-alikes without calling a model or failing on findings. To inspect just your branch, replace
|
|
98
|
+
`scan --judge none --limit 30` with `check --judge none --base origin/main` (use your default branch's name).
|
|
99
|
+
|
|
100
|
+
For a permanent `dry-lint` command, then open a new terminal:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
uv tool install --no-config --python 3.13 git+https://github.com/gigaverse-app/dry-lint
|
|
104
|
+
uv tool update-shell
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Add it to GitHub Actions
|
|
108
|
+
|
|
109
|
+
Save this as `.github/workflows/dry-lint.yml`. It works without a secret; add a `TYPESAFE_AI_API_KEY`
|
|
110
|
+
repository secret when you want judged findings.
|
|
111
|
+
|
|
112
|
+
```yaml
|
|
113
|
+
name: dry-lint
|
|
114
|
+
on: [pull_request]
|
|
115
|
+
permissions:
|
|
116
|
+
contents: read
|
|
117
|
+
pull-requests: write
|
|
118
|
+
concurrency:
|
|
119
|
+
group: dry-lint-${{ github.event.pull_request.number }}
|
|
120
|
+
cancel-in-progress: true
|
|
121
|
+
jobs:
|
|
122
|
+
dry-lint:
|
|
123
|
+
runs-on: ubuntu-latest
|
|
124
|
+
steps:
|
|
125
|
+
- uses: actions/checkout@v7
|
|
126
|
+
with:
|
|
127
|
+
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
|
128
|
+
fetch-depth: 1
|
|
129
|
+
- uses: gigaverse-app/dry-lint@v1
|
|
130
|
+
with:
|
|
131
|
+
typesafe-api-key: ${{ secrets.TYPESAFE_AI_API_KEY }}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
The action installs its own Python and dependencies; your project's Python version, uv configuration and
|
|
135
|
+
virtual environment do not change, and no `setup-python`, `pip install` or build step is needed. It annotates
|
|
136
|
+
the changed functions, keeps one sticky PR comment up to date and caches verdicts between runs. The comment
|
|
137
|
+
links both functions at the analyzed commit, shows the review workload, and folds evidence and pair-specific
|
|
138
|
+
suppression instructions under each summary. A clean pull request gets a green sticky with what was checked
|
|
139
|
+
(`comment-on-clean: "false"` to opt out), and every sticky keeps a running account of what each push cost and
|
|
140
|
+
each duplicate kept out ([the ledger](docs/github-action.md#the-ledger)).
|
|
141
|
+
|
|
142
|
+
A reported duplicate fails the check at the preset's threshold (98% of them are real duplicates with
|
|
143
|
+
`jev+opus`); `fail-at` raises or lowers it, and the `dry-lint: override` label lets one through. That precision
|
|
144
|
+
is for people. A coding agent can check findings itself, so for agents a cheap judge at a lower threshold catches
|
|
145
|
+
more for less ([who reads the findings](docs/judges.md#who-reads-the-findings-people-or-coding-agents)). Pull
|
|
146
|
+
requests from forks get no secrets, so the default `mode: auto` runs dry-lint as two jobs for them: `detect` on the pull
|
|
147
|
+
request, and `judge` in [a `workflow_run` job](examples/dry-lint-judge.yml) that keeps the key away from pull
|
|
148
|
+
request code ([design](docs/design.md#two-jobs-in-ci)). For default-branch runs and rechecks when override
|
|
149
|
+
labels change, use the [extended workflow](examples/dry-lint.yml); the [action guide](docs/github-action.md)
|
|
150
|
+
lists every option.
|
|
151
|
+
|
|
152
|
+
### pre-commit
|
|
153
|
+
|
|
154
|
+
```yaml
|
|
155
|
+
default_install_hook_types: [pre-commit, prepare-commit-msg]
|
|
156
|
+
repos:
|
|
157
|
+
- repo: https://github.com/gigaverse-app/dry-lint
|
|
158
|
+
rev: v1
|
|
159
|
+
hooks:
|
|
160
|
+
- id: dry-lint
|
|
161
|
+
- id: dry-lint-trailers # optional: the pull request's comment counts what the hook kept out
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
The hook checks the staged Python, JavaScript and TypeScript for the coding agent making the commit. An agent checks
|
|
165
|
+
each finding itself, then reuses the existing function or records why the two differ, so the hook judges for
|
|
166
|
+
recall: preset `agent`, Jev on every pair, blocking from 0.6. That keeps 92% to 100% recall on four gold sets, with
|
|
167
|
+
about one finding in two real, for about $0.0002 a commit. Set `TYPESAFE_AI_API_KEY` in the environment or in an
|
|
168
|
+
untracked `.env`; nothing else is needed. `args: [--preset, agent+haiku]` adds Claude Haiku on Jev's uncertain
|
|
169
|
+
scores, for higher precision and some lost recall on TypeScript; `args: [--preset, auto]` gives a person committing
|
|
170
|
+
by hand the same precision-first judging as CI
|
|
171
|
+
([who reads the findings](docs/judges.md#who-reads-the-findings-people-or-coding-agents)).
|
|
172
|
+
|
|
173
|
+
A blocked commit names the pair. Fix it by reusing the existing function, or record an intentional difference with
|
|
174
|
+
`# dry-lint: distinct-from path::name` or `dry-lint feedback dismiss PAIR --reason ...`. For wider exploration with a
|
|
175
|
+
persistent campaign budget, see [`balanced`](docs/production-discovery.md).
|
|
176
|
+
|
|
177
|
+
A duplicate the hook blocks and the agent fixes never reaches a push, so CI alone would never count it. The hook
|
|
178
|
+
remembers what it blocked; `dry-lint-trailers` writes what was then fixed or dismissed into the commit message,
|
|
179
|
+
`Dry-Lint-Kept-Out: ab7719f1ec3f9b70 repository_counter_name ≈ counter_key (3 lines)`, and the pull request's
|
|
180
|
+
sticky, the repository's ledger and the [global counter](#the-counter) count it
|
|
181
|
+
([the ledger](docs/github-action.md#the-ledger)). Run `pre-commit install` once more after adding it.
|
|
182
|
+
|
|
183
|
+
## Commands
|
|
184
|
+
|
|
185
|
+
| Command | Does |
|
|
186
|
+
| --- | --- |
|
|
187
|
+
| `check [--base REF \| --staged]` | detect, judge and report the functions a change touched (base: `origin/HEAD`) |
|
|
188
|
+
| `scan [--limit N] [--refresh] [--repo OWNER/NAME=PATH ...]` | the repository's backlog, or cross-repository pairs from a combined workspace |
|
|
189
|
+
| `sweep [--init \| --update]` | audit the configured repository; explicitly initialize or shrink its accepted backlog and README progress |
|
|
190
|
+
| `config` | which judges, thresholds and budget would run, and what they cost |
|
|
191
|
+
| `explain A B` | why a pair is, or is not, reported |
|
|
192
|
+
| `detect --out candidates.json` | CI job 1: propose pairs; no judge, no secrets, no store |
|
|
193
|
+
| `judge --candidates candidates.json` | CI job 2: judge them, store the verdicts, report |
|
|
194
|
+
| `report --from report.json --format F` | render a report as `text`, `github`, `markdown`, `json`, `sarif` or `check-run` |
|
|
195
|
+
| `bench --gold gold.jsonl [--comparer]` | measure the judge, or the comparer, on a gold set |
|
|
196
|
+
| `bench --replay N [--preset P] [--fail-at X] [--label K]` | what `check` would have done on each of the last N commits of the default branch; with `--label`, what it would have caught, missed and blocked wrongly |
|
|
197
|
+
|
|
198
|
+
`--report report.json` and `--output comment.md` write the report and the PR comment from any command that
|
|
199
|
+
judges. Without a judge, dry-lint lists the candidate pairs and never fails. With `TYPESAFE_AI_API_KEY` set, Jev
|
|
200
|
+
judges them; to use another judge, pass `--judge command --judge-command "your-llm-cli"`
|
|
201
|
+
([judges](docs/judges.md)).
|
|
202
|
+
|
|
203
|
+
| To | Read |
|
|
204
|
+
| --- | --- |
|
|
205
|
+
| Fully adopt hooks, PR/README stickies and a shrinking backlog | [Adoption playbook](docs/adoption-playbook.md) |
|
|
206
|
+
| Set it up with an agent | [skills/dry-lint/SKILL.md](skills/dry-lint/SKILL.md) |
|
|
207
|
+
| See the PR comment before installing | [Example report](docs/comment-preview.md) |
|
|
208
|
+
| Put judged findings on pull requests | [GitHub Action setup](docs/github-action.md) |
|
|
209
|
+
| Add structural matching | [The optional Dryer comparer](docs/detectors.md) ([compared on gigaverse-backend](docs/dryer-comparison.md)) |
|
|
210
|
+
| Find copies across related repositories | [Workspace scans and shared ownership](docs/workspaces.md) |
|
|
211
|
+
| Avoid cloning peer repositories in CI | [Versioned function indexes](docs/function-indexes.md) |
|
|
212
|
+
| Audit existing duplication, shrink its baseline and show cleanup in your README | [Repository sweeps and ratchets](docs/sweeps.md) |
|
|
213
|
+
|
|
214
|
+
## How it works
|
|
215
|
+
|
|
216
|
+
dry-lint is a fixed core (the pipeline, the file formats, the verdict store's rules and the reports) with four
|
|
217
|
+
plugin slots: how functions are found, how they are compared, how a pair is judged, and where verdicts are kept
|
|
218
|
+
([design](docs/design.md), [plugins](docs/plugins.md)).
|
|
219
|
+
|
|
220
|
+
1. **Detector** (local, no model, about 4.5 s on 10,000 functions). It finds the functions the diff touched. The
|
|
221
|
+
**comparer** proposes each one's nearest look-alikes in other files; the built-in one is a TF-IDF fingerprint
|
|
222
|
+
of what a function *does*: the names it calls, the attributes it touches, the words in its identifiers, its
|
|
223
|
+
loops, `try` blocks and `await`s. One shared policy consumes language-adapter facts: Python special methods, recognized forwarding wrappers,
|
|
224
|
+
a function that calls the other (resolved within the file), declared patterns and inline `distinct-from`.
|
|
225
|
+
Inheritance alone does not exclude repeated logic.
|
|
226
|
+
2. **Judge** (separate and pluggable). [Jev](docs/judges.md) answers three typed questions per pair in about 0.3 s:
|
|
227
|
+
- Is it one concept?
|
|
228
|
+
- Do the two already behave differently?
|
|
229
|
+
- Which side should own the single implementation?
|
|
230
|
+
|
|
231
|
+
Any LLM CLI, or any program, can be the judge instead, and a second judge can take the scores the first is
|
|
232
|
+
least sure about.
|
|
233
|
+
3. **Verdict store** (a cache, not a reviewed file). Each verdict is kept per pair with a *structure hash* of each
|
|
234
|
+
function, which comments and formatting do not change. Python also normalizes local renames; TypeScript
|
|
235
|
+
conservatively re-judges them to preserve binding semantics. Most cosmetic pushes cost zero judge calls.
|
|
236
|
+
|
|
237
|
+
Research on profiles, judging budgets and discovery across repeated runs is in
|
|
238
|
+
[Discovery over time](docs/coverage-exploration.md) and the [four-cent discovery trial](docs/four-cent-discovery.md).
|
|
239
|
+
|
|
240
|
+
## When it is right not to merge them
|
|
241
|
+
|
|
242
|
+
Some look-alikes are deliberate. Silence them where the decision belongs:
|
|
243
|
+
|
|
244
|
+
- **Inline**: put `# dry-lint: distinct-from src/text.py::shorten_text` in the new function. The reason sits next
|
|
245
|
+
to the code it explains, and moves or disappears with it.
|
|
246
|
+
- **A whole function**: put `# dry-lint: ignore` in it (generated code, a deliberate copy). It is left out of
|
|
247
|
+
every pair, on either side.
|
|
248
|
+
- **Families**: declare a pattern of deliberate per-resource instances in `pyproject.toml`:
|
|
249
|
+
|
|
250
|
+
```toml
|
|
251
|
+
[tool.dry-lint]
|
|
252
|
+
exclude = ["*/tests/*", "tests/*", "*/migrations/*"]
|
|
253
|
+
|
|
254
|
+
[[tool.dry-lint.patterns]]
|
|
255
|
+
members = "src/*/api/*_api.py::create_router"
|
|
256
|
+
reason = "one router per resource"
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Machine "not a duplicate" verdicts stay in the store and do not need to be checked in.
|
|
260
|
+
|
|
261
|
+
## Measured
|
|
262
|
+
|
|
263
|
+
On 600 gigaverse-ai pull requests, against a 250-pair gold set labelled blind by three vendors' models ([docs/benchmark.md](docs/benchmark.md)):
|
|
264
|
+
|
|
265
|
+
| | |
|
|
266
|
+
| --- | --- |
|
|
267
|
+
| Changed functions per commit | median 1, p90 13 |
|
|
268
|
+
| Judge calls per PR (uncached) | 2.5 |
|
|
269
|
+
| Findings per PR at the default threshold | about 0.2 |
|
|
270
|
+
| Jev `reuse-v2`: ranking quality | AUC 0.97 |
|
|
271
|
+
| preset `jev+opus`, failing at 0.55, within $0.04 a pull request | 98% precision, 85% recall; about $0.005 per pull request on average |
|
|
272
|
+
| preset `jev+sonnet`, failing at 0.7 | 97% precision, 84% recall; about $0.0035 per pull request |
|
|
273
|
+
| preset `jev+codex` (ChatGPT subscription), failing at 0.7 | 96% precision, 85% recall; no per-call cost |
|
|
274
|
+
| preset `jev`, failing at 0.8 | 94% precision, 73% recall; 15% of pull requests fail |
|
|
275
|
+
| Known duplicates found and scored ≥ 0.8 | 11 of 13 |
|
|
276
|
+
| Verdict store for the whole repository | about 1,900 pairs, 0.75 MB |
|
|
277
|
+
|
|
278
|
+
## Settings
|
|
279
|
+
|
|
280
|
+
All settings live under `[tool.dry-lint]` in `pyproject.toml` or in a `.dry-lint.toml` file. Judges and
|
|
281
|
+
thresholds come from the preset ([docs/judges.md](docs/judges.md)); anything set here wins over it:
|
|
282
|
+
|
|
283
|
+
| Setting | Default | |
|
|
284
|
+
| --- | --- | --- |
|
|
285
|
+
| `include` / `exclude` | everything / tests, migrations, scripts | fnmatch over tracked paths |
|
|
286
|
+
| `neighbours` | 3 | candidates per changed function |
|
|
287
|
+
| `preset` | `"auto"` | judges and their measured thresholds together: `jev+opus`, `jev+claude-code`, `jev+sonnet`, `jev+claude-code-sonnet`, `jev+codex`, `sonnet`, `claude-code`, `jev`, `none`; auto picks by the credentials present |
|
|
288
|
+
| `drop_below` / `report_at` / `fail_at` | from the preset | separate below, reported at, failing at (`--fail-at` overrides it); `jev+opus` is 0.5 / 0.55 / 0.55, with Jev's answers that Opus did not see held to Jev's 0.8 |
|
|
289
|
+
| `drift_at` | 0.8 | a duplicate whose `behaves_differently` reaches this is drifted |
|
|
290
|
+
| `budget` | `{ usd = 0.04, subscription_calls = 20 }` | most judging spends on a pull request across all its pushes, at list price, subscriptions included (`--budget-usd`); and calls per run to subscription judges |
|
|
291
|
+
| `prices` | built-in table | USD per million input and output tokens, by model |
|
|
292
|
+
| `reopen_margin` | 0.05 | for a comparer that permits similarity reuse (no built-in one does), how much closer a "separate" pair must get before it is judged again |
|
|
293
|
+
| `max_findings` | 10 | rows in the PR comment |
|
|
294
|
+
| `extractors` | `["python", "typescript"]` | `.py`, `.ts`, `.tsx`, `.mts`, `.cts` |
|
|
295
|
+
| `comparer` | `"tfidf"` | options `min_similarity` (0.5), `min_similarity_small` (0.3) under `small_function_lines` (6) |
|
|
296
|
+
| `judge` / `escalate` | from the preset | name your own judge to run it alone, or `escalate = "none"` to turn the second judge off |
|
|
297
|
+
| `store` | `"dir"` | `.git/dry-lint/verdicts/`, or `{ use = "s3", uri = "s3://bucket/prefix" }` |
|
|
298
|
+
|
|
299
|
+
A plugin slot takes a name, or a table with `use` and the plugin's options:
|
|
300
|
+
`comparer = { use = "tfidf", min_similarity = 0.45 }`.
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
## The counter
|
|
304
|
+
|
|
305
|
+
The sign at the top counts every duplicate dry-lint has kept out of a codebase: a duplicate a pull request
|
|
306
|
+
introduced, dry-lint reported, and a later push removed before merging. A *rewrite* is one whose structure differs
|
|
307
|
+
from the function it duplicates, so a copy-paste checker would not see it; a *drifted* copy already behaved
|
|
308
|
+
differently; a *re-check skipped* is a verdict the store already held. Actions from November 2026 on measure these;
|
|
309
|
+
until a pull request they measured has merged, the sign shows them as "–", never as zero.
|
|
310
|
+
|
|
311
|
+
When a pull request merges, the action's run on the default branch sends its counts to a
|
|
312
|
+
[Cloudflare Worker](counter): duplicates kept out (how many had drifted, how many were rewrites, and their lines),
|
|
313
|
+
caught and dismissed, pushes, functions checked, look-alikes compared, verdicts reused, judgments, judging spend
|
|
314
|
+
and the dry-lint version. No code, names, paths or people are sent. The repository is **pseudonymous**: it is sent
|
|
315
|
+
as its counter key, the SHA-256 of its numeric GitHub id, which ties its pull requests together but which its name
|
|
316
|
+
does not lead to; a private repository's id is visible only to people who can see the repository. Each pull
|
|
317
|
+
request is counted once. Opt out with `share-totals: "false"`.
|
|
318
|
+
|
|
319
|
+
A repository whose audit keeps a [README block](docs/sweeps.md#readme-sticky-and-shieldsio-badge) gets its sign
|
|
320
|
+
there automatically, beside the old duplicates it has cleaned up and still has. To show it anywhere else, take its counter key from the
|
|
321
|
+
log of a dry-lint run on your default branch
|
|
322
|
+
(`dry-lint: this repository's counter key is ...`). `name` only labels the sign; the counter never looks a name up:
|
|
323
|
+
|
|
324
|
+
```html
|
|
325
|
+
<picture>
|
|
326
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://dry-lint-counter.gigaverse-oss.workers.dev/v1/sign.svg?theme=dark&key=KEY&name=OWNER/NAME">
|
|
327
|
+
<img alt="Duplicates dry-lint kept out of OWNER/NAME" src="https://dry-lint-counter.gigaverse-oss.workers.dev/v1/sign.svg?key=KEY&name=OWNER/NAME" width="100%">
|
|
328
|
+
</picture>
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
or a badge, with `metric=kept-out`, `drifted`, `lines`, `pulls`, `functions` or `repositories`:
|
|
332
|
+
|
|
333
|
+
```markdown
|
|
334
|
+

|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
## Lint
|
|
338
|
+
|
|
339
|
+
<img src="docs/assets/avatar.png" alt="Lint, the dry-lint mascot: a purple ball of dryer lint holding a mint-green hair dryer" width="120" align="right">
|
|
340
|
+
|
|
341
|
+
Lint is what is left behind when you dry things. It carries a hair dryer for blowing duplicated code away.
|
|
342
|
+
`uv run --with pillow python scripts/make_assets.py` rebuilds the avatar, the mark, the banners and the README
|
|
343
|
+
hero from [docs/assets/lint.png](docs/assets/lint.png).
|
|
344
|
+
|
|
345
|
+
<br clear="right">
|
|
346
|
+
|
|
347
|
+
## License
|
|
348
|
+
|
|
349
|
+
Apache 2.0. See [CONTRIBUTING.md](CONTRIBUTING.md) to work on dry-lint itself.
|