# 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_progress`，
  `local_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=0`、`holdHigh=5`、`scopeGap=0`、
   `mergeEligible=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/main`、`origin/fix/code-audit-remediation` 和
`origin/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 个 | 只读保全 |
| 远端分支 | `main`、`fix/code-audit-remediation`、`design/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 收尾报告。

最后一个远端提交为：

```text
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/ResourceNodes` 和 `Flora` 资源。
它还没有被完整纳入地形 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_CHECKS` 与 `ENABLE_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. 禁止执行的操作

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

```text
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 干净，隔离内容完整保全，
未知路径为零，但仍有明确未完成工作。
