Skip to content

Releases: sbridel/carnet-du-poete

[2.22.0] "y" prononcé comme "i" — zéphyr rime enfin avec frémir

Choose a tag to compare

@sbridel sbridel released this 15 Aug 18:30
  • 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

Choose a tag to compare

@sbridel sbridel released this 11 Aug 05:22
  • 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").

[2.20.0] "Pétrichor" ne sonne plus comme "chien"

Choose a tag to compare

@sbridel sbridel released this 07 Aug 16:23
  • 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

Choose a tag to compare

@sbridel sbridel released this 07 Aug 06:36
  • 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):
      classifieRime now 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.

[2.18.0] Trame phonique, ratios de fréquence, et cinq bugs de fond corrigés

Choose a tag to compare

@sbridel sbridel released this 06 Aug 23:06
  • 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".

[2.17.0] Un nouveau volet Sonorités : allitérations, assonances, homéotéleutes

Choose a tag to compare

@sbridel sbridel released this 06 Aug 21:11
  • 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

Choose a tag to compare

@sbridel sbridel released this 04 Aug 21:37
  • 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).

[2.15.0] La numérotation des rimes ne redémarre plus à chaque strophe

Choose a tag to compare

@sbridel sbridel released this 04 Aug 20:48
  • 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

Choose a tag to compare

@sbridel sbridel released this 03 Aug 17:12
  • 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.

[2.13.0] — Filtrage par tags (ET/OU) et refonte visuelle du Hasard

Choose a tag to compare

@sbridel sbridel released this 02 Aug 09:13
  • 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).