- Batch candidates in groups of 50 (was 200) to avoid output token
truncation that caused all-zero scores
- Stream scored results via SSE as each batch completes instead of
waiting for all batches to finish
- Include solve_id in done event so validate works when results fit
in a single page
- Rewrite prompt to judge sentence coherence ("does it make sense")
rather than word predictability ("is it expected")
- Frontend inserts results in score-sorted order as they arrive
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Wire up Validate button in solver.js with showValidatePanel,
runValidation, and renderScoredResult functions. Add CSS for
score badges (green/yellow/red) and validate panel styling.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
The new Wiktionary dictionary already includes 31k multi-word nouns,
making the combinatorial adjective+noun phase redundant. Add two_word
parameter (default False) to solve_word_dictionary to opt in when needed.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Replace the old general frequency word list (55k entries including
non-nouns like "li", "ys", "be") with a curated noun dictionary from
djstrong/nouns-with-plurals (137k entries). Frequency-sorted using
wordfreq, filtered to ASCII-only entries with min 3 characters.
Source: https://github.com/djstrong/nouns-with-plurals
Co-Authored-By: Claude Opus 4.6 <[email protected]>
Sort word lists by Google Books frequency (most common first).
Add vocabulary dropdown (Common/Standard/Extended/Full) to word
mode UI that controls how many words are searched.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
When known_start was set with capitalized casing, the unknown portion was
forced to all-lowercase, breaking width measurements for multi-word names
(e.g., "hn doe" instead of "hn Doe"). Added _case_unknown_portion helper
that respects word boundaries. Also fixed effective_left/right kerning
context to use correctly cased characters from the display string.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Add [hidden] { display: none !important } to prevent CSS specificity overrides
- Cache matchMedia query instead of creating new MediaQueryList per call
- Guard setSheetSnap against being called on desktop
Co-Authored-By: Claude Opus 4.6 <[email protected]>
7-task plan for bottom-sheet responsive redesign covering HTML restructuring,
desktop/mobile CSS, sheet snap behavior, tab switching, and integration.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Add touch-action: none to #right-panel for reliable custom
touch handling
- Show delete button on mobile (no hover state on touch devices)
Co-Authored-By: Claude Opus 4.6 <[email protected]>
CSS-responsive approach with tab-based navigation at ≤768px,
full-screen solver modal, and single-finger touch pan.
Co-Authored-By: Claude Opus 4.6 <[email protected]>
- Replace redaction marker span with editable input for manual guesses
- Typing in the guess field sets r.preview and shows Accept button
- drawRedactionPreview now renders left+guess+right as continuous text
with natural font kerning (no fixed gap width during preview)
- Active preview: green left, yellow highlighted guess, green right
- Inactive preview: full merged text in yellow
Co-Authored-By: Claude Opus 4.6 <[email protected]>
The approved draw function was only drawing text with no overlay on the
redaction box area, making it look like the redaction disappeared.
Now draws a blue semi-transparent box over the redaction area (like
other states) plus the merged blue text along the line.
Also made the approved CSS badge green (--accent) to distinguish it
from the blue analyzed badge.
Co-Authored-By: Claude Opus 4.6 <[email protected]>