Skip to content

Enable Phase-2 id↔label enforcement (blocking gate)#62

Merged
realmarcin merged 2 commits into
mainfrom
followup/phase2-blocking-gate
Jun 14, 2026
Merged

Enable Phase-2 id↔label enforcement (blocking gate)#62
realmarcin merged 2 commits into
mainfrom
followup/phase2-blocking-gate

Conversation

@realmarcin

Copy link
Copy Markdown
Contributor

What

Flips the label-correspondence CI from report-only (Phase 1) to a blocking gate (Phase 2), now that the id↔label drift backlog is zero.

Why now

Prereqs are all merged: recipe ID_NOT_FOUND → 0 (#56), kg_fallback cleaned (#59), organism/env labels canonical + jcm.grmd ignored (#53/#57), and the SSSOM generator emits canonical object labels (#58). just validate-products (Engine B) was verified locally at exit 0.

Changes

  • CI (label-correspondence.yaml): build the SSSOM product (it's gitignored, so not checked in) → upload the drift report (non-blocking triage artifact) → run just validate-products as a blocking step. Fails on any ERROR-class verdict (MISMATCH / ID_NOT_FOUND / EMPTY_LABEL / MISSING_COLUMN / MISSING_GLOB / UNKNOWN_PREFIX) across recipe YAMLs + the SSSOM product.
  • qc recipe: build SSSOM + validate-products (local Phase-2 gate).
  • NEXT_TASKS.md item 1 marked done.

Engine A vs B

Engine B (single-process, ~2-3 min) is the gate. validate-terms-all (per-file linkml-term-validator, Engine A) is deliberately not wired into CI/qc — it reloads schema+OAK per file (~8 h over ~16k files, measured) and re-checks the same canonical-label surface Engine B already enforces in one pass. It stays a targeted dev tool.

This PR's own CI exercises the new blocking gate.

🤖 Generated with Claude Code

realmarcin and others added 2 commits June 14, 2026 00:35
The label-correspondence CI was report-only. Now that recipe id↔label drift is
zero (regroundings/de-groundings + canonical organism/env labels + jcm.grmd
ignored) and the SSSOM generator emits canonical object labels, flip the gate to
blocking:

- CI workflow: build the SSSOM product (output/ is gitignored), upload the drift
  report (non-blocking triage artifact), then run `just validate-products`
  (Engine B) as a BLOCKING step — fails on any ERROR-class verdict across recipe
  YAMLs + the SSSOM product.
- qc recipe: build SSSOM + validate-products (local Phase-2 gate).
- NEXT_TASKS.md item 1 marked done.

Engine B (single-process) is the gate. validate-terms-all (per-file Engine A) is
deliberately NOT wired in — it reloads schema+OAK per file (~hours over ~16k
files) and re-checks the same canonical-label surface Engine B covers in one pass.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The label-correspondence job ran the full corpus+OAK validator TWICE (drift
report + enforce), ~doubling the job time on every green run. Run the blocking
`validate-products` once; regenerate + upload the drift-report artifact only on
failure, where it's actually needed for triage.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@realmarcin realmarcin merged commit cc7b380 into main Jun 14, 2026
3 checks passed
@realmarcin realmarcin deleted the followup/phase2-blocking-gate branch June 14, 2026 07:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant