[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KH55FFS00ET877QSMRYGX4":3,"skill-same:01M6KH55FFS00ET877QSMRYGX4":64},{"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":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":48,"updatedAt":49,"install":50,"resources":63},"01M6KH55FFS00ET877QSMRYGX4","dots-update-groups",null,"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.","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\u002Fworkspace\u002Fdots-program\u002Fscratch\u002Fwave-2-orchestrator-drafts\u002Fdots-update-groups\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"dots update groups","update","peer","value","frame","bugs","ecs","coupling","how to","deterministic","never","use","work","choose","system","how","simulation","boundary","2026-11-10 10:12:30",false,"---\nname: dots-update-groups\ndescription: 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.\n---\n\n# Update Groups — Senior Patterns\n\nThe group an `ISystem` lives in is a contract about *when it runs and how often* — not a label. Get it wrong and reads see stale state, physics tunnels, and replays diverge.\n\n## Intent\n\nPick the update group, the relative order, and the timestep semantics deliberately. Make the data dependency graph match the system schedule.\n\n## The five built-in groups\n\n| Group | Runs | Time | Use for |\n|---|---|---|---|\n| `InitializationSystemGroup` | Once per frame, first | wall-clock | Input sampling, frame-start state setup, ECB.Begin\u002FEndInitialization |\n| `SimulationSystemGroup` | Once per frame | wall-clock `Time.DeltaTime` | Game logic, frame-coupled simulation |\n| `FixedStepSimulationSystemGroup` | **0 or N times** per frame | fixed `Time.DeltaTime` | Physics, netcode prediction, deterministic motion |\n| `VariableRateSimulationSystemGroup` | Per its own `RateManager` | manager-controlled | Low-frequency work (AI ticking at 10Hz) |\n| `PresentationSystemGroup` | Once per frame, last | wall-clock | Camera follow, hybrid GO sync, render-side reads |\n\n`SystemAPI.Time.DeltaTime` resolves *to whatever the current group's RateManager dictates*. Inside FixedStep it is the fixed step. Inside Variable it's the manager's delta. This is the subtle trap: code copy-pasted across groups silently changes meaning.\n\n## Senior pattern\n\n```csharp\n\u002F\u002F Frame-coupled: render-side read after sim writes.\n[UpdateInGroup(typeof(PresentationSystemGroup))]\npublic partial struct HudReadSystem : ISystem { \u002F* ... *\u002F }\n\n\u002F\u002F Deterministic motion: physics-coupled projectile.\n[UpdateInGroup(typeof(FixedStepSimulationSystemGroup))]\npublic partial struct ProjectileSystem : ISystem\n{\n    public void OnUpdate(ref SystemState state)\n    {\n        var dt = SystemAPI.Time.DeltaTime; \u002F\u002F = fixed step, NOT wall clock\n        \u002F\u002F ...\n    }\n}\n\n\u002F\u002F Peer ordering INSIDE the same group.\n[UpdateInGroup(typeof(SimulationSystemGroup))]\n[UpdateAfter(typeof(InputCollectionSystem))]   \u002F\u002F both must live in SimulationSystemGroup\n[UpdateBefore(typeof(MovementSystem))]\npublic partial struct CommandResolveSystem : ISystem { \u002F* ... *\u002F }\n\n\u002F\u002F Group-boundary placement (rare): make this run first\u002Flast *within* the group.\n[UpdateInGroup(typeof(SimulationSystemGroup), OrderFirst = true)]\npublic partial struct FrameStartSystem : ISystem { \u002F* ... *\u002F }\n```\n\n## Decision rule\n\n```\nIs the timing deterministic-critical (physics, netcode, replay)?\n  YES → FixedStepSimulationSystemGroup\n  NO  → Is it sampling input \u002F preparing the frame?\n          YES → InitializationSystemGroup\n          NO  → Is it reading what sim wrote, for output?\n                  YES → PresentationSystemGroup\n                  NO  → SimulationSystemGroup (default)\n```\n\nFor low-frequency work (AI scanning, distant-LOD updates): `VariableRateSimulationSystemGroup` + a custom `RateManager` that returns true only every N seconds. Cheaper than gating with timers inside `OnUpdate`.\n\n## Anti-patterns\n\n- ❌ `[UpdateBefore(typeof(X))]` where X lives in a different group. **Silently ignored.** No error. Order doesn't apply across group boundaries.\n- ❌ Calling `ComponentSystemGroup.SortSystems()` manually. Entities 1.x sorts via attributes only — manual sort is a 0.x managed pattern.\n- ❌ Frame-coupled mutation inside `FixedStepSimulationSystemGroup`. The group runs 0–N times per frame; allocating, spawning, or reading per-frame input here under\u002Fover-fires.\n- ❌ Two `[UpdateBefore]` attributes forming a cycle (A before B; B before A) — throws at world creation. Read the exception, don't suppress it.\n- ❌ Creating a custom group just to \"hold one system to be safe.\" Custom groups are for *bounded cooperating sets*, not for escaping ordering bugs.\n\n## Failure modes\n\n| Symptom | Cause |\n|---|---|\n| Reader sees value one frame late | Reader in same group as writer with no `[UpdateAfter(Writer)]` — registration order resolves it the wrong way |\n| Physics tunneling \u002F jitter at variable FPS | Physics in `SimulationSystemGroup` instead of `FixedStepSimulationSystemGroup` |\n| Non-deterministic replays under same seed | Two peer systems with no explicit ordering attribute — order set by registration |\n| `InvalidOperationException: Found circular dependency` | `[UpdateBefore]` cycle. Trace the chain and break it |\n| Bullets fire 0 times some frames, 2× others | `[UpdateAfter]` references a system in another group — silently ignored, bullets gated by something that \"should\" precede them but doesn't |\n\n## Runtime verification (Tester Verification Contract)\n\n- **Static:** grep every `[UpdateBefore]` \u002F `[UpdateAfter]` reference and confirm the target system carries an `[UpdateInGroup]` of the *same* group. Cross-group ordering attributes are a guaranteed bug.\n- **Runtime:** in the Entities Hierarchy window (or via `World.Systems` enumeration), print the actual resolved system order for the group. Compare against design intent. For determinism, run the scenario 3× with same seed and bit-compare entity snapshots.\n\n## Performance notes\n\n- `FixedStepSimulationSystemGroup` running 3× per frame on a slow frame means your simulation cost triples. Cap the catch-up via the group's `RateManager.Timestep` and `MaximumDeltaTime`.\n- `VariableRateSimulationSystemGroup` is the cheapest way to throttle expensive systems. Don't roll your own `if (timer > k) {…}` gate — it still pays the OnUpdate dispatch cost.\n- `OrderFirst = true` \u002F `OrderLast = true` create implicit dependencies on every other system in the group. Use sparingly; chains of OrderFirst become impossible to reason about.\n\n## Compile \u002F editor safety\n\n- Group ordering is resolved at world creation. Cycles fail loudly. Cross-group attributes fail silently — keep a CI lint.\n- `[CreateBefore]` \u002F `[CreateAfter]` exist for `OnCreate` ordering (rare, used when systems read from each other's OnCreate state). Don't confuse with `[UpdateBefore]`.\n\n## Entities version notes (1.4.x)\n\n- `ComponentSystemBase.SortSystems()` is gone. Attribute-driven sort only.\n- `[UpdateInGroup(typeof(G), OrderFirst = true)]` \u002F `OrderLast` are current.\n- `RateManager` is the current API for custom-rate groups. The 0.x `FixedStepSimulationSystemGroup.Timestep` setter is now `group.RateManager` cast to the concrete manager type.\n\n## See also\n- `dots-ecb-orchestration` — ECB system playback phase IS an update-group decision (cross-link, don't redefine here)\n- `dots-singleton-patterns` — `RequireForUpdate` gates the system independent of group\n- `dots-event-driven-ecs` — \"events visible one frame late\" is fundamentally a group-order issue\n","# Update Groups — Senior Patterns\n\nThe group an `ISystem` lives in is a contract about *when it runs and how often* — not a label. Get it wrong and reads see stale state, physics tunnels, and replays diverge.\n\n## Intent\n\nPick the update group, the relative order, and the timestep semantics deliberately. Make the data dependency graph match the system schedule.\n\n## The five built-in groups\n\n| Group | Runs | Time | Use for |\n|---|---|---|---|\n| `InitializationSystemGroup` | Once per frame, first | wall-clock | Input sampling, frame-start state setup, ECB.Begin\u002FEndInitialization |\n| `SimulationSystemGroup` | Once per frame | wall-clock `Time.DeltaTime` | Game logic, frame-coupled simulation |\n| `FixedStepSimulationSystemGroup` | **0 or N times** per frame | fixed `Time.DeltaTime` | Physics, netcode prediction, deterministic motion |\n| `VariableRateSimulationSystemGroup` | Per its own `RateManager` | manager-controlled | Low-frequency work (AI ticking at 10Hz) |\n| `PresentationSystemGroup` | Once per frame, last | wall-clock | Camera follow, hybrid GO sync, render-side reads |\n\n`SystemAPI.Time.DeltaTime` resolves *to whatever the current group's RateManager dictates*. Inside FixedStep it is the fixed step. Inside Variable it's the manager's delta. This is the subtle trap: code copy-pasted across groups silently changes meaning.\n\n## Senior pattern\n\n```csharp\n\u002F\u002F Frame-coupled: render-side read after sim writes.\n[UpdateInGroup(typeof(PresentationSystemGroup))]\npublic partial struct HudReadSystem : ISystem { \u002F* ... *\u002F }\n\n\u002F\u002F Deterministic motion: physics-coupled projectile.\n[UpdateInGroup(typeof(FixedStepSimulationSystemGroup))]\npublic partial struct ProjectileSystem : ISystem\n{\n    public void OnUpdate(ref SystemState state)\n    {\n        var dt = SystemAPI.Time.DeltaTime; \u002F\u002F = fixed step, NOT wall clock\n        \u002F\u002F ...\n    }\n}\n\n\u002F\u002F Peer ordering INSIDE the same group.\n[UpdateInGroup(typeof(SimulationSystemGroup))]\n[UpdateAfter(typeof(InputCollectionSystem))]   \u002F\u002F both must live in SimulationSystemGroup\n[UpdateBefore(typeof(MovementSystem))]\npublic partial struct CommandResolveSystem : ISystem { \u002F* ... *\u002F }\n\n\u002F\u002F Group-boundary placement (rare): make this run first\u002Flast *within* the group.\n[UpdateInGroup(typeof(SimulationSystemGroup), OrderFirst = true)]\npublic partial struct FrameStartSystem : ISystem { \u002F* ... *\u002F }\n```\n\n## Decision rule\n\n```\nIs the timing deterministic-critical (physics, netcode, replay)?\n  YES → FixedStepSimulationSystemGroup\n  NO  → Is it sampling input \u002F preparing the frame?\n          YES → InitializationSystemGroup\n          NO  → Is it reading what sim wrote, for output?\n                  YES → PresentationSystemGroup\n                  NO  → SimulationSystemGroup (default)\n```\n\nFor low-frequency work (AI scanning, distant-LOD updates): `VariableRateSimulationSystemGroup` + a custom `RateManager` that returns true only every N seconds. Cheaper than gating with timers inside `OnUpdate`.\n\n## Anti-patterns\n\n- ❌ `[UpdateBefore(typeof(X))]` where X lives in a different group. **Silently ignored.** No error. Order doesn't apply across group boundaries.\n- ❌ Calling `ComponentSystemGroup.SortSystems()` manually. Entities 1.x sorts via attributes only — manual sort is a 0.x managed pattern.\n- ❌ Frame-coupled mutation inside `FixedStepSimulationSystemGroup`. The group runs 0–N times per frame; allocating, spawning, or reading per-frame input here under\u002Fover-fires.\n- ❌ Two `[UpdateBefore]` attributes forming a cycle (A before B; B before A) — throws at world creation. Read the exception, don't suppress it.\n- ❌ Creating a custom group just to \"hold one system to be safe.\" Custom groups are for *bounded cooperating sets*, not for escaping ordering bugs.\n\n## Failure modes\n\n| Symptom | Cause |\n|---|---|\n| Reader sees value one frame late | Reader in same group as writer with no `[UpdateAfter(Writer)]` — registration order resolves it the wrong way |\n| Physics tunneling \u002F jitter at variable FPS | Physics in `SimulationSystemGroup` instead of `FixedStepSimulationSystemGroup` |\n| Non-deterministic replays under same seed | Two peer systems with no explicit ordering attribute — order set by registration |\n| `InvalidOperationException: Found circular dependency` | `[UpdateBefore]` cycle. Trace the chain and break it |\n| Bullets fire 0 times some frames, 2× others | `[UpdateAfter]` references a system in another group — silently ignored, bullets gated by something that \"should\" precede them but doesn't |\n\n## Runtime verification (Tester Verification Contract)\n\n- **Static:** grep every `[UpdateBefore]` \u002F `[UpdateAfter]` reference and confirm the target system carries an `[UpdateInGroup]` of the *same* group. Cross-group ordering attributes are a guaranteed bug.\n- **Runtime:** in the Entities Hierarchy window (or via `World.Systems` enumeration), print the actual resolved system order for the group. Compare against design intent. For determinism, run the scenario 3× with same seed and bit-compare entity snapshots.\n\n## Performance notes\n\n- `FixedStepSimulationSystemGroup` running 3× per frame on a slow frame means your simulation cost triples. Cap the catch-up via the group's `RateManager.Timestep` and `MaximumDeltaTime`.\n- `VariableRateSimulationSystemGroup` is the cheapest way to throttle expensive systems. Don't roll your own `if (timer > k) {…}` gate — it still pays the OnUpdate dispatch cost.\n- `OrderFirst = true` \u002F `OrderLast = true` create implicit dependencies on every other system in the group. Use sparingly; chains of OrderFirst become impossible to reason about.\n\n## Compile \u002F editor safety\n\n- Group ordering is resolved at world creation. Cycles fail loudly. Cross-group attributes fail silently — keep a CI lint.\n- `[CreateBefore]` \u002F `[CreateAfter]` exist for `OnCreate` ordering (rare, used when systems read from each other's OnCreate state). Don't confuse with `[UpdateBefore]`.\n\n## Entities version notes (1.4.x)\n\n- `ComponentSystemBase.SortSystems()` is gone. Attribute-driven sort only.\n- `[UpdateInGroup(typeof(G), OrderFirst = true)]` \u002F `OrderLast` are current.\n- `RateManager` is the current API for custom-rate groups. The 0.x `FixedStepSimulationSystemGroup.Timestep` setter is now `group.RateManager` cast to the concrete manager type.\n\n## See also\n- `dots-ecb-orchestration` — ECB system playback phase IS an update-group decision (cross-link, don't redefine here)\n- `dots-singleton-patterns` — `RequireForUpdate` gates the system independent of group\n- `dots-event-driven-ecs` — \"events visible one frame late\" is fundamentally a group-order issue\n",{"name":5,"description":7},"main","fe4746b9f07e6c7c2b6d3932002183af9b9f6fa2","workspace\u002Fdots-program\u002Fscratch\u002Fwave-2-orchestrator-drafts\u002Fdots-update-groups",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":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add dyCuong03\u002Funity-agent-team --skill dots-update-groups",{"tool":56,"command":57},"bunx","bunx skills add dyCuong03\u002Funity-agent-team --skill dots-update-groups",{"tool":59,"command":60},"pnpm","pnpm dlx skills add dyCuong03\u002Funity-agent-team --skill dots-update-groups","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002Fworkspace\u002Fdots-program\u002Fscratch\u002Fwave-2-orchestrator-drafts\u002Fdots-update-groups\u002FSKILL.md",true,[],[65,89,114,134,155,188],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":37},"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",[],[72,73,74,75,36,33,76,77,30,78,79,80,81,82,83,84,85,86,87,88],"patterns","transform","dots transform patterns","components","mount","model","cost","runtime","systems","input","with","matrix","socket","at","child","custom","hierarchy",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":100,"publishedAt":37},"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",[95],{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[72,101,102,103,104,105,106,33,77,30,107,108,109,79,110,111,82,23,112,113],"singleton","dots singleton patterns","component","config","state","game","writer","time","shared","contract","as","ecb","gating",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":37},"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",[],[121,122,123,124,75,105,36,125,126,31,127,128,30,79,129,130,81,131,132,133],"bridge","hybrid","dots hybrid bridge","mesh","assets","Rules","read","view","trigger","unity","material","for","managed",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":140,"publishedAt":37},"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",[],[141,142,25,143,144,75,145,146,147,77,31,148,149,72,150,151,81,152,153,154],"event driven","driven","event","dots event driven ecs","change","ui","network","command","anti-patterns","pattern","structural","events","static","request",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":172,"publishedAt":37},"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",[161,166,169],{"categoryNo":162,"categoryName":163,"taxonomyType":164,"taxonomyTypeDesc":165},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",{"categoryNo":167,"categoryName":168,"taxonomyType":164,"taxonomyTypeDesc":165},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":170,"categoryName":171,"taxonomyType":164,"taxonomyTypeDesc":165},"01JBSEEDCAT000000000000023","Skill与智能体开发",[173,174,175,176,177,178,179,180,181,182,183,184,185,186,130,187,132],"valid skill","valid","code review","testing","review","test","routing","code","validation","projects","fixture skill","task","fixture","basic","complete",{"skillNo":189,"name":190,"nameZh":6,"description":191,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":192,"categories":193,"keywords":194,"publishedAt":37},"01M6KH48R1VP1FPD07Y8RHD1QM","unsafe_commands","Skill fixture containing unsafe shell commands for security testing. Should be flagged by the validator.","https:\u002F\u002Fgithub.com\u002FdyCuong03\u002Funity-agent-team\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Funsafe_commands\u002FSKILL.md",[],[195,196,197,176,198,199,185,200,201,132,202],"commands","unsafe","unsafe commands","security","shell","Security Testing","validator","skill fixture"]