Repository navigation
HealthClaw Guardrails 2.1.0 — the check-in release
2.1 makes the engine ready to answer a SMART Health Check-in request, and it
takes CareAgents from a synthetic sample to an invite-only beta with a
patient connect journey. The guardrails from 2.0 hold: Grade A, PHI-free
audit, step-up on writes, and labels only from r6/terminology.py.
The full change list is in CHANGELOG.md.
What 2.1 adds
- A check-in export. A
checkinexport profile answers a SMART Health
Check-in request with US Core records. Only a step-up token can reach it,
and that token must be issued for this export's audience and for the
exact item set the person agreed to. The token is used once, after the
bundle is built and fits under 400,000 bytes. - Insurance cards, after consent. In the check-in export only, a
Coverage keeps its member, group and plan IDs, and its payor is named from
the stored Organization. An identifier labelled as an SSN, or written in
separated SSN form, is still dropped. Patient identifiers keep the strict
SSN screen. Race and ethnicity carry our own OMB labels, never upstream
text. - Profile claims you can trust. Only allow-listed US Core and C4DIC
profile claims leave the engine. Other claims are dropped. A record with no
profile is answered "unavailable"; validating it and then adding the claim
comes later. - Scoped step-up tokens. A token is refused outside its scope. An
audience-bound token is refused by every gate that does not ask for that
audience, and a gate that asks for an audience refuses a token without
it. - Where a record came from. Each stored resource carries a code-only
meta.tagsaying how it arrived: portal, upload or sample. It never
carries a clinic name (migration0011_record_source). - "No known allergy" is a recorded entry. A coded absence is quoted as a
dated entry, not a confirmed absence. Examples are SNOMED 716186003 and
its descendants, the legacy 160244002, 260413007, and the LOINC absence
answers. It is never inferred. - Proxied searches drop upstream paging links. A self link and a
fullUrlcome from the engine, never from the upstream server. A bare id
is accepted for thepatientsearch parameter.
CareAgents in 2.1
- Invite-only beta: tester terms, personal invite links, a pause switch,
re-consent, a daily cap and a feedback form. - A patient connect page, one assistant per person, and a hub that says
whose each assistant is. - Text-first iMessage through a hosted line, with re-verification after 60
days, or after 30 days of silence. - Model routing: easy turns go to Haiku and the rest to Sonnet, with an
Opus advisor. Only approved hosts may serve while real records are open. - A SMART Health Check-in web wallet, behind
CARE_CHECKIN_WALLET, which
is off by default. It answers only from the synthetic test patient. The
answer is encrypted in the browser, so CareAgents stores none of it.
Not in 2.1
- The direct FHIR write gate is still a header
(#214). The
action rail is the real gate. - The check-in wallet is synthetic only. It is off in production until
the owner turns it on for the Nov 3 connectathon. The relay from the
wallet to the engine export is the next PR. - Validate-then-claim is deferred. Records with no profile are answered
"unavailable". - Two SSN forms still get through on Coverage: a doubled space
(666 77 8888) and a single separator (666-778888). This is tracked
on FHI-53. fullUrluses the request host, not a configured public base
(FHI-61).
Ratchets
| Ratchet | 2.0.0 | 2.1.0 | Target |
|---|---|---|---|
| Post-commit audit call sites | 86 | 23 | 0 |
| Raw tenant-header reads | 24 | 14 | 0 |
Imports out of routes.py |
4 | 1 | 1 |
routes.py lines, a ceiling |
3,750 | 3,738 | shrinks |
Upgrading from 2.0.0
- Run the Alembic migrations before the first request. 2.1 adds
0011_record_source. - Check
GET /r6/ops/preflight. - If you mint check-in tokens in production, confirm a shared nonce store
(Redis). It is what keeps each token to a single use. - CareAgents is deployed separately. Stage web and worker from the same
tree, and leaveCARE_CHECKIN_WALLETunset unless you mean to run the
wallet.