Files
dreamweaver/docs/planning/demo-validation-log.md

31 KiB
Raw Blame History

Demo 验证记录

这份记录用于演示前快速说明“当前本地 Docker 环境已经验证到什么程度”。新的验证记录按时间倒序追加。

2026-06-01 真实 ASR Key 环境验收入口补齐

  • 检查当前 openai_asr 接线ASR capability 已在 Provider policy 中注册,ASR_PROVIDERS 默认仍为 ["demo"];真实转写走 openai_asr 适配器、Provider Router 和 Voice Session 上传回合。
  • 补齐 OPENAI_API_BASE 到 settings 与 openai_asr 默认配置,兼容官方 OpenAI 留空和兼容网关 /v1 场景。
  • openai_asr 失败信息从统一“服务暂时不可用”改为保留 HTTP 状态、连接错误或异常摘要,并脱敏 Bearer / sk- token方便区分 key、额度、模型、网关和音频格式问题。
  • scripts/demo_smoke.sh 新增可选 SMOKE_REAL_ASR=1。该开关会自动启用 SMOKE_VOICE=1,上传真实音频,断言 transcription_provider=openai_asr、转写文本非空、用户侧 analytics 可按 provider=openai_asr 筛选、Admin ASR analytics 能看到 openai_asr
  • 默认 smoke、SMOKE_AUDIO=1SMOKE_VOICE=1 行为不变;真实 ASR 路径只有显式打开时才会触发外部 OpenAI 调用。
  • 真实 ASR 音频来源macOS 下默认用 say + afconvert 生成短 m4a其他环境可传 REAL_ASR_AUDIO_FILE=/path/to/sample.m4a

真实 ASR .env 最小集:

ASR_PROVIDERS=["openai_asr", "demo"]
OPENAI_API_KEY=sk-...
OPENAI_API_BASE=
VOICE_TRANSCRIPTION_MODE=provider
VOICE_TRANSCRIPTION_MODEL=gpt-4o-mini-transcribe
VOICE_TRANSCRIPTION_LANGUAGE=zh

验证命令:

docker compose up -d --build
docker compose restart backend backend-admin worker celery-beat
SMOKE_REAL_ASR=1 ./scripts/demo_smoke.sh
curl -fsS -u admin:admin 'http://localhost:52800/admin/providers/analytics?days=7&capability=asr'

若通过 Admin Provider 表改 ASR 配置,先刷新 provider cache 并重启 API 进程:

curl -fsS -u admin:admin -X POST 'http://localhost:52800/admin/providers/reload'
docker compose restart backend worker

失败排查口径:

  • OPENAI_API_KEY 未配置:容器或本机 API 没读到 keydocker compose exec backend env | rg 'ASR_PROVIDERS|OPENAI|VOICE_TRANSCRIPTION'
  • HTTP 401/403key 错误、项目权限不足或兼容网关鉴权失败。
  • HTTP 429 / insufficient_quota:额度不足或触发限流。
  • model_not_foundVOICE_TRANSCRIPTION_MODEL 当前 key 不可用,先换回 gpt-4o-mini-transcribe
  • OpenAI ASR 网络连接失败检查代理、DNS、网关地址和 OPENAI_API_BASE 是否需要 /v1
  • 音频格式错误或空转写:用 REAL_ASR_AUDIO_FILE=/path/to/sample.m4a 传一段真实短录音复测。

本轮本地验证:

  • bash -n scripts/demo_smoke.sh 通过。
  • backend/.venv/bin/python -m pytest backend/tests/test_provider_router.py -q 通过13 passed。
  • backend/.venv/bin/python -m ruff check backend/app/core/config.py backend/app/services/provider_router.py backend/app/services/adapters/asr/openai.py backend/tests/test_provider_router.py 通过。
  • 本轮触碰文件的 git diff --check -- ... 通过。
  • 全量 git diff --check 仍会报出既有未触碰文件 backend/app/services/adapters/__init__.pybackend/app/services/adapters/tts/minimax.py 的 trailing whitespace本轮按“只改阻塞验收部分”未清理。
  • 未在当前环境执行 SMOKE_REAL_ASR=1,因为真实 OPENAI_API_KEY 不应写入仓库;该路径已作为 key 环境验收入口补齐。

2026-05-06 外部 Registry 阻塞修复与重建回归

  • 根因分析:
    • Docker Hub 失败不是项目 Dockerfile 问题,而是当前网络到 registry-1.docker.io / auth.docker.io 的 TLS 链路不稳定;auth.docker.io token 请求在宿主机 curl 下也会 SSL timeout。
    • 绕开 Docker Hub 后,管理端前端构建又暴露第二层外部依赖问题:容器内访问 registry.npmjs.org 触发 EIDLETIMEOUT
  • 修复方式:
    • backend/Dockerfilefrontend/Dockerfileadmin-frontend/Dockerfile 改为支持可覆盖基础镜像。
    • docker-compose.yml 新增 PYTHON_BASE_IMAGENODE_BASE_IMAGENGINX_BASE_IMAGENPM_REGISTRY build args默认仍使用官方 Docker Hub / npmjs不影响其他环境。
    • 本机 git-ignored 根 .env 写入代理源:docker.m.daocloud.iodocker.1ms.runregistry.npmmirror.com
    • 两个前端 Dockerfile 从 npm install 改为 npm ci --no-audit --no-fund,用 lockfile 提高构建确定性。
  • docker compose up -d --build 已用当前代码完整重建 backend、frontend、frontend-admin 镜像并重建容器。
  • 重建后 SMOKE_VOICE=1 ./scripts/demo_smoke.sh 通过,生成本轮故事 ID 56/57/58
  • 重建后管理端 ASR analytics 验证通过:capability=asr 返回 total_calls=3voice_session_count=3voice_turn_count=3,并按 demo Provider 与 github:dev_user_001 聚合。
  • Docker 栈当前服务全部运行backend、backend-admin、worker、celery-beat、frontend、frontend-admin 均为重建后容器。
  • 语音共创 PRD #48 已完成;#47/#48/#49/#50 本批 Alpha 演示质量任务收束。

验证命令:

curl -Iv --connect-timeout 15 https://registry-1.docker.io/v2/
curl -Iv --connect-timeout 15 'https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/python:pull'
docker compose config | rg -n "PYTHON_BASE_IMAGE|NODE_BASE_IMAGE|NGINX_BASE_IMAGE|NPM_REGISTRY"
docker compose build backend frontend frontend-admin
docker compose up -d --build
SMOKE_VOICE=1 ./scripts/demo_smoke.sh
curl -fsS -u admin:admin 'http://localhost:52800/admin/providers/analytics?days=7&capability=asr'
docker compose ps

结果:

  • Docker Hub 官方链路仍可不稳定,但当前项目构建不再直接依赖它的 auth 链路。
  • docker compose up -d --build 通过。
  • SMOKE_VOICE=1 ./scripts/demo_smoke.sh 通过。
  • Admin ASR analytics 手动验证通过。

2026-05-06 拉取后 ASR 管理端摘要补齐

  • 已拉取远端 main0ccfd00 chore: update frontend tooling and Chinese copy
  • 管理端 Provider analytics 已补齐 ASR 维度:/admin/providers/analytics?capability=asr 会聚合 Voice Session 上传转写成功、转写失败、失败原因、ASR 成本、跨用户分布、语音会话数和上传回合数。
  • 管理端前端在语音识别筛选下将摘要卡片切换为“语音会话 / 上传回合”,避免沿用 generation job 口径。
  • 后端开发登录重定向测试已显式打开 debug避免依赖外部环境变量导致全量测试不稳定。
  • Docker 镜像重建两次被 Docker Hub TLS handshake timeout 阻塞,失败点在 python:3.11-slimnode:18-alpinenginx:alpine 元数据解析;本轮未能用当前代码重建容器。
  • 当前已启动 Docker 栈首次 SMOKE_VOICE=1 在登录阶段返回 502定位为前端 Nginx 解析到旧 backend 容器 IP重启 frontend 后代理恢复。
  • 当前已启动 Docker 栈下 SMOKE_VOICE=1 ./scripts/demo_smoke.sh 通过覆盖故事生成、Voice Session 文本 fallback、上传回合 demo transcript hint、语音 analytics、finalize 保存 Story、绘本生成与图片补全。
  • scripts/demo_smoke.sh 新增 DEV_SIGNIN_URL 覆盖项,支持直接打本机源码 API 时把 dev 登录回跳到 /auth/session,避免没有 SPA 页面导致误报。
  • 当前源码本机 API/admin/worker 连接 Docker Postgres/Redis 后,SMOKE_VOICE=1 通过,生成本轮故事 ID 53/54/55
  • 本机源码 admin ASR analytics 手动验证通过:capability=asr 返回 total_calls=2voice_session_count=2voice_turn_count=2,并按 demo Provider 与 github:dev_user_001 聚合。
  • 技术方案已新增服务复杂度自审,列出 voice_session_service.pygeneration_jobs.py、ASR service 和 Voice Studio 的拆分候选与风险信号。
  • 已按服务复杂度自审开始拆分:管理端跨用户 Provider/ASR 摘要迁移到 backend/app/services/admin_provider_analytics.pygeneration_jobs.py 回到生成任务与用户侧 provider stats 边界。
  • 演示 checklist、demo package、3 分钟 pitch、PRD 和技术方案已完成口径复核:统一说明 Voice Studio 是 Phase A AlphaASR 摘要已进入管理端,当前源码 smoke 已通过。当时 #48 仍待当前代码镜像重建后的 Docker voice smoke。
  • 后续同日已通过 Registry 绕行修复完成 #48见上方“外部 Registry 阻塞修复与重建回归”记录。

验证命令:

docker compose up -d --build backend backend-admin worker celery-beat frontend-admin
docker compose build backend frontend-admin
DOCKER_BUILDKIT=0 docker compose build backend
docker manifest inspect python:3.11-slim
docker compose restart frontend
SMOKE_VOICE=1 ./scripts/demo_smoke.sh
APP_URL=http://localhost:53000 BACKEND_URL=http://localhost:53000 ADMIN_BACKEND_URL=http://localhost:53800 DEV_SIGNIN_URL='http://localhost:53000/auth/dev/signin?next=http://localhost:53000/auth/session' SMOKE_VOICE=1 ./scripts/demo_smoke.sh
curl -fsS -u admin:admin 'http://localhost:53800/admin/providers/analytics?days=7&capability=asr'
backend/.venv/bin/python -m pytest backend/tests/test_admin_providers.py -q
backend/.venv/bin/python -m pytest backend/tests -q
backend/.venv/bin/python -m pytest backend/tests/test_auth.py backend/tests/test_admin_providers.py -q
backend/.venv/bin/python -m ruff check backend/app/services/generation_jobs.py backend/app/services/admin_provider_analytics.py backend/app/api/admin_providers.py backend/tests/test_admin_providers.py
backend/.venv/bin/python -m ruff check backend/app backend/tests
cd frontend && npm run build
cd admin-frontend && npm run build
git diff --check

结果:

  • Docker build 未完成,原因是 Docker Hub TLS handshake timeoutlegacy builder 同样卡在 FROM python:3.11-slim,已手动终止。
  • docker manifest inspect python:3.11-slim 同样因 Docker Hub auth token 请求 TLS handshake timeout 失败,说明当前阻塞在 registry 访问而不是项目 Dockerfile。
  • docker compose restart frontend/auth/dev/signin 经前端代理恢复 302。
  • 当前已启动 Docker 栈 SMOKE_VOICE=1 ./scripts/demo_smoke.sh 通过;本结果只能证明运行中栈健康,不能替代当前代码重建后的 Docker smoke。
  • 当前源码本机 API/admin/worker 下 SMOKE_VOICE=1 ./scripts/demo_smoke.sh 通过;当时这验证了当前代码路径,但仍不能替代镜像重建验证。后续同日已完成镜像重建验证,见上方记录。
  • 本机源码 admin ASR analytics 返回 voice_session_count=2voice_turn_count=2,确认管理端 ASR 运营摘要字段可用。
  • 本地 demo 数据卷由历史 create_all 路径创建过 Voice Session 表,直接运行 alembic upgrade head 会因 voice_sessions 已存在而失败;本轮未修改数据卷版本号,后续可在演示库层面单独处理 stamp 或迁移策略。
  • backend/tests/test_admin_providers.py 通过3 passed。
  • backend/tests/test_auth.py backend/tests/test_admin_providers.py 通过12 passed。
  • 后端全量测试通过119 passed。
  • 后端相关文件 ruff 检查通过;全量 backend/app backend/tests ruff 检查也通过。
  • 用户端 vue-tsc && vite build 通过。
  • 管理端 vue-tsc && vite build 通过。
  • git diff --check 通过。
  • 用户端构建仍提示 Browserslist 数据偏旧;管理端构建仍提示 baseline-browser-mapping 与 Browserslist 数据偏旧。本轮未处理前端依赖刷新。

2026-04-28 拉取后回归与 Voice Studio 文案收敛

  • 已拉取远端 main55ca098 Add voice analytics filters and metrics 后完成本地回归。
  • 后端复用仓库内 Windows .venv 执行全量测试,118 passed
  • 后端 ruff check app/ tests/ 通过。
  • 用户端与管理端 npm run build 均通过;依赖和文案收敛后再次构建通过,且不再出现 baseline-browser-mapping 数据偏旧提示。
  • Voice Studio、生成轨迹、故事库和供应商管理页已将用户可见的 sessionturnattentionfallbackFinalizeProvider 等工程词收敛为中文表达,并补充转写来源、语音事件类型和事件状态的中文展示。
  • 用户端与管理端执行依赖安全收敛后,vite 升至 6.4.2esbuild 升至 0.25.12autoprefixer 升至 10.5.0postcss 升至 8.5.12baseline-browser-mapping 升至 2.10.23
  • 用户端与管理端完整 npm audit --registry=https://registry.npmjs.org 均为 0 vulnerabilities。
  • Alembic 当前只有一个 head0013_add_voice_sessions_phase_a;迁移链从 0012_story_text_status 到 head 连续。
  • scripts/demo_smoke.sh shell 语法检查通过,curljq 可用。
  • 当前 WSL 发行版未启用 Docker Desktop 集成,且本地 52000/52800/52080 未监听;本轮无法执行完整 SMOKE_VOICE=1 ./scripts/demo_smoke.sh

验证命令:

cd backend && .venv/Scripts/python.exe -m pytest
cd backend && .venv/Scripts/python.exe -m ruff check app/ tests/
cd frontend && npm run build
cd admin-frontend && npm run build
cd frontend && npm audit fix --registry=https://registry.npmjs.org
cd admin-frontend && npm audit fix --registry=https://registry.npmjs.org
cd frontend && npm install autoprefixer@latest -D --registry=https://registry.npmjs.org
cd admin-frontend && npm install autoprefixer@latest -D --registry=https://registry.npmjs.org
cd frontend && npm install vite@^6.4.2 -D --registry=https://registry.npmjs.org
cd admin-frontend && npm install vite@^6.4.2 -D --registry=https://registry.npmjs.org
cd frontend && npm audit --omit=dev --registry=https://registry.npmjs.org
cd admin-frontend && npm audit --omit=dev --registry=https://registry.npmjs.org
cd frontend && npm audit --registry=https://registry.npmjs.org
cd admin-frontend && npm audit --registry=https://registry.npmjs.org
cd backend && .venv/Scripts/python.exe -m compileall -q app tests
cd backend && .venv/Scripts/python.exe -m alembic heads
cd backend && .venv/Scripts/python.exe -m alembic history --verbose -r 0012_story_text_status:head
bash -n scripts/demo_smoke.sh
git diff --check
docker compose config --quiet
curl -fsS --max-time 2 http://localhost:52000/health
curl -fsS --max-time 2 http://localhost:52800/health
curl -fsS --max-time 2 http://localhost:52080/health

结果:

  • pytest 通过118 passed耗时约 4 分 25 秒。
  • 后端 lint、Python compileall、用户端构建、管理端构建均通过代码/文档 diff 空白检查通过lockfile 保持仓库既有 CRLF 行尾风格。
  • 用户端与管理端构建不再出现 baseline-browser-mapping 数据偏旧提示。
  • 用户端与管理端完整 audit 均返回 0 vulnerabilities。
  • docker compose config --quiet 因当前 WSL 找不到 docker 命令未执行成功;完整 Docker demo smoke 待启用 Docker Desktop WSL 集成后补跑。

2026-04-24

补充验证:

  • 已拉取远端 main7e450aa fix: stabilize auth and generation workflows
  • 用户端 npm run build 通过,包含最新 Voice Studio、登录态修复和 generation trace 变更。
  • 管理端首次 npm run build 因 Rollup Linux optional dependency 缺失失败;执行 npm install 补齐 @rollup/rollup-linux-x64-gnu 后,管理端 npm run build 通过。
  • 后端当前仓库内 .venv 是 Windows 虚拟环境结构WSL/bash 下无法直接执行 .venv/bin/python;系统也没有全局 pytest。尝试创建 Linux venv 时发现当前 WSL 缺少 python3.12-venv,尝试使用 Docker 时发现当前 WSL 未启用 Docker Desktop 集成。本轮未完成后端 pytest需要后续在 Linux venv、Docker 或 Windows PowerShell 环境补跑。
  • 语音共创 PRD 已从 Discovery Track 更新为 Phase A Alpha并补充 Alpha 验收矩阵、退出标准和未完成项。
  • 演示 checklist 已新增 Voice Studio 入口、语音共创 Alpha 手动演示路径和风险预案。
  • scripts/demo_smoke.sh 已新增可选 SMOKE_VOICE=1 分支,覆盖 Voice Session 创建、文本 fallback、上传回合 demo transcript hint、会话 detail/events、voice analytics、finalize 到 Story 和故事可读性断言。
  • ASR 已纳入 Provider 能力分层:默认 ASR_PROVIDERS=["demo"],真实转写可配置 ASR_PROVIDERS=["openai_asr", "demo"]OPENAI_API_KEY
  • 管理端 Provider UI 已补 asr运营摘要支持按语音识别筛选Provider tab 可创建/查看 ASR provider用户端嵌入的 Provider 管理页同步新增 asr tab。
  • bash -n scripts/demo_smoke.sh 通过。

执行命令:

cd frontend && npm run build
cd admin-frontend && npm run build
cd admin-frontend && npm install
cd admin-frontend && npm run build
cd backend && pytest -q
cd backend && ./.venv/bin/python --version
cd backend && python3 -m venv .venv-linux
docker compose ps
bash -n scripts/demo_smoke.sh

结果:

  • 用户端 vue-tsc && vite build 通过。
  • 管理端 vue-tsc && vite build 在补依赖后通过。
  • scripts/demo_smoke.sh shell 语法检查通过;受当前 WSL 未启用 Docker 影响,未执行完整接口 smoke。
  • 后端测试未运行成功,原因是当前执行环境缺少 Linux 可用的 Python dev venv / pytest且 WSL 未启用 Docker。

后续补验建议:

  • 在 WSL 下先安装 python3.12-venv,再执行 cd backend && python3 -m venv .venv-linux && .venv-linux/bin/pip install -e ".[dev]" && .venv-linux/bin/python -m pytest -q
  • 或在 Windows PowerShell 下执行 cd backend; .\.venv\Scripts\python.exe -m pytest -q
  • 后端通过后,再运行 docker compose up -d --buildSMOKE_VOICE=1 ./scripts/demo_smoke.sh,并手动走一遍 Voice Studio Alpha 路径。

2026-04-18

补充验证:

  • 新增跨故事 Provider analytics 后,backend/.venv/bin/python -m pytest backend/tests -q 通过83 个测试通过。
  • 用户端与管理端 npm run build 均通过;生成轨迹组件已支持未终止任务自动轮询。
  • docker compose up -d --build 已再次用当前代码重建本地演示栈。
  • ./scripts/demo_smoke.sh 再次通过,并新增断言 GET /api/generations/provider-analytics 可以返回跨故事总调用、成功率、任务数、故事数和 Provider 明细。
  • 新增 Week 2-4 总 backlog 后,backend/.venv/bin/python -m pytest backend/tests -q 通过85 个测试通过。
  • 音频缓存治理首版已验证:GET /api/audio/{story_id}/status 查询状态不触发生成,DELETE /api/audio/{story_id}/cache 可清理缓存并让音频重新进入可补全状态。
  • 时间线联动已验证:阅读事件会生成更完整的 recent_story 记忆,孩子时间线会展示阅读记录和记忆沉淀。
  • ./scripts/demo_smoke.sh 已覆盖音频缓存状态查询。
  • Week 4 Demo 包装已完成新增架构说明、Demo 包装文档、Week 4 sprint review用户端和管理端绘本阅读器支持阅读位置恢复。
  • Week 4 最终回归通过:后端全量测试 85 passedruff 通过,用户端/管理端构建通过,docker compose up -d --build./scripts/demo_smoke.sh 通过。
  • 继续优化后再次验证Provider analytics 已支持时间窗口与能力筛选、失败原因摘要;音频缓存已加入 TTL 配置和后台 prune 任务。
  • 新一轮优化验证通过:新增 GET /api/generations/ops-summary,故事库已展示最近失败与卡住任务摘要;生成任务已支持 stale 自动收敛和重复资产任务保护。
  • 后端新增 partial_readytext_status 与迁移 0012_story_text_status 后,backend/.venv/bin/python -m pytest backend/tests -q 通过82 个测试通过。
  • backend/.venv/bin/python -m ruff check backend/app backend/tests backend/alembic/versions/0012_add_story_text_status_and_partial_ready.py 通过。
  • 用户端与管理端 npm run build 均通过。
  • docker compose up -d --build 已用当前代码重建本地演示栈。
  • 当前本地 Docker 数据卷来自早期 create_all,缺少 alembic_version 且旧 stories 表没有 text_status;本轮已为演示库补齐 text_status、回填状态,并 alembic stamp head0012_story_text_status
  • ./scripts/demo_smoke.sh 通过:普通故事以 partial_ready 可读返回,封面补全后仍可读且音频待补;绘本无图时 partial_ready,插图补全后 completedgeneration job、story job history 和 provider stats 均可查询。

验证范围:

  • 用户前端 Docker 生产构建
  • 管理前端 Docker 生产构建
  • 用户端与管理端生成/资产状态体验一致性
  • 后端 Docker 镜像构建与服务重启
  • 后端 lint 与测试
  • Pydantic v2 兼容性 warning 清理
  • Dockerfile build warning 清理
  • 管理后台弱默认密码防护
  • Generation job/event 轻量落库
  • retryable_assets 标准响应字段
  • 后端统一生成接口
  • 故事封面资产补全
  • 故事音频资产补全
  • 绘本文字生成
  • 绘本封面和分页插图补全
  • 故事列表读取
  • Provider capability policy

执行命令:

docker compose build frontend
docker compose build frontend frontend-admin
docker compose build backend backend-admin worker celery-beat
docker compose up -d backend backend-admin worker celery-beat frontend frontend-admin
cd backend && .venv/bin/python -m ruff check app tests
cd backend && .venv/bin/python -m pytest -q
SMOKE_AUDIO=1 ./scripts/demo_smoke.sh

结果:

  • vue-tsc 通过。
  • 用户端与管理端 vite build 通过。
  • Docker 前端镜像 dreamweaver-frontend:dev 构建通过。
  • Docker 管理前端镜像 dreamweaver-admin-frontend:dev 构建通过。
  • Docker 后端镜像 dreamweaver-backend:dev 构建通过。
  • ruff check app tests 通过。
  • pytest -q 通过73 个测试通过Pydantic v2 deprecation warning 已清零。
  • SMOKE_AUDIO=1 ./scripts/demo_smoke.sh 通过。
  • smoke 会断言 retryable_assets 在故事、音频、绘本补全前后按预期变化。
  • 本地用户端可通过 http://localhost:52080 访问。
  • 本地管理端可通过 http://localhost:52888 访问。
  • 技术债扫描未发现 class ConfigTODOFIXME、旧 Issue 注释或 Dockerfile FROM ... as
  • 后端不再内置 admin123 管理密码;非 debug 环境开启管理后台时会拒绝空/弱密码。
  • 统一生成和资产重试会写入 generation_jobsgeneration_job_events
  • API 响应返回 retryable_assets,前端按标准字段展示补全/重试入口。

已确认的演示能力:

  • 普通故事可以先生成可读正文。
  • 封面和音频可以作为资产单独重试。
  • 绘本可以生成 6 页文本并补全全部插图。
  • 故事列表能看到最新生成结果。
  • 时间线中的绘本事件可以直接进入按 ID 恢复的绘本阅读器。

限制:

  • 本机浏览器自动化脚本默认寻找标准版 Chrome当前电脑安装的是 Google Chrome Beta所以本轮没有生成 CDP 截图。

2026-04-24 语音共创 Alpha 观测补强

  • 今日优先级:先收束 Phase A Alpha 的可解释性,不进入 Phase B 实时化。
  • 后端 VoiceTurnSummaryResponse 已返回用户/助手音频时长,便于定位单轮录音质量与 TTS 产物状态。
  • 后端 VoiceSessionAnalyticsResponse 已新增用户语音总时长、平均时长、助手音频统计、转写 Provider 分布和低置信度确认率。
  • 用户端 Voice Studio 观测卡片已展示平均用户语音时长、转写来源分布和确认率。
  • SMOKE_VOICE=1 ./scripts/demo_smoke.sh 已新增语音时长与转写 Provider 分布断言。

验证命令:

cd backend && .venv/bin/pytest tests/test_voice_sessions.py -q
cd frontend && npm run build

结果:

  • tests/test_voice_sessions.py 通过15 passed保留 1 个 SQLAlchemy/SQLite datetime.utcnow() 上游 deprecation warning。
  • 用户端 vue-tsc && vite build 通过,保留 baseline-browser-mapping 数据偏旧提示。

2026-04-24 语音共创 Alpha 50 项执行池与 P1 观测扩展

  • PRD 已新增 Phase A Alpha 50 项执行 Backlog明确 P0/P1/P2、验收口径和今日执行策略。
  • 后端 voice analytics 已扩展输入构成、上传语音占比、助手语音覆盖率、ASR/TTS 成功率、平均转写/意图置信度、安全介入率和失败事件分布。
  • Voice Studio 已展示上传/文本构成、助手语音覆盖、ASR/TTS 成功率、平均置信度、用户/助手平均语音时长,并在单 turn 卡片展示用户/助手语音时长。
  • SMOKE_VOICE=1 smoke 已新增输入构成与 ASR/TTS 成功率断言。
  • 技术方案与 demo checklist 已同步语音观测字段。

验证命令:

cd backend && .venv/bin/pytest tests/test_voice_sessions.py -q
cd backend && .venv/bin/ruff check app/schemas/voice_session_schemas.py app/services/voice_session_service.py tests/test_voice_sessions.py
cd frontend && npm run build

结果:

  • tests/test_voice_sessions.py 通过15 passed保留 1 个 SQLAlchemy/SQLite datetime.utcnow() 上游 deprecation warning。
  • ruff check 通过。
  • 用户端 vue-tsc && vite build 通过,保留 baseline-browser-mapping 数据偏旧提示。

2026-04-24 语音共创 P2 样本与列表摘要补充

  • Voice Studio 最近会话列表已增加轻量状态摘要:待确认、安全介入、最近意图或等待输入。
  • PRD 已补 10 条儿童表达样本和 2 版低置信度确认文案草案,用于后续 Alpha 人工验收。
  • 代码自审结论本轮没有新增数据库迁移新增字段均为响应层兼容扩展前端使用空值兜底smoke 断言只在 SMOKE_VOICE=1 路径生效,不影响默认演示。

复验命令:

cd frontend && npm run build
cd backend && .venv/bin/pytest tests/test_voice_sessions.py -q
cd backend && .venv/bin/ruff check app/schemas/voice_session_schemas.py app/services/voice_session_service.py tests/test_voice_sessions.py

结果:

  • 用户端 vue-tsc && vite build 通过。
  • tests/test_voice_sessions.py 通过15 passed保留 1 个 SQLAlchemy/SQLite datetime.utcnow() 上游 deprecation warning。
  • ruff check 通过。

2026-04-25 语音 Analytics Provider/Status 过滤开发

  • 后端 GET /api/voice-sessions/analytics 新增 providersession_status 查询参数。
  • analytics 响应新增当前筛选条件回显:providersession_status
  • Voice Studio 观测卡新增转写来源与会话状态筛选控件。
  • SMOKE_VOICE=1 已新增 provider/status 过滤断言。
  • 技术方案、demo checklist、PRD 执行状态已同步。

验证命令:

cd backend && .venv/bin/pytest tests/test_voice_sessions.py -q
cd backend && .venv/bin/ruff check app/api/voice_sessions.py app/schemas/voice_session_schemas.py app/services/voice_session_service.py tests/test_voice_sessions.py
cd frontend && npm run build

结果:

  • tests/test_voice_sessions.py 通过15 passed保留 1 个 SQLAlchemy/SQLite datetime.utcnow() 上游 deprecation warning。
  • ruff check 通过。
  • 用户端 vue-tsc && vite build 通过,保留 baseline-browser-mapping 数据偏旧提示。

2026-04-25 Warning 与前端依赖安全收敛

  • 后端移除 datetime.utcnow()Provider admin models、cost tracker、provider metrics 已改为 timezone-aware UTC 时间。
  • tests/test_voice_sessions.py 不再输出 SQLAlchemy/SQLite datetime.utcnow() deprecation warning。
  • 前端更新 baseline-browser-mappingnpm run build 不再输出 Baseline 数据过期提示。
  • 执行非破坏性 npm audit fix 后,用户端生产依赖 npm audit --omit=dev 为 0 vulnerabilities。

验证命令:

cd backend && .venv/bin/pytest tests/test_admin_providers.py tests/test_voice_sessions.py -q
cd backend && .venv/bin/ruff check app/db/admin_models.py app/services/cost_tracker.py app/services/provider_metrics.py app/api/voice_sessions.py app/schemas/voice_session_schemas.py app/services/voice_session_service.py tests/test_voice_sessions.py
cd frontend && npm audit --omit=dev
cd frontend && npm run build

结果:

  • tests/test_admin_providers.py tests/test_voice_sessions.py 通过17 passed。
  • ruff check 通过。
  • npm audit --omit=dev 返回 0 vulnerabilities。
  • 用户端 vue-tsc && vite build 通过。

2026-04-25 行尾噪音收敛与 Admin Analytics 校验

  • 已撤回高噪音 CRLF / lockfile 变更,当前 diff 保留在语音 analytics、Voice Studio、测试、smoke、文档和低噪音 admin models 修复范围内。
  • 后端 admin provider analytics 的 capability 参数已收紧为 text/image/tts/storybook/asr 枚举,无效能力返回 422
  • 语音 analytics 的 session_status 参数已收紧为明确会话状态枚举,无效状态返回 422

验证命令:

cd backend && .venv/bin/ruff check app/api/admin_providers.py app/api/voice_sessions.py app/db/admin_models.py app/schemas/voice_session_schemas.py app/services/voice_session_service.py tests/test_admin_providers.py tests/test_voice_sessions.py
cd backend && .venv/bin/pytest tests/test_admin_providers.py tests/test_voice_sessions.py -q
cd frontend && npm run build

结果:

  • ruff check 通过。
  • tests/test_admin_providers.py tests/test_voice_sessions.py 通过17 passed。
  • 用户端 vue-tsc && vite build 通过。

2026-04-25 Docker Voice Smoke 回归闭环

  • Docker 栈已用当前代码重建backend、backend-admin、worker、celery-beat、frontend、frontend-admin 均可启动。
  • 修复 Celery task 注册不完整问题worker 现在注册 generation workflow、generation maintenance、audio cache、memory、push 和 achievements 任务。
  • 修复 worker 冷启动 DB session factory 自锁:数据库锁改为可重入锁。
  • 修复 Celery async task 跨 event loop 复用 asyncpg 连接问题:任务结束时 dispose async engine。
  • SMOKE_VOICE=1 smoke 对齐当前 intent/event 命名,并使用非空临时 demo audio 上传样本。

验证命令:

cd backend && .venv/bin/python -m ruff check app/db/database.py app/core/celery_app.py app/tasks
cd backend && .venv/bin/python -m pytest tests/test_admin_providers.py tests/test_voice_sessions.py -q
cd frontend && npm run build
cd admin-frontend && npm run build
docker compose up -d --build
SMOKE_VOICE=1 ./scripts/demo_smoke.sh

结果:

  • ruff check 通过。
  • tests/test_admin_providers.py tests/test_voice_sessions.py 通过17 passed。
  • 用户端 vue-tsc && vite build 通过。
  • 管理端 vue-tsc && vite build 通过,仍有 baseline-browser-mapping 数据偏旧提示。
  • docker compose up -d --build 通过,当前本地服务可访问 http://localhost:52080http://localhost:52888
  • SMOKE_VOICE=1 ./scripts/demo_smoke.sh 完整通过,覆盖普通故事、语音共创文本 fallback、上传回合、voice analytics、provider/status 筛选、finalize、绘本、资产重试、provider analytics 与 ops summary。