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:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user