From 5ff6c2b4367aea83a27642ea383042855add293a Mon Sep 17 00:00:00 2001 From: lukisch <55554266+lukisch@users.noreply.github.com> Date: Sat, 7 Nov 2026 18:43:48 +0100 Subject: [PATCH] docs(marketing): Pfad B discoverability, badges, sequence diagrams & PWA SEO metadata [G 2026-11-07] --- CHANGELOG.md | 16 ++++++++++++ CODE_OF_CONDUCT.md | 4 +-- README.md | 18 +++++++++++++ README_de.md | 20 ++++++++++++++- README_es.md | 3 +++ README_ja.md | 3 +++ README_ru.md | 3 +++ README_zh-Hans.md | 3 +++ tests/test_metadata.py | 35 ++++++++++++++++++++++++++ web_publisher/index.html | 11 ++++++++ web_publisher/tests/publisher.test.mjs | 10 ++++++++ 11 files changed, 123 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 89fb26a..6f823f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,22 @@ Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.1.0/). ## [Unreleased] +### Marketing, Discoverability, README-Architektur & Sequenzdiagramme (Pfad B) - 2026-11-07 +- **International README Badge Parity (EN, DE, ES, JA, RU, ZH)**: + - Verifizierter Testnachweis-Badge (`tests-204 passed`) auf Basis realer lokaler Messergebnisse in alle 6 Sprachversionen integriert. + - Zero-Core-Dependency-Badge (`core deps: zero (stdlib)`) und Local-First-Architektur-Badge (`storage: local-first`) synchron über alle Sprachausgaben ergänzt. +- **Sequenzdiagramm-Erweiterung (README.md & README_de.md)**: + - Abschnitt 3 um den Lebenszyklus des lokalen GUI-Edit-Servers (`edit_server.py`) auf `127.0.0.1` erweitert (Visualisierung der Host-Header-Validierung, PBKDF2-Sitzungsprüfung, atomares Schreiben/Rollback, Soft-Delete-Papierkorb via `wikistub_seed_trash.json` und automatischer PWA-Index-Neuerstellung). +- **PWA-Landing-Page & SEO-Metadaten (`web_publisher/index.html`)**: + - Vollständige Open-Graph- (`og:title`, `og:description`, `og:type`, `og:url`, `og:image`) und Twitter-Card-Metadaten (`twitter:card`, `twitter:title`, `twitter:description`, `twitter:image`) für optimierte Social-Previews und Suchmaschinen-Auffindbarkeit implementiert. + - Strukturierte Meta-Description und Keywords zur Präzisierung des RAG- und Wissensbasis-Profils hinzugefügt. +- **Community Health & Umlautdisziplin**: + - Deutsche Umlautkorrektur in `CODE_OF_CONDUCT.md` ("Geschlechtsidentität", "sexueller Identität") durchgeführt. +- **Vertragstests & Testsuiten-Erweiterung (`tests/test_metadata.py` & `web_publisher/tests/publisher.test.mjs`)**: + - Neue Vertragstests `test_readme_sequence_diagram_crud_edit_server_parity()` und `test_pwa_landing_page_seo_metadata()` in `test_metadata.py` angelegt. + - Testsuite `test_all_readme_international_badge_parity()` um Testnachweis- und Local-First-Badges über alle 6 Sprachfassungen erweitert. + - Node.js-Testsuite in `publisher.test.mjs` um Überprüfung der SEO- und Open-Graph-Metadaten ergänzt (46/46 PWA-Tests grün). + ### Repository-Hygiene, CI-Matrix-Härtung, PEP 621 Metadaten & Vertragstests (Pfad A) - 2026-11-02 - **Mitgelieferter Produkt-Skill & LLM-Pointer (P-022 / GITHUB-POLICY)**: - `SKILL.md` als softwarespezifische Nutzungsanleitung für Agenten im Repo-Root angelegt (beschreibt Aufgaben, Voraussetzungen, CLI-Aufrufe, Verifikation und Grenzen von WikiStub-Seed). diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index fde533a..40c1d0b 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -7,9 +7,9 @@ Wir als Mitglieder, Beitragende und Leitende verpflichten uns, die Teilnahme an unserer Community zu einer belästigungsfreien Erfahrung für alle zu machen, unabhängig von Alter, Körpergröße, sichtbarer oder unsichtbarer Behinderung, ethnischer Zugehörigkeit, -Geschlechtsmerkmalen, Geschlechtsidentitaet und -ausdruck, Erfahrungsgrad, Bildung, +Geschlechtsmerkmalen, Geschlechtsidentität und -ausdruck, Erfahrungsgrad, Bildung, sozioökonomischem Status, Nationalität, persönlichem Aussehen, Herkunft, Religion -oder sexueller Identitaet und Orientierung. +oder sexueller Identität und Orientierung. ### Unsere Standards diff --git a/README.md b/README.md index d74c57e..a16a9bd 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ WikiStub-Seed is a knowledge-stub seed library, not a wiki. [![WikiStub-Seed test gates](https://github.com/dev-bricks/WikiStub-Seed/actions/workflows/tests.yml/badge.svg)](https://github.com/dev-bricks/WikiStub-Seed/actions/workflows/tests.yml) +![Tests](https://img.shields.io/badge/tests-204%20passed-brightgreen) [![Version](https://img.shields.io/badge/version-1.1.12-blue.svg)](pyproject.toml) [![Ecosystem: dev-bricks](https://img.shields.io/badge/ecosystem-dev--bricks-blue.svg)](https://github.com/dev-bricks) [![Umbrella: open-bricks](https://img.shields.io/badge/umbrella-open--bricks-indigo.svg)](https://github.com/open-bricks) @@ -17,6 +18,8 @@ WikiStub-Seed is a knowledge-stub seed library, not a wiki. ![Format](https://img.shields.io/badge/format-JSON-green) ![Python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-yellow) ![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey) +![Core Dependencies](https://img.shields.io/badge/core%20deps-zero%20(stdlib)-success) +![Architecture](https://img.shields.io/badge/architecture-local--first-blue) [![Code Style: Ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff) [![Attribution Notice](https://img.shields.io/badge/attribution-NOTICE-informational.svg)](NOTICE) [![Marketing Log](https://img.shields.io/badge/marketing%20log-active-blue.svg)](MARKETING-LOG.txt) @@ -117,6 +120,9 @@ sequenceDiagram autonumber actor User as Developer / AI Agent participant CLI as wikistub_seed_cli / pipeline + participant Server as edit_server (127.0.0.1) + participant Auth as wiki_auth (PBKDF2) + participant Store as wiki_store (CRUD + Trash) participant Data as wikistub_seed.json (630 Stubs) participant Builder as web_publisher/_build.py participant PWA as Static PWA / ServiceWorker @@ -132,6 +138,18 @@ sequenceDiagram CLI-->>User: Write structured Markdown to output/ end + opt Local GUI Edit Server & Soft-Delete Trash (127.0.0.1) + User->>Server: HTTP POST /api/entry (JSON payload) + Server->>Auth: Verify Host header & PBKDF2 session cookie + Auth-->>Server: Permission verified + Server->>Store: Atomic create / update / soft-delete + Store->>Data: Write dataset with backup rollback + Store-->>Server: Operation confirmed + Server->>Builder: Trigger _build.py re-index + Builder-->>Server: web_publisher data updated + Server-->>User: HTTP 200 / 201 Response + end + opt Build & Serve Local PWA User->>Builder: Run _build.py Builder->>Data: Slices & indexes stubs diff --git a/README_de.md b/README_de.md index da80739..1dcb29f 100644 --- a/README_de.md +++ b/README_de.md @@ -9,6 +9,7 @@ WikiStub-Seed ist eine Wissens-Stub-Seed-Bibliothek, kein Wiki. [![WikiStub-Seed test gates](https://github.com/dev-bricks/WikiStub-Seed/actions/workflows/tests.yml/badge.svg)](https://github.com/dev-bricks/WikiStub-Seed/actions/workflows/tests.yml) +![Tests](https://img.shields.io/badge/tests-204%20passed-brightgreen) [![Version](https://img.shields.io/badge/version-1.1.12-blue.svg)](pyproject.toml) [![Ecosystem: dev-bricks](https://img.shields.io/badge/ecosystem-dev--bricks-blue.svg)](https://github.com/dev-bricks) [![Umbrella: open-bricks](https://img.shields.io/badge/umbrella-open--bricks-indigo.svg)](https://github.com/open-bricks) @@ -17,6 +18,8 @@ WikiStub-Seed ist eine Wissens-Stub-Seed-Bibliothek, kein Wiki. ![Format](https://img.shields.io/badge/format-JSON-green) ![Python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-yellow) ![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey) +![Core Dependencies](https://img.shields.io/badge/core%20deps-zero%20(stdlib)-success) +![Architecture](https://img.shields.io/badge/architecture-local--first-blue) [![Code Style: Ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff) [![Attribution Notice](https://img.shields.io/badge/attribution-NOTICE-informational.svg)](NOTICE) [![Marketing Log](https://img.shields.io/badge/marketing%20log-active-blue.svg)](MARKETING-LOG.txt) @@ -117,6 +120,9 @@ sequenceDiagram autonumber actor User as Entwickler / KI-Agent participant CLI as wikistub_seed_cli / pipeline + participant Server as edit_server (127.0.0.1) + participant Auth as wiki_auth (PBKDF2) + participant Store as wiki_store (CRUD + Papierkorb) participant Data as wikistub_seed.json (630 Stubs) participant Builder as web_publisher/_build.py participant PWA as Statische PWA / ServiceWorker @@ -132,11 +138,23 @@ sequenceDiagram CLI-->>User: Schreibe strukturiertes Markdown nach output/ end + opt Lokaler GUI-Edit-Server & Soft-Delete Papierkorb (127.0.0.1) + User->>Server: HTTP POST /api/entry (JSON-Payload) + Server->>Auth: Host-Header & PBKDF2-Sitzungscookie prüfen + Auth-->>Server: Berechtigung bestätigt + Server->>Store: Atomares Erstellen / Aktualisieren / Soft-Delete + Store->>Data: Datensatz mit Backup-Rollback speichern + Store-->>Server: Vorgang bestätigt + Server->>Builder: _build.py Neuindizierung auslösen + Builder-->>Server: web_publisher Daten aktualisiert + Server-->>User: HTTP 200 / 201 Antwort + end + opt Lokale PWA bauen & nutzen User->>Builder: Ausführen von _build.py Builder->>Data: Zerlegt & indiziert Stubs Builder-->>PWA: Erzeugt data/wikistub_seed.json & search-index.json - PWA-->>User: Suche in zwischengespeicherten Daten mit gewählter Datensatzsprache + PWA-->>User: Suche in zwischengespeicherten Daten mit gewählter Datensatzsprache end ``` diff --git a/README_es.md b/README_es.md index 764a99b..879d676 100644 --- a/README_es.md +++ b/README_es.md @@ -9,6 +9,7 @@ WikiStub-Seed es una biblioteca semilla de stubs de conocimiento, no un wiki. [![WikiStub-Seed test gates](https://github.com/dev-bricks/WikiStub-Seed/actions/workflows/tests.yml/badge.svg)](https://github.com/dev-bricks/WikiStub-Seed/actions/workflows/tests.yml) +![Tests](https://img.shields.io/badge/tests-204%20passed-brightgreen) [![Version](https://img.shields.io/badge/version-1.1.12-blue.svg)](pyproject.toml) [![Ecosystem: dev-bricks](https://img.shields.io/badge/ecosystem-dev--bricks-blue.svg)](https://github.com/dev-bricks) [![Umbrella: open-bricks](https://img.shields.io/badge/umbrella-open--bricks-indigo.svg)](https://github.com/open-bricks) @@ -17,6 +18,8 @@ WikiStub-Seed es una biblioteca semilla de stubs de conocimiento, no un wiki. ![Format](https://img.shields.io/badge/format-JSON-green) ![Python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-yellow) ![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey) +![Core Dependencies](https://img.shields.io/badge/core%20deps-zero%20(stdlib)-success) +![Architecture](https://img.shields.io/badge/architecture-local--first-blue) [![Code Style: Ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff) [![Aviso de atribución](https://img.shields.io/badge/attribution-NOTICE-informational.svg)](NOTICE) [![Marketing Log](https://img.shields.io/badge/marketing%20log-active-blue.svg)](MARKETING-LOG.txt) diff --git a/README_ja.md b/README_ja.md index b49eacf..55c6bd7 100644 --- a/README_ja.md +++ b/README_ja.md @@ -9,6 +9,7 @@ WikiStub-Seedはナレッジスタブのシードライブラリであり、Wikiではありません。 [![WikiStub-Seed test gates](https://github.com/dev-bricks/WikiStub-Seed/actions/workflows/tests.yml/badge.svg)](https://github.com/dev-bricks/WikiStub-Seed/actions/workflows/tests.yml) +![Tests](https://img.shields.io/badge/tests-204%20passed-brightgreen) [![Version](https://img.shields.io/badge/version-1.1.12-blue.svg)](pyproject.toml) [![Ecosystem: dev-bricks](https://img.shields.io/badge/ecosystem-dev--bricks-blue.svg)](https://github.com/dev-bricks) [![Umbrella: open-bricks](https://img.shields.io/badge/umbrella-open--bricks-indigo.svg)](https://github.com/open-bricks) @@ -17,6 +18,8 @@ WikiStub-Seedはナレッジスタブのシードライブラリであり、Wiki ![Format](https://img.shields.io/badge/format-JSON-green) ![Python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-yellow) ![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey) +![Core Dependencies](https://img.shields.io/badge/core%20deps-zero%20(stdlib)-success) +![Architecture](https://img.shields.io/badge/architecture-local--first-blue) [![Code Style: Ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff) [![Attribution Notice](https://img.shields.io/badge/attribution-NOTICE-informational.svg)](NOTICE) [![Marketing Log](https://img.shields.io/badge/marketing%20log-active-blue.svg)](MARKETING-LOG.txt) diff --git a/README_ru.md b/README_ru.md index a87e268..83901bd 100644 --- a/README_ru.md +++ b/README_ru.md @@ -9,6 +9,7 @@ WikiStub-Seed — это начальная библиотека заглушек знаний, не вики. [![WikiStub-Seed test gates](https://github.com/dev-bricks/WikiStub-Seed/actions/workflows/tests.yml/badge.svg)](https://github.com/dev-bricks/WikiStub-Seed/actions/workflows/tests.yml) +![Tests](https://img.shields.io/badge/tests-204%20passed-brightgreen) [![Version](https://img.shields.io/badge/version-1.1.12-blue.svg)](pyproject.toml) [![Ecosystem: dev-bricks](https://img.shields.io/badge/ecosystem-dev--bricks-blue.svg)](https://github.com/dev-bricks) [![Umbrella: open-bricks](https://img.shields.io/badge/umbrella-open--bricks-indigo.svg)](https://github.com/open-bricks) @@ -17,6 +18,8 @@ WikiStub-Seed — это начальная библиотека заглуше ![Format](https://img.shields.io/badge/format-JSON-green) ![Python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-yellow) ![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey) +![Core Dependencies](https://img.shields.io/badge/core%20deps-zero%20(stdlib)-success) +![Architecture](https://img.shields.io/badge/architecture-local--first-blue) [![Code Style: Ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff) [![Attribution Notice](https://img.shields.io/badge/attribution-NOTICE-informational.svg)](NOTICE) [![Marketing Log](https://img.shields.io/badge/marketing%20log-active-blue.svg)](MARKETING-LOG.txt) diff --git a/README_zh-Hans.md b/README_zh-Hans.md index 57bb5bd..54eb1c4 100644 --- a/README_zh-Hans.md +++ b/README_zh-Hans.md @@ -9,6 +9,7 @@ WikiStub-Seed 是一个知识存根种子库,而非 Wiki。 [![WikiStub-Seed test gates](https://github.com/dev-bricks/WikiStub-Seed/actions/workflows/tests.yml/badge.svg)](https://github.com/dev-bricks/WikiStub-Seed/actions/workflows/tests.yml) +![Tests](https://img.shields.io/badge/tests-204%20passed-brightgreen) [![Version](https://img.shields.io/badge/version-1.1.12-blue.svg)](pyproject.toml) [![Ecosystem: dev-bricks](https://img.shields.io/badge/ecosystem-dev--bricks-blue.svg)](https://github.com/dev-bricks) [![Umbrella: open-bricks](https://img.shields.io/badge/umbrella-open--bricks-indigo.svg)](https://github.com/open-bricks) @@ -17,6 +18,8 @@ WikiStub-Seed 是一个知识存根种子库,而非 Wiki。 ![Format](https://img.shields.io/badge/format-JSON-green) ![Python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-yellow) ![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey) +![Core Dependencies](https://img.shields.io/badge/core%20deps-zero%20(stdlib)-success) +![Architecture](https://img.shields.io/badge/architecture-local--first-blue) [![Code Style: Ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff) [![Attribution Notice](https://img.shields.io/badge/attribution-NOTICE-informational.svg)](NOTICE) [![Marketing Log](https://img.shields.io/badge/marketing%20log-active-blue.svg)](MARKETING-LOG.txt) diff --git a/tests/test_metadata.py b/tests/test_metadata.py index 42fa4ac..eb5492f 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -621,6 +621,41 @@ def test_all_readme_international_badge_parity(): assert "version-1.1.12" in content, f"version badge missing in {rname}" assert "dev--bricks" in content, f"dev-bricks ecosystem badge missing in {rname}" assert "open--bricks" in content, f"open-bricks umbrella badge missing in {rname}" + assert "tests-204%20passed" in content, f"test count badge missing in {rname}" + assert "core%20deps-zero%20(stdlib)" in content, f"core deps badge missing in {rname}" + assert "architecture-local--first" in content, f"local-first architecture badge missing in {rname}" + + +def test_readme_sequence_diagram_crud_edit_server_parity(): + """Verify both English and German READMEs feature the Local GUI Edit Server sequence block.""" + readme_en = (PROJECT_ROOT / "README.md").read_text(encoding="utf-8") + readme_de = (PROJECT_ROOT / "README_de.md").read_text(encoding="utf-8") + + assert "edit_server (127.0.0.1)" in readme_en + assert "wiki_auth (PBKDF2)" in readme_en + assert "wiki_store (CRUD + Trash)" in readme_en + assert "opt Local GUI Edit Server & Soft-Delete Trash (127.0.0.1)" in readme_en + + assert "edit_server (127.0.0.1)" in readme_de + assert "wiki_auth (PBKDF2)" in readme_de + assert "wiki_store (CRUD + Papierkorb)" in readme_de + assert "opt Lokaler GUI-Edit-Server & Soft-Delete Papierkorb (127.0.0.1)" in readme_de + + +def test_pwa_landing_page_seo_metadata(): + """Verify web_publisher/index.html includes complete SEO, Open Graph and Twitter Card tags.""" + index_html = (PROJECT_ROOT / "web_publisher" / "index.html").read_text(encoding="utf-8") + assert ' WikiStub-Seed — Wissenschaftliches Lexikon + + + + + + + + + + + diff --git a/web_publisher/tests/publisher.test.mjs b/web_publisher/tests/publisher.test.mjs index abd711c..04d57ee 100644 --- a/web_publisher/tests/publisher.test.mjs +++ b/web_publisher/tests/publisher.test.mjs @@ -151,6 +151,16 @@ describe("index.html", () => { } assert.ok(html.includes('aria-label="Sprache auswählen"')); }); + it("enthält SEO-, Open-Graph- und Twitter-Card-Metadaten", () => { + html = html || readText("index.html"); + assert.ok(html.includes('name="description"'), "meta description fehlt"); + assert.ok(html.includes('name="keywords"'), "meta keywords fehlt"); + assert.ok(html.includes('property="og:title"'), "og:title fehlt"); + assert.ok(html.includes('property="og:description"'), "og:description fehlt"); + assert.ok(html.includes('property="og:type"'), "og:type fehlt"); + assert.ok(html.includes('name="twitter:card"'), "twitter:card fehlt"); + assert.ok(html.includes('name="twitter:title"'), "twitter:title fehlt"); + }); }); // ── 6: sw.js ist in ASSETS vollständig ───────────────────────────────────────