[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KG6XHM8T26SWFANVPT4SF3":3,"skill-same:01M6KG6XHM8T26SWFANVPT4SF3":68},{"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":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":6,"ownerHtmlUrl":52,"ownerBlogUrl":6,"ownerDescription":53,"updatedAt":54,"install":55,"resources":67},"01M6KG6XHM8T26SWFANVPT4SF3","job-dependency-chain",null,"Wire every scheduled job into the system''s dependency chain via state.Dependency so the ECS scheduler can automatically enforce read\u002Fwrite ordering between systems without explicit sync points.","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\u002Fjob-dependency-chain\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"job dependency chain","chain","dependency","jobs","scheduled","can","true","ecs","via","systems","enforce","performance","write","read","system","scheduler","state","core","sync","2026-11-10 10:12:30",false,"﻿---\nname: job-dependency-chain\ndescription: Wire every scheduled job into the system''s dependency chain via state.Dependency so the ECS scheduler can automatically enforce read\u002Fwrite ordering between systems without explicit sync points.\ntags: [core, jobs, performance]\nmetadata:\n  internal-only: true\n  tier: 3\n---\n\n# Job Dependency Chain\n\n## Intent\nWire every scheduled job into the system's dependency chain via state.Dependency so the ECS scheduler can automatically enforce read\u002Fwrite ordering between systems without explicit sync points.\n\n## Use When\nEvery IJobEntity.Schedule \u002F ScheduleParallel and IJobChunk.Schedule \u002F ScheduleParallel call, without exception.\n\n## Avoid When\nThere is no \"avoid when\" — this is non-negotiable for every job schedule call.\n\n## Senior Pattern\n- Pass current `state.Dependency` as the dependency parameter to Schedule\u002FScheduleParallel.\n- Assign the returned JobHandle back to `state.Dependency`.\n- The ECS scheduler reads `state.Dependency` after OnUpdate and wires it into the next system's input automatically.\n- Only call `state.Dependency.Complete()` when main-thread access to job results is required in the same frame — this is an explicit sync point.\n\n## Code Template\n```csharp\n[BurstCompile]\npublic void OnUpdate(ref SystemState state)\n{\n    \u002F\u002F Chain: pass in, assign out — always.\n    state.Dependency = new PrepareJob { ... }\n        .ScheduleParallel(state.Dependency);\n\n    state.Dependency = new ConsumeJob { ... }\n        .Schedule(state.Dependency);  \u002F\u002F sequential after PrepareJob\n\n    \u002F\u002F Only call Complete() when you MUST read results on main thread this frame:\n    \u002F\u002F state.Dependency.Complete();  \u002F\u002F explicit sync point — document why\n}\n```\n\n## Anti-Patterns\n- Forgetting to assign `state.Dependency = job.Schedule(...)` — silent data race, intermittent wrong results.\n- Calling `.Complete()` at the end of every OnUpdate as \"safety\" — introduces a full sync point every frame, stalls all worker threads.\n- Scheduling two jobs in the same OnUpdate without chaining the first result into the second's dependency — jobs may race.\n- Using a local JobHandle variable and never assigning it to state.Dependency — the dependency is lost.\n\n## Runtime Risks\n- Missing chain: data race between systems — non-deterministic, hardware-dependent, extremely hard to debug.\n- Unnecessary Complete(): worker thread stall every frame, frame time spike, CPU underutilization.\n\n## Performance Notes\nCorrect chaining allows the scheduler to run jobs from different systems in parallel when their read\u002Fwrite domains do not conflict. Breaking the chain forces serialisation. Never call Complete() without profiling evidence that the stall is acceptable.\n\n## Architecture Guidance\nTreat state.Dependency as the system's contract with the scheduler. In = work I depend on completing. Out = work I have scheduled. Never break the contract silently.\n","# Job Dependency Chain\n\n## Intent\nWire every scheduled job into the system's dependency chain via state.Dependency so the ECS scheduler can automatically enforce read\u002Fwrite ordering between systems without explicit sync points.\n\n## Use When\nEvery IJobEntity.Schedule \u002F ScheduleParallel and IJobChunk.Schedule \u002F ScheduleParallel call, without exception.\n\n## Avoid When\nThere is no \"avoid when\" — this is non-negotiable for every job schedule call.\n\n## Senior Pattern\n- Pass current `state.Dependency` as the dependency parameter to Schedule\u002FScheduleParallel.\n- Assign the returned JobHandle back to `state.Dependency`.\n- The ECS scheduler reads `state.Dependency` after OnUpdate and wires it into the next system's input automatically.\n- Only call `state.Dependency.Complete()` when main-thread access to job results is required in the same frame — this is an explicit sync point.\n\n## Code Template\n```csharp\n[BurstCompile]\npublic void OnUpdate(ref SystemState state)\n{\n    \u002F\u002F Chain: pass in, assign out — always.\n    state.Dependency = new PrepareJob { ... }\n        .ScheduleParallel(state.Dependency);\n\n    state.Dependency = new ConsumeJob { ... }\n        .Schedule(state.Dependency);  \u002F\u002F sequential after PrepareJob\n\n    \u002F\u002F Only call Complete() when you MUST read results on main thread this frame:\n    \u002F\u002F state.Dependency.Complete();  \u002F\u002F explicit sync point — document why\n}\n```\n\n## Anti-Patterns\n- Forgetting to assign `state.Dependency = job.Schedule(...)` — silent data race, intermittent wrong results.\n- Calling `.Complete()` at the end of every OnUpdate as \"safety\" — introduces a full sync point every frame, stalls all worker threads.\n- Scheduling two jobs in the same OnUpdate without chaining the first result into the second's dependency — jobs may race.\n- Using a local JobHandle variable and never assigning it to state.Dependency — the dependency is lost.\n\n## Runtime Risks\n- Missing chain: data race between systems — non-deterministic, hardware-dependent, extremely hard to debug.\n- Unnecessary Complete(): worker thread stall every frame, frame time spike, CPU underutilization.\n\n## Performance Notes\nCorrect chaining allows the scheduler to run jobs from different systems in parallel when their read\u002Fwrite domains do not conflict. Breaking the chain forces serialisation. Never call Complete() without profiling evidence that the stall is acceptable.\n\n## Architecture Guidance\nTreat state.Dependency as the system's contract with the scheduler. In = work I depend on completing. Out = work I have scheduled. Never break the contract silently.\n",{"name":5,"tags":43,"metadata":44,"description":7},[36,22,30],{"tier":45,"internal-only":46},3,true,"main","fe4746b9f07e6c7c2b6d3932002183af9b9f6fa2",".claude\u002Fskills\u002Funity-dots\u002Fjob-dependency-chain",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":56,"prompt":66,"zipAvailable":46},[57,60,63],{"tool":58,"command":59},"npx","npx skills add dyCuong03\u002Funity-agent-team --skill job-dependency-chain",{"tool":61,"command":62},"bunx","bunx skills add dyCuong03\u002Funity-agent-team --skill job-dependency-chain",{"tool":64,"command":65},"pnpm","pnpm dlx skills add dyCuong03\u002Funity-agent-team --skill job-dependency-chain","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Funity-dots\u002Fjob-dependency-chain\u002FSKILL.md",[],[69,92,115,139,158,179],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":38},"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",[],[76,77,78,79,80,33,81,82,83,84,85,86,87,88,26,89,90,91],"update","dots update groups","boundary","simulation","how","choose","work","use","never","peer","deterministic","how to","coupling","bugs","frame","value",{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":38},"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",[],[99,100,101,102,78,33,103,104,83,105,106,28,107,108,109,110,111,112,113,114],"patterns","transform","dots transform patterns","components","mount","model","cost","runtime","input","with","matrix","socket","at","child","custom","hierarchy",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":126,"publishedAt":38},"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",[121],{"categoryNo":122,"categoryName":123,"taxonomyType":124,"taxonomyTypeDesc":125},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[99,127,128,129,130,35,131,33,104,83,132,133,134,106,135,136,108,90,137,138],"singleton","dots singleton patterns","component","config","game","writer","time","shared","contract","as","ecb","gating",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":38},"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",[],[146,147,148,149,102,35,78,150,151,82,32,152,83,106,153,154,107,155,156,157],"bridge","hybrid","dots hybrid bridge","mesh","assets","Rules","view","trigger","unity","material","for","managed",{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":164,"publishedAt":38},"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",[],[165,166,26,167,168,102,169,170,171,104,82,172,173,99,174,175,107,176,177,178],"event driven","driven","event","dots event driven ecs","change","ui","network","command","anti-patterns","pattern","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":38},"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,154,211,156],"valid skill","valid","code review","testing","review","test","routing","code","validation","projects","fixture skill","task","fixture","basic","complete"]