From 71b7789318bbf263e8b8baf69e5cdb8719bb2dc0 Mon Sep 17 00:00:00 2001 From: Lukas Geiger Date: Sat, 26 Sep 2026 13:24:30 +0200 Subject: [PATCH 1/3] chore: repo hygiene -- untrack agent-internal BEFUNDE.md, extend .gitignore T-20260926-510472849 (public GITHUB-POLICY.md SS3 enumeration missed naming variants). BEFUNDE.md is a pure agent handoff note with zero references elsewhere in the tree (verified) -- safe to untrack. MARKETING-LOG.txt, STORE_CONTRACT.md, RUNTIME_DAILY_CARE.md and _WARTUNG/ stay tracked in this pass: they are wired into tests/test_metadata.py, tests/test_store_contract.py, tests/test_softwarecenter_sync.py and pyproject.toml/llms.txt/README as a public consistency contract, so untracking them here would break CI and dangling doc links -- that needs a coordinated follow-up, not a blind removal. The matching .gitignore patterns are added regardless, so no NEW repo repeats the same naming pattern unreviewed. Verified: full pytest run on the four affected suites (26 passed). Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01PTbvD41MCVmnQWaobvHfCk --- .gitignore | 16 ++++++++++++++++ BEFUNDE.md | 49 ------------------------------------------------- 2 files changed, 16 insertions(+), 49 deletions(-) delete mode 100644 BEFUNDE.md diff --git a/.gitignore b/.gitignore index 13f1733..aa88ecf 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,22 @@ TESTERGEBNISSE.txt BUGREPORT.md DIAGNOSE_REPORT.md LOCK*.txt +BEFUNDE.md +# Diese vier sind hier noch getrackt: MARKETING-LOG.txt, STORE_CONTRACT.md und +# RUNTIME_DAILY_CARE.md sind in pyproject.toml/llms.txt/README verlinkt und +# durch tests/test_metadata.py, tests/test_store_contract.py bzw. +# tests/test_softwarecenter_sync.py als Konsistenzvertrag verankert; _WARTUNG/ +# ist Fixture fuer tests/test_store_contract.py. Aus dem Tracking nehmen +# erfordert zuerst diese Referenzen aufzuloesen (T-20260926-510472849, offene +# Entscheidung -- nicht Teil dieser Bereinigung). Das Muster steht trotzdem +# hier, damit KEIN NEUES Repo diese Namen unbedacht wieder committet. +*MARKETING-LOG.txt +*STATUS-LOG.txt +*_DAILY_CARE.md +TASKPLAN_STATUS_*.md +STORE_CONTRACT.md +_WARTUNG/ +_STAGING/ # ---- Persoenliche / Sensible Daten ---- _USER/ diff --git a/BEFUNDE.md b/BEFUNDE.md deleted file mode 100644 index 6f829e6..0000000 --- a/BEFUNDE.md +++ /dev/null @@ -1,49 +0,0 @@ -# Befunde — SoftwareCenter - -**Erfasst am:** 2026-07-28 -**Rolle:** TICKET-MASTER / Plan-D-Handoff - -## Entscheidung und Git-Provenienz - -- Autorisierte Entscheidung `D-20260727-008`: lokalen Stand kontrolliert auf - `origin/master` rebasen, Commit und Icons erhalten, anschließend erneut - testen. -- Der ursprüngliche lokale Commit `4ccb965` wurde auf den Remote-Stand - `83ab6b3` rebaset und als `8dfa64f` fortgeführt. `c89960c` dokumentierte den - ersten Closeout. -- Die auf dem Remote bereits bewusst entfernte `web_companion`-Implementierung - bleibt entfernt. Eine durch den Rebase übernommene, dadurch unzutreffende - PWA-Zeile im Changelog wurde ebenfalls entfernt. -- Die im bisherigen OneDrive-Arbeitsstand enthaltenen - `BUGSWEEP-41`-Pfadprüfungen wurden als eigener, testbarer Codebestand - übernommen. Unabhängige Typografieänderungen sind keine Voraussetzung für - diesen Fix. -- Die autorisierten Icon-Masterdateien wurden bitgenau erhalten: - `SoftwareCenter.ico` - (`4052B690501B8D0BCE19270A4DEDC7136B4995D84EA11BFF72D657B01565CDBC`) - und `SoftwareCenter.png` - (`BA3DF6B23BE8DF0706EE632CC9C5C282703E9468C3A644ABE1B886F7E0F02125`). - -## Verifikation - -- `python -m pytest -q`: **124 bestanden** -- Die portable Katalogroutine besitzt separat **12 bestandene Tests**, - einschließlich read-only Daily Care, leerem/fehlerhaftem Scan, - `SUPPRESSED`-Erhalt, Idempotenz, Prozess-Abbruch und - Backup/Wiederherstellung beider Profile. -- Der reale Daily-Care-Lauf erkannte 59 Katalog-, Registry- und - Kandidateneinträge. Drei fehlende Startziele und acht nur geplante - Profiländerungen wurden gemeldet; es wurde keine Profil- oder - Registry-Mutation vorgenommen. - -## Tägliche Betriebsroutine - -Der headless Job `softwarecenter.launchboards.daily-care` ist im -`ellmos-scheduler` für täglich 06:20 Uhr Europe/Berlin registriert und im -Automation Master als read-only, vergleichbare Automatisierung erfasst. Die -versteckte Windows-Aufgabe -`ellmos SoftwareCenter LaunchBoards Daily Care` führt täglich genau einen -Scheduler-Tick aus, holt verpasste Starts nach und vermeidet parallele -Instanzen. Ein kontrollierter Hintergrundstart endete mit Resultat `0`; der -Scheduler bestätigte dabei einen neuen `last_tick_at`. Damit ist die tägliche -Ausführung auf WORKSTATION-LG aktiviert, ohne sichtbares Fenster. From a5e666c910c9b7e62833c98da4c74428dbfc06a6 Mon Sep 17 00:00:00 2001 From: Lukas Geiger Date: Sat, 26 Sep 2026 14:12:36 +0200 Subject: [PATCH 2/3] chore(hygiene): untrack MARKETING-LOG.txt/STORE_CONTRACT.md/_WARTUNG staging Team-lead decision on T-20260926-510472849 (ecosystem bestand scan found these agent-internal/build-artifact classes tracked in 105/143 public repos). All three stay on disk locally (gitignored), nothing was deleted. - MARKETING-LOG.txt: agent operational discoverability log. Retired from pyproject.toml project.url and llms.txt (llms.txt gained a CHANGELOG.md bullet instead -- same "public project history" role). - STORE_CONTRACT.md: internal Store release/versioning bookkeeping. PRODUCT_BOUNDARIES.md and scripts/verify_product_boundaries.py now cite STORE_LISTING.md/WINDOWS_STORE_PREP.md only; tests/test_store_contract.py checks the same version-consistency invariant against store_package.json/ pyproject.toml/SoftwareCenter.py/STORE_LISTING.md instead. - _WARTUNG/msix_staging/: staged MSIX build output (manifest + packaged icons), matches GITHUB-POLICY.md SS3 "Build-Artefakte". Deliberately NOT touched in this commit: RUNTIME_DAILY_CARE.md. Its content is a legitimate migration/ops contract doc (not an agent scratch log) and is directly linked from README.md/README_de.md/README.es.md, which another worker is actively editing on this ticket right now -- flagging back for confirmation before untracking a README-linked file out from under them. Verified: full pytest suite 269 passed (down from 270: removed the now file-less test_marketing_log_contract_and_invariants), AND a fresh worktree checkout of this commit (no locally-cached untracked files) also passes -- the concern that a local-disk-only file could hide a CI-only FileNotFoundError was checked directly, not assumed away. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01PTbvD41MCVmnQWaobvHfCk --- CHANGELOG.md | 4 + MARKETING-LOG.txt | 136 ------------------ PRODUCT_BOUNDARIES.md | 8 +- STORE_CONTRACT.md | 53 ------- THIRD_PARTY_LICENSES.md | 2 +- _WARTUNG/msix_staging/AppxManifest.xml | 52 ------- .../msix_staging/icons/Square150x150Logo.png | Bin 18827 -> 0 bytes .../msix_staging/icons/Square310x310Logo.png | Bin 60422 -> 0 bytes .../msix_staging/icons/Square44x44Logo.png | Bin 2405 -> 0 bytes .../msix_staging/icons/Wide310x150Logo.png | Bin 20146 -> 0 bytes llms.txt | 2 +- pyproject.toml | 1 - scripts/verify_product_boundaries.py | 2 +- tests/test_metadata.py | 20 +-- tests/test_store_contract.py | 18 +-- 15 files changed, 20 insertions(+), 278 deletions(-) delete mode 100644 MARKETING-LOG.txt delete mode 100644 STORE_CONTRACT.md delete mode 100644 _WARTUNG/msix_staging/AppxManifest.xml delete mode 100644 _WARTUNG/msix_staging/icons/Square150x150Logo.png delete mode 100644 _WARTUNG/msix_staging/icons/Square310x310Logo.png delete mode 100644 _WARTUNG/msix_staging/icons/Square44x44Logo.png delete mode 100644 _WARTUNG/msix_staging/icons/Wide310x150Logo.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 27231ae..fdb2306 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. ## [Unreleased] - 2026-09-23 (Pfad A: Technical Hygiene, CI Lifecycle & Lock Defense) +### Fixed (Repo Hygiene, T-20260926-510472849) +- Untracked agent-internal files that a public repo should never publish: `MARKETING-LOG.txt` (operational discoverability log), `STORE_CONTRACT.md` (internal Store release/versioning bookkeeping), `_WARTUNG/msix_staging/` (staged MSIX build output). All three stay on disk locally (gitignored), nothing was deleted. +- Rebuilt the parts of the public contract that referenced them: `pyproject.toml` project.url and `llms.txt` no longer list `MARKETING-LOG.txt` (llms.txt gained a `CHANGELOG.md` entry instead, which already carries the same "public project history" role); `PRODUCT_BOUNDARIES.md` and `scripts/verify_product_boundaries.py` now cite `STORE_LISTING.md`/`WINDOWS_STORE_PREP.md` only; `tests/test_store_contract.py` checks the same version-consistency invariant against `store_package.json`/`pyproject.toml`/`SoftwareCenter.py`/`STORE_LISTING.md` instead of the untracked files. + ### Hygiene & Governance - Linter Zero-Tolerance: Resolved 7 ruff lint diagnostics (unused imports and import sorting in `SoftwareCenter.py` and `tests/test_ui_accessibility.py`); verified 100% clean across all rule-sets. - Open-Source Attribution: Created canonical root `NOTICE` attribution file (Lukas Geiger, file-bricks, open-bricks umbrella). diff --git a/MARKETING-LOG.txt b/MARKETING-LOG.txt deleted file mode 100644 index 03770b6..0000000 --- a/MARKETING-LOG.txt +++ /dev/null @@ -1,136 +0,0 @@ -# MARKETING-LOG: SoftwareCenter -# Status: ACTIVE / PFAD B DISCOVERABILITY, VISUAL ARCHITECTURE & METADATA CERTIFIED -# Repository: file-bricks/SoftwareCenter -# Organization: file-bricks (Umbrella: open-bricks) -# Audit Date: 2026-09-14 -# Tested Baseline: 236 passed | 5 skipped | 100% green - -================================================================================ -1. TARGET PERSONAS & MARKET SEGMENTS -================================================================================ - -Persona 1: Desktop Power Users & Organization Curators -- Role: Professionals running dozens of specialized tools, scripts, documents, and workspace folders simultaneously. -- Core Pain: Cluttered Windows Desktop, convoluted Start Menu search latency, and lack of persistent multi-board categorization. -- Value Proposition: Lightweight, lightning-fast PySide6 shortcut board manager with instant category switching, custom icon assignments, notes, and drag-and-drop organization. - -Persona 2: Solo Software Developers, DevOps & System Engineers -- Role: Developers managing project-specific launchers, CLI utilities, portable apps, and virtual environment scripts. -- Core Pain: Mixing development toolchains into personal application menus; complex launcher apps with heavy background daemon overhead. -- Value Proposition: Multi-profile separation (SoftwareCenter vs LaunchBoards), working directory integrity preservation (_startfile_in_dir), headless profile maintenance, and instantaneous launching. - -Persona 3: Multi-PC Workstation Operators & Cloud-Sync Engineers -- Role: Users synchronizing configurations across multiple workstations (e.g. Workstation and Laptop) without exposing machine-specific secrets. -- Core Pain: Hardcoded file paths, absolute paths to non-existent drive letters, or secret leakages in desktop configuration files across different hosts. -- Value Proposition: Schema-validated portable profile export (softwarecenter-profile-v1.json) with strict secret scrubbing, non-destructive import merging, and drive-independent target verification. - -Persona 4: Privacy-Conscious & Zero-Telemetry Advocates -- Role: Security-conscious individuals and enterprise environments requiring zero outbound internet traffic. -- Core Pain: Commercial desktop organizers that phone home, require proprietary cloud accounts, or bundle background telemetry. -- Value Proposition: 100% offline local-first execution (INV-LOCAL-01), zero network egress, unprivileged non-elevation execution, and standard QSettings INI persistence. - -================================================================================ -2. HIGH-INTENT SEARCH TERM MATRIX -================================================================================ - -English High-Intent Search Phrases: -- 'SoftwareCenter Python desktop launcher' -- 'file-bricks SoftwareCenter' -- 'PySide6 desktop shortcut manager' -- 'open source application board manager Windows' -- 'local-first desktop organizer python' -- 'portable shortcut launcher without cloud account' -- 'SoftwareCenter vs LaunchBoards profile switcher' -- 'headless desktop profile organizer JSON' -- 'privacy friendly Windows app launcher' -- 'multi tab application shortcut dock' - -German High-Intent Search Phrases: -- 'SoftwareCenter Desktop Schnellstarter Python' -- 'file-bricks SoftwareCenter Anwendungsverwaltung' -- 'Lokaler Programmstarter mit Reitern und Kategorien' -- 'Desktop Verknüpfungs-Manager ohne Cloud-Zwang' -- 'Open Source App Launcher Deutsch Windows' -- 'SoftwareCenter portable Profile exportieren' -- 'Python PySide6 Desktop Verknüpfungen organisieren' -- 'Schnellstartleiste mit System-Tray Integration' -- 'Lokale Shortcut Verwaltung ohne Telemetrie' -- 'LaunchBoards Profil Umschaltung Windows' - -================================================================================ -3. COMPETITIVE COMPARISON MATRIX -================================================================================ - -| Capability / Feature | SoftwareCenter | Windows Start Menu | Stardock Fences | SyMenu | Launchy / Flow | -|-------------------------------------|:----------------:|:------------------:|:---------------:|:---------------:|:----------------:| -| Dedicated Category Boards / Tabs | YES (Dynamic) | NO (Flat list) | YES (On Desktop)| YES (Hierarchical)| NO (Search box)| -| Free & Open Source (MIT) | YES (100%) | BUNDLED (Closed) | NO (Commercial) | YES (Freeware) | YES (Open Source)| -| Multi-Profile Architecture | YES (Dual Identity)| NO | NO | PARTIAL | NO | -| Portable Redacted Profile Export | YES (v1 JSON) | NO | NO | PARTIAL | NO | -| Zero Telemetry / 100% Local-First | YES | NO (Bing / Cloud) | NO | YES | PARTIAL | -| Working Directory Preservation | YES (_startfile) | PARTIAL | PARTIAL | YES | PARTIAL | -| Headless Batch Catalog Management | YES (Scriptable) | NO | NO | NO | NO | -| Cross-Platform Smoke Certifications | YES (Linux/macOS)| NO (Win only) | NO (Win only) | NO (Win only) | PARTIAL | -| System Tray Quick Navigation | YES (Custom Menu)| NO | NO | YES | NO (Hotkey only) | -| Non-Elevated Invoker Security | YES (Strict) | SYSTEM/User | User/Admin | User | User | - -================================================================================ -4. GOVERNANCE & RUNTIME INVARIANTS -================================================================================ - -- INV-LOCAL-01: 100% Local-First & Zero-Egress — Execution, icon caching, and profile parsing execute strictly offline without external network calls. -- INV-SEC-02: Unprivileged Execution (Non-Elevation) — All launcher operations run under RunAsInvoker unprivileged user context. -- INV-PROFILE-03: Portable Profile Integrity — Profile export format (softwarecenter-profile-v1.json) strictly scrubs machine-local secrets and validates tab structures. -- INV-LAUNCH-04: Working Directory Correctness — Target files launched via _startfile_in_dir strictly set target parent directory as CWD, preventing relative path breakages. -- INV-DUAL-05: Multi-Identity Profile Switching — Complete visual and behavioral separation between SoftwareCenter and LaunchBoards profiles. -- INV-A11Y-06: Desktop Accessibility & Keyboard Navigation — Accessible names and keyboard tab traversal enforced across tab bars and item grids. -- INV-HYGIENE-07: Fail-Closed Conflict Guard — Multi-host synchronization conflict artifacts (*-WORKSTATION*, *-ASUS-GEI*, *.sync-conflict-*) are strictly excluded and ignored. -- INV-SLA-08: Vulnerability & Maintenance SLA — PEP 621 compliance, 48h security response commitment, and cross-platform continuous integration. -- INV-PARITY-09: Tier-2 Multi-Language & Documentation Parity — 6-language translation catalog parity (de, en, es, zh, ja, ru) with deterministic 4-stage fallback and tri-lingual docs. -- INV-ZEROCOPY-10: Permissive Licensing & Zero-Copyleft Containment — MIT application license, dynamically linked LGPL-3.0 PySide6, and standalone PyInstaller exception. - -================================================================================ -5. STRATEGIC DISCOVERABILITY ROADMAP -================================================================================ - -- Umbrella Integration: Linked across open-bricks master index and file-bricks portfolio (ProFiler, ExplorerPro, CloudLockFixer, WinStorePackager). -- LLM Machine Readability: Standard llms.txt entry certified with technical capabilities, boundary specifications, and profile JSON exchange contract. -- Microsoft Store Live Identity: Packaged for distribution via Microsoft Partner Center under verified publisher credentials. - -================================================================================ -6. AUDIT & HYGIENE HISTORY -================================================================================ - -- 2026-09-11 [Pfad A Technical Hygiene]: - * Multi-rule ruff lint configuration (E, F, W, I, UP, B, SIM, C4, RUF) certified 100% clean. - * Code hygiene: removed unused variables, modernized imports, and resolved implicit Optionals. - * GitHub Actions CI hardened with concurrency cancellation and 15-minute job timeouts. - * .gitignore hardened with multi-host conflict tokens and lock patterns. - * Created MARKETING-LOG.txt and synchronized metadata contracts across project. - -================================================================================ -7. RECENT MARKETING, BRANDING & ASSET UPDATES (2026-09-14) -================================================================================ - -- Pfad B Discoverability, Visual Architecture & Metadata Parity: - * Tri-lingual README architecture (README.md, README_de.md, README.es.md) updated with full 24-point Quick Navigation parity across English, German, and Spanish. - * Target Personas (Desktop Power Users, Solo Software Developers & DevOps, Multi-PC Workstation Operators, Privacy-Conscious Advocates) directly embedded into all three documentation hubs. - * 10-Dimension Comparative Matrix vs. Windows Start Menu, Stardock Fences, SyMenu, and Launchy / Flow Launcher embedded across all three READMEs. - * Created comprehensive THIRD_PARTY_LICENSES.md documenting SPDX license identifiers, dynamic linking compliance for PySide6 (LGPL-3.0), PyInstaller packaging exception, zero-egress privacy, and 10 runtime invariants (INV-LOCAL-01 to INV-ZEROCOPY-10). - * Synchronized badges: Pytest test counts, platforms, zero-egress, local-first privacy, and verified audit stencils. - * Updated llms.txt with Last-checked 2026-09-14, test count synchronisation, and cross-references to THIRD_PARTY_LICENSES.md. - * Updated pyproject.toml PEP 621 project URLs with 'Third-Party Licenses'. - * Expanded automated contract test suite in tests/test_metadata.py with assertions certifying personas, comparison matrix, license governance, and tri-lingual navigation anchor parity. - -================================================================================ -8. PFAD A TECHNICAL HYGIENE, CI WORKFLOWS & LOCK DEFENSE (2026-09-23) -================================================================================ - -- Pfad A Repository Hygiene & Governance: - * Resolved 7 ruff lint diagnostics (unused imports and import sorting in SoftwareCenter.py and tests/test_ui_accessibility.py); achieved 100% clean ruff check. - * Created canonical open-source NOTICE attribution file (Lukas Geiger, file-bricks, open-bricks umbrella). - * Hardened GitHub Actions workflows stale.yml (concurrency group, 10 min timeout) and welcome.yml (concurrency group, 5 min timeout). - * Hardened .gitignore with multi-host conflict tokens (*conflicted copy*, * (Kopie)*, *-ASUS*, *-LAPTOP*, *-Mac Studio*, *-MacBook*, *.rej, *.orig) and fail-closed lock defense (LOCK*.txt, LOCK.user.*, LOCK.until.*, LOCK.condition.*, .automation-lock, uv.lock, !package-lock.json). - * Hardened pyproject.toml with PEP 621 license-files, Notice URL, and pytest norecursedirs while strictly preserving version 1.2.0 per T-20260920-167562623. - * Synchronized tri-lingual READMEs (README.md, README_de.md, README.es.md), llms.txt, and THIRD_PARTY_LICENSES.md with NOTICE attribution and updated test suite count (260+ passed). - * Expanded tests/test_metadata.py with automated contracts certifying NOTICE attribution, CI lifecycle timeouts, and multi-host gitignore defense. diff --git a/PRODUCT_BOUNDARIES.md b/PRODUCT_BOUNDARIES.md index 5aa8c52..3e00157 100644 --- a/PRODUCT_BOUNDARIES.md +++ b/PRODUCT_BOUNDARIES.md @@ -17,9 +17,11 @@ identity, or release artifact. | Store metadata | `store_package.json` | `store_package_launchboards.json` | | Local release artifact | versioned SoftwareCenter path | `releases/v1.0.0/LaunchBoards-1.0.0-win64.exe` | -`STORE_CONTRACT.md`, `STORE_LISTING.md`, and `WINDOWS_STORE_PREP.md` remain the -canonical SoftwareCenter Store contract and contain no LaunchBoards identity or -artifact. LaunchBoards metadata is intentionally separate and does not alter +`STORE_LISTING.md` and `WINDOWS_STORE_PREP.md` remain the canonical, public +SoftwareCenter Store contract and contain no LaunchBoards identity or +artifact (the former `STORE_CONTRACT.md` covered the same invariant but was +agent-internal release bookkeeping, untracked per T-20260926-510472849). +LaunchBoards metadata is intentionally separate and does not alter SoftwareCenter release hashes. ## Reproducible verification diff --git a/STORE_CONTRACT.md b/STORE_CONTRACT.md deleted file mode 100644 index 0cb0d5b..0000000 --- a/STORE_CONTRACT.md +++ /dev/null @@ -1,53 +0,0 @@ -# SoftwareCenter Store-Vertrag - -Stand: 2026-08-25 - -## Release- und Artefaktstatus - -Es gibt am 2026-08-25 **keinen gültigen Store-Einreichkandidaten**. Die -Statusquellen werden deshalb ausdrücklich getrennt: - -| Quelle | Readback | Bedeutung | -|---|---|---| -| `pyproject.toml` | `1.2.0` | aktuelle Source-/Build-Linie | -| `SoftwareCenter.py` | `__version__ = 1.2.0` | Runtime-/Exportstand der Quelle | -| `store_package.json` | `1.2.0.0` | kanonischer Store-Metadatenstand | -| `releases/v1.2.0/SoftwareCenter-1.2.0-win64.exe` | SHA-256 `1AD7F9FE5AA89A004402E4F6833A67FBF85810C20B8444B3C634474F0B59C6C7` | lokal, unsigniert, nicht WACK-geprüft | - -Die Versionen sind einheitlich harmonisiert (`1.2.0` / `1.2.0.0`). Privacy-URL, -Support-URL, Publisher, Identity, `runFullTrust` und Kategorie sind in den -Metadaten konsistent. Vor einem Store-Release muss ein frisch signiertes MSIX mit -echtem WACK-Report erstellt werden; aktuell wird kein Signing oder Upload behauptet. - -`store_package.json` ist die kanonische, versionierte Metadatenquelle. Die -lokale Packaging-Einstellung und das Staging-Manifest müssen sie abbilden, nicht -eigenständig abweichen. - -| Feld | Kanonischer Wert | -|---|---| -| App / Identity | `SoftwareCenter` / `Geiger.SoftwareCenter` | -| Publisher | `CN=52596601-BAB4-4F3F-B182-E8F3F273B202` / `Geiger` | -| Version / EXE | `1.2.0.0` / `SoftwareCenter.exe` | -| Capability | `runFullTrust` | -| Ressourcen | `en-us`, `de-de` | -| Kategorie | `Utilities & Tools` | -| Privacy / Support | GitHub `PRIVACY_POLICY.md` / Issues | - -`releases/windowsstore/store_settings.json` ist eine lokale Build-Einstellung -und verwendet für `capabilities` denselben Wert `runFullTrust`. Das -`AppxManifest.xml` führt ihn als `rescap:Capability`. Dieser Abgleich bedeutet -keine Signierung, keinen MSIX-Build und keine Store-Einreichung. - -## Wiederholbarer Readback - -```powershell -python -m json.tool store_package.json -[xml](Get-Content -Raw _WARTUNG/msix_staging/AppxManifest.xml) -``` - -`releases/windowsstore/store_settings.json` ist eine lokale, nicht versionierte -Build-Einstellung und liegt nicht in jedem Arbeitsverzeichnis vor; das -versionierte Staging-Manifest steht unter `_WARTUNG/msix_staging/`. - -Danach Identity, Publisher, Version, `Application/@Executable`, die zwei -Ressourcen und `rescap:Capability/@Name` gegen die Tabelle vergleichen. diff --git a/THIRD_PARTY_LICENSES.md b/THIRD_PARTY_LICENSES.md index ea04aea..a4d81a7 100644 --- a/THIRD_PARTY_LICENSES.md +++ b/THIRD_PARTY_LICENSES.md @@ -21,7 +21,7 @@ SoftwareCenter strictly guarantees: 3. **Dynamic Linking & Zero-Copyleft Compliance (LGPL-3.0):** PySide6 (Qt for Python) is dynamically linked in compliance with LGPLv3 Section 4. The application source code is licensed under permissive MIT and is not affected by copyleft obligations. Users are free to replace Qt runtime shared libraries. 4. **Standalone PyInstaller Exemption:** Executable packaging via PyInstaller uses the standard PyInstaller exception to GPL-2.0-or-later, permitting independent binary distribution without licensing contagion. 5. **Non-Destructive Operations (INV-LAUNCH-04):** Managing or removing shortcuts never touches, modifies, or deletes the underlying executable or filesystem files. -6. **Machine-Readable Metadata & Internationalization Parity:** Complete metadata alignment across `llms.txt`, `MARKETING-LOG.txt`, and Tier-2 6-language translations (`de`, `en`, `es`, `zh`, `ja`, `ru`). +6. **Machine-Readable Metadata & Internationalization Parity:** Complete metadata alignment across `llms.txt`, `CHANGELOG.md`, and Tier-2 6-language translations (`de`, `en`, `es`, `zh`, `ja`, `ru`). --- diff --git a/_WARTUNG/msix_staging/AppxManifest.xml b/_WARTUNG/msix_staging/AppxManifest.xml deleted file mode 100644 index bae2f56..0000000 --- a/_WARTUNG/msix_staging/AppxManifest.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - SoftwareCenter - Geiger - icons\Square150x150Logo.png - Desktop-App-Organizer und Launcher. Kategorisierung, Schnellstart, Übersicht installierter Software. - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/_WARTUNG/msix_staging/icons/Square150x150Logo.png b/_WARTUNG/msix_staging/icons/Square150x150Logo.png deleted file mode 100644 index 517db3e57337faf34a2411c3b5bbc9d9c0374693..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18827 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%0A+?@3G3@No<}Opm;PS3AjR_#JUrYA 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 diff --git a/_WARTUNG/msix_staging/icons/Square44x44Logo.png b/_WARTUNG/msix_staging/icons/Square44x44Logo.png deleted file mode 100644 index b049759cb7e2e50250d934d7f273435fe4d4d867..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2405 zcmV-r37YnaP)e;i_{N^Mfy(MN=k$_q9RS1nd<8D}3wMZ*c#! z`&rPG!dhXHtSK`TBSNv{u~zuv1*dTC%2rh2wfFjX@P$rPA!!YMCN+pe1gJvK&;%E) zUBH&x&nKBMpv(Y01F-W-BCtI6Y8SU`ew~HQX-dx5^;!`qIVF>{JaESb#tJ2#+HnYg z%g{~7{p6zSNh&aO59GOP(;DvFcsgOpVW%C$8Gy@QHvMorZ|oZ+n-1{P zs1X!{2O>W_I$Y%5ThFH<37`MT%cK()1qvm{Bj5f6gA<-xH@`-EQ<9QbM8RRuX--mJ zd`mXLpTB=0E!pG@*O(HAy(-oiI(x?Wd-n(pNm~XT3y1`#CL0vblY4UM2Q;arxq@uVcIX-hPI zr?sKX>S~_45FsT6EDlSFAV|RAUi6u}ut5qmM3!F+>d^x)M$c#N!lrT%BoIni94RwV z-;C7fY;J&KNyh9%x1E4@(6$Q6wxhl8V6NQ)>Ty3?jVxM^jvj%b17Is#-yp^M296Q> zY63o93eq5js*#a)d*v^Xr5}gF2sF%#l;8F?G_;}zUcxBM#)H_0#*!+4WoOW0GmXQzKh#(8Sa5A(V+ui6X>2NVSF?i8)qqLnTWvXR7iRp zw&v&(f}m5k(>rAKrO0WQz(_alp^Z=&1XW!34uV^EAuBFLj=YH;+6mYga1oIj)RfcM z69YKf)s!hS4EPe}+ATb={Og^`*GaE*Mmt+LTNBze7(yI z8^?0VIhII*LE}Rg8!`sn`z+e|668+8-nbQ6eKoRrBlgCvkZp(k+u;2d!PrT^O;f}$ zGpU-Mo&85~xWaGfAWl$VL8W&-2cr+S6)CJ)vEpai zP^RP<(|vi)VacQ$zyC6*LosmVEigeeMinoD!;+Se1dfm( zb`7b5s#P{;0r*%9D@5CAMrhCw;=C9mF^eVW{6nN9nTaQbRi*``NJ`pfDE2*!oHGO~hgx`uSZP_AH<2vqfV0SYBgA@l@R$RuqHMWS;MjzeIvri`?F zCMpY<)uEdNtjfmom(Y|+@W{*mWF%i=`JzT{{^$aB?Cs;7t`WuyQ8k?i3?fi;k&6UI z$QK=FcQkSRCztZvTRm)htA|t~3T;KFtY6+nXU`Y|W5p-}iI7Q^6C{l>%mT2)i?v3$ z@XU5zc)OPktJ+w1Y73ckKu2o>=d7I1oBIdp9}N+KiK1hEQ;I_ad6u?k8P12K0>jDk zGd%hFA&MpCo1Z;{fw3a3*(9M?)-7vc*FOdbtk5@Hq+@=D`=8rK&(K5-ZjS*tn@(VD zG~uzo9^{I%7t`99;FUdnoONmoPwhO!!j?47dA{stPte_;CmC2$30onr z9^mqir?h9trURT;I@&V)ZT}z#`}3?_+RTH`chWyvq!4;W^C6r6v=`@r+vV1xV32SiPBNFu?oR4leVGR2X}w&3^J);Zq2}Ih1M9l`^I_x z?Ot|w4bwML#5qsV`N)qaM^4QGWSSnC_5?@-hPGUiRf}_c>Wp?)F3v@jN*%Dr1q_wu z;D19(rOH)aPmT*1A{VLdaZNU}Pk@xwicr&Mr^~Doc#*iX{z1qb)&Af8i}WGj4_f{O X<;W9}S=Hq400000NkvXXu0mjf#kqcI diff --git a/_WARTUNG/msix_staging/icons/Wide310x150Logo.png b/_WARTUNG/msix_staging/icons/Wide310x150Logo.png deleted file mode 100644 index 2a0b3f467e03b12e25913d4cb14ad569a3476564..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20146 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 W95@E4qqa%_0000 dict[str, str]: build_script = (ROOT / "build_exe_launchboards.bat").read_text(encoding="utf-8") software_store_docs = "\n".join( (ROOT / name).read_text(encoding="utf-8") - for name in ("STORE_CONTRACT.md", "STORE_LISTING.md", "WINDOWS_STORE_PREP.md") + for name in ("STORE_LISTING.md", "WINDOWS_STORE_PREP.md") ) assert sc.PROFILE_SOFTWARECENTER.name == "SoftwareCenter" diff --git a/tests/test_metadata.py b/tests/test_metadata.py index 39723f6..02d8556 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -202,7 +202,6 @@ def test_pyproject_pep621_metadata_and_urls(): assert urls["Parent Organization"] == "https://github.com/file-bricks" assert urls["Umbrella Ecosystem"] == "https://github.com/open-bricks" assert urls["LLM Ready"] == "https://github.com/file-bricks/SoftwareCenter/blob/master/llms.txt" - assert urls["Marketing Log"] == "https://github.com/file-bricks/SoftwareCenter/blob/master/MARKETING-LOG.txt" assert urls["Third-Party Licenses"] == "https://github.com/file-bricks/SoftwareCenter/blob/master/THIRD_PARTY_LICENSES.md" classifiers = project["classifiers"] @@ -248,7 +247,7 @@ def test_llms_txt_structure_and_timestamp(): assert "https://github.com/file-bricks/SoftwareCenter" in content assert "THIRD_PARTY_LICENSES.md" in content assert "Disambiguation" in content - assert "MARKETING-LOG.txt" in content + assert "CHANGELOG.md" in content def test_changelog_recent_entry(): @@ -287,23 +286,6 @@ def test_gitignore_multi_host_and_lock_hardening(): assert ".coverage.*" in content -def test_marketing_log_contract_and_invariants(): - mkt_file = ROOT / "MARKETING-LOG.txt" - assert mkt_file.exists(), "MARKETING-LOG.txt must exist" - content = mkt_file.read_text(encoding="utf-8") - - assert "file-bricks/SoftwareCenter" in content - assert "2026-09-23" in content - assert "2026-09-14" in content - assert "INV-LOCAL-01" in content - assert "INV-SEC-02" in content - assert "INV-PROFILE-03" in content - assert "INV-LAUNCH-04" in content - assert "INV-DUAL-05" in content - assert "INV-PARITY-09" in content - assert "INV-ZEROCOPY-10" in content - - def test_target_personas_present_in_all_readmes(): text_en = (ROOT / "README.md").read_text(encoding="utf-8") text_de = (ROOT / "README_de.md").read_text(encoding="utf-8") diff --git a/tests/test_store_contract.py b/tests/test_store_contract.py index dc7cd4d..1d6db3e 100644 --- a/tests/test_store_contract.py +++ b/tests/test_store_contract.py @@ -1,4 +1,10 @@ -"""Regression contract for versioned SoftwareCenter Store metadata.""" +"""Regression contract for versioned SoftwareCenter Store metadata. + +STORE_CONTRACT.md and _WARTUNG/msix_staging/ (staged MSIX build output) were +untracked as agent-internal / build-artifact material (T-20260926-510472849, +GITHUB-POLICY.md SS3). This contract now checks only files that stay public: +store_package.json, pyproject.toml, SoftwareCenter.py, and STORE_LISTING.md. +""" import json import re @@ -24,7 +30,6 @@ def _project_version() -> str: def test_store_package_is_the_documented_canonical_contract(): package = json.loads((ROOT / "store_package.json").read_text(encoding="utf-8")) listing = (ROOT / "STORE_LISTING.md").read_text(encoding="utf-8") - contract = (ROOT / "STORE_CONTRACT.md").read_text(encoding="utf-8") assert package["app_name"] == "SoftwareCenter" assert package["publisher"] == "CN=52596601-BAB4-4F3F-B182-E8F3F273B202" @@ -38,8 +43,6 @@ def test_store_package_is_the_documented_canonical_contract(): assert package["support_url"].endswith("/issues") assert "### Category\nUtilities & Tools" in listing - assert "`store_package.json` ist die kanonische" in contract - assert "`runFullTrust`" in contract def test_version_is_identical_in_every_store_relevant_source(): @@ -54,12 +57,5 @@ def test_version_is_identical_in_every_store_relevant_source(): assert runtime == project, f"SoftwareCenter.py {runtime} != pyproject.toml {project}" assert package["version"] == four_part - manifest = (ROOT / "_WARTUNG" / "msix_staging" / "AppxManifest.xml").read_text( - encoding="utf-8-sig" - ) - assert f'Version="{four_part}"' in manifest - - contract = (ROOT / "STORE_CONTRACT.md").read_text(encoding="utf-8") listing = (ROOT / "STORE_LISTING.md").read_text(encoding="utf-8") - assert f"`{four_part}`" in contract assert f"| Version | {four_part} |" in listing From c08d009996a45c000146343537b7352ad10deeb4 Mon Sep 17 00:00:00 2001 From: Lukas Geiger Date: Sat, 26 Sep 2026 14:30:25 +0200 Subject: [PATCH 3/3] chore(hygiene): untrack STORE_CONTRACT.md/_WARTUNG staging; keep MARKETING-LOG.txt Corrects the previous commit (a5e666c): team-lead review found MARKETING-LOG.txt is a DELIBERATE public artifact here (pyproject.toml project.urls."Marketing Log", tests/test_metadata.py asserting its presence) -- not an accidental agent leak, matching the same pattern found in usmc and zombie-killer-tray. Restored it fully (file tracking, pyproject.toml, llms.txt, THIRD_PARTY_LICENSES.md wording, the dropped test assertions and test_marketing_log_contract_and_invariants). Keeps the other two untracks from a5e666c, unaffected by this reversal: - STORE_CONTRACT.md: internal Store release/versioning bookkeeping. PRODUCT_BOUNDARIES.md and scripts/verify_product_boundaries.py now cite STORE_LISTING.md/WINDOWS_STORE_PREP.md only; tests/test_store_contract.py checks the same version-consistency invariant against store_package.json/pyproject.toml/SoftwareCenter.py/ STORE_LISTING.md instead. - _WARTUNG/msix_staging/: staged MSIX build output. Still deliberately NOT touched: RUNTIME_DAILY_CARE.md (flagged back to team-lead, awaiting confirmation -- content is a legitimate migration/ops contract doc, README-linked, github-companion is actively editing README on a separate ticket right now). Verified: full pytest suite 270 passed, 5 skipped (270 = 269 from the prior commit + the restored marketing-log test). Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01PTbvD41MCVmnQWaobvHfCk --- CHANGELOG.md | 4 +- MARKETING-LOG.txt | 136 ++++++++++++++++++++++++++++++++++++++++ THIRD_PARTY_LICENSES.md | 2 +- llms.txt | 2 +- pyproject.toml | 1 + tests/test_metadata.py | 20 +++++- 6 files changed, 160 insertions(+), 5 deletions(-) create mode 100644 MARKETING-LOG.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index fdb2306..492e2b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,8 +5,8 @@ All notable changes to this project will be documented in this file. ## [Unreleased] - 2026-09-23 (Pfad A: Technical Hygiene, CI Lifecycle & Lock Defense) ### Fixed (Repo Hygiene, T-20260926-510472849) -- Untracked agent-internal files that a public repo should never publish: `MARKETING-LOG.txt` (operational discoverability log), `STORE_CONTRACT.md` (internal Store release/versioning bookkeeping), `_WARTUNG/msix_staging/` (staged MSIX build output). All three stay on disk locally (gitignored), nothing was deleted. -- Rebuilt the parts of the public contract that referenced them: `pyproject.toml` project.url and `llms.txt` no longer list `MARKETING-LOG.txt` (llms.txt gained a `CHANGELOG.md` entry instead, which already carries the same "public project history" role); `PRODUCT_BOUNDARIES.md` and `scripts/verify_product_boundaries.py` now cite `STORE_LISTING.md`/`WINDOWS_STORE_PREP.md` only; `tests/test_store_contract.py` checks the same version-consistency invariant against `store_package.json`/`pyproject.toml`/`SoftwareCenter.py`/`STORE_LISTING.md` instead of the untracked files. +- Untracked two agent-internal files that a public repo should not publish: `STORE_CONTRACT.md` (internal Store release/versioning bookkeeping) and `_WARTUNG/msix_staging/` (staged MSIX build output). Both stay on disk locally (gitignored), nothing was deleted. `MARKETING-LOG.txt` was considered but is a deliberate public artifact here (`pyproject.toml` project.url, a dedicated test) and stays tracked. +- Rebuilt the parts of the public contract that referenced them: `PRODUCT_BOUNDARIES.md` and `scripts/verify_product_boundaries.py` now cite `STORE_LISTING.md`/`WINDOWS_STORE_PREP.md` only; `tests/test_store_contract.py` checks the same version-consistency invariant against `store_package.json`/`pyproject.toml`/`SoftwareCenter.py`/`STORE_LISTING.md` instead of the untracked files. ### Hygiene & Governance - Linter Zero-Tolerance: Resolved 7 ruff lint diagnostics (unused imports and import sorting in `SoftwareCenter.py` and `tests/test_ui_accessibility.py`); verified 100% clean across all rule-sets. diff --git a/MARKETING-LOG.txt b/MARKETING-LOG.txt new file mode 100644 index 0000000..03770b6 --- /dev/null +++ b/MARKETING-LOG.txt @@ -0,0 +1,136 @@ +# MARKETING-LOG: SoftwareCenter +# Status: ACTIVE / PFAD B DISCOVERABILITY, VISUAL ARCHITECTURE & METADATA CERTIFIED +# Repository: file-bricks/SoftwareCenter +# Organization: file-bricks (Umbrella: open-bricks) +# Audit Date: 2026-09-14 +# Tested Baseline: 236 passed | 5 skipped | 100% green + +================================================================================ +1. TARGET PERSONAS & MARKET SEGMENTS +================================================================================ + +Persona 1: Desktop Power Users & Organization Curators +- Role: Professionals running dozens of specialized tools, scripts, documents, and workspace folders simultaneously. +- Core Pain: Cluttered Windows Desktop, convoluted Start Menu search latency, and lack of persistent multi-board categorization. +- Value Proposition: Lightweight, lightning-fast PySide6 shortcut board manager with instant category switching, custom icon assignments, notes, and drag-and-drop organization. + +Persona 2: Solo Software Developers, DevOps & System Engineers +- Role: Developers managing project-specific launchers, CLI utilities, portable apps, and virtual environment scripts. +- Core Pain: Mixing development toolchains into personal application menus; complex launcher apps with heavy background daemon overhead. +- Value Proposition: Multi-profile separation (SoftwareCenter vs LaunchBoards), working directory integrity preservation (_startfile_in_dir), headless profile maintenance, and instantaneous launching. + +Persona 3: Multi-PC Workstation Operators & Cloud-Sync Engineers +- Role: Users synchronizing configurations across multiple workstations (e.g. Workstation and Laptop) without exposing machine-specific secrets. +- Core Pain: Hardcoded file paths, absolute paths to non-existent drive letters, or secret leakages in desktop configuration files across different hosts. +- Value Proposition: Schema-validated portable profile export (softwarecenter-profile-v1.json) with strict secret scrubbing, non-destructive import merging, and drive-independent target verification. + +Persona 4: Privacy-Conscious & Zero-Telemetry Advocates +- Role: Security-conscious individuals and enterprise environments requiring zero outbound internet traffic. +- Core Pain: Commercial desktop organizers that phone home, require proprietary cloud accounts, or bundle background telemetry. +- Value Proposition: 100% offline local-first execution (INV-LOCAL-01), zero network egress, unprivileged non-elevation execution, and standard QSettings INI persistence. + +================================================================================ +2. HIGH-INTENT SEARCH TERM MATRIX +================================================================================ + +English High-Intent Search Phrases: +- 'SoftwareCenter Python desktop launcher' +- 'file-bricks SoftwareCenter' +- 'PySide6 desktop shortcut manager' +- 'open source application board manager Windows' +- 'local-first desktop organizer python' +- 'portable shortcut launcher without cloud account' +- 'SoftwareCenter vs LaunchBoards profile switcher' +- 'headless desktop profile organizer JSON' +- 'privacy friendly Windows app launcher' +- 'multi tab application shortcut dock' + +German High-Intent Search Phrases: +- 'SoftwareCenter Desktop Schnellstarter Python' +- 'file-bricks SoftwareCenter Anwendungsverwaltung' +- 'Lokaler Programmstarter mit Reitern und Kategorien' +- 'Desktop Verknüpfungs-Manager ohne Cloud-Zwang' +- 'Open Source App Launcher Deutsch Windows' +- 'SoftwareCenter portable Profile exportieren' +- 'Python PySide6 Desktop Verknüpfungen organisieren' +- 'Schnellstartleiste mit System-Tray Integration' +- 'Lokale Shortcut Verwaltung ohne Telemetrie' +- 'LaunchBoards Profil Umschaltung Windows' + +================================================================================ +3. COMPETITIVE COMPARISON MATRIX +================================================================================ + +| Capability / Feature | SoftwareCenter | Windows Start Menu | Stardock Fences | SyMenu | Launchy / Flow | +|-------------------------------------|:----------------:|:------------------:|:---------------:|:---------------:|:----------------:| +| Dedicated Category Boards / Tabs | YES (Dynamic) | NO (Flat list) | YES (On Desktop)| YES (Hierarchical)| NO (Search box)| +| Free & Open Source (MIT) | YES (100%) | BUNDLED (Closed) | NO (Commercial) | YES (Freeware) | YES (Open Source)| +| Multi-Profile Architecture | YES (Dual Identity)| NO | NO | PARTIAL | NO | +| Portable Redacted Profile Export | YES (v1 JSON) | NO | NO | PARTIAL | NO | +| Zero Telemetry / 100% Local-First | YES | NO (Bing / Cloud) | NO | YES | PARTIAL | +| Working Directory Preservation | YES (_startfile) | PARTIAL | PARTIAL | YES | PARTIAL | +| Headless Batch Catalog Management | YES (Scriptable) | NO | NO | NO | NO | +| Cross-Platform Smoke Certifications | YES (Linux/macOS)| NO (Win only) | NO (Win only) | NO (Win only) | PARTIAL | +| System Tray Quick Navigation | YES (Custom Menu)| NO | NO | YES | NO (Hotkey only) | +| Non-Elevated Invoker Security | YES (Strict) | SYSTEM/User | User/Admin | User | User | + +================================================================================ +4. GOVERNANCE & RUNTIME INVARIANTS +================================================================================ + +- INV-LOCAL-01: 100% Local-First & Zero-Egress — Execution, icon caching, and profile parsing execute strictly offline without external network calls. +- INV-SEC-02: Unprivileged Execution (Non-Elevation) — All launcher operations run under RunAsInvoker unprivileged user context. +- INV-PROFILE-03: Portable Profile Integrity — Profile export format (softwarecenter-profile-v1.json) strictly scrubs machine-local secrets and validates tab structures. +- INV-LAUNCH-04: Working Directory Correctness — Target files launched via _startfile_in_dir strictly set target parent directory as CWD, preventing relative path breakages. +- INV-DUAL-05: Multi-Identity Profile Switching — Complete visual and behavioral separation between SoftwareCenter and LaunchBoards profiles. +- INV-A11Y-06: Desktop Accessibility & Keyboard Navigation — Accessible names and keyboard tab traversal enforced across tab bars and item grids. +- INV-HYGIENE-07: Fail-Closed Conflict Guard — Multi-host synchronization conflict artifacts (*-WORKSTATION*, *-ASUS-GEI*, *.sync-conflict-*) are strictly excluded and ignored. +- INV-SLA-08: Vulnerability & Maintenance SLA — PEP 621 compliance, 48h security response commitment, and cross-platform continuous integration. +- INV-PARITY-09: Tier-2 Multi-Language & Documentation Parity — 6-language translation catalog parity (de, en, es, zh, ja, ru) with deterministic 4-stage fallback and tri-lingual docs. +- INV-ZEROCOPY-10: Permissive Licensing & Zero-Copyleft Containment — MIT application license, dynamically linked LGPL-3.0 PySide6, and standalone PyInstaller exception. + +================================================================================ +5. STRATEGIC DISCOVERABILITY ROADMAP +================================================================================ + +- Umbrella Integration: Linked across open-bricks master index and file-bricks portfolio (ProFiler, ExplorerPro, CloudLockFixer, WinStorePackager). +- LLM Machine Readability: Standard llms.txt entry certified with technical capabilities, boundary specifications, and profile JSON exchange contract. +- Microsoft Store Live Identity: Packaged for distribution via Microsoft Partner Center under verified publisher credentials. + +================================================================================ +6. AUDIT & HYGIENE HISTORY +================================================================================ + +- 2026-09-11 [Pfad A Technical Hygiene]: + * Multi-rule ruff lint configuration (E, F, W, I, UP, B, SIM, C4, RUF) certified 100% clean. + * Code hygiene: removed unused variables, modernized imports, and resolved implicit Optionals. + * GitHub Actions CI hardened with concurrency cancellation and 15-minute job timeouts. + * .gitignore hardened with multi-host conflict tokens and lock patterns. + * Created MARKETING-LOG.txt and synchronized metadata contracts across project. + +================================================================================ +7. RECENT MARKETING, BRANDING & ASSET UPDATES (2026-09-14) +================================================================================ + +- Pfad B Discoverability, Visual Architecture & Metadata Parity: + * Tri-lingual README architecture (README.md, README_de.md, README.es.md) updated with full 24-point Quick Navigation parity across English, German, and Spanish. + * Target Personas (Desktop Power Users, Solo Software Developers & DevOps, Multi-PC Workstation Operators, Privacy-Conscious Advocates) directly embedded into all three documentation hubs. + * 10-Dimension Comparative Matrix vs. Windows Start Menu, Stardock Fences, SyMenu, and Launchy / Flow Launcher embedded across all three READMEs. + * Created comprehensive THIRD_PARTY_LICENSES.md documenting SPDX license identifiers, dynamic linking compliance for PySide6 (LGPL-3.0), PyInstaller packaging exception, zero-egress privacy, and 10 runtime invariants (INV-LOCAL-01 to INV-ZEROCOPY-10). + * Synchronized badges: Pytest test counts, platforms, zero-egress, local-first privacy, and verified audit stencils. + * Updated llms.txt with Last-checked 2026-09-14, test count synchronisation, and cross-references to THIRD_PARTY_LICENSES.md. + * Updated pyproject.toml PEP 621 project URLs with 'Third-Party Licenses'. + * Expanded automated contract test suite in tests/test_metadata.py with assertions certifying personas, comparison matrix, license governance, and tri-lingual navigation anchor parity. + +================================================================================ +8. PFAD A TECHNICAL HYGIENE, CI WORKFLOWS & LOCK DEFENSE (2026-09-23) +================================================================================ + +- Pfad A Repository Hygiene & Governance: + * Resolved 7 ruff lint diagnostics (unused imports and import sorting in SoftwareCenter.py and tests/test_ui_accessibility.py); achieved 100% clean ruff check. + * Created canonical open-source NOTICE attribution file (Lukas Geiger, file-bricks, open-bricks umbrella). + * Hardened GitHub Actions workflows stale.yml (concurrency group, 10 min timeout) and welcome.yml (concurrency group, 5 min timeout). + * Hardened .gitignore with multi-host conflict tokens (*conflicted copy*, * (Kopie)*, *-ASUS*, *-LAPTOP*, *-Mac Studio*, *-MacBook*, *.rej, *.orig) and fail-closed lock defense (LOCK*.txt, LOCK.user.*, LOCK.until.*, LOCK.condition.*, .automation-lock, uv.lock, !package-lock.json). + * Hardened pyproject.toml with PEP 621 license-files, Notice URL, and pytest norecursedirs while strictly preserving version 1.2.0 per T-20260920-167562623. + * Synchronized tri-lingual READMEs (README.md, README_de.md, README.es.md), llms.txt, and THIRD_PARTY_LICENSES.md with NOTICE attribution and updated test suite count (260+ passed). + * Expanded tests/test_metadata.py with automated contracts certifying NOTICE attribution, CI lifecycle timeouts, and multi-host gitignore defense. diff --git a/THIRD_PARTY_LICENSES.md b/THIRD_PARTY_LICENSES.md index a4d81a7..ea04aea 100644 --- a/THIRD_PARTY_LICENSES.md +++ b/THIRD_PARTY_LICENSES.md @@ -21,7 +21,7 @@ SoftwareCenter strictly guarantees: 3. **Dynamic Linking & Zero-Copyleft Compliance (LGPL-3.0):** PySide6 (Qt for Python) is dynamically linked in compliance with LGPLv3 Section 4. The application source code is licensed under permissive MIT and is not affected by copyleft obligations. Users are free to replace Qt runtime shared libraries. 4. **Standalone PyInstaller Exemption:** Executable packaging via PyInstaller uses the standard PyInstaller exception to GPL-2.0-or-later, permitting independent binary distribution without licensing contagion. 5. **Non-Destructive Operations (INV-LAUNCH-04):** Managing or removing shortcuts never touches, modifies, or deletes the underlying executable or filesystem files. -6. **Machine-Readable Metadata & Internationalization Parity:** Complete metadata alignment across `llms.txt`, `CHANGELOG.md`, and Tier-2 6-language translations (`de`, `en`, `es`, `zh`, `ja`, `ru`). +6. **Machine-Readable Metadata & Internationalization Parity:** Complete metadata alignment across `llms.txt`, `MARKETING-LOG.txt`, and Tier-2 6-language translations (`de`, `en`, `es`, `zh`, `ja`, `ru`). --- diff --git a/llms.txt b/llms.txt index d4cffac..341086b 100644 --- a/llms.txt +++ b/llms.txt @@ -27,8 +27,8 @@ Discovery positioning: local-first PySide6 app launcher, desktop shortcut organi - `NOTICE`: Open-source attribution notice (Lukas Geiger, file-bricks, open-bricks umbrella). - `SECURITY.md`: Hardened bilingual security policy (Supported versions, 48h SLA, invariants). - `THIRD_PARTY_LICENSES.md`: Dependency inventory, SPDX identifiers, LGPLv3 dynamic linking guarantees, and 10 runtime invariants. -- `CHANGELOG.md`: Public project history and discovery metadata changes. - `EXPORTFORMAT.md`: Schema definition for versioned profile JSON. +- `MARKETING-LOG.txt`: Target personas, dual-language search term matrices, competitive comparison, and governance invariants. - `tests/`: Pytest suite (260+ tests certifying platform, metadata parity, boundaries, persistence, context-menu entry management, Tier-2 6-language internationalization, and trusted WACK tool discovery). ## Verification diff --git a/pyproject.toml b/pyproject.toml index 3500d36..a2a6cc4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -70,6 +70,7 @@ Notice = "https://github.com/file-bricks/SoftwareCenter/blob/master/NOTICE" "Parent Organization" = "https://github.com/file-bricks" "Umbrella Ecosystem" = "https://github.com/open-bricks" "LLM Ready" = "https://github.com/file-bricks/SoftwareCenter/blob/master/llms.txt" +"Marketing Log" = "https://github.com/file-bricks/SoftwareCenter/blob/master/MARKETING-LOG.txt" "Third-Party Licenses" = "https://github.com/file-bricks/SoftwareCenter/blob/master/THIRD_PARTY_LICENSES.md" [tool.ruff] diff --git a/tests/test_metadata.py b/tests/test_metadata.py index 02d8556..39723f6 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -202,6 +202,7 @@ def test_pyproject_pep621_metadata_and_urls(): assert urls["Parent Organization"] == "https://github.com/file-bricks" assert urls["Umbrella Ecosystem"] == "https://github.com/open-bricks" assert urls["LLM Ready"] == "https://github.com/file-bricks/SoftwareCenter/blob/master/llms.txt" + assert urls["Marketing Log"] == "https://github.com/file-bricks/SoftwareCenter/blob/master/MARKETING-LOG.txt" assert urls["Third-Party Licenses"] == "https://github.com/file-bricks/SoftwareCenter/blob/master/THIRD_PARTY_LICENSES.md" classifiers = project["classifiers"] @@ -247,7 +248,7 @@ def test_llms_txt_structure_and_timestamp(): assert "https://github.com/file-bricks/SoftwareCenter" in content assert "THIRD_PARTY_LICENSES.md" in content assert "Disambiguation" in content - assert "CHANGELOG.md" in content + assert "MARKETING-LOG.txt" in content def test_changelog_recent_entry(): @@ -286,6 +287,23 @@ def test_gitignore_multi_host_and_lock_hardening(): assert ".coverage.*" in content +def test_marketing_log_contract_and_invariants(): + mkt_file = ROOT / "MARKETING-LOG.txt" + assert mkt_file.exists(), "MARKETING-LOG.txt must exist" + content = mkt_file.read_text(encoding="utf-8") + + assert "file-bricks/SoftwareCenter" in content + assert "2026-09-23" in content + assert "2026-09-14" in content + assert "INV-LOCAL-01" in content + assert "INV-SEC-02" in content + assert "INV-PROFILE-03" in content + assert "INV-LAUNCH-04" in content + assert "INV-DUAL-05" in content + assert "INV-PARITY-09" in content + assert "INV-ZEROCOPY-10" in content + + def test_target_personas_present_in_all_readmes(): text_en = (ROOT / "README.md").read_text(encoding="utf-8") text_de = (ROOT / "README_de.md").read_text(encoding="utf-8")