testsAndMisc/docs/superpowers/evidence/glyph-art-split-2026-08-21.json
Krzysztof kuhy Rudnicki 18c4a4c6af
Some checks are pending
Pre-commit checks / pre-commit (push) Waiting to run
Python tests / test (push) Waiting to run
Shell tests / shell-tests (push) Waiting to run
Shell tests / arch-tests (push) Waiting to run
glyph-art evidence: describe the commit that actually landed
The artifact was written for an earlier draft of the change and did not match
what shipped. It claimed _glyph_art.py went 253 -> 208 when HEAD was 220 and
the committed file is 238, omitted apps.py entirely, and carried the line
"Non-goal: any change to the glyph artwork itself" — false, since the whole
point of the commit was adding the note-ascender glyph and the lyricanki
AppIcon entry.

Corrected the line counts, added apps.py to scope, replaced the false non-goal
with the real one (the twelve pre-existing glyphs and style.py are untouched),
and recorded the linux=False check: ~/lyricanki has android/ and no linux/, so
there is no desktop hicolor set to install. Evidence that misdescribes its own
diff is worse than none — it is what a future reader bisects against.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-21 16:43:01 +02:00

55 lines
4.2 KiB
JSON

{
"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: 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, 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."
],
"verification": [
{
"command": "python3 -c 'from python_pkg.app_icons.glyphs import GLYPHS ...'",
"result": "pass",
"evidence": "13 glyphs load; both moved names ('note-ascender', 'track-bars') are present in the registry."
},
{
"command": "build_svg(GLYPHS[name], '#7C9CF5', with_background=True) for the moved glyphs",
"result": "pass",
"evidence": "Ran the real renderer, not just the import: note-ascender produces 641 bytes and track-bars 444, both with the accent colour substituted. A control glyph (anvil, untouched) renders alongside them at 496 bytes."
},
{
"command": "python3 -m pytest python_pkg/app_icons -q",
"result": "pass",
"evidence": "44 passed. The coverage gate reports below 100% only because a single-package run does not exercise the rest of the repo."
},
{
"command": "bash meta/scripts/check_file_length.sh --all",
"result": "pass",
"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 <the four python files>",
"result": "pass",
"evidence": "ruff, ruff format, mypy, pylint, bandit, pytest-with-coverage and codespell all pass. No suppression added."
}
],
"risks": [
"A mid-edit slip removed the _NOTE_ASCENDER argument from its Glyph(...) call site as well as from the import list, which surfaced immediately as a TypeError on import. Repaired and re-verified by rendering; recorded because the import-only check would not have caught it — the registry has to be built for that failure to appear.",
"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; 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."
]
}