types-drift.yml re-runs get-types and then decides with:
if ! git diff --exit-code shard_core/data_model/backend; then
git diff reports changes to tracked files only. A model file that exists in the controller but has never been vendored here arrives as an untracked file, git diff says nothing about it, and the job passes.
So the check catches a changed model and misses a new one — and a new model is the case where shard_core is missing a type entirely.
Evidence
Two controller model files have never been vendored:
email_verification_model.py, added to the controller on 2026-08-30 (2e25ec4)
pricing_model.py, added on 2026-09-02 (8a863c4)
PR #229 merged here on 2026-09-08, after both, and its drift-check was green. Running just get-types against controller origin/main today produces both as untracked files.
They are being vendored as part of the Cloud enum sync, so the immediate drift is closed. The blind spot is not.
Fix
Have the job fail on any difference including untracked files. Either:
git add -A shard_core/data_model/backend
if ! git diff --cached --exit-code shard_core/data_model/backend; then
or check git status --porcelain shard_core/data_model/backend is empty, which covers modified, added and deleted in one go and gives a clearer error listing.
Worth deciding at the same time whether a deleted controller model should fail the check too. get-types does rm -rf on the target directory before copying, so a model removed upstream disappears here as a tracked deletion — which git diff does catch. That half works today.
The same shape exists in the controller
FreeshardBase/freeshard-controller's .github/workflows/checkson-drift.yml guards checkson/data_model/backend with the identical git diff --exit-code line and has the identical blind spot. Fixing only one leaves the other. Filed here because this is where it was found; the controller side needs its own issue or a note on this one.
types-drift.ymlre-runsget-typesand then decides with:git diffreports changes to tracked files only. A model file that exists in the controller but has never been vendored here arrives as an untracked file,git diffsays nothing about it, and the job passes.So the check catches a changed model and misses a new one — and a new model is the case where shard_core is missing a type entirely.
Evidence
Two controller model files have never been vendored:
email_verification_model.py, added to the controller on 2026-08-30 (2e25ec4)pricing_model.py, added on 2026-09-02 (8a863c4)PR #229 merged here on 2026-09-08, after both, and its drift-check was green. Running
just get-typesagainst controllerorigin/maintoday produces both as untracked files.They are being vendored as part of the
Cloudenum sync, so the immediate drift is closed. The blind spot is not.Fix
Have the job fail on any difference including untracked files. Either:
or check
git status --porcelain shard_core/data_model/backendis empty, which covers modified, added and deleted in one go and gives a clearer error listing.Worth deciding at the same time whether a deleted controller model should fail the check too.
get-typesdoesrm -rfon the target directory before copying, so a model removed upstream disappears here as a tracked deletion — whichgit diffdoes catch. That half works today.The same shape exists in the controller
FreeshardBase/freeshard-controller's.github/workflows/checkson-drift.ymlguardscheckson/data_model/backendwith the identicalgit diff --exit-codeline and has the identical blind spot. Fixing only one leaves the other. Filed here because this is where it was found; the controller side needs its own issue or a note on this one.