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

481 lines
31 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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=1``SMOKE_VOICE=1` 行为不变;真实 ASR 路径只有显式打开时才会触发外部 OpenAI 调用。
- 真实 ASR 音频来源macOS 下默认用 `say` + `afconvert` 生成短 m4a其他环境可传 `REAL_ASR_AUDIO_FILE=/path/to/sample.m4a`
真实 ASR `.env` 最小集:
```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
```
验证命令:
```bash
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 进程:
```bash
curl -fsS -u admin:admin -X POST 'http://localhost:52800/admin/providers/reload'
docker compose restart backend worker
```
失败排查口径:
- `OPENAI_API_KEY 未配置`:容器或本机 API 没读到 key`docker compose exec backend env | rg 'ASR_PROVIDERS|OPENAI|VOICE_TRANSCRIPTION'`
- `HTTP 401/403`key 错误、项目权限不足或兼容网关鉴权失败。
- `HTTP 429` / `insufficient_quota`:额度不足或触发限流。
- `model_not_found``VOICE_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__.py``backend/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/Dockerfile``frontend/Dockerfile``admin-frontend/Dockerfile` 改为支持可覆盖基础镜像。
- `docker-compose.yml` 新增 `PYTHON_BASE_IMAGE``NODE_BASE_IMAGE``NGINX_BASE_IMAGE``NPM_REGISTRY` build args默认仍使用官方 Docker Hub / npmjs不影响其他环境。
- 本机 git-ignored 根 `.env` 写入代理源:`docker.m.daocloud.io``docker.1ms.run``registry.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=3``voice_session_count=3``voice_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 演示质量任务收束。
验证命令:
```bash
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 管理端摘要补齐
- 已拉取远端 `main``0ccfd00 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-slim``node:18-alpine``nginx: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=2``voice_session_count=2``voice_turn_count=2`,并按 `demo` Provider 与 `github:dev_user_001` 聚合。
- 技术方案已新增服务复杂度自审,列出 `voice_session_service.py``generation_jobs.py`、ASR service 和 Voice Studio 的拆分候选与风险信号。
- 已按服务复杂度自审开始拆分:管理端跨用户 Provider/ASR 摘要迁移到 `backend/app/services/admin_provider_analytics.py``generation_jobs.py` 回到生成任务与用户侧 provider stats 边界。
- 演示 checklist、demo package、3 分钟 pitch、PRD 和技术方案已完成口径复核:统一说明 Voice Studio 是 Phase A AlphaASR 摘要已进入管理端,当前源码 smoke 已通过。当时 #48 仍待当前代码镜像重建后的 Docker voice smoke。
- 后续同日已通过 Registry 绕行修复完成 #48,见上方“外部 Registry 阻塞修复与重建回归”记录。
验证命令:
```bash
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=2``voice_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 文案收敛
- 已拉取远端 `main``55ca098 Add voice analytics filters and metrics` 后完成本地回归。
- 后端复用仓库内 Windows `.venv` 执行全量测试,`118 passed`
- 后端 `ruff check app/ tests/` 通过。
- 用户端与管理端 `npm run build` 均通过;依赖和文案收敛后再次构建通过,且不再出现 `baseline-browser-mapping` 数据偏旧提示。
- Voice Studio、生成轨迹、故事库和供应商管理页已将用户可见的 `session``turn``attention``fallback``Finalize``Provider` 等工程词收敛为中文表达,并补充转写来源、语音事件类型和事件状态的中文展示。
- 用户端与管理端执行依赖安全收敛后,`vite` 升至 `6.4.2``esbuild` 升至 `0.25.12``autoprefixer` 升至 `10.5.0``postcss` 升至 `8.5.12``baseline-browser-mapping` 升至 `2.10.23`
- 用户端与管理端完整 `npm audit --registry=https://registry.npmjs.org` 均为 0 vulnerabilities。
- Alembic 当前只有一个 head`0013_add_voice_sessions_phase_a`;迁移链从 `0012_story_text_status` 到 head 连续。
- `scripts/demo_smoke.sh` shell 语法检查通过,`curl``jq` 可用。
- 当前 WSL 发行版未启用 Docker Desktop 集成,且本地 `52000/52800/52080` 未监听;本轮无法执行完整 `SMOKE_VOICE=1 ./scripts/demo_smoke.sh`
验证命令:
```bash
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
补充验证:
- 已拉取远端 `main``7e450aa 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` 通过。
执行命令:
```bash
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 --build``SMOKE_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_ready``text_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 head``0012_story_text_status`
- `./scripts/demo_smoke.sh` 通过:普通故事以 `partial_ready` 可读返回,封面补全后仍可读且音频待补;绘本无图时 `partial_ready`,插图补全后 `completed`generation job、story job history 和 provider stats 均可查询。
验证范围:
- 用户前端 Docker 生产构建
- 管理前端 Docker 生产构建
- 用户端与管理端生成/资产状态体验一致性
- 后端 Docker 镜像构建与服务重启
- 后端 lint 与测试
- Pydantic v2 兼容性 warning 清理
- Dockerfile build warning 清理
- 管理后台弱默认密码防护
- Generation job/event 轻量落库
- `retryable_assets` 标准响应字段
- 后端统一生成接口
- 故事封面资产补全
- 故事音频资产补全
- 绘本文字生成
- 绘本封面和分页插图补全
- 故事列表读取
- Provider capability policy
执行命令:
```bash
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 Config``TODO``FIXME`、旧 Issue 注释或 Dockerfile `FROM ... as`
- 后端不再内置 `admin123` 管理密码;非 debug 环境开启管理后台时会拒绝空/弱密码。
- 统一生成和资产重试会写入 `generation_jobs``generation_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 分布断言。
验证命令:
```bash
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 已同步语音观测字段。
验证命令:
```bash
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` 路径生效,不影响默认演示。
复验命令:
```bash
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` 新增 `provider``session_status` 查询参数。
- analytics 响应新增当前筛选条件回显:`provider``session_status`
- Voice Studio 观测卡新增转写来源与会话状态筛选控件。
- `SMOKE_VOICE=1` 已新增 provider/status 过滤断言。
- 技术方案、demo checklist、PRD 执行状态已同步。
验证命令:
```bash
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-mapping``npm run build` 不再输出 Baseline 数据过期提示。
- 执行非破坏性 `npm audit fix` 后,用户端生产依赖 `npm audit --omit=dev` 为 0 vulnerabilities。
验证命令:
```bash
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`
验证命令:
```bash
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 上传样本。
验证命令:
```bash
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:52080``http://localhost:52888`
- `SMOKE_VOICE=1 ./scripts/demo_smoke.sh` 完整通过,覆盖普通故事、语音共创文本 fallback、上传回合、voice analytics、provider/status 筛选、finalize、绘本、资产重试、provider analytics 与 ops summary。