HEL-905: unified review handoff + follow-up package honesty fixes (first-line blocker, register_asr scope, ledger jq boundary, mic-interrupt T0 time base)
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"baseline_version": "1.12",
|
||||
"read_commit": "7cb73429f7a0585bed17873179a627c890336c70",
|
||||
"task": "HEL-905:HEL-903 前端返修与 HEL-904 后台返修的统一离线复审(总工)。在自己独立分支 hel-905-unified-review@7cb73429 集成前端088ac62(原作者源码51669aa,11文件逐字节一致)与后台07dda2b,不重出架构、不另起视觉、不重复派工;一次审完三处前端修正(语音合成五态与ASR无单独健康检查的诚实说明、演示零API外发、session voice固定本次声音)与500/503/断连恢复流(先刷新找cg-编号条目、缺资料标注、不自动重登记/不自动删除)、后台通话持有方案的失败/取消/挂断转欠账/TTL结算路径、以及补测包材料可批性。真实cap=0,零部署、零下载安装、不发真实请求、不合并PR",
|
||||
"requirement_ids": ["CG-006", "CG-009", "CG-010", "CG-013", "CG-014", "CG-015", "CG-016", "CG-018", "CG-019", "CG-020", "CG-021", "VIS-003", "VIS-004", "VIS-008", "VIS-010", "VIS-013", "UX-001", "UX-003", "UX-005", "UX-006", "AM-001", "GOV-001", "GOV-002", "GOV-003", "GOV-004", "GOV-005", "GOV-006", "DEL-001"],
|
||||
"deliverable": "统一复审结论(本卡评论)+集成分支 origin/hel-905-unified-review @ 7cb73429f7a0585bed17873179a627c890336c70(merge 前端088ac62与后台07dda2b于 b09a907 之上,历史正常保留)。独立核验:11文件SHA256与原作者改后清单逐一一致;前端三处修正与恢复流按源码逐行复核(callVoiceOf只认严格id、default=默认声音、缺答=声音未说明不猜、失败/结束复位OFF、late grant被stale/gen挡住;演示模式全部效果守if(!real)不发任何请求;uncertain分类422/409/离线=不确定false、5xx/发送后断=不确定true,主按钮换刷新列表、从不自动重登记);后台持有hold在capture写文件后无await间隙登记、挂断成功/挂断失败转欠账/TTL到期/dispatch失败/请求取消五路释放、Event门控无sleep。总工独立复跑(复用既有venv311,零安装):pytest tests 380/380、verify_hel899_custom_voice 12/12、ruff src tests scripts 通过;需求检查4/4(origin/main与b09a907各带/不带本handoff)。前端构建/单测/浏览器因web/node_modules缺失未独立复跑,如实列为待批项,不以作者148/148、90/90冒充",
|
||||
"acceptance": [
|
||||
"集成核验:7cb73429含088ac62与07dda2b两个先祖、基点b09a907;author-manifest.json 11文件改后SHA256与统一head工作树逐一一致(含handoff JSON共11项match 11/11);前端仅作者源码,总工未替作者改视觉方向",
|
||||
"前端三处修正复核:readVoiceStatus五态(none/off/ok/down/unknown)+ASR行如实写「没有单独的健康检查,以实际通话为准」;演示模式services/voiceStatus效果全守if(!real)零API外发;session voice只取本通grant严格id、命名查找按id匹配、跨id答案不显示、结束/失败复位、下一通用新选择",
|
||||
"恢复流复核:uncertain(5xx/发送后断/体不完整)→提示先刷新找cg-新条目、刷新前后集合比对指认新增项、idOnly条目如实标注「只有编号,缺本地资料」并说明可试听可用、无删除入口、绝不自动重登记或自动删除;Chromium自动重发登记POST的服务端非幂等风险如实保留(重试另立新cg-编号+共享注册表孤儿条目,合同§2.2如实声明,不宣称前端提示已解决服务端幂等)",
|
||||
"后台通话持有复核:capture写文件后同步登记持有(无await间隙);挂断成功、挂断失败转清理欠账、TTL到期_prune、dispatch失败、开房请求在途取消五条路径均释放持有;期间apply只记选择不写worker文件,会话响应voice=worker本通话实读;重叠通话较新capture重写文件的残余如实记录于合同§2.5,顺序用例通过不称竞态根除",
|
||||
"总工独立复跑:pytest tests -q 380/380、python -I scripts/verify_hel899_custom_voice.py 12/12、ruff check src tests scripts 通过(venv311=Python3.11.16复用,零安装零下载);需求检查4/4通过",
|
||||
"补测包核对(材料,不执行):连续ASR精确计数仍为待补阻塞且包内如实声明;包首行不声称材料齐备;停声量测单一时基、female_soft参考段sha256、8090新增cg-清单与回收、共享TTS快照恢复、失败计入用量等逐项在案;候选上限未超904已收紧值"
|
||||
],
|
||||
"deferred": [
|
||||
"前端独立复跑(同锁npm安装、tsc/vitest/build、浏览器两主题×电脑/手机、录音释放/字幕/取消迟到/演示零外发):web/node_modules缺失,本轮禁止安装,列为待主卡批准项;作者148/148与90/90仅为作者证据",
|
||||
"真实登记/试听/应用、真实worker读时点、打断停声帧级量测、真机麦克风:待主卡集中请批新窗口后执行,本轮真实cap=0、未部署、未触旧服务与8090/4080",
|
||||
"挂断失败转欠账与TTL到期释放持有时,远端房间删除落地前的极端未入场worker仍可能读到后续写透值:与重叠通话同类残余、每worker仍整通话单一音色,建议下轮在合同§2.5残余段一并补写明(非阻塞)",
|
||||
"连续ASR分钟级时长/连接重试的程序计数手段:仍为待补阻塞,窗口启动前须由总管在.12验证LiveKit/worker侧指标可执行性",
|
||||
"CG-009/R6删除与完整备份恢复、R5真机与整体验收、R1-R7完整功能继续承接;本卡通过≠自定义音色用户验收,更≠完整产品完成;旧HEL-879窗口封账永不重开"
|
||||
],
|
||||
"requirement_changes": [],
|
||||
"verification": [
|
||||
"git:7cb73429为origin/hel-905-unified-review head,merge-base核088ac62/07dda2b均为先祖、基点b09a907未回退、母线与PR#11未改写",
|
||||
"SHA256:docs/rework/hel903/preservation/author-manifest.json全部11项与统一head工作树一致(独立脚本核对match 11/11)",
|
||||
"venv311(Python3.11.16)独立复跑:pytest tests 380/380、verify_hel899_custom_voice.py 12/12、ruff check src tests scripts 通过",
|
||||
"需求检查4/4:--base-ref origin/main 与 --base-ref b09a907 各带/不带 docs/requirements/handoff-HEL-905.json 全部通过(60项)",
|
||||
"未验证(如实):前端构建/单测/浏览器未独立复跑(缺node_modules,不安装);真实语音链路全部未动;补测包材料审读基于文档与源码,实际量测留获批窗口"
|
||||
]
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
# HEL-902 补测包:自定义声音真机窗口申请材料(交总管集中请批)
|
||||
|
||||
状态:**材料备齐,未获批前真实 cap=0;本包只写材料,绝不执行**。所有上限为
|
||||
状态:**材料基本备齐,其中连续通话 ASR 精确计数手段仍是待补阻塞(§4,窗口前
|
||||
须在 .12 验证,不通过则含连续通话的步骤不得启动);未获批前真实 cap=0;
|
||||
本包只写材料,绝不执行**。所有上限为
|
||||
**新的一次性窗口授权**,不复用、不重开 HEL-879 已封账(其 14/40 请求、
|
||||
42717/500000 tokens、12/200 TTS 段保持封存,永不重开;剩余数≠新许可)。
|
||||
工程参数由工程定(只能收紧、不能放宽),用户只批准真实用量与设备操作。
|
||||
@@ -67,9 +69,12 @@
|
||||
- worker 日志 `turn_cancel`→最后 TTS 段发送时间差**只是内部子段
|
||||
证据**(附日志行),不能单独证明用户听到了约 1 秒停声;人工秒表
|
||||
仅作辅助复核。
|
||||
- **文字打断语音**与**真实设备麦克风打断**两个方向都做:文字方向=
|
||||
她语音输出中发送文字→声即停;麦克风方向必须用 LAN 机真实麦克风
|
||||
(非 fake device,不把假设备当真机)。
|
||||
- **文字打断语音**与**真实设备麦克风打断**两个方向都做:文字方向=
|
||||
她语音输出中发送文字→声即停;麦克风方向必须用 LAN 机真实麦克风
|
||||
(非 fake device,不把假设备当真机)。**麦克风方向的 T0 必须是
|
||||
同一录制时间轴上本地麦克风音轨的实际起声帧**(如 OBS 单文件多
|
||||
音轨:一轨浏览器输出、一轨本地麦克风,同一时钟可分离分析);
|
||||
仅画面中的说话动作不能直接代替实际音频起点。
|
||||
- 真实浏览器/设备麦克风路径:LAN 机真实麦克风完成第 4 项;如用户
|
||||
愿意,iPhone Safari 经 8363 WSS + 证书信任步骤试一连(可选,失败
|
||||
不影响其余结论)。
|
||||
@@ -112,7 +117,7 @@
|
||||
| LLM 请求 | ≤20 | 统一账本 acquire | **程序硬闸**(`think/budget.py`) |
|
||||
| LLM tokens | ≤60000 | 同上 | **程序硬闸** |
|
||||
| 嵌入 | 0 | acquire 拒绝 | **程序硬闸** |
|
||||
| 登记转写 ASR | ≤3 | `voice-usage.jsonl` `register_asr` 行(含本地元数据落盘失败者) | 工程监看(程序计数、非硬闸) |
|
||||
| 登记转写 ASR | ≤3 | `voice-usage.jsonl` `register_asr` 行(含本地元数据落盘失败者)+**面板侧转写失败/断连的如实口径见下** | 工程监看(程序计数、非硬闸) |
|
||||
| 试听合成 | ≤10 | `preview_tts` 行(含 TTS 出站无成功响应者) | 工程监看(同上) |
|
||||
| 通话 TTS 段 | ≤40 | worker 侧流水/日志计数 | 工程监看(见下,需窗口前验证命令) |
|
||||
| 音色登记(8090 upload) | ≤3 | 上传出站次数(含断连后已生效者) | 工程监看(面板上传账) |
|
||||
@@ -124,14 +129,25 @@
|
||||
(统一账本 acquire,超限直接拒绝);其余上限是**工程监看或程序计数**,
|
||||
靠实时看数+负责人停机,**不拿事后流水冒充硬闸**。
|
||||
|
||||
**登记转写 ASR 口径的如实边界(HEL-905 复审核实)**:`register_asr` 流水
|
||||
只在**登记成功(含本地元数据落盘失败)且参考文字来自转写**时记录;面板侧
|
||||
转写**失败或上传断连**时 API 只见到面板拒绝/异常,不产生 `register_asr`
|
||||
行——这部分用量不靠该流水,而由「音色登记(8090 upload)≤3(含断连后已
|
||||
生效者)」上界覆盖:**每次转写尝试必伴随一次 upload 出站**,两项上限须
|
||||
一起监看,不得只看 `register_asr` 行宣称 ASR 用量。
|
||||
|
||||
**连续通话 ASR(worker 内 FunASR 连续识别,区别于登记转写 ASR)的计数
|
||||
手段与停机**:
|
||||
|
||||
- 墙钟代理(可程序数,命令可执行):实例旁会话账本 `<db>-voice-sessions.json`
|
||||
记录每通 `created_at`(开房)与转入清理时的 `first_debt_at`(≈挂断)。
|
||||
已结通话墙钟合计:
|
||||
`jq '[.debts[] | (.first_debt_at - .session.created_at)] | add // 0' <db>-voice-sessions.json`;
|
||||
在途通话看 `.sessions[]` 的 `created_at`(到点人工掐表)。通话墙钟总时长
|
||||
- 墙钟代理(可程序数,命令可执行;**如实声明其边界**):实例旁会话账本
|
||||
`<db>-voice-sessions.json` 只保留**当前** `.sessions`(在途)与 `.debts`
|
||||
(删除未落定的欠账)——**删除成功的通话会从账本里移除**,因此
|
||||
`jq '[.debts[] | (.first_debt_at - .session.created_at)] | add // 0'
|
||||
<db>-voice-sessions.json` 只合计**残存欠账**,是全窗用量的下界核对,
|
||||
**不能冒充整个窗口的通话墙钟合计**。逐通墙钟以开房/挂断当时记录为准:
|
||||
每通 `POST /api/voice/session` 与 `DELETE` 的时刻由窗口负责人当场记录
|
||||
逐通归档(≤3 通,人工可数),账本 jq 只作残存欠账与在途通话的核对
|
||||
(在途看 `.sessions[]` 的 `created_at`)。通话墙钟总时长
|
||||
≥麦克风推流时长的上界,再加 §2 每通 ≤15 分钟操作掐表即 ≤45 分钟总上限
|
||||
的执行手段;窗口负责人:总管。到线即停:停开新会话并挂断在途会话
|
||||
(`DELETE /api/voice/session/{id}`)。
|
||||
|
||||
Reference in New Issue
Block a user