Skip to content

korekore Phase 2b: the six pages, with their states - #176

Open
longzhi wants to merge 1 commit into
korekore/phase-2a-shellfrom
korekore/phase-2b-pages
Open

longzhi wants to merge 1 commit into
korekore/phase-2a-shellfrom
korekore/phase-2b-pages

Conversation

@longzhi

@longzhi longzhi commented Oct 23, 2026

Copy link
Copy Markdown
Collaborator

Phase 2b of the korekore UI (ADR-0021): the six pages, on the Mac and on Linux, each with its own states. Behind VIBEBUDDY_UI=korekore; without it both apps behave exactly as before.

Stacked on #175 (2a), which is stacked on #173 (Phase 1). This PR's own change is the last commit.

Scope: pages with their states; 2c keeps the rest

Each page is laid out as its canvas board draws it, and carries the states its "every state" board gives, so a page is done in one go rather than reworked in 2c:

Page Board States included
Character Mac · Character write progress (pink bar), write failed, Make your own look (frames, voice and lines from, errors), what the buddy calls you
Agents Mac · Agents WATCHING / WAITING / NOT SET UP / NOT FOUND / TRUST AGAIN, the hook write panel with its diff, terminal tabs (Mac only, as today)
Conversation Mac · Conversation answered by, the Anthropic key (saved / field), loading, nothing said yet, couldn't read, needs Codex / Claude Code
Device Mac · Device which one is your box, box not found, pin, taken by another computer, other firmware, unsupported board, update offer, updating / flashed / one more step / didn't finish / didn't take, firmware not downloaded yet, Wi-Fi joining and errors, paired computers, cable needed
General Mac · General the update line (available / up to date / failed / not checked / off), unsupported app
Advanced Mac · Advanced daemon running / not running

Left for 2c: onboarding, the confirmations (on the Mac they are still NSAlerts: flash, update, language restart), system notifications and banners, the end of onboarding.

Not built, because the daemon can't do them yet: Cancel on a write, the time left and the route (OVER WI-FI) on the progress cards, the daemon's uptime on Advanced. Those need daemon changes; say if you want them.

What each page does is the current tab's, copied: the current views are untouched. Linux keeps its own differences: no terminal tabs, inline panels where the Mac has sheets, the Permission denied hint.

Screenshots

Mac, the real window drawn off screen in a debug build with sample data (VIBEBUDDY_KOREKORE_SNAPSHOTS=<folder> swift run --package-path app VibeBuddy). The conversation is canned; the Agents page shows this Mac's real hook and terminal-permission state.

Character Agents
Conversation Device
General Advanced

Linux, drawn headless by iced_test (cargo test -p vibebuddy-desktop korekore::snapshots -- --ignored). Only Kore and the robot on Character: the Linux Character packs aren't installed on the machine that drew these.

Character Agents
Conversation Device
General Advanced

Where it departs from the canvas, and why

  • Character cards show the production looks (48 × 64 at 1×), not the chibi drafts: the drafts are Phase 4. Kore's card says COMING SOON until Kore is a Character (ADR-0021). The robot card stays.
  • What the buddy calls you sits under the volume: the canvas only shows it inside Make your own look, but it applies to every Character.
  • The Device screen shows the last capture at 1× inside the design's 352 × 264 frame; the canvas scales it 1.1, which makes the pixel art uneven. Before a capture, the box is redrawn from the status.
  • Colours not in tokens.json were replaced: the config box's dashed #CFC8DC with mist-text; the state boards' #fff1c2 / #ffe1e1 panels with cream and a kore-pink-text outline.

Changes to existing files

File Lines What
app/Sources/VibeBuddy/AppDelegate.swift +7 debug builds only: the snapshot mode
app/Sources/VibeBuddy/AppModel.swift +9 debug builds only: showSample(_:)
app/Sources/VibeBuddyCore/Status.swift +3 −1 rolledBack read from the status
app/Sources/VibeBuddyCore/Resident.swift +3 ResidentInfo.sample for previews
desktop/src/main.rs +13 −13 the korekore switch is a bool and its sections are the tabs; view() hands the page over
desktop/src/status.rs +2 rolled_back
tools/check-localization.py ±1 read Swift subfolders too: it missed every page under VibeBuddy/Korekore/
app/Localization/zh-Hans.lproj/Localizable.strings +85 the new strings

New files: KorekoreUI/Controls.swift, KorekoreUI/ConversationPage.swift, VibeBuddy/Korekore/Pages/*.swift (5), VibeBuddy/Korekore/KorekoreSnapshots.swift, desktop/src/korekore/controls.rs, desktop/src/korekore/pages.rs, and the screenshots.

Tests

  • just test (cargo test --workspace, SelfTest): pass.
  • cargo check and cargo clippy for x86_64-unknown-linux-gnu and the host: pass, no warnings.
  • python3 tools/check-localization.py: ok, 418 keys.
  • Swift built with -warn-long-expression-type-checking=150: no slow expressions in the new code (the CI compiler gave up on one in korekore Phase 2a: window, sidebar with the mini box, menu bar #175).
  • Not run here: the apps themselves with the switch on, beside the installed app, and Linux on a real Omarchy desktop.

🤖 Generated with Claude Code

Phase 2b of docs/design/korekore, behind VIBEBUDDY_UI=korekore on both
apps; without it nothing changes.

Character, Agents, Conversation, Device, General and Advanced, laid out
as the canvas boards draw them, each with the states its "every state"
board gives: finding the box, firmware and character writes, Wi-Fi
joining and its errors, paired computers, the hook write panel, TRUST
AGAIN, terminal permissions, the conversation's loading, empty, error and
needs-Codex or Claude states, and Make your own look. What each page does
is the current tab's, copied: the current views are untouched.

- Mac: shared controls in KorekoreUI (card, pill button, switch, pixel
  tag, bar, menu, field); the Conversation page there too, fed the same
  four calls as ConversationView; the other five in the app target on
  AppModel. Debug builds draw every page with sample data
  (VIBEBUDDY_KOREKORE_SNAPSHOTS), the conversation canned.
- Linux: the same pages as App methods in desktop/src/korekore/pages.rs,
  on the existing messages; the sections are the existing tabs. Where the
  Mac shows a sheet, Linux shows an inline panel. iced_test draws them.
- Status: rolled_back is read on both sides, for "The update didn't take".
- check-localization now reads Swift subfolders too (it missed the pages).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 23, 2026 16:19

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.

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.

2 participants