Commit Graph

283 Commits

Author SHA1 Message Date
wandering1 de1b50efe9 修复 P1-7:MAC 写入顺序改为 INIT_CH395 之前
- 手册 §9.2.1:SET_MAC(步骤①) 必须先于 INIT_CH395(步骤⑤);SET_MAC 写
  芯片 EEPROM,INIT 从中加载 MAC——原顺序反了则本次上电 MAC 不生效
  (回落芯片内置/上次值),UI 显示与设备在线身份不符
- net_socket.c net_init():SET_MAC 移到 ch395f_init() 之前(对齐步骤①)
- ch395f.c:四个 SET(MAC/IP/GWIP/MASK)限定条件注释由"芯片已初始化"
  订正为"必须在 ch395f_init() 之前调用"
- net_socket.h / BSD_Socket_API_函数调用关系.md:同步顺序描述
- CH395F_Trap_Records.md:新增 Trap 24 沉淀根因与修复
- 待处理内容.md:P1-7 销项(§1/§2 阶段 A/§3.1/§4);阶段 A 清空后重编号
- 验证:Keil 构建 0 错 0 警;pre-commit 17/17 全通过
2026-10-04 23:07:00 +08:00
wandering1 72c0bd2f7c docs(待处理): 删除已闭环条目并重组登记簿结构
- 删除已完成内容:§1 的 P0/P2 行、§3.1 的 P1-8 已闭环 stub、
  §3.2 的 P2 销项索引表与"已销项 P2"列表、§3.3 的"已销项 P3"列表、
  §4 的 P0-1 已闭环说明段
- 重组:§3 重编号(P3→3.2、登记簿→3.3、测试与架构专项→3.4,
  子节 3.4.1~3.4.4);§8 维护约定的章节引用同步
- 同步清理失效编号引用(P2-12/P1-8);实机测试实施指南溯源表
  的 P1-8 上游改为"原台账项,已闭环"
- pre-commit 全通过(doc-links 等)
2026-10-04 22:32:42 +08:00
wandering1 e0b02d397c 修复 P2 全部 10 项:错误传播/竞态/门控/文档失真
待办池 docs/待处理内容.md §3.2 的 10 个 P2 全部闭环;逐项落代码 + 注释说明。

P2-1  cfg_file: 受管键行超 CFG_LINE_TEST_MAX 拒绝保存(防重复键行)
P2-2  ch395f: DMA 失败传播状态 + 锁存通道故障 + 读不拷不可信数据
P2-7  net_select: LISTENING 不再恒判可读(消除 select 忙轮询地雷)
P2-8  time_sync: 核实 L3 pending 改写已闭环(net_recv_to 分片 + 总预算)
P2-9  sys_log: 挂载改幂等 + 卷锁,defaultTask 2s 重试建 /log
P2-10 sys_log: s_read_raw 纳入卷锁 try(读者/写者 unlink 互斥)
P2-11 net_task: RECONFIG 改 osEventFlagsWait 原子取走 + 清除
P2-12 app_cfg: APP_*_ENABLE 如实标注为未接线占位,删“开关”说法
P2-13 freertos: 产品构建 vTaskDelete(testTask) 回收 8KB CCM 栈
P2-15 download.bat: 先删旧日志 + 增“未产出日志”判定

P2-13 用 USER CODE 区回收而非生成区 #if 门控:生成区改动会被 CubeMX
重生成覆盖,本方案重生成不丢。P2-12 因产品定义 B0 未定、APP_NET_ENABLE
无单一接线点,按修复建议备选(删“开关”说法)处理。

验证:@build 0 错 0 警;主机单测 watchdog 39/39 + sys_clock 100/100 +
cfg_file 149/149(新增 TC-CFG-044);pre-commit --all-files 17/17。
2026-10-04 08:30:30 +08:00
wandering1 13eeba944b docs: P0-1 真机 @test 收口(§4.1 待验证清空)
对 docs/待处理内容.md §4.1「待验证」唯一未闭环项 P0-1 做真机验证并收口:

- @build 0/0(增量;已确认无 C 源文件新于镜像)
- @test VERDICT PASS(rc=0):[CFG] load: OK (523B, heap free 8840B)
  + Forbidden FAIL/ERROR/HardFault/[ERR] 零命中
  + selftest: no fault record(先清掉 2026-10-02/03 注入窗口遗留 67 条)
- ST-LINK 全片回读 No difference found(0x08000000~0x08040F9B)

文档收口:
- 待处理内容.md:§4.1 清空 → §4 改「待确认」;§1 P0 行改为已闭环
- 配置文件设计说明.md:增 2026-10-04 复跑记录行(证据沉淀)
- 项目审查与优化建议报告.md:三处「真机确认待执行」改为已 PASS
- 实机测试实施指南.md:A1 行补 2026-10-04 记录

pre-commit 17/17 Passed。
2026-10-04 08:04:34 +08:00
wandering1 75c234b0c2 docs: 项目审查报告移入 问题记录/,删除空的 审查记录/ 目录
让评审报告与 待处理内容.md 的分工更直观:
- git mv 项目审查与优化建议报告.md → docs/问题记录/(与 Trap 台账、
  错误码传播审计同处"专项审计"目录);rmdir 空的 docs/审查记录/。
- docs/README.md:§8 标题改为「评审报告 · 环境与部署 · 外部资料」,
  §8.1 改为「评审报告」,目录树删 审查记录/、补 问题记录/ 说明,
  按角色导航改为 §8.1/§8.3,补 2026-10-04 变更记录。
- 根 README.md 目录树同步。
- docs/文档规范.md §1.1 现有目录列表、§6 归属表同步。
- 看门狗设计说明.md / 待处理内容.md 的路径引用重定向。

pre-commit 17/17 Passed。
2026-10-04 02:34:40 +08:00
wandering1 f4fea70749 docs: 合并 4 份待办文档为统一登记簿 待处理内容.md
合并 docs/待处理内容.md(N/S/T-x)、审查记录/项目审计改进清单.md(P-x)、
审查记录/下一步任务规划.md(阶段与基线)、审查记录/测试与架构改进建议.md
(S1x/A-x)为单一《待处理内容(统一待办登记簿)》。

- 结构:编号空间与来源 / 未闭环一览 / 任务排序(阶段 A~D)/
  逐条详述 / 待验证与待确认 / 设计基线 / 诊断基线 / 内存预算 / 维护约定。
- 编号沿用且不回收;E-xx 仍由 错误码传播审计.md 独立维护。
- 删除 3 份被合并文档;重定向下游引用:README、AGENTS、审查报告、
  实机测试实施指南、Net 层架构、NET/cfg 模块 README、脚本注释。
- 同步订正计数:P1=2(+1 收尾) / P2=10 / P3=6。

pre-commit 17/17 Passed。
2026-10-04 02:28:52 +08:00
wandering1 7f393956cc 测试与架构改进建议:删除已落地条目,只保留待办
- 12/14 条建议已落地,按"只保留待办"约定重写本文件
- 保留:S12 断言宏、S1-c 可选单测、A-4 采集链路测试约束
- 保留:A-5 残余(CI 体积门禁盲区)
- 保留:错误码通道四要素(设计基线,供后续驱动接入沿用)
- 删除:S1-a/S1-b、S2~S11、S13、S14;T-1~T-5;A-1~A-3/A-6/A-7
- 删除:评价表/盘点表、路线图、总结、变更记录
- 同步修正 6 个外部文档对本文件章节的死引用
- 新增"编号约定":S/T/A 编号不随条目删除而回收
2026-10-04 02:12:41 +08:00
wandering1 5955ac010d 测试与架构改进建议 2026-10-04 状态更新:S1~S14 落地复核与体系计数刷新
- 全量复核 S1~S14 落地情况并就地标注:已落地 12 条,待做 S12
- 体系计数刷新:L0.5 模块 1→3(看门狗/sys_clock/cfg_file)
- L0 钩子 15→18、板端套件 4→5、CI 已补产物存档与汇总行
- §0.1/§0.3/§1.1/§1.2/§1.3 T-1~T-5 同步更新
- §2.2~§2.8、§3.1~§3.7、§4.1~§4.7、§5.1/§5.2、§6 同步更新
- 修正交叉引用整体错位:T-3/T-4/T-5 与 A-1/A-3/A-5/A-6/A-7 各偏一节
- §2.6 同步 2026-10-04 重采数据:min_ever=4,728 B
- 上游 S-1 升级为 defaultTask 3664/4096(余量约 10%)
- 变更记录补 2026-10-03 台架窗口条目(S4/S5/S7/S9/S11)
2026-10-04 02:05:39 +08:00
wandering1 1098fbd952 错误码传播审计:订正计数与索引——未闭环 25→17、已闭环 33→41,同步 E-34/E-04/GD5F族/E-60 闭环;§0 结论速览、§2 索引、§3 分类计数、§4 矩阵与文末订正记录 2026-10-04 01:59:44 +08:00
wandering1 7531eb9b89 待处理内容(登记簿):删除已闭环项,只保留未闭环项
按用户要求(与 下一步任务规划.md 同一要求),登记簿只保留未闭环项:
- 删 S-6(dhara resume 回滚,✅ 已修)。
- 删「可靠性与自恢复」整节(N-03/N-03a/c/d/e 均 ✅;N-03b 为已接受的显式代价,非待办)。
- 删「测试与验证基础设施」的「已销项 T-1~T-6」块与空表。
- N-2 行精简(去掉验证叙事,保留结论 + 残余待办)。
- 新增 T-7:CI runner 未就绪(部署前置,原为区块内提示,改登记为正式待办)。
- 抬头补一句「本表只保留未闭环项,已闭环项不保留、不留变更记录」。

按登记簿「同步清理其他文档对本编号的引用」约定,修正悬空指针:
- 看门狗设计说明.md:抬头状态(原「待台架验证」已过时 → ✅ 已闭环,去掉 N-03 指针);
  §后续项去掉 N-03 指针。
- 实机测试实施指南.md:§4 来源去掉 N-03;§10 V2/V4/V5 下游改为设计说明变更记录。
- 看门狗单元测试说明.md:分工表两处「⏳ 待台架(N-03 V2/V4/V5)」→ ✅ 已台架验收。
(历史变更记录中「T-6/T-1 销项」等属当时记录,保留不改。)

验证:pre-commit --all-files 17/17 Passed。
2026-10-04 01:48:50 +08:00
wandering1 e7442cc73f 下一步任务规划:删除已完成内容,只保留待办
按用户要求,本文件只保留"待办",完成项直接删除、不留变更记录(历史见 git log):
- 删 §1.1「已闭环」整表;§1.3 结构性判断 3 条 → §1.1(去掉已完成项引用)。
- 阶段 A:删 A1~A4(已闭环),仅留 A5(P1-7 待手册)。
- 阶段 C:删 C2(GD5F 错误通道,已闭环);C5 去掉 E-34/E-04 删除线。
- 阶段 D:删 D1(P1-10,已闭环)。
- §3 顺序图同步;§5 维护约定改为「完成即删、不留变更记录」。
- 删文末「变更记录」表(属已处理内容)。

同步修正外部引用:
- docs/README.md 索引描述改为「只保留待办,完成即删」。
- 实机测试实施指南 §10 P1-8 去向:上游由「下一步任务规划 阶段 A」改为「项目审计改进清单 P1-8」;
  抬头上游描述「(阶段 A)」→「(任务排序)」。

验证:pre-commit --all-files 17/17 Passed。
2026-10-04 01:42:44 +08:00
wandering1 8947f8ac4d 下一步任务规划 2026-10-04 更新:阶段A闭环 + 状态全量同步 + 栈基线重采
盘点同步(§1/§2/§3/§4):
- 阶段 A A1~A4 全部真机验证通过(A1 P0-1 @test PASS;A2/A3/A4 正常路径零回归)
  → §1.2 P0 归零、P1 由 4 → 2(P1-8/P1-10 闭环)、阶段 A 表标 ✅(A5 P1-7 待手册)。
- §1.1 增补 2026-10-02/03 已闭环域:IWDG 看门狗(N-03 V2/V4/V5 台架验收)、
  存储侧 dhara resume 修复(S-6)+ ORE 僵尸通道自愈 + 卷锁、GD5F 错误通道族、
  E-34/E-04、堆低水位告警(S11)、测试架构 T-1~T-6 + S5/S4、RTC 套件汇总行。
- §1.2 登记簿 5 → 10(补 N-16/N-17/S-3/S-4/S-5;N-2 降级低风险观察项)。
- §2 阶段 B 标注为当前最高优先级;阶段 C 增 C6(USART1 TX-only 根治)、
  C3 改写(N-2 降级 + S-3)、C4 升级;阶段 D 增 D5(N-16)/D6(N-17)、D1 标 ✅。
- §4 诊断基线重采:Flash 266,676 B、RW_IRAM1 84,960 B、堆 min_ever 4,728 B、
  各任务运行时栈水位。§5 增变更记录。

栈基线重采(重要发现):产品构建(suite=NONE)V5 30 min 负载实测
defaultTask 峰值 3664B/4096(余量 432B ≈ 10%,已低于 30% 判据)——较 09-21 基线
2136B / 09-22 的 2872B 持续上升(A2/A3/A4 + IWDG + 卷锁 + 堆告警入链)。
→ 待处理内容.md S-1 升级为"需尽快处理";RAM使用分析与优化方案.md 标注 §2.3
栈表已过时 + 修正 §0 当前状态描述。

验证:pre-commit --all-files 17/17 Passed;run_all_suites.py --check-build 四套件全编译通过。
2026-10-04 01:38:52 +08:00
wandering1 029437be89 台架执行《实机测试实施指南》步骤 3~7 并闭环
步骤 3/4(IWDG V2/V4/V5 + 堆低水位 S11):
- V2 任务饿死 stall 后 ≤2.5s IWDG 复位;V4 关中断死循环 ~4.9s 稳定复位;
  V5 30min 120×FTP 全 PASS、零 IWDG 复位。堆告警全程未触发(min_ever=4728B)。
- task_watchdog.c:stall 证据写盘会经 nand_ftl_wd_feed 喂狗 → 增 s_stall_evidenced
  每次 stall 仅取一次证据,避免"取证据"本身阻止复位。
- default_task.c:堆低水位告警(HEAP_LOW_WATER_B=3072)。

步骤 5(GD5F 错误通道 S9):gd5f2gq5ue.c/.h + nand_ftl.c 错误码统一为 int32_t 并
全量检查返回值;套件回归 16/16 PASSED。
- test/run_all_suites.py:--forbidden 改为按套件覆盖(GD5F 用 "HardFault;assert")——
  TC-GD5F-704 故意触发 [ERR] 回落轮询,统一默认值会误判 FAIL。

步骤 6(网络稳定性):7.1 正常路径 ✅(V5 证据);7.2 N-2 丢弃可观测性代码已具备、
49s 静默在 V5 未复现(降级低风险观察项);7.3 N-3 待 PC peer。

步骤 7(工程卫生):
- S5:新增 test-cppcheck 钩子(仅 warning,排除模拟器桩)。
- S4:新增 scripts/check_test_traceability.py(默认仅告警)。
- 待核实项 TEST_SUITE_SELECTED 实机核实 = 死代码(无使用点);RTC 套件实际正常执行,
  真缺口 = 缺套件级汇总行 → sd2506_test_task.c 补 === RTC Tests: N/M PASSED === 并
  修正 Phase 级汇总累计问题;test_config.h 补齐 RTC 并注释"当前无引用"。

验证:产品 @build 0/0;pre-commit --all-files 17/17 Passed;
run_all_suites.py --suites RTC → PASS。
文档:实机测试实施指南 / SD2506_Test_Guide / 待处理内容 / 测试与架构改进建议 同步。
2026-10-04 00:35:06 +08:00
wandering1 aef1d92b3f 实机测试实施指南重构为纯执行流程:步骤1~7+状态标记,已完成事项(S7/A1~A4)细节与证据移出至各模块文档,§1改执行流程总览,外部引用同步 2026-10-03 22:45:19 +08:00
wandering1 a7af1c9333 实机测试实施指南变更记录去"待上板"残留:历史文档改造条目 §3 描述改 A1~A4 项,全库无待上板框架残留 2026-10-03 22:31:59 +08:00
wandering1 599776cd55 实机测试实施指南§3.2去"待上板"框架:A1~A4已落地并真机验证,改写为客观事实记录(列名改实施内容+验证判据),§1总览P0-B状态改已闭环,抬头与README索引同步为真机验证状态
CI / L0 静态门禁 (pre-commit) (push) Failing after 17s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 18s
2026-10-03 22:27:30 +08:00
wandering1 1780e5320b 实施A2/A3/A4并通过真机验证:net_task失败重试自检、ch395f有限超时故障锁存、remo_send短写阻断;@test 7/7,A1含配置持久化闭环 2026-10-03 09:05:57 +08:00
wandering1 ddbba714f7 实机测试规划更名为实机测试实施指南:与文档性质(常设执行判据)对齐,H1/README索引同步,引用面仅1处 2026-10-02 23:51:31 +08:00
wandering1 3cc08f5d53 实机测试规划改造为执行判据说明:删除一次性台架窗口状态(§0.5取证记录)与规划框架,A1~A4代码状态按代码核对改写,16处外部引用重指向模块文档 2026-10-02 23:46:27 +08:00
wandering1 554b2e88da 方案文档改造为机制说明:删除规划/盘点/阶段/风险/任务拆分章节,保留变量清单/解析语义/配置方法/验收判据,外部引用同步重编号 2026-10-02 23:21:25 +08:00
wandering1 bf025e6f10 模拟器构建修复:CMakeLists配置引擎引用同步至App/cfg/与test/board/(重构遗留),--cfgtest四场景PASS,跨机验证清单⑤行更新 2026-10-02 23:09:53 +08:00
wandering1 c441131db6 环境文档小修:CMSIS pack 更正为非必装(keil.com 已下架)、串口配置源端口更正为 COM6 2026-10-02 22:56:48 +08:00
wandering1 401908c062 环境文档增补跨机验证清单:项目部署环境要求新增§2.12(变量配置+六步验证链+反向fail-fast测试+通过判定),方案文档待办项交叉引用
CI / L0 静态门禁 (pre-commit) (push) Failing after 25s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 29s
2026-10-02 22:29:49 +08:00
wandering1 33a4aa4945 本地工具路径DTU_*环境变量改造落地:10处调用点去硬编码+变量优先解析,本机全链路验证通过,文档同步收口,requirements补pre-commit 2026-10-02 22:14:49 +08:00
wandering1 b96d649e62 文档销项:登记ORE僵尸根治与卷锁待办,补存储架构resume锚点说明
CI / L0 静态门禁 (pre-commit) (push) Successful in 57s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 25s
2026-10-02 20:54:05 +08:00
wandering1 930215f81a 修复IWDG超时未配置与dhara resume回滚:看门狗误复位与复位后写入全部丢失,台架全量自检PASS 2026-10-02 20:48:30 +08:00
wandering1 d1a2eaab07 修复run_boot_test路径解析:脚本在test/host/,仓库根需上溯两级(原REPO_ROOT只到test/,端口配置与串口助手路径全部解析错误) 2026-10-02 15:08:02 +08:00
wandering1 4a4cd29342 S7:@test闭环增加自检结论联合判定(selftest.log缺失或空=PASS、有64B记录=FAIL;FTP匿名抓取+本地副本两种来源) 2026-10-02 15:06:36 +08:00
wandering1 b0851b2f70 修复L0.5单测harness工具链探测:VS2026实际安装目录为18,补入VS_ROOTS(本机3项主机侧单测由ENV失败转PASS) 2026-10-02 15:00:31 +08:00
wandering1 6aae6bd34e docs: 新增实机测试规划(无 MCU 窗口的验证债执行面) 2026-10-02 14:05:03 +08:00
wandering1 d9425ddd23 测试:补启动段可观测性与模拟器差距清单,run_all_suites 加只编译模式(S10+S13+S6)
CI / L0 静态门禁 (pre-commit) (push) Successful in 1m10s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 25s
2026-10-02 13:57:25 +08:00
wandering1 fe963e7d91 测试:新增 cfg_file 主机侧单测并修复外科手术保存死码缺陷(S1-b+S2)
CI / L0 静态门禁 (pre-commit) (push) Successful in 49s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 17s
2026-10-02 13:00:54 +08:00
wandering1 f3befaed08 CI:补产物存档与结果汇总,明示体积门禁盲区(S3+S14)
CI / L0 静态门禁 (pre-commit) (push) Successful in 58s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 19s
2026-10-02 11:55:31 +08:00
wandering1 fac9d1c409 测试:新增 sys_clock 主机侧单测并修复 Zeller 星期缺陷 2026-10-02 11:40:35 +08:00
wandering1 9f52731ed8 文档:补 Runner 部署指南 §5.1.1/§5.1.2 与排障表(CI 首次全绿) 2026-10-02 01:54:14 +08:00
wandering1 1020f6d26c 文档:修正串口助手 state 运行时文件引用被 CI doc-links 误报 2026-10-02 01:49:35 +08:00
wandering1 3b81e9c801 CI:触发复验 pre-commit 全局安装(cfgv 修复后) 2026-10-02 01:41:19 +08:00
wandering1 df9a566982 CI:诊断 pre-commit 仅装于用户态导致 SYSTEM 不可见
CI / L0 静态门禁 (pre-commit) (push) Failing after 17s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 17s
第五次运行(run#5)L0 仍失败,但错误信息已指向真因:
自检步骤 3 个候选解释器(msys64 / .venv / anaconda3)全部探测失败。

根因(已实测定位):本机 pre-commit 装在
  C:\Users\Administrator\AppData\Roaming\Python\Python312\site-packages
即 Administrator 的【用户态 user-site】。runner 以 SYSTEM 运行,其
%APPDATA% = C:\Windows\system32\config\systemprofile\AppData\Roaming,
根本看不到该目录 → 换任何 python.exe 路径都无效。
(已盘点本机全部 python:anaconda3 3.12.4 / workbuddy 3.13.12 /
 msys64 3.14.5,以 -s 禁用 user-site 后 pre-commit 均为 rc=1。)

本次改动(workflow 侧,配合外部的全局安装):
- 探测改用 `& $py -s -m pre_commit --version`(-s 禁用 user-site),
  只有 SYSTEM 真能用的解释器才被选中
- 后续 install / run 同步加 -s,保持判定一致
- 失败信息明确指向 user-site 不可见 + 给出修复脚本路径
  (install_precommit_global.ps1,装到 anaconda3 全局 site-packages)

真正的修复需管理员执行该脚本(本会话无提权权限,pip --no-user
报 WinError 5 拒绝访问)。装好后 L0 即可通过。
2026-10-02 01:29:55 +08:00
wandering1 48b33921c0 CI:修正 python 探测被 NativeCommandError 中断
CI / L0 静态门禁 (pre-commit) (push) Failing after 17s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 16s
第四次运行(run#4)L0.5 已 PASS(status=1,MSVC 探测 + 39 单测全过),
L0 仍失败于自检步骤自身的一个 PS 5.1 行为:

  & $c -m pre_commit --version *> $null
  → NativeCommandError,脚本中止

根因:$ErrorActionPreference='Stop' 下,原生命令写 stderr 会被 PS5.1
当成终止性错误(NativeCommandError),即使 *> $null 重定向也无法阻止;
于是第一个候选(msys64 python,无 pre-commit)就把整个 for 循环打断,
根本轮不到 anaconda3。

处置:探测每个候选时临时把 $ErrorActionPreference 降为 'Continue',
用 2>&1 | Out-Null 吞掉输出并取 $LASTEXITCODE,循环后恢复 'Stop'。
已在 WinPS 5.1 本地实测该探测逻辑:
  msys64 rc=1 → .venv rc=1 → anaconda3 rc=0 选中,STEP OK。
2026-10-02 01:24:50 +08:00
wandering1 8e7b22184e CI:按 SYSTEM 账户视角修正 Python / cppcheck 探测
CI / L0 静态门禁 (pre-commit) (push) Failing after 16s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 16s
第三次运行(run#3)已越过 PS 语法问题,环境自检真正执行,
暴露 runner 真实环境缺陷:

1. cppcheck 只在【用户级 PATH】,SYSTEM 账户看不到 →
   报 runner missing cppcheck。已在自检步骤加回落到
   C:\Program Files\Cppcheck 并写入 GITHUB_PATH。

2. 更隐蔽:SYSTEM 的 python 解析到 C:\msys64\ucrt64\bin\python.exe
   (3.14.5),而该解释器【没有 pre-commit】(AGENTS.md 亦明令
   不得用它跑依赖第三方库的脚本)。若不修,自检通过后 L0 会在
   pre-commit 步骤炸。
   处置:在自检步骤按 scripts/ci_local.py 同一探测序
   (PATH python -> .venv -> anaconda3)挑出真正装了 pre-commit
   的解释器,导出 PYTHON 环境变量供后续步骤使用。
   L0.5 是独立 job(GITHUB_ENV 不跨 job),同法就地选一个可用
   python(主机侧单测为纯标准库,任意 python3 均可,已用 msys64
   python 实测 39/39 PASS)。

附带:run 块保持纯 ASCII(上次修正),全部 shell=powershell。
2026-10-02 01:21:10 +08:00
wandering1 e241fea801 CI:run 脚本改纯 ASCII(PS5.1 按 GBK 解码临时 ps1)
CI / L0 静态门禁 (pre-commit) (push) Failing after 17s
CI / L0.5 主机侧单测 (MSVC) (push) Successful in 16s
第二次 CI 运行(run#2)仍失败,但失败点前移:
  pwsh 问题已修(环境自检步骤确实由 Windows PowerShell 5.1 执行)
  新错误:TerminatorExpectedAtEndOfString @ 含中文那一行
根因:runner 把每个 run: 块写入临时 .ps1(无 BOM)交 PS5.1 执行,
      PS5.1 按 GBK/CP936 解码 → UTF-8 中文字节与相邻引号错位 →
      字符串缺少终止符(报错行号即含中文行,极易误判)。
与 AGENTS.md「字符串字面量必须纯 ASCII」同源。

处置:所有 run: 块内改为纯 ASCII(提示语改英文),中文仅保留在
YAML 的 name:/注释(Gitea 按 UTF-8 读、不喂 PowerShell,安全)。
workflow 头部补该坑说明。已用脚本核验 run: 块内零非 ASCII。
2026-10-02 01:17:24 +08:00
wandering1 09e45573c8 CI:修正 workflow 的 shell 为 powershell(pwsh 不存在)
CI / L0 静态门禁 (pre-commit) (push) Failing after 17s
CI / L0.5 主机侧单测 (MSVC) (push) Failing after 16s
首次 CI 运行(run#1)两个 job 均失败于同一处:
  Cannot find: pwsh in PATH
根因:workflow 用 shell: pwsh(PowerShell 7,非 Windows 自带),
而 runner 所在机器只有 Windows PowerShell 5.1。

改为 shell: powershell(7 处)。已核验脚本无 PS7 独有语法
(无 ?? / ?: / && / || / -Parallel),PS 5.1 完全兼容。
workflow 头部补该坑说明,防止将来误改回 pwsh。

注:本次 CI 已验证 actions/checkout@v4 可从本实例正常拉取并
成功检出 v2-on-ui,action 拉取链路无需调整。
2026-10-02 01:11:45 +08:00
wandering1 3a90557078 文档:补 LastTaskResult 数值解读与健康判据
CI / L0 静态门禁 (pre-commit) (push) Failing after 22s
CI / L0.5 主机侧单测 (MSVC) (push) Failing after 16s
部署实测通过后补充:LastTaskResult 267009(0x41301) 是
SCHED_S_TASK_RUNNING(任务正在运行),并非错误,常驻任务常态值。
补 0/267011/267014 释义,并给出判断 runner 健康的三个真正指标
(进程存活 / declare successfully / Gitea 显示 Idle)。
2026-10-02 01:05:07 +08:00
wandering1 164fd3ec23 文档:修正 Runner 常驻方案为任务计划程序
实测确认 gitea-runner v4.0.1 的 daemon 是纯控制台程序,不含任何
Windows 服务管理代码(命令集仅 bug-report/cache-server/config/
daemon/exec/register,无 service.go),用 sc.exe 注册服务后
Start-Service 必然报错 1053。二进制内出现的 OpenSCManagerW/
CreateServiceW 等符号来自 Docker SDK,与服务安装无关。

- Gitea_Runner部署指南 §4 全节重写为任务计划程序方案:新增 §4.0
  根因分析、§4.2 一键脚本 deploy_runner_task.ps1、§4.3 手动命令
  (含 72h ExecutionTimeLimit 警示)、§4.5 清理遗留服务、§4.6 提权
- 排障表补错误 1053 / LastTaskResult 非 0 / 72 小时被杀 3 条
- 拓扑图、§5.1 PATH 运行账户、§7 日志位置、§10 TL;DR 同步更新
2026-10-02 01:01:11 +08:00
wandering1 018ee9527e 文档:补脚本编码坑(.ps1 需 UTF-8 BOM)
实测:无 BOM 的 UTF-8 .ps1 被 WinPS 5.1 按 GBK 解读,中文变乱码且撞坏引号配对,
报"源文本中包含无法识别的标记"/"字符串缺少终止符",报错行号无规律易误判为逻辑问题。

新增 §7.1:修法(重存为 UTF8BOM / 前缀 BOM 字节)+ 解析器语法校验命令;
排障表补该条目;三个配套脚本已统一加 BOM 并通过解析校验。
2026-10-02 00:45:34 +08:00
wandering1 c4768e98e3 文档:按 v4.0.1 实测修正 Gitea Runner 部署指南
实测发现 act_runner 已更名为 gitea-runner,发布页迁至 gitea.com/gitea/runner,
当前最新 v4.0.1,且 v4 移除了 daemon install/start/stop/status 子命令。

修正内容:
- §1 改为 gitea-runner v4.0.1 下载地址与文件名;新增 §1.3 命令集对照
- §3 修正 log 段(v4 无 file 键,改用 log.job.dir)+ config 子命令用法
- §4.2 常驻改用 sc.exe / New-Service(v4 无 daemon install)
- 新增 §4.5 提权硬约束(IsAdmin=False 时 New-Service 拒绝访问)
- 新增 §6.1 MySQL 直查核验 runner 在线状态
- 排障表补 4 条(accepts at most 0 arg / unknown config key / 拒绝访问 / WorkingDirectory)
- §10 TL;DR 与配套脚本清单同步
2026-10-02 00:39:51 +08:00
wandering1 c305a8dd20 文档:新增 Gitea Runner 部署指南(本机原生环境定制)
针对实测环境定制:Gitea 1.25.4 为 Windows 原生 gitea.exe(非 Docker)、
以服务运行、监听 0.0.0.0:3001、[actions] ENABLED=true 已开启。

覆盖 Runner 端全流程:下载 act_runner / register(--instance 用 127.0.0.1:3001 回环、
--labels "windows:host" 必须精确匹配 runs-on)/ config.yaml / daemon install 常驻 /
软件与 PATH 服务账号坑 / MSVC 标准路径约束 / 内网 action 零依赖改法 / 排障表。

附 check_env.ps1 一键环境自检脚本(落位 D:/Docker/act_runner/)。
关联更新:项目部署环境要求 §七 + 变更记录、测试开发标准流程 §9.4 + 关联文档表。

验证:check_doc_links --all 107 文档通过;本机工具链 Python/cppcheck/pre-commit/MSVC 四项全齐。
2026-10-02 00:29:45 +08:00
wandering1 52e6dcb009 文档:修正 CI 配置指南中 DEFAULT_ACTIONS_URL 说明
原 §1.2 示例把 DEFAULT_ACTIONS_URL 写成 https://gitea.com,易误导为该填自己的网址。
实际语义:它控制 action(如 actions/checkout@v4)的下载源——默认 github.com,
self = 从自己 Gitea 实例拉(需先把 action 镜像进实例),并非填实例域名。

新增 §1.2.1 专节(取值表 + 按网络环境选择 + 官方 FAQ 原文引用);
§4.3 同步修正(原文误写"gitea.com 代理"),并把零依赖 git 写法列为内网首选。
2026-10-02 00:12:15 +08:00
wandering1 1e01950b23 文档:新增 CI 配置指南(Gitea Actions 全流程)
新增 docs/环境与部署/CI配置指南.md:服务端 [actions] ENABLED 开关、
Windows runner(act_runner)注册(--labels "windows:host" 必须与 runs-on 对应)、
runner 软件环境与 PATH 要求(含 MSVC VS_ROOTS 路径约束)、workflow 位置与触发、
内网拉不到 actions/checkout 的三种处置、端到端验证清单、故障排查表、日常维护。

关联更新:项目部署环境要求 §七(相关文档 + 变更记录)、
测试开发标准流程 §9.4(指向配置指南)+ 关联文档表。

验证:check_doc_links --all 106 文档通过;scripts/ci_local.py rc=0(L0 + L0.5 全过)。
2026-10-01 23:59:28 +08:00
wandering1 e90486524d CI:Gitea Actions 落地 L0+L0.5(补 T-6)
新增 .gitea/workflows/ci.yml:push/PR 触发两个 Windows job——
l0-gates 跑 pre-commit --all-files(无 Keil .map 时自适应跳过 mem-numbers),
l05-host-unit-tests 遍历 test/host/**/run_unit_test.py(缺 MSVC 则告警降级跳过)。
刻意不跑 @build(需 Keil 授权);L1/L2/L3 需真机+ST-LINK,不上 CI。

新增 scripts/ci_local.py:本地跑与 CI 等价的门禁(自动选用装了 pre-commit
的解释器;.map 自适应;退出码 0/1/2 与 CI 对齐),供提交前自查与 runner 就绪前过渡。

文档同步:测试开发标准流程 §9(CI 章节)/§1/§4.1、待处理内容 T-6 销项、
项目部署环境要求 §2.11(runner 前置)、pre-commit 使用说明 §1、scripts/README.md、AGENTS.md。

验证:scripts/ci_local.py rc=0(L0 14 钩子全过 + L0.5 39/39)。
2026-10-01 10:19:38 +08:00