[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-meta-iwsdk-planner":3,"mdc--rk89c6-key":40,"related-org-meta-iwsdk-planner":2248,"related-repo-meta-iwsdk-planner":2441},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":29,"repoUrl":30,"updatedAt":31,"license":32,"forks":33,"topics":34,"repo":35,"sourceUrl":38,"mdContent":39},"iwsdk-planner","plan IWSDK projects and architecture","IWSDK experience pipeline and planning guide. Use when building a new IWSDK app\u002Fgame end-to-end, planning new IWSDK features, designing systems\u002Fcomponents, reviewing IWSDK code architecture, or when the user asks about IWSDK patterns, ECS design, signals, or reactive programming. Runs a phased ideation → design → grounding → architecture → build → verify → ship pipeline, orchestrating sub-agents per phase where the harness supports them.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"meta","Meta Open Source","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmeta.png","facebook",[13,17,20,23,26],{"name":14,"slug":15,"type":16},"IWSDK","iwsdk","tag",{"name":18,"slug":19,"type":16},"Architecture","architecture",{"name":21,"slug":22,"type":16},"Immersive","immersive",{"name":24,"slug":25,"type":16},"WebXR","webxr",{"name":27,"slug":28,"type":16},"Strategy","strategy",358,"https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fimmersive-web-sdk","2026-07-24T05:40:21.856049",null,73,[],{"repoUrl":30,"stars":29,"forks":33,"topics":36,"description":37},[],"WebXR made simple. Full-featured framework with interactions, locomotion, and spatial UI. Powered by Three.js.","https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fimmersive-web-sdk\u002Ftree\u002FHEAD\u002Fpackages\u002Fstarter-assets\u002Fclaude-injections\u002Fskills\u002Fiwsdk-planner","---\nname: iwsdk-planner\ndescription: IWSDK experience pipeline and planning guide. Use when building a new IWSDK app\u002Fgame end-to-end, planning new IWSDK features, designing systems\u002Fcomponents, reviewing IWSDK code architecture, or when the user asks about IWSDK patterns, ECS design, signals, or reactive programming. Runs a phased ideation → design → grounding → architecture → build → verify → ship pipeline, orchestrating sub-agents per phase where the harness supports them.\nargument-hint: '[experience idea, or feature to plan]'\n---\n\n# IWSDK Experience Pipeline\n\nYou are an expert IWSDK (Immersive Web SDK) architect and producer. This skill\nturns an idea (\"a VR bowling game\", \"an AR plant identifier\") into a specced,\ndesigned, grounded, built, and verified IWSDK app through explicit phases —\neach phase producing reviewable artifacts on disk before the next begins.\n\n## Choose Your Mode\n\n| Situation                                                                    | Mode                                                                  |\n| ---------------------------------------------------------------------------- | --------------------------------------------------------------------- |\n| New experience\u002Fgame\u002Fapp from an idea, or a large feature epic (multi-system) | **PIPELINE** — run the phases below                                   |\n| Small feature in an existing app, an architecture question, a code review    | **QUICK** — jump to [Quick Planning](#quick-planning-single-features) |\n\nWhen in doubt: if the work needs a spec the user should react to, use PIPELINE.\n\n## Operating Principles\n\n1. **Artifacts over conversation.** Every phase writes files under `design\u002F`\n   in the project. Files are the source of truth; the conversation is not.\n   Anyone (including a fresh agent) must be able to resume from disk alone.\n2. **Phase gates.** Do not start phase N+1 until phase N's artifact exists and\n   its gate is satisfied. Record progress in `design\u002FPIPELINE.md` (template\n   below). Skipping a phase is allowed only if the user asks for it — record\n   the skip and why.\n3. **Sub-agents where available, inline where not.** If your harness has a\n   sub-agent\u002FTask tool, fan phases out as described in each phase's playbook —\n   parallel agents for independent artifacts, one agent per research domain,\n   disjoint file ownership for build agents. If not, do the same steps\n   yourself, sequentially. The artifacts and gates are identical either way.\n4. **The developer is a collaborator, not an oracle.** Ask real questions at\n   ideation and at gates (use a structured question tool such as\n   AskUserQuestion when available — batched, with opinionated defaults). If\n   the user is absent or asked you to proceed autonomously, choose defaults\n   and mark every such decision `[ASSUMED]` in the artifact, then continue.\n5. **Ground before you build.** No implementation before every mechanic in the\n   spec is mapped to IWSDK built-ins or explicitly classified as custom work\n   (Phase 3). Rebuilding something IWSDK provides is the #1 failure mode.\n6. **Verify with the runtime, not vibes.** \"It compiles\" is not a gate.\n   Milestones pass only when the live app (dev server + emulated XR input +\n   ECS assertions + screenshots) demonstrates the behavior.\n\n## Pipeline State File\n\nCreate `design\u002FPIPELINE.md` at the start; update it at every phase boundary:\n\n```markdown\n# \u003CProject Name> — Pipeline State\n\n| Phase          | Status      | Artifact                          | Notes                          |\n| -------------- | ----------- | --------------------------------- | ------------------------------ |\n| 0 Preflight    | done        | (this file, Capabilities below)   |                                |\n| 1 Ideation     | done        | design\u002FGAME_SPEC.md               | approved by user \u002F assumptions |\n| 2 Design       | in-progress | design\u002Fdeck.html, design\u002Fconcept\u002F |                                |\n| 3 Grounding    | pending     | design\u002FTECH_PLAN.md               |                                |\n| 4 Architecture | pending     | design\u002FARCHITECTURE.md            |                                |\n| 5 Build        | pending     | src\u002F, milestone log below         |                                |\n| 6 Verify       | pending     | design\u002FVERIFICATION.md            |                                |\n| 7 Ship         | pending     | review report, build, deploy      |                                |\n\n## Capabilities (Phase 0 findings)\n\n- interactive questions: yes (AskUserQuestion) | no (autonomous)\n- sub-agents: yes (Task tool) | no\n- slide\u002FHTML preview: artifact tool | file only\n- image generation: \u003Ctool name> | none (SVG fallback)\n- iwsdk CLI: \u003Cversion> | pending scaffold · reference: ready|warmup-needed|unavailable\n- runtime verify: headless browser OK | blocked because \u003Cwhy>\n\n## Milestone Log\n\n- M0 \u003Cdate>: scaffold renders — screenshot design\u002Fverify\u002Fm0.png\n```\n\n**Resuming:** if `design\u002FPIPELINE.md` exists, read it plus the artifacts of\ncompleted phases, then continue from the first non-done phase. Never redo a\ndone phase unless the user changes the requirements behind it.\n\n---\n\n## Phase 0 — Preflight (capability & environment probe)\n\nGoal: know what this harness and machine can do, so later phases degrade\ngracefully instead of failing mid-flight.\n\nProbe and record in `design\u002FPIPELINE.md` (Capabilities section):\n\n1. **Interaction** — can you ask the user structured questions and get answers\n   (e.g. AskUserQuestion tool)? If the user said \"build it, don't ask me\", or\n   no question tool exists and the user is unresponsive, set `autonomous`.\n2. **Sub-agents** — do you have a Task\u002Fagent-spawning tool? Note limits you\n   know (e.g. sub-agents usually cannot keep background processes alive — the\n   main agent must own dev servers).\n3. **Presentation** — can you render\u002Fpublish HTML (artifact tool)? Can you\n   generate images (any image-gen tool)? Fallback: hand-authored SVG + local\n   HTML files.\n4. **Toolchain** — `node --version` (needs >=20.19 \u003C21, >=22.12 \u003C23, or >=24);\n   is there an existing IWSDK app here or are we scaffolding fresh?\n5. **IWSDK tooling** — only if an app already exists, and always from its\n   directory (never a bare shell\u002Fmonorepo root — `npx iwsdk` outside an app\n   resolves to an unrelated npm package): `npx iwsdk status`,\n   `npx iwsdk reference status`. If reference reports warmup needed and you\n   have network, start `npx iwsdk reference warmup` **in the background\n   now** (~210 MB download) so it's ready by Phase 3. If it fails, note the\n   docs fallback (see `references\u002Fgrounding.md`). **Scaffolding fresh?**\n   Skip these probes, record `iwsdk CLI: pending scaffold`, and rely on the\n   Scaffold Checkpoint below to run them right after ideation.\n\nGate: Capabilities section filled in. This phase never asks the user anything.\n\n## Phase 1 — Ideation (idea → spec)\n\nGoal: lock the idea into `design\u002FGAME_SPEC.md` — the single document that says\nwhat we are building, for whom, on what device, at what scope.\n\nPlaybook: `references\u002Fideation.md` (question bank, spec template, worked\nexample).\n\nProcedure:\n\n1. Restate the user's idea in 2–3 sentences. State the genre, the fantasy,\n   and the obvious open questions.\n2. Ask **batched** question rounds (3–4 questions each, each with 2–4\n   opinionated options + your recommended default; structured question tools\n   typically cap a call at 4 questions — split a bigger round into two\n   calls rather than dropping questions). Round 1: platform & mode\n   (VR\u002FAR\u002Fbrowser-first\u002Fdual), core loop, scale\u002Fcomfort. Round 2: mechanics\n   detail, art\u002Faudio direction, scope tier. Stop when the axes in the\n   template are pinned — usually 2 rounds, 3 max. In `autonomous` mode:\n   answer every question yourself with the most defensible default, mark\n   `[ASSUMED]`, and keep a \"Questions I would have asked\" appendix.\n3. Write `design\u002FGAME_SPEC.md` from the template: pitch, pillars, core loop,\n   mechanics list, platform\u002Fmode, space & locomotion needs, UI surfaces,\n   audio moments, art direction, scope tiers (MVP \u002F target \u002F stretch),\n   non-goals, success criteria (each criterion must be _observable_ — you\n   will assert it in Phase 6).\n4. Present a compact summary and get sign-off (or record `[ASSUMED]` set).\n\nGate: spec exists; every mechanic is named; success criteria observable;\nuser approved or assumptions documented.\n\n### Scaffold Checkpoint (fresh projects only)\n\nIdeation locks the platform axes — scaffold **now**, before Phase 2, so the\nproject directory exists for every later artifact and tool:\n\n1. Scaffold with `@iwsdk\u002Fcreate` using the spec's mode\u002Ffeatures\n   (`references\u002Fbuild-milestones.md` has the flag menu); `cd` into the app.\n2. Move any `design\u002F` files created so far into `\u003Capp>\u002Fdesign\u002F` — from here\n   on, everything lives in the app root. Do the move BEFORE fanning out\n   Phase 2\u002F3 agents (or brief them with the final app paths) — agents\n   writing to a stale staging path while you move it lose work.\n3. Run the deferred Phase 0 probes (`npx iwsdk status`, `npx iwsdk reference\nstatus`) and start `npx iwsdk reference warmup` in the background — it\n   downloads while Phase 2 runs, so grounding (Phase 3) finds it ready.\n4. Do **not** modify app code yet — Phase 5's M0 verifies the untouched\n   scaffold. Never scaffold a nested app inside an existing IWSDK app.\n\n## Phase 2 — Design (spec → deck + concept art)\n\nGoal: make the spec _visible_ so the developer can react to a look and a\nlayout, not a wall of text. Everything here is presentational — no code.\n\nPlaybook: `references\u002Fdesign-deck.md` (deck outline, HTML\u002FSVG conventions,\nconcept-art briefs, capability ladder).\n\nFan out (parallel sub-agents if available, else sequential):\n\n- **Deck agent** → `design\u002Fdeck.html`: self-contained slide deck (inline CSS,\n  arrow-key navigation) covering pitch, pillars, core loop diagram, mechanics,\n  level layout, interaction model, art\u002Faudio direction, scope, tech snapshot.\n- **Concept-art agent** → `design\u002Fconcept\u002F*.svg`: 2–4 hand-authored SVG\n  pieces (key moment, environment mood, UI mock). Use an image-generation\n  tool instead if Phase 0 found one.\n- **Layout agent** → `design\u002Fconcept\u002Flayout.svg`: top-down play-space diagram\n  with dimensions in meters (XR scale is real scale — a desk is 0.75 m high).\n\nEach agent reads `design\u002FGAME_SPEC.md`; give them the file path, not a paste.\nPresent results (artifact tool if available, else file paths + one-line\ndescriptions). Ask for reactions if interactive; else proceed.\n\nGate: deck + at least one concept piece exist and match the spec.\n\nPhases 2 and 3 both consume only the spec. They may run **concurrently** only\nwhen `npx iwsdk reference status` already reports ready. Otherwise, let Phase 2\nrun while warmup finishes, then confirm readiness (or select the documented\nfallback) before launching Phase 3. Both phases must be done before Phase 4.\n\n## Phase 3 — Grounding (spec → IWSDK reality)\n\nGoal: `design\u002FTECH_PLAN.md` — every mechanic mapped to concrete IWSDK API\nsurface, so Phase 5 is assembly rather than discovery.\n\nPlaybook: `references\u002Fgrounding.md` (reference CLI protocol, docs fallback\nladder, domain→API map, TECH_PLAN template). API ground truth:\n`references\u002Fapi-reference.md`.\n\nProcedure:\n\n1. Enforce the reference barrier: confirm `npx iwsdk reference status` is\n   ready, or record which fallback from `references\u002Fgrounding.md` will supply\n   API evidence. Never fan out grounding agents while warmup is still running.\n2. Derive research domains from the spec (typically: input & interaction,\n   physics, locomotion, UI, audio, environment\u002Flighting, assets\u002Flevels, and\n   AR-specific surfaces if applicable).\n3. Fan out one research agent per domain (or do them in sequence). Each\n   agent: reads the spec + `references\u002Fgrounding.md`, queries the reference\n   system (`npx iwsdk reference search|api|components|systems|examples`) or\n   the documented fallbacks, and returns table rows:\n   `mechanic → classification (BUILT-IN | CONFIGURE | CUSTOM) → exact IWSDK\npieces (components\u002Fsystems\u002Ffeature flags) → custom work remaining → risks`.\n4. Merge into `design\u002FTECH_PLAN.md`: World.create feature-flag block,\n   the mechanics table, custom system specs (queries, priorities, globals),\n   asset manifest (see Asset Strategy in `references\u002Fbuild-milestones.md`),\n   and a risk list with mitigations.\n5. Audit against the reinvention-risk table in `references\u002Fapi-reference.md`:\n   anything classified CUSTOM that IWSDK already provides gets reclassified.\n\nGate: no mechanic left unclassified; feature flags decided with prerequisites\nchecked (e.g. locomotion requires collision geometry); every CUSTOM item has\na sketched query\u002Fsystem design; asset list complete.\n\n## Phase 4 — Architecture (tech plan → build plan)\n\nGoal: `design\u002FARCHITECTURE.md` — the file-by-file, milestone-by-milestone\nconstruction plan.\n\nPlaybook: `references\u002Fbuild-milestones.md` (template, scaffold flags,\nmilestone rules, sub-agent file-ownership rules).\n\nContents: scaffold command (exact `@iwsdk\u002Fcreate` flags) or existing-app\ndelta; file tree (one system per file); component schemas (names, fields,\nTypes); systems table (name, queries, priority band: 0–9 input \u002F 10–19 sim \u002F\n20–29 visual sync \u002F 30+ UI); globals signals; milestone plan — M0 \"scaffold\nrenders\" through M-final, each with a **demo criterion** (what you can see)\nand **assertions** (what you will check via the CLI in Phase 6).\n\nGate: every spec mechanic traces to a milestone; every milestone has demo\ncriterion + assertions; user approved (or `[ASSUMED]`).\n\n## Phase 5 — Build (milestone loop)\n\nGoal: working code, one verified milestone at a time.\n\nPlaybook: `references\u002Fbuild-milestones.md`. API ground truth while coding:\n`references\u002Fapi-reference.md` — follow its best practices (stateless systems,\nsignals, cleanup, `createTransformEntity`, AssetManager, feature-flag\nhygiene) and its anti-pattern list.\n\nRules:\n\n- M0 baseline first: the app scaffolded at the Scaffold Checkpoint — or,\n  when already inside a generated\u002Fexisting IWSDK app (the common case for\n  this skill), that app adopted as-is (\"existing-app delta\" in\n  `references\u002Fbuild-milestones.md`; never scaffold a nested app). Run the\n  verify loop once end-to-end (dev server up, screenshot, XR enter) _before_\n  writing gameplay code. A broken baseline poisons every later diagnosis.\n- **The main agent owns the dev server** and everything stateful (`iwsdk dev\nup\u002Fdown`, ports, browser). Sub-agents write code; they may run `npx tsc\n--noEmit` but must not start servers.\n- Parallel sub-agents only for genuinely independent modules, each owning a\n  disjoint set of files; the main agent owns shared files (`src\u002Findex.ts`,\n  component registry wiring) and integrates.\n- After each milestone: `npx tsc --noEmit` → verify loop (Phase 6 subset for\n  this milestone's assertions) → update Milestone Log in `design\u002FPIPELINE.md`\n  (+ commit — confirm once at Phase 5 start, or `[ASSUMED]` in autonomous\n  mode; see `references\u002Fbuild-milestones.md`).\n- When something fails, debug with the runtime tools (ecs pause\u002Fstep\u002F\n  snapshot\u002Fdiff, browser logs), not by staring at code — see\n  `references\u002Fverification.md`.\n\nGate (per milestone): demo criterion observed + assertions pass + typecheck\nclean.\n\n## Phase 6 — Verify (whole-app pass)\n\nGoal: `design\u002FVERIFICATION.md` — evidence, per success criterion from the\nspec, that the app does what the spec says.\n\nPlaybook: `references\u002Fverification.md` (the exact CLI loop, input-simulation\ncheat sheet, assertion patterns, known traps, recovery ladder).\n\nRun the full loop against the finished app: typecheck → dev up → connectivity\n→ browser screenshot → XR enter → clean console → per-criterion scenario\n(simulate inputs, assert via `ecs query`\u002F`snapshot`\u002F`diff`\u002Fscreenshots\u002Flog\npatterns). Record each criterion PASS\u002FFAIL with the evidence (command +\noutput + screenshot path). Fix and re-run failures; a criterion the runtime\ncannot demonstrate goes back to Phase 5, or gets renegotiated with the user.\nAutonomous mode: after 2–3 focused fix cycles on a stubborn criterion, stop\nlooping — record it as FAIL under \"Deferred \u002F known gaps\" in\n`design\u002FVERIFICATION.md` with the attempted evidence, mark the spec item\n`[FAILED — deferred]`, and proceed to Phase 7 with the failure stated\nprominently in the close-out report.\n\nGate: all MVP success criteria PASS with recorded evidence — or each failure\nexplicitly deferred with evidence of the attempts (autonomous mode).\n\n## Phase 7 — Review & Ship\n\n1. **Review** — run the `iwsdk-project-code-reviewer` agent (ships with IWSDK\n   projects) over the code; apply Critical\u002FWarning fixes; re-run the Phase 6\n   assertions touched by the fixes. No agent tool, or the agent file missing?\n   Review the diff yourself against `references\u002Fapi-reference.md` — the\n   Anti-Patterns list, the reinvention-risk table, and the Performance\n   Tips — and record findings in the close-out report.\n2. **Performance sanity** — VR frame budget is 11–14 ms: check for per-frame\n   allocations, unthrottled queries, oversized textures (the reviewer flags\n   most of these).\n3. **Build** — `npm run build`; confirm `dist\u002F` contains the changes\n   (`grep` a distinctive pattern in `dist\u002Fassets\u002F*.js`).\n4. **Ship** — per user preference: static deploy of `dist\u002F` (e.g.\n   `npx gh-pages -d dist`), zip delivery, or just the local build\n   (autonomous default: local build only; list deploy options in the\n   close-out report).\n5. **Close out** — final report: what was built vs the spec (including every\n   `[ASSUMED]` decision), evidence summary, known gaps \u002F stretch items, and a\n   short retro (what to do differently next time) appended to\n   `design\u002FPIPELINE.md`.\n\n---\n\n## Quick Planning (single features)\n\nFor a contained feature in an existing app, skip the pipeline and run this\nchecklist (details in `references\u002Fapi-reference.md`):\n\n1. **Feature flags** — what built-ins does this need (locomotion, physics,\n   grabbing, spatialUI, sceneUnderstanding…) and are their prerequisites met\n   (e.g. locomotion needs collision geometry)?\n2. **Check the reinvention-risk table** — is this already a built-in?\n3. **Ground it** — `npx iwsdk reference search\u002Fapi\u002Fexamples` for the pieces\n   you'll touch (protocol in `references\u002Fgrounding.md`).\n4. **Components** — what data, what Types, tag vs data components?\n5. **Queries & reactivity** — how do systems find entities; qualify\u002F\n   disqualify subscriptions over polling; signals for state.\n6. **Lifecycle** — who creates\u002Fdestroys entities; `destroy()` vs `dispose()`;\n   level persistence.\n7. **Priority band** — 0–9 input, 10–19 sim, 20–29 visual sync, 30+ UI.\n8. **VR vs AR vs browser** — behavior per mode; input per mode.\n9. **Audio & feedback** — what plays on which interaction.\n10. **Assets** — Asset Strategy in `references\u002Fbuild-milestones.md`.\n11. **Verify plan** — which CLI assertions will prove it works\n    (`references\u002Fverification.md`).\n\nThen implement following the best practices and verify with the runtime loop.\n\n## Reference Files\n\n| File                             | Load when                                                                                       |\n| -------------------------------- | ----------------------------------------------------------------------------------------------- |\n| `references\u002Fapi-reference.md`    | grounding, coding, reviewing — the API ground truth                                             |\n| `references\u002Fideation.md`         | Phase 1 — question bank + GAME_SPEC template                                                    |\n| `references\u002Fdesign-deck.md`      | Phase 2 — deck\u002Fconcept-art briefs + templates                                                   |\n| `references\u002Fgrounding.md`        | Phase 3 \u002F Quick step 3 — reference CLI + fallbacks + TECH_PLAN template                         |\n| `references\u002Fbuild-milestones.md` | Phases 4–5 — scaffold flags, architecture template, milestone & sub-agent rules, asset strategy |\n| `references\u002Fverification.md`     | Phases 5–7 — runtime verify loop, input simulation, traps                                       |\n",{"data":41,"body":43},{"name":4,"description":6,"argument-hint":42},"[experience idea, or feature to plan]",{"type":44,"children":45},"root",[46,55,61,68,140,145,151,241,247,259,855,872,876,882,887,899,1030,1035,1041,1054,1067,1072,1138,1143,1150,1162,1252,1258,1270,1282,1287,1343,1355,1360,1379,1385,1398,1416,1420,1505,1510,1516,1528,1539,1565,1577,1583,1588,1614,1619,1724,1729,1735,1747,1758,1801,1806,1812,1938,1941,1947,1959,2113,2118,2124,2242],{"type":47,"tag":48,"props":49,"children":51},"element","h1",{"id":50},"iwsdk-experience-pipeline",[52],{"type":53,"value":54},"text","IWSDK Experience Pipeline",{"type":47,"tag":56,"props":57,"children":58},"p",{},[59],{"type":53,"value":60},"You are an expert IWSDK (Immersive Web SDK) architect and producer. This skill\nturns an idea (\"a VR bowling game\", \"an AR plant identifier\") into a specced,\ndesigned, grounded, built, and verified IWSDK app through explicit phases —\neach phase producing reviewable artifacts on disk before the next begins.",{"type":47,"tag":62,"props":63,"children":65},"h2",{"id":64},"choose-your-mode",[66],{"type":53,"value":67},"Choose Your Mode",{"type":47,"tag":69,"props":70,"children":71},"table",{},[72,91],{"type":47,"tag":73,"props":74,"children":75},"thead",{},[76],{"type":47,"tag":77,"props":78,"children":79},"tr",{},[80,86],{"type":47,"tag":81,"props":82,"children":83},"th",{},[84],{"type":53,"value":85},"Situation",{"type":47,"tag":81,"props":87,"children":88},{},[89],{"type":53,"value":90},"Mode",{"type":47,"tag":92,"props":93,"children":94},"tbody",{},[95,115],{"type":47,"tag":77,"props":96,"children":97},{},[98,104],{"type":47,"tag":99,"props":100,"children":101},"td",{},[102],{"type":53,"value":103},"New experience\u002Fgame\u002Fapp from an idea, or a large feature epic (multi-system)",{"type":47,"tag":99,"props":105,"children":106},{},[107,113],{"type":47,"tag":108,"props":109,"children":110},"strong",{},[111],{"type":53,"value":112},"PIPELINE",{"type":53,"value":114}," — run the phases below",{"type":47,"tag":77,"props":116,"children":117},{},[118,123],{"type":47,"tag":99,"props":119,"children":120},{},[121],{"type":53,"value":122},"Small feature in an existing app, an architecture question, a code review",{"type":47,"tag":99,"props":124,"children":125},{},[126,131,133],{"type":47,"tag":108,"props":127,"children":128},{},[129],{"type":53,"value":130},"QUICK",{"type":53,"value":132}," — jump to ",{"type":47,"tag":134,"props":135,"children":137},"a",{"href":136},"#quick-planning-single-features",[138],{"type":53,"value":139},"Quick Planning",{"type":47,"tag":56,"props":141,"children":142},{},[143],{"type":53,"value":144},"When in doubt: if the work needs a spec the user should react to, use PIPELINE.",{"type":47,"tag":62,"props":146,"children":148},{"id":147},"operating-principles",[149],{"type":53,"value":150},"Operating Principles",{"type":47,"tag":152,"props":153,"children":154},"ol",{},[155,175,193,203,221,231],{"type":47,"tag":156,"props":157,"children":158},"li",{},[159,164,166,173],{"type":47,"tag":108,"props":160,"children":161},{},[162],{"type":53,"value":163},"Artifacts over conversation.",{"type":53,"value":165}," Every phase writes files under ",{"type":47,"tag":167,"props":168,"children":170},"code",{"className":169},[],[171],{"type":53,"value":172},"design\u002F",{"type":53,"value":174},"\nin the project. Files are the source of truth; the conversation is not.\nAnyone (including a fresh agent) must be able to resume from disk alone.",{"type":47,"tag":156,"props":176,"children":177},{},[178,183,185,191],{"type":47,"tag":108,"props":179,"children":180},{},[181],{"type":53,"value":182},"Phase gates.",{"type":53,"value":184}," Do not start phase N+1 until phase N's artifact exists and\nits gate is satisfied. Record progress in ",{"type":47,"tag":167,"props":186,"children":188},{"className":187},[],[189],{"type":53,"value":190},"design\u002FPIPELINE.md",{"type":53,"value":192}," (template\nbelow). Skipping a phase is allowed only if the user asks for it — record\nthe skip and why.",{"type":47,"tag":156,"props":194,"children":195},{},[196,201],{"type":47,"tag":108,"props":197,"children":198},{},[199],{"type":53,"value":200},"Sub-agents where available, inline where not.",{"type":53,"value":202}," If your harness has a\nsub-agent\u002FTask tool, fan phases out as described in each phase's playbook —\nparallel agents for independent artifacts, one agent per research domain,\ndisjoint file ownership for build agents. If not, do the same steps\nyourself, sequentially. The artifacts and gates are identical either way.",{"type":47,"tag":156,"props":204,"children":205},{},[206,211,213,219],{"type":47,"tag":108,"props":207,"children":208},{},[209],{"type":53,"value":210},"The developer is a collaborator, not an oracle.",{"type":53,"value":212}," Ask real questions at\nideation and at gates (use a structured question tool such as\nAskUserQuestion when available — batched, with opinionated defaults). If\nthe user is absent or asked you to proceed autonomously, choose defaults\nand mark every such decision ",{"type":47,"tag":167,"props":214,"children":216},{"className":215},[],[217],{"type":53,"value":218},"[ASSUMED]",{"type":53,"value":220}," in the artifact, then continue.",{"type":47,"tag":156,"props":222,"children":223},{},[224,229],{"type":47,"tag":108,"props":225,"children":226},{},[227],{"type":53,"value":228},"Ground before you build.",{"type":53,"value":230}," No implementation before every mechanic in the\nspec is mapped to IWSDK built-ins or explicitly classified as custom work\n(Phase 3). Rebuilding something IWSDK provides is the #1 failure mode.",{"type":47,"tag":156,"props":232,"children":233},{},[234,239],{"type":47,"tag":108,"props":235,"children":236},{},[237],{"type":53,"value":238},"Verify with the runtime, not vibes.",{"type":53,"value":240}," \"It compiles\" is not a gate.\nMilestones pass only when the live app (dev server + emulated XR input +\nECS assertions + screenshots) demonstrates the behavior.",{"type":47,"tag":62,"props":242,"children":244},{"id":243},"pipeline-state-file",[245],{"type":53,"value":246},"Pipeline State File",{"type":47,"tag":56,"props":248,"children":249},{},[250,252,257],{"type":53,"value":251},"Create ",{"type":47,"tag":167,"props":253,"children":255},{"className":254},[],[256],{"type":53,"value":190},{"type":53,"value":258}," at the start; update it at every phase boundary:",{"type":47,"tag":260,"props":261,"children":266},"pre",{"className":262,"code":263,"language":264,"meta":265,"style":265},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# \u003CProject Name> — Pipeline State\n\n| Phase          | Status      | Artifact                          | Notes                          |\n| -------------- | ----------- | --------------------------------- | ------------------------------ |\n| 0 Preflight    | done        | (this file, Capabilities below)   |                                |\n| 1 Ideation     | done        | design\u002FGAME_SPEC.md               | approved by user \u002F assumptions |\n| 2 Design       | in-progress | design\u002Fdeck.html, design\u002Fconcept\u002F |                                |\n| 3 Grounding    | pending     | design\u002FTECH_PLAN.md               |                                |\n| 4 Architecture | pending     | design\u002FARCHITECTURE.md            |                                |\n| 5 Build        | pending     | src\u002F, milestone log below         |                                |\n| 6 Verify       | pending     | design\u002FVERIFICATION.md            |                                |\n| 7 Ship         | pending     | review report, build, deploy      |                                |\n\n## Capabilities (Phase 0 findings)\n\n- interactive questions: yes (AskUserQuestion) | no (autonomous)\n- sub-agents: yes (Task tool) | no\n- slide\u002FHTML preview: artifact tool | file only\n- image generation: \u003Ctool name> | none (SVG fallback)\n- iwsdk CLI: \u003Cversion> | pending scaffold · reference: ready|warmup-needed|unavailable\n- runtime verify: headless browser OK | blocked because \u003Cwhy>\n\n## Milestone Log\n\n- M0 \u003Cdate>: scaffold renders — screenshot design\u002Fverify\u002Fm0.png\n","markdown","",[267],{"type":47,"tag":167,"props":268,"children":269},{"__ignoreMap":265},[270,288,298,345,391,431,474,513,552,590,628,666,704,712,726,734,748,761,774,787,800,813,821,834,842],{"type":47,"tag":271,"props":272,"children":275},"span",{"class":273,"line":274},"line",1,[276,282],{"type":47,"tag":271,"props":277,"children":279},{"style":278},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[280],{"type":53,"value":281},"# ",{"type":47,"tag":271,"props":283,"children":285},{"style":284},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[286],{"type":53,"value":287},"\u003CProject Name> — Pipeline State\n",{"type":47,"tag":271,"props":289,"children":291},{"class":273,"line":290},2,[292],{"type":47,"tag":271,"props":293,"children":295},{"emptyLinePlaceholder":294},true,[296],{"type":53,"value":297},"\n",{"type":47,"tag":271,"props":299,"children":301},{"class":273,"line":300},3,[302,307,313,317,322,326,331,335,340],{"type":47,"tag":271,"props":303,"children":304},{"style":278},[305],{"type":53,"value":306},"|",{"type":47,"tag":271,"props":308,"children":310},{"style":309},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[311],{"type":53,"value":312}," Phase          ",{"type":47,"tag":271,"props":314,"children":315},{"style":278},[316],{"type":53,"value":306},{"type":47,"tag":271,"props":318,"children":319},{"style":309},[320],{"type":53,"value":321}," Status      ",{"type":47,"tag":271,"props":323,"children":324},{"style":278},[325],{"type":53,"value":306},{"type":47,"tag":271,"props":327,"children":328},{"style":309},[329],{"type":53,"value":330}," Artifact                          ",{"type":47,"tag":271,"props":332,"children":333},{"style":278},[334],{"type":53,"value":306},{"type":47,"tag":271,"props":336,"children":337},{"style":309},[338],{"type":53,"value":339}," Notes                          ",{"type":47,"tag":271,"props":341,"children":342},{"style":278},[343],{"type":53,"value":344},"|\n",{"type":47,"tag":271,"props":346,"children":348},{"class":273,"line":347},4,[349,353,358,363,368,372,377,381,386],{"type":47,"tag":271,"props":350,"children":351},{"style":278},[352],{"type":53,"value":306},{"type":47,"tag":271,"props":354,"children":355},{"style":278},[356],{"type":53,"value":357}," --------------",{"type":47,"tag":271,"props":359,"children":360},{"style":278},[361],{"type":53,"value":362}," |",{"type":47,"tag":271,"props":364,"children":365},{"style":278},[366],{"type":53,"value":367}," -----------",{"type":47,"tag":271,"props":369,"children":370},{"style":278},[371],{"type":53,"value":362},{"type":47,"tag":271,"props":373,"children":374},{"style":278},[375],{"type":53,"value":376}," ---------------------------------",{"type":47,"tag":271,"props":378,"children":379},{"style":278},[380],{"type":53,"value":362},{"type":47,"tag":271,"props":382,"children":383},{"style":278},[384],{"type":53,"value":385}," ------------------------------",{"type":47,"tag":271,"props":387,"children":388},{"style":278},[389],{"type":53,"value":390}," |\n",{"type":47,"tag":271,"props":392,"children":394},{"class":273,"line":393},5,[395,399,404,408,413,417,422,426],{"type":47,"tag":271,"props":396,"children":397},{"style":278},[398],{"type":53,"value":306},{"type":47,"tag":271,"props":400,"children":401},{"style":309},[402],{"type":53,"value":403}," 0 Preflight    ",{"type":47,"tag":271,"props":405,"children":406},{"style":278},[407],{"type":53,"value":306},{"type":47,"tag":271,"props":409,"children":410},{"style":309},[411],{"type":53,"value":412}," done        ",{"type":47,"tag":271,"props":414,"children":415},{"style":278},[416],{"type":53,"value":306},{"type":47,"tag":271,"props":418,"children":419},{"style":309},[420],{"type":53,"value":421}," (this file, Capabilities below)   ",{"type":47,"tag":271,"props":423,"children":424},{"style":278},[425],{"type":53,"value":306},{"type":47,"tag":271,"props":427,"children":428},{"style":278},[429],{"type":53,"value":430},"                                |\n",{"type":47,"tag":271,"props":432,"children":434},{"class":273,"line":433},6,[435,439,444,448,452,456,461,465,470],{"type":47,"tag":271,"props":436,"children":437},{"style":278},[438],{"type":53,"value":306},{"type":47,"tag":271,"props":440,"children":441},{"style":309},[442],{"type":53,"value":443}," 1 Ideation     ",{"type":47,"tag":271,"props":445,"children":446},{"style":278},[447],{"type":53,"value":306},{"type":47,"tag":271,"props":449,"children":450},{"style":309},[451],{"type":53,"value":412},{"type":47,"tag":271,"props":453,"children":454},{"style":278},[455],{"type":53,"value":306},{"type":47,"tag":271,"props":457,"children":458},{"style":309},[459],{"type":53,"value":460}," design\u002FGAME_SPEC.md               ",{"type":47,"tag":271,"props":462,"children":463},{"style":278},[464],{"type":53,"value":306},{"type":47,"tag":271,"props":466,"children":467},{"style":309},[468],{"type":53,"value":469}," approved by user \u002F assumptions ",{"type":47,"tag":271,"props":471,"children":472},{"style":278},[473],{"type":53,"value":344},{"type":47,"tag":271,"props":475,"children":477},{"class":273,"line":476},7,[478,482,487,491,496,500,505,509],{"type":47,"tag":271,"props":479,"children":480},{"style":278},[481],{"type":53,"value":306},{"type":47,"tag":271,"props":483,"children":484},{"style":309},[485],{"type":53,"value":486}," 2 Design       ",{"type":47,"tag":271,"props":488,"children":489},{"style":278},[490],{"type":53,"value":306},{"type":47,"tag":271,"props":492,"children":493},{"style":309},[494],{"type":53,"value":495}," in-progress ",{"type":47,"tag":271,"props":497,"children":498},{"style":278},[499],{"type":53,"value":306},{"type":47,"tag":271,"props":501,"children":502},{"style":309},[503],{"type":53,"value":504}," design\u002Fdeck.html, design\u002Fconcept\u002F ",{"type":47,"tag":271,"props":506,"children":507},{"style":278},[508],{"type":53,"value":306},{"type":47,"tag":271,"props":510,"children":511},{"style":278},[512],{"type":53,"value":430},{"type":47,"tag":271,"props":514,"children":516},{"class":273,"line":515},8,[517,521,526,530,535,539,544,548],{"type":47,"tag":271,"props":518,"children":519},{"style":278},[520],{"type":53,"value":306},{"type":47,"tag":271,"props":522,"children":523},{"style":309},[524],{"type":53,"value":525}," 3 Grounding    ",{"type":47,"tag":271,"props":527,"children":528},{"style":278},[529],{"type":53,"value":306},{"type":47,"tag":271,"props":531,"children":532},{"style":309},[533],{"type":53,"value":534}," pending     ",{"type":47,"tag":271,"props":536,"children":537},{"style":278},[538],{"type":53,"value":306},{"type":47,"tag":271,"props":540,"children":541},{"style":309},[542],{"type":53,"value":543}," design\u002FTECH_PLAN.md               ",{"type":47,"tag":271,"props":545,"children":546},{"style":278},[547],{"type":53,"value":306},{"type":47,"tag":271,"props":549,"children":550},{"style":278},[551],{"type":53,"value":430},{"type":47,"tag":271,"props":553,"children":555},{"class":273,"line":554},9,[556,560,565,569,573,577,582,586],{"type":47,"tag":271,"props":557,"children":558},{"style":278},[559],{"type":53,"value":306},{"type":47,"tag":271,"props":561,"children":562},{"style":309},[563],{"type":53,"value":564}," 4 Architecture ",{"type":47,"tag":271,"props":566,"children":567},{"style":278},[568],{"type":53,"value":306},{"type":47,"tag":271,"props":570,"children":571},{"style":309},[572],{"type":53,"value":534},{"type":47,"tag":271,"props":574,"children":575},{"style":278},[576],{"type":53,"value":306},{"type":47,"tag":271,"props":578,"children":579},{"style":309},[580],{"type":53,"value":581}," design\u002FARCHITECTURE.md            ",{"type":47,"tag":271,"props":583,"children":584},{"style":278},[585],{"type":53,"value":306},{"type":47,"tag":271,"props":587,"children":588},{"style":278},[589],{"type":53,"value":430},{"type":47,"tag":271,"props":591,"children":593},{"class":273,"line":592},10,[594,598,603,607,611,615,620,624],{"type":47,"tag":271,"props":595,"children":596},{"style":278},[597],{"type":53,"value":306},{"type":47,"tag":271,"props":599,"children":600},{"style":309},[601],{"type":53,"value":602}," 5 Build        ",{"type":47,"tag":271,"props":604,"children":605},{"style":278},[606],{"type":53,"value":306},{"type":47,"tag":271,"props":608,"children":609},{"style":309},[610],{"type":53,"value":534},{"type":47,"tag":271,"props":612,"children":613},{"style":278},[614],{"type":53,"value":306},{"type":47,"tag":271,"props":616,"children":617},{"style":309},[618],{"type":53,"value":619}," src\u002F, milestone log below         ",{"type":47,"tag":271,"props":621,"children":622},{"style":278},[623],{"type":53,"value":306},{"type":47,"tag":271,"props":625,"children":626},{"style":278},[627],{"type":53,"value":430},{"type":47,"tag":271,"props":629,"children":631},{"class":273,"line":630},11,[632,636,641,645,649,653,658,662],{"type":47,"tag":271,"props":633,"children":634},{"style":278},[635],{"type":53,"value":306},{"type":47,"tag":271,"props":637,"children":638},{"style":309},[639],{"type":53,"value":640}," 6 Verify       ",{"type":47,"tag":271,"props":642,"children":643},{"style":278},[644],{"type":53,"value":306},{"type":47,"tag":271,"props":646,"children":647},{"style":309},[648],{"type":53,"value":534},{"type":47,"tag":271,"props":650,"children":651},{"style":278},[652],{"type":53,"value":306},{"type":47,"tag":271,"props":654,"children":655},{"style":309},[656],{"type":53,"value":657}," design\u002FVERIFICATION.md            ",{"type":47,"tag":271,"props":659,"children":660},{"style":278},[661],{"type":53,"value":306},{"type":47,"tag":271,"props":663,"children":664},{"style":278},[665],{"type":53,"value":430},{"type":47,"tag":271,"props":667,"children":669},{"class":273,"line":668},12,[670,674,679,683,687,691,696,700],{"type":47,"tag":271,"props":671,"children":672},{"style":278},[673],{"type":53,"value":306},{"type":47,"tag":271,"props":675,"children":676},{"style":309},[677],{"type":53,"value":678}," 7 Ship         ",{"type":47,"tag":271,"props":680,"children":681},{"style":278},[682],{"type":53,"value":306},{"type":47,"tag":271,"props":684,"children":685},{"style":309},[686],{"type":53,"value":534},{"type":47,"tag":271,"props":688,"children":689},{"style":278},[690],{"type":53,"value":306},{"type":47,"tag":271,"props":692,"children":693},{"style":309},[694],{"type":53,"value":695}," review report, build, deploy      ",{"type":47,"tag":271,"props":697,"children":698},{"style":278},[699],{"type":53,"value":306},{"type":47,"tag":271,"props":701,"children":702},{"style":278},[703],{"type":53,"value":430},{"type":47,"tag":271,"props":705,"children":707},{"class":273,"line":706},13,[708],{"type":47,"tag":271,"props":709,"children":710},{"emptyLinePlaceholder":294},[711],{"type":53,"value":297},{"type":47,"tag":271,"props":713,"children":715},{"class":273,"line":714},14,[716,721],{"type":47,"tag":271,"props":717,"children":718},{"style":278},[719],{"type":53,"value":720},"## ",{"type":47,"tag":271,"props":722,"children":723},{"style":284},[724],{"type":53,"value":725},"Capabilities (Phase 0 findings)\n",{"type":47,"tag":271,"props":727,"children":729},{"class":273,"line":728},15,[730],{"type":47,"tag":271,"props":731,"children":732},{"emptyLinePlaceholder":294},[733],{"type":53,"value":297},{"type":47,"tag":271,"props":735,"children":737},{"class":273,"line":736},16,[738,743],{"type":47,"tag":271,"props":739,"children":740},{"style":278},[741],{"type":53,"value":742},"-",{"type":47,"tag":271,"props":744,"children":745},{"style":309},[746],{"type":53,"value":747}," interactive questions: yes (AskUserQuestion) | no (autonomous)\n",{"type":47,"tag":271,"props":749,"children":751},{"class":273,"line":750},17,[752,756],{"type":47,"tag":271,"props":753,"children":754},{"style":278},[755],{"type":53,"value":742},{"type":47,"tag":271,"props":757,"children":758},{"style":309},[759],{"type":53,"value":760}," sub-agents: yes (Task tool) | no\n",{"type":47,"tag":271,"props":762,"children":764},{"class":273,"line":763},18,[765,769],{"type":47,"tag":271,"props":766,"children":767},{"style":278},[768],{"type":53,"value":742},{"type":47,"tag":271,"props":770,"children":771},{"style":309},[772],{"type":53,"value":773}," slide\u002FHTML preview: artifact tool | file only\n",{"type":47,"tag":271,"props":775,"children":777},{"class":273,"line":776},19,[778,782],{"type":47,"tag":271,"props":779,"children":780},{"style":278},[781],{"type":53,"value":742},{"type":47,"tag":271,"props":783,"children":784},{"style":309},[785],{"type":53,"value":786}," image generation: \u003Ctool name> | none (SVG fallback)\n",{"type":47,"tag":271,"props":788,"children":790},{"class":273,"line":789},20,[791,795],{"type":47,"tag":271,"props":792,"children":793},{"style":278},[794],{"type":53,"value":742},{"type":47,"tag":271,"props":796,"children":797},{"style":309},[798],{"type":53,"value":799}," iwsdk CLI: \u003Cversion> | pending scaffold · reference: ready|warmup-needed|unavailable\n",{"type":47,"tag":271,"props":801,"children":803},{"class":273,"line":802},21,[804,808],{"type":47,"tag":271,"props":805,"children":806},{"style":278},[807],{"type":53,"value":742},{"type":47,"tag":271,"props":809,"children":810},{"style":309},[811],{"type":53,"value":812}," runtime verify: headless browser OK | blocked because \u003Cwhy>\n",{"type":47,"tag":271,"props":814,"children":816},{"class":273,"line":815},22,[817],{"type":47,"tag":271,"props":818,"children":819},{"emptyLinePlaceholder":294},[820],{"type":53,"value":297},{"type":47,"tag":271,"props":822,"children":824},{"class":273,"line":823},23,[825,829],{"type":47,"tag":271,"props":826,"children":827},{"style":278},[828],{"type":53,"value":720},{"type":47,"tag":271,"props":830,"children":831},{"style":284},[832],{"type":53,"value":833},"Milestone Log\n",{"type":47,"tag":271,"props":835,"children":837},{"class":273,"line":836},24,[838],{"type":47,"tag":271,"props":839,"children":840},{"emptyLinePlaceholder":294},[841],{"type":53,"value":297},{"type":47,"tag":271,"props":843,"children":845},{"class":273,"line":844},25,[846,850],{"type":47,"tag":271,"props":847,"children":848},{"style":278},[849],{"type":53,"value":742},{"type":47,"tag":271,"props":851,"children":852},{"style":309},[853],{"type":53,"value":854}," M0 \u003Cdate>: scaffold renders — screenshot design\u002Fverify\u002Fm0.png\n",{"type":47,"tag":56,"props":856,"children":857},{},[858,863,865,870],{"type":47,"tag":108,"props":859,"children":860},{},[861],{"type":53,"value":862},"Resuming:",{"type":53,"value":864}," if ",{"type":47,"tag":167,"props":866,"children":868},{"className":867},[],[869],{"type":53,"value":190},{"type":53,"value":871}," exists, read it plus the artifacts of\ncompleted phases, then continue from the first non-done phase. Never redo a\ndone phase unless the user changes the requirements behind it.",{"type":47,"tag":873,"props":874,"children":875},"hr",{},[],{"type":47,"tag":62,"props":877,"children":879},{"id":878},"phase-0-preflight-capability-environment-probe",[880],{"type":53,"value":881},"Phase 0 — Preflight (capability & environment probe)",{"type":47,"tag":56,"props":883,"children":884},{},[885],{"type":53,"value":886},"Goal: know what this harness and machine can do, so later phases degrade\ngracefully instead of failing mid-flight.",{"type":47,"tag":56,"props":888,"children":889},{},[890,892,897],{"type":53,"value":891},"Probe and record in ",{"type":47,"tag":167,"props":893,"children":895},{"className":894},[],[896],{"type":53,"value":190},{"type":53,"value":898}," (Capabilities section):",{"type":47,"tag":152,"props":900,"children":901},{},[902,920,930,940,958],{"type":47,"tag":156,"props":903,"children":904},{},[905,910,912,918],{"type":47,"tag":108,"props":906,"children":907},{},[908],{"type":53,"value":909},"Interaction",{"type":53,"value":911}," — can you ask the user structured questions and get answers\n(e.g. AskUserQuestion tool)? If the user said \"build it, don't ask me\", or\nno question tool exists and the user is unresponsive, set ",{"type":47,"tag":167,"props":913,"children":915},{"className":914},[],[916],{"type":53,"value":917},"autonomous",{"type":53,"value":919},".",{"type":47,"tag":156,"props":921,"children":922},{},[923,928],{"type":47,"tag":108,"props":924,"children":925},{},[926],{"type":53,"value":927},"Sub-agents",{"type":53,"value":929}," — do you have a Task\u002Fagent-spawning tool? Note limits you\nknow (e.g. sub-agents usually cannot keep background processes alive — the\nmain agent must own dev servers).",{"type":47,"tag":156,"props":931,"children":932},{},[933,938],{"type":47,"tag":108,"props":934,"children":935},{},[936],{"type":53,"value":937},"Presentation",{"type":53,"value":939}," — can you render\u002Fpublish HTML (artifact tool)? Can you\ngenerate images (any image-gen tool)? Fallback: hand-authored SVG + local\nHTML files.",{"type":47,"tag":156,"props":941,"children":942},{},[943,948,950,956],{"type":47,"tag":108,"props":944,"children":945},{},[946],{"type":53,"value":947},"Toolchain",{"type":53,"value":949}," — ",{"type":47,"tag":167,"props":951,"children":953},{"className":952},[],[954],{"type":53,"value":955},"node --version",{"type":53,"value":957}," (needs >=20.19 \u003C21, >=22.12 \u003C23, or >=24);\nis there an existing IWSDK app here or are we scaffolding fresh?",{"type":47,"tag":156,"props":959,"children":960},{},[961,966,968,974,976,982,984,990,992,998,1000,1005,1007,1013,1015,1020,1022,1028],{"type":47,"tag":108,"props":962,"children":963},{},[964],{"type":53,"value":965},"IWSDK tooling",{"type":53,"value":967}," — only if an app already exists, and always from its\ndirectory (never a bare shell\u002Fmonorepo root — ",{"type":47,"tag":167,"props":969,"children":971},{"className":970},[],[972],{"type":53,"value":973},"npx iwsdk",{"type":53,"value":975}," outside an app\nresolves to an unrelated npm package): ",{"type":47,"tag":167,"props":977,"children":979},{"className":978},[],[980],{"type":53,"value":981},"npx iwsdk status",{"type":53,"value":983},",\n",{"type":47,"tag":167,"props":985,"children":987},{"className":986},[],[988],{"type":53,"value":989},"npx iwsdk reference status",{"type":53,"value":991},". If reference reports warmup needed and you\nhave network, start ",{"type":47,"tag":167,"props":993,"children":995},{"className":994},[],[996],{"type":53,"value":997},"npx iwsdk reference warmup",{"type":53,"value":999}," ",{"type":47,"tag":108,"props":1001,"children":1002},{},[1003],{"type":53,"value":1004},"in the background\nnow",{"type":53,"value":1006}," (~210 MB download) so it's ready by Phase 3. If it fails, note the\ndocs fallback (see ",{"type":47,"tag":167,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":53,"value":1012},"references\u002Fgrounding.md",{"type":53,"value":1014},"). ",{"type":47,"tag":108,"props":1016,"children":1017},{},[1018],{"type":53,"value":1019},"Scaffolding fresh?",{"type":53,"value":1021},"\nSkip these probes, record ",{"type":47,"tag":167,"props":1023,"children":1025},{"className":1024},[],[1026],{"type":53,"value":1027},"iwsdk CLI: pending scaffold",{"type":53,"value":1029},", and rely on the\nScaffold Checkpoint below to run them right after ideation.",{"type":47,"tag":56,"props":1031,"children":1032},{},[1033],{"type":53,"value":1034},"Gate: Capabilities section filled in. This phase never asks the user anything.",{"type":47,"tag":62,"props":1036,"children":1038},{"id":1037},"phase-1-ideation-idea-spec",[1039],{"type":53,"value":1040},"Phase 1 — Ideation (idea → spec)",{"type":47,"tag":56,"props":1042,"children":1043},{},[1044,1046,1052],{"type":53,"value":1045},"Goal: lock the idea into ",{"type":47,"tag":167,"props":1047,"children":1049},{"className":1048},[],[1050],{"type":53,"value":1051},"design\u002FGAME_SPEC.md",{"type":53,"value":1053}," — the single document that says\nwhat we are building, for whom, on what device, at what scope.",{"type":47,"tag":56,"props":1055,"children":1056},{},[1057,1059,1065],{"type":53,"value":1058},"Playbook: ",{"type":47,"tag":167,"props":1060,"children":1062},{"className":1061},[],[1063],{"type":53,"value":1064},"references\u002Fideation.md",{"type":53,"value":1066}," (question bank, spec template, worked\nexample).",{"type":47,"tag":56,"props":1068,"children":1069},{},[1070],{"type":53,"value":1071},"Procedure:",{"type":47,"tag":152,"props":1073,"children":1074},{},[1075,1080,1106,1126],{"type":47,"tag":156,"props":1076,"children":1077},{},[1078],{"type":53,"value":1079},"Restate the user's idea in 2–3 sentences. State the genre, the fantasy,\nand the obvious open questions.",{"type":47,"tag":156,"props":1081,"children":1082},{},[1083,1085,1090,1092,1097,1099,1104],{"type":53,"value":1084},"Ask ",{"type":47,"tag":108,"props":1086,"children":1087},{},[1088],{"type":53,"value":1089},"batched",{"type":53,"value":1091}," question rounds (3–4 questions each, each with 2–4\nopinionated options + your recommended default; structured question tools\ntypically cap a call at 4 questions — split a bigger round into two\ncalls rather than dropping questions). Round 1: platform & mode\n(VR\u002FAR\u002Fbrowser-first\u002Fdual), core loop, scale\u002Fcomfort. Round 2: mechanics\ndetail, art\u002Faudio direction, scope tier. Stop when the axes in the\ntemplate are pinned — usually 2 rounds, 3 max. In ",{"type":47,"tag":167,"props":1093,"children":1095},{"className":1094},[],[1096],{"type":53,"value":917},{"type":53,"value":1098}," mode:\nanswer every question yourself with the most defensible default, mark\n",{"type":47,"tag":167,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":53,"value":218},{"type":53,"value":1105},", and keep a \"Questions I would have asked\" appendix.",{"type":47,"tag":156,"props":1107,"children":1108},{},[1109,1111,1116,1118,1124],{"type":53,"value":1110},"Write ",{"type":47,"tag":167,"props":1112,"children":1114},{"className":1113},[],[1115],{"type":53,"value":1051},{"type":53,"value":1117}," from the template: pitch, pillars, core loop,\nmechanics list, platform\u002Fmode, space & locomotion needs, UI surfaces,\naudio moments, art direction, scope tiers (MVP \u002F target \u002F stretch),\nnon-goals, success criteria (each criterion must be ",{"type":47,"tag":1119,"props":1120,"children":1121},"em",{},[1122],{"type":53,"value":1123},"observable",{"type":53,"value":1125}," — you\nwill assert it in Phase 6).",{"type":47,"tag":156,"props":1127,"children":1128},{},[1129,1131,1136],{"type":53,"value":1130},"Present a compact summary and get sign-off (or record ",{"type":47,"tag":167,"props":1132,"children":1134},{"className":1133},[],[1135],{"type":53,"value":218},{"type":53,"value":1137}," set).",{"type":47,"tag":56,"props":1139,"children":1140},{},[1141],{"type":53,"value":1142},"Gate: spec exists; every mechanic is named; success criteria observable;\nuser approved or assumptions documented.",{"type":47,"tag":1144,"props":1145,"children":1147},"h3",{"id":1146},"scaffold-checkpoint-fresh-projects-only",[1148],{"type":53,"value":1149},"Scaffold Checkpoint (fresh projects only)",{"type":47,"tag":56,"props":1151,"children":1152},{},[1153,1155,1160],{"type":53,"value":1154},"Ideation locks the platform axes — scaffold ",{"type":47,"tag":108,"props":1156,"children":1157},{},[1158],{"type":53,"value":1159},"now",{"type":53,"value":1161},", before Phase 2, so the\nproject directory exists for every later artifact and tool:",{"type":47,"tag":152,"props":1163,"children":1164},{},[1165,1194,1214,1240],{"type":47,"tag":156,"props":1166,"children":1167},{},[1168,1170,1176,1178,1184,1186,1192],{"type":53,"value":1169},"Scaffold with ",{"type":47,"tag":167,"props":1171,"children":1173},{"className":1172},[],[1174],{"type":53,"value":1175},"@iwsdk\u002Fcreate",{"type":53,"value":1177}," using the spec's mode\u002Ffeatures\n(",{"type":47,"tag":167,"props":1179,"children":1181},{"className":1180},[],[1182],{"type":53,"value":1183},"references\u002Fbuild-milestones.md",{"type":53,"value":1185}," has the flag menu); ",{"type":47,"tag":167,"props":1187,"children":1189},{"className":1188},[],[1190],{"type":53,"value":1191},"cd",{"type":53,"value":1193}," into the app.",{"type":47,"tag":156,"props":1195,"children":1196},{},[1197,1199,1204,1206,1212],{"type":53,"value":1198},"Move any ",{"type":47,"tag":167,"props":1200,"children":1202},{"className":1201},[],[1203],{"type":53,"value":172},{"type":53,"value":1205}," files created so far into ",{"type":47,"tag":167,"props":1207,"children":1209},{"className":1208},[],[1210],{"type":53,"value":1211},"\u003Capp>\u002Fdesign\u002F",{"type":53,"value":1213}," — from here\non, everything lives in the app root. Do the move BEFORE fanning out\nPhase 2\u002F3 agents (or brief them with the final app paths) — agents\nwriting to a stale staging path while you move it lose work.",{"type":47,"tag":156,"props":1215,"children":1216},{},[1217,1219,1224,1226,1231,1233,1238],{"type":53,"value":1218},"Run the deferred Phase 0 probes (",{"type":47,"tag":167,"props":1220,"children":1222},{"className":1221},[],[1223],{"type":53,"value":981},{"type":53,"value":1225},", ",{"type":47,"tag":167,"props":1227,"children":1229},{"className":1228},[],[1230],{"type":53,"value":989},{"type":53,"value":1232},") and start ",{"type":47,"tag":167,"props":1234,"children":1236},{"className":1235},[],[1237],{"type":53,"value":997},{"type":53,"value":1239}," in the background — it\ndownloads while Phase 2 runs, so grounding (Phase 3) finds it ready.",{"type":47,"tag":156,"props":1241,"children":1242},{},[1243,1245,1250],{"type":53,"value":1244},"Do ",{"type":47,"tag":108,"props":1246,"children":1247},{},[1248],{"type":53,"value":1249},"not",{"type":53,"value":1251}," modify app code yet — Phase 5's M0 verifies the untouched\nscaffold. Never scaffold a nested app inside an existing IWSDK app.",{"type":47,"tag":62,"props":1253,"children":1255},{"id":1254},"phase-2-design-spec-deck-concept-art",[1256],{"type":53,"value":1257},"Phase 2 — Design (spec → deck + concept art)",{"type":47,"tag":56,"props":1259,"children":1260},{},[1261,1263,1268],{"type":53,"value":1262},"Goal: make the spec ",{"type":47,"tag":1119,"props":1264,"children":1265},{},[1266],{"type":53,"value":1267},"visible",{"type":53,"value":1269}," so the developer can react to a look and a\nlayout, not a wall of text. Everything here is presentational — no code.",{"type":47,"tag":56,"props":1271,"children":1272},{},[1273,1274,1280],{"type":53,"value":1058},{"type":47,"tag":167,"props":1275,"children":1277},{"className":1276},[],[1278],{"type":53,"value":1279},"references\u002Fdesign-deck.md",{"type":53,"value":1281}," (deck outline, HTML\u002FSVG conventions,\nconcept-art briefs, capability ladder).",{"type":47,"tag":56,"props":1283,"children":1284},{},[1285],{"type":53,"value":1286},"Fan out (parallel sub-agents if available, else sequential):",{"type":47,"tag":1288,"props":1289,"children":1290},"ul",{},[1291,1309,1326],{"type":47,"tag":156,"props":1292,"children":1293},{},[1294,1299,1301,1307],{"type":47,"tag":108,"props":1295,"children":1296},{},[1297],{"type":53,"value":1298},"Deck agent",{"type":53,"value":1300}," → ",{"type":47,"tag":167,"props":1302,"children":1304},{"className":1303},[],[1305],{"type":53,"value":1306},"design\u002Fdeck.html",{"type":53,"value":1308},": self-contained slide deck (inline CSS,\narrow-key navigation) covering pitch, pillars, core loop diagram, mechanics,\nlevel layout, interaction model, art\u002Faudio direction, scope, tech snapshot.",{"type":47,"tag":156,"props":1310,"children":1311},{},[1312,1317,1318,1324],{"type":47,"tag":108,"props":1313,"children":1314},{},[1315],{"type":53,"value":1316},"Concept-art agent",{"type":53,"value":1300},{"type":47,"tag":167,"props":1319,"children":1321},{"className":1320},[],[1322],{"type":53,"value":1323},"design\u002Fconcept\u002F*.svg",{"type":53,"value":1325},": 2–4 hand-authored SVG\npieces (key moment, environment mood, UI mock). Use an image-generation\ntool instead if Phase 0 found one.",{"type":47,"tag":156,"props":1327,"children":1328},{},[1329,1334,1335,1341],{"type":47,"tag":108,"props":1330,"children":1331},{},[1332],{"type":53,"value":1333},"Layout agent",{"type":53,"value":1300},{"type":47,"tag":167,"props":1336,"children":1338},{"className":1337},[],[1339],{"type":53,"value":1340},"design\u002Fconcept\u002Flayout.svg",{"type":53,"value":1342},": top-down play-space diagram\nwith dimensions in meters (XR scale is real scale — a desk is 0.75 m high).",{"type":47,"tag":56,"props":1344,"children":1345},{},[1346,1348,1353],{"type":53,"value":1347},"Each agent reads ",{"type":47,"tag":167,"props":1349,"children":1351},{"className":1350},[],[1352],{"type":53,"value":1051},{"type":53,"value":1354},"; give them the file path, not a paste.\nPresent results (artifact tool if available, else file paths + one-line\ndescriptions). Ask for reactions if interactive; else proceed.",{"type":47,"tag":56,"props":1356,"children":1357},{},[1358],{"type":53,"value":1359},"Gate: deck + at least one concept piece exist and match the spec.",{"type":47,"tag":56,"props":1361,"children":1362},{},[1363,1365,1370,1372,1377],{"type":53,"value":1364},"Phases 2 and 3 both consume only the spec. They may run ",{"type":47,"tag":108,"props":1366,"children":1367},{},[1368],{"type":53,"value":1369},"concurrently",{"type":53,"value":1371}," only\nwhen ",{"type":47,"tag":167,"props":1373,"children":1375},{"className":1374},[],[1376],{"type":53,"value":989},{"type":53,"value":1378}," already reports ready. Otherwise, let Phase 2\nrun while warmup finishes, then confirm readiness (or select the documented\nfallback) before launching Phase 3. Both phases must be done before Phase 4.",{"type":47,"tag":62,"props":1380,"children":1382},{"id":1381},"phase-3-grounding-spec-iwsdk-reality",[1383],{"type":53,"value":1384},"Phase 3 — Grounding (spec → IWSDK reality)",{"type":47,"tag":56,"props":1386,"children":1387},{},[1388,1390,1396],{"type":53,"value":1389},"Goal: ",{"type":47,"tag":167,"props":1391,"children":1393},{"className":1392},[],[1394],{"type":53,"value":1395},"design\u002FTECH_PLAN.md",{"type":53,"value":1397}," — every mechanic mapped to concrete IWSDK API\nsurface, so Phase 5 is assembly rather than discovery.",{"type":47,"tag":56,"props":1399,"children":1400},{},[1401,1402,1407,1409,1415],{"type":53,"value":1058},{"type":47,"tag":167,"props":1403,"children":1405},{"className":1404},[],[1406],{"type":53,"value":1012},{"type":53,"value":1408}," (reference CLI protocol, docs fallback\nladder, domain→API map, TECH_PLAN template). API ground truth:\n",{"type":47,"tag":167,"props":1410,"children":1412},{"className":1411},[],[1413],{"type":53,"value":1414},"references\u002Fapi-reference.md",{"type":53,"value":919},{"type":47,"tag":56,"props":1417,"children":1418},{},[1419],{"type":53,"value":1071},{"type":47,"tag":152,"props":1421,"children":1422},{},[1423,1442,1447,1474,1493],{"type":47,"tag":156,"props":1424,"children":1425},{},[1426,1428,1433,1435,1440],{"type":53,"value":1427},"Enforce the reference barrier: confirm ",{"type":47,"tag":167,"props":1429,"children":1431},{"className":1430},[],[1432],{"type":53,"value":989},{"type":53,"value":1434}," is\nready, or record which fallback from ",{"type":47,"tag":167,"props":1436,"children":1438},{"className":1437},[],[1439],{"type":53,"value":1012},{"type":53,"value":1441}," will supply\nAPI evidence. Never fan out grounding agents while warmup is still running.",{"type":47,"tag":156,"props":1443,"children":1444},{},[1445],{"type":53,"value":1446},"Derive research domains from the spec (typically: input & interaction,\nphysics, locomotion, UI, audio, environment\u002Flighting, assets\u002Flevels, and\nAR-specific surfaces if applicable).",{"type":47,"tag":156,"props":1448,"children":1449},{},[1450,1452,1457,1459,1465,1467,1473],{"type":53,"value":1451},"Fan out one research agent per domain (or do them in sequence). Each\nagent: reads the spec + ",{"type":47,"tag":167,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":53,"value":1012},{"type":53,"value":1458},", queries the reference\nsystem (",{"type":47,"tag":167,"props":1460,"children":1462},{"className":1461},[],[1463],{"type":53,"value":1464},"npx iwsdk reference search|api|components|systems|examples",{"type":53,"value":1466},") or\nthe documented fallbacks, and returns table rows:\n",{"type":47,"tag":167,"props":1468,"children":1470},{"className":1469},[],[1471],{"type":53,"value":1472},"mechanic → classification (BUILT-IN | CONFIGURE | CUSTOM) → exact IWSDK pieces (components\u002Fsystems\u002Ffeature flags) → custom work remaining → risks",{"type":53,"value":919},{"type":47,"tag":156,"props":1475,"children":1476},{},[1477,1479,1484,1486,1491],{"type":53,"value":1478},"Merge into ",{"type":47,"tag":167,"props":1480,"children":1482},{"className":1481},[],[1483],{"type":53,"value":1395},{"type":53,"value":1485},": World.create feature-flag block,\nthe mechanics table, custom system specs (queries, priorities, globals),\nasset manifest (see Asset Strategy in ",{"type":47,"tag":167,"props":1487,"children":1489},{"className":1488},[],[1490],{"type":53,"value":1183},{"type":53,"value":1492},"),\nand a risk list with mitigations.",{"type":47,"tag":156,"props":1494,"children":1495},{},[1496,1498,1503],{"type":53,"value":1497},"Audit against the reinvention-risk table in ",{"type":47,"tag":167,"props":1499,"children":1501},{"className":1500},[],[1502],{"type":53,"value":1414},{"type":53,"value":1504},":\nanything classified CUSTOM that IWSDK already provides gets reclassified.",{"type":47,"tag":56,"props":1506,"children":1507},{},[1508],{"type":53,"value":1509},"Gate: no mechanic left unclassified; feature flags decided with prerequisites\nchecked (e.g. locomotion requires collision geometry); every CUSTOM item has\na sketched query\u002Fsystem design; asset list complete.",{"type":47,"tag":62,"props":1511,"children":1513},{"id":1512},"phase-4-architecture-tech-plan-build-plan",[1514],{"type":53,"value":1515},"Phase 4 — Architecture (tech plan → build plan)",{"type":47,"tag":56,"props":1517,"children":1518},{},[1519,1520,1526],{"type":53,"value":1389},{"type":47,"tag":167,"props":1521,"children":1523},{"className":1522},[],[1524],{"type":53,"value":1525},"design\u002FARCHITECTURE.md",{"type":53,"value":1527}," — the file-by-file, milestone-by-milestone\nconstruction plan.",{"type":47,"tag":56,"props":1529,"children":1530},{},[1531,1532,1537],{"type":53,"value":1058},{"type":47,"tag":167,"props":1533,"children":1535},{"className":1534},[],[1536],{"type":53,"value":1183},{"type":53,"value":1538}," (template, scaffold flags,\nmilestone rules, sub-agent file-ownership rules).",{"type":47,"tag":56,"props":1540,"children":1541},{},[1542,1544,1549,1551,1556,1558,1563],{"type":53,"value":1543},"Contents: scaffold command (exact ",{"type":47,"tag":167,"props":1545,"children":1547},{"className":1546},[],[1548],{"type":53,"value":1175},{"type":53,"value":1550}," flags) or existing-app\ndelta; file tree (one system per file); component schemas (names, fields,\nTypes); systems table (name, queries, priority band: 0–9 input \u002F 10–19 sim \u002F\n20–29 visual sync \u002F 30+ UI); globals signals; milestone plan — M0 \"scaffold\nrenders\" through M-final, each with a ",{"type":47,"tag":108,"props":1552,"children":1553},{},[1554],{"type":53,"value":1555},"demo criterion",{"type":53,"value":1557}," (what you can see)\nand ",{"type":47,"tag":108,"props":1559,"children":1560},{},[1561],{"type":53,"value":1562},"assertions",{"type":53,"value":1564}," (what you will check via the CLI in Phase 6).",{"type":47,"tag":56,"props":1566,"children":1567},{},[1568,1570,1575],{"type":53,"value":1569},"Gate: every spec mechanic traces to a milestone; every milestone has demo\ncriterion + assertions; user approved (or ",{"type":47,"tag":167,"props":1571,"children":1573},{"className":1572},[],[1574],{"type":53,"value":218},{"type":53,"value":1576},").",{"type":47,"tag":62,"props":1578,"children":1580},{"id":1579},"phase-5-build-milestone-loop",[1581],{"type":53,"value":1582},"Phase 5 — Build (milestone loop)",{"type":47,"tag":56,"props":1584,"children":1585},{},[1586],{"type":53,"value":1587},"Goal: working code, one verified milestone at a time.",{"type":47,"tag":56,"props":1589,"children":1590},{},[1591,1592,1597,1599,1604,1606,1612],{"type":53,"value":1058},{"type":47,"tag":167,"props":1593,"children":1595},{"className":1594},[],[1596],{"type":53,"value":1183},{"type":53,"value":1598},". API ground truth while coding:\n",{"type":47,"tag":167,"props":1600,"children":1602},{"className":1601},[],[1603],{"type":53,"value":1414},{"type":53,"value":1605}," — follow its best practices (stateless systems,\nsignals, cleanup, ",{"type":47,"tag":167,"props":1607,"children":1609},{"className":1608},[],[1610],{"type":53,"value":1611},"createTransformEntity",{"type":53,"value":1613},", AssetManager, feature-flag\nhygiene) and its anti-pattern list.",{"type":47,"tag":56,"props":1615,"children":1616},{},[1617],{"type":53,"value":1618},"Rules:",{"type":47,"tag":1288,"props":1620,"children":1621},{},[1622,1641,1667,1680,1712],{"type":47,"tag":156,"props":1623,"children":1624},{},[1625,1627,1632,1634,1639],{"type":53,"value":1626},"M0 baseline first: the app scaffolded at the Scaffold Checkpoint — or,\nwhen already inside a generated\u002Fexisting IWSDK app (the common case for\nthis skill), that app adopted as-is (\"existing-app delta\" in\n",{"type":47,"tag":167,"props":1628,"children":1630},{"className":1629},[],[1631],{"type":53,"value":1183},{"type":53,"value":1633},"; never scaffold a nested app). Run the\nverify loop once end-to-end (dev server up, screenshot, XR enter) ",{"type":47,"tag":1119,"props":1635,"children":1636},{},[1637],{"type":53,"value":1638},"before",{"type":53,"value":1640},"\nwriting gameplay code. A broken baseline poisons every later diagnosis.",{"type":47,"tag":156,"props":1642,"children":1643},{},[1644,1649,1651,1657,1659,1665],{"type":47,"tag":108,"props":1645,"children":1646},{},[1647],{"type":53,"value":1648},"The main agent owns the dev server",{"type":53,"value":1650}," and everything stateful (",{"type":47,"tag":167,"props":1652,"children":1654},{"className":1653},[],[1655],{"type":53,"value":1656},"iwsdk dev up\u002Fdown",{"type":53,"value":1658},", ports, browser). Sub-agents write code; they may run ",{"type":47,"tag":167,"props":1660,"children":1662},{"className":1661},[],[1663],{"type":53,"value":1664},"npx tsc --noEmit",{"type":53,"value":1666}," but must not start servers.",{"type":47,"tag":156,"props":1668,"children":1669},{},[1670,1672,1678],{"type":53,"value":1671},"Parallel sub-agents only for genuinely independent modules, each owning a\ndisjoint set of files; the main agent owns shared files (",{"type":47,"tag":167,"props":1673,"children":1675},{"className":1674},[],[1676],{"type":53,"value":1677},"src\u002Findex.ts",{"type":53,"value":1679},",\ncomponent registry wiring) and integrates.",{"type":47,"tag":156,"props":1681,"children":1682},{},[1683,1685,1690,1692,1697,1699,1704,1706,1711],{"type":53,"value":1684},"After each milestone: ",{"type":47,"tag":167,"props":1686,"children":1688},{"className":1687},[],[1689],{"type":53,"value":1664},{"type":53,"value":1691}," → verify loop (Phase 6 subset for\nthis milestone's assertions) → update Milestone Log in ",{"type":47,"tag":167,"props":1693,"children":1695},{"className":1694},[],[1696],{"type":53,"value":190},{"type":53,"value":1698},"\n(+ commit — confirm once at Phase 5 start, or ",{"type":47,"tag":167,"props":1700,"children":1702},{"className":1701},[],[1703],{"type":53,"value":218},{"type":53,"value":1705}," in autonomous\nmode; see ",{"type":47,"tag":167,"props":1707,"children":1709},{"className":1708},[],[1710],{"type":53,"value":1183},{"type":53,"value":1576},{"type":47,"tag":156,"props":1713,"children":1714},{},[1715,1717,1723],{"type":53,"value":1716},"When something fails, debug with the runtime tools (ecs pause\u002Fstep\u002F\nsnapshot\u002Fdiff, browser logs), not by staring at code — see\n",{"type":47,"tag":167,"props":1718,"children":1720},{"className":1719},[],[1721],{"type":53,"value":1722},"references\u002Fverification.md",{"type":53,"value":919},{"type":47,"tag":56,"props":1725,"children":1726},{},[1727],{"type":53,"value":1728},"Gate (per milestone): demo criterion observed + assertions pass + typecheck\nclean.",{"type":47,"tag":62,"props":1730,"children":1732},{"id":1731},"phase-6-verify-whole-app-pass",[1733],{"type":53,"value":1734},"Phase 6 — Verify (whole-app pass)",{"type":47,"tag":56,"props":1736,"children":1737},{},[1738,1739,1745],{"type":53,"value":1389},{"type":47,"tag":167,"props":1740,"children":1742},{"className":1741},[],[1743],{"type":53,"value":1744},"design\u002FVERIFICATION.md",{"type":53,"value":1746}," — evidence, per success criterion from the\nspec, that the app does what the spec says.",{"type":47,"tag":56,"props":1748,"children":1749},{},[1750,1751,1756],{"type":53,"value":1058},{"type":47,"tag":167,"props":1752,"children":1754},{"className":1753},[],[1755],{"type":53,"value":1722},{"type":53,"value":1757}," (the exact CLI loop, input-simulation\ncheat sheet, assertion patterns, known traps, recovery ladder).",{"type":47,"tag":56,"props":1759,"children":1760},{},[1761,1763,1769,1771,1777,1778,1784,1786,1791,1793,1799],{"type":53,"value":1762},"Run the full loop against the finished app: typecheck → dev up → connectivity\n→ browser screenshot → XR enter → clean console → per-criterion scenario\n(simulate inputs, assert via ",{"type":47,"tag":167,"props":1764,"children":1766},{"className":1765},[],[1767],{"type":53,"value":1768},"ecs query",{"type":53,"value":1770},"\u002F",{"type":47,"tag":167,"props":1772,"children":1774},{"className":1773},[],[1775],{"type":53,"value":1776},"snapshot",{"type":53,"value":1770},{"type":47,"tag":167,"props":1779,"children":1781},{"className":1780},[],[1782],{"type":53,"value":1783},"diff",{"type":53,"value":1785},"\u002Fscreenshots\u002Flog\npatterns). Record each criterion PASS\u002FFAIL with the evidence (command +\noutput + screenshot path). Fix and re-run failures; a criterion the runtime\ncannot demonstrate goes back to Phase 5, or gets renegotiated with the user.\nAutonomous mode: after 2–3 focused fix cycles on a stubborn criterion, stop\nlooping — record it as FAIL under \"Deferred \u002F known gaps\" in\n",{"type":47,"tag":167,"props":1787,"children":1789},{"className":1788},[],[1790],{"type":53,"value":1744},{"type":53,"value":1792}," with the attempted evidence, mark the spec item\n",{"type":47,"tag":167,"props":1794,"children":1796},{"className":1795},[],[1797],{"type":53,"value":1798},"[FAILED — deferred]",{"type":53,"value":1800},", and proceed to Phase 7 with the failure stated\nprominently in the close-out report.",{"type":47,"tag":56,"props":1802,"children":1803},{},[1804],{"type":53,"value":1805},"Gate: all MVP success criteria PASS with recorded evidence — or each failure\nexplicitly deferred with evidence of the attempts (autonomous mode).",{"type":47,"tag":62,"props":1807,"children":1809},{"id":1808},"phase-7-review-ship",[1810],{"type":53,"value":1811},"Phase 7 — Review & Ship",{"type":47,"tag":152,"props":1813,"children":1814},{},[1815,1840,1850,1890,1915],{"type":47,"tag":156,"props":1816,"children":1817},{},[1818,1823,1825,1831,1833,1838],{"type":47,"tag":108,"props":1819,"children":1820},{},[1821],{"type":53,"value":1822},"Review",{"type":53,"value":1824}," — run the ",{"type":47,"tag":167,"props":1826,"children":1828},{"className":1827},[],[1829],{"type":53,"value":1830},"iwsdk-project-code-reviewer",{"type":53,"value":1832}," agent (ships with IWSDK\nprojects) over the code; apply Critical\u002FWarning fixes; re-run the Phase 6\nassertions touched by the fixes. No agent tool, or the agent file missing?\nReview the diff yourself against ",{"type":47,"tag":167,"props":1834,"children":1836},{"className":1835},[],[1837],{"type":53,"value":1414},{"type":53,"value":1839}," — the\nAnti-Patterns list, the reinvention-risk table, and the Performance\nTips — and record findings in the close-out report.",{"type":47,"tag":156,"props":1841,"children":1842},{},[1843,1848],{"type":47,"tag":108,"props":1844,"children":1845},{},[1846],{"type":53,"value":1847},"Performance sanity",{"type":53,"value":1849}," — VR frame budget is 11–14 ms: check for per-frame\nallocations, unthrottled queries, oversized textures (the reviewer flags\nmost of these).",{"type":47,"tag":156,"props":1851,"children":1852},{},[1853,1858,1859,1865,1867,1873,1875,1881,1883,1889],{"type":47,"tag":108,"props":1854,"children":1855},{},[1856],{"type":53,"value":1857},"Build",{"type":53,"value":949},{"type":47,"tag":167,"props":1860,"children":1862},{"className":1861},[],[1863],{"type":53,"value":1864},"npm run build",{"type":53,"value":1866},"; confirm ",{"type":47,"tag":167,"props":1868,"children":1870},{"className":1869},[],[1871],{"type":53,"value":1872},"dist\u002F",{"type":53,"value":1874}," contains the changes\n(",{"type":47,"tag":167,"props":1876,"children":1878},{"className":1877},[],[1879],{"type":53,"value":1880},"grep",{"type":53,"value":1882}," a distinctive pattern in ",{"type":47,"tag":167,"props":1884,"children":1886},{"className":1885},[],[1887],{"type":53,"value":1888},"dist\u002Fassets\u002F*.js",{"type":53,"value":1576},{"type":47,"tag":156,"props":1891,"children":1892},{},[1893,1898,1900,1905,1907,1913],{"type":47,"tag":108,"props":1894,"children":1895},{},[1896],{"type":53,"value":1897},"Ship",{"type":53,"value":1899}," — per user preference: static deploy of ",{"type":47,"tag":167,"props":1901,"children":1903},{"className":1902},[],[1904],{"type":53,"value":1872},{"type":53,"value":1906}," (e.g.\n",{"type":47,"tag":167,"props":1908,"children":1910},{"className":1909},[],[1911],{"type":53,"value":1912},"npx gh-pages -d dist",{"type":53,"value":1914},"), zip delivery, or just the local build\n(autonomous default: local build only; list deploy options in the\nclose-out report).",{"type":47,"tag":156,"props":1916,"children":1917},{},[1918,1923,1925,1930,1932,1937],{"type":47,"tag":108,"props":1919,"children":1920},{},[1921],{"type":53,"value":1922},"Close out",{"type":53,"value":1924}," — final report: what was built vs the spec (including every\n",{"type":47,"tag":167,"props":1926,"children":1928},{"className":1927},[],[1929],{"type":53,"value":218},{"type":53,"value":1931}," decision), evidence summary, known gaps \u002F stretch items, and a\nshort retro (what to do differently next time) appended to\n",{"type":47,"tag":167,"props":1933,"children":1935},{"className":1934},[],[1936],{"type":53,"value":190},{"type":53,"value":919},{"type":47,"tag":873,"props":1939,"children":1940},{},[],{"type":47,"tag":62,"props":1942,"children":1944},{"id":1943},"quick-planning-single-features",[1945],{"type":53,"value":1946},"Quick Planning (single features)",{"type":47,"tag":56,"props":1948,"children":1949},{},[1950,1952,1957],{"type":53,"value":1951},"For a contained feature in an existing app, skip the pipeline and run this\nchecklist (details in ",{"type":47,"tag":167,"props":1953,"children":1955},{"className":1954},[],[1956],{"type":53,"value":1414},{"type":53,"value":1958},"):",{"type":47,"tag":152,"props":1960,"children":1961},{},[1962,1972,1982,2005,2015,2025,2051,2061,2071,2081,2097],{"type":47,"tag":156,"props":1963,"children":1964},{},[1965,1970],{"type":47,"tag":108,"props":1966,"children":1967},{},[1968],{"type":53,"value":1969},"Feature flags",{"type":53,"value":1971}," — what built-ins does this need (locomotion, physics,\ngrabbing, spatialUI, sceneUnderstanding…) and are their prerequisites met\n(e.g. locomotion needs collision geometry)?",{"type":47,"tag":156,"props":1973,"children":1974},{},[1975,1980],{"type":47,"tag":108,"props":1976,"children":1977},{},[1978],{"type":53,"value":1979},"Check the reinvention-risk table",{"type":53,"value":1981}," — is this already a built-in?",{"type":47,"tag":156,"props":1983,"children":1984},{},[1985,1990,1991,1997,1999,2004],{"type":47,"tag":108,"props":1986,"children":1987},{},[1988],{"type":53,"value":1989},"Ground it",{"type":53,"value":949},{"type":47,"tag":167,"props":1992,"children":1994},{"className":1993},[],[1995],{"type":53,"value":1996},"npx iwsdk reference search\u002Fapi\u002Fexamples",{"type":53,"value":1998}," for the pieces\nyou'll touch (protocol in ",{"type":47,"tag":167,"props":2000,"children":2002},{"className":2001},[],[2003],{"type":53,"value":1012},{"type":53,"value":1576},{"type":47,"tag":156,"props":2006,"children":2007},{},[2008,2013],{"type":47,"tag":108,"props":2009,"children":2010},{},[2011],{"type":53,"value":2012},"Components",{"type":53,"value":2014}," — what data, what Types, tag vs data components?",{"type":47,"tag":156,"props":2016,"children":2017},{},[2018,2023],{"type":47,"tag":108,"props":2019,"children":2020},{},[2021],{"type":53,"value":2022},"Queries & reactivity",{"type":53,"value":2024}," — how do systems find entities; qualify\u002F\ndisqualify subscriptions over polling; signals for state.",{"type":47,"tag":156,"props":2026,"children":2027},{},[2028,2033,2035,2041,2043,2049],{"type":47,"tag":108,"props":2029,"children":2030},{},[2031],{"type":53,"value":2032},"Lifecycle",{"type":53,"value":2034}," — who creates\u002Fdestroys entities; ",{"type":47,"tag":167,"props":2036,"children":2038},{"className":2037},[],[2039],{"type":53,"value":2040},"destroy()",{"type":53,"value":2042}," vs ",{"type":47,"tag":167,"props":2044,"children":2046},{"className":2045},[],[2047],{"type":53,"value":2048},"dispose()",{"type":53,"value":2050},";\nlevel persistence.",{"type":47,"tag":156,"props":2052,"children":2053},{},[2054,2059],{"type":47,"tag":108,"props":2055,"children":2056},{},[2057],{"type":53,"value":2058},"Priority band",{"type":53,"value":2060}," — 0–9 input, 10–19 sim, 20–29 visual sync, 30+ UI.",{"type":47,"tag":156,"props":2062,"children":2063},{},[2064,2069],{"type":47,"tag":108,"props":2065,"children":2066},{},[2067],{"type":53,"value":2068},"VR vs AR vs browser",{"type":53,"value":2070}," — behavior per mode; input per mode.",{"type":47,"tag":156,"props":2072,"children":2073},{},[2074,2079],{"type":47,"tag":108,"props":2075,"children":2076},{},[2077],{"type":53,"value":2078},"Audio & feedback",{"type":53,"value":2080}," — what plays on which interaction.",{"type":47,"tag":156,"props":2082,"children":2083},{},[2084,2089,2091,2096],{"type":47,"tag":108,"props":2085,"children":2086},{},[2087],{"type":53,"value":2088},"Assets",{"type":53,"value":2090}," — Asset Strategy in ",{"type":47,"tag":167,"props":2092,"children":2094},{"className":2093},[],[2095],{"type":53,"value":1183},{"type":53,"value":919},{"type":47,"tag":156,"props":2098,"children":2099},{},[2100,2105,2107,2112],{"type":47,"tag":108,"props":2101,"children":2102},{},[2103],{"type":53,"value":2104},"Verify plan",{"type":53,"value":2106}," — which CLI assertions will prove it works\n(",{"type":47,"tag":167,"props":2108,"children":2110},{"className":2109},[],[2111],{"type":53,"value":1722},{"type":53,"value":1576},{"type":47,"tag":56,"props":2114,"children":2115},{},[2116],{"type":53,"value":2117},"Then implement following the best practices and verify with the runtime loop.",{"type":47,"tag":62,"props":2119,"children":2121},{"id":2120},"reference-files",[2122],{"type":53,"value":2123},"Reference Files",{"type":47,"tag":69,"props":2125,"children":2126},{},[2127,2143],{"type":47,"tag":73,"props":2128,"children":2129},{},[2130],{"type":47,"tag":77,"props":2131,"children":2132},{},[2133,2138],{"type":47,"tag":81,"props":2134,"children":2135},{},[2136],{"type":53,"value":2137},"File",{"type":47,"tag":81,"props":2139,"children":2140},{},[2141],{"type":53,"value":2142},"Load when",{"type":47,"tag":92,"props":2144,"children":2145},{},[2146,2162,2178,2194,2210,2226],{"type":47,"tag":77,"props":2147,"children":2148},{},[2149,2157],{"type":47,"tag":99,"props":2150,"children":2151},{},[2152],{"type":47,"tag":167,"props":2153,"children":2155},{"className":2154},[],[2156],{"type":53,"value":1414},{"type":47,"tag":99,"props":2158,"children":2159},{},[2160],{"type":53,"value":2161},"grounding, coding, reviewing — the API ground truth",{"type":47,"tag":77,"props":2163,"children":2164},{},[2165,2173],{"type":47,"tag":99,"props":2166,"children":2167},{},[2168],{"type":47,"tag":167,"props":2169,"children":2171},{"className":2170},[],[2172],{"type":53,"value":1064},{"type":47,"tag":99,"props":2174,"children":2175},{},[2176],{"type":53,"value":2177},"Phase 1 — question bank + GAME_SPEC template",{"type":47,"tag":77,"props":2179,"children":2180},{},[2181,2189],{"type":47,"tag":99,"props":2182,"children":2183},{},[2184],{"type":47,"tag":167,"props":2185,"children":2187},{"className":2186},[],[2188],{"type":53,"value":1279},{"type":47,"tag":99,"props":2190,"children":2191},{},[2192],{"type":53,"value":2193},"Phase 2 — deck\u002Fconcept-art briefs + templates",{"type":47,"tag":77,"props":2195,"children":2196},{},[2197,2205],{"type":47,"tag":99,"props":2198,"children":2199},{},[2200],{"type":47,"tag":167,"props":2201,"children":2203},{"className":2202},[],[2204],{"type":53,"value":1012},{"type":47,"tag":99,"props":2206,"children":2207},{},[2208],{"type":53,"value":2209},"Phase 3 \u002F Quick step 3 — reference CLI + fallbacks + TECH_PLAN template",{"type":47,"tag":77,"props":2211,"children":2212},{},[2213,2221],{"type":47,"tag":99,"props":2214,"children":2215},{},[2216],{"type":47,"tag":167,"props":2217,"children":2219},{"className":2218},[],[2220],{"type":53,"value":1183},{"type":47,"tag":99,"props":2222,"children":2223},{},[2224],{"type":53,"value":2225},"Phases 4–5 — scaffold flags, architecture template, milestone & sub-agent rules, asset strategy",{"type":47,"tag":77,"props":2227,"children":2228},{},[2229,2237],{"type":47,"tag":99,"props":2230,"children":2231},{},[2232],{"type":47,"tag":167,"props":2233,"children":2235},{"className":2234},[],[2236],{"type":53,"value":1722},{"type":47,"tag":99,"props":2238,"children":2239},{},[2240],{"type":53,"value":2241},"Phases 5–7 — runtime verify loop, input simulation, traps",{"type":47,"tag":2243,"props":2244,"children":2245},"style",{},[2246],{"type":53,"value":2247},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2249,"total":2440},[2250,2274,2288,2309,2330,2347,2358,2377,2390,2405,2417,2427],{"slug":2251,"name":2251,"fn":2252,"description":2253,"org":2254,"tags":2255,"stars":2271,"repoUrl":2272,"updatedAt":2273},"relay-best-practices","write idiomatic Relay code","Best practices for writing idiomatic Relay code. ALWAYS use this skill when writing or modifying React components that use Relay for data fetching. Covers fragments, queries, mutations, pagination, and common anti-patterns. Use when you see `useFragment`, `useLazyLoadQuery`, `usePreloadedQuery`, `useMutation`, `usePaginationFragment`, `graphql` template literals, `react-relay` imports, or `__generated__\u002F*.graphql` files. Also use when asked to explain Relay concepts, debug Relay issues, or review Relay code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2256,2259,2262,2265,2268],{"name":2257,"slug":2258,"type":16},"Engineering","engineering",{"name":2260,"slug":2261,"type":16},"Frontend","frontend",{"name":2263,"slug":2264,"type":16},"GraphQL","graphql",{"name":2266,"slug":2267,"type":16},"React","react",{"name":2269,"slug":2270,"type":16},"Relay","relay",18950,"https:\u002F\u002Fgithub.com\u002Ffacebook\u002Frelay","2026-04-22T04:58:15.370563",{"slug":2275,"name":2275,"fn":2276,"description":2277,"org":2278,"tags":2279,"stars":2271,"repoUrl":2272,"updatedAt":2287},"relay-performance","optimize Relay application performance","Performance best practices for Relay applications. Use when optimizing data fetching, reducing re-renders, configuring caching, or improving time to first meaningful paint. Covers query placement, @defer, pagination, fetch policies, garbage collection, fragment granularity, and server-side filtering. Companion to the relay-best-practices skill which covers correctness and architecture.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2280,2281,2282,2285,2286],{"name":2260,"slug":2261,"type":16},{"name":2263,"slug":2264,"type":16},{"name":2283,"slug":2284,"type":16},"Performance","performance",{"name":2266,"slug":2267,"type":16},{"name":2269,"slug":2270,"type":16},"2026-06-10T07:30:28.726513",{"slug":2289,"name":2289,"fn":2290,"description":2291,"org":2292,"tags":2293,"stars":2306,"repoUrl":2307,"updatedAt":2308},"add-shape-types-to-torch-model","annotate PyTorch models with tensor shapes","Port a PyTorch model to use pyrefly's tensor shape type system (Tensor[[B, C, H, W]], Int[T]). Use this skill whenever the user wants to add shape annotations to a PyTorch model, type a model with tensor dimensions, port a model to use shape tracking, or annotate model forward methods with tensor shapes. Also use when the user mentions tensor shape ports, Int types for PyTorch, or pyrefly shape checking on a model file. Invoke BEFORE starting any model port — the skill's gated workflow prevents common failure modes.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2294,2297,2300,2303],{"name":2295,"slug":2296,"type":16},"Data Modeling","data-modeling",{"name":2298,"slug":2299,"type":16},"Deep Learning","deep-learning",{"name":2301,"slug":2302,"type":16},"Python","python",{"name":2304,"slug":2305,"type":16},"PyTorch","pytorch",6833,"https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fpyrefly","2026-07-18T05:12:08.515952",{"slug":2310,"name":2310,"fn":2311,"description":2312,"org":2313,"tags":2314,"stars":2327,"repoUrl":2328,"updatedAt":2329},"camera-streaming","configure camera streaming and photo capture","Stream, video frames, photo capture, resolution\u002Fframe rate configuration",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2315,2318,2321,2324],{"name":2316,"slug":2317,"type":16},"Camera","camera",{"name":2319,"slug":2320,"type":16},"Hardware","hardware",{"name":2322,"slug":2323,"type":16},"iOS","ios",{"name":2325,"slug":2326,"type":16},"Video","video",488,"https:\u002F\u002Fgithub.com\u002Ffacebook\u002Fmeta-wearables-dat-ios","2026-05-15T06:14:43.555881",{"slug":2331,"name":2331,"fn":2332,"description":2333,"org":2334,"tags":2335,"stars":2327,"repoUrl":2328,"updatedAt":2346},"dat-conventions","develop iOS applications with DAT SDK","Swift patterns, async\u002Fawait, naming conventions, key types for DAT SDK iOS development",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2336,2337,2340,2343],{"name":2322,"slug":2323,"type":16},{"name":2338,"slug":2339,"type":16},"Mobile","mobile",{"name":2341,"slug":2342,"type":16},"SDK","sdk",{"name":2344,"slug":2345,"type":16},"Swift","swift","2026-05-15T06:14:42.334435",{"slug":2348,"name":2348,"fn":2349,"description":2350,"org":2351,"tags":2352,"stars":2327,"repoUrl":2328,"updatedAt":2357},"debugging","debug wearable device software","Common issues, Developer Mode, version compatibility, state machine diagnosis",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2353,2355,2356],{"name":2354,"slug":2348,"type":16},"Debugging",{"name":2257,"slug":2258,"type":16},{"name":2322,"slug":2323,"type":16},"2026-05-15T06:14:38.626606",{"slug":2359,"name":2359,"fn":2360,"description":2361,"org":2362,"tags":2363,"stars":2327,"repoUrl":2328,"updatedAt":2376},"display-access","manage display capabilities on wearable devices","Display capability setup, display-capable device selection, UI DSL, icons, buttons, images, and video playback",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2364,2367,2370,2372,2375],{"name":2365,"slug":2366,"type":16},"Design","design",{"name":2368,"slug":2369,"type":16},"Images","images",{"name":909,"slug":2371,"type":16},"interaction",{"name":2373,"slug":2374,"type":16},"UI Components","ui-components",{"name":2325,"slug":2326,"type":16},"2026-05-15T06:14:39.844502",{"slug":2378,"name":2378,"fn":2379,"description":2380,"org":2381,"tags":2382,"stars":2327,"repoUrl":2328,"updatedAt":2389},"getting-started","set up Meta wearable SDK integration","SDK setup, Swift Package Manager integration, Info.plist configuration, and first connection to Meta glasses",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2383,2386,2387,2388],{"name":2384,"slug":2385,"type":16},"Configuration","configuration",{"name":2322,"slug":2323,"type":16},{"name":2341,"slug":2342,"type":16},{"name":2344,"slug":2345,"type":16},"2026-05-15T06:14:41.086639",{"slug":2391,"name":2391,"fn":2392,"description":2393,"org":2394,"tags":2395,"stars":2327,"repoUrl":2328,"updatedAt":2404},"mockdevice-testing","test wearable apps with mock devices","MockDeviceKit for testing without physical glasses hardware",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2396,2397,2398,2401],{"name":2322,"slug":2323,"type":16},{"name":2338,"slug":2339,"type":16},{"name":2399,"slug":2400,"type":16},"QA","qa",{"name":2402,"slug":2403,"type":16},"Testing","testing","2026-05-15T06:14:37.406692",{"slug":2406,"name":2406,"fn":2407,"description":2408,"org":2409,"tags":2410,"stars":2327,"repoUrl":2328,"updatedAt":2416},"permissions-registration","register apps with Meta AI","App registration with Meta AI, camera permission flows",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2411,2412,2413],{"name":2316,"slug":2317,"type":16},{"name":2322,"slug":2323,"type":16},{"name":2414,"slug":2415,"type":16},"Permissions","permissions","2026-05-15T06:14:46.030253",{"slug":2418,"name":2418,"fn":2419,"description":2420,"org":2421,"tags":2422,"stars":2327,"repoUrl":2328,"updatedAt":2426},"sample-app-guide","build wearable apps with camera streaming","Building a complete DAT app with camera streaming and photo capture",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2423,2424,2425],{"name":2316,"slug":2317,"type":16},{"name":2322,"slug":2323,"type":16},{"name":2338,"slug":2339,"type":16},"2026-05-15T06:14:36.185947",{"slug":2428,"name":2428,"fn":2429,"description":2430,"org":2431,"tags":2432,"stars":2327,"repoUrl":2328,"updatedAt":2439},"session-lifecycle","monitor device session lifecycle states","Device session states, pause\u002Fresume, availability monitoring",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2433,2434,2435,2438],{"name":2322,"slug":2323,"type":16},{"name":2338,"slug":2339,"type":16},{"name":2436,"slug":2437,"type":16},"Monitoring","monitoring",{"name":2283,"slug":2284,"type":16},"2026-05-15T06:14:44.790925",27,{"items":2442,"total":476},[2443,2455,2470,2482,2496,2504,2516],{"slug":2444,"name":2444,"fn":2445,"description":2446,"org":2447,"tags":2448,"stars":29,"repoUrl":30,"updatedAt":2454},"iwsdk-debug","debug continuous behavior in WebXR","Debug continuous behavior in WebXR scenes — physics, animations, collisions, game loops, or any real-time interaction that happens too fast for an agent to observe. Uses ECS pause\u002Fstep\u002Fsnapshot\u002Fdiff to freeze time and inspect state frame by frame.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2449,2450,2451,2452,2453],{"name":2354,"slug":2348,"type":16},{"name":21,"slug":22,"type":16},{"name":909,"slug":2371,"type":16},{"name":14,"slug":15,"type":16},{"name":24,"slug":25,"type":16},"2026-04-06T18:11:37.886889",{"slug":2456,"name":2456,"fn":2457,"description":2458,"org":2459,"tags":2460,"stars":29,"repoUrl":30,"updatedAt":2469},"iwsdk-depth-occlusion","implement depth sensing and occlusion in IWSDK","Guide for implementing depth sensing and occlusion in IWSDK projects. Use when adding depth-based occlusion to hide virtual objects behind real-world surfaces, configuring DepthSensingSystem, choosing occlusion modes, or troubleshooting objects that disappear or fail to occlude.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2461,2464,2465,2468],{"name":2462,"slug":2463,"type":16},"AR","ar",{"name":14,"slug":15,"type":16},{"name":2466,"slug":2467,"type":16},"VR","vr",{"name":24,"slug":25,"type":16},"2026-07-21T05:39:07.241041",{"slug":2471,"name":2471,"fn":2472,"description":2473,"org":2474,"tags":2475,"stars":29,"repoUrl":30,"updatedAt":2481},"iwsdk-grab","grab and move objects in WebXR scenes","Grab an object in the WebXR scene using emulated controllers. Use when the user wants to pick up, move, or test grabbing an object. Supports OneHandGrabbable and TwoHandsGrabbable components which use proximity-based grip (squeeze button), not trigger.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2476,2477,2478,2479,2480],{"name":2462,"slug":2463,"type":16},{"name":21,"slug":22,"type":16},{"name":909,"slug":2371,"type":16},{"name":2466,"slug":2467,"type":16},{"name":24,"slug":25,"type":16},"2026-07-24T05:40:20.809536",{"slug":2483,"name":2483,"fn":2484,"description":2485,"org":2486,"tags":2487,"stars":29,"repoUrl":30,"updatedAt":2495},"iwsdk-physics","implement physics in IWSDK projects","Guide for implementing physics in IWSDK projects. Use when adding physics simulation, configuring rigid bodies, collision shapes, applying forces, creating grabbable physics objects, or troubleshooting physics behavior.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2488,2489,2490,2491,2494],{"name":21,"slug":22,"type":16},{"name":909,"slug":2371,"type":16},{"name":14,"slug":15,"type":16},{"name":2492,"slug":2493,"type":16},"Physics","physics",{"name":24,"slug":25,"type":16},"2026-07-24T05:40:22.854101",{"slug":4,"name":4,"fn":5,"description":6,"org":2497,"tags":2498,"stars":29,"repoUrl":30,"updatedAt":31},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2499,2500,2501,2502,2503],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":27,"slug":28,"type":16},{"name":24,"slug":25,"type":16},{"slug":2505,"name":2505,"fn":2506,"description":2507,"org":2508,"tags":2509,"stars":29,"repoUrl":30,"updatedAt":2515},"iwsdk-ray","implement ray-based interactions in WebXR","Ray-based interactions in the WebXR scene — click objects, press UI buttons, or distance-grab with DistanceGrabbable. Use when the user wants to point at and interact with something at a distance, click a UI button, or test ray-based selection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2510,2511,2512,2513,2514],{"name":2462,"slug":2463,"type":16},{"name":21,"slug":22,"type":16},{"name":909,"slug":2371,"type":16},{"name":2466,"slug":2467,"type":16},{"name":24,"slug":25,"type":16},"2026-07-24T05:40:19.841604",{"slug":2517,"name":2517,"fn":2518,"description":2519,"org":2520,"tags":2521,"stars":29,"repoUrl":30,"updatedAt":2527},"iwsdk-ui","develop IWSDK PanelUI components","Develop and iterate on IWSDK PanelUI components. Use when the user wants to create, modify, debug, or improve UI panels in their IWSDK application. Covers UIKITML editing, full-screen preview with ScreenSpace, and visual verification.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2522,2523,2524,2525,2526],{"name":2260,"slug":2261,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"name":2373,"slug":2374,"type":16},{"name":24,"slug":25,"type":16},"2026-04-06T18:11:34.083706"]