[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KGFKMN51SP7T09T2ZSQ3SK":3,"skill-same:01M6KGFKMN51SP7T09T2ZSQ3SK":69},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":6,"ownerDescription":54,"updatedAt":55,"install":56,"resources":68},"01M6KGFKMN51SP7T09T2ZSQ3SK","wave8-dependency-complete-editor-only-fence",null,"Use state.Dependency.Complete() only as an editor-mode diagnostic fence to inspect intermediate job state, never as a production pattern for forcing job completion.","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\u002Fwave8-dependency-complete-editor-only-fence\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"wave8 dependency complete editor only fence","only","dependency","editor","complete","as","antipattern","for","diagnostic","mode","inspect","true","forcing","pattern","jobs","never","use","Production","state","debug","2026-11-10 10:12:30",false,"﻿---\nname: wave8-dependency-complete-editor-only-fence\ndescription: Use state.Dependency.Complete() only as an editor-mode diagnostic fence to inspect intermediate job state, never as a production pattern for forcing job completion.\ntags: [jobs, antipattern, debug]\nmetadata:\n  internal-only: true\n  tier: 3\n---\n\n# state.Dependency.Complete() — Editor-Only Diagnostic Fence\n\n## Intent\nUse state.Dependency.Complete() only as an editor-mode diagnostic fence to inspect intermediate job state, never as a production pattern for forcing job completion.\n\n## Use When\n- Adding a temporary diagnostic fence in editor builds to isolate a job scheduling bug or verify intermediate NativeArray state\n- Confirming a job's output in isolation before wiring it into a dependency chain\n\n## Avoid When\n- In any shipping build or production system — Complete() is a sync point anti-pattern\n- As a substitute for proper job dependency chaining — fix the chain, do not paper over it\n\n## Senior Pattern\n```csharp\n\u002F\u002F EDITOR-ONLY diagnostic fence — not for production:\npublic partial struct DiagnosticSystem : ISystem\n{\n    public void OnUpdate(ref SystemState state)\n    {\n        var results = CollectionHelper.CreateNativeArray\u003Cint>(100, state.WorldUpdateAllocator);\n        var job = new ComputeJob { Results = results };\n        state.Dependency = job.Schedule(state.Dependency);\n\n#if UNITY_EDITOR\n        \u002F\u002F Force sync to inspect intermediate state — remove before shipping:\n        state.Dependency.Complete();\n        UnityEngine.Debug.Log($\"Intermediate result[0]: {results[0]}\");\n#endif\n        \u002F\u002F Production: dependency chain propagates — no Complete() needed\n    }\n}\n\n\u002F\u002F PRODUCTION correct pattern — never forced Complete():\n[BurstCompile]\npublic partial struct ProductionSystem : ISystem\n{\n    [BurstCompile]\n    public void OnUpdate(ref SystemState state)\n    {\n        var results = CollectionHelper.CreateNativeArray\u003Cint>(100, state.WorldUpdateAllocator);\n        state.Dependency = new ComputeJob { Results = results }\n            .ScheduleParallel(state.Dependency);\n        \u002F\u002F Dependency propagates to consuming systems automatically\n    }\n}\n```\n\n## Anti-Patterns\n- `state.Dependency.Complete()` in every OnUpdate \"to be safe\" — full sync point every frame; eliminates all job parallelism; main-thread stall equal to all scheduled job duration.\n- Using Complete() to read job output without `#if UNITY_EDITOR` guard — ships the anti-pattern into production builds.\n- Using Complete() as a substitute for proper dependency chaining — masks scheduling bugs rather than fixing them.\n- Calling Complete() at the start of OnUpdate to \"wait for last frame's jobs\" — indicates incorrect Allocator.Persistent usage; switch to WorldUpdateAllocator.\n\n## Runtime Risks\n- Unguarded Complete() forces the main thread to wait for all scheduled jobs — destroying frame parallelism.\n- On a frame with 10ms of scheduled jobs, a Complete() in the middle stalls the main thread for up to 10ms.\n- In profiler: main thread shows \"WaitForJobGroupID\" — this is the Complete() stall.\n\n## Performance Notes\n- One unguarded Complete() in a hot system can raise frame time by 5–15ms on complex ECS worlds.\n- Use Unity Profiler job markers to identify the stall: look for main thread \"WaitForJobGroupID\" immediately followed by the system that called Complete().\n- Eliminating a single misplaced Complete() in a 10,000-entity system commonly recovers 2–8ms per frame.\n\n## Architecture Guidance\n- If you feel the need to call Complete() in production: this signals the dependency chain is broken. Fix the chain; do not paper over it.\n- For temporary diagnostics: always use `#if UNITY_EDITOR` guard; remove before merging to main.\n- For reading job output on the same frame: pass results via WorldUpdateAllocator NativeArray through state.Dependency to a consuming system.\n\n## Related Skills\n[[job-dependency-chain]], [[wave4-jobhandle-combine-dependencies]], [[wave8-handle-complete-sync-point-antipattern]], [[wave4-world-update-allocator-per-frame-native]]\n","# state.Dependency.Complete() — Editor-Only Diagnostic Fence\n\n## Intent\nUse state.Dependency.Complete() only as an editor-mode diagnostic fence to inspect intermediate job state, never as a production pattern for forcing job completion.\n\n## Use When\n- Adding a temporary diagnostic fence in editor builds to isolate a job scheduling bug or verify intermediate NativeArray state\n- Confirming a job's output in isolation before wiring it into a dependency chain\n\n## Avoid When\n- In any shipping build or production system — Complete() is a sync point anti-pattern\n- As a substitute for proper job dependency chaining — fix the chain, do not paper over it\n\n## Senior Pattern\n```csharp\n\u002F\u002F EDITOR-ONLY diagnostic fence — not for production:\npublic partial struct DiagnosticSystem : ISystem\n{\n    public void OnUpdate(ref SystemState state)\n    {\n        var results = CollectionHelper.CreateNativeArray\u003Cint>(100, state.WorldUpdateAllocator);\n        var job = new ComputeJob { Results = results };\n        state.Dependency = job.Schedule(state.Dependency);\n\n#if UNITY_EDITOR\n        \u002F\u002F Force sync to inspect intermediate state — remove before shipping:\n        state.Dependency.Complete();\n        UnityEngine.Debug.Log($\"Intermediate result[0]: {results[0]}\");\n#endif\n        \u002F\u002F Production: dependency chain propagates — no Complete() needed\n    }\n}\n\n\u002F\u002F PRODUCTION correct pattern — never forced Complete():\n[BurstCompile]\npublic partial struct ProductionSystem : ISystem\n{\n    [BurstCompile]\n    public void OnUpdate(ref SystemState state)\n    {\n        var results = CollectionHelper.CreateNativeArray\u003Cint>(100, state.WorldUpdateAllocator);\n        state.Dependency = new ComputeJob { Results = results }\n            .ScheduleParallel(state.Dependency);\n        \u002F\u002F Dependency propagates to consuming systems automatically\n    }\n}\n```\n\n## Anti-Patterns\n- `state.Dependency.Complete()` in every OnUpdate \"to be safe\" — full sync point every frame; eliminates all job parallelism; main-thread stall equal to all scheduled job duration.\n- Using Complete() to read job output without `#if UNITY_EDITOR` guard — ships the anti-pattern into production builds.\n- Using Complete() as a substitute for proper dependency chaining — masks scheduling bugs rather than fixing them.\n- Calling Complete() at the start of OnUpdate to \"wait for last frame's jobs\" — indicates incorrect Allocator.Persistent usage; switch to WorldUpdateAllocator.\n\n## Runtime Risks\n- Unguarded Complete() forces the main thread to wait for all scheduled jobs — destroying frame parallelism.\n- On a frame with 10ms of scheduled jobs, a Complete() in the middle stalls the main thread for up to 10ms.\n- In profiler: main thread shows \"WaitForJobGroupID\" — this is the Complete() stall.\n\n## Performance Notes\n- One unguarded Complete() in a hot system can raise frame time by 5–15ms on complex ECS worlds.\n- Use Unity Profiler job markers to identify the stall: look for main thread \"WaitForJobGroupID\" immediately followed by the system that called Complete().\n- Eliminating a single misplaced Complete() in a 10,000-entity system commonly recovers 2–8ms per frame.\n\n## Architecture Guidance\n- If you feel the need to call Complete() in production: this signals the dependency chain is broken. Fix the chain; do not paper over it.\n- For temporary diagnostics: always use `#if UNITY_EDITOR` guard; remove before merging to main.\n- For reading job output on the same frame: pass results via WorldUpdateAllocator NativeArray through state.Dependency to a consuming system.\n\n## Related Skills\n[[job-dependency-chain]], [[wave4-jobhandle-combine-dependencies]], [[wave8-handle-complete-sync-point-antipattern]], [[wave4-world-update-allocator-per-frame-native]]\n",{"name":5,"tags":44,"metadata":45,"description":7},[33,25,38],{"tier":46,"internal-only":47},3,true,"main","fe4746b9f07e6c7c2b6d3932002183af9b9f6fa2",".claude\u002Fskills\u002Funity-dots\u002Fwave8-dependency-complete-editor-only-fence",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":57,"prompt":67,"zipAvailable":47},[58,61,64],{"tool":59,"command":60},"npx","npx skills add dyCuong03\u002Funity-agent-team --skill wave8-dependency-complete-editor-only-fence",{"tool":62,"command":63},"bunx","bunx skills add dyCuong03\u002Funity-agent-team --skill wave8-dependency-complete-editor-only-fence",{"tool":65,"command":66},"pnpm","pnpm dlx skills add dyCuong03\u002Funity-agent-team --skill wave8-dependency-complete-editor-only-fence","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Funity-dots\u002Fwave8-dependency-complete-editor-only-fence\u002FSKILL.md",[],[70,93,117,140,159,179],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":39},"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",[],[77,78,79,80,81,82,83,84,35,34,85,86,87,88,89,90,91,92],"update","dots update groups","boundary","simulation","how","system","choose","work","peer","deterministic","how to","coupling","ecs","bugs","frame","value",{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":39},"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",[],[100,101,102,103,79,82,104,105,35,106,107,108,109,110,111,112,113,114,115,116],"patterns","transform","dots transform patterns","components","mount","model","cost","runtime","systems","input","with","matrix","socket","at","child","custom","hierarchy",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":128,"publishedAt":39},"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",[123],{"categoryNo":124,"categoryName":125,"taxonomyType":126,"taxonomyTypeDesc":127},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[100,129,130,131,132,37,133,82,105,35,134,135,136,107,137,24,110,91,138,139],"singleton","dots singleton patterns","component","config","game","writer","time","shared","contract","ecb","gating",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":146,"publishedAt":39},"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",[],[147,148,149,150,103,37,79,151,152,84,153,154,35,107,155,156,109,157,26,158],"bridge","hybrid","dots hybrid bridge","mesh","assets","Rules","read","view","trigger","unity","material","managed",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":39},"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",[],[166,167,89,168,169,103,170,171,172,105,84,173,174,100,32,175,109,176,177,178],"event driven","driven","event","dots event driven ecs","change","ui","network","command","anti-patterns","structural","events","static","request",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":196,"publishedAt":39},"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",[185,190,193],{"categoryNo":186,"categoryName":187,"taxonomyType":188,"taxonomyTypeDesc":189},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":191,"categoryName":192,"taxonomyType":188,"taxonomyTypeDesc":189},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":194,"categoryName":195,"taxonomyType":188,"taxonomyTypeDesc":189},"01JBSEEDCAT000000000000023","Skill与智能体开发",[197,198,199,200,201,202,203,204,205,206,207,208,209,210,156,23,26],"valid skill","valid","code review","testing","review","test","routing","code","validation","projects","fixture skill","task","fixture","basic"]