Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/decisions/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,4 @@ Two kinds of records live here. The boundary rule:
| [0020](gdr/0020-nunito.md) | Nunito: the rounded face (amends 0019) | Accepted |
| [0021](gdr/0021-the-wordmark.md) | The wordmark: bars beside "timbre", stroke 3; an underlined secondary (amends 0019, 0017) | Accepted |
| [0022](gdr/0022-nunito-sans-for-text.md) | Nunito Sans for text; Nunito keeps the headlines (amends 0020) | Accepted |
| [0023](gdr/0023-the-library.md) | The Library: one store, five kinds, synced by iCloud, practised by voice | Accepted |
24 changes: 24 additions & 0 deletions docs/decisions/gdr/0023-the-library.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# 0023 — The Library: one store, five kinds, synced by iCloud, practised by voice

- **Status:** Accepted
- **Date:** 2026-10-14
- **Builds on:** [GDR-0001](0001-local-only-free-no-account.md) (the claim), [GDR-0006](0006-app-never-phones-home.md) (the boundary), [GDR-0010](0010-optional-icloud-sync-of-the-personal-dictionary.md) (iCloud for the dictionary), [GDR-0011](0011-taught-corrections-before-the-model.md) and [GDR-0012](0012-command-mode.md) (what the Library replaces and feeds)
- **Decides:** the five questions in `docs/design/product-map.md` §8

## Context

Hugo wants Timbre to make him better at four things: spelling, vocabulary, phrases, acronyms. The product map (2026-10-11) laid out how the product grows to do that — a Library, a phone, sync, practice — and ended with five decisions. They were walked through one at a time on 2026-10-14, each with its alternatives, and taken as follows.

## Decisions

1. **The Library syncs through iCloud, not an account.** CloudKit, private database, the user's own account; Apple's daemons move the data and the binary still makes zero requests. The store is built behind a sync interface so an account backend could be added later. An account becomes a decision on the day a non-Apple Library client is wanted, with its own record and its own change to `/network`. Until then, "Apple pure" is the product, not a tier.
2. **Timbre for iPhone is a companion.** The Library in your pocket: review, practise, word of the day, add a word you heard. It does not dictate into other apps — iOS cannot — and a keyboard extension is not planned. If one is ever wanted it is a record of its own.
3. **One Library, five kinds.** `word`, `acronym`, `phrase`, `spelling`, `correction`, replacing the three Settings lists. Every entry carries its meaning, an example, where it came from, industry tags, a strength that practice raises and time lowers, and its history. Vocabulary is the word entries; definitions are the acronym entries; corrections stay corrections. The three lists migrate on the Mac first, with nothing lost; Settings › Dictionary becomes Settings › Library with a kind filter. The polisher, explain and the correction table read the same store through the same interface, and the corpus proves the behaviour is unchanged.
4. **A platform-neutral package, TimbreCore, is created with the Library.** The Library, pure parsing, practice scoring and the sync interface live there; no AppKit. TimbreKit imports it and keeps the macOS pipeline; the iPhone app imports only TimbreCore. The rule for what goes where is an ADR written with the split.
5. **Practice uses the voice, and every drill ships with a guardrail and a corpus.** Spell it (say the word, spell it aloud; the recogniser checks the letters), Say it (use it in a sentence; the on-device model judges the meaning), Explain it (answer the card by voice), the word of the day (weakest entries first, then a bundled list for the profile's industry, as a local notification), and the private kind of gamification — strength, streaks, a weekly review, no leaderboard. Each drill's checks go on the Evals page next to the polisher's. Spell it ships first, because it needs no model judgment.

## Consequences

- Phases 1–4 of the product map are now the plan: the Library on the Mac with the `TimbreCore` split; iCloud sync proved on two Macs with `nettop` still empty; the iPhone companion; Spell it with its corpus. Each phase is its own pull request and its own measurement.
- Nothing here changes a claim: the headline keeps one asterisk and `/network` keeps one entry.
- A Library entry is the user's. The Mac app transmits none of it; iCloud carries it under the user's own account.
20 changes: 10 additions & 10 deletions docs/design/product-map.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Timbre, the whole product

*2026-10-11 · Status: proposed map, for the decisions below. Constraining
records: GDR-0001, GDR-0006, GDR-0010, GDR-0013. This document is where
the product is planned as one thing; each piece that lands still gets its
own record.*
*2026-10-11 · Status: the map; its five decisions were taken on 2026-10-14
and are recorded in GDR-0023. Constraining records: GDR-0001, GDR-0006,
GDR-0010, GDR-0013. This document is where the product is planned as one
thing; each piece that lands still gets its own record.*

Timbre started as a key you hold to talk. It is about to become the place
where the words you use get better: spelling, vocabulary, phrases,
Expand Down Expand Up @@ -119,10 +119,10 @@ That split is a record of its own (an ADR) before the first iOS line.
| 5 | **Profile-aware explain** on the Mac. | A commands corpus case per industry. |
| — | *Account and cross-platform.* | Decided when phase 3 has users asking. |

## 8. Decisions this map asks for
## 8. Decisions this map asked for — taken 2026-10-14 (GDR-0023)

1. **Sync by iCloud first, account later or never** (§4).
2. **The iPhone app is a companion** — the Library and practice — not a dictation app (§2).
3. **One Library, five kinds**, replacing the three Settings lists (§3).
4. **`TimbreCore`** split before the first iOS file (§6).
5. **Practice uses the voice** — drills are scored like commands, with a corpus (§5).
1. **Sync by iCloud first, account later or never** (§4). Taken: iCloud first; the store built behind a sync interface.
2. **The iPhone app is a companion** — the Library and practice — not a dictation app (§2). Taken: companion; no keyboard extension planned.
3. **One Library, five kinds**, replacing the three Settings lists (§3). Taken: five kinds, migrated on the Mac first.
4. **`TimbreCore`** split before the first iOS file (§6). Taken: created with the Library.
5. **Practice uses the voice** — drills are scored like commands, with a corpus (§5). Taken: Spell it first.
35 changes: 35 additions & 0 deletions web/src/lib/decisions/records.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,39 @@
[
{
"id": "GDR-0023",
"kind": "GDR",
"number": "0023",
"slug": "the-library",
"path": "docs/decisions/gdr/0023-the-library.md",
"title": "The Library: one store, five kinds, synced by iCloud, practised by voice",
"status": "Accepted",
"statusKind": "accepted",
"statusNote": null,
"supersededBy": null,
"supersedes": [],
"date": "2026-10-14",
"relations": [
{
"label": "Builds on",
"summary": "GDR-0001 (the claim), GDR-0006 (the boundary), GDR-0010 (iCloud for the…",
"refs": [
"GDR-0001",
"GDR-0006",
"GDR-0010",
"GDR-0011",
"GDR-0012"
]
},
{
"label": "Decides",
"summary": "the five questions in docs/design/product-map.md §8",
"refs": []
}
],
"excerpt": "Hugo wants Timbre to make him better at four things: spelling, vocabulary, phrases, acronyms. The product map (2026-10-11) laid out how the product grows to do that — a Library, a phone, sync, practice — and ended with five decisions. They were walked through one at a time on 2026-10-14, each with its alternatives, and taken as follows.",
"plain": "Accepted.\nContext.\nHugo wants Timbre to make him better at four things: spelling, vocabulary, phrases, acronyms. The product map (2026-10-11) laid out how the product grows to do that — a Library, a phone, sync, practice — and ended with five decisions. They were walked through one at a time on 2026-10-14, each with its alternatives, and taken as follows.\nDecisions.\n1. The Library syncs through iCloud, not an account. CloudKit, private database, the user's own account; Apple's daemons move the data and the binary still makes zero requests. The store is built behind a sync interface so an account backend could be added later. An account becomes a decision on the day a non-Apple Library client is wanted, with its own record and its own change to /network. Until then, \"Apple pure\" is the product, not a tier.\n2. Timbre for iPhone is a companion. The Library in your pocket: review, practise, word of the day, add a word you heard. It does not dictate into other apps — iOS cannot — and a keyboard extension is not planned. If one is ever wanted it is a record of its own.\n3. One Library, five kinds. word, acronym, phrase, spelling, correction, replacing the three Settings lists. Every entry carries its meaning, an example, where it came from, industry tags, a strength that practice raises and time lowers, and its history. Vocabulary is the word entries; definitions are the acronym entries; corrections stay corrections. The three lists migrate on the Mac first, with nothing lost; Settings › Dictionary becomes Settings › Library with a kind filter. The polisher, explain and the correction table read the same store through the same interface, and the corpus proves the behaviour is unchanged.\n4. A platform-neutral package, TimbreCore, is created with the Library. The Library, pure parsing, practice scoring and the sync interface live there; no AppKit. TimbreKit imports it and keeps the macOS pipeline; the iPhone app imports only TimbreCore. The rule for what goes where is an ADR written with the split.\n5. Practice uses the voice, and every drill ships with a guardrail and a corpus. Spell it (say the word, spell it aloud; the recogniser checks the letters), Say it (use it in a sentence; the on-device model judges the meaning), Explain it (answer the card by voice), the word of the day (weakest entries first, then a bundled list for the profile's industry, as a local notification), and the private kind of gamification — strength, streaks, a weekly review, no leaderboard. Each drill's checks go on the Evals page next to the polisher's. Spell it ships first, because it needs no model judgment.\nConsequences.\nPhases 1–4 of the product map are now the plan: the Library on the Mac with the TimbreCore split; iCloud sync proved on two Macs with nettop still empty; the iPhone companion; Spell it with its corpus. Each phase is its own pull request and its own measurement.\nNothing here changes a claim: the headline keeps one asterisk and /network keeps one entry.\nA Library entry is the user's. The Mac app transmits none of it; iCloud carries it under the user's own account.",
"html": "<h2>Context</h2>\n<p>Hugo wants Timbre to make him better at four things: spelling, vocabulary, phrases, acronyms. The product map (2026-10-11) laid out how the product grows to do that — a Library, a phone, sync, practice — and ended with five decisions. They were walked through one at a time on 2026-10-14, each with its alternatives, and taken as follows.</p>\n<h2>Decisions</h2>\n<ol>\n<li><strong>The Library syncs through iCloud, not an account.</strong> CloudKit, private database, the user&#39;s own account; Apple&#39;s daemons move the data and the binary still makes zero requests. The store is built behind a sync interface so an account backend could be added later. An account becomes a decision on the day a non-Apple Library client is wanted, with its own record and its own change to <code>/network</code>. Until then, &quot;Apple pure&quot; is the product, not a tier.</li>\n<li><strong>Timbre for iPhone is a companion.</strong> The Library in your pocket: review, practise, word of the day, add a word you heard. It does not dictate into other apps — iOS cannot — and a keyboard extension is not planned. If one is ever wanted it is a record of its own.</li>\n<li><strong>One Library, five kinds.</strong> <code>word</code>, <code>acronym</code>, <code>phrase</code>, <code>spelling</code>, <code>correction</code>, replacing the three Settings lists. Every entry carries its meaning, an example, where it came from, industry tags, a strength that practice raises and time lowers, and its history. Vocabulary is the word entries; definitions are the acronym entries; corrections stay corrections. The three lists migrate on the Mac first, with nothing lost; Settings › Dictionary becomes Settings › Library with a kind filter. The polisher, explain and the correction table read the same store through the same interface, and the corpus proves the behaviour is unchanged.</li>\n<li><strong>A platform-neutral package, TimbreCore, is created with the Library.</strong> The Library, pure parsing, practice scoring and the sync interface live there; no AppKit. TimbreKit imports it and keeps the macOS pipeline; the iPhone app imports only TimbreCore. The rule for what goes where is an ADR written with the split.</li>\n<li><strong>Practice uses the voice, and every drill ships with a guardrail and a corpus.</strong> Spell it (say the word, spell it aloud; the recogniser checks the letters), Say it (use it in a sentence; the on-device model judges the meaning), Explain it (answer the card by voice), the word of the day (weakest entries first, then a bundled list for the profile&#39;s industry, as a local notification), and the private kind of gamification — strength, streaks, a weekly review, no leaderboard. Each drill&#39;s checks go on the Evals page next to the polisher&#39;s. Spell it ships first, because it needs no model judgment.</li>\n</ol>\n<h2>Consequences</h2>\n<ul>\n<li>Phases 1–4 of the product map are now the plan: the Library on the Mac with the <code>TimbreCore</code> split; iCloud sync proved on two Macs with <code>nettop</code> still empty; the iPhone companion; Spell it with its corpus. Each phase is its own pull request and its own measurement.</li>\n<li>Nothing here changes a claim: the headline keeps one asterisk and <code>/network</code> keeps one entry.</li>\n<li>A Library entry is the user&#39;s. The Mac app transmits none of it; iCloud carries it under the user&#39;s own account.</li>\n</ul>\n"
},
{
"id": "GDR-0022",
"kind": "GDR",
Expand Down
Loading
Loading