chore(repo): P0 hygiene for the alpha reset

- gitignore .serena/ and Client/tauri-client/.env; untrack the .env
  (the KLIPY key it held is treated as burned; rotation + server-side
  proxy tracked for P3)
- CI: verify generated sqlc output (make sqlc-verify) on the ubuntu leg
- CHANGELOG: honest reset narrative (v1.1.0-alpha series), remove
  references to deleted roadmap files
- delete stale docs/phase-a-status.md; fix dangling ref in
  docs/plans/slash-commands.md
- add root SECURITY.md (GitHub-surfaced policy; reporting works while
  the source repo is private)
- docs/audit-2026-04-07.md: add maintained finding-closure table

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
J3vb
2026-07-18 11:17:29 +02:00
co-authored by Claude Fable 5
parent de59d9a54c
commit 706fa4e74c
6 changed files with 86 additions and 16 deletions
+6
View File
@@ -52,6 +52,12 @@ jobs:
- name: Go vulnerability check
run: go install golang.org/x/vuln/cmd/govulncheck@v1.1.4 && govulncheck ./...
# Generated sqlc output must never drift from db/queries/. One leg of
# the matrix is enough; make is not guaranteed on the Windows runner.
- name: Verify generated sqlc output (make sqlc-verify)
if: matrix.os == 'ubuntu-latest'
run: make sqlc-install sqlc-verify
- name: Run tests with race detection and coverage
run: go test -race -timeout 20m ./... -coverprofile=coverage.out -cover
+6
View File
@@ -71,3 +71,9 @@ TODOS.md
CLAUDE.md
DESIGN.md
Client/CLIENT-REVIEW.md
# Agent tooling state
.serena/
# Client env (holds API keys - never commit)
Client/tauri-client/.env
+16 -15
View File
@@ -5,7 +5,13 @@ tooling (`npm run changelog`) auto-generates entries from commit messages
on each release; this file is the curated counterpart that calls out
behavioural changes operators must know about.
## Unreleased — Phase B + C
## Unreleased — v1.1.0-alpha series (Phase B + C)
> **Project reset note:** OwnCord has re-entered alpha. The `v1.0.0` release is
> superseded; versioning continues forward as `v1.1.0-alpha.N` so deployed
> servers and clients keep receiving updates. Releases are published to the
> public [`OwnCord-releases`](https://github.com/J3vb/OwnCord-releases)
> repository, including a full source snapshot with every release.
### Phase B — Acceleration
@@ -29,8 +35,8 @@ behavioural changes operators must know about.
`VoiceService.JoinChannel`, `InviteService.CreateInvite`,
`ModerationService.BanUser`, `BlockService.BlockUser`,
`UserService.UpdateProfile`. The real OTel SDK is gated behind
`-tags otel` and is currently a placeholder; wiring the upstream
modules is tracked in `PHASE_BC_LOCAL_TODO.md`.
`-tags otel` and is currently a placeholder; completing it is
deferred until after the beta reset.
- **Solid.js proof of concept (Step 6).** Two leaf components migrated
(`Badge`, `ChannelListItem`), Vite + JSX configured, store→signal
adapter landed. The remaining vanilla components remain in place;
@@ -93,16 +99,11 @@ behavioural changes operators must know about.
the existing IP restriction.** A previous prerelease shipped with only
the IP gate; that has been corrected.
### Known follow-up work (local toolchain required)
### Deferred work
See `PHASE_BC_LOCAL_TODO.md` for the full list. Highlights:
- Real OpenTelemetry SDK wiring (needs `go get` of the upstream modules)
- Real Wazero runtime construction (needs `go get github.com/tetratelabs/wazero`)
- Postgres backend implementation (needs `make sqlc-generate`)
- Tinygo `.wasm` build of the example hello plugin
- Migration of the remaining vanilla TypeScript components to Solid.js
- Slash-command dispatcher in the WS layer (design TBD)
These items each need a real developer machine with network access; no
in-sandbox pass can land them.
The project is under a feature freeze until the beta reset completes.
Explicitly deferred (not abandoned unless noted): real OpenTelemetry SDK
wiring, the Postgres backend (scaffolding removed pending real demand),
the slash-command dispatcher (`docs/plans/slash-commands.md`), and the
Solid.js migration (abandoned — the experiment is being removed in favor
of the established vanilla component pattern).
+34
View File
@@ -0,0 +1,34 @@
# Security Policy
## Supported versions
OwnCord is in alpha. Only the **latest release** receives security fixes.
There are no backports.
| Version | Supported |
| ------- | --------- |
| Latest release (see [OwnCord-releases](https://github.com/J3vb/OwnCord-releases/releases)) | Yes |
| Anything older | No |
## Reporting a vulnerability
**Do not open a public issue for security bugs.**
Report vulnerabilities privately via GitHub Security Advisories on the
[OwnCord-releases](https://github.com/J3vb/OwnCord-releases/security/advisories/new)
repository ("Report a vulnerability"). This channel works even while the
source repository is private.
Please include:
- Affected component (server, desktop client, admin panel, plugin host)
- Reproduction steps or a proof of concept
- The release version (or source snapshot) you tested against
You will get an initial response within 7 days. Coordinated disclosure is
appreciated; fixes ship in the next release with credit unless you prefer
otherwise.
## Hardening documentation
Operator-facing hardening notes live in [docs/security.md](docs/security.md).
+23
View File
@@ -5,6 +5,29 @@
---
## Finding closure status (maintained; last updated 2026-07-18)
Every CRITICAL/HIGH below must end with a closing commit link or an explicit
mitigation before the beta gate. Standing rule: any plugin CRITICAL still
OPEN at the beta gate → plugins ship default-disabled (they already default
to `plugins.enabled: false`).
| # | Sev | Finding | Status |
|---|-----|---------|--------|
| 1 | CRITICAL | Plugin `invokeCommand` has no timeout | IN PROGRESS — CPU budget added on `fix/security-hardening-review`; regression fix (module bricking, W1-1) required before merge |
| 2 | CRITICAL | Plugin storage has no per-plugin key isolation | OPEN — verify/close in P3 |
| 3 | CRITICAL | Plugin per-command ACL missing (auto-registration) | OPEN — verify/close in P3 |
| 4 | CRITICAL | No rate limit on event delivery to plugins | OPEN — verify/close in P3 |
| 5 | CRITICAL | Plugin HTTP capability allows data exfiltration to allowlisted hosts | OPEN — partially mitigated by SSRF hardening + allowlist; document residual risk in P3 |
| 6 | HIGH | `Server/store/` untested | SUPERSEDED — `store/` package is being removed in P4 (single data layer); tests move to in-memory SQLite |
| 7 | HIGH | Client `src/lib`/`src/stores` <10% unit coverage | CLOSED since audit — large vitest suite exists (113 files); suite health tracked in P2 |
| 8 | HIGH | Unpinned critical npm packages | OPEN — review in P2 |
| 9 | MEDIUM | auth_handler bypasses service layer | OPEN — P4 consolidation candidate |
| 10 | MEDIUM | Audit-trail write failures silently ignored | OPEN — cheap fix, fold into P1 |
| 11 | MEDIUM | E2E not in CI / no .nvmrc | IN PROGRESS — nightly non-blocking e2e job planned in P2 |
---
## Table of Contents
1. [Architecture](#1-architecture)
2. [Code Quality](#2-code-quality)
+1 -1
View File
@@ -2,7 +2,7 @@
**Status:** design only, not implemented
**Owner:** TBD
**Tracks:** PHASE_D_PARITY_TODO.md item #1
**Tracks:** deferred feature backlog (post-beta; see CHANGELOG "Deferred work")
**Estimated effort:** 12 weeks of focused work
## Why