[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-deploy":3,"mdc--mzzx7a-key":39,"related-repo-microsoft-deploy":1704,"related-org-microsoft-deploy":1801},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":34,"sourceUrl":37,"mdContent":38},"deploy","deploy Power Apps mobile applications","Use to deploy, publish, or push an Expo\u002FReact Native Power Apps mobile app to a Power Platform tenant.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,19],{"name":13,"slug":14,"type":15},"Mobile","mobile","tag",{"name":17,"slug":18,"type":15},"Deployment","deployment",{"name":20,"slug":21,"type":15},"Power Apps","power-apps",564,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills","2026-07-31T05:54:41.030384",null,114,[28,29,30,31,21,32,33],"claude-code-plugin","claude-code-skills","code-apps","github-copilot-plugin","power-pages","power-platform",{"repoUrl":23,"stars":22,"forks":26,"topics":35,"description":36},[28,29,30,31,21,32,33],"A plugin marketplace for Claude Code\u002FGitHub Copilot that provides Power Platform development plugins, including reusable skills, agents, and commands for building and deploying solutions.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills\u002Ftree\u002FHEAD\u002Fplugins\u002Fmobile-apps\u002Fskills\u002Fdeploy","---\nname: deploy\ndescription: Use to deploy, publish, or push an Expo\u002FReact Native Power Apps mobile app to a Power Platform tenant.\nuser-invocable: true\nallowed-tools: Read, Glob, Bash, AskUserQuestion, Skill\nmodel: sonnet\n---\n\n**📋 Shared instructions: [shared-instructions.md](${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002Fshared\u002Fshared-instructions.md)** — read first.\n\n# Deploy\n\nBuilds the mobile app in the current directory and pushes it to the Power Platform environment recorded in `power.config.json`.\n\nThis skill uses the standard 4-step deployment flow for this plugin: check memory bank, build, deploy, then update memory bank.\n\n## Out of scope (deliberately)\n\n- `expo run:ios` \u002F `expo run:android` — local native compile is the user's choice; run your platform-specific native command directly when ready.\n- OTA updates and store distribution — out of scope for v0.\n- Starting Metro for local dev — run `npm run dev` (= `expo start`) directly.\n\n## Workflow\n\n1. Check memory bank → 2. Build → 2.5 Offline profile coverage gate → 3. Deploy → 4. Update memory bank\n\n---\n\n### Step 1 — Check memory bank\n\nRead `memory-bank.md` from the project root if present. Capture:\n\n- Project name\n- Environment (id + display name)\n- Current version\n\nIf absent, continue — the project may have been created without the plugin. Re-derive env from `power.config.json` if needed.\n\n### Step 2 — Build\n\n**Print before starting:**\n> \"→ Building production web bundle via `npm run build` (= `expo export --platform web`). ~30–90 seconds.\"\n\nFirst regenerate `connectorSchemas.ts` so `app\u002F_layout.tsx`'s `schemaMap` import reflects every connector currently in `.power\u002Fschemas\u002F`. The npm `prestart`\u002F`preandroid`\u002F`preios` hooks cover dev runs, but `npm run build` does **not** — if a connector was added since the last `npm run dev`, the bundled JS would ship a stale schema map. Always regenerate before build:\n\n```bash\nnpm run generate-schemas\nnpm run build\n```\n\nIf `package.json` has no `build` script, fall back to:\n\n```bash\nnpx expo export --platform web\n```\n\n(That's what the upstream template's `build` script runs.)\n\nIf the build fails:\n\n- **`TS6133` (unused import)** → remove the import and retry once.\n- **Other TypeScript errors** → report file + line and STOP. Don't deploy a broken build.\n- **Metro bundler errors** → surface the full stack and STOP.\n\nVerify `dist\u002F` exists with `index.html` before continuing.\n\n### Step 2.5 — Offline profile coverage gate\n\nThis is the final chance to catch schema that never made it into the Mobile Offline Profile before it ships — a table added to the data model but not the profile never syncs to devices, and a new column arrives blank offline. Validate that every schema change is covered **before** pushing.\n\nRun the local, no-network delta check (`.datamodel-manifest.json` vs `offline-profile.json`):\n\n```bash\nnode \"${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002Fscripts\u002Foffline-profile-delta.js\"\n```\n\nBranch on the JSON `status` (full contract in [offline-profile-reconciliation.md](${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002Fshared\u002Freferences\u002Foffline-profile-reconciliation.md)):\n\n| `status` | Action |\n|---|---|\n| `no-manifest` | Connectors-only app — no Dataverse schema. Continue to Step 3 silently. |\n| `no-profile` | No offline profile in this project. Print one line: `↷ No offline profile — skipping offline coverage check. Run \u002Fsetup-offline-profile if you want offline support.` Continue to Step 3. |\n| `in-sync` | Print `✓ Offline profile covers all schema changes.` Continue to Step 3. |\n| `error` | `offline-profile.json` is unreadable — the script prints `status: error` and **exits non-zero**. Offline coverage can't be validated against a corrupt file, so **STOP before pushing**: surface the `error` string and have the user fix `offline-profile.json` and re-run, or type the `deploy without offline` override (below) to push anyway. |\n| `delta` | **STOP before pushing.** See below. |\n\n**On `delta`** — print the uncovered schema, then gate with `AskUserQuestion`:\n\n```\n⚠ The offline profile is missing schema changes. If you deploy now, these won't be\n  available on disconnected devices:\n\n  Tables not in the profile : \u003CmissingTables[].logicalName>\n  Tables with new columns   : \u003CtablesWithNewColumns[].logicalName (newColumns)>\n```\n\nOptions:\n\n- **Update the offline profile now (recommended)** — read and execute `${CLAUDE_SKILL_DIR}\u002F..\u002Fadd-table-to-offline-profile\u002FSKILL.md` for each `missingTables[]` entry (or once with `--all-new`), then read and execute `${CLAUDE_SKILL_DIR}\u002F..\u002Fedit-offline-profile\u002FSKILL.md` with `--table \u003Ct> --columns add:\u003CnewColumns>` for each `tablesWithNewColumns[]` entry. Follow the ordering in the reconciliation reference, then re-run the delta check; when it reports `in-sync`, continue to Step 3.\n- **Deploy anyway** — requires an explicit override. Wait for the exact phrase `deploy without offline` (case-insensitive); a bare `y`\u002F`yes` is not enough, mirroring the environment-mismatch gate in Step 3. Then continue to Step 3 and note the skipped reconciliation in the Step 4 build-history row.\n\nDo not push until the gate is resolved (reconciled to `in-sync`, or explicitly overridden).\n\n### Step 3 — Deploy\n\n**Resolve and confirm the target environment FIRST.** `npx power-apps push` deploys to the environment configured in `power.config.json`. Resolve that ID to a Dataverse URL so the user catches drift before pushing.\n\nRun:\n\n```bash\nENV_ID=$(node -e \"console.log(require('.\u002Fpower.config.json').environmentId)\")\nnode \"${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002Fscripts\u002Fresolve-environment.js\" \"$ENV_ID\"\n```\n\nFrom `resolve-environment.js` capture the **Environment URL** (e.g. `https:\u002F\u002Fcontoso.crm.dynamics.com\u002F`), **Environment ID**, and **Tenant ID**. Cross-check against `memory-bank.md` \u002F `power.config.json`:\n\n- **Match** → proceed to the confirmation prompt below.\n- **Mismatch** → STOP. Surface both values side-by-side and ask the user to either (a) update `power.config.json` by re-running init in the intended app root, or (b) explicitly type `override` to push to the environment already recorded in `power.config.json`. Do not proceed on a bare `y`.\n- **Cannot resolve\u002Fauthenticate** → STOP with `az login --tenant \u003Cenv-tenant>` instructions, or ask the user to provide the environment URL directly.\n\n**Print before starting:**\n> \"→ Pushing bundle to Power Platform via `npx power-apps push`. ~30–60 seconds.\"\n\nConfirm with the user using the **resolved env URL, not just the friendly name**:\n\n> \"Ready to deploy to **\u003Cenv-name>** (`\u003Cenv-url>`)? This will update the live app for every user in that environment. Type `yes deploy to \u003Cenv-name>` to confirm.\"\n\nWait for the exact phrase `yes deploy to \u003Cenv-name>` (case-insensitive, env-name matching). A bare `y` \u002F `yes` is not enough — too easy to fire on autopilot when the wrong env is active. Then:\n\n```bash\nnpx power-apps push --non-interactive\n```\n\nCapture the app URL from the output if printed.\n\nIf deploy fails, report the error and STOP — do not retry silently. Common fixes:\n\n| Error | Fix |\n|---|---|\n| `npx power-apps push` auth error, wrong user, or multiple accounts | Follow shared-instructions command-failure handling. `az login` \u002F `az account set` does not switch the standalone Power Apps CLI account. |\n| Environment mismatch | Re-run `npx power-apps init -t MobileApp --display-name \u003Cname> --environment-id \u003Cid> --non-interactive` in a fresh\u002Fapp root for the intended target|\n| `npx power-apps push` not recognised | Run `npm install` in the project so `@microsoft\u002Fpower-apps` provides the CLI, or install `@microsoft\u002Fpower-apps-cli` only as a last-resort prerequisite after user confirmation. |\n\n### Step 4 — Update memory bank\n\nIf `memory-bank.md` exists, increment the version (`v1.0.0` → `v1.1.0`) and update:\n\n- Current version\n- Last deployed timestamp\n- App URL (if captured)\n- Append a row to the **Build history** section: `| v1.1.0 | \u003Ctimestamp> | deploy | success |`\n\nPrint the summary card:\n\n```\n✅ Deploy — \u003Cproject-name>\n─────────────────────────────────────────────\nVersion       : \u003Cnew-version>\nEnvironment   : \u003Cenv-name>\nApp URL       : \u003Curl or \"see make.powerapps.com\">\nBundle path   : dist\u002F\n\nLocal dev:    npm run dev          (= expo start, QR for native dev clients)\nRe-deploy:    \u002Fdeploy\nList conns:   \u002Flist-connections\n─────────────────────────────────────────────\n```\n\n---\n\n## Local dev (out of scope for this skill — for reference only)\n\nWhen the user wants to iterate locally, they run **directly**:\n\n```bash\nnpm run dev          # = expo start  →  Metro + QR for native dev clients\n```\n\nThis launches Metro and prints a QR code. They can:\n\n- Scan the QR with the installed native dev client\n- Press `r` to reload, `j` to open the debugger, `m` for the dev menu\n\nRuntime debugging for this plugin uses `\u002Fdebug-app` with native dev-client sessions and Metro terminal logs. Do not use React Native Web, browser automation, direct Metro\u002Flocalhost HTTP probes, or screen-by-screen runtime checks.\n\nIf they want to compile a native binary locally, they run the platform-specific native command directly. Local native compile and manual device testing are user-owned and are not deployment gates for this skill.\n\n## Reference\n\n- [`shared\u002Fversion-check.md`](${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002Fshared\u002Fversion-check.md) — min versions (only Always-required tier matters here)\n- [`shared\u002Fmemory-bank.md`](${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002Fshared\u002Fmemory-bank.md) — Build history schema\n- [`shared\u002Freferences\u002Foffline-profile-reconciliation.md`](${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002Fshared\u002Freferences\u002Foffline-profile-reconciliation.md) — Step 2.5 offline coverage gate\n",{"data":40,"body":44},{"name":4,"description":6,"user-invocable":41,"allowed-tools":42,"model":43},true,"Read, Glob, Bash, AskUserQuestion, Skill","sonnet",{"type":45,"children":46},"root",[47,68,74,88,93,100,150,156,165,169,176,189,207,219,225,233,257,338,389,410,445,457,462,501,522,528,540,561,603,623,808,831,841,846,945,957,963,988,993,1083,1137,1206,1213,1228,1239,1272,1297,1326,1331,1336,1454,1460,1487,1522,1527,1536,1539,1545,1556,1585,1590,1627,1640,1645,1651,1698],{"type":48,"tag":49,"props":50,"children":51},"element","p",{},[52,66],{"type":48,"tag":53,"props":54,"children":55},"strong",{},[56,59],{"type":57,"value":58},"text","📋 Shared instructions: ",{"type":48,"tag":60,"props":61,"children":63},"a",{"href":62},"$%7BCLAUDE_SKILL_DIR%7D\u002F..\u002F..\u002Fshared\u002Fshared-instructions.md",[64],{"type":57,"value":65},"shared-instructions.md",{"type":57,"value":67}," — read first.",{"type":48,"tag":69,"props":70,"children":71},"h1",{"id":4},[72],{"type":57,"value":73},"Deploy",{"type":48,"tag":49,"props":75,"children":76},{},[77,79,86],{"type":57,"value":78},"Builds the mobile app in the current directory and pushes it to the Power Platform environment recorded in ",{"type":48,"tag":80,"props":81,"children":83},"code",{"className":82},[],[84],{"type":57,"value":85},"power.config.json",{"type":57,"value":87},".",{"type":48,"tag":49,"props":89,"children":90},{},[91],{"type":57,"value":92},"This skill uses the standard 4-step deployment flow for this plugin: check memory bank, build, deploy, then update memory bank.",{"type":48,"tag":94,"props":95,"children":97},"h2",{"id":96},"out-of-scope-deliberately",[98],{"type":57,"value":99},"Out of scope (deliberately)",{"type":48,"tag":101,"props":102,"children":103},"ul",{},[104,124,129],{"type":48,"tag":105,"props":106,"children":107},"li",{},[108,114,116,122],{"type":48,"tag":80,"props":109,"children":111},{"className":110},[],[112],{"type":57,"value":113},"expo run:ios",{"type":57,"value":115}," \u002F ",{"type":48,"tag":80,"props":117,"children":119},{"className":118},[],[120],{"type":57,"value":121},"expo run:android",{"type":57,"value":123}," — local native compile is the user's choice; run your platform-specific native command directly when ready.",{"type":48,"tag":105,"props":125,"children":126},{},[127],{"type":57,"value":128},"OTA updates and store distribution — out of scope for v0.",{"type":48,"tag":105,"props":130,"children":131},{},[132,134,140,142,148],{"type":57,"value":133},"Starting Metro for local dev — run ",{"type":48,"tag":80,"props":135,"children":137},{"className":136},[],[138],{"type":57,"value":139},"npm run dev",{"type":57,"value":141}," (= ",{"type":48,"tag":80,"props":143,"children":145},{"className":144},[],[146],{"type":57,"value":147},"expo start",{"type":57,"value":149},") directly.",{"type":48,"tag":94,"props":151,"children":153},{"id":152},"workflow",[154],{"type":57,"value":155},"Workflow",{"type":48,"tag":157,"props":158,"children":159},"ol",{},[160],{"type":48,"tag":105,"props":161,"children":162},{},[163],{"type":57,"value":164},"Check memory bank → 2. Build → 2.5 Offline profile coverage gate → 3. Deploy → 4. Update memory bank",{"type":48,"tag":166,"props":167,"children":168},"hr",{},[],{"type":48,"tag":170,"props":171,"children":173},"h3",{"id":172},"step-1-check-memory-bank",[174],{"type":57,"value":175},"Step 1 — Check memory bank",{"type":48,"tag":49,"props":177,"children":178},{},[179,181,187],{"type":57,"value":180},"Read ",{"type":48,"tag":80,"props":182,"children":184},{"className":183},[],[185],{"type":57,"value":186},"memory-bank.md",{"type":57,"value":188}," from the project root if present. Capture:",{"type":48,"tag":101,"props":190,"children":191},{},[192,197,202],{"type":48,"tag":105,"props":193,"children":194},{},[195],{"type":57,"value":196},"Project name",{"type":48,"tag":105,"props":198,"children":199},{},[200],{"type":57,"value":201},"Environment (id + display name)",{"type":48,"tag":105,"props":203,"children":204},{},[205],{"type":57,"value":206},"Current version",{"type":48,"tag":49,"props":208,"children":209},{},[210,212,217],{"type":57,"value":211},"If absent, continue — the project may have been created without the plugin. Re-derive env from ",{"type":48,"tag":80,"props":213,"children":215},{"className":214},[],[216],{"type":57,"value":85},{"type":57,"value":218}," if needed.",{"type":48,"tag":170,"props":220,"children":222},{"id":221},"step-2-build",[223],{"type":57,"value":224},"Step 2 — Build",{"type":48,"tag":49,"props":226,"children":227},{},[228],{"type":48,"tag":53,"props":229,"children":230},{},[231],{"type":57,"value":232},"Print before starting:",{"type":48,"tag":234,"props":235,"children":236},"blockquote",{},[237],{"type":48,"tag":49,"props":238,"children":239},{},[240,242,248,249,255],{"type":57,"value":241},"\"→ Building production web bundle via ",{"type":48,"tag":80,"props":243,"children":245},{"className":244},[],[246],{"type":57,"value":247},"npm run build",{"type":57,"value":141},{"type":48,"tag":80,"props":250,"children":252},{"className":251},[],[253],{"type":57,"value":254},"expo export --platform web",{"type":57,"value":256},"). ~30–90 seconds.\"",{"type":48,"tag":49,"props":258,"children":259},{},[260,262,268,270,276,278,284,286,292,294,300,302,308,309,315,317,322,324,329,331,336],{"type":57,"value":261},"First regenerate ",{"type":48,"tag":80,"props":263,"children":265},{"className":264},[],[266],{"type":57,"value":267},"connectorSchemas.ts",{"type":57,"value":269}," so ",{"type":48,"tag":80,"props":271,"children":273},{"className":272},[],[274],{"type":57,"value":275},"app\u002F_layout.tsx",{"type":57,"value":277},"'s ",{"type":48,"tag":80,"props":279,"children":281},{"className":280},[],[282],{"type":57,"value":283},"schemaMap",{"type":57,"value":285}," import reflects every connector currently in ",{"type":48,"tag":80,"props":287,"children":289},{"className":288},[],[290],{"type":57,"value":291},".power\u002Fschemas\u002F",{"type":57,"value":293},". The npm ",{"type":48,"tag":80,"props":295,"children":297},{"className":296},[],[298],{"type":57,"value":299},"prestart",{"type":57,"value":301},"\u002F",{"type":48,"tag":80,"props":303,"children":305},{"className":304},[],[306],{"type":57,"value":307},"preandroid",{"type":57,"value":301},{"type":48,"tag":80,"props":310,"children":312},{"className":311},[],[313],{"type":57,"value":314},"preios",{"type":57,"value":316}," hooks cover dev runs, but ",{"type":48,"tag":80,"props":318,"children":320},{"className":319},[],[321],{"type":57,"value":247},{"type":57,"value":323}," does ",{"type":48,"tag":53,"props":325,"children":326},{},[327],{"type":57,"value":328},"not",{"type":57,"value":330}," — if a connector was added since the last ",{"type":48,"tag":80,"props":332,"children":334},{"className":333},[],[335],{"type":57,"value":139},{"type":57,"value":337},", the bundled JS would ship a stale schema map. Always regenerate before build:",{"type":48,"tag":339,"props":340,"children":345},"pre",{"className":341,"code":342,"language":343,"meta":344,"style":344},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm run generate-schemas\nnpm run build\n","bash","",[346],{"type":48,"tag":80,"props":347,"children":348},{"__ignoreMap":344},[349,372],{"type":48,"tag":350,"props":351,"children":354},"span",{"class":352,"line":353},"line",1,[355,361,367],{"type":48,"tag":350,"props":356,"children":358},{"style":357},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[359],{"type":57,"value":360},"npm",{"type":48,"tag":350,"props":362,"children":364},{"style":363},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[365],{"type":57,"value":366}," run",{"type":48,"tag":350,"props":368,"children":369},{"style":363},[370],{"type":57,"value":371}," generate-schemas\n",{"type":48,"tag":350,"props":373,"children":375},{"class":352,"line":374},2,[376,380,384],{"type":48,"tag":350,"props":377,"children":378},{"style":357},[379],{"type":57,"value":360},{"type":48,"tag":350,"props":381,"children":382},{"style":363},[383],{"type":57,"value":366},{"type":48,"tag":350,"props":385,"children":386},{"style":363},[387],{"type":57,"value":388}," build\n",{"type":48,"tag":49,"props":390,"children":391},{},[392,394,400,402,408],{"type":57,"value":393},"If ",{"type":48,"tag":80,"props":395,"children":397},{"className":396},[],[398],{"type":57,"value":399},"package.json",{"type":57,"value":401}," has no ",{"type":48,"tag":80,"props":403,"children":405},{"className":404},[],[406],{"type":57,"value":407},"build",{"type":57,"value":409}," script, fall back to:",{"type":48,"tag":339,"props":411,"children":413},{"className":341,"code":412,"language":343,"meta":344,"style":344},"npx expo export --platform web\n",[414],{"type":48,"tag":80,"props":415,"children":416},{"__ignoreMap":344},[417],{"type":48,"tag":350,"props":418,"children":419},{"class":352,"line":353},[420,425,430,435,440],{"type":48,"tag":350,"props":421,"children":422},{"style":357},[423],{"type":57,"value":424},"npx",{"type":48,"tag":350,"props":426,"children":427},{"style":363},[428],{"type":57,"value":429}," expo",{"type":48,"tag":350,"props":431,"children":432},{"style":363},[433],{"type":57,"value":434}," export",{"type":48,"tag":350,"props":436,"children":437},{"style":363},[438],{"type":57,"value":439}," --platform",{"type":48,"tag":350,"props":441,"children":442},{"style":363},[443],{"type":57,"value":444}," web\n",{"type":48,"tag":49,"props":446,"children":447},{},[448,450,455],{"type":57,"value":449},"(That's what the upstream template's ",{"type":48,"tag":80,"props":451,"children":453},{"className":452},[],[454],{"type":57,"value":407},{"type":57,"value":456}," script runs.)",{"type":48,"tag":49,"props":458,"children":459},{},[460],{"type":57,"value":461},"If the build fails:",{"type":48,"tag":101,"props":463,"children":464},{},[465,481,491],{"type":48,"tag":105,"props":466,"children":467},{},[468,479],{"type":48,"tag":53,"props":469,"children":470},{},[471,477],{"type":48,"tag":80,"props":472,"children":474},{"className":473},[],[475],{"type":57,"value":476},"TS6133",{"type":57,"value":478}," (unused import)",{"type":57,"value":480}," → remove the import and retry once.",{"type":48,"tag":105,"props":482,"children":483},{},[484,489],{"type":48,"tag":53,"props":485,"children":486},{},[487],{"type":57,"value":488},"Other TypeScript errors",{"type":57,"value":490}," → report file + line and STOP. Don't deploy a broken build.",{"type":48,"tag":105,"props":492,"children":493},{},[494,499],{"type":48,"tag":53,"props":495,"children":496},{},[497],{"type":57,"value":498},"Metro bundler errors",{"type":57,"value":500}," → surface the full stack and STOP.",{"type":48,"tag":49,"props":502,"children":503},{},[504,506,512,514,520],{"type":57,"value":505},"Verify ",{"type":48,"tag":80,"props":507,"children":509},{"className":508},[],[510],{"type":57,"value":511},"dist\u002F",{"type":57,"value":513}," exists with ",{"type":48,"tag":80,"props":515,"children":517},{"className":516},[],[518],{"type":57,"value":519},"index.html",{"type":57,"value":521}," before continuing.",{"type":48,"tag":170,"props":523,"children":525},{"id":524},"step-25-offline-profile-coverage-gate",[526],{"type":57,"value":527},"Step 2.5 — Offline profile coverage gate",{"type":48,"tag":49,"props":529,"children":530},{},[531,533,538],{"type":57,"value":532},"This is the final chance to catch schema that never made it into the Mobile Offline Profile before it ships — a table added to the data model but not the profile never syncs to devices, and a new column arrives blank offline. Validate that every schema change is covered ",{"type":48,"tag":53,"props":534,"children":535},{},[536],{"type":57,"value":537},"before",{"type":57,"value":539}," pushing.",{"type":48,"tag":49,"props":541,"children":542},{},[543,545,551,553,559],{"type":57,"value":544},"Run the local, no-network delta check (",{"type":48,"tag":80,"props":546,"children":548},{"className":547},[],[549],{"type":57,"value":550},".datamodel-manifest.json",{"type":57,"value":552}," vs ",{"type":48,"tag":80,"props":554,"children":556},{"className":555},[],[557],{"type":57,"value":558},"offline-profile.json",{"type":57,"value":560},"):",{"type":48,"tag":339,"props":562,"children":564},{"className":341,"code":563,"language":343,"meta":344,"style":344},"node \"${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002Fscripts\u002Foffline-profile-delta.js\"\n",[565],{"type":48,"tag":80,"props":566,"children":567},{"__ignoreMap":344},[568],{"type":48,"tag":350,"props":569,"children":570},{"class":352,"line":353},[571,576,582,588,593,598],{"type":48,"tag":350,"props":572,"children":573},{"style":357},[574],{"type":57,"value":575},"node",{"type":48,"tag":350,"props":577,"children":579},{"style":578},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[580],{"type":57,"value":581}," \"${",{"type":48,"tag":350,"props":583,"children":585},{"style":584},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[586],{"type":57,"value":587},"CLAUDE_SKILL_DIR",{"type":48,"tag":350,"props":589,"children":590},{"style":578},[591],{"type":57,"value":592},"}",{"type":48,"tag":350,"props":594,"children":595},{"style":363},[596],{"type":57,"value":597},"\u002F..\u002F..\u002Fscripts\u002Foffline-profile-delta.js",{"type":48,"tag":350,"props":599,"children":600},{"style":578},[601],{"type":57,"value":602},"\"\n",{"type":48,"tag":49,"props":604,"children":605},{},[606,608,614,616,622],{"type":57,"value":607},"Branch on the JSON ",{"type":48,"tag":80,"props":609,"children":611},{"className":610},[],[612],{"type":57,"value":613},"status",{"type":57,"value":615}," (full contract in ",{"type":48,"tag":60,"props":617,"children":619},{"href":618},"$%7BCLAUDE_SKILL_DIR%7D\u002F..\u002F..\u002Fshared\u002Freferences\u002Foffline-profile-reconciliation.md",[620],{"type":57,"value":621},"offline-profile-reconciliation.md",{"type":57,"value":560},{"type":48,"tag":624,"props":625,"children":626},"table",{},[627,649],{"type":48,"tag":628,"props":629,"children":630},"thead",{},[631],{"type":48,"tag":632,"props":633,"children":634},"tr",{},[635,644],{"type":48,"tag":636,"props":637,"children":638},"th",{},[639],{"type":48,"tag":80,"props":640,"children":642},{"className":641},[],[643],{"type":57,"value":613},{"type":48,"tag":636,"props":645,"children":646},{},[647],{"type":57,"value":648},"Action",{"type":48,"tag":650,"props":651,"children":652},"tbody",{},[653,671,696,720,786],{"type":48,"tag":632,"props":654,"children":655},{},[656,666],{"type":48,"tag":657,"props":658,"children":659},"td",{},[660],{"type":48,"tag":80,"props":661,"children":663},{"className":662},[],[664],{"type":57,"value":665},"no-manifest",{"type":48,"tag":657,"props":667,"children":668},{},[669],{"type":57,"value":670},"Connectors-only app — no Dataverse schema. Continue to Step 3 silently.",{"type":48,"tag":632,"props":672,"children":673},{},[674,683],{"type":48,"tag":657,"props":675,"children":676},{},[677],{"type":48,"tag":80,"props":678,"children":680},{"className":679},[],[681],{"type":57,"value":682},"no-profile",{"type":48,"tag":657,"props":684,"children":685},{},[686,688,694],{"type":57,"value":687},"No offline profile in this project. Print one line: ",{"type":48,"tag":80,"props":689,"children":691},{"className":690},[],[692],{"type":57,"value":693},"↷ No offline profile — skipping offline coverage check. Run \u002Fsetup-offline-profile if you want offline support.",{"type":57,"value":695}," Continue to Step 3.",{"type":48,"tag":632,"props":697,"children":698},{},[699,708],{"type":48,"tag":657,"props":700,"children":701},{},[702],{"type":48,"tag":80,"props":703,"children":705},{"className":704},[],[706],{"type":57,"value":707},"in-sync",{"type":48,"tag":657,"props":709,"children":710},{},[711,713,719],{"type":57,"value":712},"Print ",{"type":48,"tag":80,"props":714,"children":716},{"className":715},[],[717],{"type":57,"value":718},"✓ Offline profile covers all schema changes.",{"type":57,"value":695},{"type":48,"tag":632,"props":721,"children":722},{},[723,732],{"type":48,"tag":657,"props":724,"children":725},{},[726],{"type":48,"tag":80,"props":727,"children":729},{"className":728},[],[730],{"type":57,"value":731},"error",{"type":48,"tag":657,"props":733,"children":734},{},[735,740,742,748,750,755,757,762,764,769,771,776,778,784],{"type":48,"tag":80,"props":736,"children":738},{"className":737},[],[739],{"type":57,"value":558},{"type":57,"value":741}," is unreadable — the script prints ",{"type":48,"tag":80,"props":743,"children":745},{"className":744},[],[746],{"type":57,"value":747},"status: error",{"type":57,"value":749}," and ",{"type":48,"tag":53,"props":751,"children":752},{},[753],{"type":57,"value":754},"exits non-zero",{"type":57,"value":756},". Offline coverage can't be validated against a corrupt file, so ",{"type":48,"tag":53,"props":758,"children":759},{},[760],{"type":57,"value":761},"STOP before pushing",{"type":57,"value":763},": surface the ",{"type":48,"tag":80,"props":765,"children":767},{"className":766},[],[768],{"type":57,"value":731},{"type":57,"value":770}," string and have the user fix ",{"type":48,"tag":80,"props":772,"children":774},{"className":773},[],[775],{"type":57,"value":558},{"type":57,"value":777}," and re-run, or type the ",{"type":48,"tag":80,"props":779,"children":781},{"className":780},[],[782],{"type":57,"value":783},"deploy without offline",{"type":57,"value":785}," override (below) to push anyway.",{"type":48,"tag":632,"props":787,"children":788},{},[789,798],{"type":48,"tag":657,"props":790,"children":791},{},[792],{"type":48,"tag":80,"props":793,"children":795},{"className":794},[],[796],{"type":57,"value":797},"delta",{"type":48,"tag":657,"props":799,"children":800},{},[801,806],{"type":48,"tag":53,"props":802,"children":803},{},[804],{"type":57,"value":805},"STOP before pushing.",{"type":57,"value":807}," See below.",{"type":48,"tag":49,"props":809,"children":810},{},[811,821,823,829],{"type":48,"tag":53,"props":812,"children":813},{},[814,816],{"type":57,"value":815},"On ",{"type":48,"tag":80,"props":817,"children":819},{"className":818},[],[820],{"type":57,"value":797},{"type":57,"value":822}," — print the uncovered schema, then gate with ",{"type":48,"tag":80,"props":824,"children":826},{"className":825},[],[827],{"type":57,"value":828},"AskUserQuestion",{"type":57,"value":830},":",{"type":48,"tag":339,"props":832,"children":836},{"className":833,"code":835,"language":57},[834],"language-text","⚠ The offline profile is missing schema changes. If you deploy now, these won't be\n  available on disconnected devices:\n\n  Tables not in the profile : \u003CmissingTables[].logicalName>\n  Tables with new columns   : \u003CtablesWithNewColumns[].logicalName (newColumns)>\n",[837],{"type":48,"tag":80,"props":838,"children":839},{"__ignoreMap":344},[840],{"type":57,"value":835},{"type":48,"tag":49,"props":842,"children":843},{},[844],{"type":57,"value":845},"Options:",{"type":48,"tag":101,"props":847,"children":848},{},[849,913],{"type":48,"tag":105,"props":850,"children":851},{},[852,857,859,865,867,873,875,881,883,889,891,897,898,904,906,911],{"type":48,"tag":53,"props":853,"children":854},{},[855],{"type":57,"value":856},"Update the offline profile now (recommended)",{"type":57,"value":858}," — read and execute ",{"type":48,"tag":80,"props":860,"children":862},{"className":861},[],[863],{"type":57,"value":864},"${CLAUDE_SKILL_DIR}\u002F..\u002Fadd-table-to-offline-profile\u002FSKILL.md",{"type":57,"value":866}," for each ",{"type":48,"tag":80,"props":868,"children":870},{"className":869},[],[871],{"type":57,"value":872},"missingTables[]",{"type":57,"value":874}," entry (or once with ",{"type":48,"tag":80,"props":876,"children":878},{"className":877},[],[879],{"type":57,"value":880},"--all-new",{"type":57,"value":882},"), then read and execute ",{"type":48,"tag":80,"props":884,"children":886},{"className":885},[],[887],{"type":57,"value":888},"${CLAUDE_SKILL_DIR}\u002F..\u002Fedit-offline-profile\u002FSKILL.md",{"type":57,"value":890}," with ",{"type":48,"tag":80,"props":892,"children":894},{"className":893},[],[895],{"type":57,"value":896},"--table \u003Ct> --columns add:\u003CnewColumns>",{"type":57,"value":866},{"type":48,"tag":80,"props":899,"children":901},{"className":900},[],[902],{"type":57,"value":903},"tablesWithNewColumns[]",{"type":57,"value":905}," entry. Follow the ordering in the reconciliation reference, then re-run the delta check; when it reports ",{"type":48,"tag":80,"props":907,"children":909},{"className":908},[],[910],{"type":57,"value":707},{"type":57,"value":912},", continue to Step 3.",{"type":48,"tag":105,"props":914,"children":915},{},[916,921,923,928,930,936,937,943],{"type":48,"tag":53,"props":917,"children":918},{},[919],{"type":57,"value":920},"Deploy anyway",{"type":57,"value":922}," — requires an explicit override. Wait for the exact phrase ",{"type":48,"tag":80,"props":924,"children":926},{"className":925},[],[927],{"type":57,"value":783},{"type":57,"value":929}," (case-insensitive); a bare ",{"type":48,"tag":80,"props":931,"children":933},{"className":932},[],[934],{"type":57,"value":935},"y",{"type":57,"value":301},{"type":48,"tag":80,"props":938,"children":940},{"className":939},[],[941],{"type":57,"value":942},"yes",{"type":57,"value":944}," is not enough, mirroring the environment-mismatch gate in Step 3. Then continue to Step 3 and note the skipped reconciliation in the Step 4 build-history row.",{"type":48,"tag":49,"props":946,"children":947},{},[948,950,955],{"type":57,"value":949},"Do not push until the gate is resolved (reconciled to ",{"type":48,"tag":80,"props":951,"children":953},{"className":952},[],[954],{"type":57,"value":707},{"type":57,"value":956},", or explicitly overridden).",{"type":48,"tag":170,"props":958,"children":960},{"id":959},"step-3-deploy",[961],{"type":57,"value":962},"Step 3 — Deploy",{"type":48,"tag":49,"props":964,"children":965},{},[966,971,973,979,981,986],{"type":48,"tag":53,"props":967,"children":968},{},[969],{"type":57,"value":970},"Resolve and confirm the target environment FIRST.",{"type":57,"value":972}," ",{"type":48,"tag":80,"props":974,"children":976},{"className":975},[],[977],{"type":57,"value":978},"npx power-apps push",{"type":57,"value":980}," deploys to the environment configured in ",{"type":48,"tag":80,"props":982,"children":984},{"className":983},[],[985],{"type":57,"value":85},{"type":57,"value":987},". Resolve that ID to a Dataverse URL so the user catches drift before pushing.",{"type":48,"tag":49,"props":989,"children":990},{},[991],{"type":57,"value":992},"Run:",{"type":48,"tag":339,"props":994,"children":996},{"className":341,"code":995,"language":343,"meta":344,"style":344},"ENV_ID=$(node -e \"console.log(require('.\u002Fpower.config.json').environmentId)\")\nnode \"${CLAUDE_SKILL_DIR}\u002F..\u002F..\u002Fscripts\u002Fresolve-environment.js\" \"$ENV_ID\"\n",[997],{"type":48,"tag":80,"props":998,"children":999},{"__ignoreMap":344},[1000,1042],{"type":48,"tag":350,"props":1001,"children":1002},{"class":352,"line":353},[1003,1008,1013,1017,1022,1027,1032,1037],{"type":48,"tag":350,"props":1004,"children":1005},{"style":584},[1006],{"type":57,"value":1007},"ENV_ID",{"type":48,"tag":350,"props":1009,"children":1010},{"style":578},[1011],{"type":57,"value":1012},"=$(",{"type":48,"tag":350,"props":1014,"children":1015},{"style":357},[1016],{"type":57,"value":575},{"type":48,"tag":350,"props":1018,"children":1019},{"style":363},[1020],{"type":57,"value":1021}," -e",{"type":48,"tag":350,"props":1023,"children":1024},{"style":578},[1025],{"type":57,"value":1026}," \"",{"type":48,"tag":350,"props":1028,"children":1029},{"style":363},[1030],{"type":57,"value":1031},"console.log(require('.\u002Fpower.config.json').environmentId)",{"type":48,"tag":350,"props":1033,"children":1034},{"style":578},[1035],{"type":57,"value":1036},"\"",{"type":48,"tag":350,"props":1038,"children":1039},{"style":578},[1040],{"type":57,"value":1041},")\n",{"type":48,"tag":350,"props":1043,"children":1044},{"class":352,"line":374},[1045,1049,1053,1057,1061,1066,1070,1074,1079],{"type":48,"tag":350,"props":1046,"children":1047},{"style":357},[1048],{"type":57,"value":575},{"type":48,"tag":350,"props":1050,"children":1051},{"style":578},[1052],{"type":57,"value":581},{"type":48,"tag":350,"props":1054,"children":1055},{"style":584},[1056],{"type":57,"value":587},{"type":48,"tag":350,"props":1058,"children":1059},{"style":578},[1060],{"type":57,"value":592},{"type":48,"tag":350,"props":1062,"children":1063},{"style":363},[1064],{"type":57,"value":1065},"\u002F..\u002F..\u002Fscripts\u002Fresolve-environment.js",{"type":48,"tag":350,"props":1067,"children":1068},{"style":578},[1069],{"type":57,"value":1036},{"type":48,"tag":350,"props":1071,"children":1072},{"style":578},[1073],{"type":57,"value":1026},{"type":48,"tag":350,"props":1075,"children":1076},{"style":584},[1077],{"type":57,"value":1078},"$ENV_ID",{"type":48,"tag":350,"props":1080,"children":1081},{"style":578},[1082],{"type":57,"value":602},{"type":48,"tag":49,"props":1084,"children":1085},{},[1086,1088,1094,1096,1101,1103,1109,1111,1116,1118,1123,1125,1130,1131,1136],{"type":57,"value":1087},"From ",{"type":48,"tag":80,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":57,"value":1093},"resolve-environment.js",{"type":57,"value":1095}," capture the ",{"type":48,"tag":53,"props":1097,"children":1098},{},[1099],{"type":57,"value":1100},"Environment URL",{"type":57,"value":1102}," (e.g. ",{"type":48,"tag":80,"props":1104,"children":1106},{"className":1105},[],[1107],{"type":57,"value":1108},"https:\u002F\u002Fcontoso.crm.dynamics.com\u002F",{"type":57,"value":1110},"), ",{"type":48,"tag":53,"props":1112,"children":1113},{},[1114],{"type":57,"value":1115},"Environment ID",{"type":57,"value":1117},", and ",{"type":48,"tag":53,"props":1119,"children":1120},{},[1121],{"type":57,"value":1122},"Tenant ID",{"type":57,"value":1124},". Cross-check against ",{"type":48,"tag":80,"props":1126,"children":1128},{"className":1127},[],[1129],{"type":57,"value":186},{"type":57,"value":115},{"type":48,"tag":80,"props":1132,"children":1134},{"className":1133},[],[1135],{"type":57,"value":85},{"type":57,"value":830},{"type":48,"tag":101,"props":1138,"children":1139},{},[1140,1150,1188],{"type":48,"tag":105,"props":1141,"children":1142},{},[1143,1148],{"type":48,"tag":53,"props":1144,"children":1145},{},[1146],{"type":57,"value":1147},"Match",{"type":57,"value":1149}," → proceed to the confirmation prompt below.",{"type":48,"tag":105,"props":1151,"children":1152},{},[1153,1158,1160,1165,1167,1173,1175,1180,1182,1187],{"type":48,"tag":53,"props":1154,"children":1155},{},[1156],{"type":57,"value":1157},"Mismatch",{"type":57,"value":1159}," → STOP. Surface both values side-by-side and ask the user to either (a) update ",{"type":48,"tag":80,"props":1161,"children":1163},{"className":1162},[],[1164],{"type":57,"value":85},{"type":57,"value":1166}," by re-running init in the intended app root, or (b) explicitly type ",{"type":48,"tag":80,"props":1168,"children":1170},{"className":1169},[],[1171],{"type":57,"value":1172},"override",{"type":57,"value":1174}," to push to the environment already recorded in ",{"type":48,"tag":80,"props":1176,"children":1178},{"className":1177},[],[1179],{"type":57,"value":85},{"type":57,"value":1181},". Do not proceed on a bare ",{"type":48,"tag":80,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":57,"value":935},{"type":57,"value":87},{"type":48,"tag":105,"props":1189,"children":1190},{},[1191,1196,1198,1204],{"type":48,"tag":53,"props":1192,"children":1193},{},[1194],{"type":57,"value":1195},"Cannot resolve\u002Fauthenticate",{"type":57,"value":1197}," → STOP with ",{"type":48,"tag":80,"props":1199,"children":1201},{"className":1200},[],[1202],{"type":57,"value":1203},"az login --tenant \u003Cenv-tenant>",{"type":57,"value":1205}," instructions, or ask the user to provide the environment URL directly.",{"type":48,"tag":49,"props":1207,"children":1208},{},[1209],{"type":48,"tag":53,"props":1210,"children":1211},{},[1212],{"type":57,"value":232},{"type":48,"tag":234,"props":1214,"children":1215},{},[1216],{"type":48,"tag":49,"props":1217,"children":1218},{},[1219,1221,1226],{"type":57,"value":1220},"\"→ Pushing bundle to Power Platform via ",{"type":48,"tag":80,"props":1222,"children":1224},{"className":1223},[],[1225],{"type":57,"value":978},{"type":57,"value":1227},". ~30–60 seconds.\"",{"type":48,"tag":49,"props":1229,"children":1230},{},[1231,1233,1238],{"type":57,"value":1232},"Confirm with the user using the ",{"type":48,"tag":53,"props":1234,"children":1235},{},[1236],{"type":57,"value":1237},"resolved env URL, not just the friendly name",{"type":57,"value":830},{"type":48,"tag":234,"props":1240,"children":1241},{},[1242],{"type":48,"tag":49,"props":1243,"children":1244},{},[1245,1247,1254,1256,1262,1264,1270],{"type":57,"value":1246},"\"Ready to deploy to ",{"type":48,"tag":53,"props":1248,"children":1249},{},[1250],{"type":48,"tag":1251,"props":1252,"children":1253},"env-name",{},[],{"type":57,"value":1255}," (",{"type":48,"tag":80,"props":1257,"children":1259},{"className":1258},[],[1260],{"type":57,"value":1261},"\u003Cenv-url>",{"type":57,"value":1263},")? This will update the live app for every user in that environment. Type ",{"type":48,"tag":80,"props":1265,"children":1267},{"className":1266},[],[1268],{"type":57,"value":1269},"yes deploy to \u003Cenv-name>",{"type":57,"value":1271}," to confirm.\"",{"type":48,"tag":49,"props":1273,"children":1274},{},[1275,1277,1282,1284,1289,1290,1295],{"type":57,"value":1276},"Wait for the exact phrase ",{"type":48,"tag":80,"props":1278,"children":1280},{"className":1279},[],[1281],{"type":57,"value":1269},{"type":57,"value":1283}," (case-insensitive, env-name matching). A bare ",{"type":48,"tag":80,"props":1285,"children":1287},{"className":1286},[],[1288],{"type":57,"value":935},{"type":57,"value":115},{"type":48,"tag":80,"props":1291,"children":1293},{"className":1292},[],[1294],{"type":57,"value":942},{"type":57,"value":1296}," is not enough — too easy to fire on autopilot when the wrong env is active. Then:",{"type":48,"tag":339,"props":1298,"children":1300},{"className":341,"code":1299,"language":343,"meta":344,"style":344},"npx power-apps push --non-interactive\n",[1301],{"type":48,"tag":80,"props":1302,"children":1303},{"__ignoreMap":344},[1304],{"type":48,"tag":350,"props":1305,"children":1306},{"class":352,"line":353},[1307,1311,1316,1321],{"type":48,"tag":350,"props":1308,"children":1309},{"style":357},[1310],{"type":57,"value":424},{"type":48,"tag":350,"props":1312,"children":1313},{"style":363},[1314],{"type":57,"value":1315}," power-apps",{"type":48,"tag":350,"props":1317,"children":1318},{"style":363},[1319],{"type":57,"value":1320}," push",{"type":48,"tag":350,"props":1322,"children":1323},{"style":363},[1324],{"type":57,"value":1325}," --non-interactive\n",{"type":48,"tag":49,"props":1327,"children":1328},{},[1329],{"type":57,"value":1330},"Capture the app URL from the output if printed.",{"type":48,"tag":49,"props":1332,"children":1333},{},[1334],{"type":57,"value":1335},"If deploy fails, report the error and STOP — do not retry silently. Common fixes:",{"type":48,"tag":624,"props":1337,"children":1338},{},[1339,1355],{"type":48,"tag":628,"props":1340,"children":1341},{},[1342],{"type":48,"tag":632,"props":1343,"children":1344},{},[1345,1350],{"type":48,"tag":636,"props":1346,"children":1347},{},[1348],{"type":57,"value":1349},"Error",{"type":48,"tag":636,"props":1351,"children":1352},{},[1353],{"type":57,"value":1354},"Fix",{"type":48,"tag":650,"props":1356,"children":1357},{},[1358,1391,1412],{"type":48,"tag":632,"props":1359,"children":1360},{},[1361,1371],{"type":48,"tag":657,"props":1362,"children":1363},{},[1364,1369],{"type":48,"tag":80,"props":1365,"children":1367},{"className":1366},[],[1368],{"type":57,"value":978},{"type":57,"value":1370}," auth error, wrong user, or multiple accounts",{"type":48,"tag":657,"props":1372,"children":1373},{},[1374,1376,1382,1383,1389],{"type":57,"value":1375},"Follow shared-instructions command-failure handling. ",{"type":48,"tag":80,"props":1377,"children":1379},{"className":1378},[],[1380],{"type":57,"value":1381},"az login",{"type":57,"value":115},{"type":48,"tag":80,"props":1384,"children":1386},{"className":1385},[],[1387],{"type":57,"value":1388},"az account set",{"type":57,"value":1390}," does not switch the standalone Power Apps CLI account.",{"type":48,"tag":632,"props":1392,"children":1393},{},[1394,1399],{"type":48,"tag":657,"props":1395,"children":1396},{},[1397],{"type":57,"value":1398},"Environment mismatch",{"type":48,"tag":657,"props":1400,"children":1401},{},[1402,1404,1410],{"type":57,"value":1403},"Re-run ",{"type":48,"tag":80,"props":1405,"children":1407},{"className":1406},[],[1408],{"type":57,"value":1409},"npx power-apps init -t MobileApp --display-name \u003Cname> --environment-id \u003Cid> --non-interactive",{"type":57,"value":1411}," in a fresh\u002Fapp root for the intended target",{"type":48,"tag":632,"props":1413,"children":1414},{},[1415,1425],{"type":48,"tag":657,"props":1416,"children":1417},{},[1418,1423],{"type":48,"tag":80,"props":1419,"children":1421},{"className":1420},[],[1422],{"type":57,"value":978},{"type":57,"value":1424}," not recognised",{"type":48,"tag":657,"props":1426,"children":1427},{},[1428,1430,1436,1438,1444,1446,1452],{"type":57,"value":1429},"Run ",{"type":48,"tag":80,"props":1431,"children":1433},{"className":1432},[],[1434],{"type":57,"value":1435},"npm install",{"type":57,"value":1437}," in the project so ",{"type":48,"tag":80,"props":1439,"children":1441},{"className":1440},[],[1442],{"type":57,"value":1443},"@microsoft\u002Fpower-apps",{"type":57,"value":1445}," provides the CLI, or install ",{"type":48,"tag":80,"props":1447,"children":1449},{"className":1448},[],[1450],{"type":57,"value":1451},"@microsoft\u002Fpower-apps-cli",{"type":57,"value":1453}," only as a last-resort prerequisite after user confirmation.",{"type":48,"tag":170,"props":1455,"children":1457},{"id":1456},"step-4-update-memory-bank",[1458],{"type":57,"value":1459},"Step 4 — Update memory bank",{"type":48,"tag":49,"props":1461,"children":1462},{},[1463,1464,1469,1471,1477,1479,1485],{"type":57,"value":393},{"type":48,"tag":80,"props":1465,"children":1467},{"className":1466},[],[1468],{"type":57,"value":186},{"type":57,"value":1470}," exists, increment the version (",{"type":48,"tag":80,"props":1472,"children":1474},{"className":1473},[],[1475],{"type":57,"value":1476},"v1.0.0",{"type":57,"value":1478}," → ",{"type":48,"tag":80,"props":1480,"children":1482},{"className":1481},[],[1483],{"type":57,"value":1484},"v1.1.0",{"type":57,"value":1486},") and update:",{"type":48,"tag":101,"props":1488,"children":1489},{},[1490,1494,1499,1504],{"type":48,"tag":105,"props":1491,"children":1492},{},[1493],{"type":57,"value":206},{"type":48,"tag":105,"props":1495,"children":1496},{},[1497],{"type":57,"value":1498},"Last deployed timestamp",{"type":48,"tag":105,"props":1500,"children":1501},{},[1502],{"type":57,"value":1503},"App URL (if captured)",{"type":48,"tag":105,"props":1505,"children":1506},{},[1507,1509,1514,1516],{"type":57,"value":1508},"Append a row to the ",{"type":48,"tag":53,"props":1510,"children":1511},{},[1512],{"type":57,"value":1513},"Build history",{"type":57,"value":1515}," section: ",{"type":48,"tag":80,"props":1517,"children":1519},{"className":1518},[],[1520],{"type":57,"value":1521},"| v1.1.0 | \u003Ctimestamp> | deploy | success |",{"type":48,"tag":49,"props":1523,"children":1524},{},[1525],{"type":57,"value":1526},"Print the summary card:",{"type":48,"tag":339,"props":1528,"children":1531},{"className":1529,"code":1530,"language":57},[834],"✅ Deploy — \u003Cproject-name>\n─────────────────────────────────────────────\nVersion       : \u003Cnew-version>\nEnvironment   : \u003Cenv-name>\nApp URL       : \u003Curl or \"see make.powerapps.com\">\nBundle path   : dist\u002F\n\nLocal dev:    npm run dev          (= expo start, QR for native dev clients)\nRe-deploy:    \u002Fdeploy\nList conns:   \u002Flist-connections\n─────────────────────────────────────────────\n",[1532],{"type":48,"tag":80,"props":1533,"children":1534},{"__ignoreMap":344},[1535],{"type":57,"value":1530},{"type":48,"tag":166,"props":1537,"children":1538},{},[],{"type":48,"tag":94,"props":1540,"children":1542},{"id":1541},"local-dev-out-of-scope-for-this-skill-for-reference-only",[1543],{"type":57,"value":1544},"Local dev (out of scope for this skill — for reference only)",{"type":48,"tag":49,"props":1546,"children":1547},{},[1548,1550,1555],{"type":57,"value":1549},"When the user wants to iterate locally, they run ",{"type":48,"tag":53,"props":1551,"children":1552},{},[1553],{"type":57,"value":1554},"directly",{"type":57,"value":830},{"type":48,"tag":339,"props":1557,"children":1559},{"className":341,"code":1558,"language":343,"meta":344,"style":344},"npm run dev          # = expo start  →  Metro + QR for native dev clients\n",[1560],{"type":48,"tag":80,"props":1561,"children":1562},{"__ignoreMap":344},[1563],{"type":48,"tag":350,"props":1564,"children":1565},{"class":352,"line":353},[1566,1570,1574,1579],{"type":48,"tag":350,"props":1567,"children":1568},{"style":357},[1569],{"type":57,"value":360},{"type":48,"tag":350,"props":1571,"children":1572},{"style":363},[1573],{"type":57,"value":366},{"type":48,"tag":350,"props":1575,"children":1576},{"style":363},[1577],{"type":57,"value":1578}," dev",{"type":48,"tag":350,"props":1580,"children":1582},{"style":1581},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1583],{"type":57,"value":1584},"          # = expo start  →  Metro + QR for native dev clients\n",{"type":48,"tag":49,"props":1586,"children":1587},{},[1588],{"type":57,"value":1589},"This launches Metro and prints a QR code. They can:",{"type":48,"tag":101,"props":1591,"children":1592},{},[1593,1598],{"type":48,"tag":105,"props":1594,"children":1595},{},[1596],{"type":57,"value":1597},"Scan the QR with the installed native dev client",{"type":48,"tag":105,"props":1599,"children":1600},{},[1601,1603,1609,1611,1617,1619,1625],{"type":57,"value":1602},"Press ",{"type":48,"tag":80,"props":1604,"children":1606},{"className":1605},[],[1607],{"type":57,"value":1608},"r",{"type":57,"value":1610}," to reload, ",{"type":48,"tag":80,"props":1612,"children":1614},{"className":1613},[],[1615],{"type":57,"value":1616},"j",{"type":57,"value":1618}," to open the debugger, ",{"type":48,"tag":80,"props":1620,"children":1622},{"className":1621},[],[1623],{"type":57,"value":1624},"m",{"type":57,"value":1626}," for the dev menu",{"type":48,"tag":49,"props":1628,"children":1629},{},[1630,1632,1638],{"type":57,"value":1631},"Runtime debugging for this plugin uses ",{"type":48,"tag":80,"props":1633,"children":1635},{"className":1634},[],[1636],{"type":57,"value":1637},"\u002Fdebug-app",{"type":57,"value":1639}," with native dev-client sessions and Metro terminal logs. Do not use React Native Web, browser automation, direct Metro\u002Flocalhost HTTP probes, or screen-by-screen runtime checks.",{"type":48,"tag":49,"props":1641,"children":1642},{},[1643],{"type":57,"value":1644},"If they want to compile a native binary locally, they run the platform-specific native command directly. Local native compile and manual device testing are user-owned and are not deployment gates for this skill.",{"type":48,"tag":94,"props":1646,"children":1648},{"id":1647},"reference",[1649],{"type":57,"value":1650},"Reference",{"type":48,"tag":101,"props":1652,"children":1653},{},[1654,1669,1684],{"type":48,"tag":105,"props":1655,"children":1656},{},[1657,1667],{"type":48,"tag":60,"props":1658,"children":1660},{"href":1659},"$%7BCLAUDE_SKILL_DIR%7D\u002F..\u002F..\u002Fshared\u002Fversion-check.md",[1661],{"type":48,"tag":80,"props":1662,"children":1664},{"className":1663},[],[1665],{"type":57,"value":1666},"shared\u002Fversion-check.md",{"type":57,"value":1668}," — min versions (only Always-required tier matters here)",{"type":48,"tag":105,"props":1670,"children":1671},{},[1672,1682],{"type":48,"tag":60,"props":1673,"children":1675},{"href":1674},"$%7BCLAUDE_SKILL_DIR%7D\u002F..\u002F..\u002Fshared\u002Fmemory-bank.md",[1676],{"type":48,"tag":80,"props":1677,"children":1679},{"className":1678},[],[1680],{"type":57,"value":1681},"shared\u002Fmemory-bank.md",{"type":57,"value":1683}," — Build history schema",{"type":48,"tag":105,"props":1685,"children":1686},{},[1687,1696],{"type":48,"tag":60,"props":1688,"children":1689},{"href":618},[1690],{"type":48,"tag":80,"props":1691,"children":1693},{"className":1692},[],[1694],{"type":57,"value":1695},"shared\u002Freferences\u002Foffline-profile-reconciliation.md",{"type":57,"value":1697}," — Step 2.5 offline coverage gate",{"type":48,"tag":1699,"props":1700,"children":1701},"style",{},[1702],{"type":57,"value":1703},"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":1705,"total":1800},[1706,1717,1730,1740,1755,1768,1784],{"slug":1707,"name":1707,"fn":1708,"description":1709,"org":1710,"tags":1711,"stars":22,"repoUrl":23,"updatedAt":1716},"activate-site","provision and activate Power Pages sites","Activates and provisions a Power Pages website in a Power Platform environment via the Power Platform REST API. Use when the user wants to activate, provision, turn on, or enable a Power Pages website or portal.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1712,1713,1714],{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":1715,"slug":32,"type":15},"Power Pages","2026-04-06T18:34:34.732549",{"slug":1718,"name":1718,"fn":1719,"description":1720,"org":1721,"tags":1722,"stars":22,"repoUrl":23,"updatedAt":1729},"add-connector","add Power Platform connectors to apps","Adds any Power Platform connector to a Power Apps code app. Generic fallback for connectors not covered by a specific skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1723,1726,1727],{"name":1724,"slug":1725,"type":15},"Integrations","integrations",{"name":20,"slug":21,"type":15},{"name":1728,"slug":33,"type":15},"Power Platform","2026-07-31T05:54:47.042251",{"slug":1731,"name":1731,"fn":1732,"description":1733,"org":1734,"tags":1735,"stars":22,"repoUrl":23,"updatedAt":1739},"add-datasource","add data sources to Power Apps","Adds a data source or connector to a Power Apps code app. Asks what the user wants to accomplish and routes to the appropriate specialized skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1736,1737,1738],{"name":1724,"slug":1725,"type":15},{"name":9,"slug":8,"type":15},{"name":20,"slug":21,"type":15},"2026-07-03T16:31:47.822186",{"slug":1741,"name":1741,"fn":1742,"description":1743,"org":1744,"tags":1745,"stars":22,"repoUrl":23,"updatedAt":1754},"add-dataverse","add Dataverse tables to Power Apps","Use when the user wants to add Dataverse tables (existing or new) to a Power Apps mobile app, extend an existing Dataverse table with new columns, or apply an approved data model plan.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1746,1749,1752,1753],{"name":1747,"slug":1748,"type":15},"Data Modeling","data-modeling",{"name":1750,"slug":1751,"type":15},"Dataverse","dataverse",{"name":9,"slug":8,"type":15},{"name":20,"slug":21,"type":15},"2026-07-31T05:54:46.078014",{"slug":1756,"name":1756,"fn":1757,"description":1758,"org":1759,"tags":1760,"stars":22,"repoUrl":23,"updatedAt":1767},"add-excel","integrate Excel Online into Power Apps","Adds Excel Online (Business) connector to a Power Apps code app. Use when reading or writing Excel workbook data from OneDrive or SharePoint.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1761,1764,1765,1766],{"name":1762,"slug":1763,"type":15},"Excel","excel",{"name":1724,"slug":1725,"type":15},{"name":9,"slug":8,"type":15},{"name":20,"slug":21,"type":15},"2026-07-31T05:54:44.030943",{"slug":1769,"name":1769,"fn":1770,"description":1771,"org":1772,"tags":1773,"stars":22,"repoUrl":23,"updatedAt":1783},"add-mcscopilot","add Copilot Studio connectors to Power Apps","Adds Microsoft Copilot Studio connector to a Power Apps code app. Use when invoking Copilot Studio agents, sending prompts to agents, or integrating agent responses.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1774,1777,1780,1781,1782],{"name":1775,"slug":1776,"type":15},"Agents","agents",{"name":1778,"slug":1779,"type":15},"Copilot Studio","copilot-studio",{"name":1724,"slug":1725,"type":15},{"name":9,"slug":8,"type":15},{"name":20,"slug":21,"type":15},"2026-07-31T05:54:39.025597",{"slug":1785,"name":1785,"fn":1786,"description":1787,"org":1788,"tags":1789,"stars":22,"repoUrl":23,"updatedAt":1799},"add-sample-data","populate Power Pages tables with sample data","Populates Dataverse tables with sample records for testing and demoing a Power Pages site. Use when the user wants to add sample data, seed data, generate test records, or insert demo data into their tables.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1790,1793,1794,1795,1796],{"name":1791,"slug":1792,"type":15},"Database","database",{"name":1750,"slug":1751,"type":15},{"name":9,"slug":8,"type":15},{"name":1715,"slug":32,"type":15},{"name":1797,"slug":1798,"type":15},"Testing","testing","2026-04-06T18:34:41.141155",26,{"items":1802,"total":1993},[1803,1825,1844,1865,1880,1897,1908,1921,1936,1951,1968,1981],{"slug":1804,"name":1804,"fn":1805,"description":1806,"org":1807,"tags":1808,"stars":1822,"repoUrl":1823,"updatedAt":1824},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1809,1812,1815,1816,1819],{"name":1810,"slug":1811,"type":15},"Engineering","engineering",{"name":1813,"slug":1814,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":1817,"slug":1818,"type":15},"Project Management","project-management",{"name":1820,"slug":1821,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":1826,"name":1826,"fn":1827,"description":1828,"org":1829,"tags":1830,"stars":1841,"repoUrl":1842,"updatedAt":1843},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1831,1834,1835,1838],{"name":1832,"slug":1833,"type":15},".NET","net",{"name":1775,"slug":1776,"type":15},{"name":1836,"slug":1837,"type":15},"Azure","azure",{"name":1839,"slug":1840,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":1845,"name":1845,"fn":1846,"description":1847,"org":1848,"tags":1849,"stars":1841,"repoUrl":1842,"updatedAt":1864},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1850,1853,1854,1857,1860,1861],{"name":1851,"slug":1852,"type":15},"Analytics","analytics",{"name":1836,"slug":1837,"type":15},{"name":1855,"slug":1856,"type":15},"Data Analysis","data-analysis",{"name":1858,"slug":1859,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":1862,"slug":1863,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":1866,"name":1866,"fn":1867,"description":1868,"org":1869,"tags":1870,"stars":1841,"repoUrl":1842,"updatedAt":1879},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1871,1874,1875,1876],{"name":1872,"slug":1873,"type":15},"AI Infrastructure","ai-infrastructure",{"name":1836,"slug":1837,"type":15},{"name":1858,"slug":1859,"type":15},{"name":1877,"slug":1878,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":1881,"name":1881,"fn":1882,"description":1883,"org":1884,"tags":1885,"stars":1841,"repoUrl":1842,"updatedAt":1896},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1886,1887,1890,1891,1892,1895],{"name":1836,"slug":1837,"type":15},{"name":1888,"slug":1889,"type":15},"Compliance","compliance",{"name":1839,"slug":1840,"type":15},{"name":9,"slug":8,"type":15},{"name":1893,"slug":1894,"type":15},"Python","python",{"name":1877,"slug":1878,"type":15},"2026-07-18T05:14:23.017504",{"slug":1898,"name":1898,"fn":1899,"description":1900,"org":1901,"tags":1902,"stars":1841,"repoUrl":1842,"updatedAt":1907},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1903,1904,1905,1906],{"name":1851,"slug":1852,"type":15},{"name":1836,"slug":1837,"type":15},{"name":1839,"slug":1840,"type":15},{"name":1893,"slug":1894,"type":15},"2026-07-31T05:54:29.068751",{"slug":1909,"name":1909,"fn":1910,"description":1911,"org":1912,"tags":1913,"stars":1841,"repoUrl":1842,"updatedAt":1920},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1914,1917,1918,1919],{"name":1915,"slug":1916,"type":15},"API Development","api-development",{"name":1836,"slug":1837,"type":15},{"name":9,"slug":8,"type":15},{"name":1893,"slug":1894,"type":15},"2026-07-18T05:14:16.988376",{"slug":1922,"name":1922,"fn":1923,"description":1924,"org":1925,"tags":1926,"stars":1841,"repoUrl":1842,"updatedAt":1935},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1927,1928,1931,1934],{"name":1836,"slug":1837,"type":15},{"name":1929,"slug":1930,"type":15},"Computer Vision","computer-vision",{"name":1932,"slug":1933,"type":15},"Images","images",{"name":1893,"slug":1894,"type":15},"2026-07-18T05:14:18.007737",{"slug":1937,"name":1937,"fn":1938,"description":1939,"org":1940,"tags":1941,"stars":1841,"repoUrl":1842,"updatedAt":1950},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1942,1943,1946,1949],{"name":1836,"slug":1837,"type":15},{"name":1944,"slug":1945,"type":15},"Configuration","configuration",{"name":1947,"slug":1948,"type":15},"Feature Flags","feature-flags",{"name":1858,"slug":1859,"type":15},"2026-07-03T16:32:01.278468",{"slug":1952,"name":1952,"fn":1953,"description":1954,"org":1955,"tags":1956,"stars":1841,"repoUrl":1842,"updatedAt":1967},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1957,1960,1961,1964],{"name":1958,"slug":1959,"type":15},"Cosmos DB","cosmos-db",{"name":1791,"slug":1792,"type":15},{"name":1962,"slug":1963,"type":15},"NoSQL","nosql",{"name":1965,"slug":1966,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":1969,"name":1969,"fn":1953,"description":1970,"org":1971,"tags":1972,"stars":1841,"repoUrl":1842,"updatedAt":1980},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1973,1974,1975,1976,1977],{"name":1958,"slug":1959,"type":15},{"name":1791,"slug":1792,"type":15},{"name":9,"slug":8,"type":15},{"name":1962,"slug":1963,"type":15},{"name":1978,"slug":1979,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":1982,"name":1982,"fn":1983,"description":1984,"org":1985,"tags":1986,"stars":1841,"repoUrl":1842,"updatedAt":1992},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1987,1988,1989,1990,1991],{"name":1836,"slug":1837,"type":15},{"name":1958,"slug":1959,"type":15},{"name":1791,"slug":1792,"type":15},{"name":1858,"slug":1859,"type":15},{"name":1962,"slug":1963,"type":15},"2026-05-13T06:14:17.582229",267]