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 write1、retry0; 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 PlayMode3/3。 AUD-005/011/012/020/021五项 finding 的 7 个 runtime probe7/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;OpenSpec60/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 的原因
- 并发引入的
com.unity.pipeline在原始 PackageCache 下触发CS0012 PreserveAttribute / Unity.Scripting;本轮临时验证 workaround 已按 SHA-256 撤销,未把绕过留在项目中。 - repository static audit 仍有已登记 HOLD:
activeHigh=0、holdHigh=5、scopeGap=0、mergeEligible=false。 - 人工 UI/输入/视觉/手感尚未验收。
- Windows Player、HybridCLR、YooAsset smoke 与最终打包按用户决定延期。
- hosted CI、Player 异常强杀耐久和 terrain 最终 YooAsset lease 未闭合。
- 当前
D:\Project\ET仍是脏工作树,staged 为 0;本轮没有 commit、 push 或 merge。 - 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 已包含:
- 11 个 2026-07-02 OpenSpec 历史归档。
- 可复用 UI Prefab 生产流程标准化。
- Stage12 动作状态、输入适配和 HUD Gate 3P 三批实现。
- Almanac 预览人工拒绝状态文档。
- 本轮全量 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
dotnet-restore-sdk-subset:干净 Git 树缺 registry 提供的cn.etetet源文件,SDK restore 前置不完整。dotnet-build-sdk-subset:同一 registry 前置缺失,不能用局部项目 构建冒充完整 SDK 子集验证。dotnet-first-party-tests:没有可发现的Microsoft.NET.Test.Sdk/IsTestProject第一方测试项目。repository-static-audit:还没有稳定的 hosted 产品代码范围审计门; clean CI 的 ChangedOnly 为零文件,Full 又混入已知和 vendored finding。terrain-player-safe-reader-binding:ResourceNode/Flora consumer 迁移 仍归地形 change,代码审计分支只有 Player-safe 资源 promotion。unity-compile:缺 exact checkpoint 的 Unity assemblies 与 Wildlands runtime 编译证明。unity-first-party-tests:需要 Unity Test Framework runner;零测试不能 冒充通过。unity-harness-runtime:缺 live Unity Editor、PlayMode、动作断言和 cleanup 的完整队列证据。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 仍有
Standardfallback。 - 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 个:
Docs/99_temp/world_terrain_rebaseline/INDEX.mdDocs/99_temp/world_terrain_rebaseline/program-control-validation.mdDocs/99_temp/world_terrain_rebaseline/program-ledger.mdDocs/99_temp/world_terrain_rebaseline/streaming/loader-lifecycle-preflight.mdDocs/99_temp/world_terrain_rebaseline/wave0/1-1.mdDocs/99_temp/world_terrain_rebaseline/wave0/1-10.mdDocs/99_temp/world_terrain_rebaseline/wave0/1-11.mdDocs/99_temp/world_terrain_rebaseline/wave0/1-12.mdDocs/99_temp/world_terrain_rebaseline/wave0/1-15.mdDocs/99_temp/world_terrain_rebaseline/wave0/1-2.mdDocs/99_temp/world_terrain_rebaseline/wave0/1-3.mdDocs/99_temp/world_terrain_rebaseline/wave0/1-4.mdDocs/99_temp/world_terrain_rebaseline/wave0/1-5.mdDocs/99_temp/world_terrain_rebaseline/wave0/1-6.mdDocs/99_temp/world_terrain_rebaseline/wave0/screenshots/task-1-1-channel.png
OpenSpec program、review、tasks 与 12 个 capability delta,共 22 个:
openspec/changes/wildlands-world-terrain-rebaseline/.openspec.yamlopenspec/changes/wildlands-world-terrain-rebaseline/delta-spec-review.mdopenspec/changes/wildlands-world-terrain-rebaseline/design-review.mdopenspec/changes/wildlands-world-terrain-rebaseline/design.mdopenspec/changes/wildlands-world-terrain-rebaseline/planning-full-audit-2026-07-12.mdopenspec/changes/wildlands-world-terrain-rebaseline/proposal.mdopenspec/changes/wildlands-world-terrain-rebaseline/specs/camera-covered-world-presentation/spec.mdopenspec/changes/wildlands-world-terrain-rebaseline/specs/layered-terrain-visual-system/spec.mdopenspec/changes/wildlands-world-terrain-rebaseline/specs/predictive-budgeted-world-streaming/spec.mdopenspec/changes/wildlands-world-terrain-rebaseline/specs/resource-node-visual-config-lite/spec.mdopenspec/changes/wildlands-world-terrain-rebaseline/specs/terrain-mesh-chunk-rendering/spec.mdopenspec/changes/wildlands-world-terrain-rebaseline/specs/terrain-quality-observability/spec.mdopenspec/changes/wildlands-world-terrain-rebaseline/specs/terrain-tiles-assetforge-pilot/spec.mdopenspec/changes/wildlands-world-terrain-rebaseline/specs/wildlands-art-tech-baseline/spec.mdopenspec/changes/wildlands-world-terrain-rebaseline/specs/wildlands-world-carrier/spec.mdopenspec/changes/wildlands-world-terrain-rebaseline/specs/wildlife-visual-config-lite/spec.mdopenspec/changes/wildlands-world-terrain-rebaseline/specs/world-ecology-placement-context/spec.mdopenspec/changes/wildlands-world-terrain-rebaseline/specs/world-spatial-layer-contract/spec.mdopenspec/changes/wildlands-world-terrain-rebaseline/tasks-coverage.mdopenspec/changes/wildlands-world-terrain-rebaseline/tasks-review.mdopenspec/changes/wildlands-world-terrain-rebaseline/tasks.mdopenspec/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.assetProjectSettings/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.assetAssets/UniversalRenderPipelineGlobalSettings.assetAssets/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.csAssets/Editor/A01ScenePickInspectorWindow.csAssets/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.csPackages/com.coplaydev.unity-mcp/Editor/Services/Transport/Transports/StdioBridgeHost.csDocs/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/审计状态,但不属于当前任一闭环提交:
Docs/99_temp/a01_project_progress_audit_2026-07-02.mdDocs/99_temp/HUD_Main_V2_AI_Goal_完整流程规划_2026-07-15.mdDocs/99_temp/stage12_gate_status_overview_2026-07-02.html
建议继续留在本地证据区,后续如需长期保存,应在独立文档归档任务中 确认内容、时效和引用关系,不要混入代码提交。
8.6 仅时间戳变化:3 个路径
Docs/03_art/a01_asset_production/ui/HUD_Main_V2/validation/formal_integration/formal_playmode_smoke.jsonDocs/03_art/a01_asset_production/ui/HUD_Main_V2/validation/repro/repro_playmode_smoke.jsonDocs/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 一致:
Generate-CloseoutReports.ps1INDEX.mdbranch_inventory.jsonbranch_inventory.mdstaging_manifest.jsonstash_audit.jsonstash_audit.mdvalidation_ledger.mdworktree_inventory.json
它们不需要从当前分支再次提交。
9.2 按计划不进入 main 的 10 个原始证据
a01_static_audit_changedonly.mdhud_formal_ui_stage12_only_round2.err.loghud_formal_ui_stage12_only_round2.loghud_runtime/formal_ui_validation_p0.stderr.loghud_runtime/formal_ui_validation_p0.stdout.loghud_runtime/unity_batch_rebuild_validate_20260723.loghud_runtime/unity_mcp_http.stderr.loghud_runtime/unity_mcp_http.stdout.logui_temp_scaffold_determinism.jsonui_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-20260522chore/stash-audit-20260519chore/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:
D:\Project\ET:代码审计分支,包含未提交/HOLD 工作副本。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,也不要为了“看起来干净”而重置。
第二阶段:先收口代码审计
- 恢复 registry 提供的
cn.etetetSDK 前置。 - 建立可发现的第一方 .NET test project 和稳定产品范围静态门。
- 在 exact checkpoint 上完成 Unity compile、Unity tests、 UnityHarness runtime 和 Player smoke。
- 运行任务 4.10 的 6 秒 mutation/reload 与 10 秒 movement write probe。
- 关闭九个 required gaps,并确认 73/73。
- 在干净工作区将分支重基到最新 main。
- 按 staged diff 重新运行完整验证,之后才请求合并。
第三阶段:继续地形 Wave0
- 先建立可恢复的正式存档隔离方案,并取得显式授权。
- 完成 camera、cold/warm、movement、control、lighting、Profiler 和 canonical capture。
- 关闭 Stage12/code-audit owner handoff。
- 完成 reviewer roster 与 Wave0 人工批准。
- 创建并批准 C1-C5 五个下游 changes。
- 按依赖图实施剩余 236 项。
- 最终同步 enduring specs、验证并归档。
第四阶段:拆分独立高风险任务
建议至少拆成下列独立任务,彼此不混合:
fix/editor-debug-tools-lifecyclefix/unity-mcp-log-growthfix/unity-collections-native-list-compatchore/unity-project-settings-migration-auditfix/huangli-tmp-font-regenerationfix/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 干净,隔离内容完整保全, 未知路径为零,但仍有明确未完成工作。