All notable changes to this project are documented in this file.
The format follows Keep a Changelog, and this project adheres to Semantic Versioning.
Because compliance reports may be filed on the basis of this tool's output, any change that alters a reported numerical value is treated as breaking, regardless of how small.
0.1.1 - 2026-08-05
Packaging and infrastructure only. No functional or numerical change — every statistical method produces byte-identical output to 0.1.0.
.zenodo.json, so the Zenodo archive record carries curated title, authorship, description, and keywords rather than values inferred from the repository.
- License metadata rendered as the full MIT license text.
license = { file = "LICENSE" }embedded the entire license body into the distribution'sLicensefield, which PyPI displayed verbatim. Replaced with the PEP 639 SPDX expressionlicense = "MIT"pluslicense-files, producingLicense-Expression: MITunder metadata version 2.4. The now-redundantLicense :: OSI Approved :: MIT Licenseclassifier is removed, as PEP 639 disallows pairing the two.
- GitHub Actions bumped off Node 20, which is deprecated and was being force-run on
Node 24:
checkoutv4 → v7,setup-pythonv5 → v7,upload-artifactv4 → v7,download-artifactv4 → v8. - Build backend pinned to
hatchling>=1.27for PEP 639 support.
0.1.0 - 2026-08-05
First packaged release.
avs_framework.AVSAdverseImpactAudit— adverse impact analysis implementing the four-fifths rule (29 C.F.R. 1607.4D), the pooled two-proportion Z-test, and Fisher's exact test, with four-level severity classification.avs_framework.AVSNameSwapTest— black-box name-swap bias test for resume scoring models, using fully synthetic resumes.avs_framework.AVSDriftDetector— chi-square demographic composition drift, Kolmogorov-Smirnov score distribution drift, and per-group selection rate drift.AVSAdverseImpactAudit.min_expected_cell_count— public helper exposing the expected-cell-count gate that selects between the normal approximation and Fisher's exact test.- Distribution on PyPI as
avs-framework; installable withpip install avs-framework. - Test suite with 100% statement coverage, run against Python 3.10–3.13 in CI.
CITATION.cfffor machine-readable citation metadata.
-
Fisher's exact test selection gate. The gate previously evaluated expected cell counts using the reference group's selection rate and examined only the comparison group's two cells. It now uses the pooled selection proportion across all four cells of the 2×2 table, which is the conventional criterion. This means small reference groups are no longer masked by large comparison groups, and some analyses on small samples will now correctly report Fisher's exact p-values where they previously reported normal-approximation p-values.
-
NumPy scalars leaked through the public API.
AuditFindingfields and the dictionaries returned byAVSDriftDetectorcontainednumpy.bool_andnumpy.float64rather than Python natives, which made results fail to serialize withjson.dumpsand caused identity comparisons such asresult is Trueto returnFalse. All public return values are now Python scalars. -
Division by zero in demographic drift detection. A category present in the current period but absent from the baseline produced an expected count of zero and emitted a
RuntimeWarningfrom the chi-square computation. The appearance of a new category is now reported directly as significant drift, and empty periods return a well-defined non-drift result.
- Package restructured to an installable
src/avs_framework/layout. Imports change fromfrom src.avs_audit import ...tofrom avs_framework import .... - Modules renamed within the package:
avs_audit→audit,avs_security→security,avs_drift→drift. - Minimum supported Python raised to 3.10.