Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
e0625a2
Add command palette E2E coverage
tyl3r-ch Apr 23, 2026
b916c88
Refactor server runtime boundaries
tyl3r-ch Apr 23, 2026
12869aa
Unify shared app settings contract
tyl3r-ch Apr 23, 2026
20f5ccb
Refactor dashboard view model boundaries
tyl3r-ch Apr 23, 2026
78c50aa
Unify shared dashboard preferences contract
tyl3r-ch Apr 23, 2026
e1513f1
Split dashboard controller into focused slices
tyl3r-ch Apr 24, 2026
defaaf6
Split settings modal into focused sections
tyl3r-ch Apr 24, 2026
62062a9
v6.2.7: Document code review M-01 fix
tyl3r-ch Apr 24, 2026
ed89ba6
v6.2.7: Remove unused hooks
tyl3r-ch Apr 24, 2026
234e855
v6.2.7: Organize settings modal areas
tyl3r-ch Apr 24, 2026
7aa8c30
v6.2.7: Organize filter bar groups
tyl3r-ch Apr 24, 2026
b2707be
v6.2.7: Group dashboard actions
tyl3r-ch Apr 24, 2026
e5dd3a4
v6.2.7: Guard dashboard sections contract
tyl3r-ch Apr 24, 2026
898afc6
v6.2.7: Preload dashboard sections adaptively
tyl3r-ch Apr 25, 2026
fb9b0ee
v6.2.7: Reduce dashboard filter data passes
tyl3r-ch Apr 25, 2026
36b5ad7
v6.2.7: Decouple settings version check
tyl3r-ch Apr 25, 2026
5cf3eef
v6.2.7: Split UI hotspot derivations
tyl3r-ch Apr 25, 2026
4fa2304
v6.2.7: Require remote auth token
tyl3r-ch Apr 25, 2026
7735cd1
v6.2.7: Require local API session auth
tyl3r-ch Apr 25, 2026
e473e9c
v6.2.7: Harden style CSP
tyl3r-ch Apr 26, 2026
f588a41
Refactor server entrypoint lifecycle
tyl3r-ch Apr 26, 2026
1e70e70
Fix server entrypoint export surface
tyl3r-ch Apr 26, 2026
e850ee3
Fix server runtime state isolation
tyl3r-ch Apr 26, 2026
bf05784
Extract server HTTP request guards
tyl3r-ch Apr 26, 2026
5b64f62
Stabilize architecture test guardrails
tyl3r-ch Apr 27, 2026
7f6e10c
Broaden product runtime coverage
tyl3r-ch Apr 27, 2026
8f8d1cc
Tighten unused hook guardrails
tyl3r-ch Apr 27, 2026
9b6a6f1
Stabilize test hotspot cleanup
tyl3r-ch Apr 27, 2026
33d2107
v6.2.7: Split dashboard E2E journeys
tyl3r-ch Apr 27, 2026
83aea1a
v6.2.8: Update changelog
tyl3r-ch Apr 27, 2026
b11c4f3
v6.2.8: Remove secret-like test token
tyl3r-ch Apr 27, 2026
241b548
v6.2.8: Address CodeRabbit feedback
tyl3r-ch Apr 27, 2026
059a3c0
v6.2.8: Resolve CodeRabbit follow-ups
tyl3r-ch Apr 27, 2026
209ed79
v6.2.8: Resolve final CodeRabbit findings
tyl3r-ch Apr 27, 2026
a90cf89
v6.2.8: Resolve final server review feedback
tyl3r-ch Apr 27, 2026
14b7548
v6.2.8: Resolve remaining server review feedback
tyl3r-ch Apr 27, 2026
ddd6ec1
ci: Add CodeQL advanced setup
tyl3r-ch Apr 27, 2026
2549766
Fix CodeQL security alerts
tyl3r-ch Apr 27, 2026
a57a93f
Add CodeRabbit configuration
tyl3r-ch Apr 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

reviews:
profile: 'assertive'

auto_review:
ignore_title_keywords:
- 'WIP'
- '[skip review]'
ignore_usernames:
- 'dependabot[bot]'
- 'renovate[bot]'
- 'github-actions[bot]'

path_filters:
- '!**/*.lock'
- '!**/package-lock.json'
- '!**/pnpm-lock.yaml'
- '!**/generated/**'
- '!**/*.snap'

path_instructions:
- path: '.github/workflows/**'
instructions: |
Review GitHub Actions workflows for:
- All actions must be pinned to a full commit SHA (not a version tag)
- No secrets echoed or logged in run steps
- Every job must have timeout-minutes set
- pull_request_target must have a security guard restricting to trusted actors
124 changes: 124 additions & 0 deletions .dependency-cruiser.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,130 @@ module.exports = {
path: '^src/',
},
},
{
name: 'no-dashboard-controller-fanout',
severity: 'error',
comment:
'The dashboard controller should stay owned by the dashboard composition root instead of being consumed across component subtrees.',
from: {
path: '^src/components/',
pathNot: '^src/components/Dashboard\\.tsx$',
},
to: {
path: '^src/hooks/use-dashboard-controller\\.ts$',
},
},
{
name: 'no-dashboard-controller-internals-fanout',
severity: 'error',
comment:
'Internal dashboard controller slices should stay behind the public controller hook instead of leaking into component code.',
from: {
path: '^src/components/',
},
to: {
path: '^src/hooks/use-dashboard-controller-(?:actions|browser|derived-state|dialogs|drill-down|effects|shell-state|types)\\.ts$',
},
},
{
name: 'no-settings-modal-internals-fanout',
severity: 'error',
comment:
'Settings modal internals should stay behind the settings feature shell instead of being reused across unrelated frontend modules.',
from: {
path: '^src/',
pathNot:
'^src/components/features/settings/(?:SettingsModal|SettingsModalSections|use-settings-modal-(?:draft|version-status)|settings-modal-helpers)\\.(?:ts|tsx)$',
},
to: {
path: '^src/components/features/settings/(?:SettingsModalSections|use-settings-modal-(?:draft|version-status)|settings-modal-helpers)\\.(?:ts|tsx)$',
},
},
{
name: 'no-filterbar-internals-fanout',
severity: 'error',
comment:
'FilterBar internals should stay behind the layout FilterBar shell instead of being reused across unrelated frontend modules.',
from: {
path: '^src/',
pathNot:
'^src/components/layout/(?:FilterBar|FilterBar(?:ChipFilters|DateRange|QuickControls|Status))\\.tsx$',
},
to: {
path: '^src/components/layout/FilterBar(?:ChipFilters|DateRange|QuickControls|Status)\\.tsx$',
},
},
{
name: 'no-server-module-to-entrypoint',
severity: 'error',
comment: 'Server implementation modules must stay independent from the bootstrap entrypoint.',
from: {
path: '^server/',
},
to: {
path: '^server\\.js$',
},
},
{
name: 'no-server-runtime-cross-imports',
severity: 'error',
comment:
'Data, background, and auto-import runtimes must stay decoupled and be composed through dependency injection.',
from: {
path: '^server/(?:data|background|auto-import)-runtime\\.js$',
},
to: {
path: '^server/(?:data|background|auto-import)-runtime\\.js$',
},
},
{
name: 'no-router-to-server-runtimes',
severity: 'error',
comment:
'The HTTP router should depend on injected runtime APIs, not runtime implementations.',
from: {
path: '^server/http-router\\.js$',
},
to: {
path: '^server/(?:data|background|auto-import)-runtime\\.js$',
},
},
{
name: 'no-server-runtimes-to-router',
severity: 'error',
comment: 'Server runtime modules must not depend back on the HTTP router.',
from: {
path: '^server/(?:data|background|auto-import)-runtime\\.js$',
},
to: {
path: '^server/http-router\\.js$',
},
},
{
name: 'no-settings-contract-bypass',
severity: 'error',
comment:
'Settings defaults and normalization must flow through shared/app-settings.js instead of raw dashboard config or frontend-only helpers.',
from: {
path: '^(server\\.js$|server/data-runtime\\.js$|src/lib/app-settings\\.ts$)',
},
to: {
path: '^(shared/dashboard-preferences\\.json$|src/lib/dashboard-preferences\\.ts$|src/lib/provider-limits\\.ts$)',
},
},
{
name: 'no-raw-dashboard-preferences-imports',
severity: 'error',
comment:
'Production code must consume dashboard preference rules through shared/dashboard-preferences.js instead of the raw JSON file.',
from: {
path: productionPath,
pathNot: '^shared/dashboard-preferences\\.js$',
},
to: {
path: '^shared/dashboard-preferences\\.json$',
},
},
{
name: 'no-shared-to-runtime',
severity: 'error',
Expand Down
66 changes: 66 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: CodeQL

on:
push:
branches:
- main
pull_request:
branches:
- main
# Dependabot needs pull_request_target to upload CodeQL results with write access.
# The job-level guard below restricts this elevated event to Dependabot PRs only.
pull_request_target:
branches:
- main
schedule:
- cron: '41 5 * * 1'

permissions:
security-events: write
packages: read
actions: read
contents: read

concurrency:
group: codeql-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
analyze:
name: Analyze (${{ matrix.language }})
runs-on: ubuntu-latest
timeout-minutes: 360

if: >-
github.event_name != 'pull_request_target' ||
(
github.actor == 'dependabot[bot]' &&
github.event.pull_request.user.login == 'dependabot[bot]'
)

strategy:
fail-fast: false
matrix:
include:
- language: javascript-typescript
build-mode: none
- language: actions
build-mode: none

steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}

- name: Initialize CodeQL
uses: github/codeql-action/init@b8bb9f28b8d3f992092362369c57161b755dea45 # v4.35.0
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
queries: security-extended

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@b8bb9f28b8d3f992092362369c57161b755dea45 # v4.35.0
with:
category: '/language:${{ matrix.language }}'
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ test-json/
coverage/
requirements/
docs/security/
docs/review/*
!docs/review/*.md
docs/application-stack-reference.md
/activity-*.png
/cache-hit-rate-*.png
/request-*.png
Expand All @@ -34,3 +37,4 @@ docs/security/
/settings-empty.png
/tables-*-review.png
/empty-state.png
prompts.md
29 changes: 29 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,34 @@
# Changelog

## [6.2.8] - 2026-04-27

### Added

- **Command-Palette-E2E-Abdeckung für zentrale Dashboard-Journeys** — neue Browser-Tests sichern die vollständige Kommandoliste, Aktions-, Filter-, View-, Provider-, Modell-, Navigations-, Theme-, Sprach- und Quick-Select-Flows gegen Regressionen ab
- **Verbindliche Architektur- und Test-Review-Gates** — neue Review-Dokumente, Architekturtests und Vertragsprüfungen decken Server-Runtime-Grenzen, Dashboard-Sektionsverträge, ungenutzte Hooks, HTTP-Request-Guard-Zuständigkeiten und Runtime-State-Isolation explizit ab
- **Produktweite Coverage-Transparenz** — die Coverage-Denominator umfasst jetzt Frontend-Runtime, lokalen Server, Shared-Verträge und `usage-normalizer.js`, mit dokumentierten Schwellen und einem Guardrail-Test gegen versehentliches Verengen der Coverage-Sicht

### Improved

- **Modularisierte Server-Runtime und klarer Entrypoint** — `server.js` ist jetzt ein schlanker CLI-/Bin-Shim; CLI-Parsing, Startup, HTTP-Lifecycle, Auto-Import, Background-Prozesse, Datenzugriff, Request-Routing, Runtime-State und Request-Guards liegen in fokussierten Server-Modulen mit gezielter Testabdeckung
- **Gemeinsame App-Settings- und Dashboard-Preference-Verträge** — Settings-, Provider-Limits-, Dashboard-Preference- und View-Model-Verträge wurden in gemeinsame Shared-/Boundary-Module überführt, sodass Frontend und Server dieselben Strukturen verwenden und Dependency-Regeln diese Grenzen absichern
- **Entkoppelter Dashboard-Controller und fokussierte UI-Bereiche** — Dashboard-Controller, Dashboard-View-Model, Settings-Modal, Filterbar, Header-Actions und Command-Palette wurden in kleinere, zuständigkeitsklare Slices aufgeteilt, ohne bestehende Dashboard-Funktionalität, UI oder Animationen zu entfernen
- **Performance auf Dashboard- und UI-Hotspots** — adaptive Section-Preloads, reduzierte Filter-Datenpässe, extrahierte Chart-/Table-/Datepicker-/Heatmap-/Drilldown-Datenableitungen und ein entkoppelter Settings-Version-Check senken wiederholte Arbeit auf großen Datensätzen
- **Stabilere und schnellere Teststruktur** — Architekturtests teilen sich einen gecachten Source-Graph, Background-/Startup-Integrationstests sind in deterministische Teilbereiche gesplittet, Playwright-Dashboard-Coverage liegt jetzt in Journey-Dateien statt in einem Monolithen, und Coverage-/Timing-Läufe geben im non-interactive Gate sichtbaren Fortschritt aus
- **Dokumentierte Review- und Qualitätskonventionen** — Architektur-, Testing- und Review-Dokumentation beschreibt die neuen Grenzen, Guardrails, Playwright-Journey-Struktur, Subprozess-Cleanup-Anforderungen und reproduzierbaren Validierungspfade für behobene Findings

### Fixed

- **Lokale und Remote-API-Vertrauensgrenzen** — Remote-Zugriff erfordert jetzt ein explizites Auth-Token, lokale API-Mutationen laufen über eine lokale Session-/Trusted-Mutation-Prüfung, und Style-CSP sowie HTTP-Host-/Origin-/Content-Type-Guards sind fokussiert gehärtet
- **Server-State- und Entrypoint-Drift** — mutable Runtime-Singletons, Auto-Import-Leases, Toktrack-Version-Cache und Startup-State sind gekapselt; der alte `server.js`-Export-Surface ist entfernt und durch explizite Runtime-Komposition ersetzt
- **Versteckte Dead-Code- und Architekturdrift** — ungenutzte Hooks wurden entfernt, Hook-Erreichbarkeit wird ab dem App-Entrypoint geprüft, Dashboard-Sektionsverträge blockieren strukturelle Regressionen, und einfache Architekturregeln hängen nicht mehr an wiederholten schweren ArchUnit-Scans
- **Hängende oder schwer diagnostizierbare Tests** — subprocessbasierte Server-/Background-Tests haben bounded Startup-, Probe-, Shutdown- und Cleanup-Pfade; Coverage- und Timing-Kommandos kombinieren JUnit-Artefakte mit einem Fortschritts-Reporter, damit Läufe sauber abschließen und nicht still wirken
- **Review-Findings aus Performance-, Security-, Server- und Test-Reviews** — die Branch-Arbeit schließt die dokumentierten Findings aus `performance-review.md`, `security-review.md`, `server-review.md` und `test-review.md` mit Validierungsnachweisen in `docs/review/fixed-findings.md`

### Commits

- Enthält alle Branch-Commits seit `6.2.7`: `e0625a2`, `b916c88`, `12869aa`, `20f5ccb`, `78c50aa`, `e1513f1`, `defaaf6`, `62062a9`, `ed89ba6`, `234e855`, `7aa8c30`, `b2707be`, `e5dd3a4`, `898afc6`, `fb9b0ee`, `36b5ad7`, `5cf3eef`, `4fa2304`, `7735cd1`, `e473e9c`, `f588a41`, `1e70e70`, `e850ee3`, `bf05784`, `5b64f62`, `7f6e10c`, `8f8d1cc`, `9b6a6f1`, `33d2107`

## [6.2.7] - 2026-04-21

### Added
Expand Down
Loading
Loading