Skip to content

Transcribe private recordings through explicit recoverable review - #2891

Merged
Chris0Jeky merged 8 commits into
codex/2808-overhaul-followthroughfrom
codex/2808-audio-transcription
Sep 10, 2026
Merged

Transcribe private recordings through explicit recoverable review#2891
Chris0Jeky merged 8 commits into
codex/2808-overhaul-followthroughfrom
codex/2808-audio-transcription

Conversation

@Chris0Jeky

@Chris0Jeky Chris0Jeky commented Sep 10, 2026

Copy link
Copy Markdown
Owner

Owners can explicitly request a transcript of a saved private recording from Thinking Decks or the original-recording library. The destination/model and allowance are disclosed before consent. A durable request receipt prevents duplicate sends during retries; generated text stays provisional until the owner reviews a written draft and separately confirms an answer. Reviewed and confirmed versions retain source lineage. Uploading a recording never sends it automatically.

Continues #2808 on #2886. The speech provider is disabled by default and uses the protected HTTP transport, existing kill switches/circuit, bounded input/output, transactional daily attempt/byte admission, deadline recovery and owner/access checks. Both account-export formats and account/source erasure cover the new tables. All four experiences share the same panel.

Validation:

  • Full frontend: 6,425 passed, three existing skips; production build, typecheck and scoped ESLint pass.
  • Full backend: 9,272 passed, 34 existing skips, one outbound-client inventory failure. Added the two protected speech sites; final 28 architecture and 22 API/audio/transport tests pass. The original full run is not claimed green.
  • Four domain, 25 provider and 33 component cases; real localhost HTTP tests exercise multipart bytes, trace suppression, disclosure, redirect blocking and the circuit.
  • Three Chromium journeys pass in 41.8 seconds, covering actual synthetic speech transport, failed attempt, explicit retry, lost success receipt/reload, reviewed draft/confirmation, original library, all experiences and 375px/accessibility checks. A separate default-off journey passes in 23.4 seconds. Screenshot inspected and temporary services stopped.
  • New migration applies to isolated empty SQLite; EF reports no pending model changes. Documentation links, operations governance and diff checks pass.

One bounded backend review found no HIGH/CRITICAL; its two MEDIUM limits are documented: erasure cannot guarantee cancellation at the final network-dispatch interval, and 429/malformed successful bodies do not open the transport circuit. The frontend review found a HIGH stale-consent defect after configuration refresh; ffd96e0 binds consent to the displayed configuration and clears it on changes. All 34 affected component tests, typecheck and ESLint pass; the bounded fix review confirms resolution with no remaining HIGH/CRITICAL. Exact-head hosted CI remains the merge gate.

No paid/live-provider quality, physical-microphone, generic worker supervisor, minute/currency guarantee or source-storage import claim is made. Provider setup and limits are in docs/product/AUDIO_TRANSCRIPTION.md; human choices remain in OUTSTANDING_TASKS.md. The primary checkout and working database remain untouched.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 10, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-10T07:09:20.016770Z 0d0f00d PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@Chris0Jeky Chris0Jeky moved this from Pending to Review in Taskdeck Execution Sep 10, 2026
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Bounded independent review: backend found no HIGH/CRITICAL; two MEDIUM transport limits are documented in AUDIO_TRANSCRIPTION.md. Frontend review found HIGH stale consent after configuration refresh. Fixed in ffd96e0 by binding consent to the displayed configuration hash and clearing it whenever refreshed configuration changes, including A→B→A. The same independent reviewer verified the narrow fix and reports resolved with no remaining HIGH/CRITICAL. Final 34 affected component tests, vue-tsc, scoped ESLint and diff check pass. cdcadd6 only reconciles documentation; doc-links and operations governance pass. Exact-head hosted CI and head aging still apply.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0d0f00d9b0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

if (value.attempts.some(x => x.audioAnswerId !== id)) throw new Error('Unexpected recording receipts')
status.value = value; needsRefresh.value = false
if (retry.value && value.attempts.some(x => x.requestId === retry.value?.requestId)) { retry.value = null; consent.value = false }
if (!value.configuration.enabled || (retry.value && retry.value.configurationHash !== value.configuration.configurationHash)) consent.value = false

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Clear consent when the destination changes

If an operator changes the speech configuration while this panel is open—for example across an API restart—a user who checked consent for destination A can refresh into destination B and retain the checked box because consent is cleared only for disabled configurations or an outstanding retry. start() then constructs the request from B's new configuration hash, so one click sends the private recording to a destination the user did not consent to; compare the previous configuration before replacing status and clear consent whenever its hash changes.

AGENTS.md reference: AGENTS.md:L96-L97

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Addressed in ffd96e0: consent is bound to the displayed configuration hash and cleared whenever a refreshed hash changes, including A-to-B-to-A. All 34 affected component tests, typecheck and lint pass; the independent narrow fix review confirms resolution. The fix is also included in the combined #2886 head fce97dc. No remaining HIGH consent finding is being deferred.

@Chris0Jeky
Chris0Jeky merged commit ea8c0cb into codex/2808-overhaul-followthrough Sep 10, 2026
35 checks passed
@Chris0Jeky
Chris0Jeky deleted the codex/2808-audio-transcription branch September 10, 2026 07:35
@github-project-automation github-project-automation Bot moved this from Review to Done in Taskdeck Execution Sep 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant