.scratch 面板原子写击穿This was generated by AI during triage.
Status: resolved Labels: ready-for-agent Category: bug Blocked by: None
npm run dev 运行期间,issue tracker 面板(或任何对 .scratch/** 的原子改名式写入)保存单据时,Vite 文件监视器抛出 EBUSY,dev server 整个进程退出。
实测复现一次(决策地图收口当轮):面板对 map.md 做原子写,产生临时目录 .map.md.<pid>.<guid>.tmpdir/map.md.tmp,chokidar 在 Windows 上 watch 该锁定路径失败:
Error: EBUSY: resource busy or locked, watch '...\.scratch\web-cockpit-decision-map\.map.md.<pid>.<guid>.tmpdir\map.md.tmp'
at createFsWatchInstance (vite .../dep-*.js)
npm run dev(起在 8000)。.scratch/**/map.md 或票据(触发原子写)。viteOption 已有 server(proxy/headers),watch 默认监视整个项目根,.scratch 在树内。高置信(有栈有路径):Vite dev 的 chokidar 未排除 .scratch/**;面板原子写在 Windows 上生成短寿命锁定 tmp 路径,chokidar 遇 EBUSY 抛未捕获错误拖垮 watcher。
.fes.js 的 viteOption.server 内增加:
watch: { ignored: ['**/.scratch/**'] }
.map.md.<pid>.<guid>.tmpdir/map.md.tmp 模式),服务器全程存活,HTTP 200。src/** 文件)仍然正常。—— touch src/modules/cockpit/domain/panelCatalog.js 后 Vite 日志记录 page reload,模块重取 200。src、public 保持监视)。—— 配置只新增 **/.scratch/** 一条;已核 Vite resolveChokidarOptions:用户 ignored 与默认 ignore(node_modules/.git/cacheDir)合并而非覆盖。已修复并验证。改动:.fes.js 的 viteOption.server 内新增 watch: { ignored: ['**/.scratch/**'] }(含注释说明合并语义)。此后面板随时保存单据都不会击穿 dev server,T01 人工审查与后续各票验收可在面板开着的情况下进行。