听风公开文章 Published Markdown 返回全部文章

文章 · OTHER

ET 项目剩余问题与本地工作目录变更全量说明

下载原始 Markdown 发布 2026-07-23 更新 2026-07-29 0 个随附资源 修订 20260729T063237Z-b51f0abdb7

ET 项目剩余问题与本地工作目录变更全量说明

初始生成时间:2026-07-24 01:33 +08:00

最新盘点刷新:2026-07-29 14:31 +08:00

2026-07-29 最新增量(先看这里)

下方 2026-07-24 内容保留为当时的 Git 快照;本节是当前代码审计进度, 优先级高于旧的“72/73、live probe 未跑、无第一方 .NET test”等描述。

已完成的非人工、非最终打包工作

  • 代码审计 task 4.10 已完成:6 秒静态 mutation reload 与 10 秒 movement write telemetry 均通过。
  • 保存指标:ordinary write 2、forced-exit write 1、retry 0; canonical save 和 .bak 已恢复到测试前 SHA-256。
  • Stage5-11、FormalInteraction、Input Command、UI Framework、Formal UI、 Core Survival Loop 的 UnityHarness ordered runtime chains 全部通过。
  • Unity EditMode 3/3、HUD PlayMode 3/3
  • AUD-005/011/012/020/021 五项 finding 的 7 个 runtime probe 7/7;完整编译链连续两次 30/30 + cleanup 4/4,最终 existing-assembly 复跑 26/26 + cleanup 4/4
  • AUD-011 已真跑 production HUD/authority pending、old Root disposal、 同 Fiber id replacement、durable inventory/stats reload、session ledger reset、旧 continuation 抑制、replacement health 与 EditMode 幂等 abort。
  • 第一方 .NET 测试项目已存在并通过 11/11
  • 静态批次 27/27;OpenSpec 60/0;npm audit 0;ConfigSource 23 表 / 112 行。
  • Trusted final rerun 为 29 passed / 1 passed_with_holds / 0 failed / 124 tests;普通失败为 0。
  • remediation ledger 当前为 20 verified / 5 implemented_unverified / 0 open / 0 in_progresslocal_auto_pending=0

本轮实际代码修复

  • ET 在 World.Dispose 前发布退出事件并 forced flush dirty save。
  • 修正 Stage5 malformed stack 断言、Stage8 GroundItem approach。
  • Candidate Button 接受正式 HUD source normalization。
  • settings/world-map 状态变化显式触发 HUD invalidation,Core Loop settings/restart probe 限定正式 PanelSurvivalHud 层级。
  • WorldTargetViewMarker 移入 Packages/cn.wildlands.game/Runtime/ViewBindings/ 独立程序集, Unity 已验证可解析并实际挂载。
  • AIHarness router 热点回归已修复为 2960 <= 2977,没有抬高阈值。

当前仍不能合并 main 的原因

  1. 并发引入的 com.unity.pipeline 在原始 PackageCache 下触发 CS0012 PreserveAttribute / Unity.Scripting;本轮临时验证 workaround 已按 SHA-256 撤销,未把绕过留在项目中。
  2. repository static audit 仍有已登记 HOLD: activeHigh=0holdHigh=5scopeGap=0mergeEligible=false
  3. 人工 UI/输入/视觉/手感尚未验收。
  4. Windows Player、HybridCLR、YooAsset smoke 与最终打包按用户决定延期。
  5. hosted CI、Player 异常强杀耐久和 terrain 最终 YooAsset lease 未闭合。
  6. 当前 D:\Project\ET 仍是脏工作树,staged 为 0;本轮没有 commit、 push 或 merge。
  7. 14 个 Unity Pipeline automation 路径属于独立 HOLD;它们不能与 AUD-011、本轮审计证据或地形检查点混成一个提交。

2026-07-29 最新 live git status --untracked-files=all 为 351 个文件路径: 70 modified、2 deleted、279 untracked、0 staged。普通折叠显示为 160 个状态 条目(未跟踪目录按目录折叠)。其中报告目录外为 331 个路径: 70 modified、2 deleted、259 untracked;其余 20 个是本审计报告目录中的 报告、ledger、JSON 清单和证据索引。该数字包含本轮新证据/测试项目和 automation/terrain/HOLD 工作,不反向改写下方 2026-07-24 的 90 路径快照。

本轮 git fetch --all --prune --tags 已成功。已刷新远端仍只有 origin/mainorigin/fix/code-audit-remediationorigin/design/world-terrain-rebaseline;后两者均相对 main ahead 1 / behind 2,merge-tree 无冲突但仍属于 HOLD。代码审计远端 checkpoint 不包含当前本地最终增量,不能把“无冲突”误写成“可合并”。 gh pr list --state open 同步返回 0 个开放 PR。

详细自动证据:

Docs/99_temp/code_audit_2026-07-10/remediation_evidence/unity_runtime_closeout_20260729.md

人工只需看:

Docs/99_temp/code_audit_2026-07-10/remediation_evidence/manual_runtime_acceptance_checklist.md

其中 A/B 自动组已完成,当前只需 C 组;D 组 Player/打包延期。

审计目录:D:\Project\ET

干净 main 工作树:D:\Project\ET_closeout_20260722

1. 文档目的与统计口径

本文把 ET 项目当前尚未进入 main 的问题、隔离分支、stash、本地 工作树变更、验证缺口和后续处理建议集中到一个 Markdown 文件中。

本文的源快照是在创建本文之前取得的:

  • D:\Project\ET 当时共有 90 个 Git 状态路径。
  • 其中 26 个为已跟踪但未暂存的修改,64 个为未跟踪文件。
  • Git index 为空,已暂存路径为 0。
  • 报告目录外共有 71 个路径,和 worktree_inventory.json 的既有清单逐路径完全一致。
  • 报告目录内共有 19 个路径,其中 9 个已经提交到 main,10 个是 按计划排除的原始日志或临时验证结果。

本文本身创建后会成为第 91 个未跟踪路径。它是本次明确要求生成的 报告产物,不属于待合并业务改动,也不改变上述 90 项源快照结论。

2. 一句话结论

允许进入 main 的闭环内容已经全部提交并推送;main 工作树干净。 D:\Project\ET 仍然不干净,但残余内容均已分类,没有发现新的未知 漂移。剩余内容由隔离分支检查点、高风险 HOLD、无提交价值噪声、 原始验证日志和只读 stash 构成,当前不能整体提交或批量清理。

3. 当前 Git 与远端状态

项目 当前状态 结论
远端 main fcb5fc63ca7a68df3c8c5ee1981877b7253c6391 已推送
本地 main origin/main 相同 对齐
main 工作树 D:\Project\ET_closeout_20260722,0 个状态路径 干净
当前工作目录 D:\Project\ET 脏工作树
当前分支 fix/code-audit-remediation 隔离检查点
当前 HEAD 69a0d9909b8150603f62bdd2878439cd3e8c67cf 已推送
当前 index 0 个 staged 路径 无待提交暂存
当前源快照 90 个状态路径 26 modified / 64 untracked
stash 3 个 只读保全
远端分支 mainfix/code-audit-remediationdesign/world-terrain-rebaseline 共 3 个
开放 PR 0 无待合并 PR

GitHub 当前比较结果:

分支 HEAD 相对最新 main 状态 是否进入 main
fix/code-audit-remediation 69a0d9909b ahead 1 / behind 2 diverged 禁止
design/world-terrain-rebaseline e11f1c1645 ahead 1 / behind 2 diverged 禁止

命令行 git fetch / git ls-remote 连接仍可能超时,但 GitHub 连接器已 重新确认远端最新 main、三个分支和 0 个开放 PR。

4. 已经进入 main 的闭环内容

当前 main 已包含:

  1. 11 个 2026-07-02 OpenSpec 历史归档。
  2. 可复用 UI Prefab 生产流程标准化。
  3. Stage12 动作状态、输入适配和 HUD Gate 3P 三批实现。
  4. Almanac 预览人工拒绝状态文档。
  5. 本轮全量 Git 收尾报告。

最后一个远端提交为:

fcb5fc63ca7a68df3c8c5ee1981877b7253c6391
docs(docs): 记录全量 Git 提交合并收尾

最近记录的 main OpenSpec 验证结果为 57 passed / 0 failed。本报告只 描述 Git 状态,不修改 OpenSpec、业务代码、Unity 资源或项目设置。

5. 剩余问题总览

优先级 问题 当前事实 处理决定
P0 代码审计 live save/movement 未闭环 72/73 任务完成,1 项 BLOCKED 保持隔离,不合并
P0 世界地形重基线未完成 16/252 完成,236 项未完成 保持隔离,不合并
P0 TMP 字体被破坏性清空 114 个 glyph/character 被清空,atlas 变为 1×1 重新生成或明确恢复
P0 Project/Editor/URP/Volume 设置漂移 会影响 Domain Reload、Player preload、渲染与 Volume 独立验证,不合并
P1 地形 Player-safe Resources 运行时过渡 4 个代码/文档路径未纳入地形检查点 补 Unity/Player 证据
P1 Editor 调试工具 Hierarchy/ScenePick 生命周期与状态恢复未闭环 独立任务
P1 Unity MCP 日志补丁 未真实触发 8 MB 轮转,缺节流/轮转 fixture 独立任务
P1 NativeList 兼容补丁 厂商嵌入包改动,缺目标 API、Burst、真实 IL2CPP 验证 独立任务
P2 3 个旧 stash 含独有和分歧内容 只读保留
P2 时间戳、EOL、unused using、空目录 meta 没有独立提交价值 不提交
P2 原始日志与历史证据 只用于追溯 不进入 main

6. 代码审计整改检查点

分支:fix/code-audit-remediation

提交:69a0d9909b8150603f62bdd2878439cd3e8c67cf

范围:相对共同基线共 283 个文件,约 +51,549 / -12,904

OpenSpec 任务状态:

模块 完成 未完成
规划与验证信任根 10 0
行为测试与 CI 骨架 9 0
Authority/协议/幂等/取消/async 10 0
保存协调与 crash consistency 9 1
Stage11/Stage12/资源 owner 10 0
依赖安全与 Cinemachine 8 0
热点文件拆分 6 0
全量验证与文档收尾 10 0
合计 72 1

唯一未完成的任务是 4.10

在真实 ET runtime 中运行 6 秒静态 mutation reload 与 10 秒 movement write probe,记录 bytes、write count、duration、retry 和 dirty-to-durable;普通写要求不超过 2 次,显式退出写不超过 1 次。

现有 checkpoint 验证执行了 104 项第一方断言/fixture,0 failed gate, 但整体状态仍是 partial,不能写成 release ready。

6.1 九个 Required Coverage Gaps

  1. dotnet-restore-sdk-subset:干净 Git 树缺 registry 提供的 cn.etetet 源文件,SDK restore 前置不完整。
  2. dotnet-build-sdk-subset:同一 registry 前置缺失,不能用局部项目 构建冒充完整 SDK 子集验证。
  3. dotnet-first-party-tests:没有可发现的 Microsoft.NET.Test.Sdk / IsTestProject 第一方测试项目。
  4. repository-static-audit:还没有稳定的 hosted 产品代码范围审计门; clean CI 的 ChangedOnly 为零文件,Full 又混入已知和 vendored finding。
  5. terrain-player-safe-reader-binding:ResourceNode/Flora consumer 迁移 仍归地形 change,代码审计分支只有 Player-safe 资源 promotion。
  6. unity-compile:缺 exact checkpoint 的 Unity assemblies 与 Wildlands runtime 编译证明。
  7. unity-first-party-tests:需要 Unity Test Framework runner;零测试不能 冒充通过。
  8. unity-harness-runtime:缺 live Unity Editor、PlayMode、动作断言和 cleanup 的完整队列证据。
  9. player-smoke:缺 exact checkpoint 的实际 Player build、启动、 资源加载和玩法 smoke。

6.2 为什么仍禁止合并

九个 required gaps 与任务 4.10 的 live probe 尚未闭合;分支又已落后 main 两个提交。正确顺序是先补环境和运行证据,再重基最新 main,重新 执行 staged-diff 同级验证,最后才讨论合并。

7. 世界地形重基线检查点

分支:design/world-terrain-rebaseline

提交:e11f1c16454737638f1d643e7c5ec507d4d8af6a

该分支保存 37 个规划和 Wave0 证据路径。当前不是完成实现,而是 规划/基线检查点。

任务区 完成 未完成 总数
Program 控制、审批与证据边界 9 1 10
Wave0 环境/基线/Design Metrics 6 9 15
五个下游 OpenSpec change 与 owner 0 47 47
C1-Foundation 0 18 18
Camera/LOD/View readiness 0 16 16
Scheduler/Worker/Pool/Asset Lease 1 29 30
Terrain/Water/Decor/资源批次 0 45 45
C1-Ecology 0 16 16
集成/Cutover/Legacy Removal/验收 0 35 35
文档/Enduring Specs/归档 0 20 20
合计 16 236 252

主要阻塞包括:

  • 正式存档隔离尚未获准并闭环;不得直接运行 freshEnter 或 movement。
  • camera live readback、A/B runtime、九组合 capture 尚未完成。
  • renderer migration 缺正式 Billboard 资源,legacy resolver 仍有 Standard fallback。
  • cold/warm、20-chunk、往返、Profiler 和 canonical gameplay capture 尚未运行。
  • Stage12 与 code-audit owner/handoff 尚未完全冻结。
  • 五个下游 change 大多尚未创建或批准。
  • reviewer roster、display conditions 和 Wave0 人工批准未闭合。
  • Player/HybridCLR 子门当前是用户批准的 Deferred + Not Run,它不是 当前地形功能依赖,也不能被误写成 Passed。

因此地形分支只能作为恢复点,不能 cherry-pick 或 merge 到 main。

8. 报告目录外 71 个本地路径的完整分类

Owner 数量 实际含义
ALREADY_ON_MAIN 8 当前分支显示脏,但文件内容已在 main
CHECKPOINT_WORLD_TERRAIN_REBASELINE 37 已保全到地形隔离分支
HOLD_INDEPENDENT_HIGH_RISK 13 独立高风险改动
HOLD_WORLD_TERRAIN_RUNTIME 4 地形运行时过渡,未纳入规划检查点
HOLD_LEGACY_EVIDENCE 3 历史证据
HOLD_VOLATILE_VALIDATION_TIMESTAMP 3 仅时间戳变化
HOLD_NO_SEMANTIC_CHANGE 2 无语义变化
HOLD_EMPTY_UNITY_FOLDER 1 空目录 meta
合计 71 无重复、无未分类

其中 disposition 为:

  • already_merged_worktree_copy:8。
  • preserved_on_isolation_branch:37。
  • hold:21。
  • do_not_commit_timestamp_only:3。
  • do_not_commit_noise:2。

8.1 已经在 main 的 8 个工作树副本

这些路径不需要再次提交。它们之所以仍显示修改或未跟踪,是因为 D:\Project\ET 当前停留在落后 main 两个提交的代码审计分支。

状态 路径
M Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs
M Docs/03_art/a01_asset_production/_registry/art-development-todolist.md
M Docs/03_art/a01_asset_production/ui/AlmanacPanel_Lite/AssetRequest.yaml
M Docs/03_art/a01_asset_production/ui/AlmanacPanel_Lite/handoff.md
M Docs/03_art/a01_asset_production/ui/AlmanacPanel_Lite/prefab_contract.yaml
M Docs/03_art/a01_asset_production/ui/AlmanacPanel_Lite/README.md
?? Docs/03_art/a01_asset_production/ui/AlmanacPanel_Lite/validation/gate8_human_visual_review_rejected_2026-06-16.md
M ProjectSettings/HybridCLRSettings.asset

这些文件的工作树 blob 已与 main 一致。对它们再次 git add 只会增加 误操作概率,不会产生新的业务价值。

8.2 已保全到地形隔离分支的 37 个路径

以下路径全部存在于 design/world-terrain-rebaseline@e11f1c1645,不需要从当前脏树再次 抢救。它们仍不能进入 main,因为地形 program 只有 16/252 完成。

证据与 Wave0 文档,共 15 个:

  1. Docs/99_temp/world_terrain_rebaseline/INDEX.md
  2. Docs/99_temp/world_terrain_rebaseline/program-control-validation.md
  3. Docs/99_temp/world_terrain_rebaseline/program-ledger.md
  4. Docs/99_temp/world_terrain_rebaseline/streaming/loader-lifecycle-preflight.md
  5. Docs/99_temp/world_terrain_rebaseline/wave0/1-1.md
  6. Docs/99_temp/world_terrain_rebaseline/wave0/1-10.md
  7. Docs/99_temp/world_terrain_rebaseline/wave0/1-11.md
  8. Docs/99_temp/world_terrain_rebaseline/wave0/1-12.md
  9. Docs/99_temp/world_terrain_rebaseline/wave0/1-15.md
  10. Docs/99_temp/world_terrain_rebaseline/wave0/1-2.md
  11. Docs/99_temp/world_terrain_rebaseline/wave0/1-3.md
  12. Docs/99_temp/world_terrain_rebaseline/wave0/1-4.md
  13. Docs/99_temp/world_terrain_rebaseline/wave0/1-5.md
  14. Docs/99_temp/world_terrain_rebaseline/wave0/1-6.md
  15. Docs/99_temp/world_terrain_rebaseline/wave0/screenshots/task-1-1-channel.png

OpenSpec program、review、tasks 与 12 个 capability delta,共 22 个:

  1. openspec/changes/wildlands-world-terrain-rebaseline/.openspec.yaml
  2. openspec/changes/wildlands-world-terrain-rebaseline/delta-spec-review.md
  3. openspec/changes/wildlands-world-terrain-rebaseline/design-review.md
  4. openspec/changes/wildlands-world-terrain-rebaseline/design.md
  5. openspec/changes/wildlands-world-terrain-rebaseline/planning-full-audit-2026-07-12.md
  6. openspec/changes/wildlands-world-terrain-rebaseline/proposal.md
  7. openspec/changes/wildlands-world-terrain-rebaseline/specs/camera-covered-world-presentation/spec.md
  8. openspec/changes/wildlands-world-terrain-rebaseline/specs/layered-terrain-visual-system/spec.md
  9. openspec/changes/wildlands-world-terrain-rebaseline/specs/predictive-budgeted-world-streaming/spec.md
  10. openspec/changes/wildlands-world-terrain-rebaseline/specs/resource-node-visual-config-lite/spec.md
  11. openspec/changes/wildlands-world-terrain-rebaseline/specs/terrain-mesh-chunk-rendering/spec.md
  12. openspec/changes/wildlands-world-terrain-rebaseline/specs/terrain-quality-observability/spec.md
  13. openspec/changes/wildlands-world-terrain-rebaseline/specs/terrain-tiles-assetforge-pilot/spec.md
  14. openspec/changes/wildlands-world-terrain-rebaseline/specs/wildlands-art-tech-baseline/spec.md
  15. openspec/changes/wildlands-world-terrain-rebaseline/specs/wildlands-world-carrier/spec.md
  16. openspec/changes/wildlands-world-terrain-rebaseline/specs/wildlife-visual-config-lite/spec.md
  17. openspec/changes/wildlands-world-terrain-rebaseline/specs/world-ecology-placement-context/spec.md
  18. openspec/changes/wildlands-world-terrain-rebaseline/specs/world-spatial-layer-contract/spec.md
  19. openspec/changes/wildlands-world-terrain-rebaseline/tasks-coverage.md
  20. openspec/changes/wildlands-world-terrain-rebaseline/tasks-review.md
  21. openspec/changes/wildlands-world-terrain-rebaseline/tasks.md
  22. openspec/changes/wildlands-world-terrain-rebaseline/terrain-current-state-audit.md

8.3 尚未进入地形检查点的 4 个运行时路径

状态 路径 实际变化
M Docs/02_modules/wildlands-flora-lifecycle.md 文档改为 Player-safe Resources.LoadAll<Sprite> 过渡说明
M Docs/02_modules/wildlands-world-carrier.md 增加 ResourceNode/Flora Resources 镜像和显式失败约束
M Packages/cn.wildlands.game/Scripts/HotfixView/Share/Client/Runtime/Survival/SurvivalPresentationComponentSystem.cs 删除 Application.dataPath、文件读盘和运行时 PNG 解码;改用 Resources,并对缺 key、缺 Sprite、状态不完整显式抛错
M Packages/cn.wildlands.game/Scripts/ModelView/Share/Client/Runtime/Survival/SurvivalPresentationComponent.cs 删除运行时 Texture 与透明空 Sprite 缓存字段

这组改动方向上是在消除 Editor-local 读盘与静默 fallback,但它依赖 代码审计分支 promotion 的 Assets/Resources/Wildlands/Terrain/ResourceNodesFlora 资源。 它还没有被完整纳入地形 OpenSpec 检查点,也没有完成 exact Unity import、缺资源负例、PlayMode、Player 资源加载与最终 YooAsset group/lease 验证。因此当前只能 HOLD。

8.4 独立高风险 HOLD:13 个路径

TMP 字体破坏性变化

路径:

  • Assets/Art/UI/A01/HuangliPage_Golden/Fonts/HuangliPreviewChinese SDF.asset

实际变化是 114 个 glyph/character 被清空,2048×2048 atlas 被重置为 1×1。该字体 GUID 被黄历页面 Prefab 实际引用。这不是普通 Unity 重序列化;直接提交会导致中文文本缺字。建议优先从确定的字符集重新 生成 TMP Font Asset,完成页面导入、Console、字符覆盖和 Player 显示验证后再处理;如确认误操作,则单独批准恢复。

Editor 与 Player 设置漂移

路径:

  • ProjectSettings/EditorSettings.asset
  • ProjectSettings/ProjectSettings.asset

EditorSettings.asset 开启了 Enter Play Mode Options,并设置为禁用 Domain Reload,序列化版本从 11 升到 16,同时伴随纹理压缩、缓存和 GC 等设置变化。ET 中存在大量 static 状态,需要分别在 Domain Reload 开启/关闭时连续至少两次进入/退出 PlayMode,验证静态集合、事件、缓存 和 singleton 不残留。

ProjectSettings.asset 删除了两个 preload 项,并显式开启 Standalone static batching,同时调整 dynamic batching。两个 preload GUID 静态 搜索未找到所有者,但不能仅凭此认定删除安全;需要 Unity 读取、 Player build 和启动 smoke。

URP、Graphics 与默认 Volume 迁移

路径:

  • ProjectSettings/GraphicsSettings.asset
  • Assets/UniversalRenderPipelineGlobalSettings.asset
  • Assets/DefaultVolumeProfile.asset

这三个路径必须原子审查。Render Pipeline GUID 没有改变,但 URP Global Settings 的 runtime settings 从空变为 15 组资源,涉及默认 Volume、 Terrain、XR、RenderGraph 和 Shader stripping;Default Volume 从接近 空配置变为 19 个后处理组件和大量 overrideState;GraphicsSettings 还 增加 Unity 6 图形状态收集、Shader Warmup、缓存追踪和默认 Light Baker 字段。需要强制 import、Console、Volume Stack 对比、Shader 构建、 目标场景视觉截图和 Windows Player smoke;来源未确认前不得当作升级 重序列化提交。

Editor 调试工具

路径:

  • Assets/Editor/HierarchyVisibilityEye.cs
  • Assets/Editor/A01ScenePickInspectorWindow.cs
  • Assets/Editor/A01ScenePickInspectorWindow.cs.meta

HierarchyVisibilityEye 从简单显隐按钮扩展为约 960 行的 PlayMode 调试覆盖系统,增加强制激活、隐藏、Ghost、组件启停和状态恢复,并持有 static mutable collection。A01ScenePickInspectorWindow 是约 69 KB、 1,769 行的独立场景拾取/隔离调试窗口,支持候选拾取、A/B 属性比较、 框选和禁用场景拾取;它会调用 DisablePicking,但窗口关闭路径没有 可靠证明一定执行 ResetPicking。仍需验证 picking、selection、 isolation、场景切换、Prefab Stage、脚本重编译、窗口关闭和 Editor 重启时状态是否完整恢复。已有 Editor assembly 编译证据不能代替 Domain Reload 和真实交互生命周期验证。

Unity MCP 日志治理

路径:

  • Packages/com.coplaydev.unity-mcp/Editor/Helpers/McpLog.cs
  • Packages/com.coplaydev.unity-mcp/Editor/Services/Transport/Transports/StdioBridgeHost.cs
  • Docs/99_temp/unity_mcp_log_growth_mitigation_2026-07-03.md

该补丁降低 Console stacktrace 与高频连接日志,并实现每分钟额度和约 8 MB 日志轮转。真实运行观察中 mcp-unity.log 约 1.82 MB,重复 ReadFrame/ReadExact 堆栈已经消失,但当前日志尚未达到 8 MB,因此 没有实际触发轮转;同步逐条追加、静默吞掉写入失败、Info 与 Debug 共用额度、只读目录、文件锁、超长单条消息和突发连接等边界也需要 fixture。建议独立分支 fix/unity-mcp-log-growth,并先决定升级 Unity MCP 后重放补丁,还是 继续固定当前包版本。

NativeList 兼容补丁

路径:

  • Packages/com.unity.collections/Unity.Collections/NativeList.cs

补丁通过 ENABLE_UNITY_COLLECTIONS_CHECKSENABLE_IL2CPP 条件分支处理 Editor 三参数和 Mono Player 两参数的 AtomicSafetyHandle / NativeArray<T>.ReadOnly 构造签名差异。已有 Editor/Mono/IL2CPP define 编译路径和 Mono Windows Development Player 证据,但它修改的是嵌入式 Unity Collections 厂商源码,仍缺 AsReadOnly/AsParallelReader 定向 fixture、Burst/Jobs 与真实 IL2CPP Player。建议独立分支 fix/unity-collections-native-list-compat,并记录从嵌入 6.4.0 回归 官方兼容版本的退出条件。

8.5 历史证据:3 个路径

以下文件用于追溯旧 UI/审计状态,但不属于当前任一闭环提交:

  1. Docs/99_temp/a01_project_progress_audit_2026-07-02.md
  2. Docs/99_temp/HUD_Main_V2_AI_Goal_完整流程规划_2026-07-15.md
  3. Docs/99_temp/stage12_gate_status_overview_2026-07-02.html

建议继续留在本地证据区,后续如需长期保存,应在独立文档归档任务中 确认内容、时效和引用关系,不要混入代码提交。

8.6 仅时间戳变化:3 个路径

  1. Docs/03_art/a01_asset_production/ui/HUD_Main_V2/validation/formal_integration/formal_playmode_smoke.json
  2. Docs/03_art/a01_asset_production/ui/HUD_Main_V2/validation/repro/repro_playmode_smoke.json
  3. Docs/03_art/a01_asset_production/ui/HUD_Main_V2/validation/runtime/playmode_smoke.json

三个 JSON 只有 generatedAtUtc 变化;移除时间戳后内容与已提交证据 一致。它们不应单独提交。只有重新运行同一正式验证并产生新的实质结果 时,才与对应证据批次一起更新。

8.7 无语义变化:2 个路径

路径 变化 建议
Packages/cn.wildlands.game/Scripts/Model/Share/Runtime/PlayerInputCommandComponent.cs 只增加未使用的 using System; 不提交
Docs/02_modules/player-input-command.md 只补文件末尾换行 不单独提交

此外,DOTween 与 HybridCLR 两个显示修改的路径已在 8.1 中归为 ALREADY_ON_MAIN,其当前工作副本没有需要提交的新文本差异。

8.8 空 Unity 目录 meta:1 个路径

路径:

  • Assets/UI/Common/Preview/HUD_Main_V2/Runtime.meta

Preview Runtime 已迁到 Player/AOT-safe package;对应目录为空,当前没有 需要保留的正式运行时资产。该 meta 不应进入 main。删除属于显式清理 动作,必须在新的小任务中确认目录、GUID 引用和 Unity 可见性后执行, 不能在当前脏树中顺手删除。

9. 收尾报告目录的 19 个源快照路径

路径前缀:

Docs/99_temp/git_closeout_2026-07-22/

这些文件在当前代码审计分支中显示为未跟踪,是因为该分支的共同基线 早于最终报告提交。它们分为两类。

9.1 已经进入 main 的 9 个核心报告

以下工作副本与 main@fcb5fc63ca7a68df3c8c5ee1981877b7253c6391 中对应 blob 一致:

  1. Generate-CloseoutReports.ps1
  2. INDEX.md
  3. branch_inventory.json
  4. branch_inventory.md
  5. staging_manifest.json
  6. stash_audit.json
  7. stash_audit.md
  8. validation_ledger.md
  9. worktree_inventory.json

它们不需要从当前分支再次提交。

9.2 按计划不进入 main 的 10 个原始证据

  1. a01_static_audit_changedonly.md
  2. hud_formal_ui_stage12_only_round2.err.log
  3. hud_formal_ui_stage12_only_round2.log
  4. hud_runtime/formal_ui_validation_p0.stderr.log
  5. hud_runtime/formal_ui_validation_p0.stdout.log
  6. hud_runtime/unity_batch_rebuild_validate_20260723.log
  7. hud_runtime/unity_mcp_http.stderr.log
  8. hud_runtime/unity_mcp_http.stdout.log
  9. ui_temp_scaffold_determinism.json
  10. ui_temp_scaffold_validation.json

这些是原始日志、stderr/stdout 或临时 scaffold 结果。核心报告已经提炼 其结论;把原始文件加入 main 会增加噪声和仓库体积,没有长期真源价值。

9.3 本文是新增的明确交付物

本文路径为:

Docs/99_temp/git_closeout_2026-07-22/ET_remaining_issues_and_worktree_changes_2026-07-24.md

它在 90 项源快照之后创建,因此创建后 D:\Project\ET 会显示 91 个 状态路径。新增的 1 项只有本文,不代表业务/证据工作树产生了未知漂移。 用户已明确要求生成并发布本文,但没有要求执行 Git commit 或 push, 所以本文保持未暂存。

10. 三个 stash 的状态与风险

策略始终是:不 apply、不 pop、不 drop,只做只读审计和引用保全。

stash 日期 tracked / untracked 审计结果 当前动作
stash@{0} 2026-05-22 21:55 +08:00 3 / 0 3 个均与当前工作树相同 HOLD
stash@{1} 2026-05-19 21:29 +08:00 44 / 87 78 个同工作树、21 个 stash-only、5 个相对 HEAD/工作树独有、27 个相对 main/工作树独有 HOLD
stash@{2} 2026-05-01 12:07 +08:00 12 / 75 49 个同工作树、33 个 stash-only、1 个双向分歧、2 个相对 HEAD/工作树独有、2 个相对 main/工作树独有 HOLD

stash@{1}stash@{2} 明确含当前工作树没有保留的独有内容。直接 apply 到 91 项脏树可能产生覆盖、冲突或把多个历史任务混在一起。

已有只读本地引用分支:

  • chore/stash-audit-20260522
  • chore/stash-audit-20260519
  • chore/stash-audit-20260501

后续如需恢复,应该为每个 stash 单独创建干净 worktree,以引用分支和 逐路径 blob 对比为起点,只恢复用户明确批准的文件。

11. 本地分支与 worktree

本地分支 HEAD 角色 当前建议
main fcb5fc63c 正式基线 保持干净
fix/code-audit-remediation 69a0d9909b 代码审计检查点;绑定 D:\Project\ET 补门前不合并
design/world-terrain-rebaseline e11f1c1645 地形规划/Wave0 检查点 236 项未完成,不合并
chore/git-closeout-20260723 7192e50f58 旧收尾本地分支 后续确认无独有内容再清理
chore/stash-audit-20260522 c1bb4934ce stash 只读引用 保留
chore/stash-audit-20260519 34614cb1d0 stash 只读引用 保留
chore/stash-audit-20260501 87554f6865 stash 只读引用 保留

当前只保留两个 worktree:

  1. D:\Project\ET:代码审计分支,包含未提交/HOLD 工作副本。
  2. D:\Project\ET_closeout_20260722:main,干净。

12. 禁止执行的操作

在没有新的分批计划和显式批准前,不要执行:

git add -A
git commit -a
git stash pop
git stash apply
git stash drop
git clean -fd
git reset --hard
git checkout -- .

原因不是这些命令本身错误,而是当前目录同时承载:

  • 已进入 main 的旧分支工作副本。
  • 已推送到地形分支的规划检查点副本。
  • 未进入任何检查点的地形 runtime 过渡。
  • 独立 Editor/MCP/Collections/ProjectSettings 高风险改动。
  • 历史证据、时间戳和无语义噪声。
  • 含独有内容的三个 stash。

宽泛暂存会把不同 owner 和不同验证等级混成一个提交;宽泛清理则可能 删除尚未得到独立保全批准的内容。

13. 建议的后续执行顺序

第一阶段:保持 main 可用

所有正式 main 操作继续在 D:\Project\ET_closeout_20260722 执行。不要在代码审计脏树直接切换 main,也不要为了“看起来干净”而重置。

第二阶段:先收口代码审计

  1. 恢复 registry 提供的 cn.etetet SDK 前置。
  2. 建立可发现的第一方 .NET test project 和稳定产品范围静态门。
  3. 在 exact checkpoint 上完成 Unity compile、Unity tests、 UnityHarness runtime 和 Player smoke。
  4. 运行任务 4.10 的 6 秒 mutation/reload 与 10 秒 movement write probe。
  5. 关闭九个 required gaps,并确认 73/73。
  6. 在干净工作区将分支重基到最新 main。
  7. 按 staged diff 重新运行完整验证,之后才请求合并。

第三阶段:继续地形 Wave0

  1. 先建立可恢复的正式存档隔离方案,并取得显式授权。
  2. 完成 camera、cold/warm、movement、control、lighting、Profiler 和 canonical capture。
  3. 关闭 Stage12/code-audit owner handoff。
  4. 完成 reviewer roster 与 Wave0 人工批准。
  5. 创建并批准 C1-C5 五个下游 changes。
  6. 按依赖图实施剩余 236 项。
  7. 最终同步 enduring specs、验证并归档。

第四阶段:拆分独立高风险任务

建议至少拆成下列独立任务,彼此不混合:

  1. fix/editor-debug-tools-lifecycle
  2. fix/unity-mcp-log-growth
  3. fix/unity-collections-native-list-compat
  4. chore/unity-project-settings-migration-audit
  5. fix/huangli-tmp-font-regeneration
  6. fix/terrain-player-safe-resource-consumer

每个任务都应有自己的 include/exclude 路径、Unity/Player 验证和回滚点。

第五阶段:最后处理噪声、历史证据和 stash

  • 时间戳、unused using、末尾换行和空 meta 应在独立清理批次中逐项 确认,不要制造没有业务意义的提交。
  • 历史证据先决定是否归档,再决定是否提交。
  • stash 只在新的干净 worktree 中逐个恢复和比对。
  • 所有保全完成后,才判断旧本地分支和只读引用是否可以删除。

14. 本文验证过什么

本次为只读 Git/文档审计,实际复核了:

  • D:\Project\ET 源快照 90 项:0 staged、26 tracked modified、 64 untracked。
  • 报告目录外 71 个路径与既有 inventory 的路径、状态、大小和修改时间 均无快照后漂移。
  • 71 个路径的 owner/disposition 数量为 8 + 37 + 13 + 4 + 3 + 3 + 2 + 1。
  • 报告目录原有 19 项精确分为 9 个 main 核心报告和 10 个 raw excluded。
  • main 工作树为 0 个状态路径。
  • 远端 main 为 fcb5fc63c,远端分支共 3 个,开放 PR 为 0。
  • 两个隔离分支相对 main 均为 ahead 1 / behind 2。
  • 代码审计 tasks 为 72/73,trusted validation 为 104 tests、 0 failed、9 required gaps。
  • 地形 tasks 为 16/252,剩余 236。
  • stash 数量为 3,且 stash@{1} / stash@{2} 含独有内容。

本文没有重新运行 Unity Editor、PlayMode、Player build、IL2CPP、Burst、 Profiler、存档 mutation/movement probe 或地形人工视觉验收。已有证据在 对应章节被明确标注为“已有但不足”或“尚未运行”,没有把编译、静态检查 或历史日志冒充当前 runtime 通过。

15. 最终处置矩阵

类别 是否已保全 是否可提交 是否可合并 main 下一步
main 闭环内容 已提交 已完成 保持 main 干净
代码审计检查点 分支已推送 检查点已提交 关闭 9 gaps + live probe
地形规划/Wave0 分支已推送 检查点已提交 完成剩余 236 项
地形 runtime 过渡 仅工作树 当前否 纳入正式 owner 并做 Unity/Player 验证
Editor 调试工具 仅工作树 当前否 独立生命周期任务
Unity MCP 日志 仅工作树 当前否 独立 fixture 与版本决策
NativeList 仅工作树 当前否 定向 API/Burst/IL2CPP 验证
Settings/URP/Volume/TMP 仅工作树 当前否 来源确认、恢复或正式迁移
时间戳/无语义/空 meta 本地可见 不建议 独立清理
历史/raw evidence 本地可见 默认否 归档决策
stash 引用分支保全 干净 worktree 逐个审计
本文 本地文件 + 网站发布 用户未要求 Git 提交 作为阅读与交接入口

16. 当前最终判断

main 是干净、已推送、可继续开发的正式基线。

D:\Project\ET 不是待“一次性提交”的功能分支,而是一个同时保留多类 历史和高风险工作副本的隔离现场。它现在最重要的价值是保全证据,不是 追求表面上的 git status 干净。

只有代码审计和地形两条主线完成各自的运行门、重基和 staged-diff 验证, 独立高风险改动完成逐项来源确认与 Unity/Player 证据后,才适合继续缩减 本地残余。当前最安全、最准确的状态是:main 干净,隔离内容完整保全, 未知路径为零,但仍有明确未完成工作。