From ea14eb5e88c91e0bda0bd64dffbca78a068afc63 Mon Sep 17 00:00:00 2001 From: prosolis <5590409+prosolis@users.noreply.github.com> Date: Mon, 27 Jul 2026 22:17:26 -0700 Subject: [PATCH] UX review: handoff notes for the next session MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Records what shipped and is live, what was closed without code (items 1 and 5), what's untouched, and the suggested next step — item 3b, with a warning to read grammarLite.test.ts and the unmerged feat/mechanics-deterministic-pass and feat/calm-suggestions branches before writing a new rules engine. Also writes down how to instrument a production build, since item 1 looked airtight in source and was wrong: fiber-walk from .ProseMirror to the Tiptap editor, then read the prosemirror-history state directly. Claude-Session: https://claude.ai/code/session_016y6gyuHkQXPiEuW8RGQyua --- UX_REVIEW_2026-07-27.md | 46 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/UX_REVIEW_2026-07-27.md b/UX_REVIEW_2026-07-27.md index daa4740..f1d9a03 100644 --- a/UX_REVIEW_2026-07-27.md +++ b/UX_REVIEW_2026-07-27.md @@ -270,3 +270,49 @@ vice versa. place. - The doc-type dropdown's translucent look during open was **animation mid-fade, not a bug** — leave it. + +--- + +## Handoff — state as of 2026-07-27, second session + +**Shipped and live.** `main` is at the merge +`Merge fix/companion-yields-to-cards`, pushed to gitea, and the VPS is +rebuilt on it (`git pull && docker compose up -d --build`, all five +containers healthy). Working tree clean. + +Note that deploy carried **two** commits: the item 0 fade (written in the +first session, never deployed) and this session's panel follow-up. So the +kitten only started yielding to rail cards in production with this push — +if you're comparing against memory of the live site, that's why. + +**Done:** item 0 and its follow-up. **Closed without code:** item 1 (not +reproducible) and item 5's original premise (re-scoped, much cheaper now). +**Untouched:** items 2, 3, 4, 6, 7, 8. + +**Suggested next:** item 3b, the instant local rules layer — best +value-for-effort left, no server work, and it's the item that most matches +the "LLM is garnish" ethos. **Check `web/src/components/Companion/ +grammarLite.test.ts` first** — a rules engine may already be half-built, +and there are sibling branches that look relevant and were never merged: +`feat/mechanics-deterministic-pass` ("deterministic mechanics suggestion +family, rule-based, no LLM") and `feat/calm-suggestions` ("suppress fickle +re-edits of sentences the user already settled", which reads like a +partial item 2). Read those before writing anything new. + +**Verification technique, for whoever picks up items 2/3/7.** Claims about +editor behaviour in this doc should be checked against the running build, +not reasoned about from source — item 1 looked airtight on paper and was +wrong. Against a production bundle there's no exposed editor handle, so: +walk up from `.ProseMirror` to the nearest `__reactFiber$` key, breadth- +first through the fiber tree for an object with `.view`/`.state`/ +`.commands`/`.schema` — that's the Tiptap editor. From there +`editor.can().redo()`, the prosemirror-history plugin state +(`done.eventCount` / `undone.eventCount`), and a wrapper around +`view.dispatch` logging `tr.docChanged` are enough to settle most +"does the editor really do X" questions in a couple of minutes. + +**Housekeeping:** `fix/companion-yields-to-cards` is merged and can be +deleted. Testing item 1 meant accepting suggestions on her live document; +the one residual edit was reverted ("on foot" → "by foots") and the doc +text is as it was found, but the History panel now shows several extra +auto-snapshots from that session.