Repository navigation
Mindmap/New: voice input, punctuation-blind quotes, map-only links, in-place card editing - #7
Merged
Merged
Conversation
Dictated text has little punctuation, and the model tends to add some when
it quotes, so "nobody sees the small wins." was refused against the spoken
"nobody sees the small wins". The matching rule now compares letters,
numbers and their order only: apostrophes are dropped (don't = dont), any
other punctuation counts as a space (well-known = well known).
Every letter still has to match on word boundaries ("now" is not "not",
"ike" is not "like"), and fillers are not removed: the model quotes around
an "um" with two pieces. Side effects, both intended: a card that differs
only in punctuation is a duplicate, and a writer punctuating a card keeps
its link and nesting evidence.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A mic button above Send, using the browser's own speech recognition: the current app's src/ui/useSpeechToText.ts copied with its tests (jsdom added as a dev dependency for them). Spoken words go into the message box, after whatever was already there, and the writer reads, edits and sends them like typed text; nothing is sent by voice alone. - While listening the button turns red, the hint says so, and the box keeps the newest words in view as it grows (up to 40% of the screen, then it scrolls). - Typing or Send stops dictation. One change to the copied hook: after reset, results are ignored until the next start, because stop() still delivers a final result for the words heard so far, which would otherwise refill the box just sent, or overwrite what was just typed. - Firefox has no speech recognition: the button is disabled with a tooltip. - Better transcription through the backend is postponed (spec §8). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Each card shows its number (c3) at the top left: the same id the coach
sees in its state block, so "c3" in the chat is that card. An accepted
card proposal's chat line says which card it became ("Accepted as c3").
- The draft panel's left edge can be dragged to make it wider or narrower,
or moved with the arrow keys when it has focus; double-click resets it to
320px. The width is remembered in this browser, apart from the session.
The map always keeps at least 280px: dragging stops there, and if the
window shrinks the draft gives way first (CSS min()), so nothing scrolls
sideways. Hidden on the narrow, stacked layout.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nhyira, 11-01: the coach was proposing links to card proposals the writer hadn't decided on, so the link's Accept stayed disabled and the writer was pushed into deciding those cards later. Now: - propose_link, propose_nest and suggest_idea's near_card accept only cards on the map. A pending card proposal is refused with the reason, at every level including L2; an accepted proposal's id is refused with the card id to use. The tool descriptions say so up front, so the model doesn't spend attempts finding out. This replaces proposing a card and a link to it in the same turn. - Deleting a card drops pending links and nestings that name it (as rejecting a card already did), so no Accept is left that can't work. - A successful tool call now tells the model the proposal is pending until the writer accepts it, so it stops saying "I linked..." for a proposal. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nhyira, 11-01: the tool lines looked clustered, and since full proposal
text is shown, a long one wrapped with its "·" separator and badge on lines
of their own.
Each tool call is now a small block: a top row with the tool name, its
label and Accept/Reject (or the outcome) on the right, and the full text
underneath at any length. Pending proposals stand out (white, green edge);
decided ones fade back, with any note ("Its card was deleted.") under the
text; a refusal is one quiet row whose reason opens on request. The blocked
reason is no longer shown anywhere: since links need cards on the map, only
sessions saved before 4e1e843 can still have a link waiting on a pending
card.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…umbers Nhyira, 11-01: editing needed a double-click that sometimes didn't register (a few pixels of movement between clicks counts as a drag) and opened a smaller box that could close again a moment later, and long text scrolled inside it. - A card's text is now its edit box, styled as plain text: click anywhere in it and the caret goes there. Enter or clicking away saves (one undo step), Escape reverts, Shift+Enter is a new line. There is no separate editor to open, so nothing can open and close again. - The card grows to fit its text, so nothing scrolls inside it. A parent card's title stays two lines over its children until it is edited. - Cards are dragged by their top row (the number and labels). - Card numbers show as 1, 2, 3; the chat says "Accepted as card 3", and the instructions tell the coach to say "card 3", not its id c3. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…p to three lines A newly nested card was placed 48px into its parent, over the second line of the parent's title, and since f0e6ddc a long title was cut off mid-line (the old line clamp's ellipsis was lost when the text became an edit box). A parent's title now shows up to three lines, fading out if there is more; nested cards start 96px down, and siblings are 140px apart now that cards grow with their text. Found while framing the presentation screenshots. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
After the window got narrower, the draft is drawn narrower than its saved width (CSS min()), but dragging and the arrow keys started from the saved width: the edge didn't follow the pointer until it had moved by the difference, and the first ArrowRight did nothing. Both now start from the draft's drawn width. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4e1e843 added the block inside the evidence-rule block. Moved after it; no test changed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The browser ends a recognition session a moment after stop(), and start() before then throws, so pressing the mic again quickly did nothing and showed nothing. start() now waits for the previous session's end event and starts then; the ending session's last results are ignored, since the words are already in the box (the seed). Stopping while it waits cancels the restart. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Changes to the tools-first Mindmap in
next/. The current app insrc/is untouched.Matching and tools
near_cardonly use cards on the map (4e1e843). A pending card proposal is refused with a reason, at every level including L2. An accepted proposal's id is refused with the card id to use instead. Deleting a card drops the pending links and nestings that name it. A successful tool call now tells the model the proposal is pending, so it stops saying "I linked…". This reverses proposing a card and a link to it in the same turn (spec §4/§5.2 updated).Chat
src/ui/useSpeechToText.ts. Spoken words go into the message box; nothing is sent by voice alone. Typing or Send stops dictation, and late results after that are ignored. Pressing the mic right after stopping waits for the browser to end the previous session, then starts. In Firefox the button is disabled.Map and draft
Testing
npm testinnext/: 108/108.npx tsc --noEmit,npm run buildandnode scripts/verify-pages-build.mjs nextpass.Not checked: a real microphone; Safari or Edge; touch drag and touch editing; the resizer fix (8207a05) and mic-restart fix (9fbc273) in a real browser; a live coach turn on dictated text or under the map-only rule.
Known, not changed: the card text is the coach's pieces, so punctuation the coach adds ends up on the card. That includes apostrophes that change a word ("we'll" for a spoken "well"), plus "?", "$" and emoji. The writer still accepts or rejects every card. Tightening this to treat only punctuation as spaces, and to keep comparing symbols, is a possible follow-up.
🤖 Generated with Claude Code