Skip to content

fix: .md-Dateisymbol (Platte) + Store-Dateityp-Zuordnung, Version 1.0.5 - #7

Merged
lukisch merged 5 commits into
mainfrom
fix/T-20260927-699609650-filetype-icon
Sep 27, 2026
Merged

lukisch merged 5 commits into
mainfrom
fix/T-20260927-699609650-filetype-icon

Conversation

@lukisch

@lukisch lukisch commented Sep 27, 2026

Copy link
Copy Markdown
Contributor

T-20260927-699609650

Ursache (gemessen)

  • .md → ProgId CleanMarkdown.mdfile → DefaultIcon = <CleanMarkdown.exe>,0: Das Dateisymbol ist das in die EXE eingebackene Icon. Die ausgelieferte 1.0.3-EXE trägt das Plattendesign aus e712d9d (Abweichung 0,35 zur Store-Kachel). PR fix: window/EXE-Icon zeigte altes Design nach Store-Update 1.0.3 #5 hat das nur im Quellbaum behoben, 1.0.4 wurde nie ausgeliefert.
  • Das installierte 1.0.3-MSIX hat keine FileTypeAssociation, kein resources.pri und keine targetsize-/unplated-Varianten, weil der gemeinsame Builder _STORE/msstore_build_msix.ps1 das Manifest selbst erzeugte (außerhalb dieses Repos mitkorrigiert).

Fix

  • Version 1.0.5
  • Square44x44Logo.targetsize-{16…256} je plain, altform-unplated und altform-lightunplated, erzeugt aus der Store-Kachel (scripts/gen_targetsize_icons.py)
  • Regressionstest, CHANGELOG, STORE_ISSUES

Gate

_STORE/icon_consistency_check.py <root> --package <msix|ordner> prüft das gebaute Paket. Gegen das installierte 1.0.3 ist es rot (4 Befunde), gegen das gebaute 1.0.5-MSIX grün. Die Gate-Tests laufen mit 21 passed, die Projekttests mit 168 passed.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PTbvD41MCVmnQWaobvHfCk

Lukas Geiger and others added 5 commits September 27, 2026 03:46
…ne Dateityp-Zuordnung (1.0.5)

T-20260927-699609650. Gemessen, nicht vermutet:
- .md -> ProgId CleanMarkdown.mdfile -> DefaultIcon "<CleanMarkdown.exe>,0".
  Das Symbol ist also das in die EXE eingebackene Icon. Die ausgelieferte
  1.0.3-EXE traegt das Plattendesign aus e712d9d (byte-identisch zum
  CleanMarkdown.ico von b26390d, Abweichung 0.35 zur Store-Kachel). PR #5
  hat das nur im Quellbaum behoben, 1.0.4 wurde nie ausgeliefert.
- Das installierte 1.0.3-MSIX hat keine FileTypeAssociation, kein
  resources.pri und keine targetsize/unplated-Varianten:
  _STORE/msstore_build_msix.ps1 erzeugte das Manifest selbst und ignorierte
  store_package.json file_types (Builder ausserhalb des Repos mitgefixt).

Fix: Version 1.0.5; Square44x44Logo.targetsize-{16..256} je plain,
altform-unplated, altform-lightunplated aus der Store-Kachel
(scripts/gen_targetsize_icons.py); Regressionstest; STORE_ISSUES korrigiert.
Gate (_STORE/icon_consistency_check.py --package) prueft jetzt das gebaute
MSIX: rot gegen das installierte 1.0.3 (4 Befunde), gruen gegen 1.0.5.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PTbvD41MCVmnQWaobvHfCk
… Installation

T-20260927-699609650, Blocker D aus der astra-Abnahme von PR #7 (81dacc6):

- install_local.ps1 registriert eine eigene ProgID (CleanMarkdown.mdfile,
  DefaultIcon auf die lokale EXE). Diese Installation blieb nach einem
  Store-Update unverändert bestehen und "gewann" weiterhin die .md-Zuordnung
  -- das MSIX ersetzt sie nicht automatisch. uninstall_local.ps1 ist das
  Gegenstück: bricht ab, wenn kein Store-Paket installiert ist, sichert die
  betroffenen Registry-Zweige per reg export und entfernt danach nur, was
  install_local.ps1 selbst angelegt hat (ProgID, DefaultIcon, .md-Verweis,
  OpenWithProgids, Applications-Key, UserChoice falls zutreffend, Startmenü-
  Verknüpfung, Installationsordner). README/README_DE dokumentieren jetzt,
  dass lokale und Store-Installation nicht parallel bestehen sollen.

- gen_targetsize_icons.py erzeugte für unplated/lightunplated-Varianten
  byte-identische, opake Kopien der plated-Variante -- ein Nebenbefund der
  Gate-Härtung in _STORE/icon_consistency_check.py (siehe dortigen Commit):
  das jetzt strengere --package-Gate hätte den eigenen 1.0.5-Build
  andernfalls selbst abgelehnt. Fix: kleiner transparenter Eckpatch pro
  Variante -- genug für echte Transparenz, klein genug, um innerhalb der
  bereits kalibrierten Diff-Schwelle von test_assets_and_icons.py zu bleiben
  (ein voller 12%-Rand ergab 0.22 bei 16px, Schwelle 0.20).

Verifiziert: 168 Projekttests grün; echter 1.0.5-MSIX-Neubau über das
gehärtete _STORE/msstore_build_msix.ps1 (inkl. erzwungenem
icon_consistency_check.py --package) läuft mit Exit 0 durch.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PTbvD41MCVmnQWaobvHfCk
T-20260927-699609650, Head 9596928 wurde von gpt-6-astra (effort high) mit
"NICHT OK" bewertet (voller Bericht: _codex/ASTRA-REABNAHME_T-20260927-699609650.md).
Alle 5 Blocker sind behoben und gegen astras real reproduzierte Manipulationen
verifiziert (Details: _codex/FIX-C1-C2-D1-D2-D3_T-20260927-699609650.md):

- C1: Gate pruefte nur 5 von 14 ausgelieferten Icon-Groessen -- jetzt werden
  alle tatsaechlich im Paket/resources.pri vorhandenen Varianten erkannt und
  geprueft, nicht nur eine feste Pflichtliste.
- C2: Das reale 1.0.5-MSIX enthielt den onedir-Laufzeitordner (_internal,
  Python-DLLs) nicht -- die App waere nicht gestartet. Kopierschritt erkennt
  jetzt onedir-Layout und uebernimmt den kompletten Ordner.
- D1: uninstall_local.ps1 loeschte beim UserChoice-Rueckbau den gesamten
  Explorer-Elternzweig FileExts\.md samt fremden Geschwisterzweigen -- jetzt
  nur noch der UserChoice-Unterschluessel selbst.
- D2: Fehlgeschlagene Registry-Backups stoppten die Loeschung nicht -- jeder
  Export wird jetzt geprueft, ein Fehlschlag bricht vor jeder Aenderung ab.
- D3: Jede installierte Store-Version wurde akzeptiert, auch die real
  installierte 1.0.3 ohne .md-FileTypeAssociation -- das Manifest wird jetzt
  geprueft, eine Version ohne Handler wird abgelehnt.

D1-D3 zusaetzlich per gemocktem PowerShell-Testlauf verifiziert (kein echter
Registry-Zugriff). Store-Gate-Tests 27/27 gruen, Projekt-Testsuite 168/168
gruen, realer 1.0.5-MSIX-Neubau ueber das gehaertete msstore_build_msix.ps1
gruen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PTbvD41MCVmnQWaobvHfCk
T-20260927-699609650, 3. Abnahme (Fable, schreibgeschuetzt) fand: mein D1-Fix
`Remove-ItemProperty -Name "(Default)"` schlaegt gegen den PowerShell-
Registry-Provider fehl (verifiziert in pwsh 7.6.6 und Windows PowerShell 5.1),
`-ErrorAction SilentlyContinue` machte das unsichtbar. Folge: HKCU:\Software\
Classes\.md zeigte nach dem Rueckbau weiter auf die bereits geloeschte ProgID
CleanMarkdown.mdfile -- schlimmer als der vorherige Set-Item -Value "" (der
den Verweis wenigstens leerte).

Fix: echte Entfernung ueber die .NET-Registry-API
([Microsoft.Win32.Registry]::CurrentUser...DeleteValue), die den PowerShell-
Provider umgeht. Verifiziert in einem Wegwerf-Schluessel (angelegt, geprueft,
wieder entfernt -- keine dauerhafte Aenderung am Host).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PTbvD41MCVmnQWaobvHfCk
…isieren

merge-reviewer-Befund vor dem Merge von PR #7: Das Repo ist public. _codex/
enthielt interne Abnahmeberichte mit lokalen Pfaden, Hostnamen und
Reviewernamen -- nach einem Squash-Merge waeren die dauerhaft in der
main-Historie gelandet.

- _codex/ aus dem Git-Tracking entfernt (git rm --cached), lokal behalten,
  in .gitignore aufgenommen.
- README.md/README_DE.md: interne Ticket-ID und Reviewername ("astra
  abnahme review") aus der Nutzer-Doku entfernt/neutralisiert. Die Ticket-ID
  bleibt wie besprochen im CHANGELOG stehen.

Fachliche Pruefung wird durch diesen Commit nicht beruehrt (reine
Bereinigung, kein Verhaltensunterschied).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PTbvD41MCVmnQWaobvHfCk
@lukisch
lukisch merged commit 42f5249 into main Sep 27, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant