Releases: sbridel/carnet-du-poete
Release list
[2.22.0] "y" prononcé comme "i" — zéphyr rime enfin avec frémir
- 2.22.0 — Fixed a real gap in the rhyme engine: a bare "y" that IS the vowel itself (not a
semi-consonant before another vowel, already handled separately) is pronounced exactly like
"i" — "zéphyr"/"frémir", "rugby"/"pari", "martyr"/"sortir" — but "yr" and "ir" were staying
two different keys for the same [iʁ] sound, so words spelled with a final "y" never matched
their "i"-spelled rhyme partners. Found via a real poem (thank you, Alucard) using "zéphyr" as
a rhyme for "frémir"/"souffrir" — confirmed correct by ear, wrong in the tool. Also worth
noting for anyone who ran into this already: this fix had actually been written and tested
earlier in the process of tracking the report down, but was left sitting in a working copy
and never actually packaged into a release — this version is the first one that genuinely
includes it, sorry for the runaround while we nailed down what was and wasn't shipped.
[2.21.0] Couleurs adoucies dans l'onglet Rimes
- 2.21.0 — Two ergonomic changes to the Rimes tab, both purely cosmetic, no behaviour
change:- The rhyme-quality pill colours (Pauvre/Suffisante/Riche/Très riche/Léonine) are noticeably
softer now — same hue family, less saturated, slightly lighter — instead of the fairly
strong original palette. Applies everywhere that palette is used: the pills themselves, the
small coloured left border on word chips in Rimes/Synonymes results, and the quality-summary
dots. Checked-pill text switched from white to a dark grey to keep it readable against the
lighter fills (white text on the lightened colours was dropping well below a readable
contrast ratio on some of them, most noticeably "Léonine").
- The rhyme-quality pill colours (Pauvre/Suffisante/Riche/Très riche/Léonine) are noticeably
[2.20.0] "Pétrichor" ne sonne plus comme "chien"
- 2.20.0 — A dedicated audit poem (built from real entries in Alucard's own
dictionnaire-perso.json) surfaced one more small gap: "ch" pronounced [k] instead of the
usual [ʃ] in a handful of Greek-origin/technical words — "pétrichor", "chœur", "chrome",
"chronique", "choral", "écho", "orchestre", "psychologie", "archéologie", "chaos", "chlore",
"chrétien", "technique", "technologie", "orchidée"... Fixed in both allitérations (for words
actually starting with "ch") and Trame phonique (for "ch" anywhere in the word, which is how
this was first noticed — "pétrichor" was landing in the same [ʃ] bucket as "chien"/"chaleur"
instead of its own [k] one). Small root-based exception list, not exhaustive, same pattern as
the other exceptions already in this section (CaReFuL, "-er" infinitives, "ill"...).
: [2.19.0] Audit sonorités : yod, e muet, doublons et dico prioritaire enfin cohérents
- 2.19.0 — A systematic audit pass over the Sonorités panel and the underlying rhyme engine,
triggered by real test cases from Alucard. Several genuine accuracy bugs found and fixed,
each confirmed by direct testing:- Trame phonique: doubled consonants ("addition", "attention", "couronne") were counted
twice instead of once; a lone "s" between two vowels ("poison", "maison") wasn't recognised
as [z]; "t" followed by "-tion" (not preceded by s/x) wasn't softened to [s] ("nation",
"national" — "question"/"gestion" correctly stay [t]); "ill" after a vowel is now recognised
as the yod glide [j] by default ("fille", "brillant"), with a proper exception list for
words where it stays a real double L ("ville", "tranquille", "mille"/million-milliard,
"distiller", "osciller", words ending in "-illaire", words starting with the "ill-" prefix,
and a few proper nouns/medical terms) — also fixed the "Trame phonique" section not using
the same stable per-theme colours as Allitérations, an inconsistency from 2.17.0. - Allitérations: a word covered by the phonetic dictionary could return a consonant found
anywhere in its transcription as if it were word-initial (fixed in 2.18.0 for "écrit"-like
cases); yod [j] is now recognised as a valid initial sound too ("ion", "yeux", "hier"),
dictionary and spelling-based alike. - The rhyme engine itself (used everywhere — rhyme scheme, Rimes tab, quality badges):
classifieRimenow checks the phonetic dictionary first when both words are covered by it,
falling back to the spelling approximation only when at least one isn't — previously the
approximation could return a match without the dictionary ever being consulted, even when
available and correct. Separately, "eille"/"ille" (yod) endings no longer collapse onto
plain "elle" endings ("abeille" was being treated as a perfect rhyme with "nouvelle") — a
dedicated key is computed for the yod case, using a marker character that mode assonance's
core-vowel comparison correctly skips (an early version of this fix accidentally broke
"fille"/"ville" assonance matching by using a marker that looked like a vowel itself). Also
fixed: a word's final mute e was being left dangling in the rhyme key when anchoring on the
vowel before it, making e.g. "vole" and "bol" — the exact same sound, [ɔl], differing only
in grammatical gender — compare as merely "assonance" instead of a full "rime" unless the
phonetic dictionary happened to override it. - Two remaining known gaps, found along the way but not fixed: verb infinitives in
"-iller"/"-eiller" (e.g. "travailler") still lose the yod distinction, since an earlier rule
converts their ending before the yod check can run; and words where the anchor vowel and a
trailing mute e merge into one written group ("vue" vs "vu") aren't yet reconciled the same
way "vole"/"bol" now are.
- Trame phonique: doubled consonants ("addition", "attention", "couronne") were counted
[2.18.0] Trame phonique, ratios de fréquence, et cinq bugs de fond corrigés
- 2.18.0 — Continued work on the Sonorités panel from 2.17.0:
- New: a 4th figure, "Trame phonique" (réseau consonantique) — a consonant sound that
recurs anywhere in a word (attack, middle, coda), not just word-initial like allitération.
Click a sound in its list to spotlight only its occurrences in the draft (everything else
dims), rather than adding a permanent 3rd highlight colour to the text. - New: a frequency ratio ("×N.N") next to every sound in the three lists (allitérations,
assonances, trame phonique), comparing how often it occurs in this poem against its normal
frequency in French — sourced from Lexique 3 (New, 2006) via C. dos Santos' thesis (Lyon 2,
2007), which breaks consonant frequency down by position in the syllable. Allitération uses
the word-initial-position figures specifically, trame phonique the all-positions figures —
the two can differ a lot (e.g. /ʁ/ is 3.7% word-initial but 30.4% after a vowel), so using
one shared number for both would have been misleading. - Fixed several real accuracy issues surfaced while building the above, all confirmed by
direct testing: an off-by-N position bug meant highlighted letters could land on the wrong
character for any elided word (l'/d'/qu'...); "c"/"g" followed by an accented e/i/y (é,
è, ê, ë, î, ï) wasn't softened to [s]/[ʒ] — the regex only matched plain unaccented letters,
so "Cérynie" was coloured as if it started with [k]; silent final consonants (the "t" in
"forêt", "offrant", "chantant"...) were counted as if pronounced — now skipped by default
except c/r/f/l ("CaReFuL"), with -er infinitives (r silent) as a further exception to that;
"n"/"m" absorbed into a preceding nasal vowel (démente, argentin — neither has an audible
[n]) were being counted as their own consonant sound; a word found in the phonetic
dictionary could return a consonant found anywhere in its transcription as if it were the
word-initial sound, even for vowel-initial words like "écrit" or "offrant".
- New: a 4th figure, "Trame phonique" (réseau consonantique) — a consonant sound that
[2.17.0] Un nouveau volet Sonorités : allitérations, assonances, homéotéleutes
-
2.17.0 — New "Sonorités" panel in the Syllabes tab (flip the card with the button next to
Export/Copy/Clear — now a cyan pill on the left): detects allitérations (repeated initial
consonant sound), internal assonances (repeated vowel, not just end-of-line rhyme), and
homéotéleutes (echoing word endings elsewhere in the poem, not just the rhyme scheme — only
surfaced when at least one occurrence is mid-line, otherwise it would just restate the
existing rhyme scheme). Results show as a list (word/line references) and as coloured
highlighting directly in the draft, with a legend. Three grouping levels — exact sounds,
simplified families (manner of articulation / vowel timbre), or extended families (adds
voiced/voiceless distinctions) — with colours kept stable per theme across all three levels
rather than reassigned by order of appearance. Also: "Exclure mots outils", a seuil (minimum
occurrences, default 3), and "Surligner seulement les 3 plus fréquents" to keep the draft
readable on sonorité-heavy poems. Several real coverage bugs fixed along the way: "oi"/"ui"
and mid-word "eau"/"au" weren't recognised as vowel sounds at all; nasal vowels ("chantant",
"jasmin"...) weren't being detected as nasal; the dictionary's phonetic alphabet (R/S/Z/J)
didn't match the fallback heuristic's symbols (r/ʃ/ʒ/ɲ), so dictionary-covered words formed
their own stray one-word "family" instead of joining the right group; a word's own final mute
e was counted as an assonance with itself.The Guide tab got a matching new section, plus a
reorganisation (rhymes and poem forms were each split across unrelated sections) and a
collapsible table of contents.Also, in the Synonymes tab: each synonym/antonym chip now
shows its syllable count, and a new "syllable count" dropdown filters results down to a
given count — same style as the existing syllable filter in the Rimes tab.
[2.16.0] L'onglet Rimes rejoint le look Hasard/Syllabes
- 2.16.0 — Rimes tab ergonomics pass and a real filtering bug fix:
- Fixed: the rhyme-quality filters (Pauvre/Suffisante/Riche+/Très riche/Léonine) had a
silent edge case — unchecking every one of the 3 main checkboxes was treated internally as
"no filter" instead of "show nothing", and the Très riche/Léonine sub-filters could only
narrow within Riche+, never exclude the plain "riche" category on their own. Checking
just "Léonine", for instance, still silently showed "Suffisante" results too. The 5
qualities are now independent, always-applied checkboxes (Riche is no longer a parent that
can only be narrowed, it's just one of the five) — unchecking all of them now correctly
shows nothing. "Riche+" is kept as a one-click action button that checks/unchecks
Riche + Très riche + Léonine together, but it's no longer a piece of state itself, so it
can't drift out of sync with the checkboxes it acts on. - The filter checkboxes, the "Toutes syllabes" dropdown, and "Mode assonance" are now
pill-style buttons matching the Hasard/Syllabes tabs, coloured to match each quality's
badge colour in the results below; "Mode assonance" moved onto the same row as "Compléter
en ligne", and the syllable-count dropdown got a small ▾ to signal it opens a menu. - "Pauvre" is now unchecked by default (Suffisante/Riche/Très riche/Léonine still on).
- Fixed: the rhyme-quality filters (Pauvre/Suffisante/Riche+/Très riche/Léonine) had a
[2.15.0] La numérotation des rimes ne redémarre plus à chaque strophe
- 2.15.0 — New "Rimes continues entre strophes" toggle in the Syllabes tab: by default each
stanza's rhyme lettering (A, B, C...) restarts at A, which meant a sonnet's tercets always
came out as AAB/AAB instead of the conventional CCD/EED continuing on from the quatrains'
ABBA/ABBA. Toggling it on shares the lettering across the whole poem instead — now on by
default, alongside "Couleurs de rimes" (previously off by default). Also reworked the
Syllabes toolbar: the display toggles are now pill-style buttons (matching the Hasard tab's
look), and Export/Copy/Clear moved to a compact icon row above the draft box.
[2.14.0]Le "-ent" verbal enfin reconnu comme e muet
- 2.14.0 — Two fixes to the syllable counter specifically (Syllabes tab /
analyseLigne
— a separate engine from the rhyme one, they'd never shared any logic before this):- Fixed: a verse ending on a 3rd-person-plural verb ("...qu'elles pleurent") was counted
one syllable too many. The mute-e detection only recognised a literal final "e" (rose,
chante) — never the "-ent" of "ils/elles pleurent, chantent...", which is the exact same
silent sound, just spelled differently. Classical versification confirms this ending never
counts at the end of a line, same as any other mute e (checked against several current
French versification references while fixing this). - Since "-ent" is genuinely ambiguous from spelling alone (silent 3rd-plural verb ending in
pleurent, but a real pronounced [ɑ̃] in nouns/adjectives like récent, argent,
moment, président...), the fix now checks the extended phonetic dictionary first when
available — exact, no guessing (a transcription ending in a consonant means the "-ent"
added no sound at all; ending in the nasal vowel means it's genuinely pronounced) — and
falls back to a curated list of ~70 common non-verb exceptions only for words outside the
dictionary, so the fix still helps even without one configured.
- Fixed: a verse ending on a 3rd-person-plural verb ("...qu'elles pleurent") was counted
[2.13.0] — Filtrage par tags (ET/OU) et refonte visuelle du Hasard
- 2.13.0 — Large rework of the Hasard tab's tag filtering, prompted by importing a big
batch of words (the classic "one tag now dwarfs every other in volume" problem) and by a
visual redesign pass on the whole filter area:- Filtering semantics, please read if combining tags: checking several tags is OR by
default (matches any of them) — with an uneven tag distribution, OR-combining a huge
tag with a small one mostly just gives the huge one back. A new "Tous les tags cochés
(ET)" toggle switches to requiring every checked tag at once for a real intersection.
A further "+ au moins un tag en plus de ceux cochés" toggle asks for the checked
tag(s) plus any other tag on top, generic rather than hardcoded to one specific tag. - Fixed: the live pool counter used the new ET/"+1 tag" options, but the actual draw
button forgot to pass them along and used the old OR-only logic — the counter said one
number, the draw came from a bigger pool. Both now share the exact same filtering call. - The exclusion review mode ("🚫 Explorer les exclus") is no longer a pseudo-tag mutually
exclusive with everything else — it's its own toggle now, and combines properly with tag
filters (e.g. review just the excluded words also tagged "méral"). - New "🏷️ Explorer les multi-tagués" shortcut (2+ tags at once), the mirror of the existing
"📭 Masquer les mots déjà tagués" (0 tags) — both now based on a shared helper that
excludes the reserved "exclu" tag from the count, so review mode doesn't skew it. - The "☆ Explorer" bandeau shortcut is now fixed to your "like" tag specifically, instead of
"whichever tag is used most" — a bulk import's tag can otherwise dwarf your own in raw
count without being more useful as a shortcut. - Stats panel gained a per-tag breakdown and every tag combination actually observed in your
dictionary (not all theoretically possible ones, just the real ones). - Fixed: merging two notes for the same word (via "🧹 Nettoyer et fusionner" in Settings,
or a re-import) used to silently keep whichever note was seen first, discarding the other
even if it was richer. Now: if one note fully contains the other, the more complete one
wins; if they genuinely differ, both are kept, joined by a compact "· · ·" separator at
render time (works retroactively on already-merged notes too, no data migration needed). - Fixed: notes imported from OCR'd/scanned sources often have arbitrary mid-sentence line
breaks (fixed-width original page layout) — now flattened to normal flowing text instead of
rendering as ragged short lines. - Visual pass on the whole filter area: harmonised pill shapes for the top shortcuts, two
colour-coded collapsible sections (violet = include, gold = exclude — freeing up red to
mean only "the drawn word" and "Graver"), badges showing active-filter counts even while
collapsed, mutually-exclusive "voir tous les tags" panels (opening one closes the other),
and the draw button/word card restructured into a single visual block (button now above
the result, definition text justified instead of centered, "Graver" moved after the
tagging controls since you tag first and commit second).
- Filtering semantics, please read if combining tags: checking several tags is OR by