Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -133,3 +133,11 @@ pytest*.txt
# Personal-Builds (BUILD-VERFAHREN §9) und lokale Backups
*-personal.exe
SoftwareCenter_PRE_*.py

# ---- Agenten-interne Arbeitsnotizen (GITHUB-POLICY.md §3, T-20260926-510472849) ----
BEFUNDE.md
*STATUS-LOG.txt
STORE_CONTRACT.md
STORE_READINESS.md
_WARTUNG/
_STAGING/
49 changes: 0 additions & 49 deletions BEFUNDE.md

This file was deleted.

7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 `BEFUNDE.md`, `STORE_CONTRACT.md` (internal Store release/versioning bookkeeping) and `_WARTUNG/msix_staging/` (staged MSIX build output) -- all stay on disk locally (gitignored), nothing was deleted. `PRODUCT_BOUNDARIES.md`, `scripts/verify_product_boundaries.py` and `tests/test_store_contract.py` now cite/check `STORE_LISTING.md`/`WINDOWS_STORE_PREP.md`/`store_package.json` only.
- `MARKETING-LOG.txt` and `RUNTIME_DAILY_CARE.md` were untracked in an earlier, over-eager pass on this branch and are restored here: `MARKETING-LOG.txt` is a deliberate public artifact (`pyproject.toml` project.url, a dedicated test); `RUNTIME_DAILY_CARE.md` is linked from README.md/README_de.md/README.es.md and is genuine migration/ops documentation, not agent scratch state.

### 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).
Expand All @@ -26,6 +30,9 @@ All notable changes to this project will be documented in this file.

## [Unreleased] - 2026-09-13

### Fixed
- README main-window screenshot: `README/screenshots/main.png` predated the reproducible Store screenshot generator and showed an empty, freshly-installed board ("Allgemein", 0 entries) instead of the app's real functionality (T-20260926-413277423). Replaced the README (EN/DE/ES) and `STORE_LISTING.md` reference with the already-existing, regenerated `README/screenshots/store/main-window.png` (populated `Dev` board, produced by `generate_store_screenshots.py`), and removed the stale `main.png`. No LaunchBoards equivalent existed to check -- LaunchBoards has no tracked UI screenshot in this repo.

### Added
- Empty-Board Placeholder UI: When a board has 0 items, `SoftwareListWidget.paintEvent` renders a clean, non-intrusive empty-state overlay with title ("Dieses Board ist noch leer") and explanatory hint ("Ziehen Sie beliebige Apps, Dokumente, Ordner oder Verknüpfungen hierher.") adapting dynamically to system theme palettes.
- Help / About Dialog: Added `Hilfe` -> `Über SoftwareCenter` (and `Über LaunchBoards` for sister profile) menu action with version and concise description of the universal organization layer.
Expand Down
8 changes: 5 additions & 3 deletions PRODUCT_BOUNDARIES.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion README.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Un organizador de escritorio ligero y multiplataforma para gestionar accesos dir
> [!NOTE]
> **Integración de IA / LLM e índice legible por máquinas:** SoftwareCenter proporciona metadatos estructurados en [`llms.txt`](llms.txt) y admite migraciones de perfiles a través de JSON versionado (`softwarecenter-profile-v1.json`).

![Ventana principal de SoftwareCenter](README/screenshots/main.png)
![Ventana principal de SoftwareCenter](README/screenshots/store/main-window.png)

## Navegación rápida

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ A lightweight, cross-platform desktop organizer for managing software shortcuts
> [!NOTE]
> **LLM / AI Integration & Machine-Readable Index:** SoftwareCenter provides structured machine-readable metadata in [`llms.txt`](llms.txt) and supports profile migrations via versioned JSON (`softwarecenter-profile-v1.json`).

![SoftwareCenter main window](README/screenshots/main.png)
![SoftwareCenter main window](README/screenshots/store/main-window.png)

## Quick Navigation

Expand Down
Binary file removed README/screenshots/main.png
Binary file not shown.
Binary file modified README/screenshots/store/list-view.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified README/screenshots/store/main-window.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion README/screenshots/store/summary.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"generated_at": "2026-08-13T23:35:18Z",
"generated_at": "2026-09-26T11:34:00Z",
"screenshots": [
{
"name": "main",
Expand Down
Binary file modified README/screenshots/store/tab-organization.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified README/screenshots/store/tiles-view.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion README_de.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Ein leichtgewichtiger, plattformübergreifender Desktop-Organizer für Software-
> [!NOTE]
> **KI / LLM Integration & Maschinelles Register:** SoftwareCenter bietet maschinenlesbare Metadaten in [`llms.txt`](llms.txt) und unterstützt Profil-Migrationen über versioniertes JSON (`softwarecenter-profile-v1.json`).

![SoftwareCenter Hauptfenster](README/screenshots/main.png)
![SoftwareCenter Hauptfenster](README/screenshots/store/main-window.png)

## Schnellnavigation

Expand Down
53 changes: 0 additions & 53 deletions STORE_CONTRACT.md

This file was deleted.

2 changes: 1 addition & 1 deletion STORE_LISTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ Es wird **keine Einreichung** behauptet. `pyproject.toml`, `SoftwareCenter.py` u
- [x] No hardcoded paths in source code
- [x] No debug print statements
- [x] PySide6 (LGPL) -- license compatible with Store distribution
- [x] README-Screenshot vorhanden (`README/screenshots/main.png`)
- [x] README-Screenshot vorhanden (`README/screenshots/store/main-window.png`, generiert via `generate_store_screenshots.py`)
- [x] Store-Screenshot-Set erzeugbar: `python generate_store_screenshots.py` schreibt `README/screenshots/store/main-window.png`, `tab-organization.png`, `tiles-view.png`, `list-view.png` und `summary.json`
- [ ] Aktuelles MSIX als Einreichkandidat vorhanden (historisches OneDrive-Artefakt 2026-03-13; nicht frisch signiert/WACK-geprüft)
- [ ] Code-Signing (.pfx) -- noch nicht konfiguriert in store_settings.json
Expand Down
52 changes: 0 additions & 52 deletions _WARTUNG/msix_staging/AppxManifest.xml

This file was deleted.

Binary file removed _WARTUNG/msix_staging/icons/Square150x150Logo.png
Binary file not shown.
Binary file removed _WARTUNG/msix_staging/icons/Square310x310Logo.png
Binary file not shown.
Binary file removed _WARTUNG/msix_staging/icons/Square44x44Logo.png
Binary file not shown.
Binary file removed _WARTUNG/msix_staging/icons/Wide310x150Logo.png
Binary file not shown.
2 changes: 1 addition & 1 deletion scripts/verify_product_boundaries.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def verify_static_contract() -> 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"
Expand Down
18 changes: 7 additions & 11 deletions tests/test_store_contract.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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"
Expand All @@ -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():
Expand All @@ -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
Loading