From 1b5a040b316f6c315890d2698d33074abedc759a Mon Sep 17 00:00:00 2001 From: Krzysztof kuhy Rudnicki Date: Wed, 11 Nov 2026 15:39:47 +0100 Subject: [PATCH] i3 focus block: emoji suitcase, not FA PUA Font Awesome private-use U+F0F2 failed the i3blocks private-use check and turned main's Shell tests CI red. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01WzxdWXa4ytX9adN7qpMAop --- .../i3-focus-suitcase-emoji-2026-11-11.json | 11 ++++++ .../issue-dashboard-bar-block-2026-10-02.json | 39 ------------------- linux_configuration/i3blocks/focus_project.sh | 5 ++- .../tests/test_i3blocks_focus_project.sh | 2 +- 4 files changed, 15 insertions(+), 42 deletions(-) create mode 100644 docs/superpowers/evidence/i3-focus-suitcase-emoji-2026-11-11.json delete mode 100644 docs/superpowers/evidence/issue-dashboard-bar-block-2026-10-02.json diff --git a/docs/superpowers/evidence/i3-focus-suitcase-emoji-2026-11-11.json b/docs/superpowers/evidence/i3-focus-suitcase-emoji-2026-11-11.json new file mode 100644 index 00000000..f18d51ba --- /dev/null +++ b/docs/superpowers/evidence/i3-focus-suitcase-emoji-2026-11-11.json @@ -0,0 +1,11 @@ +{ + "intent": "Turn main's Shell tests CI green again: the focus_project i3blocks block used a Font Awesome private-use codepoint (U+F0F2) for the interview-trip suitcase, which the i3blocks config checks forbid.", + "scope": ["linux_configuration/i3blocks/focus_project.sh", "linux_configuration/tests/test_i3blocks_focus_project.sh", "Non-goal: any other change to the focus block"], + "changes": ["SUITCASE is now the luggage emoji U+1F9F3 (rendered by Noto Color Emoji, like the block's existing target emoji) in the block and its test"], + "verification": [ + {"command": "bash linux_configuration/tests/test_i3blocks_efficiency.sh", "result": "pass", "evidence": "exit 0; was the failing check on CI run 43017516672"}, + {"command": "bash linux_configuration/tests/test_i3blocks_focus_project.sh", "result": "pass", "evidence": "exit 0, suitcase assertions use the emoji"} + ], + "risks": ["The suitcase now renders as a colour emoji instead of a monochrome Font Awesome glyph"], + "rollback": ["git revert this commit", "Shell tests CI goes red again on the private-use check"] +} diff --git a/docs/superpowers/evidence/issue-dashboard-bar-block-2026-10-02.json b/docs/superpowers/evidence/issue-dashboard-bar-block-2026-10-02.json deleted file mode 100644 index 05530dd4..00000000 --- a/docs/superpowers/evidence/issue-dashboard-bar-block-2026-10-02.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "intent": "Make the issue dashboard (~/src/issue-dashboard) one click away from the i3 bar: an [issue_dashboard] block shows issues to do, agents working and work ready to merge, turns red when an agent or a proof failed, and a click opens the dashboard window the same way [book_guard] opens book-guard.", - "scope": [ - "linux_configuration/i3blocks/issue_dashboard.sh - new block script", - "linux_configuration/i3blocks/config - [issue_dashboard] entry after [book_guard], interval=30", - "linux_configuration/tests/test_i3blocks_issue_dashboard.sh - behaviour test", - "Non-goal: the dashboard itself (lives in ~/src/issue-dashboard, local repo); i3/i3blocks were not reloaded on the live session." - ], - "changes": [ - "issue_dashboard.sh reads the one-line status.json the dashboard server rewrites on every refresh (~/data/issue-dashboard/status.json): '๐Ÿ“‹ ยท โš™ ยท โœ“ ', white normally, green when something is ready to merge, red with 'ยท โœ— ' when an agent or a proof failed, grey '๐Ÿ“‹ dashboard' when the file is missing, unreadable or older than 180 s (server not running). Zero forks on the hot path: one builtin read, bash regex, printf clock.", - "A click runs ~/.local/bin/issue-dashboard-desktop via setsid -f, which reuses the dashboard server or starts it detached and opens an app window.", - "~/.config/i3blocks/issue_dashboard.sh symlinked to the repo file, the way i3/install.sh links every i3blocks/* file." - ], - "verification": [ - { - "command": "bash linux_configuration/tests/test_i3blocks_issue_dashboard.sh", - "result": "pass", - "evidence": "fresh / ready / failed / stale / missing / broken / empty / click asserted; strace shows exactly one execve (bash) and no clone/fork on the hot path." - }, - { - "command": "bash linux_configuration/tests/test_i3blocks_efficiency.sh", - "result": "pass", - "evidence": "All i3blocks efficiency regression tests passed." - }, - { - "command": "~/.config/i3blocks/issue_dashboard.sh (live status.json from the real server)", - "result": "pass", - "evidence": "'๐Ÿ“‹ 5 ยท โš™ 0 ยท โœ“ 0' #FFFFFF while the server ran against Sepci0/kado-no-akari; '๐Ÿ“‹ dashboard' #6272A4 before it had ever run; BLOCK_BUTTON=1 started the launcher, which opened the (stubbed) browser with --app=http://127.0.0.1:8765/." - } - ], - "risks": [ - "The block appears only after the next i3 reload; nothing was reloaded on the live session.", - "A click with issue-dashboard-desktop missing does nothing (errors are silenced so the bar never breaks)." - ], - "rollback": [ - "git revert this commit and remove ~/.config/i3blocks/issue_dashboard.sh; i3-msg reload.", - "Confirm the bar still renders [book_guard] and the other blocks." - ] -} diff --git a/linux_configuration/i3blocks/focus_project.sh b/linux_configuration/i3blocks/focus_project.sh index b974679d..21dd83bf 100755 --- a/linux_configuration/i3blocks/focus_project.sh +++ b/linux_configuration/i3blocks/focus_project.sh @@ -38,9 +38,10 @@ readonly STALE_AFTER_SECONDS=180 readonly YELLOW='#F1FA8C' readonly GREEN='#50FA7B' readonly RED='#FF5555' -# FontAwesome suitcase (the bar's icon font): an interview project's trip +# Luggage emoji (not a Font Awesome private-use glyph, which the i3bar +# checks forbid): an interview project's trip # question (milestone trip_ask:*) is still open, pending or missed. -readonly SUITCASE=$'\uf0f2' +readonly SUITCASE='๐Ÿงณ' emit() { # full_text, short_text, color: the three lines i3blocks reads. diff --git a/linux_configuration/tests/test_i3blocks_focus_project.sh b/linux_configuration/tests/test_i3blocks_focus_project.sh index 26447ea5..ca31e2fc 100755 --- a/linux_configuration/tests/test_i3blocks_focus_project.sh +++ b/linux_configuration/tests/test_i3blocks_focus_project.sh @@ -65,7 +65,7 @@ assert_eq '#50FA7B' "$(line 3 "$out")" 'green at daily_minutes' printf 'Checking interview milestones (red when missed, suitcase when a trip question is open)...\n' RED='#FF5555' -SUITCASE=$'\uf0f2' +SUITCASE='๐Ÿงณ' # focus_ms MISSED MINUTES MILESTONE_JSON_ARRAY focus_ms() { jq -nc --argjson x "$1" --argjson m "$2" --argjson ms "$3" \