Files
envi-code/AGENTS.md
T
company-desktop 6559cdf6f5 docs: 记录 Phase 0 实测结果、AutoCAD 自动化实测环境与属性 key 的取舍
Phase 0 在本机跑通(big1.dwg / AutoCAD 2020 / R230 Debug,开图 108 s):

  RegionTexts=5641  UniqueHashes=2597  SimulatedHits=3044  HitRate=54.0%
  TempFiles=6773  TempBytes=9,341,125  WriteBacks=1140
  CoreTools::StringToRegion  2559 次  14.6 s  平均 5.7 ms  最长 321 ms
  EwPipe::RegionAcisIn       3082 次   8.3 s  平均 2.7 ms
  EwPipe::RegionAcisout      1140 次   2.3 s  平均 2.0 ms

结论:一次开图做 5641 次 SAT 恢复,共 22.9 s(约占 108 s 的 21%)。
此前基于 CPU 采样的估算只有 550~1000 次,低估了 5~10 倍——说明采样只能算占比,
算不出调用次数,这类结论必须靠计数器。
按 54% 命中率折算,Phase 1 缓存净省约 12 s(约 11%),并少约 4000 次临时文件写盘。

同时记录三个待追查项:命中率为何只有 54%、StringToRegion 为何比 RegionAcisIn 贵一倍、
开图期间为何回写 1140 次 SAT。

文档里补充了"用管子属性做 key"的思路与风险:属性相同则截面相同,业务上成立,
但不能单独当 key——DWG 里的 SAT 文本可能来自旧版本/旧路径/手工编辑的异形截面,
属性漏一项就会静默复用错误几何。若要做,采用 L1 内容 hash + L2 属性 key 的两级结构,
L2 命中后仍比对 textHash,不一致按 miss 处理;落地前先加一路属性 key 命中率计数比较。

另外新增 tools/run_acad_perf.ps1 并在 AGENTS.md 记录本机 CAD 实测环境:
acad.exe 路径、/p SHS-ENVI2026 启动参数、测试图纸、部署目录,
以及"PowerShell 5.1 把无 BOM 的 UTF-8 当 ANSI 读"这个坑(脚本保持 ASCII)。

验证:文档与脚本;脚本语法检查通过,本次实测就是用它的等价命令跑出来的。
2026-10-28 19:52:18 +08:00

4.0 KiB
Raw Blame History

AGENTS.md — Envi3D 2026(环境设计)

本文件由 pi 自动加载。完整的项目说明在 CODEBUDDY.md(构建、preset、加密双版本、模块分组、架构分层)。 动手改代码前先 read CODEBUDDY.md。这里只放 pi 环境差异和硬性红线。

pi 环境说明

  • 内置工具只有 read / write / edit / bash,没有独立的 grep / glob / web 工具: 搜索一律在 bash 里用 rg,联网靠 curl 或额外插件。
  • 超长文件用 read 的 offset / limit 分段读: AecDbEwFitting.cpp 17453 行、AecDbEwEquipment.cpp 14290 行、AecDbEwPipe.cpp 5002 行。
  • 类名与文件名不一定一致,搜之前先 rg -n "ACRX_DXF_DEFINE_MEMBERS" <文件> 确认 (例:AecDbSlab.cpp 里的类叫 AecDbXSlab)。

红线(违反了会污染仓库或造成不可逆损坏)

  1. 源码编码:SourceCode/Code2026/**/*.cpp|*.h 必须是 UTF-8 with BOM; cmakelists.txt / CMakeLists.txt 保持 ASCII 无 BOM。 中文写坏不可逆,只能 git checkout HEAD -- <file> 还原后重做。
  2. 禁止新增或依赖 .vcxproj / .sln(StartApp/StartApp.sln 是唯一例外)。 cmake_output/ 下的 *.vcxproj 是构建产物,不要提交。
  3. 不要直推 main,推送走 git push origin HEAD:refs/for/main/<分支名> 触发评审。
  4. commit message 用中文。
  5. 文件内私有函数放该文件已有的匿名 namespace;不要写文件级 static,不要放头文件。
  6. 平台判断用 #ifdef ZWCAD,不要只比较 ARX 版本号(ZRX 的 ARX 宏与 AutoCAD R 版本数值重叠)。
  7. Arx/、ZRX/、bin/、lib/、cmake_output/ 已被 gitignore,不要手动加进来。

动手前

  • 本仓库没有单元测试框架、没有 lint 配置:验证方式 = 编对应 preset + 在 CAD 里加载实测。
  • 大改动先读仓库根目录已有的分析文档(*-review.md / *-plan.md / *-analysis.md), 里面记录了很多"已经决定不做"的理由,别重复踩。
  • 构建命令与 target 对照见 CODEBUDDY.md,或直接用 skill build-arx。

自动化 CAD 实测

可以无人值守跑一次「开图 → 执行命令 → 收结果 → 关进程」。本机环境:

项 值
AutoCAD c:\Program Files\Autodesk\AutoCAD 2020\acad.exe(= R23.0,对应 preset R230)
启动参数 /p SHS-ENVI2026(试验用 profile,会自动加载本仓库的 arx)
测试图纸 e:\桌面\big1.dwg(约 8 MB,一次开图 ≈ 108 s)
部署目录 c:\ShangHuaSoft\Envi3D-2026-M\R230\(Debug 构建会自动部署到这里)

一键脚本:tools/run_acad_perf.ps1

powershell -NoProfile -ExecutionPolicy Bypass -File tools\run_acad_perf.ps1

它的做法:写一个只含 ENVIPERFDUMP 的 .scr,用 /b 让 AutoCAD 在图纸载入完成后执行; 报告落 %TEMP%\aec_section_perf.txt;收完报告按 PID 结束本次拉起的 acad, 脚本里不写 QUIT,所以不会弹保存对话框、不会回写图纸。

写这类 .ps1 时注意:Windows PowerShell 5.1 把无 BOM 的 UTF-8 当 ANSI 读, 带中文会直接语法错误——要么保存为 UTF-8 with BOM,要么脚本全用 ASCII(推荐)。

需要用户决策时

不要把问题打在终端里就停住——先跑 tools/notify_decision.ps1(用 -MessageFile 传中文), 发完 toast 再结束本轮。细则见 skill notify-decision。

仓库内 skill

skill 用途
build-arx 按 preset 编译、单 target、产物与部署路径
verify-utf8 UTF-8 BOM 自检、写坏后的回滚
pr-flow 分支命名 / 中文 commit / refs/for/main 推送
analyze-big-entity 万行实体类的分析与改动套路
notify-decision 需要用户拍板时主动推送通知(桌面 toast / IM 机器人),不让他干等终端

使用说明(常用命令、会话管理、Windows 终端问题、多机同步、插件取舍)见 pi-agent-setup.md。