- New CoverageFlag enum: SUPPLY_LAPSED, VISIT_REQUIRED, TRANSFER_PENDING, RENEWAL_CRITICAL/ELEVATED/SOON, RESUPPLY_READY, ACTIVE - Doc state machine: 5-item payer-dependent status per patient (SWO, Visit, PECOS, PA, Diagnosis) with cascade chain - Confirm Visit endpoint: staff enters prescriber-confirmed date, persisted in Supabase confirmed_visits table, survives all future CSV imports - Supabase migration: 001_add_confirmed_visits.sql (run manually in SQL editor) - Frontend: Badge rebuilt for 8 flags, DocStatusBar 5-dot display, ConfirmVisitModal, expandable WorklistTable rows - Legal: LOI, NDA, BAA drafts at pitch/legal/ for Nixon Law Group review - Compliance docs: privacy policy, incident response, data handling - CSV generator: market_data.json + PA/NJ generator scripts - 15/15 tests passing Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 KiB
Signal Incident Response Procedure
Version: 1.0 Date: June 7, 2026 Owner: STTIL Solutions LLC / Kisa Fenn, Managing Member Classification: Internal — do not publish
Purpose
This document defines the steps STTIL Solutions will take if a security incident affects Signal or the data of Signal customers. An "incident" includes any unauthorized access, data breach, ransomware event, accidental deletion, or disclosure of customer data.
Incident Classification
| Severity | Description | Examples |
|---|---|---|
| P1 — Critical | Active breach or confirmed data exposure | Unauthorized access to Supabase; database dump exfiltrated |
| P2 — High | Suspected breach or significant service disruption | Unusual API activity; Railway service crash with data loss risk |
| P3 — Medium | Potential vulnerability or policy violation | Misconfigured CORS; unexpected admin access |
| P4 — Low | Minor issues with no data exposure | Failed login attempts; expired SSL (auto-renewing) |
Response Timeline
| Step | P1 | P2 | P3/P4 |
|---|---|---|---|
| Detect and classify | Immediate | Within 1 hour | Within 24 hours |
| Contain | Immediately | Within 2 hours | Within 72 hours |
| Notify affected customers | Within 72 hours | Within 72 hours | As appropriate |
| Root cause analysis | Within 24 hours | Within 72 hours | Within 1 week |
| Remediation complete | Within 48 hours | Within 1 week | Within 2 weeks |
Step 1: Detect and Classify
Detection sources:
- Railway logs and alerts
- Supabase dashboard alerts
- Vercel deployment alerts
- Clerk auth anomaly alerts
- Customer report
- Routine audit log review
Upon detection, Kisa Fenn assesses severity and begins the response log.
Step 2: Contain
P1 (Critical):
- Immediately revoke all active API keys and rotate secrets (Railway env vars, Supabase service key, Clerk API key)
- Take Signal offline if breach is active (Railway: pause service)
- Preserve logs — do not delete or overwrite
- Do not communicate publicly until scope is understood
P2 (High):
- Revoke and rotate suspected compromised credentials
- Isolate affected service if possible
- Begin forensic log review
P3/P4:
- Patch or reconfigure the identified vulnerability
- Document the fix
Step 3: Assess Scope
Determine:
- What data was accessed or exposed?
- Which customers (organizations) are affected?
- What is the time range of the exposure?
- Was any patient data (even de-identified hashed IDs) involved?
Signal's data architecture minimizes exposure: patient_id is hashed (SHA-256) before storage. Even in a worst-case database exposure, the hashes cannot be reversed to reveal patient identities without the supplier's local crosswalk. Audit logs are structured with the same hashing protocol and cannot be used to reconstruct patient identity independently.
Step 4: Notify Affected Customers
Timeline: Within 72 hours of confirming that customer data was affected.
Notification must include:
- Date and time the incident was detected
- Description of the incident (what happened)
- Data affected (which tables, which organizations, what fields)
- Steps STTIL has taken to contain and remediate
- Steps the customer should take (if any)
- Contact for follow-up questions
Notification method: Email to the primary contact for each affected organization. For P1 incidents, also attempt phone contact.
Breach notification under HIPAA: If any incident involves data that may constitute PHI under HIPAA, STTIL will comply with HIPAA breach notification requirements, including notification to HHS within 60 days of discovery for breaches affecting 500 or more individuals. Given Signal's de-identification architecture, PHI breach is unlikely but is addressed here for completeness. The 72-hour customer notification timeline above is more stringent than the 60-day HIPAA threshold and is the operative timeline for Signal operations.
Step 5: Root Cause Analysis and Remediation
Document:
- Root cause (technical failure, human error, external attack)
- How it was detected
- Timeline of the incident
- Containment actions taken
- Remediation actions taken
- Preventive measures implemented
Store the incident report in signal/docs/compliance/incidents/YYYY-MM-DD-incident-report.md.
Step 6: Post-Incident Review
Within one week of remediation:
- Review whether current monitoring would have caught this sooner
- Update runbooks, monitoring, or access controls as needed
- Evaluate whether additional audit log coverage is needed
- Assess whether WORM enforcement gaps contributed to the incident
Key Contacts and Credentials
| System | Access | Rotation after incident |
|---|---|---|
| Railway | railway.app — sttilsolutionsllc@proton.me | Rotate SIGNAL_API_KEY, SUPABASE_SERVICE_KEY, CLERK_JWKS_URL |
| Supabase | supabase.com — Kisa's account | Rotate service_key (JWT) immediately |
| Vercel | vercel.com | Rotate VITE_API_URL if endpoint changed |
| Clerk | clerk.com — eternal-goblin-1 | Rotate API keys |
After a P1 incident, rotate ALL secrets listed above regardless of which service was directly involved.
Escalation
Kisa Fenn is the sole incident commander for all Signal incidents. If Kisa is unavailable and the incident is P1, the default action is to take Signal offline (Railway: pause service) until Kisa can respond.
Legal contact: Nixon Law Group — contact for any incident that may involve regulatory notification obligations or breach of a customer BAA.
Audit Log Posture
Per the HIPAA Security Rule (as updated in the 2026 Final Rule, 45 CFR §164.312(b)), audit logs must meet a WORM standard and be retained for a minimum of 6 years. Signal's audit_logger.py writes to the Supabase audit_events table with hashed identifiers and structured JSON. The WORM enforcement gap (preventing DELETE on the audit_events table) is tracked in the compliance checklist and must be resolved before any live PHI enters the system. Until then, the audit log is append-only by policy and reviewed quarterly.