Context. Our 67-predicate vocabulary silently ages out of the evolving Biolink model (the drift audit found ~51% of legacy edges use predicates Biolink has since folded into qualifiers). We need automated detection that routes any change to a human, never auto-applied.
Built (dormant). scripts/check_biolink_drift.py (read-only monitor) + .github/workflows/biolink-drift.yml (workflow_dispatch only; monthly schedule commented) + docs/biolink_drift_monitor.md.
Guarantees (enforced in code, not just documented):
- Read-only w.r.t. committed files — verified schema + polarity md5 unchanged across runs; a hard guard refuses
--emit-enum onto the committed schema (exit 2).
- Any schema/enum change is delivered as a draft PR on explicit opt-in (
open_draft_pr=true); default off; never auto-committed or auto-merged.
- Polarity signs are never auto-assigned — new/removed predicates are only flagged for a human decision.
Status: built + dormant. Enable the schedule + confirm Actions token scope when ready to go live.
Context. Our 67-predicate vocabulary silently ages out of the evolving Biolink model (the drift audit found ~51% of legacy edges use predicates Biolink has since folded into qualifiers). We need automated detection that routes any change to a human, never auto-applied.
Built (dormant).
scripts/check_biolink_drift.py(read-only monitor) +.github/workflows/biolink-drift.yml(workflow_dispatch only; monthly schedule commented) +docs/biolink_drift_monitor.md.Guarantees (enforced in code, not just documented):
--emit-enumonto the committed schema (exit 2).open_draft_pr=true); default off; never auto-committed or auto-merged.Status: built + dormant. Enable the schedule + confirm Actions token scope when ready to go live.