Files
RAG/docs/04-project-todo.md
YoVinchen 63279cf213
Some checks failed
verify / verify (push) Has been cancelled
Make deployment truth and remaining graduation gates explicit
Document the runnable Docker workflow, expected one-shot container exits, server-controlled Bailian namespace switch, current earned progress, and the security and evaluation work that still blocks private-data or graduation release claims.

Constraint: Current local Bailian credentials are rejected by the configured workspace

Rejected: Mark the project complete from synthetic metrics | would overstate provider, OCR, authorization, and blind-evaluation readiness

Confidence: high

Scope-risk: narrow

Directive: Keep progress evidence task-based and distinguish synthetic engineering validation from real geological efficacy

Tested: make verify-design; Markdown links; secret scan; diff checks

Not-tested: Final thesis review and live provider authorization
2026-07-13 05:58:39 +08:00

595 lines
40 KiB
Markdown
Raw 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.
# 项目全生命周期 TODO 与进度看板
| 项目 | 当前值 |
|---|---|
| 基线日期 | 2026-07-13 |
| 当前阶段 | 核心 synthetic 产品链已 Docker E2EStage 1 真实三模型验收 `BLOCKED`Stage 25/7 按剩余项推进 |
| 已完成阶段 | Stage 0仓库、安全和设计基线 |
| 整体完成度 | 任务级挣值约 50%,合理区间 45%55%;核心 synthetic 产品工程链约 70% |
| 设计完成度 | 设计基线已完成;实现中发现新约束时继续通过 ADR 和文档修订维护 |
| 业务代码完成度 | 上传→解析→manifest 审核→向量化→原子激活→正式检索已两次 Docker E2E文档/检索/问答页面可运行 |
| 当前预计剩余工期 | 约 610 周主要取决于百炼授权、PDF/OCR、300 题双审盲测、论文和答辩排期 |
| 进度权威来源 | 本文的阶段状态、验收证据和已推送提交 |
本文把 [总体设计](00-overall-design.md)、[数据与评测设计](01-data-and-evaluation.md)、[部署与安全设计](02-deployment-and-security.md) 和 [实施计划](03-implementation-plan.md) 转换为从当前状态到最终答辩、归档的可执行清单。它只表示计划和已验证事实,不因文档完整就声称系统代码已经完成。
## 1. 状态与完成度规则
### 1.1 状态定义
| 状态 | 含义 | 进入条件 | 退出条件 |
|---|---|---|---|
| `DONE` | 阶段已形成可验证闭环 | 功能、测试、文档、提交均完成 | 验收证据齐全且提交已推送 |
| `IN_PROGRESS` | 当前正在实施 | 依赖满足并已有明确执行任务 | 达到 `DONE`,或因硬门禁转为 `BLOCKED` |
| `TODO` | 尚未开始 | 前置阶段或资源未满足 | 依赖满足并正式启动 |
| `BLOCKED` | 硬门禁阻止继续 | 缺授权、密钥、外部服务或必要决策 | 阻断证据消除并记录恢复原因 |
| `OPTIONAL` | 不影响首版答辩主链路 | 核心目标已满足且仍有时间 | 完成或明确延期 |
阶段只有在以下四项同时成立时才能标记 `DONE`
1. 范围内功能及失败路径已经实现。
2. 适用的自动测试、静态检查和安全检查通过。
3. 验收证据可复查,设计与运行文档已同步。
4. 符合 Lore 协议的提交已经推送,远端提交可见。
### 1.2 进度口径
当前进度采用固定阶段权重下的**任务级挣值**,不采用“文件数量”或“代码行数”,也不再使用
“整阶段只要缺一项就记 0”的陈旧口径。`已计入进度` 只统计已有自动测试、Docker/HTTP 证据和
文档契约的交付;设计稿、尚未验证的代码和外部计划不计入。阶段只有全部 Definition of Done
满足时才标记 `DONE`,所以部分挣值不等于阶段完成。
| 阶段 | 权重 | 当前状态 | 已计入进度 |
|---|---:|---|---:|
| Stage 0 设计与安全基线 | 12% | `DONE` | 12% |
| Stage 1 模型与数据库 PoC | 8% | 离线 `DONE`,真实模型 `BLOCKED` | 6% |
| Stage 2 完整工程骨架 | 10% | `IN_PROGRESS` | 9% |
| Stage 3 数字文档入库 | 14% | `IN_PROGRESS` | 9% |
| Stage 4 检索与重排 | 12% | `IN_PROGRESS` | 7% |
| Stage 5 生成、引用和 UI | 12% | `IN_PROGRESS` | 5% |
| Stage 6 OCR、表格与质量 | 10% | `TODO` | 0% |
| Stage 7 正式评测与消融 | 12% | `IN_PROGRESS` | 2% |
| Stage 8 安全、恢复、性能和论文 | 7% | `TODO` | 0% |
| Stage 9 答辩、发布与归档 | 3% | `TODO` | 0% |
| **合计** | **100%** | — | **50%** |
Stage 1 已完成数据库、适配器契约、synthetic seed 和模型出口隔离,但真实三模型请求当前均返回
401因此真实模型子门禁保持 `BLOCKED`。不依赖该外部鉴权的产品链已经继续推进:文档上传、
本地解析、manifest 审核、向量化、版本激活、正式 Retrieval、Grounded Chat 和 React 页面在
Docker 中连续两次通过重复运行保持相同身份version/chunk/assignment/jobs/invocations 为
`1/1/1/2/1`;当前全量门禁记录为 296 项后端测试、53 项前端测试。按上述任务级证据计入约
50% 是比旧 12% 更合理的实现进度,但**不是毕业验收进度已完成一半的承诺**PDF/OCR、真实
认证与多租户、正式 300 题盲测、备份恢复/压测、论文和答辩仍在关键路径上。
## 2. 阶段依赖与关键路径
```text
Stage 0 DONE
-> Stage 1 模型/数据库 PoC
-> Stage 2 完整工程骨架
-> Stage 3 数字文档入库
-> Stage 4 检索与重排
-> Stage 6 OCR/表格(可与 Stage 4、5 部分并行)
-> Stage 5 生成/引用/UI
-> Stage 7 正式评测(标注可在 Stage 3 后提前启动)
-> Stage 8 安全/恢复/性能/论文
-> Stage 9 答辩/发布/归档
```
| 阶段 | 必须依赖 | 可提前并行的工作 | 不得提前做的工作 |
|---|---|---|---|
| Stage 1 | Stage 0、已轮换 Secret、受控联网 | 虚构数据和 fake server 契约测试 | 使用真实地质资料,或使用已暴露密钥 |
| Stage 2 | Stage 1 三模型和迁移 PoC | React 离线演示、OpenAPI 类型生成、Nginx 单入口和网络隔离前置 | 绕过任务租约直接做不可恢复长任务 |
| Stage 3 | Stage 2 服务骨架 | 合法语料清单、标注规范准备 | 未通过 `CLOUD_APPROVED` 的内容出域 |
| Stage 4 | Stage 3 可追溯切片与向量 | 100 组三元组完善 | 用测试集调相似度、Top K 或阈值 |
| Stage 5 | Stage 4 稳定候选和引用 ID | UI 组件、Prompt fake 测试 | 让前端直接接触模型 Key |
| Stage 6 | Stage 3 数据状态机 | 与 Stage 4、5 并行开发 | 把图例 OCR 宣称为完整图件理解 |
| Stage 7 | Stage 4、5正式总评需 Stage 6 | Stage 3 后开始问题编写和双审 | 开发者查看盲测答案,或把 Gold 入库 |
| Stage 8 | Stage 27 主链路稳定 | 论文各章随阶段持续写作 | 未恢复验证就声称备份可用 |
| Stage 9 | Stage 8 发布候选通过 | 演讲稿和演示素材提前准备 | 在最终演示前临时升级依赖或模型配置 |
## 3. Stage 0仓库、安全和设计基线
- **状态:** `DONE`
- **工期:** 已完成
- **依赖:** 无
### 已完成任务
- [x] 建立仓库说明、贡献约定、安全说明和 AGENTS 约束。
- [x] 建立 `backend/``frontend/``data/``ops/``scripts/``docs/` 结构。
- [x] 完成 0003 总体、数据评测、部署安全和实施计划设计基线。
- [x] 建立 ADR 入口和首批关键架构决策。
- [x] 建立 `.gitignore`、本地 Secret 扫描钩子和 Gitea 工作流基线。
- [x] 建立 `make verify-design`、Markdown 相对链接和 diff 检查。
- [x] 将 Stage 0 基线提交推送到 `origin/main`
### 验收证据
- `git status --short --branch` 显示 `main...origin/main`Stage 0 基线提交远端可见。
- `make verify-design` 可检查 Secret、设计文档、相对链接和 diff。
- [00-overall-design.md](00-overall-design.md) 现已同步“设计基线;安全运行骨架部分实现,产品主链路未完成”。
- Stage 0 完成时尚无可运行应用后续运行骨架不改变“Stage 0 只代表设计和工程防线”的历史验收口径。
### 已完成提交/推送节点
- [x] `S0-A`:建立安全、架构、数据、部署和实施设计基线。
- [x] 推送 `main` 并确认 `origin/main` 指向 Stage 0 基线提交。
### 后续仍持续生效的门禁
- 真实 Key、真实工作空间地址、受限数据和私有 benchmark 永不进入 Git。
- 新实现若改变边界、数据状态或模型契约,必须先更新 ADR/设计再验收。
- Stage 0 完成不能被用于宣称模型、数据库、后端或前端已经可运行。
## 4. Stage 1模型与数据库 PoC
- **状态:** 离线 PoC `DONE`;真实百炼三模型 `BLOCKED`401
- **预计工期:** 12 个工作日;外部密钥或网络未就绪时暂停计时
- **依赖:** Stage 0已轮换百炼 Key允许的工作空间端点本机 Docker
### 具体实现任务
#### 4.1 安全与供应商前置
- [ ] 在百炼控制台撤销聊天中曾暴露的旧 Key创建新 Key。
- [ ] 通过 Docker Secret 或未提交的本地 Secret 文件注入新 Key禁止写入 `.env.example`
- [ ] 分别确认 Embedding、Rerank 和 Chat 的实际路径、请求协议、模型返回名和能力指纹。
- [ ] 记录脱敏的 endpoint identity hash、region、resolved revision 或受控 cache epoch。
- [x] 建立 live provider 测试的手动开关;默认 CI 只使用 fake server。
#### 4.2 最小后端和 Compose
- [x] 创建 `backend/pyproject.toml` 和依赖锁文件,不引入未说明依赖。
- [x] 创建最小 `backend/Dockerfile`,使用非 root 用户和固定基础镜像 digest。
- [x] 创建 Compose包含 `db + migrate + model-gateway + api + gateway + web + provider-smoke + seed-demo/offline`Worker 仍待实现。
- [x] 启动最小 FastAPI `api + gateway`,内部 API 无 egressgateway 无 Secret 并仅发布回环端口;提供真实数据库 readiness、Swagger 和只读 synthetic demo 检索。
- [x] 创建 PostgreSQL bootstrap、migrator 和 app 分权角色初始化脚本;备份只读角色在备份功能落地时单独创建。
- [x] 创建 Alembic 基线迁移,启用 pgvector 并建立 1024 维向量表/HNSW 基线。
- [x] 确保运行期服务不挂载 bootstrap 或 migrator Secret。
- [x] 将百炼 Key 和公网出口隔离到独立 `model-gateway`API/seed/smoke 只持对应内部 token不直持 Key。
- [x]`Authorization: Bearer` + `X-RAG-Caller: api|worker` 建立内部身份,常量时间比较并限制 API 身份不得执行文档向量化。
#### 4.3 三模型适配器
- [x] 实现 `EmbeddingProvider.embed_documents``embed_query` 契约。
- [x] 通过 MockTransport 验证 `text-embedding-v4` 的 1024 维、批次下标和有限浮点数;真实响应待 smoke。
- [ ] 对原生 Embedding 模式区分 `document/query`;兼容模式能力必须显式记录。
- [x] 实现 `qwen3-rerank` 候选索引回填、Token 预检、Top 10 保存。
- [x] 实现 `deepseek-v4-flash` 最小流式 Chat默认关闭搜索和思考。
- [x] 为三个适配器实现 timeout、429/5xx 有界重试和脱敏错误映射。
#### 4.4 虚构数据和测试
- [x] 创建 `provider_smoke`只输出状态、模型、耗时、request ID 和脱敏错误码。
- [x] 创建 `seed-demo`,使用 20 条明确标记的虚构文本完成写入、检索和重排。
- [x] 重复运行 seed证明行数和任务不增长。
- [x] 建立 fake server 契约测试覆盖成功、乱序、无效响应、401、429、5xx 和超时。
- [x] 建立并执行迁移空 volume、角色权限和 Docker 重启持久化测试。
- [x] 明确文档族 split、盲测保管人和“盲测用于调参即退役”规则。
- [x] 扩展 `make verify`,纳入 Stage 1 后端格式、类型和测试门禁。
- [x] 实现并实跑 `0002_model_profiles`profile、embedding cache、chunk assignment、model invocation 与稳定 `citation_id`;空卷和已有数据均完成 upgrade/downgrade/upgrade。
### 验收证据
- [x] `docker compose up db migrate` 在空 volume 成功建立扩展、角色和表。
- [ ] `docker compose run --rm provider-smoke` 三模型探测成功,日志无 Secret。
- [x] `docker compose run --rm seed-demo-offline` 完成 20 条虚构数据写入、检索和重排;真实模式待新 Key。
- [x] `api + gateway` 镜像构建并达到 healthylive/ready/meta/demo status/demo search 均通过真实 HTTP 验收。
- [x] 第二次运行 seed 后数据库计数与第一次相同,均为 chunks/vectors/searchable = 20/20/20。
- [x] 已验证测试集证明模型契约、健康检查、固定上游 gateway、SSE 代理分块与早断连释放契约、离线 demo、数据治理和失败路径正确本轮新增 model-gateway/0002 契约须随阶段提交重新运行全量门禁。
- [x] `make verify`、Secret 扫描、固定镜像构建和 `git diff --check` 通过。
### 2026-07-12 已验证运行证据
- 全新 volume 上 `db` 达到 healthy`migrate` 以非超级用户退出码 0版本为 `0001_initial_schema`
- `0002_model_profiles` 已在独立全新 volume 完成 `空库 -> 0001 -> 0002 -> 0001 -> 0002`,并在已有 20 条合成数据的 volume 完成 downgrade/upgrade重复 seed 后 profile/active KB=1/1、cache/READY assignment/citation=20/20/20citation 无重复。
- `vector` 扩展与 HNSW 基线存在app/migrator 均非超级用户app 无 `rag` schema DDL 权限但具有所需 DML。
- 两次离线 seed 均输出 20/20/209 个可回答虚构问题 Hit@3 = 9/9。
- FastAPI 容器使用 app 最小权限角色,根文件系统只读且无 egress无 Secret gateway 仅提供回环入口Swagger 可见demo search 返回合成片段与不透明 citation ID。
- API 容器对公网 TCP 探测返回 `ENETUNREACH (101)`gateway 的 mounts 为空且不含数据库或百炼业务环境变量。
- PostgreSQL 重启后计数仍为 20/20/20。
- app 尝试修改已 `CLOUD_APPROVED``cloud_text` 被审批不可变触发器拒绝;尝试建表被权限拒绝。
- React + TypeScript strict 离线演示已实现工作台与系统状态页14 项前端测试、ESLint、类型检查和生产构建通过。
- Nginx 成为唯一回环入口Compose 仅发布 `127.0.0.1:8000``web -> gateway -> api` 同源链路、Swagger、OpenAPI、健康检查和 synthetic search 均通过真实 HTTP 验收。
- `edge / ingress / data / model / egress` 五网络边界已落地API、seed、smoke 不挂载百炼 Key只有不连数据库/上传卷的 `model-gateway` 同时连接 internal model 与 egress。
- gateway 与 Nginx 已关闭代理缓冲Grounded Chat 现已实跑 synthetic `meta -> retrieval -> delta -> citations -> usage -> done`,并具备终态错误与客户端取消路径。真实 `deepseek-v4-flash` 仍受供应商鉴权阻断,持久会话/断线重放尚未实现。
- 当前真实 `text-embedding-v4` / `qwen3-rerank` / `deepseek-v4-flash` 请求均到达供应商但返回 401三能力与真实模式 seed 未验收。上传、正式检索、Grounded Chat、Worker 和 synthetic 评测已作为后续阶段能力落地,但不能反向替代 Stage 1 的真实供应商验收。
### 提交/推送节点
- [x] `S1-A`:数据库初始化、分权角色、迁移和最小 Compose 已随 `f4ba5d5` 验证并推送。
- [ ] `S1-B`:三模型适配器和 fake 契约测试已随 `f4ba5d5` 推送;新 Key 下的 live smoke 未完成,因此节点保持未完成。
- [x] `S1-C`20 条虚构 seed、幂等验证、运行证据和文档已随 `f4ba5d5` 推送。
- [x] `S1-D`:内部 API、无 Secret gateway、只读 demo 检索和真实 HTTP/Docker 运行证据已随 `cfd6d4c` 验证并推送。
`f4ba5d5` 是 Stage 1 离线可执行闭环提交,不代表 Stage 1 已完成;阶段完成仍以真实三模型 smoke 和真实模式 seed 通过为准。
建议最终阶段提交意图:`Prove the selected model chain before building product workflows`
### 风险门禁
- **停止条件:** 新 Key 未轮换、Secret 出现在日志/镜像、真实端点能力不明、迁移使用超级用户运行。
- **禁止数据:** Stage 1 只使用虚构文本,不上传任何真实地质报告。
- **降级策略:** 供应商暂不可用时完成 fake 契约和数据库工作,但 Stage 1 不得标记 `DONE`
- **进入 Stage 2 的门槛:** 三模型真实 smoke、迁移和 seed 幂等全部通过。
## 5. Stage 2扩展为完整工程骨架
- **状态:** `IN_PROGRESS`(核心 Compose、业务 Worker 和恢复契约已落地;正式认证/RBAC 与进程级故障矩阵待补)
- **预计工期:** 34 个工作日
- **依赖:** Stage 1 `DONE`
- **已完成前置:** React、OpenAPI 离线生成、Nginx 单入口、数据库迁移、上传卷初始化及本地/模型 Worker 拆分均已进入默认 Compose。
### 具体实现任务
- [x] 建立 FastAPI 应用工厂、配置加载、稳定 Problem JSON、trace middleware 和 OpenAPI导入阶段不连库、不读模型凭证。
- [x] 正式 Retrieval、Grounded Chat、文档上传/审核、评测、任务队列和解析/索引 handler 已按 `api/workers -> services -> adapters/persistence` 分层;认证和持久会话仍需沿用该边界。
- [x] 建立核心业务的 PostgreSQL 仓储和短事务边界Alembic 已推进文档入库/审核 schema空卷和升级路径已验证。
- [x] 建立 PostgreSQL `background_jobs`、短事务 claim、租约、lease token、过期时间 fencing 和重试状态机。
- [x] 建立 Worker maintenance loop、心跳不超过租约 1/3、advisory-lock reaper、优雅停止和真实 PostgreSQL 并发/过期租约 smoke解析与向量化业务 handler 已接入SIGKILL/耗尽重试矩阵仍待补。
- [ ] `/health/live`、数据库 `/health/ready` 及 model-gateway 本地 readiness 已有;管理员模型能力探测 API 仍待实现。
- [x] 建立 React + TypeScript strict、路由、TanStack Query 和 OpenAPI 客户端生成。
- [x] 建立 Nginx仅发布 Web 端口API、DB、两个 Worker 均不发布宿主机端口。
- [x] 建立默认 Compose`web/gateway/api/model-gateway/worker-local/worker-model/db/migrate/upload-init`OCR profile 仍未实现。
- [x] 建立当前范围的 Ruff、类型、pytest、ESLint、TypeScript、Vitest 和镜像检查Stage 2 新模块必须继续纳入门禁。
- [x] 建立 Gitea CI 的 fake provider 测试;外部 PR 不运行真实 Key 测试。
### 验收证据
- [x] 新环境按 README 初始化本地 Secret 后可用 `make up` 启动完整 synthetic 骨架。
- [x] `migrate``upload-init` 均为一次性任务,成功 `Exited (0)`;依赖失败会阻止 API 启动。
- [x] 当前 `docker compose ps` 只暴露 Nginx/Web 回环端口Worker 无端口。
- [x] Docker 重启后数据库数据和上传卷保留。
- [x] 真实 PostgreSQL smoke 已验证并发仅一个 winner、错误 token/过期租约拒绝、过期任务换 token 重领并完成;进程级 SIGKILL 与耗尽 `FAILED` 场景仍待持续 Worker 服务接入后补验。
- [x] 当前全量门禁记录为 296 项后端测试、53 项前端测试,并覆盖 OpenAPI、Compose 和 Secret 契约。
### 提交/推送节点
- [x] `S2-PREP`React 离线演示、Nginx 单入口、当时的四网络隔离、SSE 代理安全修复与质量门禁已随 `c3bad0f` 验证并推送;当前拓扑进一步拆分本地/模型 Worker详见 ADR-0007。
- [x] `S2-A` 功能范围FastAPI、持久化、健康端点和错误契约已实现阶段提交记录随当前交付统一落地。
- [x] `S2-B` 功能范围任务租约、reaper、fencing 和恢复 smoke 已实现;进程级 SIGKILL 矩阵仍作为加固项。
- [x] `S2-C` 功能范围React、Nginx、双 Worker Compose、CI 门禁和文档已实现;正式认证仍阻止整个 Stage 2 标记 `DONE`
- [ ] 每个节点验证后独立提交并推送Stage 2 完成时在本文更新状态。
### 风险门禁
- 不为单机毕设提前引入 Redis、Celery、微服务或独立向量数据库。
- readiness 不把百炼短时故障等同于 API 容器不可用;模型健康单独展示。
- 前端构建产物、OpenAPI 示例和测试日志不得包含 Key 或真实受限数据。
## 6. Stage 3数字文档入库主链路
- **状态:** `IN_PROGRESS`TXT/Markdown/DOCX synthetic 主链已 E2EPDF/OCR、删除/版本演进与真实语料待补)
- **预计工期:** 1 周
- **依赖:** Stage 2 `DONE`;合法数字资料样本和审核人可用
### 具体实现任务
- [x] 实现大小、扩展名、MIME、签名、编码、DOCX 加密/zip bomb/路径穿越/active content 检查,以及声明→流式写入→摘要确认的两阶段上传 API。
- [x] 实现 `QUARANTINED_LOCAL_REVIEW -> LOCAL_PARSED_PENDING_CLOUD_REVIEW -> CLOUD_APPROVED/REJECTED` 状态机、乐观 revision 和审核事件。
- [x] TXT/Markdown/DOCX 的安全本地解析、逻辑页/行/字符/章节锚点已完成PDF 当前 fail closed 为 `OCR_REQUIRED`,可靠 PDF parser/OCR Worker 尚未接入。
- [x] 生成分离的 `display_text/cloud_text/embedding_text`、独立 hash 和确定性 outbound manifest并要求数据库审批绑定 exact manifest。
- [x] 实现确定性 512 Token 基线、800 上限、64 重叠、章节边界和 embedding 元数据前缀;地质标识符保持为单 token。
- [ ] 已实现相同上传/任务幂等和确定性 chunk ID近重复文档族与完整版本关系仍待实现。
- [x] 实现 Embedding 批次、内容缓存、chunk assignment、调用记录、租约 fencing 和有界重试。
- [x] 实现 READY 完整性对账,以及 `documents.active_version_id``chunks.searchable` 单事务切换。
- [ ] 实现删除立即退出检索、后台物理清理和最小审计记录。
- [x] 实现 `/documents` 文档列表、上传/任务进度、复核、批准/拒绝和安全错误 UI。
- [ ] 冻结 corpus manifest 与文档族 60/20/20 split盲测标签由独立保管人控制。
- [ ] 用允许使用的小规模数字 PDF 语料完成端到端入库演练。
### 验收证据
- [x] 当前 synthetic 主链的 searchable 切片可追溯版本、来源锚点和 outbound manifest真实多页语料仍待抽样验收。
- [x] synthetic E2E 验证 `approved chunks == READY vector assignments`,维度和文本/profile 哈希一致。
- [x] 同一 fixture 连续两次 E2E 使用相同身份version/chunk/assignment/jobs/invocations 稳定为 `1/1/1/2/1`
- [ ] 新版本未完整 READY 前旧版本继续可检索;切换没有空窗。
- [ ] 删除后在线查询立即不可命中,物理清理可审计。
- [x] 未获 manifest 审批的版本不会创建 embedding assignment/job本地解析 Worker 无模型网络与 Token。
### 提交/推送节点
- [ ] `S3-A`:上传、数据治理状态机和本地解析。
- [ ] `S3-B`:结构切分、去重、向量任务和版本激活。
- [ ] `S3-C`:文档 UI、删除/恢复测试、corpus manifest 和证据。
- [ ] 每个节点通过安全与回归门禁后提交、推送。
### 风险门禁
- 权利、涉密等级、云处理权限任一不明确即停止外发。
- `cloud_text`、处理器或 manifest 任一变化自动撤销原审批。
- 解析失败页、跨页表和低置信内容必须显式失败或进入复核,不静默丢弃。
## 7. Stage 4检索与重排
- **状态:** `IN_PROGRESS`synthetic 正式检索切片已运行,真实语料/百炼与质量规模验收未完成)
- **预计工期:** 1 周
- **依赖:** Stage 3 `DONE`;开发集 qrels/100 组三元组可用
### 具体实现任务
- [x] 实现 profile-aware query embedding当前兼容模式走内部 model-gateway原生模式能力指纹仍待真实供应商验证。
- [ ] 实现同权限过滤条件下的 exact Cosine Top K 基线。
- [ ] 实现 HNSW、iterative scan、`ef_search`、over-fetch 和 ANN 对账。
- [x] 在候选生成 SQL 的 `LIMIT` 前应用知识库、服务端授权 scope、active version、审批、READY assignment、profile 和 searchable 过滤。
- [ ] Dense Top 50 与 `qwen3-rerank` Top 10 已完成;独立 Context Top 8 builder、邻接合并和硬 token budget 尚未完成。
- [x] 实现 Rerank UTF-8 请求预算、响应 index/分数校验、裁剪和显式 degraded 回退。
- [ ] 已实现 citation 去重;邻接补全、同文档抑制和上下文 Token 预算仍待完成。
- [x] React 检索实验室已展示请求/生效配置、初召回/重排 rank/score、profile、来源、trace 和分阶段耗时。
- [ ] 完善 100 组三元组覆盖同义词、实体冲突、数字、单位、OCR 和难负例。
- [ ] 校准 Top K 和阈值;所有参数只使用开发集。
### 验收证据
- [ ] 三元组 `sim(query, positive) > sim(query, hard_negative)` 达到预设目标或形成完整错误报告。
- [ ] 至少 200 个查询的 ANN Recall@10 相对 exact 基线达到目标,过滤条件完全相同。
- [ ] 未授权文档从候选生成阶段即被排除。
- [ ] Rerank 前后 MRR/nDCG、延迟和 Token 可复查。
- [ ] 相同运行配置可由 `config.yaml` 和 provider profile 重现。
### 提交/推送节点
- [ ] `S4-A`exact/HNSW、权限过滤和 ANN 质量测试。
- [ ] `S4-B`Rerank、上下文构建和错误处理。
- [ ] `S4-C`:检索实验室、三元组报告和参数冻结。
### 风险门禁
- 不使用一个固定余弦或 Rerank 分数跨所有问题通用。
- Rerank 不能恢复初召回未命中的证据,错误归因必须分层。
- 不得查看盲测答案后调整维度、Top K、阈值或 instruct。
## 8. Stage 5生成、引用和问答 UI
- **状态:** `IN_PROGRESS`single-turn synthetic Grounded Chat 已运行,持久会话与真实百炼未验收)
- **预计工期:** 1 周
- **依赖:** Stage 4 `DONE`
### 具体实现任务
- [ ] 建立版本化 Grounded Answer Prompt要求仅依据编号证据回答。
- [x] 实现 `deepseek-v4-flash` 经 model-gateway 的 SSE 契约、超时/错误终态和客户端中止传播路径;真实供应商鉴权成功仍待验证。
- [x] 后端只接受本轮 source map 的 `[S1..Sn]`,映射稳定 citation/document/section/page并过滤越界或畸形引用。
- [ ] 已实现证据不足拒答、无合法引用时 retrieval-only 和 provider error 保留 retrieval 事件;资料冲突分来源陈述仍待专门策略。
- [ ] 实现会话与消息持久化、来源卡片、页码定位和用户反馈。
- [x] 实现文档管理、聊天、检索实验室和系统状态页面导航。
- [ ] 增加正式评测运行/工件页面;当前评测仅提供可复现 CLI/JSON 工件。
- [x] 首版只渲染安全纯文本;后端转义 SSE 中 HTML 敏感字符,测试覆盖 XSS 片段、Prompt Injection 和非法引用。
- [ ] 测试用户取消后 Embedding/Rerank/Chat 下游请求停止。
- [x] 单轮流记录 trace、检索阶段耗时、usage、模型 request ID 和供应商中性错误;持久审计记录仍待会话表接入。
### 验收证据
- [ ] 回答中的每个引用均可打开到授权文档和正确页码。
- [ ] 模型伪造、越界或不存在的引用被后端拦截。
- [ ] 无答案题正确拒答;系统错误与“证据不足”状态不同。
- [ ] 模型不可用时仍展示检索来源和可理解错误。
- [ ] Playwright 覆盖上传、问答、引用、取消、失败重试和 XSS。
### 提交/推送节点
- [ ] `S5-A`:生成服务、证据 Prompt、引用验证和拒答。
- [ ] `S5-B`:聊天/来源 UI、SSE 取消和错误状态。
- [ ] `S5-C`:端到端、安全回归、可观测性和文档。
### 风险门禁
- 模型输出永远视为不可信数据;引用和 Markdown 必须后端/前端双层校验。
- 前端不得获得模型 Key、工作空间凭证或未授权文档正文。
- 不把问答系统输出表述为勘查结论、储量评估或投资建议。
## 9. Stage 6OCR、表格和数据质量挑战集
- **状态:** `TODO`
- **预计工期:** 12 周
- **依赖:** Stage 3 `DONE`;可与 Stage 4、5 部分并行
### 具体实现任务
- [ ] 建立页级数字/扫描/混合 PDF 检测。
- [ ] 建立隔离的 OCR worker profile、资源限制和临时文件清理。
- [ ] 实现 300 DPI 渲染、旋转/倾斜校正、PaddleOCR/PP-Structure 输出。
- [ ] 保留 `raw_text`、修订文本、bbox、置信度、修订人和处理器 profile。
- [ ] 建立低置信页、数值密集页、表格页人工复核队列。
- [ ] 提取表格 JSON、Markdown、截图引用和逐行语义文本。
- [ ] 处理跨页表、合并单元格、表头、单位和脚注;无法确认时显式失败。
- [ ] 建立 OCR 金标准页、术语/数字/单位和表格行列对齐评测。
- [ ] 建立图件挑战集和 UI 边界提示,不宣称已理解空间几何。
### 验收证据
- [ ] 金标准页 CER ≤ 3%,地质术语准确率 ≥ 95%,数字/符号/单位准确率 ≥ 98%。
- [ ] 表格行列对齐 ≥ 97%,数值及单位准确率 ≥ 99%。
- [ ] OCR 原文和人工修订文本均可追溯且不会互相覆盖。
- [ ] 跨页表/合并单元格失败可见,不产生静默错位。
- [ ] 只依赖图件空间关系的问题被标记为挑战集或拒答。
### 提交/推送节点
- [ ] `S6-A`扫描检测、OCR worker 和复核队列。
- [ ] `S6-B`:表格结构、语义行和数值校验。
- [ ] `S6-C`:金标准质量报告、图件边界和文档。
### 风险门禁
- OCR/表格完整处理必须在出域审批前于隔离环境完成。
- 低置信结果不得自动变为 `searchable`
- OCR 模型、预处理或修订变化后outbound manifest 和向量审批必须失效重做。
## 10. Stage 7正式验证集、盲测与消融
- **状态:** `IN_PROGRESS`(指标核心与 synthetic runner 已完成,正式数据/盲测尚未开始)
- **预计工期:** 34 周;语料标注可在 Stage 3 后提前并行
- **依赖:** 问题编写依赖 Stage 3最终评测依赖 Stage 46 `DONE`
### 具体实现任务
- [ ] 建立至少 300 题:构建、开发、盲测各 100500 题仅作为资源充足时扩展。
- [ ] 按文档族、来源、矿种、题型、模态、难度和多跳分层。
- [ ] 为 Gold 和全部 03 judgment 建立不可变源锚点。
- [ ] 双人独立审核答案、证据和可回答性;第三名地质评审裁决。
- [ ] 建立 `anchored_judgments.jsonl`、manifest、版本和 SHA-256。
- [ ] 使用 Dense/词法/Hybrid/Rerank union pooling未判定结果先补标再计分。
- [ ] 每个 run 生成独立 qrels、anchor resolution、预测、指标和错误报告。
- [ ] 已实现严格 Hit、Recall、CompleteHit、EvidenceGroupRecall、MRR、nDCG、引用 precision/recall/F1 与拒答指标;专家答案/忠实度裁决尚未完成。
- [x] synthetic runner 使用固定 seed 的 2000 次 bootstrap输出 95% 区间;正式分层结果尚待数据集。
- [ ] 在开发集完成维度、切片、重叠、前缀、Rerank、上下文、Query 改写等消融。
- [ ] 冻结最终配置、corpus、judgment set 和盲测哈希,再执行一次正式盲测。
- [ ] 补标或裁决变化后生成新 judgment 版本,并对比较表中全部系统重新计分。
- [ ] 生成论文图表、成本/延迟对比和错误分类案例。
### 验收证据
- [ ] Gold、参考答案、qrels、`eval/``runs/` 永不被知识库导入器扫描。
- [ ] 正式盲测标签在参数冻结前对开发者不可见。
- [ ] 检索、重排、生成、引用、拒答和端到端指标均有版本化输入与配置。
- [ ] 所有比较系统使用相同 judgment snapshot、resolver 和 corpus manifest。
- [ ] 所有论文实验图表可由冻结运行产物重新生成。
- [ ] 若盲测结果用于调参,该集合立即退役,最终结论改用新盲测集。
### 提交/推送节点
- [ ] `S7-A`:问题 schema、源锚点、标注工具和构建/开发集。
- [ ] `S7-B`盲测托管、union pooling、评测 runner 和评分规约。
- [ ] `S7-C`:消融、配置冻结和最终盲测。
- [ ] `S7-D`:图表、错误分析、成本和论文实验章节。
### 风险门禁
- 盲测问题、答案和标签必须由独立保管人/受控凭据管理。
- 公开 benchmark 只能包含允许再分发或充分脱敏的内容。
- LLM 可以辅助出题或评分,但不能同时成为唯一出题者、唯一裁判和最终评分者。
- 工期不足时缩减到 300 题,不降低盲测隔离、双审和可复现要求。
## 11. Stage 8安全加固、恢复、性能和论文定稿
- **状态:** `TODO`
- **预计工期:** 1 周,论文写作应贯穿前序阶段
- **依赖:** Stage 27 主链路和评测结果稳定
### 具体实现任务
- [ ] 完成管理员、资料员、评测人员和普通用户 RBAC。
- [ ] 完成对象级知识库/文档权限、审计日志和越权回归。
- [ ] 完成上传限制、路径穿越、压缩炸弹、XSS、Prompt Injection 和限流测试。
- [ ] 完成结构化日志脱敏、trace、模型 Token/耗时、任务和索引监控。
- [ ] 固定镜像 digest、依赖锁和数据库迁移版本。
- [ ] 建立数据库、允许备份文件和独立 Secret 的备份策略。
- [ ] 在全新 Compose project 恢复数据库与文件,重建或校验索引。
- [ ] 恢复后运行固定 20 题冒烟并记录 RTO、缺口和哈希。
- [ ] 测量入库吞吐、查询 p50/p95、并发、错误率和每 1000 查询费用。
- [ ] 完成论文各章、系统截图、实验图表、失败案例和局限性。
- [ ] 完成部署手册、管理员手册、演示故障降级和恢复手册。
### 验收证据
- [ ] `make verify`、Secret 扫描、镜像检查、单元/集成/契约/E2E/安全测试通过。
- [ ] 空白环境恢复成功,并通过固定 20 题冒烟。
- [ ] 端到端 p95、稳态错误率、并发和成本均为实测结果。
- [ ] 论文中的每张实验图表可追溯到 run manifest。
- [ ] 论文明确系统边界,不夸大图件理解、找矿预测或专业决策能力。
### 提交/推送节点
- [ ] `S8-A`RBAC、审计、安全和限流。
- [ ] `S8-B`:备份、恢复、性能和费用报告。
- [ ] `S8-C`:论文定稿、运维手册和 release candidate。
### 风险门禁
- 只有备份文件、没有空环境恢复证据,不得通过验收。
- 性能数字必须注明硬件、网络、数据规模、模型配置和采样窗口。
- release candidate 后不再做非必要依赖升级或架构替换。
## 12. Stage 9答辩、发布与归档
- **状态:** `TODO`
- **预计工期:** 23 个工作日,另预留答辩排期缓冲
- **依赖:** Stage 8 release candidate `DONE`
### 具体实现任务
- [ ] 冻结答辩 release candidate、镜像 digest、迁移、模型配置和演示数据。
- [ ] 在干净机器完整执行 `docker compose up -d --build` 和健康检查。
- [ ] 按 [实施计划的答辩脚本](03-implementation-plan.md#8-最终答辩演示脚本) 连续彩排至少两次。
- [ ] 准备模型临时不可用时的降级演示、预录视频和静态证据。
- [ ] 检查答辩 PPT、论文、截图、日志和视频中没有 Secret 或受限原文。
- [ ] 准备演示问题:正常问答、无答案、版本冲突、表格数值和局限性。
- [ ] 生成公开归档包与内部受控归档包;两者使用不同 manifest。
- [ ] 归档源代码、迁移、锁文件、镜像 digest、公开样例、运行配置、论文和演示材料。
- [ ] 归档数据库/文件恢复说明、校验和、保留周期和销毁策略。
- [ ] 删除临时 Secret、临时文件和未授权数据按策略轮换或撤销演示 Key。
- [ ] 创建最终 Git tag/release推送远端并记录 commit、tag 和归档 SHA-256。
- [ ] 记录已知限制、未完成 OPTIONAL 项、后续维护人和恢复入口。
### 验收证据
- [ ] 干净环境演示全流程成功,或按预定降级方案完成而不泄漏数据。
- [ ] 答辩十步脚本中的每一步都有实时或冻结证据。
- [ ] 公开包通过 Secret、版权、坐标和商业秘密复核。
- [ ] 内部包访问控制、保留期、销毁责任人和恢复步骤明确。
- [ ] 最终 tag/release、论文版本、镜像 digest、run manifest 和归档哈希相互可追踪。
### 提交/推送节点
- [ ] `S9-A`:答辩 release candidate、演示脚本和故障降级证据。
- [ ] `S9-B`:论文/材料最终修订、公开与内部归档 manifest。
- [ ] `S9-C`:最终 tag/release、远端推送和归档校验记录。
### 风险门禁
- 答辩当天不临时升级模型、依赖、数据库或重新生成整套索引。
- 公开 release 不包含真实 Key、工作空间地址、受限语料、私有 benchmark 或可逆脱敏内容。
- 未验证恢复的备份、未固定哈希的实验和未推送提交不能作为最终归档证据。
## 13. 跨阶段风险登记与停止条件
| 风险 | 等级 | 触发信号 | 必须动作 | 解除门槛 |
|---|---|---|---|---|
| 已暴露或疑似暴露 Key | 严重 | Key 出现在聊天、日志、Git、镜像 | 立即停止真实调用并轮换;运行 Secret 扫描 | 新 Key 仅由 Secret 注入,旧 Key 已撤销 |
| 未授权/涉密资料出域 | 严重 | 许可、坐标、保密等级或云处理权不清 | 保持隔离,不调用任何云模型 | 审核 exact outbound manifest 并进入 `CLOUD_APPROVED` |
| Gold/盲测泄漏 | 严重 | `eval/` 被入库、开发者看到盲测标签 | 停止评测,作废受污染集合 | 新盲测集、独立保管和导入 allowlist 测试通过 |
| 模型别名漂移 | 高 | 能力指纹或响应模型变化 | 提升 cache epoch冻结新 profile重跑受影响实验 | 新旧运行明确分版,比较不混用 |
| 向量/版本不一致 | 高 | 文本哈希、profile、维度或 active 投影不一致 | 阻止激活并运行 reconciliation | 新版本全部 READY原子切换验证通过 |
| OCR/表格静默错误 | 高 | 数值、单位、行列错位或低置信未处理 | 降级为复核/失败,不进入检索 | 金标准和人工复核门槛通过 |
| 供应商不可用/限流 | 中 | 429、5xx、超时或区域故障 | 有界重试、熔断、展示检索降级 | smoke 恢复且错误率正常 |
| 标注工期失控 | 高 | 34 周内无法完成 500 题 | 缩减到 300 题,保持双审与盲测 | 300 题各 split/题型覆盖满足规范 |
| 范围蔓延 | 中 | 提前引入微服务、多模态预测或新数据库 | 回到首版非目标,记录 ADR | 核心主链路和论文证据完成后再评估 |
| 答辩环境不稳定 | 高 | 干净机器失败、模型网络不稳 | 冻结 RC、准备预录和离线证据 | 连续两次彩排通过且有降级路径 |
## 14. 每阶段统一收尾清单
每个阶段完成前复制并勾选以下清单:
- [ ] 实现范围与本阶段 TODO 一致,未静默扩展权限、依赖或服务。
- [ ] 正常路径、失败路径和恢复路径均有验证。
- [ ] Ruff/类型/pytest、ESLint/TypeScript/Vitest/Playwright 等适用检查通过。
- [ ] `make verify`、Secret 扫描、Markdown 链接和 diff 检查通过。
- [ ] 数据库迁移可在空环境向前应用,必要时有回滚/恢复说明。
- [ ] API、配置、数据格式、ADR 和本文状态已同步。
- [ ] 验收证据记录命令、时间、commit、数据/配置哈希和已知缺口。
- [ ] 使用 Lore 协议提交;`Tested``Not-tested` 如实填写。
- [ ] 推送远端并确认提交、CI 和证据可见。
- [ ] 只有全部必选项完成后,才把阶段状态改为 `DONE` 并更新整体进度。
## 15. 下一步执行顺序
当前主线是保留已通过的 synthetic 产品链作为回归基线,并行关闭真实供应商、数据能力和毕业
验收三类缺口。建议按以下顺序继续:
1. 在百炼控制台确认旧 Key 已撤销,并核对当前本地 Secret 对应的工作空间、北京地域、端点、计费方案和模型权限Key 只保存在未提交 Secret 中。
2. 通过独立 `model-gateway` 重跑三能力 smoke当前三项 401 未消除前保持 S1-B 未完成。
3. 三能力成功后,用现有公开 synthetic 数据运行真实 Embedding/Rerank/Chat 链路和幂等 seed
在权利、涉密和云处理审批前,真实地质资料仍不得出域。
4. 保持 `make smoke-document` 作为每次入库/Worker/Compose 改动的回归门禁,并补充 SIGKILL、
重试耗尽、删除、旧版本持续可检索和多版本原子切换场景。
5. Stage 6 引入可靠 PDF/OCR/表格 adapter、独立 OCR Worker 和人工质量复核,不把 OCR 文字识别
宣称为地质图空间理解。
6. 并行建立真实认证、RBAC/多租户和允许使用的 corpus manifest随后冻结至少 300 题的构建、
开发、盲测三分集,完成双审、第三方裁决和消融实验。
7. 完成备份恢复、性能/并发/成本压测、论文图表与局限性章节,再冻结答辩 RC 并连续彩排。
在 Stage 1 真实模型验收和资料出域审批之前不展开真实语料云端入库synthetic 产品链可继续
用于工程回归,但不得据此发布真实地质效果结论或调正式盲测。