Files

148 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
phase: quick-260917-e15
plan: 01
type: execute
wave: 1
depends_on: []
autonomous: true
requirements: [QUICK-260917-E15]
files_modified:
- apps/desktop/src-tauri/icons/icon.png
- apps/desktop/src-tauri/icons/icon.ico
- apps/desktop/src-tauri/icons/32x32.png
- apps/desktop/src-tauri/icons/128x128.png
- apps/desktop/src-tauri/icons/128x128@2x.png
- CHANGELOG.md
estimate:
tokens: 12000
raw_tokens: 12000
tasks: 2
confidence: low
must_haves:
truths:
- "Die fuenf Icon-Dateien in `apps/desktop/src-tauri/icons/` (icon.png 512x512, icon.ico mit genau sechs Rahmen 16/24/32/48/64/256, 32x32.png, 128x128.png, 128x128@2x.png 256x256) stammen aus dem resvg-Renderer der Tauri-CLI und zeigen das Tessera-T aus Kacheln — inklusive der um 12 Grad gedrehten gelben Kachel rechts oben — statt einer „1“."
- "Pixel-Nachweis der gelben Kachel: icon.png an Pixel (363,149), 128x128.png an Pixel (91,37) und der 256er-Rahmen von icon.ico an Pixel (181,75) sind jeweils `FFED00FF` (SVG-Fuellfarbe `#ffed00`, Kachelmitte `rotate(12 51 21)` bei viewBox 72 hochskaliert). Der alte ImageMagick-MSVG-Satz liefert an denselben Stellen die Hintergrundfarbe `1A1A1AFF`."
- "`git status --porcelain apps/desktop/src-tauri/icons/` zeigt genau fuenf Zeilen, alle ` M`; das Verzeichnis enthaelt weiterhin genau fuenf Dateien — kein icon.icns, kein 64x64.png, kein android/, ios/, Square*.png oder StoreLogo.png."
- "`apps/desktop/src-tauri/tauri.conf.json`, alle Web-Dateien (insbesondere `apps/web/src/app/icon.svg`) und aller Rust-Code bleiben unveraendert."
- "CHANGELOG.md, `## Unveröffentlicht` → `### Behoben`: neuer letzter Stichpunkt `- Desktop-App: Symbol zeigte eine „1“ statt des Tessera-T – die gedrehte gelbe Kachel fehlte` (typografische Anfuehrungszeichen „…“, Halbgeviertstrich –, echte Umlaute, kein Punkt am Ende, kein Fliesstext), genau einmal in der Datei."
- "Kein Docker-Build, kein Desktop-Bau (`tauri build`), kein Deploy, kein Testserver, kein `git push`. Zwei Commits."
artifacts:
- "apps/desktop/src-tauri/icons/icon.png — 512x512, resvg-gerendert"
- "apps/desktop/src-tauri/icons/icon.ico — sechs PNG-Rahmen 32/16/24/48/64/256 (Reihenfolge wie von `tauri icon` erzeugt)"
- "apps/desktop/src-tauri/icons/32x32.png, 128x128.png, 128x128@2x.png — 32x32 / 128x128 / 256x256"
- "CHANGELOG.md — ein neuer Stichpunkt unter Unveröffentlicht/Behoben"
key_links:
- "`tauri.conf.json` `bundle.icon` (Z. 34-40) listet genau diese fuenf Pfade — deshalb duerfen nur diese fuenf Dateien ersetzt werden und die Konfiguration bleibt unangetastet."
- "Quelle ist `apps/web/src/app/icon.svg` (viewBox 0 0 72 72; gelbe Kachel `<rect x=\"45\" y=\"15\" width=\"12\" height=\"12\" rx=\"2.5\" transform=\"rotate(12 51 21)\" fill=\"#ffed00\">`). ImageMagick ohne rsvg-Delegat (nur MSVG) rendert den rotierten `<rect>` nicht; die Tauri-CLI (`tauri icon`) rendert mit resvg korrekt — deshalb Tauri-CLI, nie `magick icon.svg`."
- "Ein bereits erzeugter und sichtgeprüfter Satz liegt im Session-Scratchpad `/tmp/claude-1000/-home-vicolab-projects-tessera-ctl/36238f40-3162-4b4a-9c11-56905a933eef/scratchpad/icons/`. Er enthaelt zusaetzlich android/, ios/, icon.icns, Square*.png, StoreLogo.png, 64x64.png — die gehoeren NICHT ins Repo. Kopiert werden nur die fuenf Dateinamen aus `bundle.icon`."
- "`apps/web/src/lib/changelog.test.ts` arbeitet mit einem eingebetteten Beispieltext, nicht mit der echten CHANGELOG.md — deshalb ist der scoped `grep`-Nachweis in Task 2 die eigentliche Pruefung des Eintrags."
---
<objective>
Das Desktop-Client-Icon (Phase 18-04) zeigt eine „1“ statt des Tessera-T, weil der Icon-Satz mit ImageMagick erzeugt wurde und dessen interner MSVG-Renderer die um 12 Grad gedrehte gelbe Kachel rechts oben (`transform="rotate(12 51 21)"`) schlicht weglaesst. Die fuenf Icon-Dateien in `apps/desktop/src-tauri/icons/` werden durch einen mit der Tauri-CLI (`tauri icon`, Renderer resvg) erzeugten Satz ersetzt; die Konfiguration bleibt unveraendert. Dazu ein Stichpunkt im CHANGELOG.
Purpose: Das App-Symbol unter Windows/Linux (Taskleiste, Fenster, Installer) soll die Tessera-Bildmarke zeigen, nicht ein Fragment davon.
Output: Fuenf ersetzte Binaerdateien unter `apps/desktop/src-tauri/icons/`, ein CHANGELOG-Stichpunkt, zwei Commits.
</objective>
<execution_context>
@~/.claude/gsd-core/workflows/execute-plan.md
@~/.claude/gsd-core/templates/summary.md
</execution_context>
<context>
@/home/vicolab/projects/tessera-ctl/CLAUDE.md
@/home/vicolab/projects/tessera-ctl/apps/web/src/app/icon.svg
@/home/vicolab/projects/tessera-ctl/apps/desktop/src-tauri/tauri.conf.json
@/home/vicolab/projects/tessera-ctl/CHANGELOG.md
</context>
<tasks>
<task type="auto">
<name>Task 1: Die fuenf Icon-Dateien durch den resvg-Satz der Tauri-CLI ersetzen</name>
<files>apps/desktop/src-tauri/icons/icon.png, apps/desktop/src-tauri/icons/icon.ico, apps/desktop/src-tauri/icons/32x32.png, apps/desktop/src-tauri/icons/128x128.png, apps/desktop/src-tauri/icons/128x128@2x.png</files>
<read_first>
- apps/desktop/src-tauri/tauri.conf.json Z. 34-40 (`bundle.icon`: die fuenf Pfade, die ersetzt werden — und NUR diese)
- apps/web/src/app/icon.svg (Quelle; eine Zeile, viewBox 0 0 72 72, gelbe Kachel mit `rotate(12 51 21)`)
</read_first>
<action>
Der Befund ist verifiziert, nicht erneut untersuchen. Ziel ist ausschliesslich, die fuenf Dateien aus `bundle.icon` durch resvg-gerenderte Versionen zu ersetzen.
1. Quelle des neuen Satzes bestimmen. Bevorzugt: das Session-Scratchpad `/tmp/claude-1000/-home-vicolab-projects-tessera-ctl/36238f40-3162-4b4a-9c11-56905a933eef/scratchpad/icons/`, sofern dort alle fuenf Dateinamen `icon.png`, `icon.ico`, `32x32.png`, `128x128.png`, `128x128@2x.png` vorhanden sind (Satz wurde bereits sichtgeprüft). Fallback, falls das Scratchpad fehlt oder unvollstaendig ist: ein frisches Unterverzeichnis im Scratchpad anlegen (z. B. `.../scratchpad/icons-neu/`) und dort mit `cd /home/vicolab/projects/tessera-ctl && pnpm --filter @tessera/desktop exec tauri icon "$(pwd)/apps/web/src/app/icon.svg" -o <dieses Verzeichnis>` neu erzeugen (Tauri-CLI 2.11.3 ist installiert; absoluten SVG-Pfad uebergeben, weil `pnpm --filter` das Arbeitsverzeichnis nach `apps/desktop` wechselt). Das Ausgabeverzeichnis liegt in beiden Faellen AUSSERHALB des Repos — nie `-o apps/desktop/src-tauri/icons`, sonst landen icon.icns, 64x64.png, android/, ios/, Square*.png und StoreLogo.png im Repo.
2. Genau die fuenf Dateien per `cp` aus dem Quellverzeichnis nach `apps/desktop/src-tauri/icons/` kopieren (bestehende Dateien ueberschreiben). Keine weiteren Dateien kopieren, nichts loeschen, keine Umbenennung.
3. Sichtpruefung: `apps/desktop/src-tauri/icons/icon.png` mit dem Read-Tool oeffnen und bestaetigen, dass rechts oben die gelbe, leicht gedrehte Kachel sichtbar ist und die Figur ein T ergibt (zwei olivfarbene Kacheln oben links, gelbe Kachel oben rechts, Stamm aus zwei Kacheln darunter). Zeigt das Bild weiterhin nur eine „1“, ist das Quellverzeichnis falsch — dann Schritt 1 mit dem Fallback wiederholen.
4. `tauri.conf.json`, Web-Dateien und Rust-Code bleiben unangetastet. Kein `tauri build`, kein Docker.
Commit nach gruenem Gate: `fix(desktop): App-Icon-Satz mit resvg (tauri icon) neu erzeugt – gedrehte gelbe Kachel wieder vorhanden, T statt 1` mit genau den fuenf Icon-Dateien.
</action>
<verify>
<automated>cd /home/vicolab/projects/tessera-ctl && D=apps/desktop/src-tauri/icons && N="$(git diff --name-only 10a69ae -- "$D")" && U="$(git status --porcelain -- "$D")" && [ "$(magick identify -format '%w\n' "$D/icon.ico" | sort -n | tr '\n' ' ')" = "16 24 32 48 64 256 " ] && [ "$(magick identify -format '%wx%h' "$D/icon.png")" = "512x512" ] && [ "$(magick identify -format '%wx%h' "$D/32x32.png")" = "32x32" ] && [ "$(magick identify -format '%wx%h' "$D/128x128.png")" = "128x128" ] && [ "$(magick identify -format '%wx%h' "$D/128x128@2x.png")" = "256x256" ] && [ "$(magick "$D/icon.png" -depth 8 -format '%[hex:p{363,149}]' info:)" = "FFED00FF" ] && [ "$(magick "$D/128x128.png" -depth 8 -format '%[hex:p{91,37}]' info:)" = "FFED00FF" ] && magick "$D/icon.ico" -depth 8 -format '%w %[hex:p{181,75}]\n' info: | grep -q '^256 FFED00FF$' && [ "$(ls "$D" | wc -l)" = 5 ] && [ "$(printf '%s\n' "$N" | wc -l)" = 5 ] && ! printf '%s\n' "$U" | grep -q '^??' && git diff --quiet 10a69ae -- apps/desktop/src-tauri/tauri.conf.json apps/desktop/src-tauri/src apps/web && echo ICON-GATE-OK</automated>
</verify>
<done>Gate druckt `ICON-GATE-OK` (laeuft vor UND nach dem Commit gleich, Baseline ist der Ausgangs-Commit `10a69ae`): icon.ico hat genau die sechs Rahmen 16/24/32/48/64/256, die vier PNGs haben ihre Sollgroessen, an der Kachelmitte ist in icon.png, 128x128.png und im 256er-Rahmen von icon.ico die Farbe `FFED00FF` (vorher `1A1A1AFF`), das Verzeichnis enthaelt weiterhin genau fuenf Dateien, gegenueber `10a69ae` sind genau fuenf Dateien unter icons/ veraendert, nichts Untracked unter icons/, und tauri.conf.json, Rust-Quellen und apps/web sind gegenueber `10a69ae` unveraendert. Sichtpruefung per Read-Tool: T mit gelber gedrehter Kachel rechts oben. Commit mit den fuenf Dateien erstellt.</done>
</task>
<task type="auto">
<name>Task 2: CHANGELOG-Stichpunkt unter Unveröffentlicht / Behoben</name>
<files>CHANGELOG.md</files>
<read_first>
- CHANGELOG.md Z. 5-28 (`## Unveröffentlicht` mit den Rubriken Neu / Geändert / Entfernt / Behoben; Stil der Stichpunkte: „Bereich: kurzer Satz“, kein Punkt am Ende, echte Umlaute, typografische Anfuehrungszeichen „…“)
</read_first>
<action>
In CHANGELOG.md im Abschnitt `## Unveröffentlicht`, Rubrik `### Behoben` (derzeit drei Stichpunkte, Z. 25-27), als NEUEN LETZTEN Stichpunkt direkt nach `- „Was ist neu“ und Notiz-Ansicht: Aufzählungspunkte wieder sichtbar` genau diese Zeile einfuegen:
`- Desktop-App: Symbol zeigte eine „1“ statt des Tessera-T – die gedrehte gelbe Kachel fehlte`
Typografische Anfuehrungszeichen „ und “ (U+201E / U+201C) wie im Bestand, Halbgeviertstrich – (U+2013), kein Punkt am Ende, kein Fliesstext, keine zweite Zeile. Die Leerzeile vor `## 1.1.0 – 2026-09-16` bleibt erhalten. Keine anderen Rubriken oder Versionen anfassen, keine neue Rubrik anlegen.
Commit: `docs: CHANGELOG – Desktop-Symbol-Korrektur unter Unveröffentlicht` mit nur CHANGELOG.md.
</action>
<verify>
<automated>cd /home/vicolab/projects/tessera-ctl && L='- Desktop-App: Symbol zeigte eine „1“ statt des Tessera-T – die gedrehte gelbe Kachel fehlte' && sed -n '/^## Unveröffentlicht/,/^## 1\.1\.0/p' CHANGELOG.md | sed -n '/^### Behoben/,/^## /p' | grep -Fxq -e "$L" && [ "$(grep -Fx -e "$L" CHANGELOG.md | wc -l)" = 1 ] && [ "$(grep -n 'Tessera-T' CHANGELOG.md | wc -l)" = 1 ] && git diff --quiet 10a69ae -- apps/desktop/src-tauri/tauri.conf.json apps/web && pnpm --filter @tessera/web exec vitest run src/lib/changelog.test.ts && echo CHANGELOG-GATE-OK</automated>
</verify>
<done>Gate druckt `CHANGELOG-GATE-OK`: der Stichpunkt steht genau einmal in der Datei (Zeilen-Nachweis per `grep -Fx … | wc -l`, `grep -n 'Tessera-T'` liefert genau eine Zeile), und zwar innerhalb von `## Unveröffentlicht` → `### Behoben`; tauri.conf.json und apps/web unveraendert gegenueber `10a69ae`; changelog.test.ts bleibt gruen (10 Tests, ca. 2 s). Commit mit CHANGELOG.md erstellt. Hinweis: `grep` braucht `-e "$L"`, weil die Zeile mit `- ` beginnt und sonst als Option gelesen wird.</done>
</task>
</tasks>
<threat_model>
## Trust Boundaries
| Boundary | Description |
|----------|-------------|
| Scratchpad → Repo | Binaere Icon-Dateien aus einem Session-Temp-Verzeichnis werden ins Repo uebernommen |
| SVG → Renderer | `tauri icon` (resvg) liest die Repo-eigene `icon.svg`; keine Netzwerkquelle |
## STRIDE Threat Register
| Threat ID | Category | Component | Severity | Disposition | Mitigation Plan |
|-----------|----------|-----------|----------|-------------|-----------------|
| T-e15-01 | Tampering | apps/desktop/src-tauri/icons/* (Binaerdateien) | low | mitigate | Groessen-, Rahmen- und Pixel-Gate in Task 1 (Kachelmitte muss `FFED00FF` sein) plus Sichtpruefung per Read-Tool; Fallback ist die Neuerzeugung aus der Repo-eigenen SVG mit der bereits installierten Tauri-CLI |
| T-e15-02 | Tampering | Repo-Umfang | low | mitigate | Gate prueft `ls | wc -l = 5` und `git status` = genau fuenf ` M`-Zeilen unter icons/, `git diff --quiet` auf tauri.conf.json und apps/web — keine zusaetzlichen Artefakte (icns, android/, ios/, Square*, StoreLogo) gelangen ins Repo |
| T-e15-SC | Tampering | npm/pip/cargo installs | low | accept | Keine Paketinstallation; `@tauri-apps/cli` 2.11.3 ist bereits im Lockfile und in `apps/desktop/node_modules/.bin` vorhanden |
</threat_model>
<verification>
- Task-1-Gate `ICON-GATE-OK` und Task-2-Gate `CHANGELOG-GATE-OK` jeweils gruen.
- `git log --oneline -2` zeigt die beiden Commits (fix(desktop) …, docs: CHANGELOG …); `git status` danach sauber bis auf `.planning/`.
- Sichtpruefung von `apps/desktop/src-tauri/icons/icon.png` per Read-Tool: Tessera-T mit gelber, gedrehter Kachel rechts oben.
- Nicht Teil dieses Plans: `tauri build`, Docker-Build, Deploy, Testserver, `git push`.
</verification>
<success_criteria>
- Die fuenf Icon-Dateien aus `bundle.icon` sind resvg-gerendert (Pixel-Gate `FFED00FF` an der Kachelmitte in drei Dateien) und zeigen das T statt einer 1.
- Keine weitere Datei im Repo veraendert oder hinzugefuegt (tauri.conf.json, apps/web, Rust, zusaetzliche Icon-Formate).
- CHANGELOG.md hat unter `## Unveröffentlicht` → `### Behoben` genau einen neuen Stichpunkt zur Desktop-Symbol-Korrektur.
- Zwei Commits, kein Push.
</success_criteria>
<output>
Create `/home/vicolab/projects/tessera-ctl/.planning/quick/260917-e15-desktop-client-icon-fehlende-gedrehte-ge/260917-e15-SUMMARY.md` when done
</output>