Skip to content

CloudCLI UI v1.39.0

Latest

Choose a tag to compare

@yaleh yaleh released this 07 Oct 14:43

1.39.0 (2026-10-07)

New Features

  • AC-234: record a run's source from caller.via, add mcp to ChatRunSource (6588622)
  • AC-235: address runs by runId — runsById summaries, aborted status, injectable retention/clock (663ece7)
  • activity-dock: AC-190 人工关卡 —— 记录小节 + 只读取证脚本 + 护栏判据 (ce37f20)
  • activity-dock: stop a task and background a foreground tool from the dock (AC-199) (d544ce2)
  • chat: chat.background-task control verb addressing the Turn Tracker (AC-197) (cbc6e10)
  • chat: chat.stop-task control verb with event-driven confirmation (33771d5)
  • chat: collapse control-verb ownership onto one entry, rework cancel-queued (6c5d766)
  • chat: draw the turn's status in the message flow at every viewport (7fd3598)
  • chat: execute ui.navigate by this device's policy (bd2170a)
  • chat: join a streamed block by blockKey on the client (9d0ac64)
  • chat: make the activity dock tell the truth when the server is unreachable (75a06bf)
  • chat: move the resident process facts from the dock's arrow to a pill in the header (f27f9a8)
  • chat: read-only mode for sessions held by a Claude Code background job (d81cbf4)
  • chat: remove composer resident switch; intent applies only to new sessions (8b944e6)
  • chat: replace the drawn scrollbar and turn rail with an input outline drawer (bd39344)
  • chat: session store absolute-index window model (64bf293)
  • chat: show this session's background tasks in the transcript (65bebd9)
  • chat: title the collapsed work segment with action, count and elapsed (e18c57e)
  • claude: give live streaming frames a block-level identity (03a8e9e)
  • claude: hand each session its own Claude Code title at launch (94f74a7)
  • claude: refuse an occupied session on the per-run path too (86aa952)
  • debug-agent: resident control queue — driver hands over the queued uuid (51760ea)
  • device-identity: announce the browser's identity on every WS connection (22db8cb)
  • mcp-gateway: AC-252 self-referential write guard (980fe05)
  • mcp-gateway: add approvals_list / approval_answer tools (AC-274) (44d3ede)
  • mcp-gateway: add ui_clients_list read tool (56cee44)
  • mcp-gateway: audit every tool call to mcp_audit_log with 90-day retention (AC-244) (10c053c)
  • mcp-gateway: declare @modelcontextprotocol/sdk and zod as dependencies (AC-239) (4a2d0ab)
  • mcp-gateway: declare accurate MCP tool annotations for every tool (2eb4afa)
  • mcp-gateway: expose GET /api/settings/mcp-audit readback (AC-304) (0659f40)
  • mcp-gateway: implement session_cancel_queued (AC-271) (25bf66c)
  • mcp-gateway: implement session_create and session_interrupt (AC-250) (061da3d)
  • mcp-gateway: implement session_reconfigure (AC-272) (6f3d6a1)
  • mcp-gateway: implement session_start/session_close over resident host service (AC-251) (7f73cd5)
  • mcp-gateway: make a reference that names nothing an error (AC-287) (15530fc)
  • mcp-gateway: name the missing scopes in an INSUFFICIENT_SCOPE denial (AC-286) (6eb734c)
  • mcp-gateway: OAuth-aware /mcp auth with discovery challenge (AC-263) (30f45ad)
  • mcp-gateway: session_send returns a runId at once (AC-249) (224e864)
  • mcp-gateway: stage-3 read tools over the injected services (AC-245) (85db940)
  • mcp-gateway: stateless /mcp endpoint gated by MCP_ENABLED, mounted before static (AC-240) (4df2d93)
  • mcp-smoke: AC-256 嵌套冒烟取证通道 + --check-record 判据 (6dd9de0)
  • mcp: AC-273 session_background lists and stops held background work (1e9fcff)
  • mcp: add ui_open_session — open a session in a chosen browser device (7f54cf7)
  • oauth-consent: re-confirm the password and rate limit it per source (e9c60b3)
  • oauth-consent: render the authorization screen as an SPA (8bdfc15)
  • oauth: AC-259 authorization-server semantics (49ba2a6)
  • oauth: add access_tokens table and personal access token service (ccb96e7)
  • oauth: DCR registration policy and manual client creation (AC-264) (0157c13)
  • oauth: mount the authorization-server HTTP surface end to end (AC-268) (714adb5)
  • oauth: move the consent screen to the SPA behind a JSON contract (cf9d805)
  • oauth: rate limit consent password submissions per source (AC-261) (74f3e83)
  • oauth: settings routes for grants and clients (AC-265) (ad80150)
  • oauth: validate access-token scopes against a single vocabulary (fb85d0b)
  • oauth: 每个 oauth/mcp 请求留下一条无密日志 (f294161)
  • providers: add Claude Schedule Tracker (AC-192) (431b60d)
  • providers: add lease deriver and AC-195 frame-by-frame parity criterion (78f1b30)
  • providers: add per-session Claude Turn Tracker (AC-186) (cea23b7)
  • providers: emit a transcript row on a background task's terminal transition (bf7e44f)
  • providers: incremental session history cache parses only appended tail (8f7a264)
  • providers: mirror a settled ai-title into the resident peer registry (ce36452)
  • providers: read a message window around an id (b8e0187)
  • providers: session turn outline endpoint (AC-209) (f94161c)
  • quay: add Stage goals, Task ledger, Tests and Fan-in panel cards (05f8afc)
  • quay: add task/ADR detail lists and wire the dashboard link (8a501dd)
  • quay: project quay status display (sidebar badge + read-only panel) (df88baf)
  • resident: start a resident session on demand instead of binding it (3123e56)
  • server: retire /api/agent and the plaintext api_keys mechanism (AC-226) (c31eba8)
  • session-hosts: extract resident host start/close into a reusable service (b2cdbf6)
  • settings: /api/settings/access-tokens create/list/revoke routes (7eb8bfc)
  • settings: connected apps and OAuth clients sections (AC-266) (4b7601b)
  • settings: per-device MCP navigation policy and device name (a8f8b5e)
  • transcript: terminal row only for real background tasks, one line, no segment break (ce4da55)
  • voice: capture pre-VAD raw audio for a passive corpus (d34758a)
  • voice: carry dashscope-omni usage counts into meta.usage and the transcribe log (2d85084)
  • voice: label what the user changed between the dictation and the send (def6c58)
  • voice: ship the browser recogniser same-origin from a directory path (d9a896d)
  • voice: stage-0 readout report and its criterion (c67b34b)
  • voice: 客户端本地识别适配器接入同一 ASR 缝(locality 'local-client') (ec485c1)
  • websocket: activity snapshot protocol with rev, REST + whole-snapshot WS upsert (6695421)
  • websocket: ChatControlService.send returns runId immediately (AC-230) (4187dc2)
  • websocket: five chat control verbs share one injectable access entry (AC-232) (7d92177)

Bug Fixes

  • AC-233: keep the chat.send refusal synchronous across the control-service seam (5cc59b4)
  • activity-dock-human-gate: unpin the guard test from the pre-acceptance state (71645e0)
  • activity-dock: drop the dead backTask that red the repo lint stage (4c0f4fe)
  • activity: attach the activity feed on activity.subscribe, not chat.subscribe (dcafe32), closes #1
  • activity: heartbeat carries run-in-flight bit so an idle phase no longer clears a live turn anchor (b9b177d)
  • chat: activity dock with no session ignores other sessions' frames (29298db)
  • chat: address every transcript row, and make the active view readable on both layouts (635d34d)
  • chat: collapse Reasoning trigger-to-body gap with the body (696ff8f)
  • chat: give landscape phones a height tier so the transcript survives (00a1f52)
  • chat: guard ResizeObserver in the rail's new column and scrollbar (4dddb4a)
  • chat: ignore activity.heartbeat control frame; make merge immune to id-less rows (6a5ba32)
  • chat: keep the outline handle clear of header and composer, show it on mobile (357a43d)
  • chat: make the replay cursor run-aware so a reconnect can replay a new run (c61e42b)
  • chat: name the debug agent in a message header instead of Claude (18b6924)
  • chat: narrow the short tier to touch-only devices (faba31e)
  • chat: rebuild the resident host on edit-send instead of appending into it (2ea22ce)
  • chat: retire optimistic user echo when its persisted copy arrives over the socket (08ceae5)
  • chat: retire the project draft a first resident send was typed in (cc658ae)
  • chat: wrap the AskUserQuestion "Other" answer and stop the hint covering it (96ace60)
  • claude: hand over only a title the session actually has (db76a05)
  • claude: project real cross-session messages past the isMeta gate (f51943d)
  • css: stop global rules from overriding the elements they style (5e0fbca)
  • debug-agent: make a per-run scenario turn a run, so the merged activity sources see it (915e92a)
  • drivers: cap the full-suite runner's own scope at 24G (4cf98d8)
  • drivers: pin PATH so the launcher starts the plugin it selected (1f4353b)
  • e2e: stabilize AC-171 criterion under load and mid-run HMR (5fee2e1)
  • i18n: give the Quay tab a real label in all 12 locales (e536fee)
  • mcp-gateway: keep the OAuth switch literal out of index.ts prose (AC-263) (34d1be2)
  • mcp-gateway: name the ui_open_session requester instead of null (ff0568e)
  • mcp-gateway: run audit retention sweep after the database is initialized (ba9eb2c)
  • mcp-gateway: spell the debug-agent gate vars through constants (AC-249) (1c4a85e)
  • mcp-smoke: 补 JSDoc 注解让 scripts/tsconfig 的类型检查回绿 (8997645)
  • mcp-smoke: 补齐 JSDoc 类型,scripts typecheck 回绿(AC-256 AC11) (f04f689)
  • oauth: let the consent form's redirect through CSP, refuse unregistered redirect_uri (3ad2edf)
  • oauth: let the consent redirect chain through, and offer the whole scope vocabulary (1bf3cd8)
  • providers: key the resident turn phase by the app session id (2d1c7f6)
  • providers: refuse resident launch when a Claude Code bg job holds the session (1943cf9)
  • quay: give the panel's two responsive grids a base column count (807b848)
  • quay: resolve quay CLI per project root instead of the server PATH (f4d7422)
  • quay: stop reading a healthy task store and a failed read as the same thing (14d0a6b)
  • resident: re-read projected peer name after the title mirror moves the registry (bf7c2f0)
  • scripts: require ~/.local/bin on the server unit's PATH (3c76d1c)
  • scripts: run the :3001 server as a fixed systemd user unit, stop copying PATH (76fdb28)
  • server-test-lane: hold undici's 18 bad ports for the whole per-file process (15e021a)
  • sessions: prune superseded prompt branches anchored on the turn's branch point (8e0acb6)
  • sidebar: apply session-name filter to sessions named after their first upsert (e3a0855)
  • sidebar: apply the project session filter to live Conversations upserts (298f1af)
  • sidebar: keep Conversations list live on session upserts (2d43736)
  • sw: leave the OAuth and MCP paths alone; never resolve respondWith with undefined (b44b778)
  • test: AC-163 withdrawal client must send the required requestId (bf19009)
  • voice-trim: resolve the @/ alias in run-savings.mjs for plain node (518b92b)
  • voice: attribute AC-148's real-db reading by /proc handle ownership, not timing (686ce3f)
  • voice: load the AudioWorklet from the bundler's build, not the raw .ts source (a474797)
  • voice: mint attempt ids per process instance and never overwrite a recording (55b63cf)
  • voice: scope the AC9 residue reading by pid in the capture-audio criterion (e37f951)
  • voice: the saved recogniser, not the shared backend, decides the route (eefd3d4)
  • voice: 客户端 ASR 缝的三处回归(registry-first id、脚本夹具、pause-cues 断言) (6431d17)
  • websocket: unref the activity beat and re-project the hello announcement (9ffe827)
  • workspace-menu: mount the dropdown's rows only while it is open (3fcdbce)

Refactoring

  • chat: move the held-work lease helper to shared utils (4b1c33a)
  • claude: migrate claude-runtime.provider.js to TypeScript (no behavior change) (76a2a06)

Documentation

  • AC-172: record the 2026-10-03 retirement of the status bar lease-count keys (2c5abe6)
  • activity-dock: record the GOAL-014 human acceptance (AC-190) (36cb2ec)
  • activity-dock: record the GOAL-015 human acceptance (AC-201) (351066f)
  • activity-dock: step 4 of the AC-201 gate reads the capability disposition (6b98be4)
  • chat: analyse and design observability of Claude background work (7903a5d)
  • chat: analyse the doubled streamed segment and design block-keyed streaming (9ed7134)
  • chat: design one truthful activity dock for Claude sessions (8188e5c)
  • chat: mark the sequence/snapshot protocol design as deferred (fac1213)
  • chat: record rulings and follow-up measurements for the activity dock (ec73d2a)
  • chat: record the e2e fixture design for the truthful activity dock (0c4ee14)
  • claude: record the title-guard DoD legs and the host's title behaviour (fb73601)
  • experiments: voice-draft E-A 引用重建的结果(机械与人读) (0f6626d)
  • experiments: voice-draft E-A 引用重建的预注册、抽取规则与运行脚本 (849505c)
  • experiments: voice-draft E-A2 抽取清洗更正与 TTS 失败处理 (31ead77)
  • experiments: voice-draft E-A2 用上一轮输出校正识别错误的预注册与脚本 (013f9f8)
  • experiments: voice-draft E-A2 结果,用上一轮输出校正识别错误 (f6be060)
  • experiments: voice-draft E-C 事后敏感性分析的标准答案(仅口述可推出的核心诉求) (227c816)
  • experiments: voice-draft E-C 标准答案第二版(含独立标注比对)与口述脚本 (800b0c9)
  • experiments: voice-draft E-C 结果(预注册判定与事后敏感性分析) (9b40c3c)
  • experiments: voice-draft E-C 追问链的核心诉求标注(作者版,先于独立标注提交) (230d7f1)
  • experiments: voice-draft E-C 预注册与运行脚本 (40695ce)
  • experiments: voice-draft E-C2 带认知类型的草稿——预注册、标准答案与运行脚本 (01120a8)
  • experiments: voice-draft E-C2 结果(带认知类型的草稿:机械指标与盲评) (35fe407)
  • experiments: voice-draft E-C3 一次调用抽取加代码渲染——预注册、流水线与运行脚本 (c57132d)
  • experiments: voice-draft E-C3 结果(一次调用抽取加代码渲染:机械指标与盲评) (7dea3b8)
  • experiments: voice-draft E-C4 修省略的回答——预注册、新案例脚本与流水线 v2 (1868aa2)
  • experiments: voice-draft E-C4 新案例运行脚本 (643fe36)
  • experiments: voice-draft E-C4 第一批 hold-out 结果(v2:保留问加答) (80ecf93)
  • experiments: voice-draft E-C4b v3 修法的预注册、第二批新案例与流水线 v3 (9b6f8d7)
  • experiments: voice-draft E-C4b 分析脚本(v1/v2/v3 三版本渲染) (c3afa92)
  • experiments: voice-draft E-C4b 第二批新案例的结果(v3 修好省略的回答) (a9c2c06)
  • experiments: voice-draft S1 与 S2 结果、人读审计与偏差记录 (09c06f6)
  • experiments: voice-draft S1 与 S2 预注册及脚本标准答案 (1b71096)
  • experiments: voice-draft S1 分析脚本与 S2 识别、草稿运行脚本(提示词在取数前冻结) (a85348f)
  • experiments: voice-draft S1 运行脚本(提示词在取数前冻结) (23d0051)
  • experiments: voice-draft S2 补充 1 与 2 结果,整份草稿重写(纯文本与 JSON)的机械指标与人读审计 (0c72261)
  • experiments: voice-draft S2 补充 1,整份草稿重写的预注册与运行脚本 (595a807)
  • experiments: voice-draft S2 补充 2,整份重写加 JSON 输出的预注册与运行脚本 (40cd8cf)
  • experiments: voice-draft S2 音频生成脚本 (fd530c9)
  • experiments: voice-draft 结果文档补全一处未写完的句子 (2795336)
  • mcp: 人 yale 写入两条人工验收行 —— AC-257 与 AC-277 (79003c9)
  • mcp: 人 yale 写入第三条人工验收行 —— AC-270 (cea9151)
  • ops: correct the restart-kills-sessions claim to match SIGTERM shutdown (0560bc1)
  • proposal 的活动状态与 Stop 规则改为桌面与移动一致 (0cafe92)
  • proposals: mcp-gateway SPEC v3.1 — CloudCLI MCP over the session control plane (92fdd25)
  • proposals: mcp-gateway SPEC v3.2 — map phases to GOAL-018..022, backfill two deviations (49bb81b)
  • readme: describe the fork's changes since v1.37.3, drop upstream promotion (fc4aec8)
  • resident: §12 随出路 (a) 改写——地址是读来的,不是自赋的 (f3a9661)
  • ui: ui_visible_context 扩展范围规划 —— 四个维度的现状与落地范围 (f557c4b)
  • voice: correction feedback-loop proposal + post-ASR disambiguation pilot (d9ed637)
  • voice: drop the post-deploy verification scaffold (cf0a6ba)
  • voice: freeze the replay-stream extraction and the TTS+ASR runner before data (7337f74)
  • voice: itn and language settings cannot improve segmentation (v8) (2c7b336)
  • voice: pre-register round 4 - harmful errors, close-set selection, long-message sources (0df09b4)
  • voice: pre-register round 5 - local SenseVoice, confidence, CTC candidate scoring, versus Omni (1bf5cf1)
  • voice: pre-register round 6 with the patched sherpa engine and its patch (dcbe43f)
  • voice: pre-register the replay of real session input before any data (336fed4)
  • voice: preregister the punctuation post-processing experiment (v7) (fb38273)
  • voice: preregister the SenseVoice itn/language punctuation experiment (v8) (ba0aa8a)
  • voice: proposal for VAD segmentation of long and continuous voice input (72dfc52)
  • voice: punctuation model does not beat SenseVoice's own punctuation (v7) (7fe3a6a)
  • voice: record the audio, local browser and phone engine, and rewrite-button decisions (0d080a8)
  • voice: replay of real session input - flag, find, maintain, converge (6b8ebff)
  • voice: round 4 results - harmful errors, closed-set selection, long-message sources (b1347bf)
  • voice: round 5 results - local SenseVoice versus Omni (7ece83a)
  • voice: round 6 results - patched sherpa engine, provenance, scale rule, aliases (945ed5a)
  • voice: shrink VAD sweep sample sizes and cap recognition spend at 2 CNY (8525516)
  • voice: state the real-db handle match as the whole -* sidecar family (b922a26)
  • voice: write round-4 conclusions into the proposal (section 5.8) (34c8aae)
  • voice: write rounds 5-6 into the proposal - local engine, confidence, aliases, rewrite split (55749e3)
  • voice: write the replay results and the tolerable-error principle back into the proposal (c826174)
  • voice: 客户端 ASR 探针补真机读数;探针页加下载进度与批量上传 (a71430b)
  • voice: 纠错反馈回路提案修订 —— 三档标记、点词弹层与借用边界 (5e14496)
  • 最终报告 + 三个滚存台账(L1 81/81、L2 11/11 收尾) (ccb871b)

Styling

  • oauth: order the shared consent-path import after the @/ group (a9c3b91)

Maintenance

  • claude: make the criterion's types and import grouping clean (2dc67d1)
  • quay: declare loop.suite_runner=quay-buckets so fan-in runs the lane-aware runner (ee1b18d)
  • quay: drop pinned 0.14.0 native provider path/mcp_entry after init reconcile (e42cb7e)
  • quay: rebind native provider path/mcp_entry from plugin 0.10.0 to 0.14.0 (7425fba)
  • tasks: gap-ac175-criterion-red-is-uncommitted-composer-wip record AC state and completion record (6007c05)
  • tasks: gap-ac242-mcp-loopback-guard-before-auth record AC ticks (99493fb)
  • tasks: gap-ac277-mcp-resident-human-gate 记录 AC1-5/7 与 ## Evidence(transport ABI tick) (c3968b1)
  • tasks: gap-chat-control-ownership-cancel-queued ABI tick (7/7) + evidence (f6b497c)
  • tasks: record peer-row exemption falsification readings (94835d8)
  • tasks: transcript-long-session-e2e-seed AC ticks (transported ABI bytes) (80e9ad8)
  • voice-vad: fill qwen3.8-omni-flash prices so the recognition budget guard can run (aaca7a8)
  • voice: drop the committed python bytecode from the SenseVoice scripts (61510b6)

CI/CD

  • release: publish to npm via trusted publishing (OIDC) instead of NPM_TOKEN (c2fa2a6)
  • release: upgrade npm after npm ci so the lockfile's mirror URLs still install (ed5c067)

Tests

  • AC-166: give the resident (re)spawn wait measured lane-load headroom (ddecc9d)
  • ac286: assert the stop payload's stopped/taskId fields in leg (d) (d09a0fe)
  • ac287: migrate AC-284's criterion's two exempt class probes (a3a501e)
  • ac287: migrate AC-289's criterion and sync the count pin (4be5076)
  • chat: assert DOM-node identity as booleans so a mutation fails instead of hanging (ddfaca6)
  • chat: assert the survivor identity in the straddled-tool-row shape (460cb04)
  • chat: cover the outline handle's pixel clamp (c78526e)
  • chat: model unmeasured rows with their real 100px placeholder height (e2042ac)
  • chat: pin the block-keyed join, its gaps, and the row key (a06a1f4)
  • chat: place the turn-rail i18n completeness test in its owning module (826ee6e)
  • chat: split the reasoning-spacing cases so they redden independently (d15a7cf)
  • claude-cli-path: isolate CLAUDE_CLI_PATH for the default-path cases (44d8a3c)
  • claude: assert the freeze where it is, not where the design assumed it (853ff24)
  • claude: measure where the name freeze actually lives (6cd3a23)
  • claude: read the control's registry while the launch is still held (3121b5b)
  • debug-agent: derive the delivery-leg window from the observer's own measured latency (25138f4)
  • debug-agent: read the withdrawn-no-round claim before the queue-emptiness claim (b12202b)
  • debug-agent: teach the vocabulary guard the dialect's peer origin kind (c470fde)
  • e2e: assert the collapsed work-segment title in a real browser (c0d6894)
  • e2e: bound the mcp-settings startup path with warm-up + replay guard (1e995cd), closes #username
  • e2e: bound the resident-status-bar startup path (b57428a)
  • e2e: composer draws no resident switch; AC2 silent-conversion regression leg (876147f)
  • e2e: drive ui.navigate end to end in a real browser (309e257)
  • e2e: make the turn-jump criterion discriminate id from timestamp, and detach (37ae049)
  • e2e: pin MCP_ENABLED/PUBLIC_BASE_URL explicitly in mcp-settings criterion (d560d72)
  • e2e: print the strip's row contents and the scenario row delta (bc21e13)
  • e2e: real-browser DoD reading for the task-terminal-row criterion (803ea8f)
  • e2e: share one budget across the first landing's two probes (84ef903), closes #username
  • mcp-gateway: make the mount-order leg measurable via GET/DELETE /mcp (615cbf3)
  • mcp-gateway: sharpen AC-272 criterion readings (59d6e47)
  • mcp-gateway: type the AC-287 fakes so typecheck passes (39880d9)
  • mcp: cover ui_open_session in the AC-303 write-notification plan (8253025)
  • names: 修 claude-session-name-authority 的 typecheck 红(挡住落地的那条) (7362011)
  • oauth-consent: add the DoD visual-review legs to the consent criterion (d791d09)
  • oauth: AC-226 criterion — read /api/agent + plaintext key retirement from the syntax tree (3db8b21)
  • oauth: red-first criterion for /api/settings/access-tokens routes (5924ea0)
  • providers: record AC-210 mutation-probe evidence in the criterion header (368d3be)
  • providers: record the measured limit of the not-early criterion (bb52e12)
  • providers: strip the registry's runId in the unattended-turn frame projection (bed8c58)
  • quay: pin the unpaged task-list read that the ledger counts aggregate (af0f1ea)
  • resident-status-bar: align test 3 key table with shipped badge keys (276a9c8)
  • resident-status-bar: route both deliberate reloads through the bounded replay (e4703a6)
  • resident: criteria for the on-demand start route and the refusal UI (41b12fb)
  • resident: 占位名是过渡态、且永不当地址的判据 (c2838b5)
  • resident: 地址永不是 App 侧给会话的名字 (d49a682)
  • session-hosts: budget covers the three boots it shelters (AC-166) (fa07717)
  • session-hosts: pin the measured stopTask capability in the residentFeatures guard (3a28c2b)
  • session-hosts: re-project the hello's turn-phase fields in per-run parity (fec466d)
  • session-hosts: widen claude residentFeatures guard to the ninth field (stopTask) (12df4f4)
  • settings: AC-255 MCP block + token-scope i18n completeness criterion (b470200)
  • settings: guard connectedApps/oauthClients i18n completeness across locales (AC-267) (cef5aee)
  • suite: 服务器测试文件数 232→233,修精确计数钉 (2df26ad)
  • suite: 服务端测试文件精确计数钉 230/232→233/235(本任务新增 3 个服务端测试文件) (e9f0122)
  • voice: AC-152 residue guard excludes concurrent harness writers, keyed on size (92664f8)
  • voice: align raw falsify temp-copy prefix with the shared __criterion-falsify- convention (20d925d)
  • voice: complete the wholesale voiceDebug mocks for isVoiceVadEnabled (678cb92)
  • voice: judge the shipped worklet by the artifact, with the defect as a false form (6ee2845)
  • voice: the error vocabulary is 14 members once ENGINE_UNAVAILABLE exists (a89e19a)