Wave 3 — the words: the comparison in sentences, and the moment the core set is done - #26
Merged
Merged
Conversation
The charts say everything this page knows and a screen reader can read
none of it. This panel says the same thing in prose: what the two of you
answered the same, where you differ and what each of you actually said,
which dealbreakers need a conversation, why fit is two numbers instead
of one, and what none of it covers. It sits right after the headline,
because it is also what anyone reading under stress reads first — and
people read compatibility results under stress.
The phrasing rules are the feature, so they are written down at the top
of the module and pinned by a spec: describe differences, never grade
them; never render a verdict on the relationship; attribute by creature
name, because the second person has a name too; and always say what was
not counted, so a number from nine shared answers cannot pass for one
from ninety. The spec bans the graded vocabulary outright and bans
minimisers as a pattern ("only 40%") rather than as words — "shown only
because you both said yes" is precise, and banning it would make the
copy worse.
Two category errors turned up by reading the rendered output rather than
by any assertion:
Identity is not a difference. The first draft said "On Pronouns, X said
they/them and Y said she/her" as a headline gap. Who someone is belongs
in their profile and in the answer grid, never in a sentence about where
two people diverge — for this audience especially. The About section is
now excluded from both the agreement and difference sentences.
Care is not a similarity. Excluding identity promoted the give/receive
pair into the same slot, so the page was about to say "you differ on how
care lands best" three lines above "that's a difference in kind, not
effort". Complement pairs are already excluded from plain similarity in
scores.ts for exactly this reason; the narrative now honours that.
Also drops the repeat: an item that has a dealbreaker sentence no longer
gets a plain difference sentence too, which was burying the one that
mattered under the one that didn't.
itemLabel moves into core on the way past. Five call sites had their own
copy in three variants — falling back to the raw id, or to the scale's
anchors — and this would have been the sixth.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaDanzXTm6kVSgbNh1eNrs
Two small things, both about a threshold someone crosses without being
told.
Finishing the core tier is when a profile first becomes worth sharing,
and it used to pass as an inline label quietly changing its wording. It
now gets one card, once, that says the part people miss: a finished
profile still compares against nothing until someone else's phrase turns
up. So the card offers the two moves that follow from that — copy your
link, or keep the phrase someone gave you.
It waits for the edit-phrase notice to be cleared first. Two loud cards
on one screen costs the more important one its attention, and losing the
edit phrase is the more important one. Dismissal is per creature and
survives a reload, following the notice's own pattern.
The notice itself gains the thing it was always missing: "somewhere I
can get back to" is much easier to tick than to do, and now there is a
somewhere — the backup card, which did not exist when that sentence was
written. That is B3 as the plan itself worded it ("tick 'I've saved
this' next to the backup-card link"), rather than the retype challenge
listed beside it, which would tax the instant hatch the same plan asks
us to protect.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UaDanzXTm6kVSgbNh1eNrs
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.
The third wave of
docs/feature-plan.md: the copy-heavy work, now that the structure around it is settled.C2 · The comparison, in sentences
The charts say everything this page knows, and a screen reader can read none of it. The new panel says the same thing in prose: what you both answered the same, where you differ and what each of you actually said, which dealbreakers need a conversation, why fit is two numbers instead of one, and what none of it covers. It sits right after the headline, because it is also what anyone reading under stress reads first.
The phrasing rules are the feature, so they are written at the top of the module and pinned by a spec: describe differences, never grade them; never render a verdict on the relationship; attribute by creature name, because the second person has a name too; always say what was not counted. The spec bans the graded vocabulary outright, and bans minimisers as a pattern (
only 40%) rather than as words — "shown only because you both said yes" is precise, and banning it would make the copy worse.Two category errors turned up by reading the rendered output, not by any assertion:
Identity is not a difference. The first draft led with "On Pronouns, X said they/them and Y said she/her" as a headline gap. Who someone is belongs in their profile and the answer grid, never in a sentence about where two people diverge — for this audience especially. The About section is now excluded from both the agreement and difference sentences.
Care is not a similarity. Excluding identity promoted the give/receive pair into that slot, so the page was about to say "you differ on how care lands best" three lines above "that's a difference in kind, not effort".
scores.tsalready excludes complement pairs from plain similarity for exactly this reason; the narrative now honours it.It also stops repeating itself: an item with a dealbreaker sentence no longer gets a plain difference sentence too, which was burying the urgent line under a duller one.
A4 · The core set becomes a moment
coreDone()and a progress ring already existed, so the gap was not tracking — it was that crossing the threshold passed as an inline label quietly changing its wording. It now gets one card, once, that says the part people miss: a finished profile still compares against nothing until someone else's phrase turns up. So it offers the two moves that follow — copy your link, or keep a phrase someone gave you.It waits for the edit-phrase notice to be cleared first: two loud cards on one screen costs the more important one its attention, and losing the edit phrase is the more important one. Dismissal is per creature and survives a reload, following the notice's own pattern.
B3 · "I've saved it" gets somewhere to go
Half-built already — the acknowledgement checkbox and its gate existed (along with an honest touch: the component tracks whether the clipboard write actually landed, because "I clicked copy" is not evidence the phrase was saved). What it lacked was a destination, because the backup card did not exist when that sentence was written. It does now, so the notice links to it.
That is B3 as this plan worded it ("tick 'I've saved this' next to the backup-card link") rather than the retype challenge listed beside it, which would tax the instant hatch the same plan asks us to protect. The reasoning is recorded in the plan doc rather than left as a silent omission.
Housekeeping
itemLabelmoves into core. Five call sites had their own copy in three variants — falling back to the raw id, or to the scale's anchors — and the narrative would have been the sixth.Verification
Full ladder green:
format:check, both typechecks, all four unit suites (23 core files / 4 ui / 6 app / 2 server),build, ande2e. The e2e now also asserts the narrative renders on the demo page, frames the dealbreaker as a conversation, and never frames identity as a difference.Generated by Claude Code