chore: rename project quicnprotochat -> quicproquo (binaries: qpq)
Rename the entire workspace:
- Crate packages: quicnprotochat-{core,proto,server,client,gui,p2p,mobile} -> quicproquo-*
- Binary names: quicnprotochat -> qpq, quicnprotochat-server -> qpq-server,
quicnprotochat-gui -> qpq-gui
- Default files: *-state.bin -> qpq-state.bin, *-server.toml -> qpq-server.toml,
*.db -> qpq.db
- Environment variable prefix: QUICNPROTOCHAT_* -> QPQ_*
- App identifier: chat.quicnproto.gui -> chat.quicproquo.gui
- Proto package: quicnprotochat.bench -> quicproquo.bench
- All documentation, Docker, CI, and script references updated
HKDF domain-separation strings and P2P ALPN remain unchanged for
backward compatibility with existing encrypted state and wire protocol.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
# Crate Responsibilities
|
||||
|
||||
The quicnprotochat workspace contains six crates. The main four (proto, core,
|
||||
The quicproquo workspace contains six crates. The main four (proto, core,
|
||||
server, client) follow strict layering rules; each owns one concern and depends
|
||||
only on the crates below it. The workspace also includes **quicnprotochat-gui**
|
||||
(Tauri desktop app) and **quicnprotochat-p2p** (P2P endpoint resolution). This
|
||||
only on the crates below it. The workspace also includes **quicproquo-gui**
|
||||
(Tauri desktop app) and **quicproquo-p2p** (P2P endpoint resolution). This
|
||||
page documents what each crate provides, what it explicitly avoids, and how the
|
||||
crates relate to one another.
|
||||
|
||||
@@ -13,7 +13,7 @@ crates relate to one another.
|
||||
|
||||
```text
|
||||
┌──────────────────────────┐
|
||||
│ quicnprotochat-client │
|
||||
│ quicproquo-client │
|
||||
│ (CLI, QUIC client, │
|
||||
│ GroupMember orchestr.) │
|
||||
└─────────┬───────┬────────┘
|
||||
@@ -21,7 +21,7 @@ crates relate to one another.
|
||||
┌───────┘ └────────┐
|
||||
▼ ▼
|
||||
┌────────────────────────┐ ┌────────────────────────┐
|
||||
│ quicnprotochat-core │ │ quicnprotochat-server │
|
||||
│ quicproquo-core │ │ quicproquo-server │
|
||||
│ (crypto, MLS, │ │ (QUIC listener, │
|
||||
│ hybrid KEM) │ │ NodeService RPC, │
|
||||
│ │ │ storage) │
|
||||
@@ -30,7 +30,7 @@ crates relate to one another.
|
||||
│ ┌───────────────────┘
|
||||
▼ ▼
|
||||
┌────────────────────────┐
|
||||
│ quicnprotochat-proto │
|
||||
│ quicproquo-proto │
|
||||
│ (Cap'n Proto schemas, │
|
||||
│ codegen, helpers) │
|
||||
└────────────────────────┘
|
||||
@@ -42,7 +42,7 @@ serialisation. The server and client crates both depend on core and proto.
|
||||
|
||||
---
|
||||
|
||||
## quicnprotochat-core
|
||||
## quicproquo-core
|
||||
|
||||
**Role:** Pure cryptographic logic. No network I/O. No async runtime
|
||||
dependency.
|
||||
@@ -70,12 +70,12 @@ dependency.
|
||||
|
||||
`ed25519-dalek`, `openmls`, `openmls_rust_crypto`,
|
||||
`openmls_traits`, `tls_codec`, `ml-kem`, `x25519-dalek`, `chacha20poly1305`,
|
||||
`hkdf`, `sha2`, `zeroize`, `capnp`, `quicnprotochat-proto`, `tokio`,
|
||||
`hkdf`, `sha2`, `zeroize`, `capnp`, `quicproquo-proto`, `tokio`,
|
||||
`serde`, `bincode`, `serde_json`, `thiserror`.
|
||||
|
||||
---
|
||||
|
||||
## quicnprotochat-proto
|
||||
## quicproquo-proto
|
||||
|
||||
**Role:** Cap'n Proto schema definitions, compile-time code generation, and
|
||||
pure-synchronous serialisation helpers. This crate is the single source of truth
|
||||
@@ -110,7 +110,7 @@ for the wire format.
|
||||
|
||||
---
|
||||
|
||||
## quicnprotochat-server
|
||||
## quicproquo-server
|
||||
|
||||
**Role:** Network-facing server binary. Accepts QUIC + TLS 1.3 connections,
|
||||
dispatches Cap'n Proto RPC calls to `NodeServiceImpl`, and persists state to
|
||||
@@ -143,19 +143,19 @@ is handled by `spawn_local`.
|
||||
|
||||
### What this crate does NOT do
|
||||
|
||||
- No direct crypto operations (it delegates to `quicnprotochat-core` types
|
||||
- No direct crypto operations (it delegates to `quicproquo-core` types
|
||||
for fingerprinting and storage only).
|
||||
- No MLS processing -- all payloads are opaque byte strings.
|
||||
|
||||
### Key dependencies
|
||||
|
||||
`quicnprotochat-core`, `quicnprotochat-proto`, `quinn`, `quinn-proto`,
|
||||
`quicproquo-core`, `quicproquo-proto`, `quinn`, `quinn-proto`,
|
||||
`rustls`, `rcgen`, `capnp`, `capnp-rpc`, `tokio`, `tokio-util`, `dashmap`,
|
||||
`sha2`, `clap`, `tracing`, `anyhow`, `thiserror`, `bincode`, `serde`.
|
||||
|
||||
---
|
||||
|
||||
## quicnprotochat-client
|
||||
## quicproquo-client
|
||||
|
||||
**Role:** CLI client binary. Connects to the server over QUIC + TLS 1.3,
|
||||
orchestrates MLS group operations via `GroupMember`, and persists identity and
|
||||
@@ -167,7 +167,7 @@ group state to disk.
|
||||
|-------------------------|-------------|
|
||||
| `connect_node` | Establishes a QUIC/TLS connection, opens a bidirectional stream, and bootstraps a `capnp-rpc` `RpcSystem` to obtain a `node_service::Client`. |
|
||||
| CLI subcommands (`clap`)| `ping`, `register`, `fetch-key`, `demo-group`, `register-state`, `create-group`, `invite`, `join`, `send`, `recv`. |
|
||||
| `GroupMember` usage | The client creates a `GroupMember` (from `quicnprotochat-core`), calls `generate_key_package` / `create_group` / `add_member` / `join_group` / `send_message` / `receive_message`. |
|
||||
| `GroupMember` usage | The client creates a `GroupMember` (from `quicproquo-core`), calls `generate_key_package` / `create_group` / `add_member` / `join_group` / `send_message` / `receive_message`. |
|
||||
| State persistence | `StoredState` holds `identity_seed` (32 bytes) and optional serialised `MlsGroup`. A companion `.ks` file stores the `DiskKeyStore` with HPKE init private keys. |
|
||||
| Auth context | `ClientAuth` bundles an optional bearer token and device ID. Passed to every RPC via the `Auth` struct in `node.capnp`. |
|
||||
|
||||
@@ -194,7 +194,7 @@ group state to disk.
|
||||
|
||||
### Key dependencies
|
||||
|
||||
`quicnprotochat-core`, `quicnprotochat-proto`, `quinn`, `quinn-proto`,
|
||||
`quicproquo-core`, `quicproquo-proto`, `quinn`, `quinn-proto`,
|
||||
`rustls`, `capnp`, `capnp-rpc`, `tokio`, `tokio-util`, `clap`, `sha2`,
|
||||
`serde`, `bincode`, `anyhow`, `thiserror`, `tracing`.
|
||||
|
||||
@@ -204,8 +204,8 @@ group state to disk.
|
||||
|
||||
| Crate | Role |
|
||||
|-------------------------|------|
|
||||
| **quicnprotochat-gui** | Tauri 2 desktop application; provides a GUI on top of the client/core stack. |
|
||||
| **quicnprotochat-p2p** | P2P endpoint publish/resolve; used by the server and clients for direct peer discovery. |
|
||||
| **quicproquo-gui** | Tauri 2 desktop application; provides a GUI on top of the client/core stack. |
|
||||
| **quicproquo-p2p** | P2P endpoint publish/resolve; used by the server and clients for direct peer discovery. |
|
||||
|
||||
These crates are optional for building and running the server and CLI client.
|
||||
|
||||
@@ -220,12 +220,12 @@ These crates are optional for building and running the server and CLI client.
|
||||
4. **client** depends on **core** and **proto**. It does not depend on server.
|
||||
5. **server** and **client** never depend on each other. They communicate
|
||||
exclusively via the Cap'n Proto RPC wire protocol.
|
||||
6. **quicnprotochat-gui** and **quicnprotochat-p2p** are optional; they depend
|
||||
6. **quicproquo-gui** and **quicproquo-p2p** are optional; they depend
|
||||
on client/core/proto as needed and do not change the core layering.
|
||||
|
||||
This layering ensures that:
|
||||
|
||||
- Crypto code can be tested in isolation (`cargo test -p quicnprotochat-core`).
|
||||
- Crypto code can be tested in isolation (`cargo test -p quicproquo-core`).
|
||||
- Schema changes propagate automatically through codegen.
|
||||
- The server binary contains no client-side MLS orchestration logic.
|
||||
- The client binary contains no server-side storage or listener logic.
|
||||
|
||||
Reference in New Issue
Block a user