GIAS lists some operating schools as Open, but proposed to close; the exact status = 'Open' filter silently excluded them from the site even though they still teach and publish results.
Pipeline
dim_school / dim_location now keep both statuses (filters must stay identical — the API inner-joins the dims); accepted_values test updated. Schools drop out automatically when GIAS flips them to Closed (marts fully rebuild every run).
API
status exposed on list items and school_info (via _MAIN_QUERY → SCHOOL_COLUMNS).
UI (mockup options A + E as agreed)
Listings: amber "⚠ Proposed to close" tag in the attributes line of both row components, styled on the existing Selective-tag amber family.
Detail pages (primary + secondary): slim amber notice strip under the header: proposed for closure, formal closure process not necessarily started, check with the local authority before applying.
Single source of truth: isProposedToClose() in lib/utils.ts; no scattered string comparisons.
e2e note: no journey change — the marker only renders for schools carrying the status, and staging data has no stable proposed-to-close URN to pin a fixture on; existing journeys are unaffected (status is additive).
Deploy note: dim_school.status already exists, so the API field and marker logic are live on deploy. The newly included proposed-to-close schools only appear after the next pipeline run rebuilds the dims with the widened filter.
GIAS lists some operating schools as `Open, but proposed to close`; the exact `status = 'Open'` filter silently excluded them from the site even though they still teach and publish results.
**Pipeline**
- `dim_school` / `dim_location` now keep both statuses (filters must stay identical — the API inner-joins the dims); `accepted_values` test updated. Schools drop out automatically when GIAS flips them to `Closed` (marts fully rebuild every run).
**API**
- `status` exposed on list items and `school_info` (via `_MAIN_QUERY` → `SCHOOL_COLUMNS`).
**UI** (mockup options A + E as agreed)
- Listings: amber "⚠ Proposed to close" tag in the attributes line of both row components, styled on the existing Selective-tag amber family.
- Detail pages (primary + secondary): slim amber notice strip under the header: proposed for closure, **formal closure process not necessarily started**, check with the local authority before applying.
- Single source of truth: `isProposedToClose()` in `lib/utils.ts`; no scattered string comparisons.
**Tests**: backend 10/10 pytest (2 new), frontend 40/40 Jest (4 new), `tsc --noEmit` clean.
**e2e note**: no journey change — the marker only renders for schools carrying the status, and staging data has no stable proposed-to-close URN to pin a fixture on; existing journeys are unaffected (`status` is additive).
**Deploy note**: `dim_school.status` already exists, so the API field and marker logic are live on deploy. The newly *included* proposed-to-close schools only appear after the next pipeline run rebuilds the dims with the widened filter.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
These schools are still operating and publish results; they drop out
automatically when GIAS flips them to Closed since marts fully rebuild
each run.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Amber tag in listing rows (option A) and a slim notice strip under the
detail-page header (option E): proposed for closure, formal process not
necessarily started, check with the local authority before applying.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This PR threads a new status field (GIAS establishment status) end-to-end from the pipeline through the API to the frontend, so schools marked "Open, but proposed to close" are kept in the marts instead of being dropped, and the UI surfaces a warning tag/notice for them. The status filter is updated consistently in both dim_school.sql and dim_location.sql (which are inner-joined), the dbt accepted_values test is updated to match, and both backend and frontend have corresponding tests.
✅ No issues found.
## 🤖 AI Code Review (Claude Code)
This PR threads a new `status` field (GIAS establishment status) end-to-end from the pipeline through the API to the frontend, so schools marked "Open, but proposed to close" are kept in the marts instead of being dropped, and the UI surfaces a warning tag/notice for them. The status filter is updated consistently in both dim_school.sql and dim_location.sql (which are inner-joined), the dbt accepted_values test is updated to match, and both backend and frontend have corresponding tests.
✅ No issues found.
tudor
merged commit 7370712888 into main2026-07-08 21:23:24 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
GIAS lists some operating schools as
Open, but proposed to close; the exactstatus = 'Open'filter silently excluded them from the site even though they still teach and publish results.Pipeline
dim_school/dim_locationnow keep both statuses (filters must stay identical — the API inner-joins the dims);accepted_valuestest updated. Schools drop out automatically when GIAS flips them toClosed(marts fully rebuild every run).API
statusexposed on list items andschool_info(via_MAIN_QUERY→SCHOOL_COLUMNS).UI (mockup options A + E as agreed)
isProposedToClose()inlib/utils.ts; no scattered string comparisons.Tests: backend 10/10 pytest (2 new), frontend 40/40 Jest (4 new),
tsc --noEmitclean.e2e note: no journey change — the marker only renders for schools carrying the status, and staging data has no stable proposed-to-close URN to pin a fixture on; existing journeys are unaffected (
statusis additive).Deploy note:
dim_school.statusalready exists, so the API field and marker logic are live on deploy. The newly included proposed-to-close schools only appear after the next pipeline run rebuilds the dims with the widened filter.🤖 Generated with Claude Code
🤖 AI Code Review (Claude Code)
This PR threads a new
statusfield (GIAS establishment status) end-to-end from the pipeline through the API to the frontend, so schools marked "Open, but proposed to close" are kept in the marts instead of being dropped, and the UI surfaces a warning tag/notice for them. The status filter is updated consistently in both dim_school.sql and dim_location.sql (which are inner-joined), the dbt accepted_values test is updated to match, and both backend and frontend have corresponding tests.✅ No issues found.