summaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/client-feature-audit.md123
1 files changed, 123 insertions, 0 deletions
diff --git a/docs/client-feature-audit.md b/docs/client-feature-audit.md
new file mode 100644
index 0000000..38d710e
--- /dev/null
+++ b/docs/client-feature-audit.md
@@ -0,0 +1,123 @@
+# Aegis Usenet client feature audit
+
+This audit separates a complete NNTP reader/poster from optional features that
+would conflict with Aegis privacy and VFace goals. It is based on RFC 3977,
+RFC 4642, RFC 4643, RFC 5536, RFC 5537, RFC 6048 and RFC 8054.
+
+## Current state
+
+| Area | Status | Notes |
+| --- | --- | --- |
+| Implicit TLS | Present | TLS 1.2 and 1.3, certificate validation by default. |
+| STARTTLS | Present | Explicit TLS upgrade is available on servers exposing port 119. |
+| AUTHINFO USER/PASS | Present | Password remains in memory and requires TLS. |
+| AUTHINFO SASL | Present | PLAIN is used only after capability negotiation and TLS. |
+| CAPABILITIES | Partial | Parsed, but capability-specific behavior is limited. |
+| Group discovery | Present | LIST NEWSGROUPS, OVERVIEW.FMT, NEWGROUPS and NEWNEWS are available. |
+| Overview | Present | `OVER` with `XOVER` fallback. |
+| Article retrieval | Present | ARTICLE, HEAD, BODY, STAT, LISTGROUP and HDR are available. |
+| Posting | Present | Direct NNTP posting with MIME, VFace and optional age/Ed25519 metadata. |
+| Threading | Partial | Local thread trees and References-aware replies are available; tree UI remains. |
+| Search | Partial | Basic overview filtering only; no indexed local full-text search. |
+| Offline cache | Present | Local article metadata/raw cache and drafts use atomic 0600 JSON state. |
+| Filters and scoring | Present | Generic deterministic local rules support classic headers, body, VFace and tags. |
+| MIME and attachments | Partial | Text MIME works; attachment file selection/presentation remains. |
+| Identity | Present | VFace profile, deterministic PNG, SHA-256 metadata and public verification link. |
+| Identity verification | Present | Reader verifies VFace hashes, Face and Ed25519 body signatures locally. |
+| OpenPGP/MIME posting | Deferred | OpenPGP is reserved for the YubiKey integration, not a standalone composer format. |
+| SURB | Deferred | Kept separate from classic Usenet and body encryption. |
+
+## Complete client scope
+
+### 1. NNTP transport and account handling
+
+- server profiles with separate credentials, proxy and TLS policies;
+- implicit TLS and STARTTLS with capability checks;
+- AUTHINFO USER/PASS and capability-negotiated SASL;
+- IPv4/IPv6, reconnect with bounded backoff and cancellation;
+- capability cache scoped to a server profile;
+- `COMPRESS DEFLATE` when advertised, with a user-visible opt-in only on
+ cleartext NNTP; it is rejected on every TLS connection;
+- exact response-code handling and a diagnostic transcript that redacts
+ credentials, public-key URLs and article bodies.
+
+### 2. Group and article navigation
+
+- `LIST ACTIVE`, `LIST NEWSGROUPS`, `LIST OVERVIEW.FMT`, moderation metadata and
+ RFC 6048 list additions;
+- `NEWGROUPS` and `NEWNEWS` for incremental discovery;
+- `GROUP`, `LISTGROUP`, `OVER`, `HDR`, `ARTICLE`, `HEAD`, `BODY` and `STAT`;
+- paging, first/last/next navigation, column sorting and cross-post awareness;
+- thread trees from `References`, `In-Reply-To` and `Message-ID`;
+- local read/unread state, bookmarks, tags, mute and collapse controls;
+- raw article view plus normalized text view, always retaining original headers.
+
+### 3. Composer and posting
+
+- reply and follow-up generation with quoted text and correct references;
+- draft storage and a recoverable outbox, never automatic duplicate reposting;
+- explicit cross-post confirmation and `Followup-To` support;
+- moderated-group detection and an `Approved` workflow only when the server
+ or moderator policy authorizes it;
+- MIME multipart text and attachments, with strict size and line limits;
+- age as the software encryption format; OpenPGP only through YubiKey;
+- post result showing the server response and assigned article information.
+
+### 4. Local filters and scoring
+
+Filters should be local-only and deterministic. They should match headers,
+VFace identity hash, public-key fingerprint, newsgroups, dates and optionally
+body text. Actions should be hide, mark read, highlight, tag, mute thread and
+save locally. They must never silently delete server articles, send network
+requests, or rewrite a user's identity.
+
+Use RE2 regular expressions, bounded body reads and an explicit rule order.
+Filter files should be portable JSON or TOML, with a schema version and a
+dry-run preview. A filter that references a stable VFace key is intentionally
+linkable and must be shown as such in the UI.
+
+### 5. Pseudonymity and privacy invariants
+
+- VFace is the only profile image mechanism: no upload, replacement or
+ alternate image format;
+- private keys never enter settings, drafts, logs or crash
+ reports;
+- `Path`, `Injection-Info` and `Xref` remain server-controlled trace fields;
+- no local hostname, IP address, proxy address or real name is added to posts;
+- `Message-ID` uses the neutral Aegis domain, not the From address domain;
+- the configured SOCKS/Nym route is visible as a transport policy, not embedded
+ in article metadata;
+- URL verification is opt-in metadata and is never fetched automatically;
+- local caches and filter databases need an explicit location and retention
+ policy, with an option to purge them;
+- optional features remain inside the audited main binary so their access to
+ network, files, article bodies and identity material is explicit.
+
+## Priority order
+
+### P0, remaining for a usable complete text client
+
+1. Add a visible thread-tree view and cache purge controls.
+2. Add offline browsing of cached articles and drafts.
+
+### P1, interoperability and daily usability
+
+1. Add attachment file selection and reader presentation.
+2. Add moderated-posting warnings and cross-post confirmation.
+
+### P2, advanced features
+
+1. Moderated posting workflows and control-message handling with explicit
+ warnings.
+2. Multiple server profiles, synchronization policies and import/export.
+3. SURB adapters, only after a concrete target protocol is selected.
+
+## References
+
+- [RFC 3977, NNTP](https://www.rfc-editor.org/rfc/rfc3977.html)
+- [RFC 4642, NNTP STARTTLS](https://www.rfc-editor.org/rfc/rfc4642.html)
+- [RFC 4643, NNTP authentication](https://www.rfc-editor.org/rfc/rfc4643.html)
+- [RFC 5536, Netnews article format](https://www.rfc-editor.org/rfc/rfc5536.html)
+- [RFC 5537, Netnews architecture and protocols](https://www.rfc-editor.org/rfc/rfc5537.html)
+- [RFC 6048, NNTP LIST additions](https://www.rfc-editor.org/rfc/rfc6048.html)
+- [RFC 8054, NNTP compression](https://www.rfc-editor.org/rfc/rfc8054.html)