Repository navigation
#711 16 to 19 Include journey (AB#301154) - #721
Conversation
A second stamp beside INCLUDED: true when the record is not included, or when its P_INCL is a code the schema's x-ingress.includable rule names. The 16-19 included file names 502. Every pupil schema declares it. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
IPupilRecord.IsIncludable reads the INCLUDABLE stamp. PupilFilter gains Includable and NotIncludable and loses NonIncluded; the KS4 Include flow uses Includable, which returns the same pupils as before. The unit tests that named NonIncluded are renamed to Includable so the project compiles; Task 3 re-points the guards. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A 16-19 student with P_INCL 502 is included by file but includable by rule. The already-included guards now ask NotIncludable, so such a student can never trip the guard against themselves; on KS4 the answer is the same as before. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…here it exists 16-19 has no Add flow, so Start adding would only bounce to Check your data. The pages take CanAdd from the same list What to change renders. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Include_Post16.json: pick an includable student, give or skip evidence, review, submit. What to change now offers Include on a 16-19 window. Rules: Scrutiny only. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The KS2 seed builds its CSV columns from the schema and skips the stamps ingress writes. INCLUDABLE is a new stamp, so the seed stopped the web container at start. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A non-included student to the confirmation, a 502 student to the evidence page, a 501 student to the already-included warning with no Add button, an unknown name to Student not found. What to change on 16-19 offers Include, Merge and Remove. The reference token for 16-19 is 16to19, so the test matches CYPMD_16to19_ (the plan said Post16). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Review app for PR 721 was deleted |
E2E tests passed381 passed, 0 failed, 4 skipped in 18 min 16 s Commit |
An includable rule with no codes or a blank code fails the run by name. A blank code would match every empty field. A test covers each rule check, including no field. A unit test proves the autocomplete guard asks NotIncludable and never Included. C# comments no longer name inclusion codes. The schema holds them. The unknown-name E2E test waits for the empty-state row, not a fixed time. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- IncludeNoResultsPathTests: two comments still named the removed NonIncluded filter; they now say Includable / NotIncludable. - Unit test: StartAddingPupil on a window type with no Add flow redirects to Check your data and leaves the Include attempt as it was, so a forged POST from a 16-19 decision page is refused by the action, not just hidden. - Integration test: SearchPupilsAsync throws for a filter it has no rule for. - Integration test: a schema that declares INCLUDABLE when nothing stamps INCLUDED fails the run (both stamps stay null and fail row validation), pinning that this case is not silent. No processor change was needed. - docs/blob-storage.md: a pupil blob written before INCLUDABLE existed reads as nobody includable until the exercise is validated again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#736 (#712) moved q-missing-grade and q-revised-grade out of JourneyController and JourneyViewModelBuilder into EnquiryQuestionIds. It merged after #740 tightened the baseline, so main fails both FlowIdCouplingTests ratchet checks. Move the two ids to their new owner. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Such a schema ingested cleanly and then offered nobody for inclusion. The check runs on every schema, including ones an admin uploads, so a shipped-schema test alone would not cover it. The shipped-schema test now also covers the KS2 December file. The blob-storage doc says that pre-change pupil files need re-validating on every key stage. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Response to the review (suggestions 1-6):
2 and 3. Stamp coupling. All five schemas that declare
|
identifier_mapping_invalid describes an identifier problem. This check is about a missing INCLUDABLE stamp, so the run summary now says includable_not_declared. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 16-19 record had a test that a blob without the stamp reads as not includable. The KS4 and KS2 record had none, though pre-change blobs on every key stage lack it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Closes #711 (AB#301154).
What changes
A school on a 16-19 window can ask to include a student.
Include_Post16.jsonturns the journey on: pick the student, give or skip PDF evidence and an explanation, review, submit, get a reference and the deadline for further amendments.Who can be picked (AC9). Students in the non-included file, and students the included file carries with
P_INCL502 ("not included in performance measures"). Ingress now writes a second stamp,INCLUDABLE, besideINCLUDED: true when the record is not included, or when its code is one the schema's newx-ingress.includablerule names. Onlystudents-included_schema.jsoncarries the rule (502). KS4 and KS2 get!INCLUDED, so nothing changes for them.INCLUDED, the tabs, Remove and Merge are untouched: a 502 student is still included for those.PupilFilter:IncludableandNotIncludableadded,NonIncludedremoved. The KS4 Include flow usesIncludableand returns the same pupils as before.NotIncludablepupils, so a 502 student can never trip the guard against themselves.x-ingress.includablerule with no field, an undeclared field, no codes or a blank code fails the ingress run by name. So does a schema that declaresINCLUDEDbut notINCLUDABLE, shipped or uploaded: it would otherwise offer nobody for inclusion.INC-DEF); theInclusionrules name KS4 codes only.AGENTS.mdbullet.Data note. A pupil file ingested before this change has no
INCLUDABLE. This affects every key stage, not only 16-19. Until the exercise is validated again, the Include search finds nobody, and the "already included" check matches every typed name, so a school sees "This pupil is already included". The dev seed (SeedDevelopmentData, on indevelopmentandreviewonly) validates each seeded window again at each start, so those windows restamp themselves. Every other exercise keeps its old files until an admin validates it again. The service is not live.Not in this PR. The suggestion label still says
INCLUDEDfor a 502 student (true by file) - a wording question for the BA. 16-19 auto-decision rules - a BA question.After deploy
Do this in each environment after this change deploys to it:
Security
Touches the journey's personal-data pages (the two decision pages) and file upload only through the existing
EvidenceUploadpage. No new endpoint, parameter or dependency. No new POST action. Nothing logged beyond the existing lookup-failure messages, which carry the window id only.Journeys checked by hand
At
7fa5e85a(main merged after #745), in the local containers, as the dev editor (Kingsmead). The later merge of #698 changes sign-in and impersonation only, no file this PR changes:CYPMD_16to19_CA80BE9; the rules engine decided Scrutiny,INC-DEF.Checks
All at the head commit,
74af814b(main merged after #698):buildjob)scripts/check-pins.sh,scripts/check-playwright-pin.sh