UX review: handoff notes for the next session

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
This commit is contained in:
prosolis
2026-07-27 22:17:26 -07:00
parent aac15b5ac5
commit ea14eb5e88
+46
View File
@@ -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.