R361 — The Loop Closed
Multi-Channel Intake → PII Redact → Dept Routing → HITL Approval
Live proof. Below is the actual queue. Three forms entered via three different channels (email, upload, API), got PII-scrubbed, routed to three different department managers via the org chart, and are now waiting for HITL approval. Raw payloads are in the vault. Approval workflow goes live in R362.
The Flow
STEP 1
INTAKE
Email, SMS, upload, API, or manual — channel-agnostic ingestion via r361_intake_router.py
STEP 2
PII SCRUB
SSN, DOB, EIN, phone, email, CC, bank-acct, wage detected + masked via r361_pii_scrubber.py
STEP 3
DEPT ROUTE
form_code → dept_form_access lookup → assignee picked from tenant_employees (manager+ in dept)
STEP 4
HITL QUEUE
Inserted into form_intake_queue with severity, raw in vault. Assignee approves in their inbox.
Live Queue (3 pending)
F1-01 · queue #1 · via email
high severity
FROM: trevor.lindholm@cascadia-mep.example → ROUTED TO: evelyn.shapiro@cascadia-mep.example (people) at 2026-05-31T05:28:19.358815Z
Hi HR,
Here is my I-9 Section 1 info for the onboarding:
Name: Trevor Lindholm
SSN: ***-**-6789
DOB: **/**/****
Phone: (***) ***-0142
Address: 1422 SE Hawthorne Blvd, Portland OR 97214
Email: tr***@cascadia-mep.example
Citizenship: 1. A citizen of the United States.
Trevor
⚠ ssn_dashed⚠ dob_slash⚠ phone_us⚠ email_pii
vault_ref: vault://intake/2026-05-31/F1-01_448f1ceb
F3-08 · queue #2 · via upload
normal severity
FROM: ben.holloway@cascadia-mep.example → ROUTED TO: priya.shenoy@cascadia-mep.example (operations) at 2026-05-31T05:28:19.410625Z
RFI #2026-047: clarification needed on ceiling height in Bldg A floor 12 east wing. Originally drawn at 9 ft per A-101 rev 3 dated ****-**-**.
⚠ dob_dash
vault_ref: vault://intake/2026-05-31/F3-08_a7a30ea2
F5-10 · queue #3 · via api
normal severity
FROM: system → ROUTED TO: rachel.beaumont@cascadia-mep.example (finance) at 2026-05-31T05:28:19.459271Z
Expense report 2026-06: gas $[REDACTED], hotel $[REDACTED], employee SSN ***-**-4321 for verification, account number: 0001234567890.
⚠ ssn_dashed⚠ dollar_wage
vault_ref: vault://intake/2026-05-31/F5-10_63809cf3
What's In The Vault (Raw Storage)
Every intake stores raw payload in vault_form_intake with access_log. Redacted versions go to the queue. "Show Full Data" in the employee view fetches from vault with permission check + log entry.
| vault_ref | tenant | form | PII summary |
|---|
| vault://intake/2026-05-31/F5-10_63809cf3 | oregon_mep_demo | F5-10 | ssn_dashed×1, dollar_wage×2 |
| vault://intake/2026-05-31/F3-08_a7a30ea2 | oregon_mep_demo | F3-08 | dob_dash×1 |
| vault://intake/2026-05-31/F1-01_448f1ceb | oregon_mep_demo | F1-01 | ssn_dashed×1, dob_slash×1, phone_us×1, email_pii×1 |
What R361 Shipped
- Schema: dept_form_access (20 prefix mappings), form_intake_queue, vault_form_intake
- PII scrubber (/usr/local/bin/r361_pii_scrubber.py): 13 pattern types, context-aware
- Intake router (/usr/local/bin/r361_intake_router.py): channel-agnostic, returns full W/W/W/W/H/W audit envelope
- Dept-scoped employee view: Evelyn Shapiro's HR inbox showing only HR-owned forms, with redacted PII
- 8 new error codes registered in error_codes.json (R361 deltas)