feat(keyboard): harden polish/clipboard guards and ship 1.6.6 (build 59)
Keep marketing version at 1.6.6 and bump build to 59. Strengthen never-answer polish safeguards, clipboard reply-intent continuity, voice undo UX, device UITests harness, eval fixtures, and What's New assets.
This commit is contained in:
@@ -7,7 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Fixed
|
||||
- **Polish never answers a question draft**: dictating 「你能听到我说话吗?」 could come back as 「能听到,你说。」. The never-answer boundary and the question guard now ship with every style, every intensity, and custom packs (heavy fun styles previously bypassed both), question detection covers A-not-A forms such as 「你在不在」, and a deterministic validator rejects any result that stops asking the draft's question and falls back to a local clean of the user's own words. A 800-request live matrix across 10 styles × 2 intensities × 20 short-to-long phrasings now delivers zero answers. / **润色不再代答问句**:口述「你能听到我说话吗?」可能被润色成「能听到,你说。」。现在「不可协商边界」与问句守卫覆盖全部风格、全部强度与自定义风格包(此前重度趣味风格会绕过两者),问句识别补齐「你在不在」等正反问句式,并新增确定性校验:结果若不再是问句则丢弃,回退为用户原话的本地清理。10 风格 × 2 强度 × 20 种长短句式、共 800 次真实模型压测下代答为 0。
|
||||
- **Polish diagnostics**: `polish.config` now records style, intensity, sampling temperature, and which safeguard layers reached the model, and `polish.skippedLLM` records locally short-circuited utterances. / **润色诊断**:`polish.config` 记录风格、强度、采样温度以及本次真正发给模型的防线层级,`polish.skippedLLM` 记录本地短路的语句。
|
||||
- **Clipboard intent continuity**: one persisted intent now survives paste consent and host cold-start, automatically begins recording when ready, and can always be cancelled; preparing no longer swallows taps and recording accepts either tap or hold to finish. / **剪贴板意图连续性**:单一持久化意图跨越粘贴授权与宿主冷启动,就绪后自动开录且始终可取消;准备态不再吞点击,录音中点按或长按均可结束。
|
||||
- **Clipboard "reply in a language" command**: "帮我用英文进行回复" (reply in English) no longer collapses into a plain translation of the clipboard. The command contract now treats "reply in X" as one action where the language only picks the reply's wording, adds a reply-in-English few-shot, and a deterministic reply-intent guard hard-injects the reply directive whenever the instruction asks to reply. / **剪贴板「用某语言回复」指令**:「帮我用英文进行回复」不再塌缩成只把剪贴板译成英文。指令契约现把「用 X 语言回复」视为一步动作(语言只决定回信用什么语言写),新增「用英文回复」反例,并在检测到回复意图时确定性地强制注入回复指令。
|
||||
|
||||
## [1.6.6] - 2026-08-08
|
||||
|
||||
### Added
|
||||
- **Voice undo**: square undo key beside the mic (outer edge, handedness-mirrored) rolls back the last dictation / clipboard-command insertion when it is still at the caret. / **语音撤销**:麦克风旁外侧圆角撤销键(随左右手镜像),在听写/剪贴板指令结果仍位于光标前时一键撤回。
|
||||
- **In-app release notes**: after onboarding, show a What's New sheet when the marketing version changes; Settings version row opens the same remote page (`download.osglab.com`) with current version, language, and theme. / **应用内更新说明**:完成引导后,在 marketing 版本变化时弹出更新说明;设置页版本行打开同一远程页(`download.osglab.com`),并传入当前版本、语言与深浅色。
|
||||
- **Typing input settings l10n**: localize schema / fuzzy / resource strings on the Text Input settings page (and related General toggles) via in-app language. / **文本输入设置双语**:文本输入设置页的方案 / 模糊音 / 资源文案(及通用里相关开关)跟随应用内语言。
|
||||
- **Clipboard voice command**: long-press the mic when the clipboard has text to treat speech as an instruction over a one-shot clipboard snapshot and insert the result; short press stays dictation; tap again to stop (not release-to-stop). / **剪贴板语音指令**:剪贴板有文字时长按麦克风,将语音视为对该次冻结快照的指令并插入结果;短按仍为听写;再点一下结束录音(非松手结束)。
|
||||
@@ -20,6 +29,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- **Clipboard 30s window & continuous rewrite**: drop the copy-time eligibility clock and multi-turn rewrite session; each long-press is an independent round. / **剪贴板 30 秒窗与连续改写**:去掉复制后资格计时与多轮改写会话;每次长按为独立一轮。
|
||||
|
||||
### Fixed
|
||||
- **Release notes cache**: load the remote What's New page with `reloadRevalidatingCacheData` so edited HTML is not stuck behind WebKit heuristic caching when the host sends no `Cache-Control`. / **更新说明缓存**:远程更新说明用 `reloadRevalidatingCacheData` 回源校验,避免服务器无 `Cache-Control` 时 WebKit 启发式缓存把旧 HTML 卡很久。
|
||||
- **Clipboard multi-intent commands**: "reply and translate to English" no longer collapses into a plain translation of the clipboard. The command contract now runs every spoken operation in order, translates the previous step's output instead of the material, pins the reply speaker (material "I" is the other party, reply "I" is the user), and rejects a restated material as a reply. / **剪贴板复合指令**:「回复并翻译成英文」不再塌缩成只把剪贴板译成英文。指令契约现按口述顺序执行全部操作,翻译作用于上一步产物而非材料,钉死回复视角(材料里的「我」是对方,回信里的「我」是用户),并禁止把材料复述后当作回复。
|
||||
- **Clipboard style-bias conflict**: dictation packs' "input is the user's draft, not a message from the other party" and "never answer the transcript" lines are stripped before the pack is injected as tone bias, so the personality can no longer override the reply intent. / **剪贴板风格偏置冲突**:注入语气底色前剔除听写风格包中「输入是用户草稿、不是对方消息」「不回答原文」等语句,避免人格设定压过回复意图。
|
||||
- **Clipboard prepare stuck**: after the first Allow Paste, do not double-`startRecording`; recover or cancel when host never confirms capture so UI cannot remain on「准备录音…」. / **剪贴板卡在准备录音**:首次「允许粘贴」后不再重复 `startRecording`;宿主未确认采音时及时恢复或取消,避免 UI 一直停在「准备录音…」。
|
||||
- **Clipboard prepare decision tests**: unit-cover restore/dedupe/adopt/abort matrices (including a 20-round stress case) so paste-alert reopen cannot regress into a second start. / **剪贴板准备态决策单测**:覆盖恢复/去重/领养/中止矩阵(含 20 轮加压),防止粘贴弹窗重开再次双发 start。
|
||||
- **Clipboard cold-start handoff**: when the host app is not alive, long-press stores a sticky voice+snapshot and opens `startflow` without entering fake「准备录音…」; after return (including default typing → forced voice), the user long-presses again to start blue clipboard recording. / **剪贴板冷启动交接**:宿主未活时长按只保留语音+快照粘性并走 `startflow`,不进入假「准备录音…」;返回后(含默认打字→强制语音)再长按才进入蓝色剪贴板录音。
|
||||
|
||||
Reference in New Issue
Block a user