Commit Graph

488 Commits

Author SHA1 Message Date
8d61f22ba4 fix(sonar): merge identical branches in segment merge (javascript:S1871)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 12:59:44 +02:00
4f8a5c6e15 fix(sonar): drop useless assignments (javascript:S1854)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 12:58:35 +02:00
8f856c8f8b fix(sonar): move default out of runPool parameter list (javascript:S1788)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 12:00:33 +02:00
e81ebbc45b fix(sonar): extract assignments from expressions (javascript:S1121)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 11:59:52 +02:00
1b3fff1e0d fix(sonar): ACT/SCENE heading regex no longer matches empty numeral (javascript:S5842)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 11:30:12 +02:00
dda8ffa133 chore(build): rebuild static bundle after sonar JS fixes
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 05:12:42 +02:00
2cd14c9ddf fix(sonar): wrap backendVoiceId in arrow for map (javascript:S7727)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 04:06:35 +02:00
11ab1ff677 fix(sonar): use replaceAll string instead of control-char regex (javascript:S6324)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 03:51:04 +02:00
1d65a4df7c fix(sonar): remove unused variables and commented-out code
Removes 43 small Sonar findings (unused locals, dead helpers, a misread comment); behaviour unchanged. CHANGELOG entry was already swept into 9f78a15.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 03:42:44 +02:00
a60b7e555d fix(sonar): add localeCompare compare function to bare sort() calls (javascript:S2871)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 03:32:10 +02:00
bae588375f fix(conversation): size metrics charts to the column so text is legible
Charts use the rendered width as viewBox (re-rendered on resize), 11px text,
two x ticks, larger dot for single points. Includes docs/changelog for the
mic colours, Turn history fix and chart size.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 02:14:55 +02:00
caee289bcc fix(conversation): keep Turn history rows visible in the Latency column
The rows were added to the DOM but the overflow:auto list was shrunk to zero
height by the flex column panel once the charts filled it. Adds tests for
#n + time rows, error rows and stats arriving after done.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 02:14:55 +02:00
a3ba3581fe feat(conversation): red/blue mic button with aria-pressed state
Red while the mic is hot (live or recording), blue when off; label toggles
Stop/Start microphone (DE+EN); pulse only without reduced motion; reset to
blue when microphone access fails.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 02:14:49 +02:00
0a30b00d7f refactor(conversation): show metrics in the latency column instead of a second tab
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 01:30:27 +02:00
e7a25d80ff feat(conversation): metrics view with TTFB charts and token usage
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 00:48:32 +02:00
60eb108360 fix(ui): surface silently swallowed save and fetch errors
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 00:44:31 +02:00
dea6286775 feat(conversation): pick the LLM endpoint from the configured language models
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 00:33:30 +02:00
8ce8e791b2 feat(conversation): thinking on/off switch
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-06 00:21:11 +02:00
a2f9c12b2d Release v1.60.0
Some checks failed
Test and SonarQube / quality (push) Has been cancelled
2026-10-04 20:12:46 +02:00
2f4c8529e9 fix(i18n): remove duplicate keys and dead frontend branches
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 18:58:14 +02:00
b7cfe056a3 fix(voices): rename archetype say helper to avoid global collision
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 18:38:44 +02:00
b33559884c feat(voices): archetype gallery UI
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 18:23:14 +02:00
281869709b fix(voices): drop the Source unknown badge from list rows
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 18:22:41 +02:00
c0a5d54763 fix(voices): robust LibriVox search and expose export_provenance_default
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 18:07:22 +02:00
772c43d7f0 feat(voices): LibriVox and Wikimedia Commons voice sources
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 17:42:36 +02:00
9b169037a4 feat(tts): inline tags in generate, audiobook and magazine paths
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 17:35:18 +02:00
5a7c73ea42 feat(export): provenance tags and optional disclosure for exported audio
ID3 provenance tags (synthetic speech, generator, version, date, opt-in
voice name) on magazine MP3/ZIP/EPUB exports via a stream-copied temp copy;
verify endpoint and CLI; AudioSeal tier is a documented stub.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 17:02:41 +02:00
91843e95e6 feat(voices): optional vocal isolation for URL imports
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 16:50:14 +02:00
e0daafd4e1 feat(voices): export and import voice bundles
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 16:42:28 +02:00
781bf6e7f2 feat(voices): consent and provenance field per voice
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 16:39:32 +02:00
b36423457b feat(design): auto-pick the best seed by scored candidates
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 16:37:58 +02:00
a0cd7b867f feat(voices): show audio problems in the voice library
Single-voice health endpoint (GET /api/voices/{id}/health), problems stored in
meta on import, shown in the Try-out voice panel; architecture note and docs.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 16:35:10 +02:00
67537310d0 feat(design): attribute chips for voice-design prompts
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 16:34:06 +02:00
19283a53a4 feat(voices): timestamped audio problem flags in voice health
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 16:10:56 +02:00
b90c9ce51a chore(release): v1.59.0
Some checks are pending
Test and SonarQube / quality (push) Waiting to run
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-04 00:42:01 +02:00
a8177711f4 feat(characters): global cast view in the sidebar and per-book characters inside Studio
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 22:29:42 +02:00
a60a5a92ca chore(release): v1.58.0
Some checks are pending
Test and SonarQube / quality (push) Waiting to run
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 20:21:20 +02:00
03ebd9ba35 feat(magazine): show page labels, display titles and merge suggestions
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 19:22:55 +02:00
42bb556db9 fix(magazine): approving a review page keeps all blocks of a multi-page article
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 14:48:37 +02:00
572fae892d fix(magazine): fit driving-mode text inside the frame and offer less text
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 14:46:31 +02:00
488e57e609 feat(magazine): clearer driving-mode menu with switches and theme selector
Menu is grouped into View (Picture/Text/Split radios), Show and Playback
(real switches) and Theme (Light|Auto|Dark segmented control). Fixes the
Dark option looking disabled: its data-theme=dark attribute matched the
app-wide dark palette selector. Adds automatic advance to the next article
with audio (switch, default on) with End of magazine state.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 14:24:05 +02:00
1f812d2faf fix(characters): merge profiles only on real names, keep other cast names, reasoning and foreign quotes out of a character
Real-library audit (270 records) traced the data damage to:
- identity matching on ANY shared token ("Zwerg", "der Zwerg", "Mann") with
  "longer text wins" merging (Arthag b02 = Kolon's species/relationships), and
- csRosterCanonicalName renaming a sheet to the first cast name among its
  aliases, which saved 16 whole-sheet copies (Zwerg/Kolon = Arthag b03,
  Fremder = Mann, Alchimist = Promos ...).

Fixes:
- static/js/character-identity.js + core/character_records.py: generic labels
  are never identity evidence; csFindMergeKey, csConsolidateAliasDuplicates,
  csRosterCanonicalName, clSameIdentity use it; own name always wins; clUpsert
  writes to the exact-name record before any alias scan; no seed rename onto a
  name that has its own record.
- _charsheets_parse: in cast-target mode drop other cast members' names from
  aliases / first / last name (Kolon: "Sharraz Garthai"), strip reasoning
  leakage ("Warte:", "Der Text sagt ...") from every text field.
- _character_scene_evidence: only a quote naming the character is used,
  otherwise its own mannerisms (16 panels showed another character's scene).
- _character_age_category: Junge/Mädchen/boy/girl, number words, Sommer/
  Winter ages, evidence clause, age-tagged quotes; "15 Jahre älter" is no age.
- scripts/audit_character_records.py (read-only) and
  scripts/clean_character_records.py (dry run by default, --apply backs up).

Tests: tests/test_character_record_hygiene.py, tests/character-identity.test.mjs.
Docs: architecture/character-extraction.md, Manual, CHANGELOG.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 14:09:53 +02:00
b9e7bcda7f chore(release): v1.57.0
Some checks are pending
Test and SonarQube / quality (push) Waiting to run
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 10:13:53 +02:00
5a69481f65 feat(magazine): night theme for driving mode (Auto/Light/Dark)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 09:15:28 +02:00
f120f3d4f4 style(magazine): separate driving-mode index rows with dividers and padding
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 09:07:13 +02:00
2ca79af530 style(magazine): airier index rows and light play buttons
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-10-03 08:55:27 +02:00
f13f884ab1 feat(magazine): driving index rows with play/resume buttons, author and listening status
Index rows reuse the playlist state helper (magListenState): round 44px play/resume/replay button,
smaller muted 'by Author', not played / partly played / played indicator with accessible text, live updates.
Also fix a stale word highlight in the lyrics view that made a driving-mode test fail.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 08:45:04 +02:00
9e5ea609ce feat(magazine): word-level timing via forced-aligner sidecar with player word highlight
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 00:37:40 +02:00
560b82b0ef perf(ui): lazy-render big sections to stay within the DOM node budget
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 23:13:19 +02:00
4d4dc334e7 fix(characters): keep rating stars visible beside the sticky name column on phones
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-02 22:31:13 +02:00