eval-toolkit 1.0.5__tar.gz → 1.1.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.
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/.gitignore +9 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/CHANGELOG.md +158 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/PKG-INFO +2 -2
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/pyproject.toml +1 -1
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/__init__.py +3 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/_version.py +1 -1
- eval_toolkit-1.1.0/src/eval_toolkit/audit_value_bindings.py +818 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/golden/public_api/snapshot.json +12 -3
- eval_toolkit-1.1.0/tests/test_audit_value_bindings.py +725 -0
- eval_toolkit-1.0.5/src/eval_toolkit/audit_value_bindings.py +0 -448
- eval_toolkit-1.0.5/tests/test_audit_value_bindings.py +0 -338
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/LICENSE +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/README.md +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/STYLE.md +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/docs/archive/README.md +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/docs/research/README.md +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/docs/research/datasets/README.md +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/docs/research/papers/data-integrity/README.md +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/docs/research/papers/eval-ecosystem/README.md +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/docs/research/papers/inference/README.md +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/docs/research/papers/prompt-injection/README.md +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/docs/source/adr/README.md +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/docs/source/methodology/README.md +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/__main__.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/_deprecated.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/_parallel.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/_rng.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/_sweep.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/adversarial.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/analysis.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/artifacts.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/audit_citation_alignment.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/audit_sister_doc_concept_drift.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/bootstrap.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/calibration.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/claims.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/config.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/docs.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/embeddings.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/evidence.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/harness.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/leakage.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/loaders.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/losses.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/manifest.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/metric_specs.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/metrics.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/operating_points.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/paths.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/plotting.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/preprocessing.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/probes.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/protocols.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/provenance.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/py.typed +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/schemas/manifest.v1.json +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/schemas/manifest.v2.json +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/schemas/manifest.v3.json +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/schemas/ood_manifest.v1.json +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/schemas/results.v1.json +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/schemas/results_full.v1.json +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/scorecards.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/seeds.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/splits.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/stacking.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/text_dedup.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/src/eval_toolkit/thresholds.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/baseline/test_plotting_visual/plot_bootstrap_distribution.png +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/baseline/test_plotting_visual/plot_confusion_matrix_grid.png +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/baseline/test_plotting_visual/plot_lift_ci.png +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/baseline/test_plotting_visual/plot_metric_bars.png +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/baseline/test_plotting_visual/plot_pareto_frontier.png +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/baseline/test_plotting_visual/plot_pr_curve.png +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/baseline/test_plotting_visual/plot_reliability_diagram.png +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/baseline/test_plotting_visual/plot_roc_curve.png +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/baseline/test_plotting_visual/plot_score_histograms.png +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/baseline/test_plotting_visual/plot_slice_metric_heatmap.png +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/benchmarks/__init__.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/benchmarks/test_kernel_benchmarks.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/conftest.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/golden/bootstrap_ci/cases.json +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/golden/data/dedup_holdout.jsonl +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/golden/data/dedup_holdout_expected.json +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/golden/data/dedup_holdout_provenance.md +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/golden/docs/expected.md +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/golden/docs/input.md +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/golden/docs/metrics.json +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/golden/test_dedup_holdout_calibration.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/strategies.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_adversarial.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_analysis.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_artifacts.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_audit_citation_alignment.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_audit_sister_doc_concept_drift.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_block_bootstrap_on_folds.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_bootstrap_calibration_mc.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_bootstrap_edge_cases.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_bootstrap_golden.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_bootstrap_njobs.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_bootstrap_props.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_bootstrap_research_grounded.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_bootstrap_unit.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_calibration_binary_adapters.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_calibration_bootstrap_chain.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_calibration_determinism.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_calibration_optimization_failures.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_calibration_props.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_calibration_research_grounded.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_calibration_unit.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_claims.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_claims_coverage.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_claims_props.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_cli.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_config.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_coverage_bootstrap.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_coverage_calibration.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_coverage_harness.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_coverage_metrics.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_coverage_plotting.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_croissant_e2e.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_dedup_split_leakage_chain.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_deprecated_scalars_shim.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_deprecations.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_docs_golden.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_docs_props.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_embeddings.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_evidence_validators.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_harness_edge_cases.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_harness_fault_injection.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_harness_folded.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_harness_internals.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_harness_metric_options.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_harness_parallelism.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_harness_smoke.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_import_boundaries.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_is_metric_defined_for_slice.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_lazy_extras_messages.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_leakage.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_leakage_error_paths.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_leakage_props.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_loaders.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_loaders_coverage.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_loaders_props.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_logging.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_losses.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_manifest.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_manifest_contamination_round_trip.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_manifest_props.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_manifest_validation.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_metrics_props.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_metrics_stratified_subsets.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_metrics_unit.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_misc_coverage.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_numeric_edge_cases.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_ood_loader.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_operating_points.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_operating_points_props.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_parallel.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_paths.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_pipeline_e2e.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_plotting_edge.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_plotting_smoke.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_plotting_visual.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_preprocessing.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_probes.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_protocol_conformance.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_provenance.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_public_api.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_recall_at_fpr.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_reference_equivalence.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_reproducibility_integration.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_rng.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_schemas.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_scorecard.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_seeds.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_splits.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_splits_leakage_integration.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_splits_props.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_stacking.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_sweep.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_text_dedup.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_text_dedup_coverage.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_text_dedup_props.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_text_dedup_strategies.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_thresholds.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_thresholds_constant_score.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_thresholds_coverage.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_thresholds_props.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_thresholds_research_grounded.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_tokenization_leakage_check.py +0 -0
- {eval_toolkit-1.0.5 → eval_toolkit-1.1.0}/tests/test_v09_contracts.py +0 -0
|
@@ -62,6 +62,15 @@ gemini-microaudit-*.md
|
|
|
62
62
|
audit-gemini.md
|
|
63
63
|
comprehensive-audit-codex.md
|
|
64
64
|
audit-verification-*.md
|
|
65
|
+
# v1.1.0 (#80 cycle): broaden codex-comprehensive-audit-* to cover
|
|
66
|
+
# non-suffixed briefing variants (e.g., codex-comprehensive-audit-v0.50.0.md);
|
|
67
|
+
# the earlier pattern only covered the *-report.md form.
|
|
68
|
+
codex-comprehensive-audit-*.md
|
|
69
|
+
|
|
70
|
+
# Local scratch directory: ad-hoc dogfood scripts, pre-tag validation
|
|
71
|
+
# runs, draft PR bodies, audit prompts. Intentionally untracked.
|
|
72
|
+
# Contents have historical value but are not part of any release.
|
|
73
|
+
.scratch/
|
|
65
74
|
|
|
66
75
|
# Claude Code project settings (machine-local)
|
|
67
76
|
.claude/
|
|
@@ -5,6 +5,164 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.1.0] — 2026-05-26 — `audit_value_bindings` slice-aware matching via `BindingKey` (closes #80)
|
|
9
|
+
|
|
10
|
+
Tier-1 ADDITIVE per [ADR 0003](docs/source/adr/0003-stability-contract-and-gate3-methodology.md).
|
|
11
|
+
Closes [#80](https://github.com/brandon-behring/eval-toolkit/issues/80)
|
|
12
|
+
— consumer-feedback structural fix surfaced by
|
|
13
|
+
`brandon-behring/prompt-injection-detection-prototype@v1.3.9` (96
|
|
14
|
+
warnings, ~95 false positives) where the pre-v1.1 2-tuple
|
|
15
|
+
`(detector, metric)` canonical-binding identity could not
|
|
16
|
+
disambiguate the same `(detector, metric)` across multiple slices
|
|
17
|
+
(`direct_validation`, `pooled_ood`, paired-delta cells,
|
|
18
|
+
random-floor mentions).
|
|
19
|
+
|
|
20
|
+
Pending [ADR 0005](docs/source/adr/0005-structured-keys-for-audit-validators.md)
|
|
21
|
+
codifies the underlying rule: "structured keys over positional
|
|
22
|
+
tuples for canonical-identity types in audit validators."
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- **`BindingKey`** (new public class, exported via the lazy
|
|
27
|
+
`_EXPORTS` resolver). Frozen dataclass with fields
|
|
28
|
+
`(detector: str, metric: str, slice: str = "any")`. Forward-
|
|
29
|
+
extensible: future identity axes (split, ci_kind, source_ref, ...)
|
|
30
|
+
can be added as defaulted fields without breaking the dict-key
|
|
31
|
+
schema. Avoids the recur-every-N-months schema-event pattern that
|
|
32
|
+
produced #80.
|
|
33
|
+
- **`validate_reader_value_bindings(bindings=...)`** now accepts
|
|
34
|
+
three input shapes, normalized internally to `dict[BindingKey,
|
|
35
|
+
float]` via a per-key `_normalize_binding_key` adapter:
|
|
36
|
+
1. Canonical: `BindingKey(detector=..., metric=..., slice=...)`
|
|
37
|
+
(recommended for new consumer code).
|
|
38
|
+
2. Sugar 3-tuple: `(detector, metric, slice)` (concise dict
|
|
39
|
+
literal; issue #80's proposed schema).
|
|
40
|
+
3. Legacy 2-tuple: `(detector, metric)` (preserved; treated as
|
|
41
|
+
`slice="any"`). All pre-v1.1 consumer code continues to work
|
|
42
|
+
unchanged.
|
|
43
|
+
Mixed key shapes in a single dict are supported. Invalid key
|
|
44
|
+
shapes raise `TypeError` at the function boundary (loud failure,
|
|
45
|
+
not silent zero-match drift).
|
|
46
|
+
- **New optional kwargs** on `validate_reader_value_bindings`:
|
|
47
|
+
- `slice_aliases: Mapping[str, Sequence[str]] | None = None` —
|
|
48
|
+
canonical-slice-name → regex-alternatives mapping, mirroring
|
|
49
|
+
`detector_aliases` / `metric_aliases`. Used when at least one
|
|
50
|
+
`BindingKey` has `slice != "any"`.
|
|
51
|
+
- `slice_window_chars: int = 240` — character window for slice
|
|
52
|
+
disambiguation (≈ 50 tokens at ~5 chars/token).
|
|
53
|
+
- **Slice disambiguation** in the matching loop. When a binding
|
|
54
|
+
key has `slice != "any"`, the candidate value is paired with
|
|
55
|
+
the nearest slice mention (same last-before-first-after rule as
|
|
56
|
+
detector pairing). If no slice mention falls within
|
|
57
|
+
`slice_window_chars`, the triple is suppressed (warn-only;
|
|
58
|
+
counted in `unmatched_slice_count`). If the paired slice
|
|
59
|
+
differs from the binding's slice, the triple is silently skipped
|
|
60
|
+
(handled by the binding for the correct slice on its own loop
|
|
61
|
+
iteration).
|
|
62
|
+
- **`ValueBindingsReport.unmatched_slice_count: int = 0`** — new
|
|
63
|
+
field surfacing the warn-only signal. Default `0` means full
|
|
64
|
+
backward compatibility for code that constructs reports manually.
|
|
65
|
+
- **`scope: Literal["all", "narrative"] = "all"`** — content-type
|
|
66
|
+
filter on the validator. Default `"all"` preserves legacy v1.0.x
|
|
67
|
+
behavior. Setting `scope="narrative"` excludes from matching:
|
|
68
|
+
- Markdown table rows (lines starting with `|`)
|
|
69
|
+
- Bracketed expressions `[...]` (CI bounds, ranges)
|
|
70
|
+
- Fenced code blocks (triple-backtick)
|
|
71
|
+
|
|
72
|
+
This addresses the broader category of false positives that the
|
|
73
|
+
slice-axis fix alone could not (CI bounds being matched as point
|
|
74
|
+
estimates, table-cell metrics being cross-flagged, code-block
|
|
75
|
+
literals being treated as claims). Compatible with the
|
|
76
|
+
motivating misbinding bug class (V1.3.1 ADR-080) which was in
|
|
77
|
+
narrative prose — no recall loss.
|
|
78
|
+
|
|
79
|
+
Combined dogfood result on `prompt-injection-detection-submission`
|
|
80
|
+
HEAD: **76% noise reduction** (95 warnings at v1.0.5 2-tuple
|
|
81
|
+
baseline → 23 with v1.1.0 BindingKey + `scope="narrative"`). The
|
|
82
|
+
remaining 23 are positional-heuristic limitations (random-floor
|
|
83
|
+
mis-attribution across sentence boundaries; cross-detector
|
|
84
|
+
pairing in dense prose) not addressable without parser-level
|
|
85
|
+
work (future v1.2.0+ scope).
|
|
86
|
+
|
|
87
|
+
### Changed (Tier-1 ADDITIVE — no breaking changes)
|
|
88
|
+
|
|
89
|
+
- `_nearest_detector_key()` private helper renamed to
|
|
90
|
+
`_nearest_canonical_key()` (used now for both detector and slice
|
|
91
|
+
pairing; the body was already generic). Implementation detail;
|
|
92
|
+
no public API impact.
|
|
93
|
+
- `pyproject.toml` `Development Status` classifier bumped
|
|
94
|
+
`4 - Beta` → `5 - Production/Stable` (post-v1.0 hygiene).
|
|
95
|
+
- `.gitignore` now covers `.scratch/` and the broader
|
|
96
|
+
`codex-comprehensive-audit-*.md` pattern (was previously only
|
|
97
|
+
`*-report.md`).
|
|
98
|
+
|
|
99
|
+
### Deprecation policy
|
|
100
|
+
|
|
101
|
+
All three `bindings` input shapes remain accepted **indefinitely**
|
|
102
|
+
through the v1.x line. `BindingKey` is the canonical/recommended
|
|
103
|
+
shape per ADR 0005 + docstring guidance; tuples remain valid
|
|
104
|
+
syntactic sugar with no `DeprecationWarning`. Formal deprecation
|
|
105
|
+
deferred to a future v2.0 cleanup pass when there is concrete
|
|
106
|
+
payoff. Consumers can migrate slot-by-slot at their own pace, or
|
|
107
|
+
not at all (legacy 2-tuple semantics survive as `slice="any"`).
|
|
108
|
+
|
|
109
|
+
### Consumer adoption path
|
|
110
|
+
|
|
111
|
+
`prompt-injection-detection-submission` consumer-side script at
|
|
112
|
+
`scripts/audit_value_bindings.py` can adopt by either:
|
|
113
|
+
- Replacing the 2-tuple `BINDINGS` literal with 3-tuple keys
|
|
114
|
+
(smallest diff; issue body's proposal), OR
|
|
115
|
+
- Migrating to `BindingKey(...)` for forward-extensibility (new
|
|
116
|
+
identity axes won't require re-touching the script).
|
|
117
|
+
|
|
118
|
+
### Validator design philosophy (introduced this release)
|
|
119
|
+
|
|
120
|
+
This release introduces a two-layer correctness model for audit
|
|
121
|
+
validators, formalized in pending ADR 0005:
|
|
122
|
+
|
|
123
|
+
1. **Identity correctness** — canonical measurements have
|
|
124
|
+
structured identity (`BindingKey`), not positional tuples.
|
|
125
|
+
Future axes added as defaulted fields without breaking the
|
|
126
|
+
schema.
|
|
127
|
+
2. **Scope correctness** — the validator should only scan content
|
|
128
|
+
that is plausibly a binding claim. Narrative prose is.
|
|
129
|
+
Markdown tables, CI brackets, and code blocks aren't.
|
|
130
|
+
`scope="narrative"` is the v1.1.0 implementation of this rule;
|
|
131
|
+
match the lint-design convention from `ruff`/`mypy`/`bandit`
|
|
132
|
+
(scope predicates aren't optional in production-quality
|
|
133
|
+
linters).
|
|
134
|
+
|
|
135
|
+
Both layers are now in place. Consumers writing typical research
|
|
136
|
+
writeup prose with dense statistical tables should adopt
|
|
137
|
+
`scope="narrative"` for a ~80% noise reduction relative to v1.0.5.
|
|
138
|
+
|
|
139
|
+
### Known v1.1.0 limitations (residual after slice + narrative fixes)
|
|
140
|
+
|
|
141
|
+
The remaining ~20% of v1.0.5 baseline noise is positional-
|
|
142
|
+
heuristic limitations that the slice + narrative fixes cannot
|
|
143
|
+
address:
|
|
144
|
+
|
|
145
|
+
1. **"Random floor" / sub-clause values across sentence
|
|
146
|
+
boundaries** — prose like "X scored 0.291. The pooled OOD
|
|
147
|
+
random floor is 0.374" pairs 0.374 with the nearest preceding
|
|
148
|
+
detector (X), because the validator doesn't treat `.` as a
|
|
149
|
+
pairing boundary.
|
|
150
|
+
2. **Multi-detector cross-pairing in dense prose** — prose like
|
|
151
|
+
"LoRA scored 0.293 [0.286, 0.301] versus 0.364 for the frozen
|
|
152
|
+
probe and 0.291 for TF-IDF + LR" pairs values with
|
|
153
|
+
text-order-nearest detector, which over-credits the second
|
|
154
|
+
detector in a list construction.
|
|
155
|
+
|
|
156
|
+
Future work (v1.2.0+ candidate): sentence-boundary awareness
|
|
157
|
+
(respecting `.` / `\n` as pairing boundaries) + better
|
|
158
|
+
multi-detector list parsing.
|
|
159
|
+
|
|
160
|
+
HARD-gate promotion of the consumer-side validator at v1.3.10+
|
|
161
|
+
becomes credible at the ~80% reduction level achieved here.
|
|
162
|
+
Remaining false positives can be suppressed via consumer-side
|
|
163
|
+
filtering (e.g., excluding lines containing "random floor" or
|
|
164
|
+
"versus") or accepted as known low-frequency noise.
|
|
165
|
+
|
|
8
166
|
## [1.0.5] — 2026-05-26 — publish workflow hardening (infrastructure-only)
|
|
9
167
|
|
|
10
168
|
Tier-3 / infrastructure-only release. **No library code or public API
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: eval-toolkit
|
|
3
|
-
Version: 1.0
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: Reusable evaluation contracts for binary classification: metrics, bootstrap CIs, calibration, artifacts, and evidence gates.
|
|
5
5
|
Project-URL: Homepage, https://github.com/brandon-behring/eval-toolkit
|
|
6
6
|
Project-URL: Documentation, https://brandon-behring.github.io/eval-toolkit/
|
|
@@ -11,7 +11,7 @@ Author: Brandon Behring
|
|
|
11
11
|
License-Expression: MIT
|
|
12
12
|
License-File: LICENSE
|
|
13
13
|
Keywords: binary-classification,bootstrap,calibration,evaluation,machine-learning,metrics
|
|
14
|
-
Classifier: Development Status ::
|
|
14
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
16
|
Classifier: Intended Audience :: Science/Research
|
|
17
17
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -21,7 +21,7 @@ keywords = [
|
|
|
21
21
|
"binary-classification",
|
|
22
22
|
]
|
|
23
23
|
classifiers = [
|
|
24
|
-
"Development Status ::
|
|
24
|
+
"Development Status :: 5 - Production/Stable",
|
|
25
25
|
"Intended Audience :: Developers",
|
|
26
26
|
"Intended Audience :: Science/Research",
|
|
27
27
|
"License :: OSI Approved :: MIT License",
|
|
@@ -63,6 +63,9 @@ _EXPORTS: dict[str, str] = {
|
|
|
63
63
|
# --- audit_value_bindings ---
|
|
64
64
|
# Flat-module per ADR 0001. Closes #71. Motivated by consumer V1.3.1
|
|
65
65
|
# ADR-080 audit-fix finding (TF-IDF / LoRA 0.974 value mis-binding).
|
|
66
|
+
# BindingKey + slice-aware matching added v1.1.0 (closes #80;
|
|
67
|
+
# consumer-feedback structural fix per pending ADR 0005).
|
|
68
|
+
"BindingKey": "eval_toolkit.audit_value_bindings",
|
|
66
69
|
"Match": "eval_toolkit.audit_value_bindings",
|
|
67
70
|
"ValueBindingsReport": "eval_toolkit.audit_value_bindings",
|
|
68
71
|
"Violation": "eval_toolkit.audit_value_bindings",
|