Skip to content

Timbre for iPhone and Apple Watch (GDR-0023 phase 3, GDR-0026, ADR-0016) - #69

Open
ChaliceForAuri wants to merge 1 commit into
shared-packagesfrom
companion
Open

ChaliceForAuri wants to merge 1 commit into
shared-packagesfrom
companion

Conversation

@ChaliceForAuri

@ChaliceForAuri ChaliceForAuri commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Stacked on #68. The companion: one hand-written Xcode project, four targets, every setting in xcconfig, each target linking exactly the packages its platform allows (ADR-0016).

iPhone

  • Today: the card with facts labelled by source, why today, met state, strength; Hear it (TimbreSpeech) and Spell it.
  • Library: search, kind filter, add (adapts to the kind), edit with history, swipe to forget, strength bars.
  • Spell it: hold to talk through SpokenInput, live text while held, the letters checked deterministically, pass/fail recorded as events; the practice queue is due-weakest-first, then freshest.
  • To-do: hold, say it, it lands in the Timbre list in Reminders with the date read on-device; the list reads back and can be read aloud.
  • You: profile, share the Library as a file, what runs on-device.
  • Three App Intents (say a to-do, word of the day, add a word) with App Shortcuts; a URL scheme (timbre://today|todo|practice).

Watch

One screen: say a to-do (TextFieldLink, Double Tap as the primary action), today's word, Spell it, heard a word. The Action Button's intent. Nothing on the wrist needs the model.

Widgets

Today's word on the Home and Lock Screens, and as a complication, from today.json in the shared container; a Control Center / Lock Screen Control that opens the to-do key. Widgets never open the Library.

A correction, by the book

The first build stopped on saveReminder: EventKit is in the watchOS SDK and read-only there. GDR-0026 had promised a Watch that files its own to-dos. GDR-0029 supersedes that clause: the wrist parses and queues, the iPhone files, over WatchConnectivity (transferUserInfo, delivered when the phone is reachable, launching the app in the background). A new framework, so a new package, TimbreRelay; ReminderStore.canAdd is false on the Watch by construction. University module 14 is corrected and module 15 ("Building the companion") teaches the lesson.

Verified

  • Builds: xcodebuild -scheme Timbre -destination 'generic/platform=iOS Simulator' compiles all four targets. Lint clean.
  • On the iPhone 17 simulator: every tab, adding an entry (persisted, strength bar shown), the Reminders permission flow, the You screen. Screenshots were taken at each step.
  • Tests: Core 90; Relay 2 on the simulator (the package has no macOS); the rest unchanged.
  • The Watch app is compile-verified only: no watchOS simulator runtime is installed here. It runs at the joint test, on hardware or after a runtime download.

🤖 Generated with Claude Code

@vercel

vercel Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
timbre Ignored Ignored Preview Oct 21, 2026 8:59pm UTC

Request Review

…0016)

The companion, not a port: one hand-written project with four targets —
the iPhone app, the Watch app, and a WidgetKit extension for each — every
setting in xcconfig, each target linking exactly the packages its platform
allows.

iPhone: Today (the card with its labelled facts, hear it, spell it), the
Library (search, kind filter, add, edit, swipe to forget, strength bars),
Spell it (hold to talk through TimbreSpeech's new SpokenInput, the letters
checked deterministically), the to-do key (hold, say it, it lands in
Reminders; the list reads back), You (profile, share the file, what runs
on-device). Three App Intents for Siri, Shortcuts and the Action Button.
A URL scheme the widgets and the Control open the app on.

Watch: one screen — say a to-do (TextFieldLink, Double Tap), today's word,
Spell it, heard a word — and the Action Button's intent.

Widgets: today's word on the Home and Lock Screens and as a complication,
from a snapshot the app writes to the shared container (never the
Library); a Control that opens the to-do key.

GDR-0029 corrects GDR-0026: EventKit on watchOS is read-only
(saveReminder is __WATCHOS_PROHIBITED), so the wrist parses and queues a
to-do and the iPhone files it over WatchConnectivity — a new framework, so
a new package, TimbreRelay, whose queue and messages are tested on the
simulator. ReminderStore is read-only on the Watch by construction.

Core: TodaySnapshot, SharedContainer, PracticeQueue, Todo is Codable
(90 tests). ADR-0016 records the project; University module 15 teaches
what it took; module 14 is corrected; CLAUDE.md, the architecture model
and CI (companion build, relay tests) follow.

Verified on the iPhone 17 simulator: all five tabs, adding an entry,
persistence, the Reminders prompt. The Watch is compile-verified (no
watchOS runtime here).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@ChaliceForAuri ChaliceForAuri changed the title Timbre for iPhone and Apple Watch (GDR-0023 phase 3, GDR-0024, ADR-0016) Timbre for iPhone and Apple Watch (GDR-0023 phase 3, GDR-0026, ADR-0016) Oct 21, 2026

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant