You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Surfaced by @smqd19 on mlflow/mlflow#23369: HPO sweeps at 50k runs/day
repeat 5 identical descriptive PRML tags per-run. Wasteful.
This release adds MLFLOW_FALSIFY_TAG_SCOPE=run|experiment. The
audit-essential commitment (prml.manifest_hash, prml.manifest_path)
stays per-run. The 5 descriptive fields (metric, comparator, threshold,
dataset_id, version) lift to experiment level via the new
mlflow_falsify.tag_experiment() helper.
Backward compatible: default scope is "run", emitting all 7 tags
per-run exactly as v0.1.x did.
Closes#1.
All notable changes to mlflow-falsify will be documented in this file. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
4
+
5
+
## [0.2.0] - 2026-05-23
6
+
7
+
### Added
8
+
-`MLFLOW_FALSIFY_TAG_SCOPE` environment variable. When set to `experiment`, only `prml.manifest_hash` and `prml.manifest_path` attach per-run; the 5 descriptive tags (metric, comparator, threshold, dataset_id, version) are lifted off-run.
9
+
-`mlflow_falsify.tag_experiment(experiment=None, *, manifest_path=None)` helper. Sets the descriptive PRML tags at experiment level via `MlflowClient.set_experiment_tag`. Idempotent.
10
+
- README section: "HPO sweeps and tag scope".
11
+
- 4 new unit tests covering default scope, experiment scope, unknown-value fallback, and explicit-path computation.
12
+
13
+
### Why
14
+
Surfaced by [@smqd19](https://github.com/smqd19) on [mlflow/mlflow#23369](https://github.com/mlflow/mlflow/discussions/23369): at 50k HPO runs/day, emitting 5 identical descriptive tags per-run is wasteful. The audit-essential commitment (`prml.manifest_hash`) must stay per-run; the descriptive fields can live at experiment scope. Tracks [#1](https://github.com/studio-11-co/mlflow-falsify/issues/1).
15
+
16
+
### Backward compat
17
+
Default behaviour unchanged. Without setting the env var, all 7 tags attach per-run exactly as in v0.1.x.
18
+
19
+
## [0.1.3] - 2026-05-20
20
+
- README: switch DOI badge to shields.io format for reliable rendering.
21
+
- README: add Audit & compliance crosswalks section (EU AI Act Art. 12, NIST AI RMF, ISO/IEC 42001).
22
+
23
+
## [0.1.2] - 2026-05-16
24
+
- CI: defer `FalsifyRunContextProvider` import to break MLflow circular load during entry-point discovery.
25
+
- Add OpenSSF Scorecard workflow.
26
+
27
+
## [0.1.1] - 2026-05-15
28
+
- First public release on PyPI.
29
+
- 5 unittests including TV-001 conformance assertion against the PRML v0.1 normative vector.
30
+
- Discovery via standard `mlflow.run_context_provider` entry point.
31
+
- Canonicalize logic vendored byte-for-byte from `falsify` v0.1.4.
Copy file name to clipboardExpand all lines: README.md
+21Lines changed: 21 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -41,6 +41,27 @@ When a `.prml.yaml` or `prml.yaml` is found in the current directory or any ance
41
41
42
42
Missing or malformed fields are silently skipped. The provider never raises into your run.
43
43
44
+
## HPO sweeps and tag scope
45
+
46
+
In an HPO sweep the same PRML claim repeats across thousands of runs, so emitting the 5 descriptive tags per-run becomes pure tag noise. As of v0.2.0 the plugin supports lifting them to experiment level:
47
+
48
+
```bash
49
+
export MLFLOW_FALSIFY_TAG_SCOPE=experiment
50
+
```
51
+
52
+
```python
53
+
import mlflow_falsify
54
+
55
+
mlflow.set_experiment("credit-scorer-hpo")
56
+
mlflow_falsify.tag_experiment() # idempotent; sets metric/comparator/threshold/dataset_id/version once
57
+
58
+
for params in hpo_grid:
59
+
with mlflow.start_run():
60
+
...# only prml.manifest_hash and prml.manifest_path attach per-run
61
+
```
62
+
63
+
Default behaviour (`MLFLOW_FALSIFY_TAG_SCOPE=run` or unset) is unchanged: all 7 tags attach per-run, backward-compatible with v0.1.x.
64
+
44
65
## Why this matters
45
66
46
67
-**EU AI Act Article 12 evidence layer.** Every logged run carries a tamper-evident pointer to the claim it was meant to test.
0 commit comments