feat(app): tags keep their case; dictionary tags read JLPT-N5, Noun

A tag is still its name, but no longer in lowercase: the name keeps the
case it was written in, and names that differ only in case are one tag
(ADR 0004, rule 2, amended). Two such tags from two devices fold into the
one with the smaller id, its case with it. Tags stored before stay
lowercase until renamed.

Words from the dictionary are tagged JLPT-N5 to JLPT-N1 and with their
word class (Noun, Verb, i-Adjective, na-Adjective, ...). Anki tags and
PDF chapter tags arrive as written.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-09 10:48:06 +02:00
commit c20578e421
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64
2 changed files with 148 additions and 95 deletions

View file

@ -15,8 +15,8 @@ import 'package:serverpod/serverpod.dart' as _is;
/// A tag a person gives cards (ADR 0004): a name to study and filter by. Synced; its
/// space owns it. The name is content, so it lives in the payload, like a
/// studyset's title. A tag is its name: a person has one tag per lowercase name, and
/// two with the same name, made on two devices offline, fold into one.
/// studyset's title. A tag is its name: a person has one tag per name, whatever its
/// case, and two with the same name, made on two devices offline, fold into one.
abstract class Tag
implements _is.TableRow<_is.UuidValue?>, _is.ProtocolSerialization {
Tag._({

View file

@ -1,7 +1,7 @@
### A tag a person gives cards (ADR 0004): a name to study and filter by. Synced; its
### space owns it. The name is content, so it lives in the payload, like a
### studyset's title. A tag is its name: a person has one tag per lowercase name, and
### two with the same name, made on two devices offline, fold into one.
### studyset's title. A tag is its name: a person has one tag per name, whatever its
### case, and two with the same name, made on two devices offline, fold into one.
class: Tag
table: tag
database: sync