---
layout: 'page'
uri: '/framework/gokick-roadmap'
position: 90
slug: 'framework-gokick-roadmap'
parent: 'framework'
navTitle: 'Roadmap (GoKick)'
title: 'Roadmap (GoKick)'
description: 'Forward-looking přehled: co je v gokicku hotové (stručně, po kategoriích) a co zbývá. Jediná rozpracovaná priorita je OpenTelemetry observabilita — detail na konci.'
---

# Roadmap (GoKick)

gokick je **production-ready end-to-end** boilerplate — DDD/CQRS backend, Vue 3 SPA a single-binary deploy. Tenhle dokument je forward-looking: stručně **co je hotové**, pak **co zbývá**. Jediná rozpracovaná priorita je **OpenTelemetry** (detail úplně na konci).


## ✅ Hotovo

**Jádro & architektura**

- DDD 4-vrstvá + CQRS (command/query/event bus s middleware chain), závislosti vrstev vynucené `go-arch-lint`.
- Single-binary deploy — Go binárka s embedovaným Vue SPA i SQL migracemi; migrace se aplikují při startu.
- Wire compile-time DI; perzistence za doménovými `Repository` interface (výměna adapteru bez zásahu do domény).

**Autentizace & bezpečnost**

- JWT access + refresh (HttpOnly cookie) s rotací a detekcí krádeže tokenu.
- Brute-force account lockout + timing-safe login; per-IP rate limiting na auth endpointech.
- CSRF (Go 1.25 stdlib) + kompletní security headers (CSP/HSTS/…); append-only audit log přežívající rollback business transakce.

**Multitenancy**

- Zapínatelný row-level multitenancy (`APP_MULTITENANCY`), fail-closed enforcement, per-dotaz conformance gate v CI.
- Platformní rovina (role `superadmin`, cross-tenant přehled + správa) + system command bus pro CLI (atomicky, s auditem). Detail: `/gk-multitenancy`, `/gk-bus`.

**Background práce**

- In-process scheduler (cron-like goroutiny, panic recovery per-tick).
- Perzistentní durable-task engine (fire-and-forget + durable run, mimo tx, at-least-once, lease/heartbeat/checkpoint) — přežije restart i crash. Detail: `/gk-runs`.

**Frontend**

- Vue 3 SPA (Vite, TypeScript, Tailwind) embedovaná do binárky.
- DataGrid — stránkované/filtrované/řazené admin i platform gridy s bulk akcemi.
- Typovaný fetch — body i response vynuceny generovaným kontraktem (nezkompiluje se bez typu).

**Observabilita**

- Strukturované `slog` logování, jediná cesta staticky vynucená lintem, korelace přes `trace_id`/`user_id`.
- Sentry BE i FE (paniky, terminálně padlé runy, Vue chyby), maskování secretů, light FE↔BE trace linking.

**Tooling & DX**

- BE↔FE typová parita staticky vynucená (tsgen codegen + boundary analyzer + errfields + role uniony + no-as ratchet).
- Go i FE lint ráčna (funlen/gocognit/nestif; max-lines/max-depth/kognitivní komplexita/knip).
- Trunk-based workflow: Conventional Commits + release-please + rebase-only merge + branch ruleset + docpaths gate. Detail: `/gk-deploy`, `CONTRIBUTING.md`.


## 🎯 Kam dál

### 🔴 Škálovatelnost

Největší (a jediný zásadní) strop: single-node SQLite (single-writer) + scheduler bez leader election. SQLite je vědomá volba — řeší se **výměnou adapteru** za doménovými `Repository` interface, ne přepisem aplikace.

- Postgres adaptér — write-scale + RLS jako transparentní-enforcement endgame pro multitenancy.
- Durable fronta na Postgresu → **River** (`SELECT … FOR UPDATE SKIP LOCKED`); scheduler → leader election (advisory locks); rate-limit stav → Redis (stateless instance).
- Alternativa bez Postgresu: distribuovaný SQLite (Turso/libSQL, rqlite, dqlite).

### 🟡 Testovací pokrytí

- E2E (Playwright) — chybí browser flow testy.
- Load testy (k6 / vegeta) — žádné výkonové stropy nejsou ověřené.
- Coverage gate v CI + contract a mutation testy.

### 🟢 Bezpečnost

- 2FA (TOTP) + WebAuthn.
- Refresh token na 256-bit; EdDSA (asymetrický) JWT pro multi-service nasazení.
- CSP bez `unsafe-inline` (nonce-based); gosec + CodeQL + govulncheck v CI; HIBP breach-check hesel.

### 🟢 Architektura

- Zapojit dnes prázdné event/run handler registry reálnými handlery (vzorové příklady).
- Druhý bounded context jako referenční vzor (dnes je doména hlavně auth + users).

### 🟢 Výkon

- Keyset stránkování místo `LIMIT/OFFSET` — list dotazy (`FindPage`, `FindPageAcrossTenants`, `OverviewPageAcrossTenants`) dnes stránkují offsetem: hluboká stránka skenuje a zahazuje všechny předchozí řádky, a souběžný zápis může řádek na hranici stránky duplikovat nebo úplně vynechat.
- Cache vrstva (in-proc / Redis) pro hot reads.
- Benchmarky + pprof profily.

### 🟢 Frontend

- E2E (Playwright), a11y audit (axe), i18n.

### 🟢 Tooling / DX

- Coverage gate + mutation testing v CI.
- Dependabot / Renovate + govulncheck.
- SBOM + podepsané release (cosign) + pre-commit hooky.


## 🔭 OpenTelemetry — rozpracovaná priorita

Jediná nedokončená část observability (proto se drží naživu i throwaway E2E prostředí). Cíl: distribuované tracing napříč FE → HTTP → bus → durable task → SQL, korelované s logy.

- [ ] **OTel HTTP middleware + propagace přes bus** — `trace_id` z ctx přejde na `trace.SpanContext`, sladit se `shared.LogKeyTraceID` (traces ↔ logy korelují).
- [ ] **Span per durable task** (run worker, `process()`) — handler běží outside-tx, takže span obaluje běh handleru, ne transakci; checkpointy/heartbeaty jako child-spany nebo span-events. Plus **SQL viditelnost přes `otelsql`** (span per dotaz). Worker dnes `trace_id` nemá (logy korelují přes `run_id`); OTEL ho nasadí přes `shared.LogAttrs(ctx)`.
- [ ] **FE↔BE distributed tracing — full** — light verze hotová; full přidá `tracesSampleRate > 0` → spany + waterfall (FE klik → API → handler → DB).
- [ ] **Hardening** — `otelsql` + OTEL SDK do depguard allow-listu (`.golangci.yml`); collector endpoint do CSP `connect-src` + `traceparent` přes CORS.

---

[← Scheduler](/framework/scheduler.md) | [🧠 AI skills →](/skills.md)