Skip to content

feat(voice-input): send per-project speech terms to the dictation service - #1882

Merged
donjor merged 4 commits into
dictation/base-urlfrom
dictation/terms
Oct 27, 2026
Merged

donjor merged 4 commits into
dictation/base-urlfrom
dictation/terms

Conversation

@donjor-agent

@donjor-agent donjor-agent Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

🤖 claude/anthropic claude-opus-5-5 (high)

Problem

The speech service had no knowledge of project names.
It misheard terms such as kubectl, and only agent cleanup could fix them later.

Change

  • Speech terms: per project, in Text processing
  • Format: one per line, up to four words
  • Sent as: standard prompt, comma list
  • Over four words: left out of prompt
  • Spelling: heard, misheard -> Term
  • Spelling applied: by T3, on every service
  • Live: previews and final both spelled
  • Paths: batch and live, via ?projectId=
  • Resolution: in VoiceInput; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole prompt as prose and drop every hotword, so T3 leaves such entries out.

Scope and approval

Fork-only dictation (voice-input domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

Verification

  • Server voice-input tests → pass
  • Web voice-input and rpc tests → pass
  • vp run check:changed → exit 0
  • vp run fork:ci → exit 0
  • Chrome: no extensions switch; save works

dictation-settings-terms.png

Claude Opus 5.5 via Claude Code in T3 Code.

Fork trailers

Fork-Domain: voice-input
Fork-Tier: core

@rsi-software-agent

rsi-software-agent Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

🧩 Effect Service Conventions fa884ce ✅ clear

resolved 1

commit 40c1896

  • effect-service-conventions-1 Move project-term resolution into the dictation service ✅ 770be08

🕐 27 Oct 02:27 UTC ⏱️ 8 min 🤖 gpt-6.1-sol 🪙 654.3K

⚠️ Not verified: 59 focused tests passed; full CI and static checks were not rerun.

Details

effect-service-conventions-1 Move project-term resolution into the dictation service · apps/server/src/voice-input/http.fork.ts:126

  • Problem: HTTP handlers read persisted settings and implement project-term selection and failure fallback.
  • Fix: Acquire VoiceText in VoiceInput; resolve terms within transcription and streaming using projectId.
  • Note: VoiceInput resolves terms using its environment dependency; HTTP handlers only forward projectId.
Head Result Time Check
fa884ce ✅ clear 8 min run
0c016b0 ✅ clear 8 min run
770be08 ✅ clear · 1 fixed 3 min run
40c1896 🔴 1 open · 1 new 2 min run

@rsi-software-agent

rsi-software-agent Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

🧩 UI Consistency fa884ce ✅ clear

No findings.

🕐 27 Oct 02:29 UTC ⏱️ 1 min 🤖 gpt-6.1-sol 🪙 246.1K

Details
Head Result Time Check
fa884ce ✅ clear 1 min run
0c016b0 ✅ clear 1 min run
770be08 ✅ clear 2 min run
40c1896 ✅ clear 2 min run

@rsi-software-agent

rsi-software-agent Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

🩺 Aftercare fa884ce ✅ clear

resolved 8

commit 40c1896

  • A1 Validate speech-term extension budgets before saving ➖ the same terms are valid OpenAI 'prompt' hints, so a save-time Promptletariat limit would refuse valid OpenAI configs; …
  • A2 Preserve canonical speech terms during keyword sanitization ✅ 770be08
  • A3 Move project-term resolution into the dictation service ✅ 770be08
  • A4 Clarify that Meta does not use speech terms ✅ 770be08

commit 770be08

  • A5 Apply spelling once to original transcript spans ✅ 0c016b0
  • A6 Insert canonical spelling targets literally ✅ 0c016b0
  • A7 Cover local spelling through both live protocol paths ✅ fa884ce

commit 0c016b0

  • A8 Preserve Unicode aliases and resolve targets consistently ✅ fa884ce

🕐 27 Oct 02:32 UTC ⏱️ 3 min 🤖 gpt-6.1-sol 🪙 1.1M

⚠️ Not verified: Real speech-provider sessions and browser persistence were not exercised; live tests were inspected.

Details

A1 Validate speech-term extension budgets before saving · apps/server/src/voice-input/VoiceInput.fork.ts:127

  • Problem: Accepted terms exceed spelling-source or encoded-keyword limits, breaking batch and live dictation.
  • Fix: Validate extension budgets before saving; test source counts and encoded keyword size.
  • Note: the same terms are valid OpenAI 'prompt' hints, so a save-time Promptletariat limit would refuse valid OpenAI configs; ….

A2 Preserve canonical speech terms during keyword sanitization · apps/server/src/voice-input/VoiceInput.fork.ts:123

  • Problem: Angle-bracket stripping corrupts canonical terms and spelling sources before transmission.
  • Fix: Preserve prompt and spelling text; handle keyword restrictions separately.
  • Note: Canonical terms retain angle brackets; literal spelling reproduced successfully.

A3 Move project-term resolution into the dictation service · apps/server/src/voice-input/http.fork.ts:126

  • Problem: HTTP owns persisted term selection and fallback; confirms effect-service-conventions-1.
  • Fix: Acquire VoiceText in VoiceInput; resolve project terms within transcription and streaming.
  • Note: VoiceInput acquires VoiceText and resolves terms for batch and live.

A4 Clarify that Meta does not use speech terms · docs/fork/user/dictation.md:35

  • Problem: Speech-term documentation promises hints, but both Meta paths discard them.
  • Fix: Qualify support in UI and docs as OpenAI-compatible; state that Meta ignores terms.
  • Note: Docs distinguish Meta's ignored hints from spelling applied to every service.

A5 Apply spelling once to original transcript spans · apps/server/src/voice-input/VoiceInput.fork.ts:155

  • Problem: Sequential replacements break overlapping aliases and can exponentially expand transcript text.
  • Fix: Apply longest matches once against original text; never rescan replacements.
  • Note: Longest-alias single-pass matching fixes overlap, chaining, and repeated-alias amplification.

A6 Insert canonical spelling targets literally · apps/server/src/voice-input/VoiceInput.fork.ts:155

  • Problem: Canonical targets containing replacement tokens are interpreted instead of inserted literally.
  • Fix: Return targets from replacement callbacks; test dollar-token spellings.
  • Note: Replacement callbacks preserve literal dollar tokens; batch regression now covers them.

A7 Cover local spelling through both live protocol paths · apps/server/src/voice-input/VoiceInput.fork.test.ts:375

  • Problem: Streaming tests inspect handshakes but never exercise local preview or final spelling.
  • Fix: Test VoiceInput.stream with project rules, corrected previews, and corrected final transcripts.
  • Note: Both protocols now assert project-specific spelling in live previews and final transcripts.

A8 Preserve Unicode aliases and resolve targets consistently · apps/server/src/voice-input/VoiceInput.fork.ts:162

  • Problem: Lowercasing aliases breaks exact Unicode matches and disagrees with regex case-folding equivalence.
  • Fix: Preserve original aliases; map matched alternatives directly to targets and test Unicode.
  • Note: Original aliases and capture-group targets pass Turkish and Greek reproductions.
Head Result Time Check
fa884ce ✅ clear · 2 fixed 3 min run
0c016b0 🔴 2 open · 2 fixed · 1 held · 1 new 4 min run
770be08 🔴 3 open · 3 fixed · 3 new 6 min run
40c1896 🔴 4 open · 4 new 6 min run

…vice

Fork-Domain: voice-input
Fork-Tier: core
@donjor-agent

donjor-agent Bot commented Oct 26, 2026

Copy link
Copy Markdown
Author

🤖 claude/anthropic claude-opus-5-5 (high)

A1: drop the same terms are valid OpenAI prompt hints, so a save-time Promptletariat limit would refuse valid OpenAI configs; voiceVocabularyFork now drops extras past each cap at send time, and the docs state the limits.

Spelling rules apply to every service's transcript in T3, and terms over four words stay out so the list keeps reading as hotwords. The Promptletariat extensions switch goes away.

Fork-Domain: voice-input
Fork-Tier: core
Fork-Domain: voice-input
Fork-Tier: core
Fork-Upstreamable: no
@donjor-agent

donjor-agent Bot commented Oct 27, 2026

Copy link
Copy Markdown
Author

🤖 claude/anthropic claude-opus-5-5 (high)

Fixed in 0c016b0.

  • A5: spelling is one pass over the original text, longest alias first; replacements are never rescanned.
  • A6: targets are inserted through a replacement callback, so $$ stays literal; the batch test covers both.
  • A7: a new VoiceInput.stream test checks spelled previews and the spelled final transcript.

…lding

Fork-Domain: voice-input
Fork-Tier: core
Fork-Upstreamable: no
@donjor-agent

donjor-agent Bot commented Oct 27, 2026

Copy link
Copy Markdown
Author

🤖 claude/anthropic claude-opus-5-5 (high)

Fixed in fa884ce.

  • A8: each alias is its own regex group, so the target follows the regex's case folding; the batch test adds ΟΔΟΣ matching οδοσ.
  • A7: the live spelling test now runs for both OpenAI and Meta, through a project-specific stream(client, "p1").

@donjor-agent

donjor-agent Bot commented Oct 27, 2026

Copy link
Copy Markdown
Author

🤖 claude/anthropic claude-opus-5-5 (high)

Requested a rerun for one exact failed or cancelled CI job on the unchanged pull-request head. GitHub may also rerun dependent jobs.

  • Head: fa884ce7cf2d28698ac328f1170bed2752df383f
  • Workflow: hyprws CI; run 40437756689; pre-rerun attempt 1; open run
  • Job: Test; id 121970449065; open job
  • Check run: 121970449065
  • Genuine flake reason: Test job failed on a ChatGPT OAuth callback port collision on the hosted runner; the stack touches only voice-input, and the same job passed on #1884 at the stack tip.

@donjor
donjor merged commit 74e7f1e into hyprws Oct 27, 2026
20 of 21 checks passed
@donjor
donjor deleted the dictation/terms branch October 27, 2026 02:47
donjor added a commit that referenced this pull request Oct 27, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 27, 2026
donjor added a commit that referenced this pull request Oct 27, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Oct 27, 2026
donjor added a commit that referenced this pull request Oct 27, 2026
donjor added a commit that referenced this pull request Oct 27, 2026
donjor added a commit that referenced this pull request Oct 27, 2026
rsi-software-agent Bot pushed a commit that referenced this pull request Oct 27, 2026
pick 4bdc91e fix(web): file saves no longer overwrite newer disk changes (#1869)
fixup d161c26 fixup! fix(web): file saves no longer overwrite newer disk changes (#1869)
exec git commit --amend --no-verify -F "$(git rev-parse --git-path fork-sync-folds/4bdc91e948928d814fa0c3c0d0a629a5081385e7.msg)"
pick 7239f60 fix(voice-input): one base URL derives dictation upload and live paths (#1881)
fixup 9745de7 fixup! fix(voice-input): one base URL derives dictation upload and live paths (#1881)
exec git commit --amend --no-verify -F "$(git rev-parse --git-path fork-sync-folds/7239f609dfcfaf95e187d7cec7f8cb9923c7b393.msg)"
pick 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882)
fixup 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882)
exec git commit --amend --no-verify -F "$(git rev-parse --git-path fork-sync-folds/2f35a071a40e089c355889279eb985db516371c5.msg)"
pick 1029dee fix(fork-sync): a job pushes its rebased tip and the driver lands it without replay (#1887)
fixup c787dc1 fixup! fix(fork-sync): a job pushes its rebased tip and the driver lands it without replay (#1887)
exec git commit --amend --no-verify -F "$(git rev-parse --git-path fork-sync-folds/1029dee702e6d1ec91fe10ea92a09fe83cbac69e.msg)"
pick 05e3328 refactor(upstream-fixes): retire the terminal focus-request gate; upstream focusTerminal owns focus
fixup 2b2ef60 fixup! refactor(upstream-fixes): retire the terminal focus-request gate; upstream focusTerminal owns focus
pick 8d49eb0 fix(fork-hooks): the marker scanner skips regex literals (#1888)
fixup d37471a fixup! fix(fork-hooks): the marker scanner skips regex literals (#1888)
exec git commit --amend --no-verify -F "$(git rev-parse --git-path fork-sync-folds/8d49eb025eaa9a78e0919aef35da34b616a4fa71.msg)"
pick 00674f9 fix(fork-sync): a no-tag rerun keeps the kept worktree's tag (#1889)
pick 835e33e fix(fork-sync): a session runs fork:ci on its tip before the hand-off (#1890)
pick d68e1e3 fix(fork-sync): a sync refuses a tip that lost fork hook lines (#1891)
pick b9d7679 fix(fork-sync): a landed hook retirement exempts no later sync (#1892)
fixup 7ba75a7 fixup! fix(fork-sync): a landed hook retirement exempts no later sync (#1892)
exec git commit --amend --no-verify -F "$(git rev-parse --git-path fork-sync-folds/b9d7679a6e1728c2ab66388992f87d690ad9d04b.msg)"
pick deec79d fix(fork-ci): fork:ci runs the merge-tree gate, so a session hands off no tip CI refuses (#1893)
pick 7902676 fix(fork-ci): fork:ci runs knip and typecheck, so a session hands off no tip the Check job refuses (#1894)
pick 23837a1 refactor(upstream-fixes): retire the conversation-fork title guard; upstream titles forks from inherited history
pick 7c9be1b fix(fork-sync): the land run waits out candidate CI, so the report names every red job (#1895)
fixup f0bd0f6 fixup! fix(fork-sync): the land run waits out candidate CI, so the report names every red job (#1895)
exec git commit --amend --no-verify -F "$(git rev-parse --git-path fork-sync-folds/7c9be1bc1e1e2aa5563c67da836f5417651806dd.msg)"
pick 8fd98e6 fix(upstream-fixes): storage cleanup treats a broken gitfile as gone on newer git
pick 9020279 fix(fork-sync): the driver adds the upstream remote, and the skill allows its kept worktree (#1897)

Fork-Sync-Tag: v0.1.4-nightly.20261027.3783
Fork-Sync-Lease: 9020279
rsi-software-agent Bot pushed a commit that referenced this pull request Oct 27, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Oct 28, 2026
pick 50aba4d feat(server): thread groups live on the server with agent tools (#1840)
fixup ef3cc72 fixup! feat(server): thread groups live on the server with agent tools (#1840)
exec git commit --amend --no-verify -F "$(git rev-parse --git-path fork-sync-folds/50aba4d3af96141607e26e2d0a908ce3a2c76573.msg)"
pick ae3460e feat(fork-sync): resolutions persist as git data between runs (#1849)
pick 68b1f2d feat(fork-sync): a pushed resolution reruns the sync from the trunk (#1850)
pick fb702ad feat(fork-sync): run the fork-sync skill through rsi-pr-agent (#1848)
pick 8443684 feat(fork-sync): a blocked sync labels its attention issue rsi:fork-sync (#1847)
pick 742ee72 fix(fork-sync): job mode adds the upstream remote before the dry run (#1852)
pick 29b9574 fix(fork-meta): give the fork-sync job 45 minutes (#1853)
pick d4df433 fix(fork-sync): the job always decides and runs from an rsi-pr-agent checkout (#1854)
pick a7dda3f fix(fork-sync): a red candidate starts the fork-sync job (#1855)
pick a25ae74 fix(fork-sync): carry a retired delete/modify through sync/resolution (#1856)
pick 9fa4f41 docs(backend-attach): describe the attached primary and its seams (#1861)
pick a7c4da6 fix(fork-meta): install pins gh's default repository to the fork (#1862)
pick a3977e8 test(desktop): the cross-arch probe test ignores a host ELECTRON_RUN_AS_NODE (#1859)
pick 179484c fix(github-issues): a V2 unlink of a V1 issue link survives compaction (#1858)
pick 1b3ec59 fix(fork-meta): fold apply keeps cancelling folds and never consults rerere (#1863)
pick 83320f1 fix(fork): refresh legacy setup scripts in project settings overrides (#1866)
pick affc863 fix(web): client-only Connections hides managed-server controls (#1867)
pick 49c280f fix(server): fork notice follows a first /compact and native replacement (#1864)
pick 9095e30 fix(web): group titles name the shared subject, anchored on the parent (#1868)
pick c1aa7ba fix(fork-sync): export partial progress before the job limit (#1872)
pick 147c6ee test(server): pin core.excludesFile in the GitManager fixture (#1874)
pick 3dbca16 fix(server): issue MCP tools target a thread like the pull request tools (#1860)
pick e6c42e2 fix(server): a stop during the migration backup no longer kills the update (#1873)
pick 5c2f552 fix(terminal): close T3 viewers of a settled lane's removed zmux session (#1876)
pick 2e66346 fix(fork-sync): time the partial export by the job's clock (#1879)
pick b318703 feat(web): group title becomes a tab on its parent thread (#1878)
pick 6bf77c1 fix(fork-sync): keep a job to one checkout, no proof clones (#1880)
pick 40f0718 fix(web): file saves no longer overwrite newer disk changes (#1869)
fixup 716cede fixup! fix(web): file saves no longer overwrite newer disk changes (#1869)
exec git commit --amend --no-verify -F "$(git rev-parse --git-path fork-sync-folds/40f071855f5af126fa11c2521ddf5672839ecb40.msg)"
pick 89aa35a fix(voice-input): one base URL derives dictation upload and live paths (#1881)
pick 8b43824 feat(voice-input): send per-project speech terms to the dictation service (#1882)
pick a46b608 fix(fork-sync): a job pushes its rebased tip and the driver lands it without replay (#1887)
pick 3bea8bc refactor(upstream-fixes): retire the terminal focus-request gate; upstream focusTerminal owns focus
pick 5ad62c1 fix(fork-hooks): the marker scanner skips regex literals (#1888)
pick 99232a5 fix(fork-sync): a no-tag rerun keeps the kept worktree's tag (#1889)
pick 4ed891c fix(fork-sync): a session runs fork:ci on its tip before the hand-off (#1890)
pick 8d57556 fix(fork-sync): a sync refuses a tip that lost fork hook lines (#1891)
pick 6714a7b fix(fork-sync): a landed hook retirement exempts no later sync (#1892)
pick 16d6089 fix(fork-ci): fork:ci runs the merge-tree gate, so a session hands off no tip CI refuses (#1893)
pick ab8529e fix(fork-ci): fork:ci runs knip and typecheck, so a session hands off no tip the Check job refuses (#1894)
pick eb62154 refactor(upstream-fixes): retire the conversation-fork title guard; upstream titles forks from inherited history
pick fa1a4e6 fix(fork-sync): the land run waits out candidate CI, so the report names every red job (#1895)
pick 694072c fix(upstream-fixes): storage cleanup treats a broken gitfile as gone on newer git
pick 12e0108 fix(fork-sync): the driver adds the upstream remote, and the skill allows its kept worktree (#1897)
pick 5d77480 fix(fork-sync): a job session leaves no background process before it replies (#1898)
pick 858eba8 refactor(markdown-editing): retire the flush hook supplied by upstream ; empty
pick b73c2a6 chore(fork-meta): account for existing context without changing the upstream budget
pick 2f2ed8c docs(fork-meta): track the resolved sync seams in domain scans

Fork-Sync-Tag: v0.1.4-nightly.20261027.3796
Fork-Sync-Lease: 29b011d
rsi-software-agent Bot pushed a commit that referenced this pull request Oct 28, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Oct 31, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Nov 6, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 8a9a03f feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 437b0b1 fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Nov 6, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 6, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 8a9a03f feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 437b0b1 fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 6, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 6, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 8a9a03f feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 437b0b1 fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 6, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 6, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 8a9a03f feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 437b0b1 fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 6, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 6, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 8a9a03f feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 437b0b1 fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 6, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 6, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 8a9a03f feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 437b0b1 fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 6, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 6, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 8a9a03f feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 437b0b1 fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 6, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 7, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 8a9a03f feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 437b0b1 fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 7, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 7, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 8a9a03f feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 437b0b1 fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 7, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 7, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 8a9a03f feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 437b0b1 fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 7, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 8, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 8a9a03f feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 437b0b1 fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 8, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 8, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 8a9a03f feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 437b0b1 fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 8, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 9, 2026
…vice (#1882)

## Problem

The speech service had no knowledge of project names.
It misheard terms such as `kubectl`, and only agent cleanup could fix them later.

## Change

- **Speech terms:** per project, in Text processing
- **Format:** one per line, up to four words
- **Sent as:** standard `prompt`, comma list
- **Over four words:** left out of `prompt`
- **Spelling:** `heard, misheard -> Term`
- **Spelling applied:** by T3, on every service
- **Live:** previews and final both spelled
- **Paths:** batch and live, via `?projectId=`
- **Resolution:** in `VoiceInput`; routes stay thin

Terms are per project, not per environment, because names differ by repository.
One entry over four words makes RSI-Software/promptletariat#159 read the whole `prompt` as prose and drop every hotword, so T3 leaves such entries out.

## Scope and approval

Fork-only dictation (`voice-input` domain), stacked on the base URL PR.
T3 sends only OpenAI-standard fields; the earlier Promptletariat extensions switch is gone.

## Verification

- Server voice-input tests → pass
- Web voice-input and rpc tests → pass
- `vp run check:changed` → exit 0
- `vp run fork:ci` → exit 0
- Chrome: no extensions switch; save works

![dictation-settings-terms.png](https://github.com/user-attachments/assets/5131e649-35ef-4bac-b8dd-2b68bbc6a5bc)

Claude Opus 5.5 via Claude Code in T3 Code.

## Fork trailers

Squashes:

- 8a9a03f feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 437b0b1 fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 2f35a07 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)
- 274db9b fixup! feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 9, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Nov 9, 2026
Squashes:

- 26171fbd8fa feat(server): scaffold external voice dictation (#1672) (#1672)
- da9e3d289f0 feat(server): transcribe recordings with Meta Muse (#1673) (#1673)
- c7b4f781cf5 feat(desktop): record dictation into editable chat drafts (#1675) (#1675)
- 9d5dcb319c9 fix(desktop): keep dictation transcribing across thread switches (#1684) (#1684)
- 7782b1f05b3 feat(desktop): stream live Meta dictation into the composer (#1686) (#1686)
- 80071d08816 fix(voice-input): keep Meta realtime dictation on HTTP/1.1 WebSockets (#1710) (#1710)
- 7edffba3c2b feat(voice-input): live dictation preview for any OpenAI Realtime endpoint (#1775) (#1775)
- 2283697771d fix(voice-input): use InlineButton for processing error dismissal (#1800) (#1800)
- 54c87d908a2 fix(voice-input): one base URL derives dictation upload and live paths (#1881) (#1881)
- bd64d598282 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
Co-authored-by: donjor <[email protected]>
donjor added a commit that referenced this pull request Nov 9, 2026
…d current terminal settings (#1912)

## Problem

The README clips and bullets predate recent fork work:

- **Threads:** shows the old menu grouping flow
- **Dictation:** says live words are Meta only
- **Terminals:** cites a removed Appearance switch

## Change

**Threads**

- New dark clip: drag to group, auto title, collapse
- Bullets: parent, Working, projects, MCP
- More clips: a working parent carries its group

**Dictation**

- Bullets: OpenAI Realtime, speech terms, cleanup
- Clip: live preview, then Finish
- More clips: speech terms settings

**Terminals**

- Default shell lives in Settings → Terminal

Other clips come from merged PRs:

- #1775
- #1882
- #1904

## Scope and approval

The maintainer asked for refreshed README captures of new features during the dark-mode Electron UAT.

## Verification

- Markdown lint: edited lines clean
- `vp run fork:ci` → exit 0
- Claims checked against `docs/fork/user/` guides

**New Threads clip**

https://github.com/user-attachments/assets/dfb1fa2f-1d93-4bfa-bc83-c1d36261a9f1

Claude Opus 5.5, Claude Code.

## Fork trailers

Fork-Domain: fork-meta
Fork-Tier: core
Co-authored-by: donjor <[email protected]>
rsi-software-agent Bot pushed a commit that referenced this pull request Nov 9, 2026
Squashes:

- 26171fbd8fa feat(server): scaffold external voice dictation (#1672) (#1672)
- da9e3d289f0 feat(server): transcribe recordings with Meta Muse (#1673) (#1673)
- c7b4f781cf5 feat(desktop): record dictation into editable chat drafts (#1675) (#1675)
- 9d5dcb319c9 fix(desktop): keep dictation transcribing across thread switches (#1684) (#1684)
- 7782b1f05b3 feat(desktop): stream live Meta dictation into the composer (#1686) (#1686)
- 80071d08816 fix(voice-input): keep Meta realtime dictation on HTTP/1.1 WebSockets (#1710) (#1710)
- 7edffba3c2b feat(voice-input): live dictation preview for any OpenAI Realtime endpoint (#1775) (#1775)
- 2283697771d fix(voice-input): use InlineButton for processing error dismissal (#1800) (#1800)
- 54c87d908a2 fix(voice-input): one base URL derives dictation upload and live paths (#1881) (#1881)
- bd64d598282 feat(voice-input): send per-project speech terms to the dictation service (#1882) (#1882)

Fork-Domain: voice-input
Fork-Tier: core
Fork-Upstreamable: no
Co-authored-by: donjor <[email protected]>
Co-authored-by: donjor <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant