8.5 KiB
Session 0059.0 — Transcript
Date: 2026-06-01 Goal: Fix the reported button-UX bugs on the OHM RFC view header — "missing" buttons and a generally unpolished button feel — with the right framework/deployment separation.
Outcome: Shipped rfc-app v0.31.4 (CSS-only patch) fixing invisible light-surface
.btn-linkbuttons + harmonizing the RFC breadcrumb action bar, and bumped the OHM pin to 0.31.4. Both PRs MERGED to main (rfc-app #5, ohm-rfc #9),v0.31.4tagged on the rfc-app merge commit. Remaining: rebuild + deploy the OHM frontend against 0.31.4.Highlights:
- Root-cause, not whack-a-mole: the "missing buttons" were
.btn-link(a dark-header utility, white-on-translucent) reused on light surfaces, rendering white-on-white.- One CSS file touched (
frontend/src/App.css, +44/−7).- Verified visually in an isolated CSS harness (Preview MCP screenshot) before committing;
vite buildclean.
Pre-session state
- Operator report: a screenshot of the OHM RFC view (super-draft "Informed Consent"). Header action bar shows "Start Contributing" (filled black) and "Graduate to RFC repo" (filled black) rendering fine, but "Metadata" / "Claim ownership" / "Invitations" appearing ghosted/missing, and a button clipped at the right edge. Operator: "Some buttons are missing… clean up the general look and feel of buttons in there. It doesn't feel smooth or modern."
- ohm-rfc: on
main, clean..rfc-app-version=0.31.3. CLAUDE.md "Current pin" line stale at0.2.2. - rfc-app (
~/git/rfc-app): onmainbut 6 commits behind origin/main, working tree at VERSION0.30.1— stale. origin/main tipe8e555d(v0.31.3 + a docs commit). Fast-forwarded to the tip before any edit so the work targeted the version OHM actually runs. - Live OHM deploy: not inspected; unchanged this session.
Turn-by-turn arc
Arc 1 — Triage: framework concern, sync first
Per the two-repo iteration pattern, button rendering/styling is UI
logic owned by the framework → fix in rfc-app, not the content repo.
Located the header in frontend/src/components/RFCView.jsx
(.rfc-breadcrumb / .breadcrumb-actions). Noticed the working tree
was stale (0.30.1) vs. the OHM pin (0.31.3); fast-forwarded
~/git/rfc-app main to origin tip so the fix built on the live
version. Claimed session ID 0059 via claim-session-id.sh.
Arc 2 — Root cause
.btn-link (App.css:37) was color: var(--c-white); background: var(--color-on-dark-soft) = rgba(255,255,255,0.15). Born (git blame:
first slice, 779ba6d) as the dark-header button pattern — the
tokens.css comment even says "On the dark header, translucent white is
the established pattern." But .btn-link is reused on light
surfaces: the breadcrumb action bar (.rfc-breadcrumb bg
--c-gray-50), the PR diff toggle + "Edit title" (PRView.jsx), the
invitations/inbox modals, and the discussion panel. On near-white
backgrounds those buttons were white-on-white — present and functional
in the DOM, but invisible. The two filled CTAs survived because their
fill carried them. The right-edge clipping was the action row
overflowing with no wrap. In the dark header, the only .btn-link
is "Sign out" (App.jsx:256) — everything else there uses
.header-* / .btn-signin-header.
Arc 3 — The fix (App.css only)
- Base
.btn-linkredefined as a light-surface secondary button (white fill, hairline--c-gray-300border,--c-gray-700label, hover darkens). Fixes every light-surface reuse at once. .app-header .btn-link(+hover) restores the translucent-on-dark treatment for the lone dark-surface use ("Sign out")..breadcrumb-actions→flex-wrap+ a higher-specificity harmonizer (.breadcrumb-actions > button, > a) normalizing the toggle, filled CTAs, and secondary buttons to one height (30px) / radius / type so the row reads as a single control group and wraps instead of clipping..rfc-breadcrumb→flex-wrap: wrap..diff-mode-toolbar .btn-link.active→ filled ink so the selected toggle reads clearly against the new secondary base.
Smooth transitions + the keyboard focus ring were already global (the v0.21.0 interaction-polish layer), so no new motion/focus rules — the "not smooth/modern" feel was the invisible/inconsistent resting state, not missing animation.
Arc 4 — Verify
Built an isolated HTML harness loading the real tokens.css +
App.css and rendering the exact breadcrumb markup (dark header,
super-draft bar, edit-branch bar, diff toggle), served via a temp
static server, screenshotted via the Preview MCP. Confirmed: Sign out
legible on dark; Metadata/Claim ownership/Invitations now legible
secondary buttons; filled CTAs still dominant; diff toggle's active
state filled. Harness + the temp .claude/launch.json removed
afterward (ohm-rfc left clean). npm run build clean.
Arc 5 — Release flow (full, per operator choice)
- rfc-app: branch
release/v0.31.4-button-ux; VERSION +frontend/package.json→ 0.31.4; CHANGELOG patch entry; commit76c82a5. Pushed via the SSH URL (origin is https with no non-interactive credential;git.wiggleverse.org:2222SSH works). PR #5 opened. - ohm-rfc: branch
session-0059/pin-0.31.4;.rfc-app-version→ 0.31.4; CLAUDE.md "Current pin" corrected0.2.2→0.31.4; commitee5b90b. Pushed to origin (SSH). PR #9 opened. - PRs created via
ohm-infra/scripts/rfc-authoring.sh pr-create(Keychainohm-gitea-token, scopewrite:repository;whoami403s on missingread:userbut PR ops work). Note: ownerbennow 307-redirects toben.stull(a Gitea rename) — useben.stull/...since the script's curl doesn't follow redirects.
Cut state (end of session)
| rfc-app | PR #5 MERGED to main @ 551d240; release commit 76c82a5; tag v0.31.4 on the merge commit. VERSION 0.31.4. Branch deleted. |
| ohm-rfc | PR #9 MERGED to main @ 10836c0; commit ee5b90b. pin 0.31.4. Branch deleted. |
| OHM live | unchanged this session; still running pre-0.31.4 (deploy pending). |
| ohm-rfc pin (main) | 0.31.4 |
| Ledger | Status |
|---|---|
Button UX: invisible light-surface .btn-link + breadcrumb polish (rfc-app v0.31.4) |
✅ shipped (merged + tagged) — only the OHM frontend rebuild/deploy remains |
§19.2 candidates surfaced
.btn-linkis an overloaded class. Now corrected to a light-surface default with a dark-header scope, but the deeper pattern — a proper named button vocabulary (.btn-secondary,.btn-ghost, surface-aware variants) — would prevent the next "reused on the wrong surface" regression. Candidate for a future UI-system pass, not urgent.- rfc-app origin is https with no non-interactive credential. Every push this session went via an explicit SSH URL. Worth either switching origin to SSH or storing a credential, so future sessions don't rediscover this.
What lands on the operator's plate
Merge rfc-app PR #5 + tagDone this session (mergev0.31.4.551d240, tag on the merge commit).Merge ohm-rfc PR #9.Done this session (merge10836c0).- Rebuild the OHM deployment's frontend against 0.31.4 and ship — plain code deploy, no env/config/migration. This is the only remaining gesture.
Prompt the operator can paste into the next Claude Code session
You reserve your own session ID (claim-session-id.sh). Context: the
prior session (0059) fixed a button-UX bug in rfc-app and shipped it as
v0.31.4 (CSS-only patch in frontend/src/App.css): the .btn-link class
was a dark-header style reused on light surfaces, so secondary buttons
(Metadata / Claim ownership / Invitations on the RFC breadcrumb) were
rendering white-on-white and looked missing; the breadcrumb action bar
was also harmonized + made to wrap. Both PRs are MERGED to
main (rfc-app #5 @ merge 551d240, tag v0.31.4 on the merge commit;
ohm-rfc #9 @ merge 10836c0, .rfc-app-version now 0.31.4 on main). The
ONLY remaining gesture is to rebuild + deploy the OHM frontend against
0.31.4 — plain code deploy, no env/config/migration.
If you're picking this up: do that deploy and confirm the breadcrumb
action bar renders the secondary buttons (Metadata / Claim ownership /
Invitations) legibly on the live site. (rfc-app origin is https with no
non-interactive credential — push via
ssh://git@git.wiggleverse.org:2222/ben.stull/…; PRs via
ohm-infra/scripts/rfc-authoring.sh, owner ben.stull.) Otherwise, fresh
OHM driver session.