# HyperTwist Phase 6R-AJ Handy external dictation history and output routing implementation packet

Created on `2026-05-31`

## Status

- bounded permissive HyperTwist packet
- landed `Phase 6R-AJ` implementation slice

## Purpose

This packet lands the only justified narrow `cjpais/Handy` reopening above the
already landed HyperTwist speech stack.

The landed slice is:

- external dictation-shell profile/state
- retained transcript-history and recall-list shell behavior
- paste, clipboard, typing, and script-oriented output-routing posture
- optional transcript post-process overlay posture

It is not:

- top-level provider/session ownership
- core native STT runtime ownership
- Python orchestration ownership
- actual global hotkey, mute, or device-selection ownership
- local model catalog/download/checksum/unload ownership
- broad assistant-platform scope

## Current authority basis

This implementation packet stands on:

- `docs/arch/HYPERTWIST_PHASE6R_AJ_HANDY_EXTERNAL_DICTATION_HISTORY_OUTPUT_ROUTING_PREPARATION_PACKET_2026-05-31.md`
- `docs/HYPERTWIST_HANDY_OFFLINE_DICTATION_SHELL_HIERARCHY_RECONCILIATION_2026-05-28.md`
- `docs/REPO_LICENSE_TRACKING.md`
- `docs/v6_5_deep_manual_pack/HyperTwist/FEATURE_REGISTRY.md`
- `docs/v6_5_deep_manual_pack/HyperTwist/ROADMAP.md`

## Landed scope

The current code now owns a bounded `Handy`-derived adjunct seam through:

- `FHyperTwistSpeechExternalDictationShellProfile`
- `FHyperTwistSpeechExternalDictationShellState`
- retained transcript-history entry/output-route records above the current
  speech session
- session-config defaults for the external dictation shell profile
- service-health capability exposure for:
  - `externalDictationShell`
  - `speechTranscriptHistoryShell`
  - `speechOutputRoutingShell`
  - `speechTranscriptPostProcessOverlay`
- transcript-history accumulation above:
  - `SubmitActiveCompanionSpeechUtterance(...)`
- focused automation in:
  - `HyperTwistHandyPhase6RAJDictationAdjunctContractTest.cpp`

## Why this is still intentionally bounded

This packet lands a shell/posture layer only.

Still deferred:

- actual OS-level global hotkeys or mute/device-selection ownership
- actual clipboard or desktop typing execution ownership
- local model catalog/download/checksum/unload ownership
- provider/session ownership
- payload shipping
- voice-output or broad assistant-platform scope

## Validation

Current validation for this VPS-side turn is source-level only:

- `git diff --check`
- focused source review against the current speech session and shell substrate

The authoritative Unreal build/test lane for future packet verification is now:

- Windows reverse-SSH validation when the task benefits from Unreal validation
  and the VPS lacks `UnrealEditor`

Important limitation:

- if the Windows checkout does not yet contain the same source files as the VPS
  working tree, do not claim that the Windows Unreal pass covered this packet

## Queue effect

This packet consumes the justified `Phase 6R-AJ` reopening.

`cjpais/Handy` is no longer only a later-retained speech-adjacent note. It is
now a bounded live adjunct row above the landed speech stack.

The next clean move is to return to the retained repo-row queue rather than
widen this row into a broad speech-platform packet.
