Files
OwnCord/docs
J3vb fbb85b4d76 fix(b2-8): close the nine B2-tagged ledger findings (#1436)
* docs(b2-8): record the B2-1 pre-squash head and ledger the voice_join ordering hazard

- B2-1 evidence block: PR #1435 pre-squash head 069412db (refs/pull/1435/head), squash 1fe3df79
- Ledger OC-0349 (open, low): the joiner's own voice_state takes the hub queue while the
  rest of the join burst is written directly, so its position on the joiner's socket is
  not ordered (documented in docs/protocol.md during B2-1, not yet fixed)

* fix(client): 2 defect(s) (OC-0311, OC-0315)

OC-0311: scope the voice_leave E2EE participant-left notification to this client's own voice channel — the frame is broadcast to the whole channel read audience, so a peer leaving a channel we merely read could delete their key, clear their verification, and trigger a room-key rotation in our live session.

OC-0315: parse server timestamps with parseTimestamp instead of Date.parse in the reconnect replay gate and the clock-skew sample — the wire form is naive UTC with no 'Z', which Date.parse reads as local time, so an east-of-UTC viewer silently swallowed genuinely live messages.

* fix(voice): 1 defect(s) (OC-0316)

* fix(client): 1 defect(s) (OC-0317)

* fix(plugin): 1 defect(s) (OC-0318)

@
Route every directory-manifest resolution through loadManifestFromDir so
InstallFromZip and scanPluginDirectory apply identical plugin.toml over
plugin.json precedence. A TOML-only zip now installs, and a zip carrying
both manifests is rejected rather than validating one while the loader
later obeys the other.
@

* fix(client): 1 defect(s) (OC-0322)

* fix(ws): 1 defect(s) (OC-0337)

liveVoiceEventsSince's cold-tier fallback handed a cap-truncated window to
resuming clients as if it were complete. The query is oldest-first with a
LIMIT, so a full result means the NEWEST rows were dropped - for a voice
room, quite possibly a peer's voice_leave. Degrade to nil (the documented
best-effort miss) on a cap hit, matching reconnectSelectReplay's guard.

* fix(plugin): 1 defect(s) (OC-0338)

* fix(client): 1 defect(s) (OC-0328)

* docs(b2-8): ledger records, plan evidence and count claims for the nine fixes

- Ledger: OC-0311/0315/0316/0317/0318/0322/0328/0337/0338 -> fixed, each with
  commit, pinning test and revertProof: pass (verify-fixes.mjs 8/8, plus a hand
  RED/GREEN of the wazero-tagged OC-0318 parity test)
- Plan: B2-8 evidence block and status line (B2-0, B2-1, B2-8 landed; B2-2 next)
- Count claims in README, b0-baseline, hp-0-scorecard and the issue register
  follow the ledger (315 fixed / 30 open / 3 declined / 1 duplicate = 349)

* fix(ws): replay a complete cap-sized voice window instead of skipping it (OC-0337 follow-up)

Codex review on #1436: liveVoiceEventsSince decided truncation by
len(persisted) >= coldCap, so a complete window of exactly coldCap rows was
treated as truncated and the supplement returned nil. Fetch coldCap+1 rows
and discard only when the extra row exists. Test-first: the exact-cap case
fails before the change and passes after; the over-cap case still degrades
to nil.
2026-08-28 15:13:49 +00:00
..
2026-08-27 21:37:40 +02:00
2026-08-27 21:37:40 +02:00
2026-08-27 21:37:40 +02:00

Documentation index

Every document in docs/ is listed here. If it is not on this page it is not current guidance.

Docs fall into four kinds, and the difference matters when you are deciding whether to trust one: guidance tells you how to do something, reference describes a contract the code actually implements, audits are dated snapshots that were true when written and were never updated, and plans record intent. Read an audit as history, not as status.

Start here

I want to… Read
Run a server quick-start.md
Deploy for real deployment.md
Contribute a change contributing.md
Understand the system architecture/
Report a bug Issues
Ask, or suggest an idea Discussions
Report a vulnerability security.md

Guidance

Document Covers
quick-start.md Getting a server running with the fewest steps.
deployment.md Production deployment on Windows and Linux.
contributing.md Environment setup, the branch and PR model, coding standards, how to run the checks CI runs.
security.md How to report a vulnerability, and how findings are handled in public vs private.
livekit-setup.md Standing up the LiveKit SFU for voice and video.
port-forwarding.md Making a server reachable from outside the LAN.
tailscale.md Remote access without port forwarding.
mcp-introspect.md Dev-only MCP server for introspecting a running instance.

Reference

These describe contracts the code implements. If one disagrees with the code, the code is right and the document is a bug.

Document Covers
api.md REST API under /api/v1.
protocol.md WebSocket protocol — frames, sequencing, reconnect.
schema.md SQLite schema and migrations.
server-configuration.md Every server configuration option.
credential-storage.md What the desktop client persists, and where.
../protocol/schema.json Generated-code source of truth, at the repository root because it is owned by neither side. Server/ws/message_types.go and Client/src/lib/protocolTypes.ts are generated from it — never hand-edit either. See ../protocol/README.md.

Architecture

architecture/README.md indexes the blueprints and carries the maintenance rule: each blueprint names its source-of-truth files, and a PR touching those updates the blueprint in the same change.

client-architecture.md is a redirect stub; the live document is architecture/client.md.

Audits — dated, not maintained

Point-in-time snapshots. They are not updated as the code moves, and they are deliberately left alone when paths change, so links from commit messages keep resolving. Anything here may be stale; the ledger and the plan index carry current status.

Audit Scope
audit-2026-08-23-repository-layout.md Repository layout and contributor experience (RL-01RL-22).
audit-2026-08-23-repository-health.md Full repository health.
audit-2026-08-19.md Repo health. States "0 open findings" — untrue since; see the ledger.
audit-test-coverage-2026-08-19.md Test audit (T-*, a separate register from the OC-* ledger).
audit-2026-08-04-docs-and-coverage.md Documentation accuracy and UI/UX test coverage.
audit-2026-08-04.md Security review.
audit-test-coverage-2026-07-25.md Test-coverage audit.
audit-2026-07-19.md Architecture and spec-conformance review.
audit-2026-04-07.md First comprehensive audit.

Plans

plans/README.md indexes every plan with a recorded state — active, partially implemented, design-only, or shipped — and is the authority over a plan's own header, which can drift.

Where status actually lives

Do not read a defect count, or a "what works" claim, out of a document on this page. Status has owners:

Concern Source of truth
Defect status .superpowers/findings-ledger.json (FINDINGS.md is rendered from it)
Security-sensitive defects Private GitHub Security Advisories
Phase order and gates plans/repo-health-roadmap-2026-08-23.md
Current measured baseline plans/b0-baseline-2026-08-25.md
Generated-code contracts CLAUDE.md, "Generated code — never hand-edit"

A CI job checks that documents on this page do not contradict the ledger's counts. Adding a count to a document means adding it to that check's allow-list in scripts/check-doc-counts.mjs.