Tudor and Claude Fable 5
7499e7f557
ci: stop deploy pipeline at staging; production promotion becomes manual
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB
2026-07-13 08:35:39 +01:00
Tudor and Claude Fable 5
dd0ff7d0c2
docs: plan for staged production promotion
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB
2026-07-13 08:34:32 +01:00
Tudor and Claude Fable 5
6f925abf6b
fix(pipeline): harden banding against EES sentinels; diagnostic cleanups
...
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 9m40s
PR Checks / Backend Smoke (pull_request) Successful in 7s
PR Checks / Build Backend (no push) (pull_request) Successful in 12s
PR Checks / Build Frontend (no push) (pull_request) Successful in 41s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 46s
PR Checks / AI Code Review (Claude) (pull_request) Failing after 3m17s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB
2026-07-13 08:22:34 +01:00
Tudor and Claude Fable 5
03518520f8
fix(pipeline): unknown safeguarding values parse to NULL, not "not met"
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB
2026-07-12 22:17:11 +01:00
Tudor and Claude Fable 5
c2ed002118
docs(pipeline): record Task 7 report-card grade value sample + collision check
...
Evidence trail for the rc_* mapping in the prior commit: real value_counts()
over the 7 MI report-card columns, confirming the 5-value grade vocabulary
and that 'Achievement'/'Safeguarding standards' match by exact string only
(no legacy OEIF column accidentally consumed).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB
2026-07-12 22:13:03 +01:00
Tudor and Claude Fable 5
02084e427c
feat(pipeline): extract Ofsted report-card judgements (rc_* columns)
...
Wires the tap TODO in stg_ofsted_inspections.sql: maps the 7 confirmed
report-card MI columns (Safeguarding standards, Inclusion, Curriculum
and teaching, Achievement, Attendance and behaviour, Personal
development and wellbeing, Leadership and governance) into rc_*
fields, parsed via the new parse_report_card_grade macro against
real sampled grade values (Exceptional/Strong standard/Expected
standard/Needs attention/Urgent improvement). rc_safeguarding_met
becomes boolean from Met/Not met. rc_early_years/rc_sixth_form have
no MI column yet and are intentionally omitted from COLUMN_PRIORITY,
staying NULL.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB
2026-07-12 22:12:33 +01:00
Tudor and Claude Fable 5
bee63a7836
docs(spec): 2021/22 school-level KS2 is a permanent DfE source gap, not a pipeline task
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB
2026-07-12 22:10:05 +01:00
Tudor and Claude Fable 5
fc21783298
chore(pipeline): verify 2021/22 legacy KS2 archive compatibility
...
DfE never published school-level KS2 2021/22 data publicly (confirmed via
EES release notes and by walking the Compare School Performance download
wizard, which has no ks2 checkbox for 2021-2022, same as the COVID-cancelled
2020-2021 year). No archive exists to verify column headers against or
upload to the filebrowser; Task 6 is blocked at the source-data level.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB
2026-07-12 22:08:36 +01:00
Tudor and Claude Fable 5
ccd8e73fe8
fix(pipeline): include 2015/16 national averages
...
Widen the year filter in stg_ees_ks2_national.sql from >= 201617 to
>= 201516 so the England national-averages line no longer starts a
year late; the catalogue CSV has a real, comparable 201516 row (2015/16
was the first year of the current expected-standard tests, so it's the
correct floor).
GPS/science/scaled-score national columns confirmed present at source
with correct mapping; prod NULLs are stale raw data, backfilled by the
next extract run. No _KS2_NATIONAL_COL_MAP change accompanies this fix.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB
2026-07-12 22:02:28 +01:00
Tudor and Claude Fable 5
5f1b6adb44
fix(pipeline): align SEN column order across KS4 union branches
...
int_ks4_with_lineage.sql unions stg_ees_ks4 and stg_legacy_ks4 via
`select *`, which PostgreSQL aligns positionally. stg_legacy_ks4 listed
sen_support_pct before sen_ehcp_pct while stg_ees_ks4 lists sen_ehcp_pct
before sen_support_pct, swapping the two values for legacy-sourced rows
in marts.fact_ks4_performance. Reordered stg_legacy_ks4's final select
to match.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB
2026-07-12 22:00:15 +01:00
Tudor and Claude Fable 5
34a5de2687
feat(pipeline): Progress 8 banding and KS4 disadvantage gaps in marts
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB
2026-07-12 21:55:34 +01:00
Tudor
af43b291e7
feat(pipeline): KS2 progress confidence intervals and writing working-towards
2026-07-12 21:34:59 +01:00
Tudor
5a94f470e1
feat(pipeline): admissions preference breakdown and cross-LA demand in marts
2026-07-12 21:30:50 +01:00
Tudor
0fe1ea0d6a
chore(pipeline): diagnostic for compare-screen data gaps
2026-07-12 21:25:00 +01:00
Tudor and Claude Fable 5
297bdbd12e
docs: compare-screen redesign spec, expert review, and data-foundation plan
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0146VHeLAWjDVE2B5uU67jCB
2026-07-12 21:19:53 +01:00
tudor
58e90fef61
Merge pull request 'fix(api): blank-name GIAS sentinel codes map to empty string, not Unknown(n)' ( #27 ) from fix/gias-blank-name-codes into main
...
Deploy (staging -> E2E gate -> production) / Build Backend (FastAPI) (push) Successful in 20s
Deploy (staging -> E2E gate -> production) / Build Frontend (Next.js) (push) Successful in 54s
Deploy (staging -> E2E gate -> production) / Build Pipeline (Meltano + dbt + Airflow) (push) Successful in 1m5s
Deploy (staging -> E2E gate -> production) / Deploy to Staging (push) Successful in 1s
Deploy (staging -> E2E gate -> production) / E2E Journeys against Staging (push) Successful in 41s
Deploy (staging -> E2E gate -> production) / Promote to Production (push) Successful in 9s
Reviewed-on: #27
2026-07-09 21:21:08 +00:00
Tudor and Claude Fable 5
3710529e49
fix(api): map blank-name GIAS sentinel codes to empty string, not Unknown
...
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 9m40s
PR Checks / Backend Smoke (pull_request) Successful in 7s
PR Checks / Build Backend (no push) (pull_request) Successful in 20s
PR Checks / Build Frontend (no push) (pull_request) Successful in 54s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 37s
PR Checks / AI Code Review (Claude) (pull_request) Successful in 2m35s
ReligiousCharacter 99 (~4k schools) and AdmissionsPolicy 9 (~5.6k) carry a
code with a blank name in the GIAS CSV; the generator skipped them so they
hit the Unknown(<code>) path — wrongly triggering the Faith-priority tag
and polluting filters. Blank-only codes now map to "" (byte-identical to
the old name pipeline); accepted_values lists extended to match the seed.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-09 22:04:53 +01:00
tudor
159207c6f5
Merge pull request 'fix(pipeline): add the missing backend cache-invalidation step to the data DAGs' ( #26 ) from fix/daily-dag-cache-invalidation into main
...
Deploy (staging -> E2E gate -> production) / Build Backend (FastAPI) (push) Successful in 13s
Deploy (staging -> E2E gate -> production) / Build Frontend (Next.js) (push) Successful in 51s
Deploy (staging -> E2E gate -> production) / Build Pipeline (Meltano + dbt + Airflow) (push) Successful in 1m3s
Deploy (staging -> E2E gate -> production) / Deploy to Staging (push) Successful in 1s
Deploy (staging -> E2E gate -> production) / E2E Journeys against Staging (push) Successful in 43s
Deploy (staging -> E2E gate -> production) / Promote to Production (push) Successful in 9s
Reviewed-on: #26
2026-07-09 20:41:42 +00:00
Tudor and Claude Fable 5
d677b54533
fix(pipeline): cache invalidation for IDACI DAG too; curl timeouts
...
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 9m37s
PR Checks / Backend Smoke (pull_request) Successful in 6s
PR Checks / Build Backend (no push) (pull_request) Successful in 18s
PR Checks / Build Frontend (no push) (pull_request) Successful in 48s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 35s
PR Checks / AI Code Review (Claude) (pull_request) Successful in 1m40s
Addresses AI-review findings: the annual IDACI DAG also rebuilds a mart
(fact_deprivation) and needs the reload; curl gets connect/max timeouts
so an unreachable backend fails fast instead of hanging the task.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-09 21:26:45 +01:00
Tudor and Claude Fable 5
c353e36072
fix(pipeline): actually invalidate the backend cache after data rebuilds
...
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 9m40s
PR Checks / Backend Smoke (pull_request) Successful in 6s
PR Checks / Build Backend (no push) (pull_request) Successful in 16s
PR Checks / Build Frontend (no push) (pull_request) Successful in 51s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 36s
PR Checks / AI Code Review (Claude) (pull_request) Failing after 1m20s
The daily/monthly/annual DAG docstring promised an Invalidate Cache step
that never existed — after a marts rebuild the backend kept serving its
startup-cached (possibly empty) DataFrame until a container restart.
Add a POST /api/admin/reload task at the end of each pipeline DAG,
mirroring the sitemap DAG's admin-call pattern.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-09 21:12:01 +01:00
tudor
d9223a6d6e
Merge pull request 'fix(api): legacy name-column fallback when marts predate the GIAS code migration' ( #25 ) from fix/gias-legacy-fallback into main
...
Deploy (staging -> E2E gate -> production) / Build Backend (FastAPI) (push) Successful in 19s
Deploy (staging -> E2E gate -> production) / Build Frontend (Next.js) (push) Successful in 54s
Deploy (staging -> E2E gate -> production) / Build Pipeline (Meltano + dbt + Airflow) (push) Successful in 12s
Deploy (staging -> E2E gate -> production) / Deploy to Staging (push) Successful in 1s
Deploy (staging -> E2E gate -> production) / E2E Journeys against Staging (push) Failing after 4m45s
Deploy (staging -> E2E gate -> production) / Promote to Production (push) Has been skipped
Reviewed-on: #25
2026-07-09 19:13:55 +00:00
Tudor and Claude Fable 5
74ca76d150
fix(api): match missing-column fallbacks on the DBAPI error, not the statement
...
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 9m41s
PR Checks / Backend Smoke (pull_request) Successful in 6s
PR Checks / Build Backend (no push) (pull_request) Successful in 20s
PR Checks / Build Frontend (no push) (pull_request) Successful in 53s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 10s
PR Checks / AI Code Review (Claude) (pull_request) Successful in 2m41s
str(ProgrammingError) embeds the full SQL, which contains every column
name — the substring check matched any error and could take the wrong
retry branch. Parse the missing column from exc.orig instead.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-09 19:29:58 +01:00
Tudor and Claude Fable 5
4b75152ee0
fix(api): fall back to legacy name-column query when marts predate code migration
...
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 9m41s
PR Checks / Backend Smoke (pull_request) Successful in 6s
PR Checks / Build Backend (no push) (pull_request) Successful in 19s
PR Checks / Build Frontend (no push) (pull_request) Successful in 47s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 10s
PR Checks / AI Code Review (Claude) (pull_request) Failing after 3m8s
Closes the deploy window flagged by CI review — the backend now works
against both the old (name) and new (code) mart schemas.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-09 14:48:06 +01:00
tudor
84dfc6c1bb
Merge pull request 'feat: GIAS classification fields stored as codes, translated in code' ( #24 ) from feat/gias-code-dictionaries into main
...
Deploy (staging -> E2E gate -> production) / Build Backend (FastAPI) (push) Successful in 19s
Deploy (staging -> E2E gate -> production) / Build Frontend (Next.js) (push) Successful in 52s
Deploy (staging -> E2E gate -> production) / Build Pipeline (Meltano + dbt + Airflow) (push) Successful in 1m16s
Deploy (staging -> E2E gate -> production) / Deploy to Staging (push) Successful in 1s
Deploy (staging -> E2E gate -> production) / E2E Journeys against Staging (push) Failing after 4m47s
Deploy (staging -> E2E gate -> production) / Promote to Production (push) Has been skipped
Reviewed-on: #24
2026-07-09 13:32:43 +00:00
Tudor and Claude Fable 5
c26755750d
docs: mark GIAS code dictionaries spec implemented
...
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 9m38s
PR Checks / Backend Smoke (pull_request) Successful in 8s
PR Checks / Build Backend (no push) (pull_request) Successful in 22s
PR Checks / Build Frontend (no push) (pull_request) Successful in 47s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 54s
PR Checks / AI Code Review (Claude) (pull_request) Failing after 3m58s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-09 14:12:52 +01:00
Tudor and Claude Fable 5
254a19eb42
fix(pipeline): run gias_code_names seed + drift test in the daily DAG
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-09 14:11:31 +01:00
Tudor and Claude Fable 5
4f6b2b0edc
feat(pipeline): typesense sync translates GIAS codes before indexing
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-09 10:51:40 +01:00
Tudor and Claude Fable 5
f1a013ec01
feat(api): translate GIAS codes to names at the query boundary
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-09 10:48:53 +01:00
Tudor and Claude Fable 5
fa6c929a3a
feat(pipeline): dim_school/dim_location store GIAS codes; seed drift test
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-09 10:45:15 +01:00
Tudor and Claude Fable 5
d898e6279b
feat(pipeline): ingest GIAS code columns; staging exposes codes not names
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-09 10:41:52 +01:00
Tudor and Claude Fable 5
e188c2ff4b
feat: GIAS code->name dictionaries generated from live bulk CSV
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-09 10:38:19 +01:00
Tudor and Claude Fable 5
08bd86db05
docs: implementation plan for GIAS code dictionaries
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-09 10:10:26 +01:00
Tudor and Claude Fable 5
1ae5762a0a
docs: design spec for GIAS code dictionaries (codes in marts, names in code)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-09 09:55:53 +01:00
tudor
bc87e56545
Merge pull request 'fix(ui): shorten proposed-to-close notice copy' ( #23 ) from fix/proposed-to-close-copy into main
...
Deploy (staging -> E2E gate -> production) / Build Backend (FastAPI) (push) Successful in 12s
Deploy (staging -> E2E gate -> production) / Build Frontend (Next.js) (push) Successful in 48s
Deploy (staging -> E2E gate -> production) / Build Pipeline (Meltano + dbt + Airflow) (push) Successful in 12s
Deploy (staging -> E2E gate -> production) / Deploy to Staging (push) Successful in 1s
Deploy (staging -> E2E gate -> production) / E2E Journeys against Staging (push) Successful in 38s
Deploy (staging -> E2E gate -> production) / Promote to Production (push) Successful in 9s
Reviewed-on: #23
2026-07-08 21:52:56 +00:00
Tudor and Claude Fable 5
4522cbf645
fix(ui): shorten proposed-to-close notice copy
...
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 9m38s
PR Checks / Backend Smoke (pull_request) Successful in 7s
PR Checks / Build Backend (no push) (pull_request) Successful in 11s
PR Checks / Build Frontend (no push) (pull_request) Successful in 41s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 10s
PR Checks / AI Code Review (Claude) (pull_request) Successful in 27s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-08 22:51:32 +01:00
tudor
7370712888
Merge pull request 'feat: include and mark 'Open, but proposed to close' schools' ( #22 ) from feat/proposed-to-close-schools into main
...
Deploy (staging -> E2E gate -> production) / Build Backend (FastAPI) (push) Successful in 20s
Deploy (staging -> E2E gate -> production) / Build Frontend (Next.js) (push) Successful in 55s
Deploy (staging -> E2E gate -> production) / Build Pipeline (Meltano + dbt + Airflow) (push) Successful in 1m10s
Deploy (staging -> E2E gate -> production) / Deploy to Staging (push) Successful in 1s
Deploy (staging -> E2E gate -> production) / E2E Journeys against Staging (push) Successful in 41s
Deploy (staging -> E2E gate -> production) / Promote to Production (push) Successful in 10s
Reviewed-on: #22
2026-07-08 21:23:23 +00:00
Tudor and Claude Fable 5
45ab479062
feat(ui): mark proposed-to-close schools in listings and detail pages
...
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 9m46s
PR Checks / Backend Smoke (pull_request) Successful in 7s
PR Checks / Build Backend (no push) (pull_request) Successful in 21s
PR Checks / Build Frontend (no push) (pull_request) Successful in 50s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 35s
PR Checks / AI Code Review (Claude) (pull_request) Successful in 1m1s
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 >
2026-07-08 22:05:55 +01:00
Tudor and Claude Fable 5
6f602f4a9e
feat(api): expose GIAS establishment status on school payloads
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-08 22:05:55 +01:00
Tudor and Claude Fable 5
de81e9cdbd
feat(pipeline): include 'Open, but proposed to close' schools in dims
...
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 >
2026-07-08 21:54:08 +01:00
tudor
45c68b60b4
Merge pull request 'feat: drive sixth-form separation from GIAS OfficialSixthForm flag' ( #21 ) from feat/gias-sixth-form-flag into main
...
Deploy (staging -> E2E gate -> production) / Build Backend (FastAPI) (push) Successful in 20s
Deploy (staging -> E2E gate -> production) / Build Frontend (Next.js) (push) Successful in 50s
Deploy (staging -> E2E gate -> production) / Build Pipeline (Meltano + dbt + Airflow) (push) Successful in 1m23s
Deploy (staging -> E2E gate -> production) / Deploy to Staging (push) Successful in 0s
Deploy (staging -> E2E gate -> production) / E2E Journeys against Staging (push) Successful in 44s
Deploy (staging -> E2E gate -> production) / Promote to Production (push) Successful in 9s
Reviewed-on: #21
2026-07-07 13:48:12 +00:00
Tudor and Claude Fable 5
f1388ff5bd
fix(pipeline): normalize GIAS OfficialSixthForm comparison with lower(trim())
...
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 9m37s
PR Checks / Backend Smoke (pull_request) Successful in 6s
PR Checks / Build Backend (no push) (pull_request) Successful in 17s
PR Checks / Build Frontend (no push) (pull_request) Successful in 50s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 48s
PR Checks / AI Code Review (Claude) (pull_request) Successful in 2m19s
Matches the phase derivation's guard against casing/whitespace variants in
raw GIAS data; an unmatched variant previously fell through silently to the
statutory-age fallback.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 14:05:10 +01:00
Tudor and Claude Fable 5
4d226fd616
test: drop unused fake exception helper
...
PR Checks / Frontend Typecheck + Tests (pull_request) Successful in 9m41s
PR Checks / Backend Smoke (pull_request) Successful in 6s
PR Checks / Build Backend (no push) (pull_request) Successful in 17s
PR Checks / Build Frontend (no push) (pull_request) Successful in 47s
PR Checks / Build Pipeline (no push) (pull_request) Successful in 53s
PR Checks / AI Code Review (Claude) (pull_request) Successful in 3m17s
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 13:36:01 +01:00
Tudor and Claude Fable 5
a524cdc591
fix(api): survive missing has_sixth_form column and numpy bool serialization
...
- data_loader.load_school_data_as_dataframe now catches a ProgrammingError
whose message mentions has_sixth_form (psycopg2 UndefinedColumn) and
retries with a NULL-AS-has_sixth_form query variant, so the API keeps
serving data (and the app.py column-fallback branch stays reachable)
even before the nightly pipeline has rebuilt marts.dim_school.
- utils.convert_to_native now handles numpy.bool_ so GET /api/schools/{urn}
doesn't 500 once has_sixth_form is a populated bool-dtype column.
- Update the now-stale comment on the app.py age-range fallback branch.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 13:33:25 +01:00
Tudor and Claude Fable 5
3fcb1340d4
docs: mark sixth-form flag pipeline change implemented
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 10:43:08 +01:00
Tudor and Claude Fable 5
0934c8f38c
feat(ui): sixth-form badge, note and filter labels use GIAS flag
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 10:40:42 +01:00
Tudor and Claude Fable 5
1d149ffc48
feat(api): drive has_sixth_form filter and payloads from GIAS flag
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 10:36:39 +01:00
Tudor and Claude Fable 5
d11faefebd
feat(pipeline): derive dim_school.has_sixth_form from GIAS flag
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 10:30:39 +01:00
Tudor and Claude Fable 5
3b35849bb3
feat(pipeline): ingest GIAS OfficialSixthForm into staging
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 10:28:08 +01:00
Tudor and Claude Fable 5
87f4c6dd40
docs: implementation plan for GIAS sixth-form flag
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 10:21:02 +01:00
Tudor and Claude Fable 5
0309b27c84
docs: exam results phase taxonomy and sixth-form separation spec
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-07 10:02:21 +01:00