From 32066e3c4903b96242cc7cbc82a43138517f3439 Mon Sep 17 00:00:00 2001 From: salmonik Date: Sun, 1 Nov 2026 17:33:17 +0100 Subject: docs: record the GUI architecture and version lockstep; adopt GPL-3.0-or-later --- AGENTS.md | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'AGENTS.md') diff --git a/AGENTS.md b/AGENTS.md index ede8d67..e784624 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -51,6 +51,18 @@ - `ServerCore::poll` must be idempotent: it settles the round, removes the session, and pushes once. A second poll must produce nothing. +## GUI +- The GUI is a second frontend over `ClientCore`, not a second client. + Frontends send `Command` and render `View`; the core owns navigation and + state and contains no I/O or terminal types. +- egui lives in the `gui/` workspace member. Its dependencies must never + enter the TUI or server build graph: no GUI crate in the root package's + `[dependencies]`. +- First contact shows the fingerprint and waits for a decision before sending + any credentials. A changed key is a hard stop; forgetting it is explicit. +- The GUI is themed deliberately. Default egui styling is not an acceptable + look; keep a style module and a reference screen. + ## Client TUI - `render_lines()` and `render()` must agree. If `render()` uses `\r\n`, count lines against the same string the cursor will erase. @@ -98,14 +110,18 @@ Use semantic versioning (`MAJOR.MINOR.PATCH`) in `Cargo.toml`. - **MAJOR** — breaking protocol changes (wire format, TLS trust model, - database schema migration that can't auto-upgrade). Clients and servers - at different MAJOR versions are incompatible. -- **MINOR** — new features, new game types, new commands. Backwards - compatible: old clients work with new servers, new clients work with - old servers (they just don't see the new feature). + database schema migration that can't auto-upgrade). +- **MINOR** — new features, new game types, new commands, or any change to + shared semantics. - **PATCH** — bug fixes, payout corrections, refactors that don't change observable behavior. +Client and server are **MAJOR.MINOR lockstep**: they may differ only in the +patch component. `HELLO ` is the first line after TLS; the server +refuses a mismatch before any credentials are sent. A feature that changes +the wire format is a MAJOR bump and a simultaneous release of both sides, not +a compatible MINOR. + Bump the version in `Cargo.toml` as the **last** step before committing a release-worthy change. The commit message should contain the new version number (e.g. `v0.2.0`). -- cgit v1.2.3