Five agents did the work you have just read, and the gateway handed each of them a different shape of the same record. This table is computed live, against the case you are following.
| agent | scopes it holds | what it is handed |
|---|---|---|
| casework-agent | case.read_full, draft.write | 10 top-level, 8 consent field(s) |
| clock-agent | case.read_dates, case.write_deadline | 9 top-level, 6 consent field(s) |
| coordinator | case.read, case.write, skill.review, worker.invoke | 9 top-level, 6 consent field(s) |
| family-agent | case.read_redacted, media.generate, notify.send | 5 top-level, 0 consent field(s) |
| intake-agent | armor.screen, case.create, document.read | 5 top-level, 0 consent field(s) |
The family-facing agent does not receive the clinical detail and decline to use it — it never receives it. On this case the entire consent block is withheld from it, including referral_reason, which is where the clinical narrative lives, and source_document, the raw form with the child’s name in it. Full list: confidence, consent_signed_on, jurisdiction, received_on, referral_reason, school_code, source_document, student_ref
That is the difference between authorisation and projection. A check can be forgotten at a new call site; a projection cannot leak a field it never returned. Field classification fails closed, so a field nobody has classified yet is withheld rather than exposed.
Run scripts/geap.sh in the repository and every line of that is fetched live rather than claimed.