PhoinixDR architecture overview
┌─────────────────────────────────────────────────────────────┐
│ PhoinixDR Desktop (apps/desktop) │
│ Tauri 2 + React/TS │
└───────────────────────────┬─────────────────────────────────┘
│ in-process service layer (phoinix-session, ADR-0010)
┌───────────────────────────▼─────────────────────────────────┐
│ phoinixd (future out-of-process service) │
└───────────────────────────┬─────────────────────────────────┘
│
┌───────────────────────────▼─────────────────────────────────┐
│ PhoinixDR Core │
│ phoinix-core identifiers, ranges, checked arithmetic │
│ phoinix-block read-only BlockReader, RAW, subranges │
│ phoinix-device device enumeration, read-only access │
│ phoinix-volume MBR / EBR / GPT, partition views │
│ phoinix-fs probes, recovery candidates, providers │
│ phoinix-fs-ntfs native NTFS reader + undelete │
│ phoinix-fs-fat native FAT12/16/32 reader + undelete │
│ phoinix-fs-exfat native exFAT reader + undelete │
│ phoinix-fs-ext native ext2/3/4 reader, journal, undelete│
│ phoinix-image E01/VHD/VHDX/VMDK containers, hashing │
│ phoinix-health evidence, scoring, explanations │
│ phoinix-carve deep scan: signature carving, assembly │
│ phoinix-partition-recovery lost partitions, virtual mount │
│ phoinix-session service layer: scans, sessions, previews │
│ apps/desktop Tauri 2 shell + React front-end │
│ phoinix-recovery recovery writer, safety, SHA-256 │
└─────────────────────────────────────────────────────────────┘
Crate dependency direction
phoinix-core
▲
phoinix-block ◄── phoinix-image ◄── phoinix-device
▲
phoinix-volume phoinix-health
▲ ▲
phoinix-fs ◄───────────────┘
▲
phoinix-fs-ntfs / phoinix-fs-fat / phoinix-fs-exfat / phoinix-fs-ext
phoinix-carve (phoinix-fs contracts + phoinix-health only)
phoinix-partition-recovery (block, volume, engines' boot parsers, carve scanner)
phoinix-session (composes engines, carve, partition recovery and recovery; no GUI dependency)
apps/desktop/src-tauri (phoinix-session only; separate Cargo workspace)
▲
phoinix-recovery (phoinix-fs contracts, phoinix-image for the report's container facts)
▲
phoinix-cli
Generic crates never depend on filesystem-specific crates. phoinix-recovery
reads candidate content through the DeletedFileProvider contract in
phoinix-fs, so it works with any filesystem engine.
Data flow of the first vertical slice
RAW or physical NTFS source phoinix-block / phoinix-device
↓
identify partition table phoinix-volume
↓
locate NTFS volume phoinix-fs probes (NtfsProbe)
↓
parse $MFT phoinix-fs-ntfs
↓
identify deleted FILE records
recover filename and parent
resolve resident / non-resident data
resolve runlist, query $Bitmap
↓
build RecoveryEvidence phoinix-fs-ntfs → phoinix-health
↓
calculate RecoveryHealth phoinix-health
↓
recover to destination, SHA-256 phoinix-recovery
deep scan (carving of free space) phoinix-carve, over AllocationView of the engine
Policies
- Read-only sources
- Synchronous I/O
- Typed errors (
thiserror) in libraries;anyhowonly in applications. - Checked arithmetic for every media-derived value (
phoinix_core::arith). - Bounds-checked byte access (
phoinix_core::bytes). #![forbid(unsafe_code)]except inphoinix-deviceplatform modules.- Structured
tracing: INFO for process events, DEBUG may include filenames, TRACE for sector-level diagnostics. Recovered content is never logged.