Files
OwnCord/docs/architecture
Claude 45e51cca1c fix(client): review follow-ups for the connection-status batch
Fixes from an adversarial review of the previous commit:

- MainPage banner: sync the banner with the current store status at mount.
  The selector subscription baselines on the current value and only fires
  on change, so a MainPage mounted mid-outage (status already
  "reconnecting") would never show the banner — the whole retry cycle maps
  to the same 3-state value. The status→banner dispatch is extracted to
  ServerBanner.applyConnectionStatus and unit-tested.
- History-fetch failure is no longer silent when the channel already has
  rows (live broadcasts / optimistic sends): the inline error region only
  renders in an empty channel, so loadMessages now also raises a toast in
  that case.
- Composer disable reason distinguishes "Reconnecting…" from
  "Not connected" per the spec §3 table (it previously showed
  "Reconnecting…" while disconnected, contradicting the banner).
- The single-writer wiring is extracted to
  dispatcher.wireConnectionStatus(ws) and pinned by a test (it was
  previously an untestable main.ts module-scope line — deleting it would
  have failed zero tests).
- Docs honesty: messaging.md's transport-drop diagram arm now shows both
  codes (channel full → NETWORK, closed/not-open → OFFLINE) instead of
  claiming NETWORK for both; README §3's callout now explicitly lists the
  voice column ("frozen" during reconnect) as a remaining gap instead of
  implying the section is fully closed; the composer table documents both
  offline reasons.
- New pinning tests: SidebarArea passes ws to UserBar (the production-bug
  fix was previously unasserted), ServerBanner.showDisconnected,
  applyConnectionStatus mapping, ChannelController onRetryLoad /
  onRetry-resend / onDeleteDraft, composer reason per status, and the
  history-failure toast fallback.

Verified: tsc + full client unit suite (3234 tests) + oxlint/eslint +
prettier all green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 19:42:36 +00:00
..

OwnCord Architecture Blueprints

Verified against: commit ddc49f0, 2026-07-19 Companion audit: docs/audit-2026-07-19.md

This directory is the curated architectural map of OwnCord — the "blueprints" for the whole system. Every diagram is a Mermaid fenced block (GitHub renders these natively) followed by a prose explanation and a Source of truth file list.

Index

Doc Diagrams Covers
system-overview.md D1 System context, D8 Deployment topology All processes, trust boundaries, ports, single-instance constraints
server.md D2 Server package map, D3 REST request lifecycle Go package structure, DB-access styles, middleware chain
websocket.md D4 WS connect / replay / dispatch Real-time engine: auth handshake, 3-tier reconnect replay, backpressure, V1/V2 dispatch
data-model.md D5 Entity-relationship overview All 23 tables from migrations 001015, grouped by domain
voice-e2ee.md D6 Voice + E2EE flow LiveKit token flow, loopback TLS tunnel, ECDH key-holder relay
client.md D7 Client module map Tauri client: bootstrap, dispatcher, stores, Rust sidecars (structure, as-built)
ux/ UX flow + state diagrams Client behavior spec (target state): what every view does and how it reacts to events, permissions, and failure

Structure vs. behavior

client.md maps the client as-built (modules, stores, wiring). The ux/ set is the complementary behavior spec — prescriptive (to-be) flows for every view, with per-view state matrices and event→reaction maps. Where today's code diverges from the target, the UX docs carry dated ⚠ Current gap callouts, so the set doubles as a UX improvement backlog.

Maintenance rule

These documents are curated, not generated. The rule that keeps them honest:

If a PR changes the structure of anything listed in a diagram's Source of truth list (new package, new table, new message type, changed flow), that PR updates the corresponding diagram in the same change.

Diagrams reference stable identifiers (package names, table names, message-type strings) rather than line numbers wherever possible. Line-number evidence lives in the dated audit reports, which are point-in-time snapshots by design.

Relationship to other docs

  • docs/api.md, docs/protocol.md, docs/schema.md are the reference specs (request/response shapes, wire formats, DDL). These blueprints describe structure and flow, not payload shapes. Known drift between the specs and the code is catalogued in audit-2026-07-19.md §2.
  • docs/client-architecture.md predates the abandonment of the Solid.js migration; client.md reflects the current state.