Skip to content

A package per framework: TimbreSpeech, TimbreModel, TimbreReminders (ADR-0015) - #68

Open
ChaliceForAuri wants to merge 1 commit into
mac-libraryfrom
shared-packages
Open

ChaliceForAuri wants to merge 1 commit into
mac-libraryfrom
shared-packages

Conversation

@ChaliceForAuri

@ChaliceForAuri ChaliceForAuri commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Stacked on #67. The last structural move before the companion: framework-bound code leaves TimbreKit for packages that declare exactly the platforms their framework has.

The packages

Package Framework Platforms Holds
TimbreSpeech AVFAudio + Speech macOS, iOS capture, the converter and its tail drain, the transcriber, file input for the harness, contextual vocabulary, reading aloud and the voice catalog
TimbreModel FoundationModels macOS, iOS OnDeviceModel.availability (one answer; the polisher delegates to it), the ExampleWriter
TimbreReminders EventKit macOS, iOS, watchOS ReminderStore; the read-back ordering extracted into TodoOrdering, now tested

TimbreKit depends on all four and keeps only what touches a Mac: the hotkey, overlay, insertion, the selection, the polisher, command mode, the pipeline. The one #if os(macOS) is InputDevices and AudioCapture.switchInput(to:), the Core Audio HAL calls behind the Bluetooth fallback (ADR-0012), documented as the exception in ADR-0015.

What this makes possible

The iPhone links Core, Speech, Model and Reminders; the Watch links Core and Reminders. The Watch cannot link Speech or Model, by construction, which is GDR-0026's "nothing on the wrist needs the model" enforced by the compiler.

Verified

  • Nothing moved twice, nothing lost: Kit's 209 tests became 169 there + 38 in Speech + 2 in Model; Reminders gained 2 (TodoOrdering). Core: 86.
  • swift-format lint --strict clean across six packages and the app.
  • xcodebuild of the Mac app: BUILD SUCCEEDED (the project did not change; TimbreKit resolves the rest).
  • The architecture model gained three containers and validates; Backstage's JSON regenerated. CI runs the five suites.

ADR-0015 records the rule and its alternatives. University module 14 gained the paragraph.

🤖 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

…ADR-0015)

The companion needs capture, transcription and reading aloud (Mac and
iPhone), the on-device model (Mac and iPhone) and the Timbre list in
Reminders (all three). They lived in TimbreKit, which is macOS-only.
SwiftPM declares platforms per package, so framework-bound code now lives
in a package that declares exactly the platforms its framework has:

- TimbreSpeech (AVFAudio + Speech; macOS, iOS): AudioCapture,
  BufferConverter, AudioLevel, InputFallback, Transcriber,
  TranscriptSnapshot, TranscriptAccumulator, AudioFileInput,
  ContextualVocabulary, SpeechReader, VoiceCatalog, ReadingSpeed,
  ReadingWarmup. InputDevices and switchInput(to:) — the Core Audio HAL
  calls behind the Bluetooth fallback — are the one #if os(macOS).
- TimbreModel (FoundationModels; macOS, iOS; depends on Core):
  OnDeviceModel.availability, the ExampleWriter. The polisher delegates
  its availability check.
- TimbreReminders (EventKit; macOS, iOS, watchOS; depends on Core):
  ReminderStore, with the read-back ordering extracted into TodoOrdering
  and tested.

TimbreKit depends on all four packages and keeps only what touches a Mac.
Nothing moved twice and nothing was lost: Kit's 209 tests became 169
there, 38 in Speech and 2 in Model; Reminders gained 2. CI runs the five
suites. CLAUDE.md, the architecture model (three new containers) and
University module 14 describe the set.

Core 86, Speech 38, Model 2, Reminders 2, Kit 169. Lint clean. The Mac
app builds.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

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