Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
cf34be7
feat: egress output types, run status, file naming and decision filte…
Sep 14, 2026
f630a89
feat: egress source record and the four per-record transforms (AB#294…
Sep 14, 2026
e7386a3
feat: LDS rows, column sets, CSV writer and spec validator for egress…
Sep 14, 2026
5b4ceb2
feat: egress run, output and learner tables, request laestab column, …
Sep 14, 2026
8173ea4
feat: egress run repository with database-enforced one-active-run rul…
Sep 14, 2026
c14ef97
feat: egress ticket sources - Zendesk show_many decisions and the dev…
Sep 14, 2026
04568c6
feat: egress pull - candidates, Zendesk decisions and journey values …
Sep 14, 2026
dc74d4f
feat: egress preprocessing pipeline - eight reported steps, all-or-no…
Sep 14, 2026
caf2d58
feat: egress blob client and transfer service - upload, compensate, a…
Sep 14, 2026
3109138
feat: Data egress admin section, DI, egress storage client and local …
Sep 14, 2026
5236cb5
feat: EgressController - pull, resume, streamed preprocessing, summar…
Sep 14, 2026
faa4a36
feat: egress screens - pull, results, preprocessing progress, failed,…
Sep 14, 2026
0e63dc1
test: dev egress seeder and end-to-end walk of pull, preprocess, tran…
Sep 14, 2026
a9bd226
docs: data egress guide, spike pointer and C4 status (AB#294553)
Sep 14, 2026
770eeea
fix(egress): B1 - default the web host to the real Zendesk client, re…
Sep 14, 2026
4ac93c3
fix(egress): M1+S3 - make transfer atomic on cancellation/DB failure,…
Sep 14, 2026
eef9bdb
fix(egress): M2 - a PreprocessingFailed run cannot be re-run, matchin…
Sep 14, 2026
76576f4
fix(egress): M3 - refuse to transfer a run whose approved set is empty
Sep 14, 2026
752a703
fix(egress): M4+S8 - guard every terminal write by expected status, a…
Sep 14, 2026
248b04d
fix(egress): S1 - exempt EgressRunOutput from audit capture
Sep 14, 2026
68db848
fix(egress): S2 - clear the change tracker at the top of the retried …
Sep 14, 2026
e26d773
fix(egress): S4 - every failure is listed, not just the first indepen…
Sep 14, 2026
2010d3c
fix(egress): S5 - associate the output-types error with its fieldset
Sep 14, 2026
a5bd427
fix(egress): S6 - move the aria-live status region out of the progres…
Sep 14, 2026
50a7937
fix(egress): S7 - only a genuine blob-exists 409 becomes EgressBlobAl…
Sep 14, 2026
fc7adbf
fix(egress): S9 - Start checks ModelState before treating OutputTypes…
Sep 14, 2026
190a0eb
test(egress): S10 - close test gaps that let B1/M1-M4 through (part 1…
Sep 14, 2026
22a5a27
fix(egress): S5 live-verification fix + S10 - E2E test gaps (Abandon,…
Sep 14, 2026
66aa3ce
fix(egress): Tier 4 nits (part 1) - constraint matching, Preview, Ref…
Sep 14, 2026
7dcb048
fix(egress): Tier 4 nits (part 2) - status guards, banner role, tags,…
Sep 14, 2026
8565cb4
docs(egress): correct data-egress.md for every review-fix behaviour c…
Sep 14, 2026
5e06f50
fix(egress): R1 - Abandon writes Abandoned before it sweeps the run's…
Sep 14, 2026
5464c8f
fix(egress): second-pass review nits
Sep 14, 2026
53b2916
fix(egress): final-review nits - refusal copy, status labels, docs
Sep 14, 2026
b31e34c
Merge branch 'main' into feature/294553-admin_implementation
Sep 15, 2026
5cd0df9
fix(egress): Key_Stage cell carries the spec value 16-19, file name k…
Sep 16, 2026
d89cbd5
fix(egress): Cycle_Year and Cycle_Month come from the checking window…
Sep 16, 2026
35ad8c0
fix(egress): New learners columns follow LDS spec v2.4; persist KS4/1…
Sep 16, 2026
ce9b9d1
fix(egress): New learners permitted values per LDS spec v2.4; Sex U o…
Sep 16, 2026
36afdbe
fix(egress): Remove learners carry Year_Group for KS4 and Removal_Yea…
Sep 16, 2026
08bcf60
fix(egress): 16-19 correction reason codes from LDS spec v2.4 (AB#294…
Sep 16, 2026
8805551
fix(egress): transfer, preview and download use the window's spec v2.…
Sep 16, 2026
767f87b
docs(egress): files follow LDS spec v2.4; record open LDS/BA question…
Sep 16, 2026
dc40887
Merge branch 'main' into feature/294553-admin_implementation
Sep 16, 2026
a41eac0
Merge branch 'main' into feature/294553-admin_implementation
Sep 17, 2026
8cb0d5f
fix(egress): keep review apps deployable when an egress run is left b…
Sep 17, 2026
667910b
Merge branch 'main' into feature/294553-admin_implementation
Sep 18, 2026
81d0951
E2E test fix
Sep 18, 2026
d080a41
fix(egress): configure review apps so the E2E egress facts can pass
Sep 18, 2026
679435c
fix(e2e): pin SixLabors.ImageSharp back to 3.1.12
Sep 18, 2026
e812ee0
chore(e2e): restore the search-ux snapshot PNGs to main's versions
Sep 18, 2026
6503e28
fix(egress): refuse formula-leading names and warn early when storage…
Sep 18, 2026
4a101cb
Merge remote-tracking branch 'origin/main' into feature/294553-admin_…
Sep 18, 2026
522488c
fix(egress): reclaim a colliding file left by an abandoned run or thi…
Sep 21, 2026
2b8fb35
fix(egress): say who wrote a colliding file and what gets the operato…
Sep 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 0 additions & 115 deletions data-egress-spike.md

This file was deleted.

4 changes: 4 additions & 0 deletions docker-compose.sandbox.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ services:
- Dev__ToolsEnabled=${DEV_TOOLS_ENABLED:-true}
- ASPNETCORE_URLS=http://+:8080
- Notify__UseFake=${NOTIFY_USEFAKE:-true}
# This stack has no ZendeskSettings and no EgressStorage account; without opting into the
# dev outbox fake the app fails to start at all (AB#294553 review B1 made the real Zendesk
# client the default everywhere, including here).
- Zendesk__UseFake=true
# Points at the sandbox db + azurite services on the sandbox network,
# NOT the main stack's cypd_db / cypd_azurite. Kept literal so the
# sandbox can never accidentally speak to the main-stack DB.
Expand Down
6 changes: 5 additions & 1 deletion docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,12 @@ services:
# Local dev has no GOV.UK Notify secret, so use the console fake (logs emails
# instead of sending). Set NOTIFY_USEFAKE=false + supply Notify__ApiKey to send real emails.
- Notify__UseFake=${NOTIFY_USEFAKE:-true}
# AB#294553 review B1: the code/appsettings default is now the real Zendesk client (matching
# the worker), so the local/E2E stack must opt in to the dev outbox fake explicitly here.
- Zendesk__UseFake=${ZENDESK_USE_FAKE:-true}
- ConnectionStrings__Postgres=${POSTGRES_CONNECTION_STRING:-Host=db;Database=cypd;Username=postgres;Password=postgres}
- ConnectionStrings__AzureStorage=${AZURE_STORAGE_CONNECTION_STRING:-DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite:10000/devstoreaccount1;QueueEndpoint=http://azurite:10001/devstoreaccount1;}
- ConnectionStrings__EgressStorage=${EGRESS_STORAGE_CONNECTION_STRING:-DefaultEndpointsProtocol=http;AccountName=egressaccount;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite:10000/egressaccount;QueueEndpoint=http://azurite:10001/egressaccount;}
- DfeSignIn__BaseUrl=${DFESIGNIN_BASEURL:-https://test-api.signin.education.gov.uk/}
- DfeSignIn__ClientId=${DFESIGNIN_CLIENTID}
- DfeSignIn__ApiClientSecret=${DFESIGNIN_APICLIENTSECRET}
Expand Down Expand Up @@ -196,7 +200,7 @@ services:
- "10000:10000" # Blob
- "10001:10001" # Queue
environment:
- AZURITE_ACCOUNTS=devstoreaccount1:Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;ingressaccount:Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==
- AZURITE_ACCOUNTS=devstoreaccount1:Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;ingressaccount:Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;egressaccount:Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==
volumes:
- azurite_data:/data
command: azurite --blobHost 0.0.0.0 --queueHost 0.0.0.0 --location /data --debug /data/debug.log --skipApiVersionCheck
Expand Down
4 changes: 2 additions & 2 deletions docs/add-pupil-journey.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,8 @@ defensible to keep either way.

## LDS bound values

These are a hard contract against the `LDS_CYPMD_Data specification v2.4` the future egress story
reads from.
These are a hard contract against the `LDS_CYPMD_Data specification v2.4` the egress story reads
from. Consumed by `Application/Egress/EgressRecordBuilder.Build` since AB#294553.

**Where the egress story will find them.** Not in a `RequestDocument`: `BuildAnswerRecord` and its
`RawValue`/`Value` split only exist inside `RequestService.BuildRequestDocument`, which an Add
Expand Down
3 changes: 2 additions & 1 deletion docs/architecture/c4-container.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,8 @@ design for as-built:
| Gov Notify integration | **Implemented** — `INotifyService` / `NotifyEmailClient`; notifications are dispatched from the Web app via `NotificationBackgroundService`. |
| **Admin Portal** | **Not a separate app** — admin functionality currently lives **inside the Web Portal** (`Web/Admin/`, `AdminController`, `WindowAdmin`, `QueueAdmin`, `StorageAdmin`, `ShareAdmin`, `AdminRequests`, `PageTreeAdmin`). |
| **Request Status Updater** | **Planned** — no time-triggered Zendesk-polling worker exists yet (the worker currently runs only `DlqRetentionJob` / `MetricsRetentionJob`). |
| **Data Ingress / Egress Processing**, **LDS Interface Data Storage**, LDS exchange | **Planned** — the LDS pipeline is not implemented; pupil/school JSON in Data Blob Storage is currently produced by dev seeding (`SeedPupilData`). |
| **Data Egress Processing** | **Implemented (AB#294553)** as an admin-driven run inside the web app; the worker container in the diagram is not used. Pull → Preprocess → Transfer at `/admin/egress` (`DfE.CheckPerformanceData.Web/Controllers/Egress/EgressController.cs`), see `docs/data-egress.md`. |
| **Data Ingress Processing**, **LDS Interface Data Storage**, LDS exchange | **Planned** — the LDS ingress pipeline is not implemented; pupil/school JSON in Data Blob Storage is currently produced by dev seeding (`SeedPupilData`). |

> Update this section as the LDS pipeline, a dedicated Admin Portal, and the
> Request Status Updater are built out, or split the workers into separate
Expand Down
Loading
Loading