diff --git a/docs/superpowers/evidence/glyph-art-split-2026-08-21.json b/docs/superpowers/evidence/glyph-art-split-2026-08-21.json index f74d38f6..79f63c86 100644 --- a/docs/superpowers/evidence/glyph-art-split-2026-08-21.json +++ b/docs/superpowers/evidence/glyph-art-split-2026-08-21.json @@ -1,12 +1,14 @@ { - "intent": "Bring python_pkg/app_icons/_glyph_art.py (253 lines) back under the 250-line cap without discarding the lyricanki note-ascender glyph that pushed it over. This is the last blocker to wiring the cap into pre-commit.", + "intent": "Add the lyricanki launcher icon to the shared family — a new note-ascender glyph plus its registry entry — and keep python_pkg/app_icons/_glyph_art.py under the 250-line cap while doing it, by moving two glyph constants into a companion module. The cap compliance is the last blocker to wiring the cap into pre-commit, which is why the two land together.", "scope": [ - "python_pkg/app_icons/_glyph_art.py: 253 -> 208 lines", + "python_pkg/app_icons/_glyph_art.py: 220 -> 238 lines (adds _NOTE_ASCENDER's artwork, loses _TRACK_BARS and _NOTE_ASCENDER to the companion module)", "New: python_pkg/app_icons/_glyph_art_more.py (50)", - "python_pkg/app_icons/glyphs.py: imports _NOTE_ASCENDER and _TRACK_BARS from the new module", - "Non-goal: any change to the glyph artwork itself" + "python_pkg/app_icons/glyphs.py: imports _NOTE_ASCENDER and _TRACK_BARS from the new module, and registers the note-ascender Glyph", + "python_pkg/app_icons/apps.py: new lyricanki AppIcon entry (accent #B8862E, glyph note-ascender, linux=False)", + "Non-goal: any change to the artwork of the twelve pre-existing glyphs, or to the shared family constants in style.py" ], "changes": [ + "Added the note-ascender glyph and the lyricanki AppIcon entry, so lyricanki stops shipping the stock Flutter 'beach' icon. linux=False because ~/lyricanki has an android/ target and no linux/ directory — verified on disk, not assumed — so there is no desktop hicolor set to install.", "Moved the two most recent glyph constants (_TRACK_BARS, _NOTE_ASCENDER) with their comments into a companion module. The division carries no meaning beyond the cap, and the module docstring says so, because a reader would otherwise look for a taxonomy that is not there.", "glyphs.py imports from both modules. Nothing else changed: the Glyph dataclass, the registry and the lookup all stay put, so no caller or test needs to know which file a glyph lives in — the same contract the original _glyph_art split established." ], @@ -29,7 +31,12 @@ { "command": "bash meta/scripts/check_file_length.sh --all", "result": "pass", - "evidence": "'all checked files are within 250 lines'. Both modules are under: 208 and 50." + "evidence": "'all checked files are within 250 lines'. Both modules are under: 238 and 50." + }, + { + "command": "ls -d ~/lyricanki/linux", + "result": "pass", + "evidence": "No linux/ directory (android/ is present), confirming linux=False is correct rather than an oversight. The six generated icon assets exist in ~/lyricanki/assets/icon/ and that repo's tree is clean, so the app side was committed separately as the contract's out_of_scope says." }, { "command": "pre-commit run --files ", @@ -42,6 +49,6 @@ "Two modules now hold glyph data, so someone adding a glyph must pick one. The docstring directs them to the cap rather than to a false distinction." ], "rollback": [ - "git revert the commit; _glyph_art.py returns to 253 lines and the file-length gate cannot be wired until it is under 250 again." + "git revert the commit; lyricanki loses its family icon and returns to the stock Flutter icon, and the _glyph_art split is undone. Because the same commit wires the file-length gate, a revert must also drop that hook or the tree it restores will not satisfy it." ] }