Files
Codex 3c70861463
Build image / build (push) Canceled after 0s
Build ASR Pipeline / image (push) Canceled after 0s
feat(asr-pipeline): merge PR #1 webauth/CSRF/locking hardening and web_password fallback
2026-11-02 06:37:33 -08:00

81 lines
5.3 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.
# 当前流程与独立项目交接
核对日期:2026-11-02,Asia/Shanghai。
## 已验证
原代码:`/home/claw/claude-workspace/OBSIDIAN/asr-pipeline`。
原音频编排:`/home/claw/claude-workspace/OBSIDIAN/recordings/bin`。
原通知脚本:`/home/claw/claude-workspace/OBSIDIAN/bin/meeting-status-notify.py`。
本机 systemd:
| 单元 | 本次状态 | 职责 |
|---|---|---|
| asr-review-web.service | running | 8765 常驻上传、最近任务、审核界面 |
| obsidian-recording-watch.service | running | 监听录音并请求外部 ASR |
| obsidian-asr-refine.path | waiting | 监听 vault/.asr-inbox |
| obsidian-asr-refine-native.service | inactive | 按需整理转写,当前未运行 |
| asr-review-revise@.service | 模板 | 人工确认后生成/发布 |
`GET http://127.0.0.1:8765/health` 返回 `ok=true, pending=3`。
这说明审核队列存在待确认项,不证明三个录音都在推理,也不证明通知正常。
本轮不导出待确认正文,不生成新稿、不注册声纹、不写 vault。
## 代码确认的链路
- 监听单元显式选择 `MEETING_ASR_BACKEND=qwen3cam`。
- 对应脚本默认请求 `http://192.168.50.100:10099/asr`,整文件上传,
`language=Chinese`、`save_voiceprint_session=true`;服务内部切片。
本轮未对 GPU 服务发起真实录音测试,不据此宣称其健康或当前镜像版本。
- 原始转写保留声纹 session 与 speaker;归档后桥接到 vault/.asr-inbox。
- 独立 Python 管线包含模糊音/别名、关系与近期权重、数字归一、纯清洗与纠错分阶段。
- 初稿和中间状态在程序私有目录,正式纪要等待 Web 审核通过。
- 人物/公司卡提议与声纹确认存在代码路径;不等于当前外部注册服务验证通过。
## 运行数据边界
- `asr-pipeline/state/lexicon.db`:人工确认、关系、纠错、审核队列,不能重建后替代。
- `asr-pipeline/state/intake.db`:上传任务与状态。
- `state/drafts/`、`state/published/`:私有稿与发布回执。
- `recordings/{inbox,processing,processed,failed,transcripts,state}`:音频及编排状态。
- `vault/.asr-inbox/.state`:整理处理标记,切换漏迁可能造成重复处理。
- `.asr-refine.env`:私有凭据,未读取值、未复制、未入 Git。
本次只提取源代码、专业词库、现有测试、文档、unit 快照。没有复制生产音频、
个人 SQLite、缓存、会话、凭据或 `.venv`。历史设计文档有过时路径和模型,保留作来源。
## 已发现的风险(尚未改生产)
1. 通知脚本默认 `127.0.0.1:8644` 和 `~/.hermes/webhook_subscriptions.json`。
结合 Hermes 已迁走的资产记录,这是通知失效风险;本次未验证远端 webhook。
2. 本仓库代码的模型缺省已是 LiteLLM(清洗 `aistudio/gemini-flash-lite-latest`,成稿 `codex/gpt-sol-latest`),不是 ZenMux,也不是 Sonnet 5。生产 unit 若仍加载旧 `.asr-refine.env`,以那个文件为准;本次未读取凭据,不把代码缺省当成现网正在用的路由。
3. 路径耦合旧工作目录;本项目配置根目录、通知器、监听数据库已可外置,
但声纹地址、审核 systemd 单元名等仍有历史耦合。`deploy/systemd/` 保持现网快照,没有改 ExecStart。
4. 历史 HANDOFF 中写的是一次性页面。代码里有两个常驻界面:旧 `asrpipe.control_web`(快照单元,默认 8765)和新 `asrservice.web`(compose,默认 8788)。旧文档不作现态。
5. 产物删除和在线编辑会拒绝允许根以外的路径。发布到 `minutes/`、`People/`、`Companies/` 仍没有对照 vault SOP 的不可绕过白名单。本轮不冒充已审计完成。
## 代码已修复、生产未切换
下面这些是仓库里的新行为。现网单元没有改,不能当成已经在 8765/8788 的生产进程上生效。
- 未设置 `ASR_WEB_PASSWORD` 时,两个浏览器界面都拒绝上传、审核和改配置。临时放开只认 `ASR_WEB_ALLOW_ANON=1`。
- 登录后的写操作校验 CSRF。设置页不回显内网地址和密钥片段。
- `asrservice.worker` 与 `recordings/bin/meeting-watch.py` 抢同一把 `consumer.lock`。
- `ASR_GIT_SYNC`、`ASR_NOTIFY` 缺省为关。
- 修订失败会保留队列标记并重试;重新精修失败不会先删掉已回答的审核记录。
- 时间在界面上按 Asia/Shanghai 显示。词库列表按页读取,不再一次只截断前 180 条却不说明总数。
## 后续安全切换
1. 先确定模型路由与通知适配器,检查 vault SOP 与正式输出路径。
2. 建独立 venv、冻结依赖,使用合成数据跑回归,再选真实录音单测。
3. 停接新上传,确认没有转写/整理/审核发布在运行,再停相关 user units。
4. 对 SQLite 使用 backup API 生成一致性备份,保留原件;迁移录音状态与 inbox 标记,
不能对运行中数据库只复制主文件。
5. 路径变更还涉及数据库内草稿/转写绝对路径;要审计和映射,不能仅改 unit。
6. 生成新 unit 并逐个启用,确认只存在一个消费者;保留旧代码和备份以便回滚。
7. 验证上传 → 转写 → 确认链接 → 审核 → 正式纪要 → Git 同步完整链路后再移除旧目录。
本轮未执行上述生产切换,不承诺已独立上线。