feat!: track MLflow in SQLite and harden the canonical gate - #129
Merged
Conversation
BREAKING CHANGE: MlflowService now defaults to `sqlite:///mlflow.db` for both tracking and registry instead of the `./mlruns` file store, and the MLFLOW_ALLOW_FILE_STORE opt-in is gone. Existing local runs are not migrated; point MLFLOW_TRACKING_URI at the old store or start fresh. MLflow 3 put the filesystem store in maintenance mode, so the package now uses the SQLAlchemy backend the model registry is actually designed for. Tests copy a session-scoped, already-migrated database instead of paying Alembic migrations per test (7s -> 0.07s each). Gate changes: - add the canonical `all` task; CI runs `mise run all` and nothing else - add check:actions (actionlint + zizmor) with .github/zizmor.yml - add check:dockerfile (hadolint); pin the uv image and use a numeric uid/gid - fix check:scan: `trivy config .` ignored the committed policy whenever TRIVY_CONFIG was exported and only ran the misconfig scanner - pip-audit skips the editable project and caches under .cache - raise the coverage gate to 100%, which is what the suite actually reaches - lefthook priorities follow the 10/20/30 convention - add a weekly full-history security workflow; harden ci.yml and cd.yml - group Dependabot updates and emit the chore(deps) prefix cliff.toml skips - commit mise.lock so CI installs and caches the pinned toolchain Dependencies are re-locked to latest stable, which clears 25 known vulnerabilities across aiohttp, cryptography, gitpython, and pyasn1. MLflow still declares cryptography<50 while the fix for PYSEC-2026-3552 ships in 50.0.0, so a documented uv override installs the patched library and the test suite plus every MLflow job prove it works. Also: untrack an accidentally committed 790 KB mlflow.db, drop the stale vendored copy of the Agent Skills under .gemini/skills that had drifted back to teaching just and pre-commit, and repoint dead README links.
This was referenced Aug 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Moves MLflow off the deprecated local file store onto a SQLite backend, re-locks every dependency to latest stable, and brings the repository up to the current canonical stack (single
mise run allgate, workflow and Dockerfile linting, real filesystem scanning, committedmise.lock).Breaking:
MlflowServicenow defaults tosqlite:///mlflow.dbfor tracking and registry. TheMLFLOW_ALLOW_FILE_STOREopt-in is gone. Existing./mlrunsruns are not migrated.Why
v5.0.0failedmise run checktoday with 25 known vulnerabilities across 4 transitive dependencies — with zero code changes. The lockfile had simply aged.check:scanwas not scanning:trivy config .silently deferred to anyTRIVY_CONFIGexported in the user's shell, andconfigruns only the misconfig scanner, so 3 of the 4 scanners declared intrivy.yamlnever ran.How
MlflowServicedefaults to SQLite; tests copy a session-scoped, pre-migrated database instead of paying MLflow's Alembic migration per test (7s → 0.07s each).alltask composes format → check → test → build; CI runs that one task.check:actions(actionlint + zizmor, with.github/zizmor.ymlencoding the tag-pinning policy) andcheck:dockerfile(hadolint).check:scan→trivy --config trivy.yaml fs .;check:vulnskips the editable project and caches.cryptographyis overridden past MLflow's stale<50cap so the PYSEC-2026-3552 fix is installed; the suite and every MLflow job are the proof.security.yml; hardenedci.yml/cd.yml; grouped Dependabot with thechore(deps)prefixcliff.tomlalready skipped.mlflow.db; deleted the stale vendored copy of the Agent Skills under.gemini/skills/, which had drifted back to teachingjustandpre-commit.Test plan
mise run all— green (format, 8 checks, 45 passed / 3 xfailed at 100% coverage, wheel + sdist).lefthook run pre-commit --all-files— green.mise run project— all six MLflow jobs run end to end on SQLite; model registered as version 1 and promoted to theChampionalias.pip-audit— no known vulnerabilities.