Repository navigation
TimbreCore: the Library, strength, the daily pick, Spell it's check (ADR-0013, ADR-0014) - #66
Open
ChaliceForAuri wants to merge 1 commit into
Open
ChaliceForAuri wants to merge 1 commit into
ChaliceForAuri wants to merge 1 commit into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
…ADR-0013, ADR-0014) The platform-neutral package GDR-0023 (decision 4) asked for, created with the Library so nothing moves twice. Foundation and Observation only, so the iPhone and the Watch import it too. - The Library: one store, five kinds (word, acronym, phrase, spelling, correction), each entry with meaning, example, provenance, tags and the events strength is derived from. One versioned JSON document in Application Support, written atomically; LibrarySync is the door sync comes through; merge is a union of events with tombstones. The three UserDefaults lists are imported once, in order, and left in place. - Strength is retrievability from events, FSRS-4.5 with its published defaults, never stored (ADR-0014). Pass and met are "good", fail is "again"; due is below 0.9; replay is order-independent. - The daily pick (GDR-0027): the weakest entry due at the start of the day, else a bundled word for the profile's lists; deterministic and the same all day. The met detector marks today's word from polished text. - Spell it's check: letters heard against the word, tolerant of letter names, doubles, "capital", hyphens, glued tokens and acronyms. - Corpora: Fixtures/spell.json (16 cases) and Fixtures/picks.json (8 cases), run by TimbreCoreTests and by timbre-eval --spell / --picks. TimbreKit depends on TimbreCore and re-exports it; Correction, Acronym, CorrectionTable, SentenceCapitalizer and the to-do parser moved over with their tests. VocabularyStore is replaced by the Library behind the same DictationController API, which also exposes the Library and marks today's word met after every dictation and spoken to-do. CI runs the new package's tests; CLAUDE.md and the architecture model describe the split; Backstage's JSON is regenerated. Core: 68 tests. Kit: 204 tests. Lint clean. The Mac app builds. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
ChaliceForAuri
force-pushed
the
companion-records
branch
from
October 21, 2026 20:59
0d00c4c to
b400e8e
Compare
ChaliceForAuri
force-pushed
the
timbrecore
branch
from
October 21, 2026 20:59
f7f94ed to
3d31cf7
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #64 (the records). Phase 1–2's engine: the platform-neutral package GDR-0023 decision 4 asked for, born with the Library so nothing moves twice.
What's in TimbreCore
Library,LibraryEntry,LibraryEvent,LibraryMerge,LibrarySync,Profile): one store, five kinds; meaning, example, provenance, tags, and the events strength is derived from. One versioned JSON document in Application Support, written atomically. Merge is a union of events by composed id;forgotis a tombstone. The threeUserDefaultslists import once, in order, and stay put for a downgrade.MetDetector: today's word in the polished text, whole word, case-insensitive, after corrections. Only the fact is recorded.SpellCheck: Spell it's deterministic check, tolerant of letter names, doubles, "capital", hyphens, glued tokens and acronyms. Its one blind spot is documented.Fixtures/spell.json(16 cases) andFixtures/picks.json(8 cases), run by the tests and bytimbre-eval --spell/--picks.Correction,Acronym,CorrectionTable,SentenceCapitalizer,Todo/TodoParser/TodoPhrasing.TimbreKit
Depends on TimbreCore and re-exports it, so the app shell still imports one module and the Xcode project is untouched.
VocabularyStoreis replaced by the Library behind the sameDictationControllerAPI (Settings keeps working unchanged), the controller exposeslibrary, and marks today's word met after every dictation and spoken to-do. The harness gains--spelland--picks.Records and docs
CLAUDE.md: layout, commands, the Library in the architecture, three conventions. The architecture model makes TimbreCore real. Backstage's JSON regenerated. CI runs the new package's tests.Verified
swift testTimbreCore: 68 tests, TimbreKit: 204 tests (28 moved over).swift-format lint --strictclean.timbre-eval --spell16/16,--picks8/8.xcodebuildof the Mac app: BUILD SUCCEEDED, with TimbreCore resolved transitively.gen:architecturevalidates the model;sync:docsregenerated.One corpus case changed my mind rather than the code: I had expected a failed drill to bring a word back the next morning. FSRS says a fail is a fresh exposure, so it returns in a few days, sooner than a plain fade. Case 03 records that this is intended, and ADR-0014 says so.
🤖 Generated with Claude Code