Skip to content

Roasty's lines are content, not a bank — no language folder can reach them #604

Description

@maximsan

Part of #345. Blocks every language shipping.

What

Roasty's spoken lines are reader-facing prose that no language folder can reach.
lib/features/companion/data/companion_lines_repository.dart reads
assets/content/companion_lines.json straight off rootBundle, bypassing the
bank loader and the language overlay every other content file goes through.

The file is shaped differently from a bank: a map of occasion → list of lines
(lessonComplete, moduleComplete, courseComplete, keepSharpComplete,
challengeComplete, streakMilestone) — 18 lines, no ids, no envelope. That
shape is why it was left out, not an oversight: an id-keyed overlay has nothing
to key on.

Why it blocks: ADR-0026
makes complete the bar for offering a language, and complete means every piece
of reader-facing prose. While these lines sit outside the mechanism, no language
can honestly be marked complete — Roasty would keep speaking English in a Polish
app.

Notes

Giving each line a stable id is the whole job; once the file is a bank it loads
through loadBank like everything else and needs no new mechanism.

Settled while building: a language ships the same number of quips as
English (ADR-0029). One record per line keeps the per-line review marks
ADR-0026 exists for; a per-occasion list would have bought length freedom and
lost them.

Acceptance criteria

  • The lines load through loadBank, and a staged language folder changes
    what Roasty says. — companion_lines_bank_test.dart stages a Polish
    folder and asserts Roasty's line changes, and that an omitted line stays
    English.
  • Every line has a stable id that survives re-authoring the file. — ids are
    names, not positions (rl-nice-brew), so reordering or rewriting a line
    leaves the translation attached; the same test asserts all 18 are unique.

Built in #617 — green on every gate, plus the smoke suite run by hand
(it gates main, not PRs).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

backlogReal and agreed, but not scheduled — do not pick this up as ready workfeature-buildA screen or mechanic the app does not have yetwayfinder:taskWayfinder task ticket

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions