v0.0.6: Delivery receipts (sent/delivered/read)

Protocol:
- WireMessage::Receipt { sender_fingerprint, message_id, receipt_type }
- ReceiptType enum: Delivered, Read
- id field added to KeyExchange and Message variants
- Receipts are plaintext (not encrypted) — contain only ID + type

Web client:
- Auto-sends Delivered receipt on successful decrypt
- Tracks sent message IDs with receipt status
- Displays: ✓ (sent, gray), ✓✓ (delivered, white), ✓✓ (read, blue)
- Receipt indicators update live via DOM reference

CLI TUI:
- Auto-sends Delivered receipt back to sender on decrypt
- Tracks receipt status per message ID
- Displays receipt indicators after sent messages

WASM:
- create_receipt() function for web client
- encrypt_with_id/encrypt_key_exchange_with_id for tracking
- decrypt_wire_message handles Receipt variant

17/17 protocol tests pass. Zero warnings.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Siavash Sameni
2026-03-27 10:12:43 +04:00
parent 8fad8d8374
commit 104ba78b85
8 changed files with 395 additions and 79 deletions

10
warzone/Cargo.lock generated
View File

@@ -2647,7 +2647,7 @@ dependencies = [
[[package]]
name = "warzone-client"
version = "0.0.5"
version = "0.0.6"
dependencies = [
"anyhow",
"argon2",
@@ -2679,7 +2679,7 @@ dependencies = [
[[package]]
name = "warzone-mule"
version = "0.0.5"
version = "0.0.6"
dependencies = [
"anyhow",
"clap",
@@ -2688,7 +2688,7 @@ dependencies = [
[[package]]
name = "warzone-protocol"
version = "0.0.5"
version = "0.0.6"
dependencies = [
"base64",
"bincode",
@@ -2711,7 +2711,7 @@ dependencies = [
[[package]]
name = "warzone-server"
version = "0.0.5"
version = "0.0.6"
dependencies = [
"anyhow",
"axum",
@@ -2738,7 +2738,7 @@ dependencies = [
[[package]]
name = "warzone-wasm"
version = "0.0.5"
version = "0.0.6"
dependencies = [
"base64",
"bincode",