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
37 changes: 37 additions & 0 deletions .planning/MILESTONE-AUDIT-v1.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Milestone Audit: v1.0 Speedly Catcher + Speedly Sayer

status: passed

## Scope

Milestone v1.0 targeted faster, more measurable live-call trigger detection and
prepared-response playback, plus a local sample review loop.

## Requirement Coverage

- CATCH-01: catch-path latency is printed from `saymo auto`.
- CATCH-02: live tuning is configurable globally and per meeting profile.
- CATCH-03: `saymo trigger-eval` evaluates saved samples.
- CATCH-04: `saymo trigger-eval --promote` learns a variant and re-runs.
- SAY-01: `saymo auto-preflight` checks readiness before a call.
- SAY-02: auto-mode prints playback-start latency.
- SAY-03: forced playback returns structured blocked reasons.
- SAY-04: cache misses route to prepared standup fallback by default.
- TRAIN-01: `saymo trigger-samples list` inspects sample metadata.
- TRAIN-02: `saymo trigger-samples replay` reclassifies and optionally plays.
- TRAIN-03: `saymo trigger-samples report` exports sanitized markdown.

## Verification

- `.venv/bin/python -m pytest -q`
- 241 passed
- `git diff --check`
- passed
- `.venv/bin/saymo --help`
- command surface includes new CLI commands

## Residual Notes

The evaluator becomes more valuable as real call samples accumulate under
`~/.saymo/trigger_samples/<profile>/`.

9 changes: 8 additions & 1 deletion .planning/MILESTONES.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,18 @@
### v1.0 Speedly Catcher + Speedly Sayer

**Started:** 2026-05-15
**Status:** Planned
**Completed:** 2026-05-15
**Status:** Complete

Focus: make live-call trigger detection and prepared-response playback faster,
measurable, and easier to tune from captured meeting samples.

Delivered:
- Live latency metrics and configurable catcher tuning.
- Offline trigger sample evaluation with fuzzy variant promotion.
- Auto preflight diagnostics and structured playback blocked reasons.
- Trigger sample list/replay/report commands.

## Historical Baseline

Before GSD planning was introduced, Saymo already had a working local voice
Expand Down
17 changes: 8 additions & 9 deletions .planning/PROJECT.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ enough that the call still feels live.
**Goal:** Make live-call detection and prepared-response playback faster,
measurable, and easier to tune from real meeting samples.

**Status:** Complete on 2026-05-15.

**Target features:**
- Speedly Catcher: lower-latency trigger/addressing detection with profile
tuning and offline sample evaluation.
Expand All @@ -35,12 +37,9 @@ measurable, and easier to tune from real meeting samples.
- ✓ Manual hotkeys and takeover checks exist before this milestone.
- ✓ `saymo trigger-capture` can save classified call windows as WAV plus JSON
metadata before this milestone.

### Active

- [ ] Faster catch path is measurable and tunable per profile.
- [ ] Faster say path is preflighted and measured before calls.
- [ ] Captured trigger samples feed a repeatable tuning/evaluation workflow.
- ✓ Faster catch path is measurable and tunable per profile.
- ✓ Faster say path is preflighted and measured before calls.
- ✓ Captured trigger samples feed a repeatable tuning/evaluation workflow.

### Out of Scope

Expand Down Expand Up @@ -77,8 +76,8 @@ measurable, and easier to tune from real meeting samples.
| Decision | Rationale | Outcome |
|----------|-----------|---------|
| Keep live-call listening local-first | Avoid leaking meeting audio and preserve offline operation | ✓ Good |
| Use classified trigger samples before deeper ML changes | Real misses/false positives are the best tuning data | — Pending |
| Separate catch latency from say latency | Different bottlenecks require different measurements and tests | — Pending |
| Use classified trigger samples before deeper ML changes | Real misses/false positives are the best tuning data | ✓ Implemented via `trigger-eval` |
| Separate catch latency from say latency | Different bottlenecks require different measurements and tests | ✓ Implemented in `saymo auto` diagnostics |

---
*Last updated: 2026-05-15 after starting milestone v1.0 Speedly Catcher + Speedly Sayer*
*Last updated: 2026-05-15 after completing milestone v1.0 Speedly Catcher + Speedly Sayer*
46 changes: 23 additions & 23 deletions .planning/REQUIREMENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,35 +10,35 @@ Requirements for milestone v1.0 Speedly Catcher + Speedly Sayer.

### Speedly Catcher

- [ ] **CATCH-01**: User can see catch-path latency for each live window:
- [x] **CATCH-01**: User can see catch-path latency for each live window:
capture, transcription, trigger match, addressing decision, and final action.
- [ ] **CATCH-02**: User can tune capture window length, overlap, cooldown, and
- [x] **CATCH-02**: User can tune capture window length, overlap, cooldown, and
silence handling per meeting profile without editing source code.
- [ ] **CATCH-03**: User can run offline trigger evaluation against saved call
- [x] **CATCH-03**: User can run offline trigger evaluation against saved call
samples and see counts for `asked_to_speak`, `question`, `speech`, false
positives, and misses.
- [ ] **CATCH-04**: User can promote a heard trigger variant from an evaluated
- [x] **CATCH-04**: User can promote a heard trigger variant from an evaluated
sample into `vocabulary.fuzzy_expansions` and re-run the evaluation.

### Speedly Sayer

- [ ] **SAY-01**: User can run one preflight command before a call that verifies
- [x] **SAY-01**: User can run one preflight command before a call that verifies
response cache coverage, output device routing, provider readiness, and
configured profile triggers.
- [ ] **SAY-02**: User can see say-path latency from trigger/hotkey to playback
- [x] **SAY-02**: User can see say-path latency from trigger/hotkey to playback
start for cached responses.
- [ ] **SAY-03**: User can force prepared playback without waiting for trigger
- [x] **SAY-03**: User can force prepared playback without waiting for trigger
detection and receive a clear reason if playback is blocked.
- [ ] **SAY-04**: User can keep auto-mode responsive when response-cache lookup
- [x] **SAY-04**: User can keep auto-mode responsive when response-cache lookup
misses by using a documented prepared-response fallback.

### Training Loop

- [ ] **TRAIN-01**: User can list captured sample folders and inspect metadata
- [x] **TRAIN-01**: User can list captured sample folders and inspect metadata
without opening raw JSON files manually.
- [ ] **TRAIN-02**: User can replay selected captured samples through a local
- [x] **TRAIN-02**: User can replay selected captured samples through a local
command to validate transcripts and classifications.
- [ ] **TRAIN-03**: User can export a sanitized evaluation report that excludes
- [x] **TRAIN-03**: User can export a sanitized evaluation report that excludes
raw audio and private config values.

## v2 Requirements
Expand Down Expand Up @@ -67,17 +67,17 @@ Deferred to a later milestone.

| Requirement | Phase | Status |
|-------------|-------|--------|
| CATCH-01 | Phase 1 | Pending |
| SAY-02 | Phase 1 | Pending |
| CATCH-02 | Phase 2 | Pending |
| CATCH-03 | Phase 2 | Pending |
| CATCH-04 | Phase 2 | Pending |
| SAY-01 | Phase 3 | Pending |
| SAY-03 | Phase 3 | Pending |
| SAY-04 | Phase 3 | Pending |
| TRAIN-01 | Phase 4 | Pending |
| TRAIN-02 | Phase 4 | Pending |
| TRAIN-03 | Phase 4 | Pending |
| CATCH-01 | Phase 1 | Complete |
| SAY-02 | Phase 1 | Complete |
| CATCH-02 | Phase 2 | Complete |
| CATCH-03 | Phase 2 | Complete |
| CATCH-04 | Phase 2 | Complete |
| SAY-01 | Phase 3 | Complete |
| SAY-03 | Phase 3 | Complete |
| SAY-04 | Phase 3 | Complete |
| TRAIN-01 | Phase 4 | Complete |
| TRAIN-02 | Phase 4 | Complete |
| TRAIN-03 | Phase 4 | Complete |

**Coverage:**
- v1 requirements: 11 total
Expand All @@ -86,4 +86,4 @@ Deferred to a later milestone.

---
*Requirements defined: 2026-05-15*
*Last updated: 2026-05-15 after creating milestone v1.0 roadmap*
*Last updated: 2026-05-15 after completing milestone v1.0*
40 changes: 20 additions & 20 deletions .planning/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,21 @@ wraps the sample workflow in operator-facing commands and docs.

## Milestones

- 📋 **v1.0 Speedly Catcher + Speedly Sayer** - Phases 1-4 (planned)
- **v1.0 Speedly Catcher + Speedly Sayer** - Phases 1-4 (complete)

## Phases

**Phase Numbering:**
- Integer phases (1, 2, 3): Planned milestone work
- Decimal phases (2.1, 2.2): Urgent insertions

- [ ] **Phase 1: Latency Baseline** - Measure catch and say latency without
- [x] **Phase 1: Latency Baseline** - Measure catch and say latency without
changing behavior.
- [ ] **Phase 2: Catcher Tuning Loop** - Add profile tuning and offline sample
- [x] **Phase 2: Catcher Tuning Loop** - Add profile tuning and offline sample
evaluation.
- [ ] **Phase 3: Sayer Preflight Path** - Verify readiness and speed up
- [x] **Phase 3: Sayer Preflight Path** - Verify readiness and speed up
prepared playback decisions.
- [ ] **Phase 4: Sample Review Workflow** - Make captured samples inspectable,
- [x] **Phase 4: Sample Review Workflow** - Make captured samples inspectable,
replayable, and reportable.

## Phase Details
Expand All @@ -41,8 +41,8 @@ future speed work is measured, not guessed.
**Plans**: 2 plans

Plans:
- [ ] 01-01: Instrument catch-path timings
- [ ] 01-02: Instrument say-path playback timings
- [x] 01-01: Instrument catch-path timings
- [x] 01-02: Instrument say-path playback timings

### Phase 2: Catcher Tuning Loop
**Goal**: Let the user tune live detection from config and validate changes
Expand All @@ -59,9 +59,9 @@ against saved call samples.
**Plans**: 3 plans

Plans:
- [ ] 02-01: Add profile-level catcher tuning config
- [ ] 02-02: Build offline trigger-sample evaluator
- [ ] 02-03: Add promote-and-rerun workflow for fuzzy variants
- [x] 02-01: Add profile-level catcher tuning config
- [x] 02-02: Build offline trigger-sample evaluator
- [x] 02-03: Add promote-and-rerun workflow for fuzzy variants

### Phase 3: Sayer Preflight Path
**Goal**: Make prepared-response playback readiness explicit before calls and
Expand All @@ -77,9 +77,9 @@ keep auto-mode responsive when playback cannot start.
**Plans**: 3 plans

Plans:
- [ ] 03-01: Add live-call preflight command
- [ ] 03-02: Normalize forced-playback blocked reasons
- [ ] 03-03: Harden cache-miss fallback behavior
- [x] 03-01: Add live-call preflight command
- [x] 03-02: Normalize forced-playback blocked reasons
- [x] 03-03: Harden cache-miss fallback behavior

### Phase 4: Sample Review Workflow
**Goal**: Turn captured call windows into a practical local review loop for
Expand All @@ -96,9 +96,9 @@ training and debugging trigger behavior.
**Plans**: 3 plans

Plans:
- [ ] 04-01: Add sample listing command
- [ ] 04-02: Add sample replay and reclassify command
- [ ] 04-03: Add sanitized evaluation report and docs
- [x] 04-01: Add sample listing command
- [x] 04-02: Add sample replay and reclassify command
- [x] 04-03: Add sanitized evaluation report and docs

## Progress

Expand All @@ -107,7 +107,7 @@ Phases execute in numeric order: 1 → 2 → 3 → 4

| Phase | Milestone | Plans Complete | Status | Completed |
|-------|-----------|----------------|--------|-----------|
| 1. Latency Baseline | v1.0 | 0/2 | Not started | - |
| 2. Catcher Tuning Loop | v1.0 | 0/3 | Not started | - |
| 3. Sayer Preflight Path | v1.0 | 0/3 | Not started | - |
| 4. Sample Review Workflow | v1.0 | 0/3 | Not started | - |
| 1. Latency Baseline | v1.0 | 2/2 | Complete | 2026-05-15 |
| 2. Catcher Tuning Loop | v1.0 | 3/3 | Complete | 2026-05-15 |
| 3. Sayer Preflight Path | v1.0 | 3/3 | Complete | 2026-05-15 |
| 4. Sample Review Workflow | v1.0 | 3/3 | Complete | 2026-05-15 |
36 changes: 22 additions & 14 deletions .planning/STATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,36 @@ See: .planning/PROJECT.md (updated 2026-05-15)

**Core value:** Saymo must reliably catch when the user is expected to answer
and respond fast enough that the call still feels live.
**Current focus:** Phase 1: Latency Baseline
**Current focus:** Milestone v1.0 complete; ready for next milestone planning

## Current Position

Phase: 1 of 4 (Latency Baseline)
Plan:
Status: Ready to plan
Last activity: 2026-05-15 — Milestone v1.0 Speedly Catcher + Speedly Sayer initialized
Phase: 4 of 4 (Sample Review Workflow)
Plan: 04-03 complete
Status: Milestone complete
Last activity: 2026-05-15 — Completed Speedly Catcher + Speedly Sayer autonomous execution

Progress: [░░░░░░░░░░] 0%
Progress: [██████████] 100%

## Performance Metrics

**Velocity:**
- Total plans completed: 0
- Average duration:
- Total execution time: 0.0 hours
- Total plans completed: 11
- Average duration: autonomous batch
- Total execution time: one autonomous session

**By Phase:**

| Phase | Plans | Total | Avg/Plan |
|-------|-------|-------|----------|
| - | - | - | - |
| 1. Latency Baseline | 2 | 2/2 | autonomous |
| 2. Catcher Tuning Loop | 3 | 3/3 | autonomous |
| 3. Sayer Preflight Path | 3 | 3/3 | autonomous |
| 4. Sample Review Workflow | 3 | 3/3 | autonomous |

**Recent Trend:**
- Last 5 plans:
- Trend:
- Last 5 plans: 03-02, 03-03, 04-01, 04-02, 04-03
- Trend: complete

## Accumulated Context

Expand All @@ -45,6 +48,10 @@ Recent decisions affecting current work:
quality regressions can be isolated.
- v1.0: Use captured call windows as the tuning substrate before adding any
custom classifier.
- v1.0: Keep the sample report sanitized by omitting transcript text and raw
audio payloads while still listing sample basenames and classification flags.
- v1.0: Treat response cache coverage as a preflight warning, not a hard block,
because prepared standup fallback remains valid.

### Pending Todos

Expand All @@ -53,10 +60,11 @@ None yet.
### Blockers/Concerns

- Need enough real captured samples in `~/.saymo/trigger_samples/` to make
offline evaluation meaningful.
offline evaluation statistically meaningful.

## Session Continuity

Last session: 2026-05-15
Stopped at: Milestone initialized; next step is `$gsd-plan-phase 1`.
Stopped at: Milestone v1.0 complete; next step is `$gsd-new-milestone` if more
work is needed.
Resume file: None
21 changes: 21 additions & 0 deletions .planning/phases/01-latency-baseline/01-01-PLAN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Plan 01-01: Instrument Catch-Path Timings

## Requirements

- CATCH-01: Show live-window latency split by capture, transcription, trigger
match, addressing, and action.

## Tasks

- Replace hardcoded capture/read/cooldown/silence values with resolved live
tuning values.
- Measure capture read, Whisper transcription, and trigger match per processed
window.
- Measure addressing and confirmation/action decisions when a trigger fires.
- Keep trigger, addressing, and confirmation semantics unchanged.

## Verification

- Focused tests for live tuning config.
- Full pytest to guard existing trigger behavior.

16 changes: 16 additions & 0 deletions .planning/phases/01-latency-baseline/01-01-SUMMARY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Summary 01-01: Instrument Catch-Path Timings

## Completed

- Added `LiveConfig` and `resolve_live_tuning()` in `saymo/config.py`.
- Updated `saymo auto` to use live tuning for chunk length, overlap, read
timeout, cooldown, silence threshold, and pre-speak delay.
- Added catch latency output for capture, STT, trigger match, addressing, and
action decisions.

## Files

- `saymo/config.py`
- `saymo/commands/core.py`
- `tests/test_live_tuning_config.py`

18 changes: 18 additions & 0 deletions .planning/phases/01-latency-baseline/01-02-PLAN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Plan 01-02: Instrument Say-Path Playback Timings

## Requirements

- SAY-02: Show time from trigger/hotkey to playback start for cached responses.

## Tasks

- Add an auto-response decision object with source and reason metadata.
- Add a playback result object with success, blocked reason, and start state.
- Allow `_play_cached_audio` to call a playback-start callback.
- Print response routing and playback-start latency from `saymo auto`.

## Verification

- Existing Q&A response-resolution tests remain compatible.
- New tests cover decision metadata and blocked playback reason.

Loading
Loading