Explorar el Código

文档体检 + 目录改名:无缝衔接/防滞后专项

目录改名(用户指令,引用全更新):
- 需求.md → 00-需求总览.md
- 计划/ → 开发计划/
- 环境与账号清单.md → 开发环境/ 下
- 新增根目录 CLAUDE.md(开机先读+回写协议+文档地图)

全量文档体检(6 单元,产出 进度/全量文档体检报告-2026-06-18.md):
- 进度状态.yaml 瘦身(当前任务~3000字→~5行)+补 M8 里程碑+修"中间件未装/Java无法编译"滞后
- 进度数据.js 修 5 项(含重复 nextStep 键 bug,曾致面板显示过期下一步)
- 待验证清单 EMQX→Mosquitto + V-122/123 自测注;工作计划表依据 01-14
- SQL核对报告头条加 V-047 校正注;00-需求总览 元信息 4 项
- 需求文档12 EMQX/doc-11 引用;开发计划 M8-P1/改造执行框架 执行状态横幅
- 源码硬断言全命中:oplog:10060/operation_log/@OperateLog 3控制器4方法/对焦列已补
- 红线:需求文档与00业务语义只读,开发计划仅改状态/顺序;项目实际进度未变

新增 .gitignore 排除 .codegraph/;新增 开发环境/服务器测试环境.md(用户)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
huangjie hace 6 días
padre
commit
5826ae6e38
Se han modificado 41 ficheros con 493 adiciones y 332 borrados
  1. 2 0
      .gitignore
  2. 64 0
      CLAUDE.md
  3. 1 1
      aivfo-oplog/src/main/java/com/aivfo/oplog/OplogApplication.java
  4. 1 1
      ivf_tl_control_2.0/IvfTl.AutoFocus/IvfTl.AutoFocus.csproj
  5. 1 1
      ivf_tl_control_2.0/IvfTl.AutoFocus/Storage/CalibrationStore.cs
  6. 1 1
      ivf_tl_operate_2.0/ivf_tl_Operate/View/SettingPageView.xaml.cs
  7. 1 1
      ivf_tl_operate_2.0/ivf_tl_Operate/ViewModel/UnifiedConfigViewModel.cs
  8. 1 1
      sql/数据库测试数据精简方案.md
  9. 6 4
      项目文档/00-需求总览.md
  10. 146 0
      项目文档/开发环境/服务器测试环境.md
  11. 53 0
      项目文档/开发环境/环境与账号清单.md
  12. 3 3
      项目文档/开发计划/2026-06-17-M1-合并跑通子计划.md
  13. 1 1
      项目文档/开发计划/2026-06-17-M2-本地自动对焦子计划.md
  14. 1 1
      项目文档/开发计划/2026-06-17-M3-微服务改造子计划.md
  15. 1 1
      项目文档/开发计划/2026-06-17-M4-UI改造子计划.md
  16. 7 7
      项目文档/开发计划/2026-06-17-M5-配置监控子计划.md
  17. 4 2
      项目文档/开发计划/2026-06-17-改造执行框架与自动对焦数据层.md
  18. 3 1
      项目文档/开发计划/2026-06-18-M8-P1-日志基础设施实现计划.md
  19. 0 217
      项目文档/环境与账号清单.md
  20. 0 46
      项目文档/给新机Claude的开场文案.md
  21. 2 0
      项目文档/进度/SQL与代码一致性核对报告.md
  22. 13 4
      项目文档/进度/交接卡.md
  23. 139 0
      项目文档/进度/全量文档体检报告-2026-06-18.md
  24. 2 2
      项目文档/进度/工作计划表.md
  25. 1 1
      项目文档/进度/待验证清单.md
  26. 4 4
      项目文档/进度/文档源码审核报告.md
  27. 19 15
      项目文档/进度/进度数据.js
  28. 0 1
      项目文档/进度/进度状态.yaml
  29. 1 1
      项目文档/需求文档/01-架构与合并方案.md
  30. 1 1
      项目文档/需求文档/02-业务闭环梳理.md
  31. 1 1
      项目文档/需求文档/03-自动对焦集成方案.md
  32. 1 1
      项目文档/需求文档/04-微服务改造方案.md
  33. 1 1
      项目文档/需求文档/05-实时通讯与服务监控.md
  34. 1 1
      项目文档/需求文档/06-参数配置统一管理.md
  35. 1 1
      项目文档/需求文档/07-UI改造方案.md
  36. 1 1
      项目文档/需求文档/08-影响范围矩阵.md
  37. 1 1
      项目文档/需求文档/09-工作计划与验收.md
  38. 1 1
      项目文档/需求文档/10-术语与契约.md
  39. 4 4
      项目文档/需求文档/12-工作计划表与自动对焦数据设计.md
  40. 1 1
      项目文档/需求文档/13-统一硬件访问层接口定义.md
  41. 1 1
      项目文档/需求文档/14-全量操作日志方案.md

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+# CodeGraph 本地索引(用户本地生成,勿入库)
+.codegraph/

+ 64 - 0
CLAUDE.md

@@ -0,0 +1,64 @@
+# aivfo-tl-3.0 — 时差培养箱合并改造项目
+
+> 路径约定:下文所有 `项目文档/...` 均相对仓库根目录 `aivfo-tl-3.0/`。
+> 本文件两台引擎:**第二节(开机先读)** 保证重启后无缝衔接;**第三节(回写协议)** 保证文档不滞后。
+
+## 一、沟通约定(最先生效)
+- 全程用**中文**回复。
+- 代码/文件**检索、定位**优先用 **codegraph**(MCP `codegraph_explore` / `codegraph_node`,或 shell `codegraph explore "..."`),而非 grep/读文件。
+- 代码**理解**优先用 `codegraph_explore` —— 一次返回相关符号源码 + 调用链。
+- 增删改文件后跑 `codegraph sync`(增量同步索引,保持最新);仅在索引异常/需全量重建时才用 `codegraph init`。
+- 第二节(开机先读)与第三节(回写协议)是**硬纪律**,每次都执行。
+
+## 二、开机先读这些(无缝衔接引擎,按顺序)
+每次新会话 / 关机重启后,严格按此顺序读,读完即可接着干:
+1. `项目文档/进度/进度状态.yaml` —— **轻断点**:下一步 / 紧前阻塞 / 各里程碑状态(只读这个就知道现在干到哪、下一步干啥)。
+2. `项目文档/进度/交接卡.md` —— **拉到最后一段** = 最近一次工作的细节。
+3. 按需再读:任务全貌看 `工作计划表.md`;验证进度看 `待验证清单.md`;全局背景看 `00-需求总览.md`(总纲,勿删)。
+
+⚠ 环境/账号信息以 `项目文档/开发环境/环境与账号清单.md` 与用户实际部署为准。
+
+## 三、回写协议 —— 硬纪律(文档不滞后引擎)
+
+### 3.1 轻断点规则
+`进度状态.yaml` 的 `当前任务` **只保留当前断点**(正在做什么 + 下一步 + 阻塞),**控制在约 5 行内**。每推进一步**覆盖更新**它,**不在这里堆历史**——历史细节一律进 `交接卡.md`。
+
+### 3.2 交接卡 = 追加式历史
+每完成一步或暂停,在 `交接卡.md` **末尾追加**一段,格式:`## 日期 时间 · 一句话标题`,下列「改动 / 核实 / 踩坑 / 下一步」。**只追加,绝不覆盖**。
+
+### 3.3 回写矩阵 —— 什么事发生,就更新哪些文件
+
+| 触发事件 | 必须回写的文件 |
+|---|---|
+| 完成一步 / 暂停 | `进度状态.yaml`(覆盖断点)+ `交接卡.md`(追加)+ `进度数据.js`(让 `监控面板.html` 反映) |
+| 任务状态变化(开始 / 完成 / 待验证) | `工作计划表.md` |
+| 真机验证了一条 | `待验证清单.md` 对应 `V-xxx` |
+| **设计 / 方案改了** | 对应 `需求文档/NN-*.md` + `00-需求总览.md`(若动总纲)+ 受影响的 `开发计划/*.md` |
+| 新增源码文件 / 删除文件 | 改完跑 `codegraph sync`(增量同步索引) |
+
+### 3.4 提交边界 = 文档已同步(强约束)
+一个任务做完、**准备 `git` 提交时**,先把上表中该任务牵动的**所有**文件一次性同步到位,**再提交**。
+**「git 提交 = 文档已和代码对齐」** —— 不允许只提交代码而不更新文档。
+
+## 四、文档地图(`项目文档/` 下,按需深入查)
+- `00-需求总览.md`            总纲(勿删)。
+- `需求文档/01-14`     各专题方案(**无 11**):01架构合并 / 02业务闭环 / 03自动对焦 / 04微服务改造 / 05通讯监控 / 06配置统一 / 07UI改造 / 08影响范围 / 09计划验收 / 10术语契约 / 12计划表+对焦数据 / 13硬件访问层接口 / **14全量操作日志**。
+- `开发计划/`              M1–M5 各里程碑子计划 + M8 日志基础设施实现计划。
+- `进度/`              第二、三节的续接与回写文件 + `进度数据.js` / `监控面板.html`(实时面板)。
+- `开发环境/`            `环境与账号清单.md`——本机环境、版本、账号/凭证、Docker 排障记录(编译与部署先查这里)。
+
+## 五、排障利器:全量操作日志(M8,设计见 14 号)
+- 系统做了"全量操作日志":C#/Java 所有操作记 谁/功能/输入/输出/报错/结果,经 Kafka→日志微服务 `aivfo-oplog`→`log` 库 `operation_log` 表,跨端共用 `trace_id`。
+- **排障第一步**:拿到 `trace_id`,把一次操作的跨端日志拉成时间线,找 `result=失败` 那条读 input+error 定位;调试级(串口/相机原始细节)走本地文件、按模块/按舱热开。
+
+## 六、编译环境(若需本地编译)
+- JDK 11.0.25 + Maven 3.9.9 @ `C:\TLData\tools`;本地仓库 `C:\TLData\tools\maven-repo`。
+- Nexus 私服凭证已配在 `~/.m2/settings.xml`(admin);详细环境/账号见 `项目文档/开发环境/环境与账号清单.md`。
+- ★本地多仓构建顺序:先 `mvn -DskipTests install` 装 **aivfo-framework**(底座,提供 com.aivfo SNAPSHOT),再编译依赖它的各微服务,否则报 Could not find artifact。
+
+## 七、Git(改动可追溯/可回退)
+- 仓库:`http://git.aivfo.com:36000/huangjie/aivfo-tl-3.0`,主分支 `main`,仓库名 `aivfo-tl-3.0`。
+- 每做完一个任务,把该任务牵动的代码与**已同步的文档**(见 3.4)一起提交到该仓库。
+
+## 八、临时文件
+- 临时文件放到 `临时文件/` 目录。

+ 1 - 1
aivfo-oplog/src/main/java/com/aivfo/oplog/OplogApplication.java

@@ -7,7 +7,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
  * 全量操作日志微服务:消费 Kafka topic tl-oplog -> 写 log 库 operation_log。
- * 见 需求文档/14 + 计划/2026-06-18-M8-P1。
+ * 见 需求文档/14 + 开发计划/2026-06-18-M8-P1。
  */
 @SpringBootApplication(scanBasePackages = "com.aivfo")
 @EnableScheduling

+ 1 - 1
ivf_tl_control_2.0/IvfTl.AutoFocus/IvfTl.AutoFocus.csproj

@@ -2,7 +2,7 @@
 
   <!--
     自动对焦业务程序集 — M2-01 落地。
-    依据:项目文档/计划/2026-06-17-M2-本地自动对焦子计划.md (M2-01)、
+    依据:项目文档/开发计划/2026-06-17-M2-本地自动对焦子计划.md (M2-01)、
           项目文档/需求文档/03-自动对焦集成方案.md §1、13-统一硬件访问层接口定义.md §3/§④。
     内容:从 autofocustool 移植四步标定算法 (Sharpness/WellDetector/ExposureMeter/CalibrationEngine
           + 结果 POCO WellCalib/HouseCalib/CalibrationFile),硬件依赖改 HAL 接口 (ISerialChannel/ICamera)。

+ 1 - 1
ivf_tl_control_2.0/IvfTl.AutoFocus/Storage/CalibrationStore.cs

@@ -7,7 +7,7 @@ namespace IvfTl.AutoFocus.Storage
 {
     /// <summary>
     /// 标定结果存储入口(M2-04)。
-    /// 依据:项目文档/计划/2026-06-17-M2-本地自动对焦子计划.md (M2-04)、需求文档/12 §2.7、03 §4。
+    /// 依据:项目文档/开发计划/2026-06-17-M2-本地自动对焦子计划.md (M2-04)、需求文档/12 §2.7、03 §4。
     ///
     /// 职责:
     ///   1) 真相源——把标定结果写本地 calibration.json(复用 CalibrationFile.Save;

+ 1 - 1
ivf_tl_operate_2.0/ivf_tl_Operate/View/SettingPageView.xaml.cs

@@ -107,7 +107,7 @@ namespace ivf_tl_Operate.View
         {
             bool rs = false;
             // M5-02-3:工程师口令改读加密存储的 engineerPwd(首次无值回退默认 tl13579,迁移已在 App_Startup 加密回写)。
-            // 方法签名与 7 处调用点不变(需求.md §8),仅换口令来源。[D8] 权限分级(普通运维 vs 工程师)待确认。
+            // 方法签名与 7 处调用点不变(00-需求总览.md §8),仅换口令来源。[D8] 权限分级(普通运维 vs 工程师)待确认。
             string engineerPwd = ivf_tl_Operate.Helpers.AppConfigHelper.GetEngineerPwd();
             if (textBox.Password.Trim() == engineerPwd) rs = true;
             textBox.Password = "";

+ 1 - 1
ivf_tl_operate_2.0/ivf_tl_Operate/ViewModel/UnifiedConfigViewModel.cs

@@ -6,7 +6,7 @@ namespace ivf_tl_Operate.ViewModel
     /// <summary>
     /// M5-02-4:统一配置页 ViewModel。分组展示并可编辑【本地层】配置项。
     /// - 凭据项(passWord/engineerPwd)经 CryptoHelper 加解密,界面以明文编辑、落盘密文。
-    /// - 数据库层项(对焦时间/帧率/抠图数等)维持 SettingPageView 的 TLSetting 路径,本页不重复写入口(需求.md §8)。
+    /// - 数据库层项(对焦时间/帧率/抠图数等)维持 SettingPageView 的 TLSetting 路径,本页不重复写入口(00-需求总览.md §8)。
     /// - 换气/CCD 类业务键现状本地层、归属 [D8] 待确认,本页只读展示其当前值。
     /// 保存逻辑见 <see cref="SaveAll"/>;加载见 <see cref="Load"/>。
     /// [M7] 落盘/重启生效需运行环境验证(本地不可构建/运行)。

+ 1 - 1
sql/数据库测试数据精简方案.md

@@ -1,6 +1,6 @@
 # 11 · 数据库测试数据精简方案(瘦身,便于开发查阅)
 
-> 父文档:`../需求.md`
+> 父文档:`../00-需求总览.md`
 > **目标**:库**结构不动**(开发中按需自行调结构),只把**测试数据**精简成**少量种子数据**,方便开发查库时不被海量数据淹没。
 > **核心约束**:很多表**没有主外键约束**,不能每表随便留 N 条——必须按**业务主线**保留**能互相关联**的整链数据,否则留下的数据断链、无意义。
 > ⚠️ 删数据不可逆:**先备份 → 测试库演练 → 确认 → 再执行**。本方案产出 SQL 脚本,由你在数据库工具执行(无库连接,不直连)。

+ 6 - 4
项目文档/需求.md → 项目文档/00-需求总览.md

@@ -1,7 +1,7 @@
 # 时差培养箱合并改造 · 总纲文档
 
 > **文档定位**:本文档是整个时差培养箱系统改造的**唯一总纲**。目标是"对着文档能直接、准确地改"——需求、架构、方案、业务闭环、影响范围、工作计划、验收标准全部可追溯。
-> **最后更新**:2026-06-17
+> **最后更新**:2026-06-18
 > **配套子文档**:见 §2 文档导航(`需求文档/` 目录)。
 > **本轮性质**:⚠️ **整个系统的改造**(不止机旁端)——涉及 3 个 .NET 客户端 + 5 个 Java 微服务 + 下位机协议 + 自动对焦本地化。必须全面考虑,避免改一半导致业务不闭环。
 
@@ -56,7 +56,7 @@
 ivf_tl_control_2.0(机旁采集服务)
    │ MQTT(TL/House/collecting-data) + Kafka(图片) + HTTP 上报
-EMQX broker + 微服务集群
+EMQX broker(实际落地 Mosquitto/tl-mqtt) + 微服务集群
    ├─ aivfo-data-transmission: 收图→抠图→[选层打分]→视频合成
    │        └─[选层结果]→Feign→aivof-tl-control.calAutofocusPosition→下发对焦/拍照位置
    ├─ aivof-tl-control: 舱室控制 + MQTT 编排 + 对焦几何换算
@@ -76,7 +76,7 @@ EMQX broker + 微服务集群
 
 | 文档 | 内容 |
 |------|------|
-| **本文(需求.md)** | 总纲:全景、需求总清单、决策记录、风险登记、里程碑 |
+| **本文(00-需求总览.md)** | 总纲:全景、需求总清单、决策记录、风险登记、里程碑 |
 | `需求文档/01-架构与合并方案.md` | 合并形态(单进程托管)、硬件访问层、后台线程、生命周期、不可退出 |
 | `需求文档/02-业务闭环梳理.md` | 端到端闭环图,逐节点"现状/改后/受影响" |
 | `需求文档/03-自动对焦集成方案.md` | 算法移植、接入层、对焦状态机、EEPROM 回写、协议统一 |
@@ -87,7 +87,9 @@ EMQX broker + 微服务集群
 | `需求文档/08-影响范围矩阵.md` | 全子系统改动波及矩阵(含 front-management/微服务/下位机) |
 | `需求文档/09-工作计划与验收.md` | 分期、依赖顺序、回归基线、真机验证清单 |
 | `需求文档/10-术语与契约.md` | 术语表 + 接口/MQTT主题/对焦状态/EEPROM地址契约 |
-| `需求文档/11-数据库测试数据精简方案.md` | 库结构不动,按业务主线保留少量可关联种子数据,便于开发查阅 |
+| `sql/数据库测试数据精简方案.md`(原标 11,实际在 sql 目录,非需求文档/) | 库结构不动,按业务主线保留少量可关联种子数据,便于开发查阅 |
+| `需求文档/12-工作计划表与自动对焦数据设计.md` | 工作计划表结构 + 自动对焦数据层(新表/扩列)设计 |
+| `需求文档/13-统一硬件访问层接口定义.md` | 统一硬件访问层(HAL)接口签名定义(COM/相机/舱门借用契约) |
 | `需求文档/14-全量操作日志方案.md` | ★ 全量操作日志(C#+Java 操作审计、traceId/parentId 链路、Kafka→日志微服务→`operation_log`、两级日志、可配置、开发规约) |
 
 ---

+ 146 - 0
项目文档/开发环境/服务器测试环境.md

@@ -0,0 +1,146 @@
+# 服务器测试环境(Linux 原生部署,非 Docker)
+
+> 2026-06-18 部署完成并全部验证通过。
+> 这是一套**独立的 Linux 测试环境**,全部中间件**原生安装**(不使用 Docker),与《环境与账号清单.md》里 Windows 本机的 Docker 版(compose 项目 `tl-mw`)互不影响。
+> 全部装在 `/opt`,使用 systemd 托管并已设开机自启(`enable`),**重启服务器后自动恢复**。
+
+---
+
+## 一、服务器登录信息
+
+| 项 | 值 |
+|----|----|
+| IP | **192.168.0.108** |
+| SSH 端口 | **22** |
+| 账号 | **root** |
+| 密码 | **aivfo2017** |
+| 操作系统 | CentOS Linux 7 (Core),内核 3.10,x86_64 |
+| 配置 | 4 核 / 7.6G 内存 / 50G 系统盘 |
+| 防火墙 | firewalld **disabled**、SELinux **Permissive**(端口无需额外放行,同网段可直连) |
+
+```bash
+# 登录示例
+ssh root@192.168.0.108        # 密码 aivfo2017
+```
+
+---
+
+## 二、运行期中间件清单(账号/端口对齐主文档第二节)
+
+> 各组件地址均可用 `192.168.0.108`(本机内也可用 `localhost`)访问。
+
+| 组件 | 版本 | 地址 | 账号/密码 | 安装位置 | 用途 |
+|------|------|------|----------|---------|------|
+| **MySQL** | 8.0.43 | `192.168.0.108:3306` | **root / root** | yum 安装 | 7 个业务库(见第三节) |
+| **Redis** | 7.2.4 | `192.168.0.108:6379` | **密码 123456**(requirepass) | `/opt/redis`(源码编译) | 缓存 |
+| **Nacos** | 2.3.2 | `http://192.168.0.108:8848/nacos`(+9848) | **nacos / nacos** | `/opt/nacos`(standalone + 内置 derby) | 服务发现/注册/配置 |
+| **Kafka** | 3.7.0 | `192.168.0.108:9092` | 无 | `/opt/kafka`(KRaft 单机,无 ZooKeeper) | 图片消息(data-transmission 收图) |
+| **FastDFS** | 6.12.1 | tracker `:22122` / storage `:23000` / nginx `http://192.168.0.108:8888/{file_id}` | 无 | 源码编译,数据 `/opt/fastdfs` | 图片文件存储 |
+| **MQTT** (Mosquitto) | 2.0.18 | `tcp://192.168.0.108:1883` | **aivfo / aivfo**(allow_anonymous,凭据接受不强校验) | 源码编译(二进制 `/usr/local/sbin/mosquitto`,配置 `/etc/mosquitto/`) | C#↔Java 实时通讯 |
+
+**MySQL 说明**:root 账号已设为 `mysql_native_password`(兼容老 MySQL 驱动),并已开放 `root@%` 远程访问。
+**MQTT 常用 topic**:`TL/House/pc`、`TL/House/surface`、`TL/House/app`、`TL/DATA/{tlSn}`。
+
+**验证状态(2026-06-18 实测通过):** MySQL 远程登录 OK / Redis PONG / Nacos HTTP 200 / Kafka broker 建 topic OK / FastDFS storage `192.168.0.108 ACTIVE` 且 nginx 下载 HTTP 200 / MQTT `aivfo/aivfo` 收发成功。
+
+---
+
+## 三、数据库(7 个库已建并导入)
+
+脚本来源:本机 `aivfo-tl-3.0/sql/`(已 scp 到服务器 `/opt/sql/`),账号 root/root。表数与主文档第三节一致。
+
+| 数据库 | 已导入表数 | 对应模块 |
+|--------|-----------|---------|
+| `aivfo-auth`(中划线) | 4 | aivfo-gateway 认证/网关 |
+| `aivfo_services` | 2 | aivfo-service 核心服务 |
+| `aivfo-tl`(中划线) | 4 | data-transmission 数据传输 |
+| `aivfo_tl_setting` | 17 | tl-control 控制配置 |
+| `aivfo_tl`(下划线) | 25 | business-manage 业务管理 |
+| `log` | 1 | 框架日志组件 |
+| `quartz` | 11 | 定时任务组件 |
+
+> ⚠️ `aivfo_tl`(下划线,业务库) 与 `aivfo-tl`(中划线,数据传输库) 是两个不同的库。
+
+**⏳ 未执行的内容(按主文档保留手动,与中间件运行无关):**
+- `/opt/sql/migrations/2026-06-17-autofocus-data-layer.sql`(对 `aivfo_tl_setting`,对焦数据层)
+- `/opt/sql/migrations/2026-06-18-operation-log.sql`
+- `/opt/sql/精简测试数据.sql`(测试数据)
+
+需要时手动执行,例如:
+```bash
+mysql -uroot -proot aivfo_tl_setting < /opt/sql/migrations/2026-06-17-autofocus-data-layer.sql
+```
+
+---
+
+## 四、日常运维(systemd 命令)
+
+8 个服务名:`mysqld`、`redis`、`nacos`、`kafka`、`mosquitto`、`fdfs-tracker`、`fdfs-storage`、`fdfs-nginx`
+
+```bash
+# 看全部状态
+systemctl status mysqld redis nacos kafka mosquitto fdfs-tracker fdfs-storage fdfs-nginx
+
+# 启 / 停 / 重启 单个
+systemctl start|stop|restart <服务名>
+
+# 全部已 enable,重启服务器自动恢复,一般无需手动操作
+```
+
+**逐项快速验证:**
+```bash
+mysql -h192.168.0.108 -uroot -proot -e "SHOW DATABASES;"                 # 7 个库
+/opt/redis/bin/redis-cli -h 192.168.0.108 -a 123456 PING                 # PONG
+curl http://192.168.0.108:8848/nacos/                                    # Nacos 控制台
+/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server 192.168.0.108:9092
+/usr/bin/fdfs_monitor /etc/fdfs/client.conf 2>&1 | grep -E "ip_addr|status ="   # storage ACTIVE
+# MQTT 收发自测(账号 aivfo/aivfo)
+/usr/local/bin/mosquitto_sub -h 192.168.0.108 -u aivfo -P aivfo -t TL/House/pc -C 1 &
+/usr/local/bin/mosquitto_pub -h 192.168.0.108 -u aivfo -P aivfo -t TL/House/pc -m hi
+```
+
+---
+
+## 五、微服务接入(把各端指向这台服务器)
+
+1. **改地址**:各微服务的连库 / Nacos / Kafka / FastDFS 地址,统一改成 `192.168.0.108:对应端口`(见第二节)。
+2. **MQTT**:各端 `App.config` / `properties` 里的 `mqttIp` 改成 `192.168.0.108`(端口 1883 不变)。
+3. **FastDFS**:业务侧 `server.ip` 指向 `192.168.0.108` 即可,**原生部署无需双IP映射**(见第六节)。
+
+---
+
+## 六、与主文档(Docker 版)的关键差异 / 部署经验
+
+1. **FastDFS 原生部署无需「双IP映射」**
+   主文档第六节那套 `storage_ids` 双IP映射(`172.30.0.10,127.0.0.1`)是 **Docker on Windows 的网络隔离专属坑**。原生 Linux 上 storage 直接上报真实 IP `192.168.0.108`,同网段客户端可直连 23000,无需任何映射技巧,配置更简单。
+
+2. **CentOS 7 已 EOL(源处理)**
+   - yum 走阿里云 vault 源;MySQL 用清华镜像 `mirrors.tuna.tsinghua.edu.cn/mysql`。
+   - GitHub 源码用 `ghfast.top` 代理加速(Nacos、FastDFS 全家桶)。
+   - **Kafka 3.7.0 各主流/active 镜像已下线(404)**,只有 `repo.huaweicloud.com/apache/kafka/3.7.0/` 还保留(国内快);`archive.apache.org` 虽有但极慢。
+
+3. **版本选择**(CentOS 7 上对齐文档版本)
+   - Redis 7.2.4、Mosquitto 2.0.18 均**源码编译**(系统 yum 源只有 Redis 3.2、Mosquitto 1.6)。
+   - Kafka 3.7.0 用 **KRaft 单机模式**(无需 ZooKeeper)。
+   - Nacos standalone 用内置 derby(未接外部 MySQL),JVM 内存调小到 512m。
+
+4. **源码与脚本位置(备查)**
+   | 路径 | 说明 |
+   |------|------|
+   | `/opt/src/` | 所有源码包与编译脚本(build-fdfs.sh、build-nginx.sh、setup-kafka.sh 等) |
+   | `/opt/sql/` | 7 个建库脚本 + migrations + 测试数据 |
+   | `/etc/fdfs/` | FastDFS 配置(tracker.conf、storage.conf、mod_fastdfs.conf、client.conf) |
+   | `/opt/redis/conf/redis.conf` | Redis 配置 |
+   | `/etc/mosquitto/mosquitto.conf` | MQTT 配置(passwd 文件 `/etc/mosquitto/passwd`) |
+   | `/etc/systemd/system/*.service` | 8 个服务的 systemd 单元 |
+
+---
+
+## 七、端口总览
+
+| 端口 | 组件 | 端口 | 组件 |
+|------|------|------|------|
+| 3306 | MySQL | 22122 | FastDFS tracker |
+| 6379 | Redis | 23000 | FastDFS storage |
+| 8848 / 9848 | Nacos | 8888 | FastDFS nginx(HTTP下载) |
+| 9092 / 9093 | Kafka(broker/controller) | 1883 | MQTT |

+ 53 - 0
项目文档/开发环境/环境与账号清单.md

@@ -0,0 +1,53 @@
+# 环境与账号清单
+ 
+| 项目 | 状态 | 版本 | 说明 |
+|------|------|------|------|
+| .NET SDK | ✅ | 8.0.422 | `C:\Program Files\dotnet` |
+| .NET Desktop Runtime 6.0 / 8.0 | ✅ | 6.0.36 + 8.0.28 | WPF 运行时 |
+| JDK 11 (Temurin) | ✅ | 11.0.25+9 | `C:\TLData\tools\jdk-11`(便携) |
+| Maven | ✅ | 3.9.9 | `C:\TLData\tools\maven`(便携) |
+| WSL2 内核 | ✅ | 5.10.16(旧 MSI)→ **已升级现代 WSL 2.7.8** | 见第六节①,Docker 必需 |
+| Docker Desktop | ✅ 引擎已就绪 | 4.78.0 / engine 29.5.3 | WSL2 后端,已修复启动故障 |
+| 中间件容器 (MySQL/Redis/Nacos/Kafka/FastDFS/**MQTT**) | ✅ 7 个全部 Up | 见第二节 | compose 项目 `tl-mw`,`unless-stopped` 自动恢复 |
+| 7 个数据库 + 表结构 | ✅ 已导入 | 见第三节 | root/root |
+| Nexus 私服凭据 | ⚠️ **仍需你提供账号密码** | — | 见第一节,Java 端编译要用 |
+
+ 
+## 一、开发/构建工具链(编译用)
+
+| 工具 | 版本 | 位置 | 验证命令 |
+|------|------|------|---------|
+| .NET SDK | 8.0.422 | `C:\Program Files\dotnet` | `dotnet --version` |
+| WindowsDesktop 运行时 | 6.0.36 + 8.0.28 | dotnet shared | `dotnet --list-runtimes` |
+| JDK | 11.0.25 (Temurin) | `C:\TLData\tools\jdk-11` | `java -version` |
+| Maven | 3.9.9 | `C:\TLData\tools\maven` | `mvn -v` |
+
+**环境变量(已写入用户级):** `JAVA_HOME`、`MAVEN_HOME=M2_HOME`、`PATH` 已前置 jdk/maven 的 bin,Maven 本地仓库 `C:\TLData\tools\maven-repo`。
+
+**⚠️ Nexus 私服需账号密码:** `http://maven.aivfo.com:36000/repository/maven-public/` 关闭了匿名访问(GET 返回 401)。
+拿到账号后编辑 `C:\Users\AIVFO\.m2\settings.xml`,在 `<servers>` 段填写:
+```xml
+<server>
+  <id>aivfo-nexus</id>
+  <username>admin</username>
+  <password>Aivfo2017</password>
+</server>
+```
+> 这是 Java 微服务 `mvn compile` 的前置。中间件运行不依赖它。
+
+---
+
+## 二、运行期中间件(全部以 Docker 容器运行)
+
+> ⚠️ MySQL、Redis、Nacos、Kafka、FastDFS **都不是装在 Windows 本机**,而是 Docker 容器。
+> 定义文件:`C:\TLData\trae_projects\Project_TL\项目部署\docker\docker-compose.middleware.yml`,compose 项目名固定 `tl-mw`。
+
+| 组件 | 容器名 | 地址 | 账号/密码 | 用途 |
+|------|--------|------|----------|------|
+| **MySQL** 8.0 | `tl-mysql` | `localhost:3306` | **root / root** | 7 个库(见第三节) |
+| **Redis** 7 | `tl-redis` | `localhost:6379` | **密码 123456**(requirepass) | 缓存 |
+| **Nacos** v2.3.2 | `tl-nacos` | `http://localhost:8848/nacos`(+9848/9849) | **nacos / nacos**(鉴权已关) | 服务发现/注册 |
+| **Kafka** 3.7.0 | `tl-kafka` | `localhost:9092` | 无 | 图片消息(data-transmission 收图) |
+| **FastDFS** V6.12.1 | `tl-fdfs-tracker` / `tl-fdfs-storage` | tracker `:22122` / storage `:23000` / nginx `http://localhost:8888/{file_id}` | 无 | 图片文件存储 |
+| **MQTT** (Mosquitto 2.x) | `tl-mqtt` | `tcp://localhost:1883` | **aivfo / aivfo**(allow_anonymous,凭据接受不强校验) | C#↔Java 实时通讯 |
+ 

+ 3 - 3
项目文档/计划/2026-06-17-M1-合并跑通子计划.md → 项目文档/开发计划/2026-06-17-M1-合并跑通子计划.md

@@ -1,8 +1,8 @@
 # M1 · 合并跑通子计划 Implementation Plan
 
 > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development 或 superpowers:executing-plans 逐 Task 执行。步骤用 checkbox(`- [ ]`)追踪。
-> 父依据:`需求文档/01-架构与合并方案.md`(合并形态权威)、`需求文档/13-统一硬件访问层接口定义.md`(HAL 接口)、`需求.md` §4/§5(D1/D2/D7)。
-> 里程碑:**M1 合并跑通**(见 `需求.md` §7、`需求文档/09/12`)。
+> 父依据:`需求文档/01-架构与合并方案.md`(合并形态权威)、`需求文档/13-统一硬件访问层接口定义.md`(HAL 接口)、`00-需求总览.md` §4/§5(D1/D2/D7)。
+> 里程碑:**M1 合并跑通**(见 `00-需求总览.md` §7、`需求文档/09/12`)。
 
 **Goal:** 把 `ivf_tl_operate_2.0`(前台 WPF)与 `ivf_tl_control_2.0`(采集服务)合并为单进程:operate 登录成功后托管 control 的 `StartRun()` 为后台线程;删除 control 独立登录窗 `Window1`,全程序单登录;落地统一硬件访问层(HAL)单例,让 control 采集 / operate 调试 / 自动对焦三方改为向 HAL 借用串口与相机句柄,去掉各自直接 `new ComBin/SerialPort/Camera`,达成"调试取图 vs 后台采集"切换不报端口占用、不死锁的最小验证(01 §3 必过)。
 
@@ -14,7 +14,7 @@
 
 ## 范围与约束说明(务必先读)
 
-**本地环境现实**(已实测,见 `项目文档/计划/2026-06-17-改造执行框架与自动对焦数据层.md`):本机 **dotnet 6**,而 operate/control 项目目标 **net8.0-windows**;无下位机、无相机、无运行中的微服务/中间件;根目录非 git 仓库。→ **本计划的代码无法本地构建或运行**。
+**本地环境现实**(已实测,见 `项目文档/开发计划/2026-06-17-改造执行框架与自动对焦数据层.md`):本机 **dotnet 6**,而 operate/control 项目目标 **net8.0-windows**;无下位机、无相机、无运行中的微服务/中间件;根目录非 git 仓库。→ **本计划的代码无法本地构建或运行**。
 
 因此本计划每个 Task 的"构建/运行验证"一律改为:**代码完成 → 登记 `项目文档/进度/待验证清单.md` 对应 V 项(依赖 net8 工具链 / 真机),到 M7 集中测**。本计划**不写**任何假装能本地 `dotnet build` / 运行的命令。能在本机完成并核对的只有:源码改动、接口/类型签名一致性、调用点替换是否齐全(用 grep/codegraph 核对残留 `new ComBin`/`new Camera`/`new SerialPort`)。
 

+ 1 - 1
项目文档/计划/2026-06-17-M2-本地自动对焦子计划.md → 项目文档/开发计划/2026-06-17-M2-本地自动对焦子计划.md

@@ -14,7 +14,7 @@
 
 ## 范围与约束说明(务必先读)
 
-**本地环境现实**(与 M1 一致,见 `项目文档/计划/2026-06-17-改造执行框架与自动对焦数据层.md` 与 `2026-06-17-M1-合并跑通子计划.md`):本机 **dotnet 6**,合并端项目目标 **net8.0-windows**;无下位机、无相机、无运行中微服务/中间件;根目录非 git 仓库。→ **本计划的代码无法本地构建或运行**。
+**本地环境现实**(与 M1 一致,见 `项目文档/开发计划/2026-06-17-改造执行框架与自动对焦数据层.md` 与 `2026-06-17-M1-合并跑通子计划.md`):本机 **dotnet 6**,合并端项目目标 **net8.0-windows**;无下位机、无相机、无运行中微服务/中间件;根目录非 git 仓库。→ **本计划的代码无法本地构建或运行**。
 
 因此每个 Task 的"构建/运行验证"一律改为:**代码完成 → 登记 `项目文档/进度/待验证清单.md` 对应 V 项 → 到 M7 集中测**。本计划**不写**任何假装能本地 `dotnet build`/运行的命令。能在本机完成并核对的只有:源码改动、签名/类型一致性、调用点替换是否齐全(grep/codegraph 核对残留 `new HouseMotor`/`new SerialMotor`/`new Camera`/`GetAutoFocusServiceEvent`)。
 

+ 1 - 1
项目文档/计划/2026-06-17-M3-微服务改造子计划.md → 项目文档/开发计划/2026-06-17-M3-微服务改造子计划.md

@@ -1,7 +1,7 @@
 # M3 · 微服务改造实现子计划(删选层打分链 + 保留抠图链 + 消 NPE + calPhotoPosition 改本地)
 
 > 编写日期:2026-06-17 · 编写员:实现计划编写员(Claude Opus 4.8)
-> 权威输入:`项目文档/需求文档/04-微服务改造方案.md`、`项目文档/进度/文档源码审核报告.md`、`项目文档/需求.md §5 D3/D4/D5/D10`
+> 权威输入:`项目文档/需求文档/04-微服务改造方案.md`、`项目文档/进度/文档源码审核报告.md`、`项目文档/00-需求总览.md §5 D3/D4/D5/D10`
 > 所有文件:行号已用 codegraph MCP(codegraph_explore / codegraph_node)核对,符号真实存在、行号吻合(误差 0–2 行)。
 > 本文档**只产出计划,不改任何源码**。
 

+ 1 - 1
项目文档/计划/2026-06-17-M4-UI改造子计划.md → 项目文档/开发计划/2026-06-17-M4-UI改造子计划.md

@@ -1,7 +1,7 @@
 # M4 · UI 改造子计划(自适应竖屏 + 触控优先 + 圆形造型 + 内置键盘 + 主页零滚动)
 
 > 编制日期:2026-06-17 · 里程碑:**M4** · 对应需求 **4/5/6/6.1/11**(兼顾 12)· 决策 **D6** · 风险 **R6**
-> 父需求:`../需求.md` §3(需求 4/5/6/11)、§5(🔶D6)、§6(R6) · 方案权威:`../需求文档/07-UI改造方案.md`
+> 父需求:`../00-需求总览.md` §3(需求 4/5/6/11)、§5(🔶D6)、§6(R6) · 方案权威:`../需求文档/07-UI改造方案.md`
 > 改造对象工程:`ivf_tl_operate_2.0/ivf_tl_Operate/`(前台 UI,合并后主进程)
 
 ---

+ 7 - 7
项目文档/计划/2026-06-17-M5-配置监控子计划.md → 项目文档/开发计划/2026-06-17-M5-配置监控子计划.md

@@ -1,7 +1,7 @@
 # M5 · 配置统一管理 + 只读服务监控 + 通讯稳定子计划
 
 > 编制日期:2026-06-17 · 里程碑:**M5** · 对应需求 **7 / 9 / 10**(兼顾 12)· 决策 **🔶D8(配置分层边界)/ 🔶D10(实时指标)** · 风险 **R8(配置迁移)/ R9(实时通讯)**
-> 父需求:`../需求.md` §3(需求 7/9/10)、§5(🔶D8/🔶D10)、§6(R8/R9) · 方案权威:`../需求文档/06-参数配置统一管理.md`、`../需求文档/05-实时通讯与服务监控.md`
+> 父需求:`../00-需求总览.md` §3(需求 7/9/10)、§5(🔶D8/🔶D10)、§6(R8/R9) · 方案权威:`../需求文档/06-参数配置统一管理.md`、`../需求文档/05-实时通讯与服务监控.md`
 > 改造对象工程:`ivf_tl_operate_2.0/ivf_tl_Operate/`(合并后主进程,前台 UI + 设置页)、`ivf_tl_control_2.0/ivf_tl_Control/`、`ivf_tl_control_2.0/ivf_tl_ServicesImpl/`(后台托管服务,监控数据来源)
 
 ---
@@ -14,7 +14,7 @@
 2. **只读服务监控页(需求 7)**:设置页新增**纯只读**"服务运行监控"页,从托管的 control 内存/事件取数,展示各服务/连接/队列/磁盘状态。**不新增任何控制/修改/删除**(范围边界)。
 3. **链路健康 + 通讯稳定(需求 10)**:恢复被 `return;` 屏蔽的 MQTT 保活心跳、链路健康可视化(服务器/MQTT/上报队列/最后成功通讯时间)、断线显著提示(不"假装实时")、图片补传机制补强(落盘队列 + 去重 + 断网累积兜底)。
 
-**配置统一只动「读写来源 + 入口聚合 + 加密」,不改既有业务参数语义;监控页只读不写;通讯改造只补强保活/提示/补传,不改 MQTT 主题与上报报文结构。** 既有设置项(HEPA/保养时间、对焦时间、帧率、抠图数、舱室/对焦/调试入口、密码校验语义)一律保留(需求.md §8「既有设置项不删只增统一入口」)。
+**配置统一只动「读写来源 + 入口聚合 + 加密」,不改既有业务参数语义;监控页只读不写;通讯改造只补强保活/提示/补传,不改 MQTT 主题与上报报文结构。** 既有设置项(HEPA/保养时间、对焦时间、帧率、抠图数、舱室/对焦/调试入口、密码校验语义)一律保留(00-需求总览.md §8「既有设置项不删只增统一入口」)。
 
 ---
 
@@ -79,8 +79,8 @@
    - **暂留本地、待 D8 定归属**:换气/电机/CCD 类业务参数(`csTime/gbTime/VentNum/VentPre/VentWaitTime*/AutoWaitTime/CCDAutoWaitTime/CCDFailedNumber/CCDFailedWaitTime/QueuAir/StopPro`)——06 §2 建议这些进数据库,但现状在 control App.config。**M5 先原样保留在本地层并集中展示**,迁移到数据库登记为 **[D8]** 待确认项,不在 M5 强行搬迁(避免 R8 起不来)。
    - **无网兜底 / 权限分级**:本地缓存只读副本、普通运维 vs 工程师权限——均标 **[D8]**,M5 仅预留结构不实装强约束。
 3. **🔶D10 依赖未决**:实时指标具体值(刷新延迟上限、断线检出时间、重连最大时延)待定。M5 链路健康页**呈现「最后成功通讯时间 / 连接态」原始数据**,阈值上色与告警门限做成可配置占位,具体阈值标 **[D10]** 留 M7 校准。
-4. **只读边界(需求 7 / 需求.md §8)**:服务监控页**只读**——只 `get` 状态、不 `set`、不下发指令、不新增控制按钮。代码上监控 ViewModel 只接受 `AppData.Instance` 的只读快照 DTO,不持有可调用控制方法的引用。
-5. **不删既有设置项(需求.md §8)**:`SettingPageView` 现有 7 个入口与业务项全部保留,M5 只**新增**「统一配置」与「服务监控」两个入口,不改既有 `MiMa()` 校验语义、不改既有 `UpdataTlSetting()` 流程。
+4. **只读边界(需求 7 / 00-需求总览.md §8)**:服务监控页**只读**——只 `get` 状态、不 `set`、不下发指令、不新增控制按钮。代码上监控 ViewModel 只接受 `AppData.Instance` 的只读快照 DTO,不持有可调用控制方法的引用。
+5. **不删既有设置项(00-需求总览.md §8)**:`SettingPageView` 现有 7 个入口与业务项全部保留,M5 只**新增**「统一配置」与「服务监控」两个入口,不改既有 `MiMa()` 校验语义、不改既有 `UpdataTlSetting()` 流程。
 6. **不改通讯协议/报文**:MQTT 主题(`TL/House/surface/{tlSn}`、`TL/House/collecting-data`)、上报报文结构、Kafka topic 一律不动;M5 只补强保活/提示/补传可靠性。
 
 ### 待验证清单约定
@@ -164,7 +164,7 @@
 ### M5-02-3 硬编码 tl13579 纳入治理
 - 文件:`ivf_tl_operate_2.0/ivf_tl_Operate/View/SettingPageView.xaml.cs:106-112 MiMa()`(口令源 `:109`)
 - 改什么:把硬编码 `"tl13579"` 比对改为读取**加密存储的工程师口令**(config 新增 `engineerPwd` 本地层键,`CryptoHelper` 加密;首次无值则回退默认 `tl13579` 并提示迁移)。**保留 `MiMa(PasswordBox)` 方法签名与 7 处调用点不变**(`:167/190/213/237/256/291/323`),只换口令来源。
-- 为何:06 §5 要求 `tl13579` 纳入治理(加密 + 可改);签名不变 = 不触碰既有入口(需求.md §8)。
+- 为何:06 §5 要求 `tl13579` 纳入治理(加密 + 可改);签名不变 = 不触碰既有入口(00-需求总览.md §8)。
 - 与现状衔接:7 个入口(HEPA/保养/系统参数/对焦/舱室调试/缓冲调试/退出)密码校验语义完全不变。
 - 分层/权限:是否「普通运维 vs 工程师」分级口令标 **[D8]**——M5 先单口令加密,分级待拍板。
 - 待验证:**V-M5-08 [M7]** 改口令后 7 入口校验生效;**[D8]** 权限分级是否实装。
@@ -172,7 +172,7 @@
 ### M5-02-4 设置页新增「统一配置」入口与配置页
 - 文件:`ivf_tl_operate_2.0/ivf_tl_Operate/View/SettingPageView.xaml`(**新增入口控件**,与现有 7 入口同构)+ `SettingPageView.xaml.cs`(新增 `UnifiedConfig_MouseUp` 事件,仿 `:211 HouseSetting_MouseUp` 走 `MiMa` 进入);新增 `View/UnifiedConfigView.xaml(.cs)` + `ViewModel/UnifiedConfigViewModel.cs`
 - 写什么:统一配置页**分组展示并可编辑本地层项**(连接:urlIp/urlPort/mqttIp/mqttPort/kfkaIP/kfkaPort;本机:cacheDisk/tlNum/Language/houseEnabled;凭据:userName/passWord 脱敏;口令:engineerPwd 脱敏);编辑经 `AppConfigHelper.Save` + 加密项经 `CryptoHelper`;每组带说明文案(纠正词不符义,如 `autoFocus` 注明"实为烧录换气开关")+ 改后生效提示(沿用现有 `MessagePrompt`)。**数据库层项(对焦时间/帧率/抠图数等)维持现有 `SettingPageView` 的 `TLSetting` 编辑路径,统一配置页对其做「只读引用+跳转」,不重复写入口**。
-- 为何:需求 9「界面化」——原只能改 XML 的本地项搬到界面;统一入口而非重做既有项(需求.md §8)。
+- 为何:需求 9「界面化」——原只能改 XML 的本地项搬到界面;统一入口而非重做既有项(00-需求总览.md §8)。
 - 与现状衔接:纯新增入口与页面,触控/键盘样式套用 M4 框架(数字/密码键盘见 M4-04);既有设置项与入口零改动。
 - 待验证:**V-M5-09 [M7]** 统一配置页改本地项→config 落盘(密文)→重启生效;既有设置项入口不受影响。
 
@@ -221,7 +221,7 @@
 - 文件:`ivf_tl_operate_2.0/ivf_tl_Operate/View/SettingPageView.xaml`(新增入口控件)+ `SettingPageView.xaml.cs`(新增 `ServiceMonitor_MouseUp`,加载 `ServiceMonitorView`)
 - 写什么:仿 `:337 About_MouseUp`(无密码、直接 `LoadPage`)新增只读入口——**服务监控只读、无需工程师口令亦可,或按 [D8] 权限分级决定是否要口令**;进入即 `LoadPage(new ServiceMonitorView(...))`。
 - 为何:需求 7「设置页新增服务运行监控入口」。
-- 与现状衔接:纯新增入口,既有 7 入口不动(需求.md §8)。
+- 与现状衔接:纯新增入口,既有 7 入口不动(00-需求总览.md §8)。
 - 待验证:**V-M5-15 [M7]** 设置页入口可进监控页;**[D8]** 监控页是否需口令/权限分级待确认。
 
 ---

+ 4 - 2
项目文档/计划/2026-06-17-改造执行框架与自动对焦数据层.md → 项目文档/开发计划/2026-06-17-改造执行框架与自动对焦数据层.md

@@ -1,5 +1,7 @@
 # 改造执行框架与自动对焦数据层 Implementation Plan
 
+> ✅ **执行状态(2026-06-18 体检确认)**:本计划任务**全部完成**——进度文件组(4 文件)建立、M0-00 文档源码审核产出、自动对焦数据层 SQL 迁移已应用并校验(V-001 通过)。后续 M1–M8 各里程碑子计划已另出。
+
 > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
 
 **Goal:** 建立贯穿整场改造的"工作计划表 + 跨会话续接机制",执行 M0-00 文档源码审核,并落地自动对焦多层数据层的 SQL 迁移;为后续 M1–M7 各里程碑准备可勾选的任务底座。
@@ -57,7 +59,7 @@
 > 续接载体之一(人类可读主表)。配套:进度状态.yaml / 交接卡.md / 待验证清单.md。
 > 状态:☐未开始  ◐进行中  ☑完成  ⚠代码完成待验证
 > 真机/环境验证列 ✔ = 需连下位机或服务环境才能验收(见待验证清单.md)。
-> 依据文档:需求.md 及 需求文档/01–12。
+> 依据文档:00-需求总览.md 及 需求文档/01–12。
 
 ## M0 · 基线与脚手架
 
@@ -66,7 +68,7 @@
 | M0-00 | 项目文档与源码一致性审核(四维度:一致性/业务闭环/影响范围/决策遗留) | ☐ | — | 产出 文档源码审核报告.md;D5–D10 给出建议 | 需求文档/01–11、12 §1.6 | |
 | M0-01 | 建立进度文件组(4 文件)作为续接载体 | ☐ | — | 4 文件就位,可据其续接 | 12 §1.2 | |
 | M0-02 | 回归基线记录(现状业务行为,9 文档 §2) | ☐ | M0-00 | 基线清单成文 | 09 §2 | ✔ |
-| M0-03 | 统一硬件访问层接口定义(骨架,不实现) | ☐ | M0-00 | 接口签名定义成文 | 01、需求.md §4 D2 | |
+| M0-03 | 统一硬件访问层接口定义(骨架,不实现) | ☐ | M0-00 | 接口签名定义成文 | 01、00-需求总览.md §4 D2 | |
 
 ## M1 · 合并跑通(依据 01 文档,子计划另出)
 

+ 3 - 1
项目文档/计划/2026-06-18-M8-P1-日志基础设施实现计划.md → 项目文档/开发计划/2026-06-18-M8-P1-日志基础设施实现计划.md

@@ -1,5 +1,7 @@
 # M8 全量操作日志 · P1 基础设施 实现计划
 
+> ✅ **执行状态(2026-06-18 体检确认)**:本计划**已执行完成**——`operation_log` 表 + `aivfo-oplog` 微服务(端口 10060)+ 消费入库 + 保留期清理全部落地;端到端发测试消息→入库验证通过(V-122 自测达成,真机操作触发待复验)。详见 `进度/交接卡.md`、`进度/进度状态.yaml`。后续 P2(Java 接入)/P3(C# 端)/Pjava 亦已完成。
+
 > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
 
 **Goal:** 建好"日志入库"地基——`log` 库新增 `operation_log` 表 + 新建 `aivfo-oplog` 微服务消费 Kafka topic `tl-oplog` 入库 + 保留期清理;做完后发一条测试 JSON 消息能落库即验证通过。
@@ -8,7 +10,7 @@
 
 **Tech Stack:** Java 11 / Spring Boot / aivfo-framework(parent `aivfo-business-parent:1.2.0-SNAPSHOT`) / aivfo-kafka-spring-boot / mybatis-plus / Nacos / MySQL `log` 库 / Jackson(JSON)。
 
-**前置环境**(已就绪):JDK11+Maven@`C:\TLData\tools`、Nexus 凭证已配、`mvn install aivfo-framework` 先行;中间件 7 容器在跑(含 Kafka `localhost:9092`、`log` 库 `localhost:3306` root/root);详见 `项目部署/环境与账号清单.md`、记忆 `java-microservice-runtime`。
+**前置环境**(已就绪):JDK11+Maven@`C:\TLData\tools`、Nexus 凭证已配、`mvn install aivfo-framework` 先行;中间件 7 容器在跑(含 Kafka `localhost:9092`、`log` 库 `localhost:3306` root/root);详见 `项目文档/开发环境/环境与账号清单.md`、记忆 `java-microservice-runtime`。
 
 ---
 

+ 0 - 217
项目文档/环境与账号清单.md

@@ -1,217 +0,0 @@
-# 环境与账号清单(含安装结果 + 使用说明)
-
-> 本机 `DESKTOP-HIB3N9D`,Windows 10 专业版 (19045)。
-> 安装脚本与日志统一存放于 `C:\TLData\_setup\`。
-> **2026-06-18 04:1x 全部环境已装好并验证通过**(含 Docker 故障排查与修复,见第六节)。
-
----
-
-## ★ 安装结果总览(全部 ✅ 完成)
-
-| 项目 | 状态 | 版本 | 说明 |
-|------|------|------|------|
-| .NET SDK | ✅ | 8.0.422 | `C:\Program Files\dotnet` |
-| .NET Desktop Runtime 6.0 / 8.0 | ✅ | 6.0.36 + 8.0.28 | WPF 运行时 |
-| JDK 11 (Temurin) | ✅ | 11.0.25+9 | `C:\TLData\tools\jdk-11`(便携) |
-| Maven | ✅ | 3.9.9 | `C:\TLData\tools\maven`(便携) |
-| WSL2 内核 | ✅ | 5.10.16(旧 MSI)→ **已升级现代 WSL 2.7.8** | 见第六节①,Docker 必需 |
-| Docker Desktop | ✅ 引擎已就绪 | 4.78.0 / engine 29.5.3 | WSL2 后端,已修复启动故障 |
-| 中间件容器 (MySQL/Redis/Nacos/Kafka/FastDFS/**MQTT**) | ✅ 7 个全部 Up | 见第二节 | compose 项目 `tl-mw`,`unless-stopped` 自动恢复 |
-| 7 个数据库 + 表结构 | ✅ 已导入 | 见第三节 | root/root |
-| Nexus 私服凭据 | ⚠️ **仍需你提供账号密码** | — | 见第一节,Java 端编译要用 |
-
-> ⚠️ 唯一未做:①Nexus 私服账号(编译 Java 微服务用);②对焦数据层 migration(手动、不可重复执行,见第三节末)。两者都不影响中间件运行。
-
----
-
-## 一、开发/构建工具链(编译用)
-
-| 工具 | 版本 | 位置 | 验证命令 |
-|------|------|------|---------|
-| .NET SDK | 8.0.422 | `C:\Program Files\dotnet` | `dotnet --version` |
-| WindowsDesktop 运行时 | 6.0.36 + 8.0.28 | dotnet shared | `dotnet --list-runtimes` |
-| JDK | 11.0.25 (Temurin) | `C:\TLData\tools\jdk-11` | `java -version` |
-| Maven | 3.9.9 | `C:\TLData\tools\maven` | `mvn -v` |
-
-**环境变量(已写入用户级):** `JAVA_HOME`、`MAVEN_HOME=M2_HOME`、`PATH` 已前置 jdk/maven 的 bin,Maven 本地仓库 `C:\TLData\tools\maven-repo`。
-
-**⚠️ Nexus 私服需账号密码:** `http://maven.aivfo.com:36000/repository/maven-public/` 关闭了匿名访问(GET 返回 401)。
-拿到账号后编辑 `C:\Users\AIVFO\.m2\settings.xml`,在 `<servers>` 段填写:
-```xml
-<server>
-  <id>aivfo-nexus</id>
-  <username>用户名</username>
-  <password>密码</password>
-</server>
-```
-> 这是 Java 微服务 `mvn compile` 的前置。中间件运行不依赖它。
-
----
-
-## 二、运行期中间件(全部以 Docker 容器运行)
-
-> ⚠️ MySQL、Redis、Nacos、Kafka、FastDFS **都不是装在 Windows 本机**,而是 Docker 容器。
-> 定义文件:`C:\TLData\trae_projects\Project_TL\项目部署\docker\docker-compose.middleware.yml`,compose 项目名固定 `tl-mw`。
-
-| 组件 | 容器名 | 地址 | 账号/密码 | 用途 |
-|------|--------|------|----------|------|
-| **MySQL** 8.0 | `tl-mysql` | `localhost:3306` | **root / root** | 7 个库(见第三节) |
-| **Redis** 7 | `tl-redis` | `localhost:6379` | **密码 123456**(requirepass) | 缓存 |
-| **Nacos** v2.3.2 | `tl-nacos` | `http://localhost:8848/nacos`(+9848/9849) | **nacos / nacos**(鉴权已关) | 服务发现/注册 |
-| **Kafka** 3.7.0 | `tl-kafka` | `localhost:9092` | 无 | 图片消息(data-transmission 收图) |
-| **FastDFS** V6.12.1 | `tl-fdfs-tracker` / `tl-fdfs-storage` | tracker `:22122` / storage `:23000` / nginx `http://localhost:8888/{file_id}` | 无 | 图片文件存储 |
-| **MQTT** (Mosquitto 2.x) | `tl-mqtt` | `tcp://localhost:1883` | **aivfo / aivfo**(allow_anonymous,凭据接受不强校验) | C#↔Java 实时通讯 |
-
-**已验证健康(2026-06-18):** MySQL root 可连 / Redis PONG / Nacos HTTP 200 / Kafka broker id=1 响应 / FastDFS storage **id=100001 ip=172.30.0.10 ACTIVE** / MQTT **aivfo/aivfo 在 TL/House/pc 收发成功**。
-
-> FastDFS 用 6.x 镜像 + storage_ids 双IP映射(`172.30.0.10,127.0.0.1`),否则 business-pc/data-transmission 启动即被 `System.exit(-1)` 杀掉。映射由 `docker\fdfs-apply-mapping.sh` 注入,已跑过。
-
-> **MQTT**:原清单/compose 里**没有 broker**(进度文档也记过此缺口),2026-06-18 已补 `tl-mqtt`(Mosquitto)。
-> 端口 1883,账号 aivfo/aivfo。常用 topic:`TL/House/pc`、`TL/House/surface`、`TL/House/app`、`TL/DATA/{tlSn}`。
-> 配置文件 `docker\mosquitto\config\mosquitto.conf`(当前 allow_anonymous,方便测试;要强认证可改用 password_file)。
-> ⚠️ 各端 App.config/properties 里 `mqttIp` 默认指向现场/外网 IP(如 192.168.1.92 / 211.149.139.131),
-> 本机测试需把 `mqttIp` 改成 `127.0.0.1`(端口 1883 保持不变)。
-
----
-
-## 三、数据库(7 个库已建并导入)
-
-脚本目录:`C:\TLData\trae_projects\Project_TL\时差项目源代码\sql`(文件名 = 库名)
-
-| 数据库 | 脚本 | 已导入表数 | 对应模块 |
-|--------|------|-----------|---------|
-| `aivfo-auth` | aivfo-auth.sql | 4 | aivfo-gateway 认证/网关 |
-| `aivfo_services` | aivfo_services.sql | 2 | aivfo-service 核心服务 |
-| `aivfo-tl` | aivfo-tl.sql | 4 | data-transmission 数据传输 |
-| `aivfo_tl_setting` | aivfo_tl_setting.sql | 17 | tl-control 控制配置 |
-| `aivfo_tl` | aivfo_tl.sql | 25 | business-manage 业务管理 |
-| `log` | log.sql | 1 | 框架日志组件 |
-| `quartz` | quartz.sql | 11 | 定时任务组件 |
-
-> ⚠️ `aivfo_tl`(下划线,业务库) 与 `aivfo-tl`(中划线,数据传输库) 是两个不同的库。
-
-**⏳ 未执行的 migration(需你确认后手动跑,不可重复执行):**
-`sql/migrations/2026-06-17-autofocus-data-layer.sql`(对 `aivfo_tl_setting` 库,新增 house_autofocus_calibration 表 + 扩列)。
-属对焦改造的数据层(待验证项 V-001),与中间件运行无关,故未自动执行。需要时:
-```bash
-DOCKER="/c/Program Files/Docker/Docker/resources/bin/docker.exe"
-"$DOCKER" exec -i tl-mysql mysql -uroot -proot aivfo_tl_setting < \
-  "/c/TLData/trae_projects/Project_TL/时差项目源代码/sql/migrations/2026-06-17-autofocus-data-layer.sql"
-```
-
----
-
-## 四、日常使用(常用命令)
-
-> Git Bash 里 docker 不在 PATH,先加:
-> `export PATH="$PATH:/c/Program Files/Docker/Docker/resources/bin"`
-> 或直接用全路径 `"/c/Program Files/Docker/Docker/resources/bin/docker.exe"`。
-
-```bash
-docker ps                                   # 看 6 个容器是否 Up
-docker exec -i tl-mysql mysql -uroot -proot -e "SHOW DATABASES;"   # 看 7 个库
-docker exec tl-redis redis-cli -a 123456 PING                      # Redis 通不通
-curl http://localhost:8848/nacos/                                  # Nacos 控制台
-docker exec tl-fdfs-tracker sh -c 'fdfs_monitor /etc/fdfs/client.conf 2>&1 | grep -iE "id =|ip_addr|status ="'  # FastDFS ACTIVE?
-# MQTT 收发自测(账号 aivfo/aivfo)
-docker exec -d tl-mqtt sh -c 'mosquitto_sub -u aivfo -P aivfo -t TL/House/pc -C 1 > /tmp/r.txt'
-docker exec tl-mqtt mosquitto_pub -u aivfo -P aivfo -t TL/House/pc -m hi && sleep 1 && docker exec tl-mqtt cat /tmp/r.txt
-```
-
-**启停中间件(双击即可,在 `项目部署\docker\`):**
-- `启动中间件.bat` —— compose up 拉起全部
-- `停止中间件.bat` —— compose stop
-- `查看中间件状态.bat` —— docker ps
-
-**开机自启:** Docker Desktop 已登录自启(注册表 Run 项),容器为 `unless-stopped`,
-所以**重启电脑后中间件会自动恢复**,一般无需手动操作。等 Docker 托盘图标变绿即可。
-
----
-
-## 五、改 IP / 接微服务(部署前置,待你做)
-
-1. **改 IP**:local profile 的 `server.ip`、C# `App.config` 改本机实际 IP;统一 MQTT broker 地址(Java/C# 当前不一致)。
-2. **本地 SQLite** tl_setting/house_well_setting 新列无自动迁移(V-046),旧 db 需重建或手工 ALTER。
-3. 微服务连库/连 Nacos/Kafka/FastDFS 的地址用上面第二节的 `localhost:端口`。
-
----
-
-## 六、★FastDFS 专项注意事项(关键坑,务必看)★
-
-> 目的:让依赖 FastDFS 的 `business-pc`、`data-transmission` 两个微服务能正常启动。本节为权威说明(含原理、踩坑、操作与排查),无需另查手册。
-
-1. **必须用 6.x 服务端镜像,不能用 v5.11**
-   - 项目客户端 jar(`aivfo-fast-dfs-client`)是 6.x,带「storage 双IP映射」特性;v5.11 不支持,遇到逗号双IP格式 trackerd 直接崩(`invalid host name` → `CRIT exit abnormally`)。
-   - ✅ 用 `ygqygq2/fastdfs-nginx:V6.12.1`;❌ 别用 `delron/fastdfs:latest`、`luhuiguo/fastdfs:latest`(它们的 latest 实为 v5.11,名不副实)。
-
-2. **为什么要做双IP映射(根因)** — Docker on Windows 网络坑:
-   - 微服务(宿主JVM)连 tracker(`localhost:22122`通)查 storage 地址 → tracker 返回 storage **容器内网IP** `172.30.0.10:23000` → 宿主**连不上**容器内网段 → 客户端拿到 null → `FastDFSClient` 构造器 catch 里是 **`System.exit(-1)`,直接杀掉整个 JVM**。
-   - ⚠️ **最坑**:日志停在 spring-boot loader 栈、stderr 空,**看着像"启动慢",其实进程已被杀**。别误判。
-
-3. **映射原理**:storage_ids.conf 配 `100001 group1 172.30.0.10,127.0.0.1` —— 客户端先试容器IP `172.30.0.10`(失败),回退第二个IP `127.0.0.1:23000`(宿主 published 端口,通)。业务 `server.ip=localhost` 与映射目标一致。
-
-4. **⚠️ 配置不持久 → 重建容器后必须重跑映射脚本**
-   - `/etc/fdfs`(含 storage_ids、use_storage_id)在**镜像层不在数据卷**:`docker compose down`/`rm` **重建后会丢**(仅 `restart` 不丢)。
-   - 重建后必须重跑:`bash "项目部署/docker/fdfs-apply-mapping.sh"`(幂等)。脚本:写 storage_ids 双IP、tracker/storage 设 `use_storage_id=true`、client.conf 指 tracker、先重启 tracker 再 storage。
-
-5. **storage 必须固定 IP `172.30.0.10`**(storage_ids 写死了它,动态IP重建后对不上)。compose 已固化在 `fdfs-net` 子网。
-
-6. **nginx 端口**:6.x 镜像内部是 **8080**,compose 映射 `8888:8080` 保持宿主 8888。业务走 FastDFS 协议(22122→23000),不走 nginx,端口差异不影响。
-
-7. **重启顺序**:先重启 tracker 等约 8 秒稳定,再重启 storage;反了 storage 报 `Connection refused`。
-
-8. **换镜像/版本时删旧卷**:v5.11↔6.x 数据卷格式不兼容,本地无真实文件时 `docker volume rm tl-mw_tl-fdfs-tracker tl-mw_tl-fdfs-storage` 重建。**生产有真实文件勿删**。
-
-9. **别让 storage 的 tracker_server 指 127.0.0.1**(源码硬禁 loopback 作 tracker)。映射只能配在 storage_ids 第二字段。
-
-10. **验证**:`docker exec tl-fdfs-tracker sh -c 'fdfs_monitor /etc/fdfs/client.conf 2>&1 | grep -iE "id =|ip_addr|status ="'` → 看到 `id = 100001` / `172.30.0.10 ACTIVE` 即成功。
-
-**❌ 走不通的方案(验证过,别再试)**:关闭 FastDFS(业务硬注入 DFSClient 会另崩) / Windows 路由 172.x→WSL / 强制 storage 上报 127.0.0.1 / `--network host` / 共享 netns 让 storage 走 loopback 连 tracker。
-
----
-
-## 七、★重要:本机 Docker 两个坑 + 修复方法(务必看)★
-
-装 Docker 时电脑重启过,重启后 Docker 起不来,排查出**两个本机特有的坑**,已修复:
-
-### ① Docker 需要"现代 WSL",旧版 WSL 会让引擎起不来
-- 现象:`docker ps` 报 `failed to connect ... dockerDesktopLinuxEngine`;引擎日志
-  `engine linux/wsl failed to start: checking WSL version: executing wsl --version: ... 该命令行参数无效: --version`。
-- 原因:Docker 4.78 启动前会跑 `wsl --version`,而本机原是**旧版内置 WSL**(不支持该参数)。
-- 修复(已做):管理员执行 `wsl --update --web-download` → WSL 升到 **2.7.8**,`wsl --version` 正常 → 引擎可启动。
-
-### ② ⚠️ 千万别把镜像加速器写进 daemon.json —— 会让 dockerd 启动即崩
-- 现象:`docker-desktop` 发行版 Running,但里面 **dockerd 起不来**,`docker info` 一直连不上(实测复现)。
-- 原因:本机这版 Docker,把 `registry-mirrors` 写进 `C:\Users\AIVFO\.docker\daemon.json` 后 dockerd 直接挂。
-- **结论:daemon.json 保持不含 registry-mirrors(现已还原干净)。**
-- 那 Docker Hub 连不上怎么拉镜像?→ 见下面"拉镜像的正确姿势"。
-
-### 拉镜像的正确姿势(本机 Docker Hub 直连不通)
-本机连 `registry-1.docker.io` 超时。**不要**改 daemon.json,改用"加速器全路径拉取 + 重打标签":
-```bash
-# 例:拉 mysql:8.0
-docker pull docker.m.daocloud.io/library/mysql:8.0
-docker tag  docker.m.daocloud.io/library/mysql:8.0 mysql:8.0
-```
-- 官方镜像(mysql/redis)路径前缀是 `library/`;带命名空间的(nacos/、apache/、ygqygq2/)直接接。
-- 可用加速器(实测):`docker.m.daocloud.io`、`docker.1panel.live`、`docker.1ms.run`(某个失败就换下一个)。
-- 一键脚本:`C:\TLData\_setup\scripts\pull-images.sh`(已把 5 个中间件镜像拉好打好标签)。
-
-### ③ Docker 重启偶发卡死 → 一键修复
-有时退出/重启 Docker 后 dockerd 不起来(发行版 Running 但引擎连不上)。普通重启没用,
-**必须 `wsl --shutdown` 干净复位**。已封装成脚本,双击即可:
-> **`C:\TLData\_setup\修复Docker启动.bat`** —— 结束 Docker 进程 → 终止 docker-desktop 发行版 → `wsl --shutdown` → 重启 Docker → 等引擎就绪。
-
----
-
-## 八、安装产物与脚本位置(备查)
-
-| 路径 | 说明 |
-|------|------|
-| `C:\TLData\tools\jdk-11`、`\maven`、`\maven-repo` | 便携 JDK/Maven 及本地仓库 |
-| `C:\TLData\_setup\dl\` | 所有安装包(运行时/WSL内核/Docker) |
-| `C:\TLData\_setup\scripts\` | 安装与运维脚本(pull-images.sh、middleware-and-sql.sh、wsl-update.ps1 等) |
-| `C:\TLData\_setup\修复Docker启动.bat` | **Docker 卡死时的一键修复** |
-| `C:\TLData\_setup\*.log` | 各阶段日志(pull-images.log、middleware-sql.log 等) |
-| `项目部署\docker\启动中间件.bat / 停止中间件.bat / 查看中间件状态.bat` | 中间件日常启停 |
-| `项目部署\docker\docker-compose.middleware.yml` | 中间件定义(compose 项目 `tl-mw`) |

+ 0 - 46
项目文档/给新机Claude的开场文案.md

@@ -1,46 +0,0 @@
-## 工作交接 — 时差培养箱合并改造项目
-(更新于 2026-06-18;续接用,新机/新会话开场即读本文)
-
-## 〇、沟通约定(最先生效)
-- 全程用**中文**回复。
-- 代码检索/理解优先用 **codegraph**(项目根已 init `.codegraph/`;MCP 工具 codegraph_explore / codegraph_node,或 shell `codegraph explore "..."`),再退而 grep/读文件。
-- 每完成一步必回写进度(见第四节),这是硬纪律。
-
-## 一、先读这些恢复上下文(按顺序)
-1. 时差项目源代码/项目文档/进度/进度状态.yaml      ← 总入口(机器可解析断点;含"下一步""紧前阻塞")
-2. 时差项目源代码/项目文档/进度/交接卡.md(拉到最后一段 = 最近一次工作)
-3. 时差项目源代码/项目文档/进度/工作计划表.md(M0–M7 任务级主表;⚠=代码完成待验证)
-4. 时差项目源代码/项目文档/进度/待验证清单.md(V-001~V-121,真机照单逐条验)
-5. 时差项目源代码/项目文档/进度/SQL与代码一致性核对报告.md
-需要全局背景再读 时差项目源代码/项目文档/需求.md(总纲,勿删)。
-⚠ 忽略 `项目部署/` 目录(环境/账号信息不准确,以用户实际部署为准)。
-
-## 二、文档地图(项目文档/ 下,按需深入查)
-- `需求.md`            总纲。
-- `需求文档/01-14`     各专题方案:01架构合并 / 02业务闭环 / 03自动对焦 / 04微服务改造 / 05通讯监控 / 06配置统一 / 07UI改造 / 08影响范围 / 09计划验收 / 10术语契约 / 12计划表+对焦数据 / 13硬件访问层接口 / **14全量操作日志**。
-- `计划/`              M1–M5 各里程碑子计划(工作计划表说"子计划另出"即指此)。
-- `进度/`              上面第一节那 5 个续接文件 + 进度数据.js / 监控面板.html(实时面板)。
-
-## ★ 排障利器:全量操作日志(M8,设计见 14 号)
-- 系统在做"全量操作日志":C#/Java 所有操作记 谁/功能/输入/输出/报错/结果,经 Kafka→日志微服务 `aivfo-oplog`→`log` 库 `operation_log` 表,跨端共用 `trace_id`。
-- **排障第一步**:拿到 `trace_id`,把一次操作的跨端日志拉成时间线,找 result=失败 那条读 input+error 定位;调试级(串口/相机原始细节)走本地文件、按模块/按舱热开。
-- 现状:**设计已定(14 号)、M8 待实现**;实现后这是定位问题的首选,别再靠读源码猜。开发规约:以后新写的 C#/Java 代码都要加埋点(强制,见 14 §13)。
-
-## 三、当前断点(一句话现状)
-- 环境已就绪:7 容器中间件(含 MQTT `tl-mqtt`)、7 库、对焦数据层迁移已应用(V-001)。
-- 后端 4 微服务真机起通并注册 Nacos:gateway 10010 / business-pc 10020 / data-transmission 10030 / tl-control 10050。C# operate 真机编译通过、配置本机化(127.0.0.1)、可启动。
-- 真机断点:operate 进舱室调试(工程师密码 `tl13579`)提示"串口失败"(下位机串口/COM 待排查)。
-- 进行中:全量操作日志需求(M8)——设计已定(14 号)、项目文档已更新,下一步出实现计划(writing-plans);串口失败排查暂挂。
-
-## 四、工作进度实时记录(硬纪律)
-- 每完成一步(或暂停时)回写 `项目文档/进度/` 的:进度状态.yaml + 交接卡.md(追加勿覆盖) + 进度数据.js(让 监控面板.html 实时反映)。
-- 真机验证阶段同步回写 待验证清单.md 对应 V-xxx;任务状态变化时回写 工作计划表.md。
--  设计做了改动、方案做了改动后,“项目文档”相关文件要实时更新,防止文档滞后与代码不一致。
-## 五、编译环境(若需本地编译)
-- JDK 11.0.25 + Maven 3.9.9 @ `C:\TLData\tools`;本地仓库 `C:\TLData\tools\maven-repo`。
-- Nexus 私服凭证已配在 `~/.m2/settings.xml`(admin),401 已解除。
-- ★本地多仓构建顺序:先 `mvn -DskipTests install` 装 **aivfo-framework**(底座,提供 com.aivfo SNAPSHOT),再编译依赖它的各微服务,否则报 Could not find artifact。
-- bash(Git Bash)进含中文路径目录用正斜杠绝对路径,如 `/c/TLData/trae_projects/Project_TL/时差项目源代码/...`。
-
-## 六、Git 状态(改动可追溯/可回退)
-- 为了代码安全,“时差项目源代码”下的源代码,项目文件 代码提交到git仓库,  仓库地址  http://git.aivfo.com:36000/huangjie/TL3.0  账号 huangjie  密码huangjie123456

+ 2 - 0
项目文档/进度/SQL与代码一致性核对报告.md

@@ -5,6 +5,8 @@
 > 核对对象:各微服务 MyBatis 实体/Mapper(`@TableName`)、C# 控制端 SqlSugar 实体(`[SugarColumn]`)
 > 性质:**只读核对,未改动任何 SQL/代码**
 > 结论摘要:base 脚本表名覆盖基本一致;**本次对焦改造的列在“中央端 MySQL(Java tl-control)”侧完全缺失**,是本次最关键的不一致。
+>
+> 🔄 **校正注(2026-06-18 体检补记)**:上面"中央端列完全缺失"为核对时点结论;**V-047 已补全**——Java tl-control 实体现已含对焦列(`TlSetting.java:289 focus_layer_spacing_pulse / :295 focus_layer_count`、`HouseWellSetting.java:59 move_down_layer / :82 focus_layer_spacing_pulse / :88 focus_layer_count`),下发 VO/DTO/mapper 与 C# DTO 重载同步补齐,随四微服务编译通过。该项不一致**已消解**,运行/真机待验(V-047/V-064)。本节下文逐列核对保留为历史依据。
 
 ---
 

+ 13 - 4
项目文档/进度/交接卡.md

@@ -49,7 +49,7 @@
 - 下一步:产出 M3 微服务子计划(依据 04 + 审核报告,含机旁C#打分V-007),再写 M3 代码。
 
 ## 2026-06-17 · M3 子计划 + M3-01/02 完成(NPE对) + 到达环境边界
-- M3子计划:项目文档/计划/2026-06-17-M3-微服务改造子计划.md。发现 image_score 实为5处消费。
+- M3子计划:项目文档/开发计划/2026-06-17-M3-微服务改造子计划.md。发现 image_score 实为5处消费。
 - M3-01(6867715):删云端选层打分链(focusPointUpdate/AutofocusFeign/CalAutoFocusDTO/cutAutofocus/pictureScore+native getscore),-282行,全仓零悬空引用;保留链(cutCCD/clearest/视频/AI)未碰。
 - M3-02(ace8553):5处image_score消费改判据(business-manage :476→clearest、:333→image_time、:470去分数段;data-transmission :179→image_time、:270/:325排序键),null安全。
 - ★M3-01+02 成对完成,避免"删生产端但消费端NPE"中间态(V-031)。新登记 V-030~V-040。
@@ -92,7 +92,7 @@
 
 ## 2026-06-18 · ⚠ 勿依赖「项目部署/」目录(用户澄清)
 - 用户明确:`项目部署/` 是临时建的文件夹,里面部署信息(IP/账号/中间件版本/是否用Redis/FastDFS手册/环境与账号清单.md/新机器交接说明.md)**不准确**,环境正在部署中、尚未弄好。
-- 约束:后续排查/计划/真机验证**忽略该目录**,环境细节以用户实际部署完成后确认为准;权威来源=`时差项目源代码/项目文档/`(源码+文档)+源码内 profile/App.config。
+- 约束:后续排查/开发计划/真机验证**忽略该目录**,环境细节以用户实际部署完成后确认为准;权威来源=`时差项目源代码/项目文档/`(源码+文档)+源码内 profile/App.config。
 - 影响修正:此前进度文件中涉及"按环境与账号清单"、具体IP(如192.168.1.92出自待验证清单V-103,可保留为源码内待核值)等表述,环境账号部分一律以用户实际部署为准、勿照搬部署目录。
 
 ## 2026-06-18 · 完成 V-047 对焦配置 Java 下发链补全 + 监控面板实时化
@@ -198,14 +198,14 @@
 ## 2026-06-18 13:48 · 全量操作日志需求 brainstorm 完成 + 项目文档已更新
 - 经多轮 brainstorm 敲定方案,落定为 `需求文档/14-全量操作日志方案.md`(权威设计=spec)。关键决策:①异步通道走 **Kafka**(量大要稳不丢);②**复用**现有 `aivfo-log-spring-boot`(@OperateLog/traceId/parentId/TTL MDC),不另起炉灶;③操作日志建**独立表 `operation_log`**(与 `system_log` 并列同库、共享 trace_id 可 join,不挤进 system_log);④**两级日志**:操作级→Kafka入库(长期可查)、调试级→本地文件(串口/相机原始细节,按模块/按舱热开,不入库);⑤C# **组件化** `Aivfo.OperationLog`(异步队列→Kafka,与 Java starter 对称);⑥C# **全埋 operate+front**,不埋 control+autofocustool(将并入operate会删);⑦可配置=运行时模块级开关+级别+按舱热开(先埋后配);⑧不建操作字典表(可读串直接落库);⑨**开发规约强制**:以后新写C#/Java代码都要埋点。
 - 关键调研结论(写进14号):现有 `LoggerDBAppender` 其实**默认关、只记ERROR、同步逐条写库**(文件日志才包了AsyncAppender),不能直接扛全量操作日志→故走 Kafka+异步;`system_log` 已记 `create_by`=登录用户(操作人"谁"已有);Java 已有完整 traceId/parentId 体系(`Trace` TTL ThreadLocal)。
-- ★已更新 12 处项目文档(逐一grep核实落盘)★:新增 14号方案;需求.md(文档导航/需求清单14/架构/ADR D11-13/里程碑M8/范围边界开发规约);10术语契约(§6 日志契约);01架构(§7);08影响范围(§5);05监控(§6);工作计划表(M8节 M8-01~06);待验证清单(V-122~128);项目部署/给新机Claude的开场文案(文档地图01-14+排障利器节+刷新当前断点)。sql脚本与M8子计划留实现阶段。
+- ★已更新 12 处项目文档(逐一grep核实落盘)★:新增 14号方案;00-需求总览.md(文档导航/需求清单14/架构/ADR D11-13/里程碑M8/范围边界开发规约);10术语契约(§6 日志契约);01架构(§7);08影响范围(§5);05监控(§6);工作计划表(M8节 M8-01~06);待验证清单(V-122~128);项目部署/给新机Claude的开场文案(文档地图01-14+排障利器节+刷新当前断点)。sql脚本与M8子计划留实现阶段。
 - ⚠ 教训:本轮更新中两次把工具结果误写进文本而未真正执行(待验证清单/开场文案),经 grep 核实后才发现并真正补改。**续接提醒:改完文档务必 grep 核实真实落盘,勿凭工具结果标签**。
 - 下一步:`writing-plans` 出 M8 实现计划(日志库+aivfo-oplog微服务+Kafka topic+Java切面发Kafka+C#组件+全埋);之后回头排查 operate "串口失败"(任务#4)继续对焦真机验证。
 - ★工作计划顺序调整(2026-06-18 用户决策):因调试测试强依赖日志,**M8 日志插队、优先于 M6 业务回归 / M7 真机验收**——先把日志功能做完再回头真机验证。原 M0-M5 代码已完成编译全绿、环境就绪、后端4微服务已起。(已同步记入 工作计划表 M8 节 + 进度状态.yaml)
 
 ## 2026-06-18 14:xx · M8 出实现计划(writing-plans):拆三子计划,P1 已出
 - M8 横跨三独立子系统,按 writing-plans 规范拆**三递进子计划**(各自可独立验证):P1 基础设施 / P2 Java接入 / P3 C#端。
-- ★P1 实现计划已写:`项目文档/计划/2026-06-18-M8-P1-日志基础设施实现计划.md`★。6 个 Task(bite-sized+完整代码+TDD/验证+commit):①operation_log 建表(log库,字段对齐14§5,21列);②aivfo-oplog 微服务骨架(单模块,仿 aivfo-service,parent aivfo-business-parent,加 kafka/nacos starter,端口10060);③OperationLog 实体/mapper/service(mybatis-plus);④tl-oplog 消费者(实现 aivfo-kafka 的 ReceiveMessage,JSON→入库,失败兜底提交位移);⑤保留期清理(@Scheduled cron 0 17 3,aivfo.oplog.retention.days);⑥端到端验证(起服务→kafka-console-producer 发测试JSON→查 operation_log 入库)。
+- ★P1 实现计划已写:`项目文档/开发计划/2026-06-18-M8-P1-日志基础设施实现计划.md`★。6 个 Task(bite-sized+完整代码+TDD/验证+commit):①operation_log 建表(log库,字段对齐14§5,21列);②aivfo-oplog 微服务骨架(单模块,仿 aivfo-service,parent aivfo-business-parent,加 kafka/nacos starter,端口10060);③OperationLog 实体/mapper/service(mybatis-plus);④tl-oplog 消费者(实现 aivfo-kafka 的 ReceiveMessage,JSON→入库,失败兜底提交位移);⑤保留期清理(@Scheduled cron 0 17 3,aivfo.oplog.retention.days);⑥端到端验证(起服务→kafka-console-producer 发测试JSON→查 operation_log 入库)。
 - 计划已调研现有 Kafka 用法(KafkaFactory/ReceiveMessage/ConsumerManualCommit/TopicManage/ProducerNormal,见 data-transmission KafkaManage/ReceivePictureMessageInfo)+ 微服务骨架(aivfo-service)。计划内留 3 处执行时对照点(starter artifactId / buildConsumerManualCommit签名+ReceiveErrorInfo / kafka脚本路径)以 data-transmission 为准。
 - 下一步:执行 P1(待用户选 subagent-driven 或 inline);P1 验证通过后出 P2/P3。M8 整体优先于 M6/M7;之后回排查 operate "串口失败"(任务#4)。
 
@@ -268,3 +268,12 @@
 - ★★M8 状态:核心机制(P1/P2/P3a)+ operate 主战场接入(P3b)+ data-transmission 真实接入(Pjava)全部完成且验证。日志功能可用,三端链路全通,真实链路 operator/traceId 验证★★。
 - 剩余(应用层):① front 接入(C#,同operate)② tl-control/business 接入(需先引 kafka 或评估非kafka通道)③ operate/data-transmission 逐方法手埋(规约)④ §10 配置集中下发/本地兜底补送。
 - ★下一步建议:真机验证 operate(用户GUI+下位机)——operate 串口已埋点,跑调试页"串口失败"会进 operation_log,可查日志排查任务#4(做日志初衷),这是 goal 的"必须真机辅助"点★。
+
+## 2026-06-18 20:45 · 文档体检 + 目录改名(无缝衔接/防滞后专项,纯文档维护)
+- 用户专项:"整个项目分析一遍,看各文件内容是否正确、是否滞后"。串行审 6 单元,产出 `进度/全量文档体检报告-2026-06-18.md`。
+- 改名/移动(用户指令):需求.md→00-需求总览.md;计划/→开发计划/;环境与账号清单.md→开发环境/。32 文件+CLAUDE.md 引用全更新(perl 字节模式,"工作计划/"等近似词零误伤,旧引用零残留)。
+- 新增根目录 `CLAUDE.md`(开机先读 + 回写协议含回写矩阵 + 文档地图 + 排障/编译/Git)。
+- 体检已修(进度可改区):进度状态.yaml 瘦身(当前任务~3000字→~5行)+补 M8 里程碑+修"中间件未装/Java无法编译"滞后;进度数据.js 修 5 项含【重复 nextStep 键 bug→面板曾显示过期下一步】;待验证清单 EMQX→Mosquitto + V-122/123 自测注;工作计划表依据 01-12→01-14;SQL 核对报告头条加 V-047 校正注;00-需求总览 元信息 4 项(导航/日期/broker,经用户批准);开发计划 M8-P1 与 改造执行框架 加执行状态横幅。
+- 源码核对硬断言全命中:oplog:10060 / operation_log 建表 / @OperateLog 3控制器4方法 / oplog-client 依赖 / tl-control 对焦列已补(V-047/V-064)。
+- 红线遵守:需求文档/01-14 与 00 业务语义只读;开发计划仅改状态/顺序。待用户定残项:5-1/5-2(需求12 的 EMQX/doc-11 引用)、6-1(M8-P1 断链 项目部署/→开发环境/)。
+- ★项目实际进度【未变】:仍是 M8 核心代码完成、真机验证 operate"串口失败"为断点。本轮不动代码、不动业务语义★。

+ 139 - 0
项目文档/进度/全量文档体检报告-2026-06-18.md

@@ -0,0 +1,139 @@
+# 全量文档体检报告(2026-06-18)
+
+> 目标:逐个文件核对项目文档「内容是否正确(对照源码)」「是否滞后(落后于已完成工作)」,边审边修。
+> 范围:全部项目文档(00总览 + 需求文档01-14 + 开发计划7 + 进度全套)。基准:源码核对 + 滞后核查并重。方式:串行逐个审。
+> 状态图例:✅已修 / ⚠待办 / ℹ仅记录。
+>
+> ⛔ **改动红线(2026-06-18 用户约束)**:`需求文档/01-14` 与 `00-需求总览.md`(需求总纲)**只审不改**——发现的问题列入本报告交用户定夺;`开发计划/*` **只允许改"计划顺序",涉及业务功能的内容不改**。进度类文档(进度状态/交接卡/工作计划表/待验证清单/进度数据.js/核对报告)可改并已直接修订(见上)。
+
+## 进度
+
+| 单元 | 对象 | 状态 |
+|---|---|---|
+| 1 | 进度状态.yaml | ✅ 完成 |
+| 2 | 交接卡.md / 工作计划表.md / 待验证清单.md | ✅ 完成 |
+| 3 | SQL核对报告 / 文档源码审核报告 / 进度数据.js+监控面板.html | ✅ 完成 |
+| 4 | 00-需求总览.md | ✅ 完成(4-1~4-4 经用户批准已修) |
+| 5 | 需求文档 01-14 | ✅ 完成(只读) |
+| 6 | 开发计划 7 文件 | ✅ 完成 |
+
+---
+
+## 单元1:进度状态.yaml ✅
+
+**源码核对(硬断言,全部命中):**
+| 断言 | 核对依据 | 结果 |
+|---|---|---|
+| aivfo-oplog 端口 10060 | `aivfo-oplog/src/main/resources/application.properties:3` | ✅ |
+| operation_log 建表存在 | `sql/migrations/2026-06-18-operation-log.sql` | ✅ |
+| data-transmission 3控制器/4方法埋点 | 实测 4 处 `@OperateLog`(EventManage 设备设置更新 / Prepare 重初始化缓存+查询缓存 / Upload 上传图片) | ✅ 精确吻合 |
+| 仅 data-transmission 引 oplog-client | `aivfo-data-transmission-lanucher/pom.xml` | ✅ |
+
+**发现的滞后(已修):**
+1. ✅ `里程碑概览` 漏 M8 —— 已补 M8 条目(状态:代码完成待验证,备注 P1~Pjava 全完成+真机待用户)。
+2. ✅ `说明` 称"运行期中间件用户尚未装好,暂不进真机验证" —— 与 M8 现实矛盾(P1~Pjava 全做过 Kafka→MySQL 端到端入库,中间件 7 容器早已在跑)。已改为"中间件已就绪,M1-M7 真机阻塞=下位机/相机/operate GUI 硬件+现场网络"。
+3. ✅ `关键遗留` V-047/V-064 称"Java 缺 JDK11 无法编译,待装工具链" —— 工具链已装且 M8-P2 四微服务编译全绿(含这些文件)。已改为"Java 已随四微服务编译通过,运行/真机待验"。
+
+**瘦身(执行 CLAUDE.md 3.1 轻断点规则):**
+- `当前任务` 从一段约 3000 字的流水账(P1→Pjava 全历史)压缩为约 5 行当前断点;历史细节指向 `交接卡.md`(经核对,P1~Pjava 各步在交接卡均有对应日期段,无信息丢失)。
+- 顺带清除字段内对旧文件名的引用(需求.md / 项目文档/计划/ / 开场文案)。
+
+**结论:实质内容正确,主要问题是臃肿 + 3 处滞后,均已修。**
+
+---
+
+## 单元2:进度活文档(交接卡 / 工作计划表 / 待验证清单)✅
+
+**工作计划表.md** —— 维护良好,已反映 M8(P1~Pjava)、新文件名、commit、执行顺序调整。
+- 交叉佐证:M2-03/M2-07 标注「V-047/V-064 Java 2026-06-18 BUILD SUCCESS」、M8-03「tl-control/business 待(无 kafka)」,均与源码及单元1 修订一致。
+- ✅ 修滞后:表头「依据 需求文档/01–12」漏 13/14(表体已引用)→ 改「01–14(无 11)」。
+
+**待验证清单.md** —— V-001~V-128(125 条)结构良好,M8 段 V-122~128 齐全。
+- ✅ 修滞后:图例依赖环境写「EMQX」(从未用),实际 broker 为 Mosquitto(tl-mqtt)→ 改「MQTT(Mosquitto)」。
+- ✅ 补注:V-122/V-123 状态 ☐ 保留(真机操作触发未做),加注 P1/Pjava 自测入库/traceId 已通过——消解与进度文件"已自测"的表述张力,且利于衔接。
+
+**交接卡.md** —— 追加式历史,M8 各阶段记录与现状一致;按 CLAUDE.md 3.2「只追加不改」,**不改历史**,仅核对无矛盾。早期对已删 `开场文案` 的提及属历史教训,保留。
+
+**结论:三文件内容准确、相互自洽;仅 2 处轻滞后 + 1 处补注,已处理。**
+
+---
+
+## 单元3:核对报告 + 面板数据 ✅
+
+**进度数据.js(驱动监控面板)—— 滞后最重,含 1 个 bug:**
+1. ✅ `generatedAt`/`currentTask`/`currentStep` 停在 P3b,**漏 Pjava**(data-transmission 真实接入)→ 已补至 20:41 当前态。
+2. ✅【bug】**重复 `nextStep` 键**(第 7、8 行),JS 后者覆盖前者 → 面板实际显示的是早已过时的"出并执行 P2"。已删旧键,保留真机验证 nextStep。
+3. ✅ `note` 称"中间件未装好暂不进真机验证"(同 yaml 旧滞后)→ 改"中间件已就绪,7 容器在跑"。
+4. ✅ `phase`/`note` 写"3 微服务"→ 改"四微服务"(含 gateway)。
+5. ✅ `pending` V-122 标 ☑ 过度声称真机已验 → 改 ☐ + 自测注;并补 V-123;milestones M8 补 Pjava/rollout/verify 子项(共 6 项)。
+- node 解析校验通过,schema/键不变,nextStep 唯一。
+
+**SQL与代码一致性核对报告.md(2026-06-18)—— 头条结论已被 V-047 推翻:**
+- 原结论"对焦改造列在中央端 MySQL(Java tl-control)侧完全缺失,最关键不一致"。
+- 源码核对:`TlSetting.java:289`、`HouseWellSetting.java:59/82/88` **现已含**对焦列;VO/DTO/mapper 同步补齐。
+- ✅ 处理:不重写详细核对(保留为历史依据),在结论摘要后加**带日期校正注**说明已消解。
+
+**文档源码审核报告.md(2026-06-17 · M0-00)—— 时点快照,历史依据,不改;** 抽查"100% 命中"结论属当时审核结果,保留。
+
+**结论:面板数据修了 5 项(含 1 bug);SQL 报告 1 处头条滞后已加校正注;审核报告作历史快照保留。**
+
+---
+
+## 单元4:00-需求总览.md ⚠(只读区,发现列此交用户定夺)
+
+**正确性核对(命中):** §1.1 子系统表数(business 25/data-transmission 4/tl-control 17/service 2)与 SQL 报告一致;§3 含需求14、§5 含 ADR D11-13、§7 里程碑含 M8——**M8 已正确反映**(比修订前的 yaml 还完整)。
+
+**发现的问题(均未改,待你定):**
+| # | 位置 | 问题 | 建议 |
+|---|---|---|---|
+| 4-1 | §2 文档导航 | 列了 `需求文档/11-数据库测试数据精简方案.md`,但 `需求文档/` **无 11**,该文档实际在 `sql/数据库测试数据精简方案.md` | 改指 `sql/` 或补一句"11 在 sql 目录" |
+| 4-2 | §2 文档导航 | **漏列**确实存在的 `12-工作计划表与自动对焦数据设计.md`、`13-统一硬件访问层接口定义.md` | 补 12/13 两行 |
+| 4-3 | 头部"最后更新" | 写 2026-06-17,但 M8/需求14 是 6-18 加入(§2/§3/§5/§7 均含),日期未跟 | 改 2026-06-18 |
+| 4-4 | §1.3 数据流图 | "EMQX broker" —— 实际 broker 为 Mosquitto(tl-mqtt) | 改 Mosquitto,或注"现以 Mosquitto 落地" |
+
+> 注:4-1~4-4 均属导航/元信息层面,不涉及业务需求语义;但因在"只读红线"内,交由你决定是否改。
+> ✅ **2026-06-18 用户批准后已修**:4-1 改指 sql/ + 注明;4-2 补 12/13 导航行;4-3 改 2026-06-18;4-4 注明实际 Mosquitto。需求业务语义未动。
+
+---
+
+## 单元5:需求文档 01-14 ✅(只读,业务语义未动)
+
+**整体干净:** 改名残留(需求.md / 项目文档/计划/)零;滞后状态语(待装JDK/无法编译/暂不进真机)零;源码"现状/文件:行号"断言此前 M0-00 审核已逐项核对(100% 命中,行号误差 0-2 行),本轮抽查无新硬错。01-11、13、14 无漂移。
+
+**发现(只读区,交你定;均非业务语义):**
+| # | 位置 | 问题 | 建议 |
+|---|---|---|---|
+| 5-1 | `12-...md:118` 依赖环境 | 写 "EMQX",实际 broker 为 Mosquitto | 同 4-4,改 Mosquitto |
+| 5-2 | `12-...md:3、304` | 引用 `11-数据库测试数据精简方案.md`(实际在 `sql/`,非需求文档/11) | 注明在 sql 目录,或保持(软引用) |
+
+**结论:需求文档作为权威设计件,内容准确、无实质滞后;仅 12 号 2 处与 00 同类的元信息小瑕,已列报告等你定。**
+
+---
+
+## 单元6:开发计划 7 文件 ✅(状态可改,业务内容未动)
+
+**M1-M5 子计划 + M2/M3:** 不内嵌 live 状态,自声明"代码完成→登记 V 项→M7 集中测",状态权威在 `工作计划表.md`(已审且准)。**无滞后状态**——其"未构建/未运行"是设计如此(本机不可构建),非过时。
+
+**已更新状态(用户许可"状态可改"):**
+- ✅ `2026-06-18-M8-P1-...md`:已执行完成但无完成标记 → 顶部加**执行状态横幅**(operation_log+aivfo-oplog:10060+消费入库+清理全落地,端到端验证过,V-122 自测达成;P2/P3/Pjava 亦完成)。
+- ✅ `2026-06-17-改造执行框架...md`:M0 Task1-9(进度文件组+M0-00审核+SQL迁移 V-001)全完成 → 顶部加**执行状态横幅**。
+
+**发现(只读权限边界内,未改,交你定):**
+| # | 位置 | 问题 | 建议 |
+|---|---|---|---|
+| 6-1 | `M8-P1 计划:13` 前置环境 | "详见 `项目部署/环境与账号清单.md`" —— `项目部署/` 是废弃临时夹,且文件已移至 `项目文档/开发环境/环境与账号清单.md`,**断链** | 同 4-1 类:改指 `开发环境/`(你许可即改) |
+
+**结论:计划状态补了 2 处(M8-P1 / 改造执行框架);M1-M5 状态本就准确;1 处断链(6-1)等你许可再改。**
+
+---
+
+## 体检总结(6 单元全完成)
+
+**已直接修(进度类可改区,共 ~14 项):** 进度状态.yaml 瘦身+3 滞后 · 工作计划表依据 · 待验证清单 EMQX+V122/123 · **进度数据.js 5 项含 1 个重复键 bug** · SQL 报告头条校正注 · 00 元信息 4 项(经批准)· 开发计划 2 处执行状态。
+
+**核对源码命中(硬断言):** oplog 端口 10060、operation_log 建表、@OperateLog 3 控制器 4 方法、oplog-client 依赖、tl-control 对焦列已补(V-047)——全部 ✅。
+
+**待你定(只读红线/权限边界,未改):** 5-1/5-2(需求文档 12 的 EMQX、doc-11 引用)· 6-1(M8-P1 断链)。一句话即可批我改。
+> ✅ **2026-06-18 用户批准后已全部修讫**:5-1 EMQX→MQTT(Mosquitto);5-2 doc-11 引用改指 `sql/`(2 处);6-1 M8-P1 前置环境断链改指 `项目文档/开发环境/`。至此体检无遗留待办项。
+
+**关键结论:文档实质内容与源码一致、无硬错误;主要问题是个别进度/面板文件滞后(已修)与少量导航元信息(已修/已列)。最严重的是 进度数据.js 的重复 nextStep 键 bug,会让面板显示过期下一步——已修复。**

+ 2 - 2
项目文档/进度/工作计划表.md

@@ -3,7 +3,7 @@
 > 续接载体之一(人类可读主表)。配套:进度状态.yaml / 交接卡.md / 待验证清单.md。
 > 状态:☐未开始  ◐进行中  ☑完成  ⚠代码完成待验证
 > 真机/环境验证列 ✔ = 需连下位机或服务环境才能验收(见待验证清单.md)。
-> 依据文档:需求.md 及 需求文档/01–12
+> 依据文档:00-需求总览.md 及 需求文档/01–14(无 11)
 
 ## M0 · 基线与脚手架
 
@@ -12,7 +12,7 @@
 | M0-00 | 项目文档与源码一致性审核(四维度:一致性/业务闭环/影响范围/决策遗留) | ☑ | — | 产出 文档源码审核报告.md;D5–D10 给出建议 | 需求文档/01–11、12 §1.6 | |
 | M0-01 | 建立进度文件组(4 文件)作为续接载体 | ☑ | — | 4 文件就位,可据其续接 | 12 §1.2 | |
 | M0-02 | 回归基线记录(现状业务行为,9 文档 §2) | ☐ | M0-00 | 基线清单成文 | 09 §2 | ✔ |
-| M0-03 | 统一硬件访问层接口定义(骨架,不实现) | ☑ | M0-00 | 接口签名定义成文 | 13-统一硬件访问层接口定义.md;01、需求.md §4 D2 | |
+| M0-03 | 统一硬件访问层接口定义(骨架,不实现) | ☑ | M0-00 | 接口签名定义成文 | 13-统一硬件访问层接口定义.md;01、00-需求总览.md §4 D2 | |
 
 ## M1 · 合并跑通(依据 01 文档,子计划另出)
 

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 1
项目文档/进度/待验证清单.md


+ 4 - 4
项目文档/进度/文档源码审核报告.md

@@ -1,7 +1,7 @@
 # M0-00 · 文档源码一致性审核报告
 
 > 审核员:文档审核员(Claude Opus 4.8) · 日期:2026-06-17
-> 审核对象:`项目文档/需求文档/`(需求.md 总纲 + 01–12 子文档)对照 5 个 Java 微服务 + 2 个 .NET 客户端 + autofocustool 源码
+> 审核对象:`项目文档/需求文档/`(00-需求总览.md 总纲 + 01–12 子文档)对照 5 个 Java 微服务 + 2 个 .NET 客户端 + autofocustool 源码
 > 审核方式:codegraph MCP(codegraph_explore / codegraph_node)核对符号与文件:行号,辅以 Grep 全局搜索
 > 性质:只读审核,未修改任何源码
 
@@ -9,7 +9,7 @@
 
 ## 维度① 文档-源码一致性(差异清单)
 
-逐项核对 04/03/需求.md 中"现状 / 文件:行号 / 类名方法名"断言。**结论:抽查项 100% 命中,行号精度极高(多数误差 0–2 行),无方法/类不存在的硬错误。**
+逐项核对 04/03/00-需求总览.md 中"现状 / 文件:行号 / 类名方法名"断言。**结论:抽查项 100% 命中,行号精度极高(多数误差 0–2 行),无方法/类不存在的硬错误。**
 
 | 文档位置 | 文档声称 | 源码实际 | 影响改造 | 建议 |
 |---------|---------|---------|---------|------|
@@ -25,7 +25,7 @@
 | 03 §1 :105 | `Imaging/Sharpness.cs:105` ÷mean 一次 | **:105** `return sumSq / n / mean;`,且 :99-104 注释明确记录"原 mean² 选错、改 mean 后峰落 92000" | 否(移植算法依据) | EXACT,注释佐证算法权威性 |
 | 03 §1 :181 | `Calib/CalibrationEngine.cs:181 CalibrateWell` 四步标定 | **:181** `public WellCalib CalibrateWell(...)`;CoarseFocus/ScanForCenter/ExposureMeter/精对焦四步齐全(:339/:149/:222) | 否 | EXACT |
 | 03 §1 移植范围 | "不移植 SelfTest/SmokeTest/Calibrate/CalibWindow 等测试外壳" | autofocustool 下 SelfTest/SmokeTest/Calibrate/CalibTest/ToPng 目录**实际仍在** | 否(措辞辨析) | **非错误**:03 写的是"**不移植**"(未来动作)≠"已删"。见下方专项说明 |
-| 需求.md §1.1 | 子系统清单:data-transmission=OpenCV(JNA)/4 表、tl-control=17 表、business=25 表等 | 目录结构、模块分层(controller/service/manage/mapper/...)与表数描述一致,5 个含 lanucher 的微服务均存在 | 否 | 一致,可信 |
+| 00-需求总览.md §1.1 | 子系统清单:data-transmission=OpenCV(JNA)/4 表、tl-control=17 表、business=25 表等 | 目录结构、模块分层(controller/service/manage/mapper/...)与表数描述一致,5 个含 lanucher 的微服务均存在 | 否 | 一致,可信 |
 
 ### ⚠️ 关键辨析:autofocustool"已删/仍在"出入
 
@@ -111,7 +111,7 @@
 | 🔶D7 | 退出屏蔽边界(是否留隐藏管理员退出) | 产品策略,源码不决定 | **仍阻塞(但低风险)** | 纯产品决策,可与 UI 改造期一并拍板,不阻塞 M3 微服务改造。 |
 | 🔶D8 | 配置分层边界(数据库/本地/无网兜底/权限) | 现状四处分散(App.config / TLSetting / EEPROM / calibration.json,见 02 §2.3),需 06 文档展开 | **仍阻塞(需 06 细化)** | 需先盘点现有配置项清单再定分层,建议 M5 阶段前出 06 详案,当前不阻塞 M3。 |
 | 🔶D9 | 标定结果回写 EEPROM | autofocustool 现状只写 `calibration.json`、从不回写 EEPROM(03 §4);写地址读写错配、0x12 回复长度两版矛盾 | **仍阻塞(硬阻塞,真机前置)** | 03 §4/§6 明列写地址必须真机验证、回复长度需实测。无真机无法定,是 R4 上线前置条件。 |
-| 🔶D10 | 前端对焦预览去留 | 经 business-manage `/getAutofocusPictures` 取数(非直连 data-transmission),两处 NPE 已确认(维度②)。front `AutoFocusWindow` 消费 imageScore/highestScore 已确认 | **半拍板:无论去留,先消 NPE 可立即拍板;"去/留"本身可暂缓** | NPE 修复与"预览是否下线"正交——必须先改判据消 NPE(否则患者详情崩),这点**现在就能定**。预览最终去留可待 UI 期再议。需求.md §5 D10 描述与源码完全吻合。 |
+| 🔶D10 | 前端对焦预览去留 | 经 business-manage `/getAutofocusPictures` 取数(非直连 data-transmission),两处 NPE 已确认(维度②)。front `AutoFocusWindow` 消费 imageScore/highestScore 已确认 | **半拍板:无论去留,先消 NPE 可立即拍板;"去/留"本身可暂缓** | NPE 修复与"预览是否下线"正交——必须先改判据消 NPE(否则患者详情崩),这点**现在就能定**。预览最终去留可待 UI 期再议。00-需求总览.md §5 D10 描述与源码完全吻合。 |
 
 > 小结:**D5、D10 可基于源码现状当下拍板**(D5 选 A、D10 先消 NPE);D6/D9 是硬阻塞(依赖真机/硬件);D7/D8 是产品/盘点性决策,不阻塞 M3 微服务改造。
 

+ 19 - 15
项目文档/进度/进度数据.js

@@ -1,13 +1,12 @@
 // 进度数据(监控面板.html 读取)。每完成一步由助手回写,generatedAt 用于停滞检测。
 window.PROGRESS_DATA = {
   project: "时差培养箱合并改造",
-  generatedAt: "2026-06-18T16:39:00",
-  currentTask: "★M8 核心代码层完成(P1+P2+P3a+P3b):三端日志机制全通 + operate主战场接入(边界埋点+traceId C#→Java全链路串联,operate编译0error);剩 front/Java铺注解/逐方法手埋(应用层)+真机验证(需用户GUI)★",
-  currentStep: "P3b完成:operate(ivf_tl_Operate+ivf_tl_Entity)引用Aivfo.OperationLog;App_Startup Init(project=operate,kafka127.0.0.1:9092);边界埋点HTTP(HttpHelper收口)/串口(ComBin OpenPort操作级+SendCommand调试级)/相机(Camera Init)/对焦调试(一键标定/手调保存/电机);★traceId透传header与Java(BasicConstant.TRACE_ID=traceId/TraceInterceptor)完全对齐→C#→Java链路串联★;operator登录后设置;探针验证4条共享trace_id入operation_log;operate dotnet build 0error",
-  nextStep: "★真机验证点(需用户GUI):跑operate进调试页→'串口失败'会被记operation_log→查日志排查任务#4(做日志的初衷)★;剩余代码层:front接入/tl-control+business接入(需先加kafka)/逐方法手埋/§10配置集中下发;M8优先于M6/M7",
-  nextStep: "出并执行 P2(Java:@OperateLog切面发Kafka tl-oplog+网关traceId透传+关键方法铺注解)→P3(C#:Aivfo.OperationLog组件异步队列发Kafka+全埋operate/front+调试级本地文件);M8优先于M6/M7真机;全做完回排查operate串口失败(任务#4)",
-  phase: "★★全部代码编译通过★★ C#合并端0error+M2-02单测15/15+3微服务BUILD SUCCESS+front 0error",
-  note: "装.NET8+用既有JDK11后:整个改造代码全部编译通过。C#(M1合并/M2对焦/M4UI/M5配置)0error;Java微服务(M3删打分/消NPE/calPhotoPosition)BUILD SUCCESS;Nexus可达。剩余仅运行时/真机验证(120待验证项需下位机/Surface/服务集群/DB)。【2026-06-18新机接手】Claude已读完交接清单全部文档并交叉验证、git工作区干净(commit 32455ce)、codegraph已init;运行期中间件(MySQL等)用户尚未装好,暂不进真机验证。V-047真实状态澄清:C#本地缓存链已通,服务器下发链(Java实体/VO/DTO+C# DTO重载约8处)未覆盖,待定方向。",
+  generatedAt: "2026-06-18T20:41:00",
+  currentTask: "★M8 核心代码层完成(P1+P2+P3a+P3b+Pjava):三端日志机制全通 + operate主战场接入 + data-transmission真实接入(真实登录链路 operator/traceId 已验证);剩 front/tl-control/business接入 + Java生产服务铺@OperateLog + 逐方法手埋(应用层)+ 真机验证(需用户GUI)★",
+  currentStep: "Pjava完成:data-transmission 加 aivfo-oplog-client 依赖,3控制器4方法(设备设置更新/重初始化缓存/查询缓存/上传图片)加@OperateLog;真实链路自测——带JWT请求 operator=张医生_doctor_zhang+trace_id=真实值入operation_log,匿名请求 operator=anonymous;证 P2 机制在真实微服务+登录链路下 operator/traceId 正确填充,中文utf8mb4正确。新坑:data-transmission启动须把 aivfo-data-transmission/lib 加入进程PATH(JavaImageDLL依赖opencv_world3416.dll,DLL依赖链走PATH)",
+  nextStep: "★真机验证点(需用户GUI):跑operate进调试页→'串口失败'会被记operation_log→查日志排查任务#4(做日志的初衷)★;剩余代码层:front接入/tl-control+business接入(需先加kafka)/Java生产服务铺@OperateLog/逐方法手埋/§10配置集中下发;M8优先于M6/M7",
+  phase: "★★全部代码编译通过★★ C#合并端0error+M2-02单测15/15+四微服务BUILD SUCCESS+front 0error;M8三端日志链路全通",
+  note: "装.NET8+用既有JDK11后整个改造代码全部编译通过:C#(M1合并/M2对焦/M4UI/M5配置)0error;Java四微服务(tl-control/business/data-transmission/gateway)BUILD SUCCESS;M2-02单测15/15;Nexus可达。运行期中间件已就绪(docker 7容器:MySQL/Redis/Nacos/Kafka/FastDFS/MQTT-Mosquitto),M8端到端验证已用之、后端4微服务真机冒烟全绿;本机测试统一localhost/127.0.0.1。剩余=真机/下位机类验证(125待验证项需下位机/Surface/operate GUI/服务集群)。V-047真实状态:C#本地缓存链已通+服务器下发链Java/C#已补全并随四微服务编译通过,运行/真机待验。",
   planTasks: [
     { id: "Task1-4", name: "进度文件组(4文件)", status: "☑" },
     { id: "Task5", name: "M0-00 文档源码审核", status: "☑" },
@@ -42,11 +41,12 @@ window.PROGRESS_DATA = {
     { id: "M5-03src", name: "M5-03 只读服务监控", status: "⚠" },
     { id: "M5-04src", name: "M5-04 心跳+断线+补传", status: "⚠" },
     { id: "M1-00", name: "M1-00 程序集统一(编译通过)", status: "☑" },
-    { id: "BUILD", name: "★全部代码编译通过(C#0err+3微服务SUCCESS+单测15/15)★", status: "☑" },
+    { id: "BUILD", name: "★全部代码编译通过(C#0err+微服务SUCCESS+单测15/15)★", status: "☑" },
     { id: "V047-064-JC", name: "★V-047下发链+V-064上行链 Java编译验证 BUILD SUCCESS★", status: "☑" },
-    { id: "ALL-JAVA-JC", name: "★全仓3微服务Java编译验证全绿(tl-control+business-manage+data-transmission)★", status: "☑" },
+    { id: "ALL-JAVA-JC", name: "★全仓微服务Java编译验证全绿(tl-control+business+data-transmission+gateway)★", status: "☑" },
     { id: "V-001", name: "★V-001 对焦数据层迁移落库校验通过★", status: "☑" },
-    { id: "BACKEND-UP", name: "★后端4微服务集群真机冒烟全绿(gateway/business/data-trans/tl-control 启动+注册Nacos+连中间件)★", status: "☑" }
+    { id: "BACKEND-UP", name: "★后端4微服务集群真机冒烟全绿(gateway/business/data-trans/tl-control 启动+注册Nacos+连中间件)★", status: "☑" },
+    { id: "M8-CORE", name: "★M8 全量操作日志核心代码层完成(P1+P2+P3a+P3b+Pjava,三端链路全通+全链路traceId)★", status: "☑" }
   ],
   milestones: [
     { id: "M0", name: "基线与脚手架", tasks: [
@@ -99,20 +99,24 @@ window.PROGRESS_DATA = {
       { id: "M7-03", name: "端到端闭环+断网恢复", status: "☐", env: true }
     ]},
     { id: "M8", name: "全量操作日志(插队·优先于M6/M7)", tasks: [
-      { id: "M8-P1", name: "P1基础设施:operation_log表+aivfo-oplog微服务+消费入库(发消息→入库✔)", status: "☑", env: false },
-      { id: "M8-P2", name: "P2 Java接入:@OperateLog扩展+切面发Kafka+aivfo-oplog-client starter(端到端✔,埋点铺开待做)", status: "☑", env: false },
-      { id: "M8-P3", name: "P3 C#端:P3a组件✔ + P3b operate接入(边界埋点+traceId全链路✔,编译0error) | 剩front接入/逐方法手埋", status: "☑", env: false }
+      { id: "M8-P1", name: "P1基础设施:operation_log表+aivfo-oplog微服务(:10060)+消费入库(发消息→入库✔)", status: "☑", env: false },
+      { id: "M8-P2", name: "P2 Java机制:@OperateLog扩展+切面发Kafka+aivfo-oplog-client starter(端到端✔)", status: "☑", env: false },
+      { id: "M8-P3", name: "P3 C#端:P3a组件✔ + P3b operate接入(边界埋点+traceId全链路✔,编译0error)", status: "☑", env: false },
+      { id: "M8-Pjava", name: "Pjava data-transmission真实接入:3控制器4方法铺@OperateLog,真实登录链路 operator/traceId 验证✔", status: "☑", env: false },
+      { id: "M8-rollout", name: "应用层铺开:front接入/tl-control+business接入/逐方法手埋/§10配置集中下发", status: "☐", env: false },
+      { id: "M8-verify", name: "埋点真机验证(operate GUI跑→看operation_log,兼排查任务#4串口失败)", status: "☐", env: true }
     ]}
   ],
   pending: [
     { id: "V-001", task: "M3-DB", point: "迁移脚本应用到库后结构正确", env: "数据库", risk: "中", status: "☑" },
-    { id: "V-122", task: "M8-P1", point: "操作级日志经Kafka(tl-oplog)入operation_log字段完整(已发测试消息验证)", env: "日志微服务", risk: "高", status: "☑" },
+    { id: "V-122", task: "M8-P1", point: "操作级日志经Kafka(tl-oplog)入operation_log字段完整(P1/Pjava自测入库✔,真机操作触发待复验)", env: "日志微服务", risk: "高", status: "☐" },
+    { id: "V-123", task: "M8-P3/Pjava", point: "同一操作C#→Java多条日志trace_id一致(Pjava链路自测traceId已串联,真机触发待复验)", env: "全栈", risk: "高", status: "☐" },
     { id: "V-002", task: "M2-02", point: "层位置公式生成各层Z与下发一致", env: "真机/下位机", risk: "高", status: "☐" },
     { id: "V-003", task: "M2-03", point: "StartAutoFocus 本地化对焦驱动拍照闭环", env: "真机+合并程序", risk: "高", status: "☐" },
     { id: "V-004", task: "M2-05", point: "算法严谨性:74000伪峰/真胚胎峰比>1.5", env: "真机+真胚胎", risk: "高", status: "☐" },
     { id: "V-005", task: "M3-02", point: "删打分后 business-manage 不再 NPE", env: "微服务+数据库", risk: "高", status: "☐" },
     { id: "V-006", task: "M2-04", point: "EEPROM 写地址/0x12 回复长度真机确认", env: "真机", risk: "高", status: "☐" },
-    { id: "V-007", task: "M3-01", point: "机旁C#自带native打分(HouseBin.cs:2446)去留,文档遗漏", env: "真机+合并程序", risk: "高", status: "☐" },
+    { id: "V-007", task: "M3-01", point: "机旁C#自带native打分去留(评估=可删死代码)", env: "真机+合并程序", risk: "高", status: "☐" },
     { id: "V-008", task: "M3-02", point: "data-transmission 两处 orderByDesc(imageScore) 排序键失效", env: "微服务+数据库", risk: "中", status: "☐" },
     { id: "V-009", task: "M3-02", point: "第三处消费 ResourceServiceImpl:333 改判据后展示正确", env: "微服务+数据库", risk: "中", status: "☐" }
   ]

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 0 - 1
项目文档/进度/进度状态.yaml


+ 1 - 1
项目文档/需求文档/01-架构与合并方案.md

@@ -1,6 +1,6 @@
 # 01 · 架构与合并方案(含项目结构全景)
 
-> 父文档:`../需求.md` · 对应需求 1/3 · 决策 D1/D2/D7
+> 父文档:`../00-需求总览.md` · 对应需求 1/3 · 决策 D1/D2/D7
 > 目的:把整个时差项目的结构、技术栈、模块依赖讲清楚,并给出合并后的目标架构与落地方案。**对着本文应能定位任何要改的代码。**
 
 ---

+ 1 - 1
项目文档/需求文档/02-业务闭环梳理.md

@@ -1,6 +1,6 @@
 # 02 · 业务闭环梳理(端到端,逐节点:现状/改后/受影响)
 
-> 父文档:`../需求.md` · 对应需求 12/13 · 风险 R2
+> 父文档:`../00-需求总览.md` · 对应需求 12/13 · 风险 R2
 > 目的:把临床业务端到端闭环画清楚,每个节点标"现状/改后/受影响",作为**验收清单**——避免改一半导致闭环断。
 
 ---

+ 1 - 1
项目文档/需求文档/03-自动对焦集成方案.md

@@ -1,6 +1,6 @@
 # 03 · 自动对焦集成方案
 
-> 父文档:`../需求.md` · 对应需求 2/8 · 决策 D3/D9 · 风险 R4/R7
+> 父文档:`../00-需求总览.md` · 对应需求 2/8 · 决策 D3/D9 · 风险 R4/R7
 > 配套:`autofocustool/相机自动对焦项目-总方案.md`(算法权威文档)
 
 ---

+ 1 - 1
项目文档/需求文档/04-微服务改造方案.md

@@ -1,6 +1,6 @@
 # 04 · 微服务改造方案(删除选层打分 + 保留抠图链 + 下游同步)
 
-> 父文档:`../需求.md` · 对应需求 13 · 决策 D3/D4/D5/D10
+> 父文档:`../00-需求总览.md` · 对应需求 13 · 决策 D3/D4/D5/D10
 > 本轮性质:**整个系统的改造**。因为加入了本地自动对焦,微服务里"用图片清晰度评分来选清晰层"的旧方法**整条删除**。本文档写明:为什么删、删什么、保留什么、删了之后下游怎么同步改,确保对着文档能直接、准确地改。
 
 ---

+ 1 - 1
项目文档/需求文档/05-实时通讯与服务监控.md

@@ -1,6 +1,6 @@
 # 05 · 实时通讯与服务监控
 
-> 父文档:`../需求.md` · 对应需求 7/10 · 决策 D6(部分) · 风险 R9
+> 父文档:`../00-需求总览.md` · 对应需求 7/10 · 决策 D6(部分) · 风险 R9
 
 ---
 

+ 1 - 1
项目文档/需求文档/06-参数配置统一管理.md

@@ -1,6 +1,6 @@
 # 06 · 参数配置统一管理
 
-> 父文档:`../需求.md` · 对应需求 9 · 决策 D8 · 风险 R8
+> 父文档:`../00-需求总览.md` · 对应需求 9 · 决策 D8 · 风险 R8
 
 ---
 

+ 1 - 1
项目文档/需求文档/07-UI改造方案.md

@@ -1,6 +1,6 @@
 # 07 · UI 改造方案
 
-> 父文档:`../需求.md` · 对应需求 4/5/6/6.1/11/12 · 决策 D6 · 风险 R6
+> 父文档:`../00-需求总览.md` · 对应需求 4/5/6/6.1/11/12 · 决策 D6 · 风险 R6
 
 ---
 

+ 1 - 1
项目文档/需求文档/08-影响范围矩阵.md

@@ -1,6 +1,6 @@
 # 08 · 影响范围矩阵(全子系统)
 
-> 父文档:`../需求.md` · 风险 R1-R10
+> 父文档:`../00-需求总览.md` · 风险 R1-R10
 > 目的:一处改动波及哪些子系统/页面/接口/表/下位机,一表看清,避免漏改。
 
 ---

+ 1 - 1
项目文档/需求文档/09-工作计划与验收.md

@@ -1,6 +1,6 @@
 # 09 · 工作计划与验收
 
-> 父文档:`../需求.md`
+> 父文档:`../00-需求总览.md`
 > 原则:每期以**端到端可验证闭环**为单位;完成 = 闭环跑通,不是编译过。
 
 ---

+ 1 - 1
项目文档/需求文档/10-术语与契约.md

@@ -1,6 +1,6 @@
 # 10 · 术语与契约
 
-> 父文档:`../需求.md`
+> 父文档:`../00-需求总览.md`
 > 目的:统一术语,避免理解歧义;汇总接口/主题/状态/协议地址契约。
 
 ---

+ 4 - 4
项目文档/需求文档/12-工作计划表与自动对焦数据设计.md

@@ -1,6 +1,6 @@
 # 12 · 工作计划表与自动对焦数据设计(设计规格)
 
-> 父文档:`../需求.md` · 关联 `09-工作计划与验收.md`、`03-自动对焦集成方案.md`、`04-微服务改造方案.md`、`11-数据库测试数据精简方案.md`
+> 父文档:`../00-需求总览.md` · 关联 `09-工作计划与验收.md`、`03-自动对焦集成方案.md`、`04-微服务改造方案.md`、`sql/数据库测试数据精简方案.md`
 > 最后更新:2026-06-17
 > 本文定位:把三件事落成可执行设计——① 贯穿 M0–M7 的**工作计划表 + 跨会话/跨电脑无缝续接机制**;② 项目冗余**文件清理**(已执行,留档);③ **自动对焦多层数据与设置层**设计深化。
 > 性质:设计规格(spec)。实现细节由后续 implementation plan 展开。
@@ -115,7 +115,7 @@ AI 恢复顺序:
 | 编号 | `V-001` 递增 |
 | 关联任务 | 来自 `工作计划表.md` 的任务编号 |
 | 待验证点 | 具体要测什么(如"层间距公式生成的各层位置是否正确下发") |
-| 依赖环境 | 真机 / 下位机串口 / 微服务集群 / Kafka / EMQX / 数据库 等 |
+| 依赖环境 | 真机 / 下位机串口 / 微服务集群 / Kafka / MQTT(Mosquitto) / 数据库 等 |
 | 验证方法 | 怎么测、预期结果 |
 | 状态 | ☐ 待测 / ☑ 已验证 / ✗ 发现问题 |
 | 风险等级 | 高/中/低(高=不验证不敢上线,如对焦严谨性、EEPROM 写地址) |
@@ -148,7 +148,7 @@ AI 恢复顺序:
 | ① 文档-源码一致性 | 逐个需求子文档(01-11)声称的现状/`文件:行号`,抽样核对源码是否相符;记录"文档说 X / 源码实际 Y"的差异 | 01-11 子文档 |
 | ② 业务闭环完整性 | 以端到端闭环图逐节点核对源码链路是否真连通;重点核改造点(删选层打分链)删除后是否断链、是否引入 NPE | `02-业务闭环梳理.md`、`04-微服务改造方案.md` §6.2 |
 | ③ 影响范围全面性 | 核影响范围矩阵是否覆盖全部受影响消费者/调用方,有无遗漏 | `08-影响范围矩阵.md` |
-| ④ 决策遗留项 | 总纲 §5 的 🔶 待定决策(D5–D10) 是否已可拍板,逐条给建议 | `需求.md` §5 |
+| ④ 决策遗留项 | 总纲 §5 的 🔶 待定决策(D5–D10) 是否已可拍板,逐条给建议 | `00-需求总览.md` §5 |
 
 **产出**:`项目文档/进度/文档源码审核报告.md`——含差异清单(文档 vs 源码)+ 业务闭环确认 + 缺口/遗漏补全建议 + 待决策项汇总与建议。
 **为什么放第一**:后续所有改造依赖文档准确;先一次性校准,避免错误传导。
@@ -301,7 +301,7 @@ house_autofocus_calibration (
 
 ### 3.3 效果
 
-清理后遍历/搜索不再撞进 2.5G 编译产物,减少 token 消耗与读取干扰。注:与 `11-数据库测试数据精简方案.md`(删库中数据)是两回事,本章删的是磁盘文件。
+清理后遍历/搜索不再撞进 2.5G 编译产物,减少 token 消耗与读取干扰。注:与 `sql/数据库测试数据精简方案.md`(删库中数据)是两回事,本章删的是磁盘文件。
 
 ---
 

+ 1 - 1
项目文档/需求文档/13-统一硬件访问层接口定义.md

@@ -1,6 +1,6 @@
 # 13 · 统一硬件访问层接口定义(M0-03)
 
-> 父文档:`../需求.md` §5 · 决策 D2 · 关联 `01-架构与合并方案.md §3`、`03-自动对焦集成方案.md`、`10-术语与契约.md`
+> 父文档:`../00-需求总览.md` §5 · 决策 D2 · 关联 `01-架构与合并方案.md §3`、`03-自动对焦集成方案.md`、`10-术语与契约.md`
 > 状态:**接口骨架(只签名 + 注释,不含实现体)**。本文不修改任何源码。
 > 目标:定义全进程唯一持有每个 COM 口 / 每台相机的【统一硬件访问层 HAL】接口,供 operate 调试、control 采集、自动对焦三方借用,互斥/排队共享。
 

+ 1 - 1
项目文档/需求文档/14-全量操作日志方案.md

@@ -1,7 +1,7 @@
 # 14 · 全量操作日志方案
 
 > 状态:设计已确认(2026-06-18 brainstorming),待实现。
-> 关联:本文件是「全量操作日志」需求的权威设计文档(=spec);实现计划另出(计划/ M8 子计划)。
+> 关联:本文件是「全量操作日志」需求的权威设计文档(=spec);实现计划另出(开发计划/ M8 子计划)。
 > 一句话:**给 C# 与 Java 两端所有「操作」留下完整、可读、可串联的记录(谁/功能/输入/输出/报错/结果/耗时),让测试期能靠日志快速定位、上线后易排障。**
 
 ---

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio