From e48c0de23816702b42a4fb265a22298c32769206 Mon Sep 17 00:00:00 2001 From: Schalli Date: Tue, 29 Sep 2026 07:31:34 +0200 Subject: [PATCH] =?UTF-8?q?docs(changelog):=20eigene=20Module=20unter=20Un?= =?UTF-8?q?ver=C3=B6ffentlicht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Neu-Eintrag in Alltagssprache - Layout-Wächter der Modulordner kennt den Ordner custom als bewusste Ausnahme ohne Zugriffsschranke Co-Authored-By: Claude Opus 5.5 (1M context) --- CHANGELOG.md | 4 ++++ .../src/app/(portal)/modules/module-layouts.test.tsx | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d0566d3..67f16a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ Diese Liste beschreibt in einfachen Worten, was sich von Version zu Version an T ## Unveröffentlicht +### Neu + +- Eigene Module: Als Administrator können Sie unter „Verwaltung“ im Punkt „Eigene Module“ andere Webseiten in die Seitenleiste aufnehmen – mit Name, Adresse (nur https) und Kategorie, etwa „Infrastruktur“. Alle Benutzer sehen die Einträge unter der gewählten Kategorie; ein Klick zeigt die Seite direkt in Tessera. Manche Seiten verbieten das Einbetten – dafür gibt es immer den Knopf „In neuem Tab öffnen“. + ## 1.5.2 – 2026-09-28 ### Neu diff --git a/apps/web/src/app/(portal)/modules/module-layouts.test.tsx b/apps/web/src/app/(portal)/modules/module-layouts.test.tsx index 82ee491..11641b3 100644 --- a/apps/web/src/app/(portal)/modules/module-layouts.test.tsx +++ b/apps/web/src/app/(portal)/modules/module-layouts.test.tsx @@ -21,6 +21,15 @@ import TenderRadarLayout from './tender-radar/layout'; const modulesDir = dirname(fileURLToPath(import.meta.url)); +/** + * Ordner ohne ModuleAccessGate, bewusst (quick-260929-9wc): `custom/` traegt + * die Rahmen-Seiten der „Eigenen Module“. Das sind keine Zeilen der Tabelle + * `Module` und haengen an keiner Aktivierung oder Freigabe — sie sind fuer + * ALLE angemeldeten Benutzer sichtbar (D-01). Jeder weitere Eintrag hier ist + * eine bewusste Ausnahme von T-e8k-04 und gehoert begruendet. + */ +const DIRS_WITHOUT_GATE: readonly string[] = ['custom']; + const placeholderChild =
child
; describe('module layouts — ModuleAccessGate slug wiring (T-e8k-01, T-e8k-03)', () => { @@ -42,6 +51,7 @@ describe('module directory coverage — every module has a layout (T-e8k-04)', ( const entries = readdirSync(modulesDir, { withFileTypes: true }) .filter((entry) => entry.isDirectory()) .filter((entry) => !entry.name.startsWith('[')) + .filter((entry) => !DIRS_WITHOUT_GATE.includes(entry.name)) .map((entry) => entry.name); expect(entries.length).toBeGreaterThan(0);