ruvector/examples/dragnes/docs/hipaa-compliance.md
rUv 10c25953fa feat: DrAgnes + Common Crawl WET + Gemini grounding agents (#282)
* docs: DrAgnes project overview and system architecture research

Establishes the DrAgnes AI-powered dermatology intelligence platform
research initiative with comprehensive system architecture covering
DermLite integration, CNN classification pipeline, brain collective
learning, offline-first PWA design, and 25-year evolution roadmap.

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: DrAgnes HIPAA compliance strategy and data sources research

Comprehensive HIPAA/FDA compliance framework covering PHI handling,
PII stripping pipeline, differential privacy, witness chain auditing,
BAA requirements, and risk analysis. Data sources document catalogs
18 training datasets, medical literature sources, and real-world data
streams including HAM10000, ISIC Archive, and Fitzpatrick17k.

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: DrAgnes DermLite integration and 25-year future vision research

DermLite integration covers HUD/DL5/DL4/DL200 device capabilities,
image capture via MediaStream API, ABCDE criteria automation, 7-point
checklist, Menzies method, and pattern analysis modules. Future vision
spans AR-guided biopsy (2028), continuous monitoring wearables (2040),
genomic fusion (2035), BCI clinical gestalt (2045), and global
elimination of late-stage melanoma detection by 2050.

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: DrAgnes competitive analysis and deployment plan research

Competitive analysis covers SkinVision, MoleMap, MetaOptima, Canfield,
Google Health, 3Derm, and MelaFind with feature matrix comparison.
Deployment plan details Google Cloud architecture with Cloud Run
services, Firestore/GCS data storage, Pub/Sub events, multi-region
strategy, security configuration, cost projections ($3.89/practice at
1000-practice scale), and disaster recovery procedures.

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: ADR-117 DrAgnes dermatology intelligence platform

Proposes DrAgnes as an AI-powered dermatology platform built on
RuVector's CNN, brain, and WASM infrastructure. Covers architecture,
data model, API design, HIPAA/FDA compliance strategy, 4-phase
implementation plan (2026-2051), cost model showing $3.89/practice
at scale, and acceptance criteria targeting >95% melanoma sensitivity
with offline-first WASM inference in <200ms.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(dragnes): deployment config — Dockerfile, Cloud Run, PWA manifest, service worker

Add production deployment infrastructure for DrAgnes:
- Multi-stage Dockerfile with Node 20 Alpine and non-root user
- Cloud Run knative service YAML (1-10 instances, 2 vCPU, 2 GiB)
- GCP deploy script with rollback support and secrets integration
- PWA manifest with SVG icons (192x192, 512x512)
- Service worker with offline WASM caching and background sync
- TypeScript configuration module with CNN, privacy, and brain settings

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs(dragnes): user-facing documentation and clinical guide

Add comprehensive DrAgnes documentation covering:
- Getting started and PWA installation
- DermLite device integration instructions
- HAM10000 classification taxonomy and result interpretation
- ABCDE dermoscopy scoring methodology
- Privacy architecture (DP, k-anonymity, witness hashing)
- Offline mode and background sync behavior
- Troubleshooting guide
- Clinical disclaimer and regulatory status

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(dragnes): brain integration — pi.ruv.io client, offline queue, witness chains, API routes

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(dragnes): CNN classification pipeline with ABCDE scoring and privacy layer

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix(dragnes): resolve build errors by externalizing @ruvector/cnn

Mark @ruvector/cnn as external in Rollup/SSR config so the dynamic
import in the classifier does not break the production build.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(dragnes): app integration, health endpoint, build validation

- Add DrAgnes nav link to sidebar NavMenu
- Create /api/dragnes/health endpoint with config status
- Add config module exporting DRAGNES_CONFIG
- Update DrAgnes page with loading state & error boundaries
- All 37 tests pass, production build succeeds

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(dragnes): benchmarks, dataset metadata, federated learning, deployment runbook

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix(dragnes): use @vite-ignore for optional @ruvector/cnn import

Prevents Vite dev server from failing on the optional WASM dependency
by using /* @vite-ignore */ comment and variable-based import path.

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix(dragnes): reduce false positives with Bayesian-calibrated classifier

Apply HAM10000 class priors as Bayesian log-priors to demo classifier,
learned from pi.ruv.io brain specialist agent patterns:
- nv (66.95%) gets strong prior, reducing over-classification of rare types
- mel requires multiple simultaneous features (dark + blue + multicolor +
  high variance) to overcome its 11.11% prior
- Added color variance analysis as asymmetry proxy
- Added dermoscopic color count for multi-color detection
- Platt-calibrated feature weights from brain melanoma specialist

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix(dragnes): require ≥2 concurrent evidence signals for melanoma

A uniformly dark spot was triggering melanoma at 74.5%. Now requires
at least 2 of: [dark >15%, blue-gray >3%, ≥3 colors, high variance]
to overcome the melanoma prior. Proven on 6 synthetic test cases:
0 false positives, 1/1 true melanoma detected at 91.3%.

Co-Authored-By: claude-flow <ruv@ruv.net>

* data(dragnes): HAM10000 metadata and analysis script

Add comprehensive analysis of the HAM10000 skin lesion dataset based on
published statistics from Tschandl et al. 2018. Generates class distribution,
demographic, localization, diagnostic method, and clinical risk pattern
analysis. Outputs both markdown report and JSON stats for the knowledge module.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(dragnes): HAM10000 clinical knowledge module with demographic adjustment

Add ham10000-knowledge.ts encoding verified HAM10000 statistics as structured
data for Bayesian demographic adjustment. Includes per-class age/sex/location
risk multipliers, clinical decision thresholds (biopsy at P(mal)>30%, urgent
referral at P(mel)>50%), and adjustForDemographics() function implementing
posterior probability correction based on patient demographics.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(dragnes): integrate HAM10000 knowledge into classifier

Add classifyWithDemographics() method to DermClassifier that applies Bayesian
demographic adjustment after CNN classification. Returns both raw and adjusted
probabilities for transparency, plus clinical recommendations (biopsy, urgent
referral, monitor, or reassurance) based on HAM10000 evidence thresholds.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(dragnes): wire HAM10000 demographics into UI

- Add patient age/sex inputs in Capture tab
- Toggle for HAM10000 Bayesian adjustment
- Pass body location from DermCapture to classifyWithDemographics()
- Clinical recommendation banner in Results tab with color-coded
  risk levels (urgent_referral/biopsy/monitor/reassurance)
- Shows melanoma + malignant probabilities and reasoning

Co-Authored-By: claude-flow <ruv@ruv.net>

* refactor(dragnes): move to standalone examples/dragnes/ app

Extract DrAgnes dermatology intelligence platform from ui/ruvocal/ into
a self-contained SvelteKit application under examples/dragnes/. Includes
all library modules, components, API routes, tests, deployment config,
PWA assets, and research documentation. Updated paths for standalone
routing (no /dragnes prefix), fixed static asset references, and
adjusted test imports.

Co-Authored-By: claude-flow <ruv@ruv.net>

* revert: restore ui/ruvocal to main state -- remove DrAgnes commingling

Remove all DrAgnes-related files, components, routes, and config from
ui/ruvocal/ so it matches the main branch exactly. DrAgnes now lives
as a standalone app in examples/dragnes/.

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix(ruvocal): fix icon 404 and FoundationBackground crash

- Manifest icon paths: /chat/chatui/ → /chatui/ (matches static dir)
- FoundationBackground: guard against undefined particles in connections

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix(ruvocal): MCP SSE auto-reconnect on stale session (404/connection errors)

- Widen isConnectionClosedError to catch 404, fetch failed, ECONNRESET
- Add transport readyState check in clientPool for dead connections
- Retry logic now triggers reconnection on stale SSE sessions

Co-Authored-By: claude-flow <ruv@ruv.net>

* chore: update gitignore for nested .env files and Cargo.lock

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: update links in README for self-learning, self-optimizing, embeddings, verified training, search, storage, PostgreSQL, graph, AI runtime, ML framework, coherence, domain models, hardware, kernel, coordination, packaging, routing, observability, safety, crypto, and lineage sections

* docs: ADR-115 cost-effective strategy + ADR-118 tiered crawl budget

Add Section 15 to ADR-115 with cost-effective implementation strategy:
- Three-phase budget model ($11-28/mo -> $73-108 -> $158-308)
- CostGuardrails Rust struct with per-phase presets
- Sparsifier-aware graph management (partition on sparse edges)
- Partition timeout fix via caching + background recompute
- Cloud Scheduler YAML for crawl jobs
- Anti-patterns and cost monitoring

Create ADR-118 as standalone cost strategy ADR with:
- Detailed per-phase cost breakdowns
- Guardrail enforcement points
- Partition caching strategy with request flow
- Acceptance criteria tied to cost targets

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: add pi.ruv.io brain guidance and project structure to CLAUDE.md

- When/how to use brain MCP tools during development
- Brain REST API fallback when MCP SSE is stale
- Google Cloud secrets and deployment reference
- Project directory structure quick reference
- Key rules: no PHI/secrets in brain, category taxonomy, stale session fix

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: Common Crawl Phase 1 benchmark — pipeline validation results

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix(brain): make InjectRequest.source optional for batch inject

The batch endpoint falls back to BatchInjectRequest.source when items
don't have their own source field, but serde deserialization failed
before the handler could apply this logic (422). Adding #[serde(default)]
lets items omit source when using batch inject.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat: Common Crawl Phase 1 deployment script — medical domain scheduler jobs

Deploy CDX-targeted crawl for PubMed + dermatology domains via Cloud Scheduler.
Uses static Bearer auth (brain server API key) instead of OIDC since Cloud Run
allows unauthenticated access and brain's auth rejects long JWT tokens.

Jobs: brain-crawl-medical (daily 2AM, 100 pages), brain-crawl-derm (daily 3AM,
50 pages), brain-partition-cache (hourly graph rebuild).

Tested: 10 new memories injected from first run (1568->1578). CDX falls back to
Wayback API from Cloud Run. ADR-118 Phase 1 implementation.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat: ADR-119 historical crawl evolutionary comparison

Implement temporal knowledge evolution tracking across quarterly
Common Crawl snapshots (2020-2026). Includes:
- ADR-119 with architecture, cost model, acceptance criteria
- Historical crawl import script (14 quarterly snapshots, 5 domains)
- Evolutionary analysis module (drift detection, concept birth, similarity)
- Initial analysis report on existing brain content (71 memories)

Cost: ~$7-15 one-time for full 2020-2026 import.

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: update ADR-115/118/119 with Phase 1 implementation results

- ADR-115: Status → Phase 1 Implemented, actual import numbers (1,588 memories,
  372K edges, 28.7x sparsifier), CDX vs direct inject pipeline status
- ADR-118: Status → Phase 1 Active, scheduler jobs documented, CDX HTML
  extractor issue + direct inject workaround, actual vs projected cost
- ADR-119: 30+ temporal articles imported (2020-2026), search verification
  confirmed, acceptance criteria progress tracked

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat: WET processing pipeline for full medical + CS corpus import (ADR-120)

Bypasses broken CDX HTML extractor by processing pre-extracted text
from Common Crawl WET files. Filters by 30 medical + CS domains,
chunks content, and batch injects into pi.ruv.io brain.

Includes: processor, filter/injector, Cloud Run Job config,
orchestrator for multi-segment processing.

Target: full corpus in 6 weeks at ~$200 total cost.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat: Cloud Run Job deployment for full 6-year Common Crawl import

- Expanded domain list to 60+ medical + CS domains with categorized tagging
- Cloud Run Job config: 10 parallel tasks, 100 segments per crawl
- Multi-crawl orchestrator for 14 quarterly snapshots (2020-2026)
- Enhanced generateTags with domain-specific labels for oncology, dermatology,
  ML conferences, research labs, and academic institutions
- Target: 375K-500K medical/CS pages over 5 months

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix: correct Cloud Run Job deploy to use env-vars-file and --source build

- Use --env-vars-file (YAML) to avoid comma-splitting in domain list
- Use --source deploy to auto-build container from Dockerfile
- Use correct GCS bucket (ruvector-brain-us-central1)
- Use --tasks flag instead of --task-count

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix: bake WET paths into container image to avoid GCS auth at runtime

- Embed paths.txt directly into Docker image during build
- Remove GCS bucket dependency from entrypoint
- Add diagnostic logging for brain URL and crawl index per task

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: update ADR-120 with deployment results and expanded domain list

- Status → Phase 1 Deployed
- 8 local segments: 109 pages injected from 170K scanned
- Cloud Run Job executing (50 segments, 10 parallel)
- 4 issues fixed (paths corruption, task index, comma splitting, gsutil)
- Domain list expanded 30 → 60+
- Brain: 1,768 memories, 565K edges, 39.8x sparsifier

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix: WET processor OOM — process records inline, increase memory to 2Gi

Node.js heap exhausted at 512MB buffering 21K WARC records.
Fix: process each record immediately instead of accumulating in
pendingRecords array. Also cap per-record content length and
increase Cloud Run Job memory from 1Gi to 2Gi with --max-old-space-size=1536.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat: add 30 physics domains + keyword detection to WET crawler

Add CERN, INSPIRE-HEP, ADS, NASA, LIGO, Fermilab, SLAC, NIST,
Materials Project, Quanta Magazine, quantum journals, IOP, APS,
and national labs. Physics keyword detection for dark matter,
quantum, Higgs, gravitational waves, black holes, condensed matter,
fusion energy, neutrinos, and string theory.

Total domains: 90+ (medical + CS + physics).

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat: expand WET crawler to 130+ domains across all knowledge areas

Added: GitHub, Stack Overflow/Exchange, patent databases (USPTO, EPO),
preprint servers (bioRxiv, medRxiv, chemRxiv, SSRN), Wikipedia,
government (NSF, DARPA, DOE, EPA), science news, academic publishers
(JSTOR, Cambridge, Sage, Taylor & Francis), data repositories
(Kaggle, Zenodo, Figshare), and ML explainer blogs.

Total: 130+ domains covering medical, CS, physics, code, patents,
preprints, regulatory, news, and open data.

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix(brain): update Gemini model to gemini-2.5-flash with env override

Old model ID gemini-2.5-flash-preview-05-20 was returning 404.
Updated default to gemini-2.5-flash (stable release).
Added GEMINI_MODEL env var override for future flexibility.

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat(brain): integrate Google Search Grounding into Gemini optimizer (ADR-121)

Add google_search tool to Gemini API calls so the optimizer verifies
generated propositions against live web sources. Grounding metadata
(source URLs, support scores, search queries) logged for auditability.

- google_search tool added to request body
- Grounding metadata parsed and logged
- Configurable via GEMINI_GROUNDING env var (default: true)
- Model updated to gemini-2.5-flash (stable)
- ADR-121 documents integration

Co-Authored-By: claude-flow <ruv@ruv.net>

* fix(brain): deploy-all.sh preserves env vars, includes all features

CRITICAL FIX: Changed --set-env-vars to --update-env-vars so deploys
don't wipe FIRESTORE_URL, GEMINI_API_KEY, and feature flags.

Now includes:
- FIRESTORE_URL auto-constructed from PROJECT_ID
- GEMINI_API_KEY fetched from Google Secrets Manager
- All 22 feature flags (GWT, SONA, Hopfield, HDC, DentateGyrus,
  midstream, sparsifier, DP, grounding, etc.)
- Session affinity for SSE MCP connections

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: update ADR-121 with deployment verification and optimization gaps

- Verified: Gemini 2.5 Flash + grounding working
- Brain: 1,808 memories, 611K edges, 42.4x sparsifier
- Documented 5 optimization opportunities:
  1. Graph rebuild timeout (>90s for 611K edges)
  2. In-memory state loss on deploy
  3. SONA needs trajectory injection path
  4. Scheduler jobs need first auto-fire
  5. WET daily needs segment rotation

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: design rvagent autonomous Gemini grounding agents (ADR-122)

Four-phase system for autonomous knowledge verification and enrichment
of the pi.ruv.io brain using Gemini 2.5 Flash with Google Search
grounding. Addresses the gap where all 11 propositions are is_type_of
and the Horn clause engine has no relational data to chain.

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: ADR-122 Rev 2 — candidate graph, truth maintenance, provenance

Applied 6 priority revisions from architecture review:
1. Reworked cost model with 3 scenarios (base/expected/worst)
2. Added candidate vs canonical graph separation with promotion gates
3. Narrowed predicate set to causes/treats/depends_on/part_of/measured_by
4. Replaced regex-only PHI with allowlist-based serialization
5. Added truth maintenance state machine (7 proposition states)
6. Added provenance schema for every grounded mutation

Status: Approved with Revisions

Co-Authored-By: claude-flow <ruv@ruv.net>

* feat: implement 4 Gemini grounding agents + Cloud Run deploy (ADR-122)

Phase 1 (Fact Verifier): verified 2 memories with grounding sources
Phase 2 (Relation Generator): found 1 'contradicts' relation
Phase 3 (Cross-Domain Explorer): framework working, needs JSON parse fix
Phase 4 (Research Director): framework working, needs drift data

Scripts: gemini-agents.js, deploy-gemini-agents.sh
Cloud Run Job + 4 scheduler entries deploying.
Brain grew: 1,809 → 1,812 (+3 from initial run)

Co-Authored-By: claude-flow <ruv@ruv.net>

* perf(brain): upgrade to 4 CPU / 4 GiB / 20 instances + rate limit WET injector

- Cloud Run: 2 CPU → 4 CPU, 2 GiB → 4 GiB, max 10 → 20 instances
- WET injector: 1s delay between batch injects to prevent brain saturation
- Deploy script updated to match new resource allocation

Co-Authored-By: claude-flow <ruv@ruv.net>

* docs: ADR-122 Rev 2 — candidate graph, truth maintenance, provenance

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-03-23 10:12:50 -04:00

16 KiB

DrAgnes HIPAA Compliance Strategy

Status: Research & Planning Date: 2026-03-21

Overview

DrAgnes operates at the intersection of medical imaging, AI classification, and collective intelligence. This document defines the comprehensive strategy for HIPAA compliance, FDA considerations, and privacy engineering that ensures patient data is protected at every layer while still enabling practice-adaptive and collective learning.

Regulatory Framework

HIPAA (Health Insurance Portability and Accountability Act)

DrAgnes must comply with:

  • Privacy Rule (45 CFR 164.500-534): Governs use and disclosure of PHI
  • Security Rule (45 CFR 164.302-318): Technical, administrative, and physical safeguards
  • Breach Notification Rule (45 CFR 164.400-414): Notification within 60 days
  • HITECH Act: Enhanced penalties, breach notification to HHS for 500+ records

FDA Considerations

DrAgnes functions as a Clinical Decision Support (CDS) tool. Under FDA guidance on Clinical Decision Support Software (2022 final guidance):

Criteria for Non-Device CDS (all four must be met):

  1. Not intended to acquire, process, or analyze a medical image -- DrAgnes processes dermoscopic images, so this criterion is NOT met
  2. Displays/analyzes but does not replace clinician judgment
  3. Intended for healthcare professionals
  4. Provides basis for understanding the recommendation

Conclusion: DrAgnes likely falls under FDA regulation as a Software as a Medical Device (SaMD). The classification depends on the intended use:

  • Class II (510(k)): If positioned as an aid to dermatologists (not standalone diagnosis)
  • Class III (PMA): If positioned as a screening/diagnostic tool for non-specialists

Recommended Regulatory Path: Class II 510(k) with predicate device comparison to 3Derm (DEN200069, FDA-cleared AI for skin cancer detection). Position DrAgnes as a clinical decision support tool that assists qualified dermatologists.

FDA 21 CFR 820 (Quality System Regulation)

If pursuing FDA clearance:

  • Design Controls (820.30): Design input, output, review, verification, validation
  • Software Validation (820.70(i)): Per FDA guidance on General Principles of Software Validation
  • SOUP Documentation: Software of Unknown Provenance (MobileNetV3 architecture, pre-trained weights)
  • Risk Management: ISO 14971 risk analysis for AI/ML components
  • Post-Market Surveillance: Monitoring model performance drift in production

PHI Handling Architecture

What Constitutes PHI in DrAgnes

Data Element PHI? Handling
Dermoscopic image (raw) Yes (biometric) Never leaves device. Stored in IndexedDB, encrypted
Patient name Yes Never stored in DrAgnes. Linked via EHR only
Date of birth Yes Converted to age decade (30s, 40s, ...) before any processing
MRN / Chart number Yes Never stored. External reference only via EHR integration
Classification result Potentially De-identified before brain submission
CNN embedding (576-dim) No* Non-invertible. Cannot reconstruct image from embedding
ABCDE scores No* Aggregated metrics, not identifiable
Body location Potentially Generalized to category (trunk, extremity, head)
Fitzpatrick skin type No Population-level demographic, not individually identifying
GPS coordinates Yes Stripped from EXIF before any processing
Device serial number Yes (indirect) Stripped from EXIF metadata
Clinician notes (free text) Yes NLP-based PII detection before any storage/sharing

*When combined, these elements could potentially be re-identifying. k-anonymity (k>=5) is enforced on all combinations.

The "No Raw Image" Principle

The foundational privacy guarantee of DrAgnes:

RAW IMAGE ──▶ CNN ──▶ EMBEDDING ──▶ BRAIN
    │                      │
    │                      └── Non-invertible: cannot reconstruct image
    │                          from 576-dim float vector
    │
    └── NEVER LEAVES DEVICE
        - Stored in IndexedDB (encrypted)
        - Processed locally (WASM CNN)
        - Displayed locally only
        - Deleted per retention policy

Mathematical basis for non-invertibility: MobileNetV3 Small maps a 224x224x3 = 150,528-dimensional input to a 576-dimensional embedding. This is a 261:1 dimensionality reduction. The mapping is many-to-one (infinite input images map to the same embedding). No computational technique can invert this mapping to recover the original image.

PII Stripping Pipeline

Leverages the existing brain server's redaction infrastructure:

Input Record
    │
    ▼
Stage 1: EXIF Sanitization
    ├── Remove GPS coordinates
    ├── Remove device serial number
    ├── Remove camera make/model (keep DermLite type only)
    ├── Remove software version strings
    └── Remove timestamp (replace with date-only, bucketed to week)
    │
    ▼
Stage 2: Demographic Generalization
    ├── Age → decade bucket (20, 30, 40, ...)
    ├── Body location → category (head, trunk, upper_extremity, lower_extremity)
    ├── Gender → removed (not clinically necessary for classification)
    └── Ethnicity → Fitzpatrick scale only (I-VI)
    │
    ▼
Stage 3: Free Text Scrubbing
    ├── Named entity recognition (NER) for person names
    ├── Pattern matching for MRN, SSN, phone, email, address
    ├── Date normalization (remove exact dates, keep relative)
    └── Organization name redaction
    │
    ▼
Stage 4: k-Anonymity Enforcement
    ├── Group by (Fitzpatrick, age_decade, body_location_category)
    ├── Suppress groups with fewer than k=5 members
    └── Generalize further if needed to achieve k-anonymity
    │
    ▼
Stage 5: Differential Privacy
    ├── Laplace noise to continuous values (epsilon=1.0)
    ├── Randomized response for binary features
    └── Privacy budget tracking (per practice, per epoch)
    │
    ▼
Clean Record (ready for brain submission)

Differential Privacy Implementation

Mechanism: Laplace mechanism with epsilon=1.0 (matching brain server's current configuration).

For each continuous value v with sensitivity Δ:
    v_noisy = v + Laplace(0, Δ/epsilon)

For embeddings (576-dim vector):
    Each dimension independently noised
    Sensitivity calibrated per-dimension from training data
    epsilon budget split across dimensions: epsilon_per_dim = epsilon / sqrt(576) ≈ 0.042

Privacy Budget Tracking:

  • Each practice has an annual privacy budget (epsilon_total = 10.0)
  • Each brain contribution costs epsilon=1.0
  • Budget resets annually
  • When budget exhausted, contributions are aggregated locally until reset
  • Brain server tracks global dp_budget_used (currently 1.0)

Witness Chain Audit Trail

Every DrAgnes classification carries a cryptographic provenance chain:

Witness Chain Structure:
    [0..31]  = Previous witness hash (or zeros for genesis)
    [32..63] = SHAKE-256(
                  model_version ||
                  brain_epoch ||
                  input_embedding_hash ||
                  classification_output ||
                  clinician_id_hash ||
                  timestamp
               )
    [64..N]  = Chain continuation

Audit capabilities:

  • Verify which model version produced a classification
  • Verify the brain state at classification time
  • Detect if a classification has been tampered with
  • Reconstruct the full decision chain for regulatory review
  • Prove temporal ordering of classifications

Technical Safeguards (Security Rule)

Access Controls (164.312(a))

Control Implementation
Unique user identification OAuth 2.0 with Google Identity Platform
Emergency access Break-glass procedure with audit logging
Automatic logoff 15-minute session timeout, token refresh required
Encryption AES-256-GCM at rest, TLS 1.3 in transit
Role-based access Admin, Clinician, Technician, Viewer roles
Multi-factor authentication Required for all clinician accounts

Audit Controls (164.312(b))

Audit Event Data Captured
Image capture Timestamp, device, user, body location
Classification run Timestamp, model version, brain epoch, user
Brain contribution Timestamp, de-identification confirmation, witness hash
Brain search Timestamp, query type, result count
Record access Timestamp, user, record ID, access type
Export Timestamp, user, data scope, format
Failed login Timestamp, user identifier, IP, reason

Retention: Audit logs retained for 6 years (HIPAA minimum) in append-only Cloud Logging with CMEK encryption.

Integrity Controls (164.312(c))

  • All data at rest uses AES-256-GCM with Google Cloud CMEK
  • All witness chains are append-only (SHAKE-256, tamper-evident)
  • Database writes use Firestore transactions (ACID)
  • Model weight integrity verified via SHA-256 checksums before inference
  • WASM module integrity verified via Subresource Integrity (SRI) hashes

Transmission Security (164.312(e))

  • TLS 1.3 required for all connections (no fallback)
  • Certificate pinning for mobile PWA
  • HSTS with 1-year max-age and preloading
  • Perfect forward secrecy (ECDHE)
  • Brain sync uses authenticated encryption (witness chain verification)

Administrative Safeguards

Business Associate Agreement (BAA)

Required BAAs:

Entity Role BAA Status
Google Cloud Platform Infrastructure provider Google Cloud BAA available (standard)
DermLite / 3Gen Inc. Hardware manufacturer Not required (no PHI exchange)
Practice using DrAgnes Covered entity BAA with DrAgnes operator required
PubMed / NCBI Literature source Not required (public data)

Google Cloud BAA Coverage: Google Cloud's BAA covers Cloud Run, Firestore, GCS, Pub/Sub, Cloud Logging, Secret Manager, and Cloud KMS -- all services used by DrAgnes.

Workforce Training

  • All personnel with access to DrAgnes infrastructure must complete HIPAA training annually
  • Security awareness training quarterly
  • Incident response drills semi-annually
  • Role-specific training for developers handling PHI-adjacent code

Incident Response Plan

Incident Detection
    │
    ├── Automated: Cloud Monitoring alerts, anomaly detection
    ├── Manual: User reports, security team discovery
    │
    ▼
Assessment (within 1 hour)
    ├── Determine if PHI was involved
    ├── Classify severity (1-4)
    ├── Identify affected individuals
    │
    ▼
Containment (within 4 hours)
    ├── Isolate affected systems
    ├── Revoke compromised credentials
    ├── Preserve forensic evidence
    │
    ▼
Notification (within 60 days per HIPAA)
    ├── Individual notification if PHI compromised
    ├── HHS notification if 500+ individuals affected (within 60 days)
    ├── Media notification if 500+ in single state
    ├── State attorney general notification (varies by state)
    │
    ▼
Remediation
    ├── Root cause analysis
    ├── System hardening
    ├── Policy updates
    └── Post-incident review

Data Retention Policy

Data Type Retention Location Justification
Raw dermoscopic images Per practice policy (default 7 years) Device only (IndexedDB) Clinical record retention
CNN embeddings (local) Same as images Device only Tied to image lifecycle
Brain contributions Indefinite (de-identified) GCS / Firestore Research value, non-PHI
Audit logs 6 years Cloud Logging HIPAA minimum
Model weights Indefinite GCS Reproducibility
Classification results Per practice policy Device + Firestore Clinical record
Clinician feedback Indefinite (de-identified) Firestore Model improvement

Risk Assessment

HIPAA Risk Analysis (164.308(a)(1))

Risk Likelihood Impact Mitigation
Raw image exfiltration Low Critical Images never leave device; no upload API exists
Re-identification from embeddings Very Low High 261:1 dimensionality reduction; k-anonymity; DP noise
Model inversion attack Very Low High MobileNetV3 is many-to-one; DP noise prevents gradient-based inversion
Insider threat (developer) Low High No production access to PHI; all PHI stays on device
Cloud infrastructure breach Low Medium Only de-identified data in cloud; CMEK encryption
Man-in-the-middle Very Low High TLS 1.3 + certificate pinning
Malicious model update Low High Model checksums + witness chain verification
Session hijacking Low Medium Short session timeout; MFA; secure cookies

FDA Risk Analysis (ISO 14971)

Hazard Severity Probability Risk Level Mitigation
False negative (missed melanoma) Critical Medium High >95% sensitivity target; always recommend dermatologist review
False positive (unnecessary biopsy) Moderate Medium Medium >85% specificity; clinical decision support, not standalone
Model drift (accuracy degradation) Serious Low Medium Brain drift monitoring; automated retraining triggers
Bias against skin types Serious Medium High Fitzpatrick-stratified evaluation; diverse training data
System unavailability Minor Low Low Offline-first architecture; no dependency on connectivity

International Considerations

While DrAgnes targets US deployment first, the architecture supports international compliance:

Regulation Region Key Requirement DrAgnes Approach
GDPR EU Data minimization, right to erasure Embeddings are non-invertible; erasure of device data trivial
PIPEDA Canada Consent, purpose limitation Explicit consent workflow; purpose-bound data processing
LGPD Brazil Data protection officer, consent DPO appointment; consent management
POPIA South Africa Processing limitation Minimal data collection; de-identification
MDR 2017/745 EU Medical device regulation CE marking pathway if EU deployment
PMDA Japan Pharmaceutical and medical device regulation J-PMDA approval pathway

Compliance Monitoring

Continuous Compliance Dashboard

DrAgnes Compliance Dashboard
    │
    ├── Privacy Budget Status
    │       ├── Per-practice epsilon consumption
    │       ├── Global DP budget (currently 1.0 used)
    │       └── Budget exhaustion forecast
    │
    ├── Access Audit
    │       ├── Login frequency by role
    │       ├── Failed login attempts
    │       ├── Anomalous access patterns
    │       └── Break-glass usage
    │
    ├── Data Flow Verification
    │       ├── Confirmation: zero raw images in cloud
    │       ├── PII stripping success rate (target: 100%)
    │       ├── k-anonymity compliance rate
    │       └── Witness chain integrity checks
    │
    ├── Model Governance
    │       ├── Current model version across practices
    │       ├── Drift detection alerts
    │       ├── Fairness metrics by Fitzpatrick type
    │       └── Sensitivity/specificity by subgroup
    │
    └── Incident Tracker
            ├── Open incidents
            ├── Time to resolution
            ├── Breach notification status
            └── Corrective action tracking