typesafe-eval 1.0.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.
- typesafe_eval-1.0.0/.gitignore +47 -0
- typesafe_eval-1.0.0/CHANGELOG.md +124 -0
- typesafe_eval-1.0.0/LICENSE +21 -0
- typesafe_eval-1.0.0/PKG-INFO +648 -0
- typesafe_eval-1.0.0/README.md +606 -0
- typesafe_eval-1.0.0/hooks/claude_safety_hook.py +200 -0
- typesafe_eval-1.0.0/hooks/hooks.json +11 -0
- typesafe_eval-1.0.0/pyproject.toml +137 -0
- typesafe_eval-1.0.0/scripts/__init__.py +1 -0
- typesafe_eval-1.0.0/scripts/auto_code_health.py +193 -0
- typesafe_eval-1.0.0/scripts/check_branch_policy.py +81 -0
- typesafe_eval-1.0.0/scripts/feasibility_check.py +581 -0
- typesafe_eval-1.0.0/scripts/measure_noise.py +221 -0
- typesafe_eval-1.0.0/scripts/run_corpus_validation.py +81 -0
- typesafe_eval-1.0.0/scripts/verify_ac.py +682 -0
- typesafe_eval-1.0.0/src/typesafe_eval/__init__.py +56 -0
- typesafe_eval-1.0.0/src/typesafe_eval/api.py +247 -0
- typesafe_eval-1.0.0/src/typesafe_eval/baseline.py +218 -0
- typesafe_eval-1.0.0/src/typesafe_eval/cache.py +156 -0
- typesafe_eval-1.0.0/src/typesafe_eval/cli.py +880 -0
- typesafe_eval-1.0.0/src/typesafe_eval/client.py +1765 -0
- typesafe_eval-1.0.0/src/typesafe_eval/exceptions.py +51 -0
- typesafe_eval-1.0.0/src/typesafe_eval/hook.py +27 -0
- typesafe_eval-1.0.0/src/typesafe_eval/models.py +251 -0
- typesafe_eval-1.0.0/src/typesafe_eval/presets/__init__.py +189 -0
- typesafe_eval-1.0.0/src/typesafe_eval/presets/design_doc.yaml +68 -0
- typesafe_eval-1.0.0/src/typesafe_eval/presets/pr_description.yaml +37 -0
- typesafe_eval-1.0.0/src/typesafe_eval/presets/quality.yaml +24 -0
- typesafe_eval-1.0.0/src/typesafe_eval/presets/safety.yaml +36 -0
- typesafe_eval-1.0.0/src/typesafe_eval/presets/tech_spec.yaml +19 -0
- typesafe_eval-1.0.0/src/typesafe_eval/py.typed +1 -0
- typesafe_eval-1.0.0/src/typesafe_eval/reporter.py +377 -0
- typesafe_eval-1.0.0/src/typesafe_eval/sanitizer.py +956 -0
- typesafe_eval-1.0.0/src/typesafe_eval/validator.py +1540 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/confidential_01.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/confidential_02.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/confidential_03.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/confidential_04.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/confidential_05.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/confidential_06.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/confidential_07.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/confidential_08.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/confidential_09.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/confidential_10.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/confidential_11.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/confidential_12.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/confidential_13.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/confidential_14.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_email_01.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_email_02.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_email_03.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_email_04.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_email_05.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_ip_01.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_ip_02.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_ip_03.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_ip_04.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_ip_05.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_ip_06.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_ip_07.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_label_01.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_label_02.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_label_03.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_label_04.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_phone_01.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_phone_02.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_phone_03.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_phone_04.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_phone_05.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_phone_06.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_secret_01.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_secret_02.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_secret_03.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_secret_04.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_secret_05.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_url_01.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_url_02.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_url_03.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_url_04.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/harmless_url_05.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/confidentiality/labels.yaml +157 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/en.md +57 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/en_without_alternatives.md +51 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/en_without_goal.md +53 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/en_without_impact.md +51 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/en_without_metrics.md +51 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/en_without_migration.md +50 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/en_without_non_goals.md +51 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/en_without_open_questions.md +52 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/en_without_owner_timeline.md +53 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/en_without_risks.md +51 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/en_without_rollback.md +53 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/ja.md +57 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/ja_without_alternatives.md +51 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/ja_without_goal.md +53 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/ja_without_impact.md +51 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/ja_without_metrics.md +51 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/ja_without_migration.md +50 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/ja_without_non_goals.md +51 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/ja_without_open_questions.md +52 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/ja_without_owner_timeline.md +53 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/ja_without_risks.md +51 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/ja_without_rollback.md +53 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/labels_en.yaml +138 -0
- typesafe_eval-1.0.0/tests/fixtures/design_doc/labels_ja.yaml +138 -0
- typesafe_eval-1.0.0/tests/fixtures/leak_sample.txt +1 -0
- typesafe_eval-1.0.0/tests/fixtures/noise_report.json +181 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/ip_01.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/ip_02.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/ip_03.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/ip_04.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/ip_05.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/ip_06.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/ip_07.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/ip_08.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/ip_09.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/ip_10.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/labels.yaml +126 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/phone_01.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/phone_02.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/phone_03.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/phone_04.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/phone_05.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/phone_06.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/phone_07.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/phone_08.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/phone_09.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/phone_10.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/secrets_01.md +4 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/secrets_02.md +4 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/secrets_03.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/secrets_04.md +5 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/secrets_05.md +2 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/secrets_06.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/secrets_07.md +3 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/secrets_08.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/secrets_09.md +3 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/secrets_10.md +2 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/url_01.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/url_02.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/url_03.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/url_04.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/url_05.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/url_06.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/url_07.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/url_08.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/url_09.md +1 -0
- typesafe_eval-1.0.0/tests/fixtures/pii_secrets/url_10.md +1 -0
- typesafe_eval-1.0.0/tests/test_acceptance_cli.py +492 -0
- typesafe_eval-1.0.0/tests/test_adversarial_sanitizer.py +707 -0
- typesafe_eval-1.0.0/tests/test_advisory_gating.py +196 -0
- typesafe_eval-1.0.0/tests/test_agent_integrations.py +177 -0
- typesafe_eval-1.0.0/tests/test_baseline.py +447 -0
- typesafe_eval-1.0.0/tests/test_branch_policy.py +69 -0
- typesafe_eval-1.0.0/tests/test_cache.py +202 -0
- typesafe_eval-1.0.0/tests/test_candidate_noul.py +1309 -0
- typesafe_eval-1.0.0/tests/test_chunking.py +315 -0
- typesafe_eval-1.0.0/tests/test_cli.py +279 -0
- typesafe_eval-1.0.0/tests/test_code_review_skill.py +59 -0
- typesafe_eval-1.0.0/tests/test_concurrency.py +90 -0
- typesafe_eval-1.0.0/tests/test_config_discovery.py +164 -0
- typesafe_eval-1.0.0/tests/test_dry_run.py +173 -0
- typesafe_eval-1.0.0/tests/test_email_pii_acceptance.py +264 -0
- typesafe_eval-1.0.0/tests/test_exclude.py +258 -0
- typesafe_eval-1.0.0/tests/test_formatter_github.py +71 -0
- typesafe_eval-1.0.0/tests/test_git_diff.py +182 -0
- typesafe_eval-1.0.0/tests/test_json_contract.py +202 -0
- typesafe_eval-1.0.0/tests/test_near_threshold.py +494 -0
- typesafe_eval-1.0.0/tests/test_offline_mode.py +70 -0
- typesafe_eval-1.0.0/tests/test_package_build.py +98 -0
- typesafe_eval-1.0.0/tests/test_pair_ci_gating.py +1048 -0
- typesafe_eval-1.0.0/tests/test_position_tracking.py +117 -0
- typesafe_eval-1.0.0/tests/test_presets.py +90 -0
- typesafe_eval-1.0.0/tests/test_properties.py +232 -0
- typesafe_eval-1.0.0/tests/test_public_api.py +237 -0
- typesafe_eval-1.0.0/tests/test_quality_regression.py +306 -0
- typesafe_eval-1.0.0/tests/test_safety_html_comments.py +254 -0
- typesafe_eval-1.0.0/tests/test_safety_signal.py +370 -0
- typesafe_eval-1.0.0/tests/test_sanitizer.py +326 -0
- typesafe_eval-1.0.0/tests/test_schema_command.py +40 -0
- typesafe_eval-1.0.0/tests/test_tech_spec_validation.py +271 -0
- typesafe_eval-1.0.0/tests/test_v051_reliability_and_safety.py +366 -0
- typesafe_eval-1.0.0/tests/test_v060_candidate_features.py +202 -0
- typesafe_eval-1.0.0/tests/test_validate.py +848 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# Distribution / packaging
|
|
7
|
+
.Python
|
|
8
|
+
build/
|
|
9
|
+
develop-eggs/
|
|
10
|
+
dist/
|
|
11
|
+
downloads/
|
|
12
|
+
eggs/
|
|
13
|
+
.eggs/
|
|
14
|
+
lib/
|
|
15
|
+
lib64/
|
|
16
|
+
parts/
|
|
17
|
+
sdist/
|
|
18
|
+
var/
|
|
19
|
+
wheels/
|
|
20
|
+
share/python-wheels/
|
|
21
|
+
*.egg-info/
|
|
22
|
+
.installed.cfg
|
|
23
|
+
*.egg
|
|
24
|
+
MANIFEST
|
|
25
|
+
|
|
26
|
+
# Virtual environments
|
|
27
|
+
.venv/
|
|
28
|
+
env/
|
|
29
|
+
venv/
|
|
30
|
+
ENV/
|
|
31
|
+
|
|
32
|
+
# IDE & OS
|
|
33
|
+
.DS_Store
|
|
34
|
+
.idea/
|
|
35
|
+
.vscode/
|
|
36
|
+
*.swp
|
|
37
|
+
|
|
38
|
+
# Testing
|
|
39
|
+
.pytest_cache/
|
|
40
|
+
.coverage
|
|
41
|
+
htmlcov/
|
|
42
|
+
|
|
43
|
+
# TypeSafe Eval Cache
|
|
44
|
+
.typesafe-eval-cache/
|
|
45
|
+
|
|
46
|
+
# MkDocs
|
|
47
|
+
site/
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## [1.0.0] - 2026-10-06
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **Official Documentation Site (Material for MkDocs)**:
|
|
14
|
+
- Comprehensive documentation portal hosted at GitHub Pages with responsive Material design, dark/light theme, search, and code copying.
|
|
15
|
+
- Complete guides: Installation, Quickstart, CLI Reference, Python API & Types, CI Integrations (GitHub Actions, pre-commit, Claude Code), Presets, and Scientific Noise Calibration.
|
|
16
|
+
- Strict documentation build validation (`mkdocs build --strict`) integrated into CI.
|
|
17
|
+
- **Empirical Noise Calibration Matrix & Fixture Report**:
|
|
18
|
+
- Live empirical evaluation of run-to-run variance on TypeSafe System One (`jev-1.13.0`) across all 5 built-in presets (60 evaluations, 396 pairwise comparisons).
|
|
19
|
+
- Confirmed 99th percentile $|\Delta| = 0.030$ and max $|\Delta| = 0.040$, validating the statistical robustness of the $\pm 0.10$ threshold safety margin.
|
|
20
|
+
- Automated reusable measurement CLI script (`scripts/measure_noise.py`) and artifact export (`tests/fixtures/noise_report.json`).
|
|
21
|
+
- **Comprehensive Production Hardening & Acceptance**:
|
|
22
|
+
- 100% pass across all 18 Real CLI Acceptance Criteria (OS subprocess execution matrix).
|
|
23
|
+
- 533 unit, integration, and property-based tests passing with strict typing (PEP 561 `py.typed`, mypy strict mode).
|
|
24
|
+
- Cleaned up README.md with unified feature catalog and removed temporary release sections.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## [0.9.0] - 2026-10-06
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
- **File Exclusion Patterns & Default Ignores (`--exclude` / `-e`)**:
|
|
32
|
+
- Repeatable `--exclude <pattern>` / `-e <pattern>` CLI flags supporting fnmatch / glob patterns.
|
|
33
|
+
- Project configuration support via `exclude: [...]` in `.typesafe-eval.yaml` and `pyproject.toml` (`[tool.typesafe-eval]`).
|
|
34
|
+
- Automatic filtering of standard build, dependency, and cache directories (`.git`, `node_modules`, `.venv`, `build`, `dist`, etc.) during glob resolution and git diff filtering.
|
|
35
|
+
- Programmatic support via `evaluate_documents(paths, exclude=[...])`.
|
|
36
|
+
- **Offline Rules-Only Mode (`--offline` / `--rules-only`)**:
|
|
37
|
+
- Pure local evaluation relying on deterministic rules (known credential patterns, AWS/Slack/GitHub tokens, free-mail PII) with zero network calls and no required `TYPESAFE_API_KEY`.
|
|
38
|
+
- Ambiguous candidate fallback behavior producing soft informational notices instead of runtime errors.
|
|
39
|
+
- Programmatic support via `evaluate(content, offline=True)` and `evaluate_documents(paths, offline=True)`.
|
|
40
|
+
- **Content-Addressable Result Caching (`--cache` / `--no-cache`)**:
|
|
41
|
+
- Deterministic SHA-256 caching of evaluation results based on content, preset rules, model parameters, and options.
|
|
42
|
+
- Configurable cache location via `--cache-dir` or `TYPESAFE_CACHE_DIR` (default: `.typesafe-eval-cache`).
|
|
43
|
+
- Cache management CLI command: `typesafe-eval cache clear`.
|
|
44
|
+
- Programmatic support via `evaluate_documents(paths, cache=True, cache_dir=...)`.
|
|
45
|
+
- **Line & Column Mapping & GitHub Actions Annotations (`-f github`)**:
|
|
46
|
+
- Exact line and 1-indexed column position tracking for PII, secrets, and structural headings (`Position`, `ViolationItem.line`, `ViolationItem.col`).
|
|
47
|
+
- Native GitHub Actions workflow commands emitted to `stdout` (`::error file=...,line=...,col=...::...` and `::warning file=...,line=...,col=...::...`).
|
|
48
|
+
- **Expanded 18-Item Real CLI Acceptance Criteria (AC) Matrix**:
|
|
49
|
+
- Full end-to-end OS subprocess execution testing all 18 criteria (`scripts/verify_ac.py` and `pytest -v -m acceptance`).
|
|
50
|
+
- Coverage expanded for offline mode (AC 15), result cache (AC 16), GitHub Actions annotations (AC 17), and file exclusions (AC 18).
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## [0.8.0] - 2026-10-05
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
- **Public Python API** (`typesafe_eval`):
|
|
58
|
+
- Top-level programmatic evaluation functions:
|
|
59
|
+
- `evaluate(content: str, preset: str | PresetConfig = "quality", ...) -> DocumentEvalResult`
|
|
60
|
+
- `evaluate_document(path: str | Path, preset: str | PresetConfig = "quality", ...) -> DocumentEvalResult`
|
|
61
|
+
- `evaluate_documents(paths: Sequence[str | Path], preset: str | PresetConfig = "quality", concurrency: int = 4, ...) -> list[DocumentEvalResult]`
|
|
62
|
+
- Re-exported core data models and configuration discovery utilities:
|
|
63
|
+
- `DocumentEvalResult`, `ScoreResult`, `NoulResult`, `ChoiceResult`, `PresetConfig`, `QuestionConfig`
|
|
64
|
+
- `load_preset`, `load_project_config`, `find_project_config`
|
|
65
|
+
- High-performance connection pooling via shared `TypeSafeEvaluator` instance during batch evaluations.
|
|
66
|
+
- **Typed Exception Hierarchy** (`typesafe_eval.exceptions`):
|
|
67
|
+
- `TypeSafeEvalError` (base exception)
|
|
68
|
+
- `ConfigurationError` (subclass of `ValueError`)
|
|
69
|
+
- `AuthenticationError` (subclass of `ValueError`)
|
|
70
|
+
- `RuntimeEvalError` (subclass of `RuntimeError`)
|
|
71
|
+
- `ContentViolationError` (with structured `result` and `results` attributes for batch failure handling)
|
|
72
|
+
- **Strict Typing & PEP 561**:
|
|
73
|
+
- `py.typed` marker file included in `src/typesafe_eval/`.
|
|
74
|
+
- Configured `[tool.mypy]` with `strict = true` across the entire codebase (0 errors across 12 source files).
|
|
75
|
+
- **Hypothesis Property-Based Testing** (`tests/test_properties.py`):
|
|
76
|
+
- Invariant verification for text chunking coverage, chunk size limits, secret/PII token leakage prevention, and score bounds/monotonicity.
|
|
77
|
+
- **Configuration Auto-Discovery**:
|
|
78
|
+
- Automatically searches parent directories for `.typesafe-eval.yaml`, `.typesafe-eval.yml`, or `pyproject.toml` (`[tool.typesafe-eval]`).
|
|
79
|
+
- Supports preset extension (`extends: quality`) and per-question overrides.
|
|
80
|
+
- **JSON Schema Export**:
|
|
81
|
+
- New CLI command `typesafe-eval schema` to export JSON Schema for IDE validation and auto-completion.
|
|
82
|
+
- **Parallel Document Concurrency**:
|
|
83
|
+
- Concurrency flag `-j` / `--jobs` / `--concurrency` in CLI and `evaluate_documents()` API.
|
|
84
|
+
- Thread-safe execution preserving deterministic document ordering in outputs.
|
|
85
|
+
- **Git Diff Evaluation**:
|
|
86
|
+
- `--staged` flag to evaluate only staged git documents (pre-commit gating).
|
|
87
|
+
- `--since <ref>` flag to evaluate documents modified relative to a branch or commit (CI gating).
|
|
88
|
+
- **Advisory Thresholds**:
|
|
89
|
+
- Added `advisory: bool` flag to question configurations allowing non-blocking advisory observations without tripping Exit Code 1.
|
|
90
|
+
- **Adversarial Security Tests**:
|
|
91
|
+
- Comprehensive adversarial PII & secret edge-case test suite (`tests/test_adversarial_sanitizer.py`).
|
|
92
|
+
|
|
93
|
+
### Changed
|
|
94
|
+
- Preserved original document filepaths in evaluation results for both CLI and API consumers.
|
|
95
|
+
- Improved error handling for unreadable or missing document files in batch processing.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## [0.7.0] - 2026-10-04
|
|
100
|
+
|
|
101
|
+
### Added
|
|
102
|
+
- Rich CLI terminal rendering with formatted progress and violation summaries.
|
|
103
|
+
- Real CLI acceptance test runner (`scripts/verify_ac.py`) covering 14 core acceptance criteria.
|
|
104
|
+
- Pre-commit hook graceful skipping when `TYPESAFE_API_KEY` is unset.
|
|
105
|
+
- Deterministic exit code precedence (Exit Code 1 over Exit Code 3).
|
|
106
|
+
- Scaffolding CLI command (`typesafe-eval init`).
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## [0.6.0] - 2026-10-03
|
|
111
|
+
|
|
112
|
+
### Added
|
|
113
|
+
- Support for candidate-level Noul probability queries and calibration thresholds.
|
|
114
|
+
- Fine-grained PII and credential classifiers with zero-raw-leakage masking guarantees.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## [0.5.0] - 2026-10-02
|
|
119
|
+
|
|
120
|
+
### Added
|
|
121
|
+
- Agent-agnostic JSON output contract (`schema_version: "1.0"`).
|
|
122
|
+
- Pure `stdout` JSON stream separation for seamless integration with `jq`.
|
|
123
|
+
- Claude Code integration plugin with PostToolUse safety hooks.
|
|
124
|
+
- Comprehensive autonomous agent guidance documentation (`AGENTS.md`).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 s-0-a-r
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|