From 2fda4041ffa58c5c9d1b143b7e1847f7c3d1d28e Mon Sep 17 00:00:00 2001 From: iamdoubz <> Date: Mon, 6 Jul 2026 17:56:19 -0500 Subject: [PATCH] docs: FR-CAP-8/9, FR-REC-5, FR-SYNC-11 + cancelled recording state --- docs/01-requirements.md | 4 ++++ docs/04-api-contracts.md | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/01-requirements.md b/docs/01-requirements.md index 0965f71..52aa0be 100644 --- a/docs/01-requirements.md +++ b/docs/01-requirements.md @@ -17,6 +17,8 @@ Each requirement has a stable ID used across the roadmap, tests, and commits. Pr | FR-CAP-5 | S | 7 | Render a live input waveform / level meter while recording. | | FR-CAP-6 | S | 7 | Handle audio device changes mid-recording without losing the session. | | FR-CAP-7 | S | 1 | Optionally capture the user's **microphone** alongside loopback and mix it into the live transcript (default ON, local-only/no egress, selectable device + "off"). | +| FR-CAP-8 | S | 1 | Write the retained recording as **16-bit PCM** at the device's native rate/channels — roughly half the size of the 32-bit-float mix, with no material quality loss for speech. | +| FR-CAP-9 | S | 1 | **Cancel** an in-progress recording: stop capture, delete working files, and remove the meeting from the DB entirely (for one started by mistake — no finalize/transcript/sync). | ### Recording retention & consent (REC) — see ADR-0009 @@ -26,6 +28,7 @@ Each requirement has a stable ID used across the roadmap, tests, and commits. Pr | FR-REC-2 | M | 1 | Before retaining a recording for the first time (and shown near the toggle thereafter), display a consent notice: recording without participants' consent may be illegal in some regions; advise checking local laws. Require a one-time acknowledgment; store it. This is a caution, not legal advice. | | FR-REC-3 | M | 1 | When retention is on, the UI indicates the meeting is being **saved** (in addition to the "recording active" indicator, FR-CAP-4). | | FR-REC-4 | M | 2 | Deleting working audio on finalize happens only **after** the transcript is successfully finalized; never race with crash recovery (audio stays source of truth until then). | +| FR-REC-5 | S | 2 | Play a meeting's retained `.wav` back in the app (decrypting a vault-sealed recording on demand for playback). | ### Hardware acceleration (HW) @@ -153,6 +156,7 @@ the local LLM endpoint, and it is **off by default**. Primary targets are self-h | FR-SYNC-8 | M | 9 | Surface sync state in the UI and label targets: self-hosted/primary as "your server"; third-party clouds carry a clear "data leaves your device to a third party" banner. | | FR-SYNC-9 | S | 9 | **Secondary** targets via provider APIs + OAuth 2.0 (PKCE, loopback redirect): **OneDrive** (MS Graph), **Dropbox**, **Box**. | | FR-SYNC-10 | C | 9 | Optional client-side encryption of artifacts before upload (ties to FR-SEC-3): destination holds only ciphertext. | +| FR-SYNC-11 | S | 9 | Show **live per-item upload progress** while syncing (stream the upload body and report bytes sent per artifact). | ### UX, accessibility, recovery (UX) diff --git a/docs/04-api-contracts.md b/docs/04-api-contracts.md index 0f1f25f..68a43a3 100644 --- a/docs/04-api-contracts.md +++ b/docs/04-api-contracts.md @@ -125,7 +125,7 @@ privacy_self_check(): { ## 2. Tauri events (Rust → frontend) ```ts -"recording://state" { meetingId, state: "recording"|"paused"|"stopped", elapsedMs } +"recording://state" { meetingId, state: "recording"|"paused"|"stopped"|"cancelled", elapsedMs } "recording://level" { meetingId, rms: number, peak: number } // waveform (FR-CAP-5) "recording://device" { meetingId, recovered: boolean, message: string } // capture device change (FR-CAP-6) "transcript://segment" { meetingId, segment: TranscriptSegment } // live segments (FR-TRX-2)