at.kotoba.state
Schema Diff
+1 -1
Compatibility Analysis
Backward Compatible
No changes detected.
1
1
{
2
2
"id": "at.kotoba.state",
3
3
"defs": {
4
4
"main": {
5
5
"key": "literal:self",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
10
"updatedAt",
11
11
"glyphs",
12
12
"confusion"
13
13
],
14
14
"properties": {
15
15
"glyphs": {
16
16
"type": "unknown",
17
-
"description": "Map keyed by glyph -> { box:int, lastSeen:str, ewmaParseMs:int|null, seen:int, missed:int }. All-integer already. `unknown` because lexicons have no dynamic-key map type (see README)."
17
+
"description": "Map keyed by glyph -> { box:int, lastSeen:str, modes:{ tap:{seen,missed,ewmaParseMs|null}, type:{seen,missed,ewmaParseMs|null} } }. Per-mode (tap vs type) success + latency; box is shared. All-integer. Legacy flat records ({box,ewmaParseMs,seen,missed}) are migrated to tap on read. `unknown` because lexicons have no dynamic-key map type (see README)."
18
18
},
19
19
"confusion": {
20
20
"type": "unknown",
21
21
"description": "Directed, single-kana only: shown glyph -> { answered-as romaji: count }. Counts are decayed (x0.9/session) so the app stores them as fixed-point ×10000 INTEGERS (no float type). `unknown` map; the app owns the value scaling at the record edge."
22
22
},
23
23
"updatedAt": {
24
24
"type": "string",
25
25
"format": "datetime"
26
26
}
27
27
}
28
28
},
29
29
"description": "Single overwritten record: per-glyph SRS state + the directed confusion map. Read once at startup; overwritten on flush. rkey is literally `self`."
30
30
}
31
31
},
32
32
"$type": "com.atproto.lexicon.schema",
33
33
"lexicon": 1
34
34
}