[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KG7B4YT5BWZ1XPJC2AMTXP":3,"skill-same:01M6KG7B4YT5BWZ1XPJC2AMTXP":63},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":48,"updatedAt":49,"install":50,"resources":62},"01M6KG7B4YT5BWZ1XPJC2AMTXP","require-for-update-gate",null,"Declare a precondition that prevents a system from running when its required singleton or component type is absent, eliminating boilerplate null-checks and reducing unnecessary scheduling cost.","dyCuong03\u002Funity-agent-team","dyCuong03","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F137050365?v=4","01M6KFXC85HQHXZJC2VC1KY6EZ","CuongND","01M6KFXCCHP6CD5MTA8NECJC36",8,"MIT","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Funity-dots\u002Frequire-for-update-gate\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32],"update","gate","for","require for update gate","component","core","system","cost","scheduling","query","type","boilerplate","true","gating","2026-11-10 10:12:30",false,"﻿---\nname: require-for-update-gate\ndescription: Declare a precondition that prevents a system from running when its required singleton or component type is absent, eliminating boilerplate null-checks and reducing unnecessary scheduling cost.\ntags: [core, query, gating]\nmetadata:\n  internal-only: true\n  tier: 3\n---\n\n# RequireForUpdate Gate\n\n## Intent\nDeclare a precondition that prevents a system from running when its required singleton or component type is absent, eliminating boilerplate null-checks and reducing unnecessary scheduling cost.\n\n## Use When\nA system only makes sense when a config entity, feature-flag singleton, or scene-scoped marker exists. Multiple requirements can be ANDed.\n\n## Avoid When\nThe condition changes every frame — RequireForUpdate disables the entire system, including any OnUpdate side effects. If you need conditional logic inside an otherwise-always-running system, use a query filter instead.\n\n## Senior Pattern\n- Call state.RequireForUpdate\u003CT>() in OnCreate, once per required type.\n- Pair with GetSingleton\u003CT>() inside OnUpdate — the gate guarantees the singleton exists when OnUpdate runs.\n- Multiple RequireForUpdate calls are ANDed.\n\n## Code Template\n```csharp\n[BurstCompile]\npublic partial struct SpawnSystem : ISystem\n{\n    [BurstCompile]\n    public void OnCreate(ref SystemState state)\n    {\n        state.RequireForUpdate\u003CSpawnerConfig>();\n        state.RequireForUpdate\u003CExecuteSpawn>();  \u002F\u002F scene-activation tag\n    }\n\n    [BurstCompile]\n    public void OnUpdate(ref SystemState state)\n    {\n        var config = SystemAPI.GetSingleton\u003CSpawnerConfig>();\n        \u002F\u002F config is guaranteed to exist here\n    }\n}\n```\n\n## Anti-Patterns\n- Calling RequireForUpdate in OnUpdate (valid but wasteful — it rebuilds the query each call).\n- Using RequireForUpdate as the only gate and then calling GetSingleton without it — NullReferenceException if entity not yet created.\n- Relying on RequireForUpdate to enforce singleton uniqueness — it only checks existence, not count.\n\n## Runtime Risks\n- System silently never runs if the required entity is never created — can be hard to debug. Add a log in OnCreate to announce the gate.\n- RequireForUpdate with a non-singleton type that has many entities is valid but semantically misleading — prefer WithAll query filter for multi-entity filtering.\n\n## Performance Notes\nZero cost when condition is false — OnUpdate is never entered, no job scheduling overhead.\n\n## Architecture Guidance\nDeclare all system preconditions in OnCreate. A system that has no entities to act on should cost nothing.\n","# RequireForUpdate Gate\n\n## Intent\nDeclare a precondition that prevents a system from running when its required singleton or component type is absent, eliminating boilerplate null-checks and reducing unnecessary scheduling cost.\n\n## Use When\nA system only makes sense when a config entity, feature-flag singleton, or scene-scoped marker exists. Multiple requirements can be ANDed.\n\n## Avoid When\nThe condition changes every frame — RequireForUpdate disables the entire system, including any OnUpdate side effects. If you need conditional logic inside an otherwise-always-running system, use a query filter instead.\n\n## Senior Pattern\n- Call state.RequireForUpdate\u003CT>() in OnCreate, once per required type.\n- Pair with GetSingleton\u003CT>() inside OnUpdate — the gate guarantees the singleton exists when OnUpdate runs.\n- Multiple RequireForUpdate calls are ANDed.\n\n## Code Template\n```csharp\n[BurstCompile]\npublic partial struct SpawnSystem : ISystem\n{\n    [BurstCompile]\n    public void OnCreate(ref SystemState state)\n    {\n        state.RequireForUpdate\u003CSpawnerConfig>();\n        state.RequireForUpdate\u003CExecuteSpawn>();  \u002F\u002F scene-activation tag\n    }\n\n    [BurstCompile]\n    public void OnUpdate(ref SystemState state)\n    {\n        var config = SystemAPI.GetSingleton\u003CSpawnerConfig>();\n        \u002F\u002F config is guaranteed to exist here\n    }\n}\n```\n\n## Anti-Patterns\n- Calling RequireForUpdate in OnUpdate (valid but wasteful — it rebuilds the query each call).\n- Using RequireForUpdate as the only gate and then calling GetSingleton without it — NullReferenceException if entity not yet created.\n- Relying on RequireForUpdate to enforce singleton uniqueness — it only checks existence, not count.\n\n## Runtime Risks\n- System silently never runs if the required entity is never created — can be hard to debug. Add a log in OnCreate to announce the gate.\n- RequireForUpdate with a non-singleton type that has many entities is valid but semantically misleading — prefer WithAll query filter for multi-entity filtering.\n\n## Performance Notes\nZero cost when condition is false — OnUpdate is never entered, no job scheduling overhead.\n\n## Architecture Guidance\nDeclare all system preconditions in OnCreate. A system that has no entities to act on should cost nothing.\n",{"name":5,"tags":38,"metadata":39,"description":7},[24,28,32],{"tier":40,"internal-only":41},3,true,"main","fe4746b9f07e6c7c2b6d3932002183af9b9f6fa2",".claude\u002Fskills\u002Funity-dots\u002Frequire-for-update-gate",0,"https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team","https:\u002F\u002Fgithub.com\u002FdyCuong03","Game developer","2026-07-25 22:22:25",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":41},[52,55,58],{"tool":53,"command":54},"npx","npx skills add dyCuong03\u002Funity-agent-team --skill require-for-update-gate",{"tool":56,"command":57},"bunx","bunx skills add dyCuong03\u002Funity-agent-team --skill require-for-update-gate",{"tool":59,"command":60},"pnpm","pnpm dlx skills add dyCuong03\u002Funity-agent-team --skill require-for-update-gate","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Funity-dots\u002Frequire-for-update-gate\u002FSKILL.md",[],[64,87,110,133,152,173],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":33},"01M6KH55FFS00ET877QSMRYGX4","dots-update-groups","How to choose the right ECS system group and ordering so per-frame and per-fixed-step work is deterministic and never races its own readers. Covers InitializationSystemGroup \u002F SimulationSystemGroup \u002F PresentationSystemGroup \u002F FixedStepSimulationSystemGroup \u002F VariableRateSimulationSystemGroup, UpdateBefore \u002F UpdateAfter peer ordering, OrderFirst \u002F OrderLast group-boundary placement, RateManager, and the cross-group ordering trap. Use when adding an ISystem, fixing \"value visible one frame late\" bugs, or coupling simulation to a fixed timestep.","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002Fworkspace\u002Fdots-program\u002Fscratch\u002Fwave-2-orchestrator-drafts\u002Fdots-update-groups\u002FSKILL.md",[],[19,71,72,73,74,25,75,76,77,78,79,80,81,82,83,84,85,86],"dots update groups","boundary","simulation","how","choose","work","use","never","peer","deterministic","how to","coupling","ecs","bugs","frame","value",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":33},"01M6KH50PWYEFQDCGYBZ0326F1","dots-transform-patterns","The Entities 1.x transform model — LocalTransform (writable input) vs LocalToWorld (system-owned matrix), Parent\u002FChild hierarchy, reparenting cost, uniform vs non-uniform scale (PostTransformMatrix), and when to opt out with custom transform systems. Use when designing parent\u002Fchild hierarchies, runtime reparenting (mount\u002Fdismount\u002Fsocket), or choosing transform components at the Baker boundary.","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002Fworkspace\u002Fdots-program\u002Fscratch\u002Fwave-2-orchestrator-drafts\u002Fdots-transform-patterns\u002FSKILL.md",[],[94,95,96,97,72,25,98,99,77,26,100,101,102,103,104,105,106,107,108,109],"patterns","transform","dots transform patterns","components","mount","model","runtime","systems","input","with","matrix","socket","at","child","custom","hierarchy",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":121,"publishedAt":33},"01M6KH4VW4MA14DQW4KQYPFT0S","dots-singleton-patterns","Model cross-system shared configuration and game state as a single-entity component with a strict single-writer contract. Covers RequireForUpdate gating, SystemAPI.GetSingleton \u002F GetSingletonRW \u002F HasSingleton \u002F TryGetSingleton, bake-time vs runtime-created vs ECB-system singletons, the \"exactly one entity\" runtime invariant, and the single-writer rule. Use when designing frame-stable global config, shared mutable state, or any component intended to exist on exactly one entity.","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002Fworkspace\u002Fdots-program\u002Fscratch\u002Fwave-2-orchestrator-drafts\u002Fdots-singleton-patterns\u002FSKILL.md",[116],{"categoryNo":117,"categoryName":118,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[94,122,123,23,124,125,126,25,99,77,127,128,129,100,130,131,103,85,132,32],"singleton","dots singleton patterns","config","state","game","writer","time","shared","contract","as","ecb",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":139,"publishedAt":33},"01M6KH4PR076AYNDZHD63HHWX6","dots-hybrid-bridge","The one-way bridge between DOTS-owned runtime state and Unity-owned presentation. Covers UnityObjectRef for managed asset refs in components, the DOTS-writes \u002F Unity-reads ownership rule, when to use managed IComponentData vs UnityObjectRef vs CompanionComponent, baker-bridge vs runtime-bridge, and SubScene boundary rules. Use when an entity must reference Unity assets (Mesh, Material, AudioClip, ScriptableObject), a MonoBehaviour view must read entity state, or input\u002FUI must trigger ECS work.","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002Fworkspace\u002Fdots-program\u002Fscratch\u002Fwave-2-orchestrator-drafts\u002Fdots-hybrid-bridge\u002FSKILL.md",[],[140,141,142,143,97,125,72,144,145,76,146,147,77,100,148,149,102,150,21,151],"bridge","hybrid","dots hybrid bridge","mesh","assets","Rules","read","view","trigger","unity","material","managed",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":158,"publishedAt":33},"01M6KH4FGRQ9AP2ND5H5HX4D83","dots-event-driven-ecs","Model one-frame events and external requests in ECS without dual ownership, polling, or persistent state leaks. Covers request-tag pattern with ECB, enableable command components (no structural change), event buffers (IBufferElementData), explicit consumer ownership, one-frame latency rules, and the banned C# event \u002F UnityEvent \u002F static bus anti-patterns. Use when input\u002FUI\u002Fnetwork must trigger ECS work, when a one-frame signal fans out to N consumers (damage, hit, collision), or when state changes must be processed exactly once.","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002Fworkspace\u002Fdots-program\u002Fscratch\u002Fwave-2-orchestrator-drafts\u002Fdots-event-driven-ecs\u002FSKILL.md",[],[159,160,83,161,162,97,163,164,165,99,76,166,167,94,168,169,102,170,171,172],"event driven","driven","event","dots event driven ecs","change","ui","network","command","anti-patterns","pattern","structural","events","static","request",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":190,"publishedAt":33},"01M6KH4BWRGCEBJ8PKCKCSGT33","valid_skill","A complete, well-formed test fixture skill for SkillHub validation testing. Covers basic task routing and code review for Unity projects.","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fvalid_skill\u002FSKILL.md",[179,184,187],{"categoryNo":180,"categoryName":181,"taxonomyType":182,"taxonomyTypeDesc":183},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":185,"categoryName":186,"taxonomyType":182,"taxonomyTypeDesc":183},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":188,"categoryName":189,"taxonomyType":182,"taxonomyTypeDesc":183},"01JBSEEDCAT000000000000023","Skill与智能体开发",[191,192,193,194,195,196,197,198,199,200,201,202,203,204,149,205,21],"valid skill","valid","code review","testing","review","test","routing","code","validation","projects","fixture skill","task","fixture","basic","complete"]