Files
Workspace/Docs/Archive/ShrinkSDKUnity-thread-before-agent-support.md
T
cneicy 08246ddb01
Validate ShrinkSDK Workspace / catalog (push) Successful in 5s
Validate ShrinkSDK Workspace / unity (push) Successful in 3m20s
feat: integrate performance upgrade and agent inspection tooling
2026-09-29 10:16:02 +08:00

20 KiB
Raw Blame History

Thread: ShrinkSDKUnity

Alias

  • ShrinkSDKUnity

Status: OPEN

Goal

持续推进 D:\UnityBuilds\ShrinkSDK 的 SDK 基础设施,重点围绕:

  • ShrinkModFramework
  • ShrinkNetwork
  • 独立服务器能力
  • 权限、RPC、传输层

Context

Created from conversation on 2026-04-05.

本线程当前已经落地:

  • .planning/codebase/ 中文代码库地图
  • Assets/Modules/ShrinkModFramework/
    • 模组声明、依赖声明、生命周期
    • RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded) 自动启动
    • 外部 DLL 热插拔
    • Harmony 自动补丁接入
  • Assets/Modules/ShrinkNetwork/
    • [ShrinkNetworkMessage]
    • [ShrinkNetworkSubscriber]
    • [ShrinkNetworkSubscribe]
    • RpcAsync
    • 权限模型 ShrinkNetworkAuthority / ShrinkNetworkPeerKind / Permission
    • ShrinkJsonNetworkSerializer
    • ShrinkMessagePackNetworkSerializer
    • ShrinkLoopbackTransport
    • ShrinkTcpClientTransport
    • ShrinkKcpClientTransport
    • ShrinkKcpPeer
    • ShrinkKcpTransportOptions
  • GeneratedServers/ShrinkNetwork.ServerHost/
    • 独立 .NET 控制台服务器
    • TcpServerTransport
    • KcpServerTransport
    • 同时监听 TCP 17001 与 KCP 17002

This Round

这一轮新增与修复:

  • 重构 ShrinkNetwork 目录结构:
    • Runtime/Core
    • Runtime/Metadata
    • Runtime/Routing
    • Runtime/Serialization
    • Runtime/Transport/*
    • Editor/Scaffolding
  • 删除仓库内固定参考工程,改为插件模板 + 生成式独立服务器工程
  • 独立服务器生成器支持扫描:
    • [ShrinkNetworkMessage]
    • 显式 RegisterMessage<T>(opcode, route)
  • 新增显式状态同步范式:
    • ShrinkNetworkStateSyncAttribute
    • ShrinkNetworkStateSyncRole
  • LAN 演示消息补齐:
    • [ShrinkNetworkMessage]
    • [ShrinkNetworkStateSync("lan", role)]
  • opcode / route 冲突改为生成阶段直接报错,不由框架静默兜底
  • ShrinkNetworkService.BindTransport(...) 自动接入可选桥接:
    • 自动注册 ShrinkNetwork.Integration.EventBus
    • BindTransport(null) 自动解绑
  • ShrinkNetwork.Integration.EventBus 增加更易用扩展:
    • session.PublishEventAsync(...)
    • session.RequestEventAsync(...)
    • service.BroadcastEventAsync(...)
    • service.UseEventBusBridge(...)
  • ShrinkEmbeddedHostNetworkDemoSceneController 去掉手工 RegisterService(...)
  • 统一重写 README:
    • Assets/Modules/ShrinkNetwork/README.md
    • Assets/Modules/ShrinkNetwork.Integration.EventBus/README.md
    • Assets/Modules/ShrinkDataSaver.Integration.EventBus/README.md

This Round Update

继续补齐的内容:

  • ShrinkNetwork 的 RPC 关联 id 从裸 int rpcId 重构为强类型 ShrinkRequestToken
  • ShrinkRpcCallOptions 增加:
    • RequestTokenOverride
    • DebugLabel
  • ShrinkNetworkPacket / ShrinkNetworkContext / ShrinkNetworkRouter / ShrinkNetworkService 全链路改用 RequestToken
  • ShrinkNetwork.Integration.EventBus 的请求结果调用默认带事件类型 DebugLabel
  • TCP 客户端在“远端正常关闭连接”时不再刷异常堆栈,降级为 warning
  • 独立服务器生成器继续升级:
    • 不只识别 [ShrinkNetworkEvent]
    • 还会区分:
      • 广播型网络事件
      • 远端裁决网络事件
      • 增量网络事件
    • 对非状态同步范式接管的网络事件消息,自动生成 handler 模板并自动注册 RegisterHandler(...)
  • 同步更新当前生成产物:
    • GeneratedServers/ShrinkNetwork.ServerHost/Generated/UnityGeneratedServerHandlers.g.cs
    • GeneratedServers/ShrinkNetwork.ServerHost/Generated/UnityGeneratedServerModule.g.cs
    • GeneratedServers/ShrinkNetwork.ServerHost/Generated/UNITY_GENERATED_SERVER_SCAFFOLD.md
  • 模板说明补齐:
    • Assets/Modules/ShrinkNetwork/Editor/Scaffolding/ServerProjectTemplate/README.md.txt
    • Assets/Modules/ShrinkNetwork/README.md
  • 商业级可用性第一轮硬化:
    • ShrinkNetworkService / ShrinkNetworkSession 改为并发安全集合,断线时自动失败对应的挂起 RPC
    • TCP 客户端 / 服务端补齐最大包长保护,避免远端伪造长度直接触发大内存分配
    • 运行时 ShrinkKcpServerTransport 补齐远端地址校验,并把会话 conversationId 改为随机分配
    • 独立服务器模板与当前 GeneratedServers 宿主改为“默认拒绝匿名登录”,只有显式允许时才在缺少令牌时放行
    • 同步更新:
      • Assets/Modules/ShrinkNetwork/Editor/Scaffolding/ServerProjectTemplate/*
      • GeneratedServers/ShrinkNetwork.ServerHost/*
  • 商业级可用性第二轮硬化:
    • ShrinkNetworkPacket 增加 ProtocolVersion / SchemaVersion
    • ShrinkNetworkService 增加协议版本窗口校验,必要时通过 IShrinkNetworkSessionControlTransport 主动断开违规会话
    • ShrinkNetworkService 增加基础指标快照:
      • 会话连接/断开
      • 收发包与字节数
      • RPC 发起/完成/超时/取消/失败
      • 协议违规、权限拒绝、处理器异常、未知 opcode、分发 miss、反序列化失败
    • 独立服务器宿主新增:
      • ServerHostOptions.MinProtocolVersion / MaxProtocolVersion
      • ServerHostOptions.MinSchemaVersion / MaxSchemaVersion
      • ServerHostOptions.DisconnectOnProtocolViolation
      • ServerHostOptions.DiagnosticsLogIntervalSeconds
    • Program.cs 会定期输出指标摘要,并在 Ctrl+C 前打印最后一份快照

Verified

已做实际验证:

  • dotnet build .\\Assembly-CSharp.csproj /m:1 -p:BaseIntermediateOutputPath=Temp\\CliObj\\Assembly-CSharp\\
  • dotnet build .\\Assembly-CSharp-Editor.csproj /m:1 -p:BaseIntermediateOutputPath=Temp\\CliObj\\Assembly-CSharp-Editor\\
  • dotnet build .\\GeneratedServers\\ShrinkNetwork.ServerHost\\ShrinkNetwork.ServerHost.csproj /nr:false
  • dotnet build .\\ShrinkNetwork.Runtime.csproj /m:1
  • dotnet build .\\ShrinkSDK.sln /m:1

说明:

  • Unity 侧当前编译为 0 warning / 0 error
  • 当前 GeneratedServers\\ShrinkNetwork.ServerHost 可编译通过,但在 net8.0 宿主侧仍有一批既有 nullable warnings
  • 当前 GeneratedServers\\ShrinkNetwork.ServerHost 也已手工同步到新生成器语义
  • 这轮没有做 Unity 编辑器内按钮点击与 PlayMode 回归
  • 商业级硬化这一轮已额外验证:
    • dotnet build .\\Assembly-CSharp.csproj /m:1 -p:BaseIntermediateOutputPath=Temp\\CliObj\\Assembly-CSharp\\
    • dotnet build .\\GeneratedServers\\ShrinkNetwork.ServerHost\\ShrinkNetwork.ServerHost.csproj /nr:false
    • dotnet build .\\ShrinkSDK.sln /m:1

Notes

  • D:\UnityBuilds\ShrinkSDK 是根 Git 仓库;EventBus、DataSaver 与 DataSaver.EventBus 已从 gitlink/嵌套仓库改为根仓库直接跟踪,干净克隆可恢复完整源码。
  • 当前唯一架构文档是根 DESIGN.md;Cordis 完成态和旧 .planning/codebase 地图已归档到 Docs/Archive/。
  • 独立服务器生成器已改为扫描 Unity 编译后的 Player 程序集语义,并用 SHA-256 清单保护模板托管文件。
  • 当前线程里“独立服务器模板仍有 nullable 警告”的记录已过期,至少现有生成工程与解决方案编译均已清零
  • PowerShell 查看 UTF-8 中文时会出现乱码,但文件本身已按 UTF-8 写入
  • ShrinkNetwork.Integration.EventBus 当前 HasResult 只回传:
    • EventResult
    • IsCanceled
    • ErrorCode / ErrorMessage
  • 还不会自动回传事件对象其它字段的最终改动
  • 当前生成器虽然已经把网络事件纳入一等公民,但生成结果仍以“可编译、可注册、可继续补业务”为目标,不会替你推断完整业务逻辑
  • 当前默认安全基线已明显提高,但仍未覆盖 TLS、正式身份体系、协议版本协商、压测与故障演练
  • 当前协议版本闸门与指标摘要已经具备最小生产辅助价值,但还没有 metrics 导出、trace、dashboard 或告警接入

Next Steps

  • 在 Unity 编辑器中实际点击“生成完整独立服务器工程 / 刷新 Generated 合同”并补一轮运行时回归
  • 继续补商业级缺口时,优先排:
    • TLS / 安全信道
    • 正式身份体系与令牌轮换
    • 更细粒度的协议兼容协商,而不是当前这种“窗口校验 + 直接断开”
    • metrics 导出 / trace / dashboard / 告警
    • 压测、模糊包、断线与兼容回归
  • 后续修改服务器生成器时保持语义扫描、命名空间同名拒绝和模板哈希预检测试。
  • 如果要继续收口代码层细节,优先处理公开 API 中残留的 nullable 语义不一致,而不是重复消化已不存在的构建警告
  • 如果后续彻底放弃旧心智,可把公开 API 中残留的 route = null 一类签名继续做 nullable 收口

Last Update

  • 2026-08-29: 完成第三方合规排查并新增根 THIRD-PARTY-NOTICES.md(README 已加"第三方与合规"入口)。结论:NeoForge / Minecraft Forge 与 MessagePipe 仅为概念参考(Docs/JustAnyProjectArchitectureAudit.md A.3 有既有声明;EventBus 的五级优先级、receiveCanceled、EventResult{DEFAULT,ALLOW,DENY}、Attach(object) 对应 Forge API 语义,实现为原创未复制代码,不触发 LGPL 衍生义务);MessagePipe 未引入依赖、API 形态不构成高度相似;AlicizaX(GitHub 组织)在代码、文档、git 历史中零引用,ShrinkInstaller 子模块历史为自研。真正触发 MIT 归属义务的是 Assets/Modules/ShrinkNetwork/Plugins/Kcp-CSharp.dll(Molth/Kcp-CSharp,上游 KCP)与 System.Runtime.CompilerServices.Unsafe.dll,两者版权行与 MIT 全文已收录进声明文件;UniTask / MessagePack / Newtonsoft.Json 为外挂包依赖已登记。遗留:根仓库本身尚无 LICENSE(EventBus 模块已有 MIT),且 ShrinkNetwork 模块独立发布时需把 DLL 声明同步进该模块仓库。

  • 2026-04-10: 已新增 Assets/Modules/ShrinkTutorial/ 独立包,落地一套可复用的互动式引导系统,包含 ShrinkTutorialManager、ShrinkTutorialData / ShrinkTutorialStep / ShrinkTutorialDatabase、默认 PlayerPrefs 持久化、ShrinkTutorialAnchor / ShrinkTutorialTrigger、遮罩挖洞与提示框 UI、以及 ShrinkSDK/引导/* / ShrinkSDK/Tutorial/* 编辑器入口。

  • 2026-04-10: 已新增示例场景 Assets/Scenes/ShrinkTutorialSample.unity,并配套生成 Assets/Modules/ShrinkTutorial/Samples/Resources/ShrinkTutorialSettings.asset、Assets/Modules/ShrinkTutorial/Samples/ShrinkTutorialSampleDatabase.asset、Assets/Modules/ShrinkTutorial/Samples/ShrinkTutorialSampleTutorial.asset。示例流程覆盖三类核心路径:静态目标点击、运行时动态锚点等待、CompleteStep(customEventName) 自定义事件完成。

  • 2026-04-10: 示例场景入口脚本为 Assets/Modules/ShrinkTutorial/Runtime/Samples/ShrinkTutorialSampleSceneController.cs,一键重建入口为 Assets/Modules/ShrinkTutorial/Editor/Samples/ShrinkTutorialSampleSceneBuilder.cs,菜单为 ShrinkSDK/引导/创建示例场景 与 ASCII 别名 ShrinkSDK/Tutorial/Create Sample Scene。后续如果示例场景被手改或损坏,可直接走该菜单重建。

  • 2026-04-10: 本轮已做命令行编译验证:ShrinkTutorial.Runtime.csproj、ShrinkTutorial.Editor.csproj、ShrinkSDK.sln 均为 0 warning / 0 error。Unity 侧也完成了一轮示例场景 PlayMode 烟测,并修复了 ShrinkTutorialDialog.Initialize() 在已有 RectTransform 上重复 AddComponent<RectTransform>() 导致的运行时空引用。

  • 2026-04-10: 当前示例场景文案已改为英文,不是产品方向选择,而是临时规避 TMP 默认字体缺少中文字形导致的方块/警告。若后续要把示例或引导系统默认文案恢复成中文,优先补一个可用的中文 TMP 字体资产,再统一改回中文,避免再次出现 LiberationSans SDF 缺字警告。

  • 2026-04-07: 已补上给外部模组开发者使用的 Mod SDK 导出器。新入口是 ShrinkSDK/Mod/导出 Mod SDK 开发包,会先构建 ShrinkSDK.sln,再导出 Libs/ + Templates/ExternalMod/SampleShrinkMod/ + README + manifest.json;其中外部模板已改成引用导出包里的 DLL,而不再直接引用本地仓库 csproj。

  • 2026-04-07: 因外部独立模组工程在用户 IDE 环境里仍会撞到 Microsoft.NET.SDK.WorkloadAutoImportPropsLocator 解析问题,已追加一条更省事的“仓库内模组模板”路径。新入口是 ShrinkSDK/Mod/生成仓库内模组模板(推荐),会直接生成到当前 Unity 项目的 Assets 下并复用现有 ShrinkSDK.sln / asmdef 编译链,作为当前更推荐的模组开发入口。

  • 2026-04-07: 已给 ShrinkModFramework 补上外部 DLL 模组模板生成器。新入口是 ShrinkSDK/Mod/生成外部模组模板,实现位于 Assets/Modules/ShrinkModFramework/Editor/Scaffolding/,会生成带 csproj + build.ps1 + 示例模组代码 + README 的独立模组工程,方便模组开发者直接构建 DLL 并投放到 Mods 目录。

  • 2026-04-07: 已整理 Assets/Modules/ShrinkModFramework/Runtime/ 目录结构,把平铺脚本拆成 Bootstrap / Core / Metadata / Registry / Loading / Network / Integration 七层;同时同步更新 Assets/Modules/ShrinkModFramework/README.md 与 .planning/codebase/STRUCTURE.md,把模组框架当前真实目录与推荐阅读顺序补齐。

  • 2026-04-07: 用户已在实际环境中完成本轮回归,反馈当前 ShrinkCommand / ShrinkNetwork / 独立服务器生成链路“测试过了没问题”。这意味着前面“还缺 Unity 编辑器内实际回归验证”的记录对当前这条链路已过期;当前可把状态视为:代码编译全绿,且已有用户侧真实验证通过。

  • 2026-04-07: 已继续把 ShrinkCommand/ShrinkNetwork 相关 nullable 收口做到当前全绿。先补齐 Assets/Modules/ShrinkCommand.Integration.EventBus/ 与 Assets/Modules/ShrinkCommand.Integration.Network/ 的 #nullable enable,再把 Assets/Modules/ShrinkNetwork/Runtime 的消息元数据、权限、注册器、路由器、会话、服务、序列化器、EventBus 桥接等公共类型按真实可空语义收口;同时把 GeneratedServers/ShrinkNetwork.ServerHost/Generated/UnityGeneratedNetworkContracts.g.cs 里 LanJoinRoomResponse.Players 的数组默认值补齐,并把源头生成器 Assets/Modules/ShrinkNetwork/Editor/Scaffolding/ShrinkDedicatedServerScaffoldGenerator.cs 的 GetDefaultInitializer(...) 改成对任意 T[] 都自动生成 Array.Empty<T>(),避免后续重新生成时 warning 回弹。已实际验证:dotnet build .\\ShrinkSDK.sln /m:1 与 dotnet build .\\GeneratedServers\\ShrinkNetwork.ServerHost\\ShrinkNetwork.ServerHost.csproj /nr:false 现都为 0 warning / 0 error。

  • 2026-04-07: 已修复 ShrinkCommand 在 Unity 侧的兼容性编译断点。Assets/Modules/ShrinkCommand/Runtime/Core/ShrinkCommandService.cs 与 Assets/Modules/ShrinkCommand/Runtime/Metadata/ShrinkCommandTypes.cs 现已显式开启 #nullable enable,并把依赖 init 的对象初始化属性改成 Unity 2022 当前编译链可稳定通过的 set,避免再次触发 System.Runtime.CompilerServices.IsExternalInit 缺失;同时顺手收口了 ShrinkCommandRegHelper.cs 与 ShrinkCommandService.cs 内部的几处 nullable warning。已实际验证:dotnet build .\\ShrinkCommand.Runtime.csproj /m:1、dotnet build .\\GeneratedServers\\ShrinkCommand.RuntimeSmoke\\ShrinkCommand.RuntimeSmoke.csproj /nr:false 均为 0 warning / 0 error;dotnet build .\\ShrinkSDK.sln /m:1 与 dotnet build .\\GeneratedServers\\ShrinkNetwork.ServerHost\\ShrinkNetwork.ServerHost.csproj /nr:false 也都恢复到 0 error。当前残留 warning 已不在这两个修复点本体,而是在既有的 ShrinkCommand.Integration.* 与 ShrinkNetwork nullable 收口面。

  • 2026-04-06: 已补宿主文本配置文件能力。新增 GeneratedServers/ShrinkNetwork.ServerHost/server.properties 与模板 server.properties.txt,风格对齐 Minecraft 的 key=value 配置;Program.cs 启动改为先走 ServerHostProperties.LoadOrCreate(),首次启动缺文件时自动落默认配置,并打印配置文件路径、是否首次生成、配置告警与最终优先级。当前规则为“代码默认值 < server.properties < 环境变量”;同时补了 SHRINK_SERVER_CONFIG_PATH 自定义配置文件路径入口,并把 UnityAssetsPath / ScanOutputDirectory 的默认解析从易错的 AppContext.BaseDirectory 相对跳转改成基于宿主工程目录定位。

  • 2026-04-06: 已补上运行时烟测闭环。新增 GeneratedServers/ShrinkNetwork.RuntimeSmoke/ 轻量控制台烟测工具,直接覆盖“登录拿令牌 -> 鉴权后业务 RPC -> server/auth/refresh 续期 -> 篡改令牌后被宿主断链”。同时把会话令牌关键配置补成环境变量:SHRINK_SERVER_ENABLE_SESSION_TOKENS / SHRINK_SERVER_SESSION_TOKEN_TTL_SECONDS / SHRINK_SERVER_SESSION_TOKEN_REFRESH_WINDOW_SECONDS / SHRINK_SERVER_DISCONNECT_ON_INVALID_SESSION_TOKEN。已实际跑通:宿主在 SHRINK_SERVER_AUTH_TOKEN=smoke-token、TTL/续期窗口都为 120 秒时,烟测日志确认 Login ok、Join room ok、Refresh ok、Tampered token rejected with disconnect、PASS;宿主日志也确认坏令牌请求被拒绝并主动踢线。

  • 2026-04-06: 已补上“正式身份/会话令牌体系”第一版。ShrinkNetworkPacket 新增 SessionToken 与到期时间戳;ShrinkNetworkSession 会自动持有并回传当前令牌;ShrinkNetworkService 新增 IncomingPacketValidator 与 AuthRejectedCount 指标。独立宿主与模板侧新增 server/auth/refresh,登录成功后签发内存态会话令牌,并按 ServerHostOptions.EnableSessionTokens / SessionTokenTtlSeconds / SessionTokenRefreshWindowSeconds / DisconnectOnInvalidSessionToken 做逐包校验与续期。已实际验证:dotnet build .\\Assembly-CSharp.csproj /m:1 -p:BaseIntermediateOutputPath=Temp\\CliObj\\Assembly-CSharp\\、dotnet build .\\GeneratedServers\\ShrinkNetwork.ServerHost\\ShrinkNetwork.ServerHost.csproj /nr:false、dotnet build .\\ShrinkSDK.sln /m:1 全部通过;Unity 侧与解决方案侧恢复到 0 warning / 0 error,宿主仍保留既有 nullable warnings;本轮尚未做真实登录-续期-断链运行时回归。

  • 2026-04-06: 已补完 TCP TLS 第一版收口。ShrinkTcpClientTransport / ShrinkTcpServerTransport 与当前 GeneratedServers、模板宿主都已接入可选 ShrinkTcpTlsOptions,TCP 读包路径统一改为 Stream 以兼容 SslStream。同时把 ShrinkTcpTlsOptions 的实际定义移到 Runtime/Transport/Abstractions/IShrinkNetworkTransport.cs,原 Runtime/Transport/Tcp/ShrinkTcpTlsOptions.cs 仅保留占位,避免 Unity 尚未刷新工程文件时再次出现“文件已在磁盘上但类型不可见”的构建断点。

  • 已补记商业级第二轮硬化:协议版本闸门、会话踢除接口、基础指标快照与宿主周期性摘要;Unity 侧命令行构建仍保持 0 warning / 0 error,独立服务器宿主仍存在既有 nullable warnings,下一续接点转向 TLS / 身份体系 / 真正的观测导出

  • 2026-04-06: 宸茶ˉ涓?Minecraft 椋庢牸鐨勭嫭绔嬪懡浠ょ郴缁熶笌妗ユ帴灞傘€傛柊澧?Assets/Modules/ShrinkCommand/ 鐙珛鍛戒护杩愯鏃讹紝鏀寔璺緞寮忓懡浠ゃ€佽礊蹇冨弬鏁般€佹潈闄愩€佹潵婧愬垽瀹氥€佸睘鎬佸紡鑷姩娉ㄥ唽锛涘悓鏃舵柊澧?Assets/Modules/ShrinkCommand.Integration.EventBus/ 涓?Assets/Modules/ShrinkCommand.Integration.Network/锛屽墠鑰呮敮鎸佺敤 ShrinkCommandExecuteRequestEvent 璇锋眰鎵ц鍛戒护骞跺彂甯?executing / executed / failed 浜嬩欢锛屽悗鑰呮敮鎸佺敤 command/execute RPC 鎵ц杩滅▼鍛戒护銆傚綋鍓?GeneratedServers/ShrinkNetwork.ServerHost 宸叉敼涓哄叡浜?ShrinkCommandService锛屾帶鍒跺彴涓庣綉缁滄ˉ鎺ュ叡鐢ㄥ悓涓€濂楀懡浠わ紱瀹夸富鍦?stdin EOF 鏃朵笉鍐嶇珛鍗抽€€鍑猴紝閫傞厤鍚庡彴杩涚▼鍚姩銆傚凡瀹為檯楠岃瘉锛?dotnet run --project .\\GeneratedServers\\ShrinkCommand.RuntimeSmoke\\ShrinkCommand.RuntimeSmoke.csproj PASS锛?dotnet run --project .\\GeneratedServers\\ShrinkCommand.EventBusSmoke\\ShrinkCommand.EventBusSmoke.csproj PASS锛屼互鍙婂悗鍙板惎鍔ㄥ涓?+ dotnet run --project .\\GeneratedServers\\ShrinkNetwork.RuntimeSmoke\\ShrinkNetwork.RuntimeSmoke.csproj -- 127.0.0.1 17777 smoke-token runtime-smoke PASS锛屽凡鐪熷疄瑕嗙洊鈥滅櫥褰?-> 涓氬姟 RPC -> 杩滅▼ status 鍛戒护 -> 绡℃敼浠ょ墝鏂摼鈥濄€?