From 14b76df439ce7bac9666dc07a37bea7d85beab0a Mon Sep 17 00:00:00 2001 From: lukisch <55554266+lukisch@users.noreply.github.com> Date: Mon, 2 Nov 2026 07:48:22 +0100 Subject: [PATCH] chore(hygiene): untrack MARKETING-LOG.txt, add GitHub governance docs, harden translator app_dir & contract tests [G 2026-11-02] --- .github/dependabot.yml | 13 +++ .github/labels.yml | 35 +++++++ .gitignore | 5 + CHANGELOG.md | 6 ++ MARKETING-LOG.txt | 209 ----------------------------------------- README.md | 2 +- README_de.md | 2 +- llms.txt | 2 +- tests/test_metadata.py | 27 +++++- translator.py | 2 +- 10 files changed, 86 insertions(+), 217 deletions(-) create mode 100644 .github/dependabot.yml create mode 100644 .github/labels.yml delete mode 100644 MARKETING-LOG.txt diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..d96394e --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,13 @@ +# Security-only: keine version-updates (limit 0), Security-Fixes gruppiert +version: 2 +updates: + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 0 + groups: + security: + applies-to: security-updates + patterns: + - "*" diff --git a/.github/labels.yml b/.github/labels.yml new file mode 100644 index 0000000..7c5b641 --- /dev/null +++ b/.github/labels.yml @@ -0,0 +1,35 @@ +# Standard-Labels aus GOVERNANCE.md §4.2 +# Wird von label-sync.yml verwendet +- name: bug + color: 'd73a4a' + description: 'Confirmed bug' +- name: enhancement + color: 'a2eeef' + description: 'New feature or improvement' +- name: good first issue + color: '7057ff' + description: 'Good for newcomers' +- name: help wanted + color: '008672' + description: 'Community help welcome' +- name: documentation + color: '0075ca' + description: 'Documentation improvement' +- name: duplicate + color: 'cfd3d7' + description: 'Duplicate issue' +- name: wontfix + color: 'ffffff' + description: 'Will not be implemented' +- name: 'priority: high' + color: 'b60205' + description: 'High priority' +- name: 'priority: low' + color: 'e4e669' + description: 'Low priority' +- name: needs-triage + color: 'fbca04' + description: 'Not yet triaged' +- name: stale + color: 'ededed' + description: 'No recent activity' diff --git a/.gitignore b/.gitignore index 44e32ff..4d1e9cc 100644 --- a/.gitignore +++ b/.gitignore @@ -126,3 +126,8 @@ web_companion/node_modules/ # Staged MSIX build output (GITHUB-POLICY.md SS3, T-20260926-510472849) -- narrow # on purpose: _WARTUNG/generate_store_screenshots.py must stay tracked (maintenance script). _WARTUNG/msix_staging/ + +# Interne Marketing- und Verarbeitungsdokumente (T-20260926-455218633 / GITHUB-POLICY.md §4) +MARKETING-LOG.txt +*MARKETING-LOG.txt +*STATUS-LOG.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index fab717d..2db6629 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ ## [Unreleased] ### Added +- **Repository- & Git-Hygiene, GitHub-Dokumente & I18N-Härtung (Stand 2026-11-02):** + - Git- & Repository-Hygiene (T-20260926-455218633 / GITHUB-POLICY.md §4): MARKETING-LOG.txt aus Git-Tracking entkoppelt (git rm --cached), .gitignore um Pattern-Defense (MARKETING-LOG.txt, *MARKETING-LOG.txt, *STATUS-LOG.txt) gehärtet; lokales Log für Invarianten-Dokumentation vollständig erhalten. + - I18N-Laufzeitrobustheit: ranslator.py gehärtet; pp_dir fällt bei None standardmäßig auf Path(__file__).resolve().parent zurück (statt dynamisches Path.cwd()), sodass Übersetzungen auch bei Aufrufen außerhalb des Repo-Wurzelverzeichnisses zuverlässig geladen werden. + - GitHub-Governance & Automatisierung: .github/dependabot.yml (Security-only Updates, wöchentlich, PR-Limit 0) und .github/labels.yml (Standard-Labels nach GOVERNANCE.md §4.2) angelegt. + - Doku- & Badge-Aktualisierung: Verifikations-Badges in README.md und README_de.md sowie llms.txt auf Stand 2026-11-02 synchronisiert. + - Vertragstest-Erweiterung: ests/test_metadata.py um est_internal_marketing_log_not_tracked und est_github_docs_integrity erweitert; Testsuite umfasst 157 bestandene Tests (100% grün). - **UX & Accessibility Review (WCAG 2.1 AA / BITV 2.0 Tastatur-Ergonomie, Tooltips, Alt-Mnemonics, Shortcuts- & About-Dialog, 6-Sprachen-Parität & 7 Vertragstests - Stand 2026-11-01):** - Barrierefreie ToolTips (`class ToolTip`): Leichtgewichtiges Tooltip-Widget für Tkinter-Komponenten mit Maus-Hover (`/`), Tastaturfokus (`/`), Schließen per `` und `` gemäß WCAG 2.1 AA 1.4.13 sowie Statusleisten-Rückmeldung; verknüpft mit Tabellenauswahl, Limit-Feld, Suchfeld, Aktualisieren-Button, Export-Button, Schema-Auswahl, Alle-Schemas-Button, SQL-Ausführen-Button und SQL-Leeren-Button. - Menüleisten-Mnemonics (Alt-Navigation): Mnemonics (`underline=0`) für Hauptmenüs `&Datei` (Alt+D), `&Bearbeiten` (Alt+B), `&Ansicht` (Alt+A) und `&Hilfe` (Alt+H) sowie Tastaturkürzel-Mnemonics in Untermenüs. diff --git a/MARKETING-LOG.txt b/MARKETING-LOG.txt deleted file mode 100644 index 9531b5c..0000000 --- a/MARKETING-LOG.txt +++ /dev/null @@ -1,209 +0,0 @@ -# MARKETING-LOG — SQLiteViewer - -Stand: 2026-09-14 -Kanonisches Repo: https://github.com/file-bricks/SQLiteViewer -Organisations-Kontext: file-bricks / open-bricks -Microsoft Store: SQLite Viewer Pro (Store ID: 9P6H501XB8JT, Identity: Geiger.SQLiteViewerPro) - -=============================================================================== -1. POSITIONIERUNG & MARKTKONTEXT -=============================================================================== - -SQLiteViewer schließt die Lücke zwischen überladenen, schwergewichtigen Datenbank- -IDEs (wie DBeaver mit Java-VM-Overhead oder DB Browser for SQLite mit C++/Qt- -Installationszwang) und der bloßen SQLite-Kommandozeile. - -Ziel: Ein leichtgewichtiger, portabler, 100% offline arbeitender SQLite-Viewer mit -Tkinter-Oberfläche, der direkt aus Python gestartet oder als unprivilegierte -Windows-App aus dem Microsoft Store bezogen werden kann. - -Kern-Mehrwerte: -1. Zero Network Egress (INV-LOCAL-01): Garantiert keine Cloud-Verbindungen, keine Telemetrie. -2. Unprivilegierte Ausführung (INV-LOCAL-02): Strikter RunAsInvoker-Betrieb ohne Adminrechte. -3. Zero External Dependencies (INV-LOCAL-03): Python Standardbibliothek (sqlite3) + Tkinter. -4. Kontextabhängiger Export (INV-LOCAL-05): CSV sowie strukturiertes JSON (sqliteviewer-export-v1). -5. Offline Web-Companion (INV-LOCAL-06): Lokale HTML/JS-Inspektion im Browser ohne Upload. -6. Microsoft Store Integration (INV-LOCAL-07): Standard-AppX mit Dateiverknüpfungen (.db, .sqlite, .sqlite3). - -=============================================================================== -2. ZIELGRUPPEN & PERSONAS (PERSONA-01 BIS PERSONA-04) -=============================================================================== - -[PERSONA-01] Python- & Desktop-Entwickler -- Profil: Softwareingenieure, die lokale SQLite-Datenbanken ihrer Anwendungen (PySide, - Tkinter, FastAPI, Django, CLI-Tools) schnell inspizieren, filtern und debuggen möchten. -- Pain Point: Installation einer 300 MB Java-IDE nur zum Prüfen einer lokalen Test-DB ist unverhältnismäßig. -- High-Intent Queries: - - "local-first SQLite viewer Python Tkinter" - - "lightweight SQLite browser without bloat" - - "inspect sqlite3 db from python app" - - "python tkinter sqlite gui table browser" - -[PERSONA-02] Datenschutzsensible Analysten & Wissenschaftler -- Profil: Forscher, Datenanalysten und Prüfer, die vertrauliche Forschungsdaten, - Klinikdatensätze oder Umfrageergebnisse lokal explorieren müssen. -- Pain Point: SaaS-Datenbank-Tools und moderne Cloud-Viewer übertragen Metadaten oder Zeilen. -- High-Intent Queries: - - "offline SQLite database viewer zero network egress" - - "air-gapped SQLite viewer privacy first" - - "open source local SQLite explorer" - - "datenschutzkonformer SQLite Viewer offline" - -[PERSONA-03] DevOps, Systemadministratoren & Support-Teams -- Profil: Incident-Responder, IT-Admins und technischer Kundensupport, die Support- - Snapshots, Logs oder SQLite-Dateien auf Kundensystemen ohne Administratorrechte analysieren. -- Pain Point: Auf gesperrten Workstations dürfen keine Installer mit UAC-Prompt ausgeführt werden. -- High-Intent Queries: - - "portable SQLite viewer Windows unprivileged" - - "inspect sqlite database RunAsInvoker" - - "support triage sqlite viewer usb stick" - - "portable sqlite table browser windows" - -[PERSONA-04] Microsoft Store Endnutzer & Non-Technical Evaluators -- Profil: Windows 10/11 Anwender, die eine .db- oder .sqlite-Datei erhalten haben und per - Doppelklick ohne Konsolenbefehle tabellarisch durchsuchen möchten. -- Pain Point: Windows bringt keinen nativen Viewer für SQLite-Dateien mit. -- High-Intent Queries: - - "SQLite Viewer Pro Microsoft Store" - - "Windows 11 open db file viewer" - - "double click sqlite file Windows" - - "sqlite db datei oeffnen windows 10" - -=============================================================================== -3. VERGLEICHSMATRIX GEGENÜBER ALTERNATIVEN (10 DIMENSIONEN) -=============================================================================== - -| Dimension | SQLiteViewer (file-bricks) | DB Browser for SQLite | DBeaver | SQLiteStudio | Cloud SQL SaaS | -|---|---|---|---|---|---| -| Zero Network Egress (INV-LOCAL-01) | JA (100% offline) | JA | NEIN (Update/Cloud) | JA | NEIN (Cloud-Zwang) | -| RunAsInvoker (INV-LOCAL-02) | JA (kein UAC) | JA | Oft Admin-Installer | JA | Browser | -| Runtime Footprint (INV-LOCAL-03) | Minimal (Python stdlib) | C++/Qt Binaries | Schwer (JVM ~300MB) | C++/Qt Binaries | Remote Server | -| Non-Destructive Default (INV-LOCAL-04)| JA (Read-Only Default)| Editier-Fokus | Editier-Fokus | Editier-Fokus | Schreib-Zugriff | -| Dual Export CSV & JSON (INV-LOCAL-05)| JA (sqliteviewer-v1) | CSV only | CSV / JSON | CSV / JSON | Cloud Dump | -| Offline Web Companion (INV-LOCAL-06) | JA (web_companion/) | NEIN | NEIN | NEIN | Web-basiert | -| Microsoft Store AppX (INV-LOCAL-07) | JA (9P6H501XB8JT) | Winget / MSI | Winget / MSI | Zip / Installer | NEIN | -| Lizenz / Copyleft (INV-LOCAL-08) | MIT (permissiv) | GPLv3 (Copyleft) | Apache/Proprietär | GPLv3 (Copyleft) | Proprietär | -| Zweisprachige Parität (INV-LOCAL-09) | JA (100% EN/DE) | Teilweise UI | Teilweise UI | Teilweise UI | Nur Englisch | -| Sicherheits-SLA (INV-LOCAL-10) | 48h Response SLA | Best-Effort | Kommerziell | Best-Effort | Vendor SLA | - -=============================================================================== -4. RELEASE 2.1.0 AUDIT & MARKETING-HIGHLIGHTS -=============================================================================== - -- Internationale Benutzeroberfläche (i18n): Dynamische Umschaltung zwischen Deutsch und - Englisch über Menü und Einstellungsdialog (`locales/translations.json`). -- Zweisprachige README-Architektur: Vollständige 16-Punkte Schnellnavigation mit - wechselseitiger Ankerparität zwischen `README.md` (EN) und `README_de.md` (DE). -- Visuelle Diagramme: Architektur-Flussdiagramm und Export-Sequenzdiagramm nach - HOOK-BANNER-ASSET-01 mit quotierten Syntax-Attributen. -- Drittanbieter-Lizenzaudit: Formales Audit `THIRD_PARTY_LICENSES.md` mit Bestätigung - von 0 externen Runtime-Abhängigkeiten und Zero-Copyleft-Garantie auf Nutzerdaten. -- Vertragstests: Testsuite `tests/test_metadata.py` zur dauerhaften Sicherung von - Banner-Guardrails, Diagramm-Syntax, Sprachparität und PEP 621 Metadaten. - -=============================================================================== -5. TECHNICAL HYGIENE & CI MATRIX HÄRTUNG (PFAD A) - 2026-09-22 -=============================================================================== - -- Formal NOTICE & Statutory Disclaimer: Neues `NOTICE`-Wurzel-Dokument für Urheberschaft, - RunAsInvoker-Invariante, Zero Egress (INV-LOCAL-01), Haftungsprivileg gem. § 521 BGB - und Lizenzerklärungen für Python-Standardbibliothek (PSF-2.0) sowie Tcl/Tk. -- CI Matrix Multi-OS Härtung: - - `.github/workflows/source-platform-smoke.yml` triggert jetzt auf `master` und `main`. - - Matrix um `windows-latest` erweitert (Ubuntu, Windows, macOS). - - Job-Level `timeout-minutes: 10`, Concurrency-Abbrüche bei neuen Pushes. - - Headless-Rauch- und Metadaten-Vertragstests in CI integriert. - - Stale- und Welcome-Workflows mit Timeouts (10m / 5m) und Concurrency abgesichert. -- PEP 621 Standardisierung: `license-files` in `pyproject.toml` deklariert, Notice-URL ergänzt. -- Test- und Linter-Härtung: - - Pytest `--basetemp=.pytest_tmp` verhindert Windows-Junction-Rechtefehler. - - Ruff 0 Fehler: ungenutzte Imports und redundante Variablen rückstandslos bereinigt. - - 4 neue Metadaten-Vertragstests in `tests/test_metadata.py` (60/60 Tests grün). - -=============================================================================== -6. TURNUSMÄSSIGER GITHUB- & ASSET-CHECK (2026-10-03) -=============================================================================== - -- PWA & Mobile-Icon-Suite: Vollständiges Icon-Inventar (mobile_icons/ und web_companion/icons/) integriert und auditiert. -- Upstream Fast-Forward & PR-Integration: Remote-Commits #1 und #2 (Source-Schutz, atomarer Export, MSIX-Staging-Untrack) verifiziert. -- Test-Vollsuite: 99 Pytest-Tests + 43 Node-Tests (142 Tests 100% grün). -- Linting- & Bytecode-Verifikation: ruff check (0 Fehler), compileall -q . fehlerfrei, git diff --check sauber. - -=============================================================================== -7. PFAD B MARKETING, DISCOVERABILITY & VISUELLE TOPOLOGIE REVISION (2026-10-11) -=============================================================================== - -- Visual Four-View Architectural Topology: Standardisierte ASCII-Topologie in Section 3 - beider Sprachfassungen (README.md & README_de.md): - * [VIEW 1: TKINTER GUI, USER INPUT & CLI INTEGRATION] / [SICHT 1] - * [VIEW 2: ATOMIC TRANSACTIONAL EXPORT & SERIALIZATION ENGINE] / [SICHT 2] - * [VIEW 3: SQLITE3 CORE DRIVER & DDL SCHEMA INTROSPECTION] / [SICHT 3] - * [VIEW 4: RUNASINVOKER NON-ELEVATION, ZERO-EGRESS & AUDIT INTEGRITY] / [SICHT 4] - Abdeckung aller 10 Invarianten INV-LOCAL-01 bis INV-LOCAL-10 unter Erhalt aller 16 - bilateralen Schnellnavigations-Anker (..). -- Bilinguale CONTRIBUTING.md Guidelines: Vollständige Entwicklerrichtlinien (DE/EN) - mit Spezifikation des Plan D Workflows (C:\_Local_DEV\repos\SQLiteViewer), unprivilegiertem - RunAsInvoker-Betrieb (INV-LOCAL-02), Zero-Egress-Garantie (INV-LOCAL-01), Haftungsprivileg - nach § 521 BGB Gefälligkeitsrecht und verbindlicher 48h Security Response SLA. -- PEP 621 Standardisierung in pyproject.toml: - * Contributing und Level 1 SBOM URLs unter [project.urls] registriert. - * CONTRIBUTING.md in license-files Whitelist aufgenommen. -- Level 1 SBOM Plain-Text Companion & Re-Audit Stand 2026-10-11: - * THIRD_PARTY_LICENSES.txt und THIRD_PARTY_LICENSES.md re-auditiert mit Bestätigung - aller 10 Invarianten INV-LOCAL-01..INV-LOCAL-10, unprivileged RunAsInvoker Non-Elevation, - Zero-Copyleft Permissive Stack (Python Standard Library, Tkinter, MIT), 100% Zero-Egress - lokaler Architektur, gesetzlichem Haftungsausschluss (§ 521 BGB Gefälligkeitsrecht) und - verbindlicher 48h Security Response SLA. -- Dokumentations- & Badge-Parität: - * Shields.io Badges aktualisiert für Tests (134 passed | 100% green / 134 bestanden | 100% grün), - Verified: 2026-10-11 / Geprüft: 2026-10-11, Contributing Guidelines und Level 1 SBOM. - * llms.txt Stand 2026-10-11 mit 134 Tests Baseline, Section 3 4-View Topologie und Level 1 SBOM Referenzen. -- Nicht-automatisierte Handlungsempfehlungen (Discoverability & Marketing): - * REC-20261011-01: Windows Terminal Argument Completer Script (PowerShell Register-ArgumentCompleter für sqliteviewer.exe und .sqlite-Pfade bereitstellen). - * REC-20261011-02: VHS / Terminalizer kuratiertes Demo-GIF im README zur Veranschaulichung des schnellen Startups (< 0.2s) und Sofort-Browsings von 10.000 Zeilen einbinden. - * REC-20261011-03: WinGet Community Repository Manifest Re-Verification (file-bricks.SQLiteViewerPro) zur Abdeckung von CLI-Installationen (winget install SQLiteViewerPro). - -=============================================================================== -8. PFAD A REPOSITORY-HYGIENE, CI-MATRIX-HÄRTUNG & PEP 621 STANDARDISIERUNG (2026-10-18) -=============================================================================== - -- CI-Matrix-Härtung (.github/workflows/source-platform-smoke.yml): - * Python-Versionsmatrix um Python 3.10 erweitert: os [ubuntu-latest, windows-latest, macos-latest] x python-version ["3.10", "3.11", "3.12"], um den in pyproject.toml deklarierten PEP 621 Floor (requires-python = ">=3.10") auf allen drei Plattformen aktiv zu validieren. - * Automatisierter Ruff-Linting-Schritt in CI-Workflow integriert (pip install pytest ruff && ruff check .). - * Vereinheitlichte Testausführung via python -m pytest -v --basetemp=.pytest_tmp. -- Multi-Host- & Cloud-Sync-Schutz (.gitignore): - * Muster gegen Duplikatkopien ergänzt: * (Kopie)*, * (kopie)*, * (Copy)*, * (copy)*. - * Lock- und Toolchain-Schutz erweitert: uv.lock, .wheel-smoke/, wheelhouse/, .tox/. -- PEP 621 Standardisierung (pyproject.toml): - * Ökosystem-Aliase in [project.urls] eingepflegt: - "Parent Organization" = "https://github.com/file-bricks" - "Umbrella Ecosystem" = "https://github.com/open-bricks" - * Pytest-Dateimuster harmonisiert: python_files = ["test_*.py", "*_smoke.py"] zur automatischen Erkennung headless Smoke-Tests. -- Unterordner-README-Inventar (P-006 / README-PARITAET-INVENTAR_2026-08-17): - * Befund: web_companion/README.md liegt aktuell als deutschsprachiges Dokument vor; web_companion/README_de.md fehlt. - * Vormerkung: Unterordner-README-Parität wird für den planmäßigen P-006-Leerlauf-Sprachzug vorgemerkt (gemäß Vorgabe kein unautorisierter Übersetzungs-Quick-Fix im Pfad A). -- Vertragstest-Erweiterung (tests/test_metadata.py): - * 4 neue Contract-Tests: - 1. test_pytest_configuration_unified_smoke_discovery: Prüft python_files Konfiguration auf Einbindung von *_smoke.py. - 2. test_extended_gitignore_patterns: Prüft Vorhandensein von Kopie-/Duplikat- und Lockmustern in .gitignore. - 3. test_subfolder_readme_inventory_documented: Prüft Dokumentation des web_companion README-Befunds im MARKETING-LOG.txt. - 4. test_marketing_log_section_8_pfad_a_20261018: Prüft Vorhandensein und Vollständigkeit von Abschnitt 8 im MARKETING-LOG.txt. - * Härtung bestehender Contract-Tests für CI Python 3.10 Matrix, PEP 621 Ökosystem-URLs und Badge-Stand 2026-10-18. -- Dokumentations- & Badge-Parität: - * Badges in README.md & README_de.md auf Stand 2026-10-18 und neue Gesamt-Testanzahl aktualisiert. - * llms.txt Last-checked auf 2026-10-18 aktualisiert. - -9. PFAD A UX- & ACCESSIBILITY-REVIEW, WCAG 2.1 AA TASTATUR-ERGONOMIE & 6-SPRACHEN-PARITÄT (2026-11-01) ------------------------------------------------------------------------------------------------------ -- Status: Abgeschlossen & Verifiziert (153/153 Tests grün) -- Datum: 2026-11-01 -- Zweck: Barrierefreiheit, Tastatur-Ergonomie, WCAG 2.1 AA Konformität und UI-Konsistenz. -- Maßnahmen: - * Accessible ToolTip Widget (WCAG 2.1 AA 1.4.13) mit Maus-Hover, Tastatur-Fokus und Escape-Schließung. - * Menüleisten Alt-Mnemonics (&Datei Alt+D, &Bearbeiten Alt+B, &Ansicht Alt+A, &Hilfe Alt+H). - * 13 globale Tastaturkürzel (Ctrl+O, Ctrl+W, Ctrl+E, Ctrl+Shift+E, Ctrl+Q, Ctrl+F, Ctrl+A, F5, F9, F1, Shift+F1, Ctrl+1..3). - * Barrierefreier Shortcuts- & Barrierefreiheits-Dialog (show_shortcuts_help / F1). - * Strukturierter Über-Dialog (show_about_dialog / Shift+F1) mit Lizenz-, Version- und Local-First Invarianten. - * Dynamische Laufzeit-Neuübersetzung gehärtet (Widget-Referenzen und Tooltips). - * 100% Parität über 6 Sprachen in locales/translations.json (86 Schlüssel DE, EN, ES, ZH, JA, RU). - * 7 neue Vertragstests in tests/test_ui_accessibility.py (153 passed in 1.9s). diff --git a/README.md b/README.md index 4604467..13a79a9 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ License: MIT Notice & Attribution Tests 100% Passing - Verified 2026-11-01 + Verified 2026-11-02 Contributing Guidelines Level 1 SBOM Plain Text Microsoft Store ID: 9P6H501XB8JT diff --git a/README_de.md b/README_de.md index f88831d..821a112 100644 --- a/README_de.md +++ b/README_de.md @@ -7,7 +7,7 @@ Lizenz: MIT Hinweis & Attribution Tests 100% Bestanden - Geprüft 2026-11-01 + Geprüft 2026-11-02 Beitragsrichtlinie Level 1 SBOM Plain Text Microsoft Store ID: 9P6H501XB8JT diff --git a/llms.txt b/llms.txt index bd9d2fe..497cb24 100644 --- a/llms.txt +++ b/llms.txt @@ -2,7 +2,7 @@ Canonical repository: https://github.com/file-bricks/SQLiteViewer Version: 2.1.0 -Stand: 2026-11-01 +Stand: 2026-11-02 Organization: file-bricks Umbrella: open-bricks Microsoft Store: SQLite Viewer Pro (Store ID: 9P6H501XB8JT, Identity: Geiger.SQLiteViewerPro) diff --git a/tests/test_metadata.py b/tests/test_metadata.py index 223c100..fce17d1 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -349,8 +349,8 @@ def test_badges_recency_and_test_count_20261011(): content_en = (REPO_ROOT / "README.md").read_text(encoding="utf-8") content_de = (REPO_ROOT / "README_de.md").read_text(encoding="utf-8") - assert any(v in content_en for v in ["Verified-2026--10--11-blue.svg", "Verified-2026--10--18-blue.svg", "Verified-2026--11--01-blue.svg"]) - assert any(v in content_de for v in ["Gepr%C3%BCft-2026--10--11-blue.svg", "Gepr%C3%BCft-2026--10--18-blue.svg", "Gepr%C3%BCft-2026--11--01-blue.svg"]) + assert any(v in content_en for v in ["Verified-2026--10--11-blue.svg", "Verified-2026--10--18-blue.svg", "Verified-2026--11--01-blue.svg", "Verified-2026--11--02-blue.svg"]) + assert any(v in content_de for v in ["Gepr%C3%BCft-2026--10--11-blue.svg", "Gepr%C3%BCft-2026--10--18-blue.svg", "Gepr%C3%BCft-2026--11--01-blue.svg", "Gepr%C3%BCft-2026--11--02-blue.svg"]) assert "Contributing-Guidelines" in content_en assert "Beitragsrichtlinie" in content_de @@ -411,9 +411,28 @@ def test_badges_recency_and_test_count_20261018(): content_en = (REPO_ROOT / "README.md").read_text(encoding="utf-8") content_de = (REPO_ROOT / "README_de.md").read_text(encoding="utf-8") - assert "Verified-2026--10--18-blue.svg" in content_en or "Verified-2026--11--01-blue.svg" in content_en - assert "Gepr%C3%BCft-2026--10--18-blue.svg" in content_de or "Gepr%C3%BCft-2026--11--01-blue.svg" in content_de + assert any(b in content_en for b in ["Verified-2026--10--18-blue.svg", "Verified-2026--11--01-blue.svg", "Verified-2026--11--02-blue.svg"]) + assert any(b in content_de for b in ["Gepr%C3%BCft-2026--10--18-blue.svg", "Gepr%C3%BCft-2026--11--01-blue.svg", "Gepr%C3%BCft-2026--11--02-blue.svg"]) assert any(p in content_en for p in ["Tests-146%20passed", "Tests-153%20passed", "Tests-155%20passed"]) assert any(p in content_de for p in ["Tests-146%20bestanden", "Tests-153%20bestanden", "Tests-155%20bestanden"]) assert "Contributing-Guidelines" in content_en assert "Beitragsrichtlinie" in content_de + + +def test_internal_marketing_log_not_tracked(): + """Policy T-20260926-455218633 / GITHUB-POLICY.md §4: MARKETING-LOG.txt must never be tracked in git.""" + import subprocess + proc = subprocess.run(["git", "ls-files", "MARKETING-LOG.txt"], cwd=REPO_ROOT, capture_output=True, text=True) + assert proc.stdout.strip() == "", "MARKETING-LOG.txt must not be tracked in git" + + +def test_github_docs_integrity(): + """Verify .github governance documents (dependabot.yml, labels.yml) exist and are valid.""" + dependabot = REPO_ROOT / ".github" / "dependabot.yml" + labels = REPO_ROOT / ".github" / "labels.yml" + assert dependabot.is_file(), ".github/dependabot.yml must exist" + assert labels.is_file(), ".github/labels.yml must exist" + content_dep = dependabot.read_text(encoding="utf-8") + content_lbl = labels.read_text(encoding="utf-8") + assert 'package-ecosystem: "pip"' in content_dep + assert "name: bug" in content_lbl diff --git a/translator.py b/translator.py index a169218..5a7fe74 100644 --- a/translator.py +++ b/translator.py @@ -37,7 +37,7 @@ def __init__(self, default_lang: str = 'de', app_dir: Path = None): self.current_lang = default_lang if default_lang in self.SUPPORTED_LANGUAGES else 'de' if app_dir is None: - app_dir = Path.cwd() + app_dir = Path(__file__).resolve().parent self.app_dir = Path(app_dir) self.translations_file = self.app_dir / "locales" / "translations.json"