Warn on non-BAA surfaces

Task 5945 · Done · Coder · created · updated

Epic ask (verbatim): "Research the gap to get Jaah HIIPA compliant and fix everything that does not require human and does not break what is working now by imposing limits" (HIIPA = HIPAA). Full PRD/architecture: the epic's settled `prd` (Task 5917) and `architecture` (Task 5918) — architecture child **C8**. Builds on the HIPAA setting core child (org `hipaa.warnings` in the org API, `POST /api/orgs/{org_id}/hipaa/acknowledgements`, operator setting `hipaa_vendor_baas`). Operator decision D6 (verbatim): "Features with no BAA-covered vendor in a HIPAA org — Warned only — allowed, with a 'not HIPAA-covered' warning". BA B5 (verbatim): "Non-BAA surfaces (D6) = Slack notifications/question cards, Gemini runners, Codex/OpenAI runners (unless the owner records an OpenAI BAA), Claude subscription-OAuth accounts (Anthropic's BAA covers the API with an executed BAA, not consumer subscriptions), the Help chat (Google embeddings), Atlassian/Jira integration. The warning list is data, editable as BAAs land (an owner recording a vendor BAA removes it from the warned set)." ## Requirement (verbatim) - **AC5.6 Non-BAA warnings (D6/B5).** In a HIPAA ON org, each non-BAA surface shows a clear "Not covered by a BAA — don't send PHI here" warning at the point of use: connecting/using Slack for the org, adding/using a Gemini or Codex account, adding/using a subscription-OAuth Claude account, opening the Help chat, connecting Jira. An org admin acknowledges each surface once (recorded as an activity event); the feature keeps working before and after. The set of warned vendors is one data list (vendor → BAA on file?), so recording a BAA removes the warning without code change. - verify: dev browser in a HIPAA org: each of the five surfaces shows the warning; acknowledging hides the blocking banner and Audit shows the ack; feature still works; in an OFF org no warning appears. - **AC5.9 Quality** (own surfaces: warnings) — ui-copy-standards, fit at supported viewport widths without clipping, consistent presentation. ## Approach (architecture C8, K7, D-A6, D-A7) - `<NonBaaWarning surface="slack|codex|gemini|claude_subscription|help_chat|jira" />` reading `org.hipaa.warnings`; renders nothing when OFF or surface not warned. ALL SIX surface ids are wired. - Placement (where surfaces actually exist, D-A7): `components/SlackConnect.tsx:30` (slack — per-user, Profile); `pages/credentials/Accounts.tsx:1679` add + re-login for Codex/Gemini/Claude subscription (`accountModel.tsx:15` provider → surface); `components/support/SupportChat.tsx:130` and `pages/support/SupportPage.tsx:80` (help_chat); `pages/ProjectEditPage.tsx:296` Jira credential picker (jira). - Before ack: `ui/Banner.tsx` severity warning "Not covered by a BAA — don't send PHI here." + "Acknowledge" for admins/operator; after ack: a persistent one-line caption (D-A6 — a security warning is never removed). Feature NEVER disabled (N2). - Recording a vendor in operator setting `hipaa_vendor_baas` removes its warnings without code change. Credentials & reach: `jaah/debug/main/operator-login` — operator; `https://app.dev.jaah.ai` — **verified**. On dev the acknowledgement is done by the operator inside "HIPAA Test" (K3 allows operator); the org-admin ack path is proven by the core child's api test. Never turn HIPAA on in Org B. Out of scope: N2 "Non-BAA features in HIPAA orgs are warned, never blocked (D6)." N1 no new limit/warning for OFF orgs. Do NOT build an org-level Slack or Jira connect UI, a blocking mode (deferred), or change the ack API (core child). Done means: - AC5.6 — component unit tests: OFF → nothing; warned → banner with exact copy + Acknowledge (admin only); acked → one-line caption; vendor in `hipaa_vendor_baas` → nothing; each of the six surface ids renders at its placement. - AC5.6 dev — after deploy, in "HIPAA Test": Slack connect, Codex/Gemini/Claude-subscription add, Help drawer + Support page, Jira picker each show the warning; acknowledging collapses to the caption and Audit shows `hipaa_warning_acknowledged`; each feature still works; an OFF org shows no warning. - AC5.9 (own surfaces) — every warning fits at desktop and 360 px, not clipped/truncated, copy per ui-copy-standards. - `./dc check full` green; PR merged to develop and Jaah Deploy green on dev.

Outcome

Non-BAA warning on all 6 HIPAA surfaces (Slack, Codex/Gemini/Claude-sub accounts, Help, Support, Jira); admin ack → caption; served via /me. #5155 merged, deploy green. Full gate: 1 unrelated flake. Dev walkthrough + 6 UI follow-ups in report.

Pull request

Artifacts

Activity

  • Draft
  • Ready
  • Runner started
  • Runner ended (done)