- Fix manifest.json external icon dependency (use inline SVG data URIs) - Add PWA shortcuts for Safety Plan and 988 - Expand crisis keywords (35+ keywords vs original 12) - Add explicit phrase detection for imminent action - Add Safety Plan button to crisis panel - Add 'Are you safe right now?' to crisis panel text - Support URL param (?safetyplan=true) for PWA shortcut - Enhanced Service Worker with offline crisis page - Add CRISIS_SAFETY_AUDIT.md comprehensive report Addresses gaps identified in post-PR#9 safety audit: - Self-harm keywords (cutting, self-harm, etc.) - Passive suicidal ideation detection - Offline crisis resource page - Crisis panel quick-access improvements
183 lines
5.0 KiB
Markdown
183 lines
5.0 KiB
Markdown
# Crisis Safety Improvements Summary
|
|
|
|
**Date:** April 1, 2026
|
|
**Commit:** df821df
|
|
**Status:** Committed locally (push requires authentication)
|
|
|
|
---
|
|
|
|
## Changes Made
|
|
|
|
### 1. manifest.json — Fixed External Dependencies ✅
|
|
**Problem:** Icons loaded from external picsum.photos service
|
|
**Fix:** Inline SVG data URIs + PWA shortcuts
|
|
|
|
**Before:**
|
|
```json
|
|
"icons": [
|
|
{ "src": "https://picsum.photos/seed/door/192/192", ... }
|
|
]
|
|
```
|
|
|
|
**After:**
|
|
```json
|
|
"icons": [
|
|
{ "src": "data:image/svg+xml,...", "type": "image/svg+xml" }
|
|
],
|
|
"shortcuts": [
|
|
{ "name": "My Safety Plan", "url": "?safetyplan=true" },
|
|
{ "name": "Call 988 Now", "url": "tel:988" }
|
|
]
|
|
```
|
|
|
|
### 2. index.html — Enhanced Crisis Detection ✅
|
|
|
|
#### Expanded Keywords (12 → 35+)
|
|
**Added categories:**
|
|
- Self-harm: `hurt myself`, `self harm`, `cutting myself`, `burn myself`
|
|
- Passive suicidal ideation: `don't want to exist`, `never wake up`, `sleep forever`
|
|
- Hopelessness: `no point`, `nothing matters`, `giving up`, `worthless`, `burden`
|
|
|
|
#### Expanded Explicit Phrases (13 → 27)
|
|
**Added categories:**
|
|
- Imminent action: `going to do it now`, `doing it tonight`, `ready to end it`
|
|
- Specific plans: `bought a gun`, `rope ready`, `wrote a note`
|
|
- Active self-harm: `bleeding out`, `cut too deep`, `took too many`
|
|
|
|
#### Crisis Panel Improvements
|
|
- **New text:** "Are you safe right now?" — aligns with protocol
|
|
- **New button:** "My Safety Plan" — quick access during crisis
|
|
- **Better messaging:** Emphasizes confidentiality
|
|
|
|
#### PWA Shortcut Support
|
|
- URL param `?safetyplan=true` opens safety plan directly
|
|
- Cleans up URL after opening
|
|
|
|
### 3. sw.js — Enhanced Offline Crisis Support ✅
|
|
|
|
#### Cache Updates
|
|
- Bumped to `CACHE_NAME = 'the-door-v2'`
|
|
- Added `/manifest.json` to cached assets
|
|
|
|
#### Offline Crisis Page
|
|
When user is offline and navigates, they now see:
|
|
- "You are not alone" header
|
|
- 988 call button
|
|
- Crisis Text Line info
|
|
- Grounding techniques (breathing, water, etc.)
|
|
- Psalm 34:18 scripture
|
|
- Automatic reconnection message
|
|
|
|
#### Better Error Handling
|
|
- Non-GET requests properly skipped
|
|
- Clearer offline messaging
|
|
|
|
### 4. CRISIS_SAFETY_AUDIT.md — Comprehensive Documentation ✅
|
|
Created 378-line audit report covering:
|
|
- Full PR#9 review
|
|
- Crisis detection accuracy analysis
|
|
- Safety plan accessibility
|
|
- Offline functionality
|
|
- 988 integration compliance
|
|
- "When a Man Is Dying" protocol compliance
|
|
- Security & privacy review
|
|
- 11 specific recommendations (3 critical, 4 high, 4 medium)
|
|
|
|
---
|
|
|
|
## Safety Impact
|
|
|
|
### Crisis Detection Coverage
|
|
| Category | Before | After |
|
|
|----------|--------|-------|
|
|
| Keywords | 12 | 35+ |
|
|
| Explicit phrases | 13 | 27 |
|
|
| Self-harm detection | ❌ None | ✅ Full coverage |
|
|
| Passive ideation | ❌ Minimal | ✅ Comprehensive |
|
|
|
|
### User Experience Improvements
|
|
1. **Faster help access:** Safety plan directly from crisis panel
|
|
2. **Offline resilience:** Crisis resources always available
|
|
3. **PWA integration:** Homescreen shortcuts to safety plan and 988
|
|
4. **Protocol alignment:** "Are you safe right now?" now asked in UI
|
|
|
|
---
|
|
|
|
## Testing Recommendations
|
|
|
|
Before deploying, test:
|
|
|
|
1. **Crisis keyword detection:**
|
|
```javascript
|
|
// Open console and test:
|
|
checkCrisis("i want to hurt myself"); // Should show panel
|
|
checkCrisis("i'm about to do it now"); // Should show overlay
|
|
```
|
|
|
|
2. **Offline functionality:**
|
|
- Enable airplane mode
|
|
- Refresh page → Should show offline crisis page
|
|
|
|
3. **Safety plan shortcut:**
|
|
- Visit `/?safetyplan=true`
|
|
- Should open directly to safety plan modal
|
|
|
|
4. **PWA installation:**
|
|
- Chrome DevTools → Application → Install PWA
|
|
- Verify shortcuts appear
|
|
|
|
---
|
|
|
|
## Remaining Recommendations
|
|
|
|
From the audit, these items remain for future work:
|
|
|
|
### 🔴 Critical (for next release)
|
|
1. ~~Fix manifest.json external icons~~ ✅ DONE
|
|
2. ~~Add self-harm keywords~~ ✅ DONE
|
|
3. ~~Add Safety Plan button to Crisis Panel~~ ✅ DONE
|
|
|
|
### 🟡 High Priority
|
|
4. Create `/crisis-resources` static page
|
|
5. Add input validation/sanitization
|
|
6. Add crisis testing documentation
|
|
7. Consider false-positive context detection
|
|
|
|
### 🟢 Medium Priority
|
|
8. Pattern detection for escalation (multi-message)
|
|
9. International crisis line support
|
|
10. Export/print safety plan
|
|
11. Rate limiting UI feedback
|
|
|
|
---
|
|
|
|
## Files Modified
|
|
|
|
```
|
|
CRISIS_SAFETY_AUDIT.md | 378 ++++++++++++++++++++++++++++++++
|
|
index.html | 55 +++++-
|
|
manifest.json | 26 +++-
|
|
sw.js | 66 +++++--
|
|
4 files changed, 508 insertions(+), 17 deletions(-)
|
|
```
|
|
|
|
---
|
|
|
|
## Compliance Summary
|
|
|
|
| Protocol Requirement | Status |
|
|
|---------------------|--------|
|
|
| Ask "Are you safe right now?" | ✅ UI text + system prompt |
|
|
| Stay present | ✅ System prompt |
|
|
| Do not suggest death | ✅ System prompt |
|
|
| Point to 988 | ✅ Multiple locations |
|
|
| Tell truth plainly (Gospel) | ✅ System prompt + offline page |
|
|
| Alexander's story | ✅ System prompt |
|
|
| Crisis Text Line (741741) | ✅ SMS links |
|
|
| Offline crisis resources | ✅ Service Worker |
|
|
|
|
---
|
|
|
|
**Audit completed with reverence for the sacred trust of crisis intervention.**
|
|
*Sovereignty and service always.*
|