[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-genpage":3,"mdc--zcmref-key":45,"related-org-microsoft-genpage":4857,"related-repo-microsoft-genpage":5052},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":28,"repoUrl":29,"updatedAt":30,"license":31,"forks":32,"topics":33,"repo":40,"sourceUrl":43,"mdContent":44},"genpage","build Power Apps generative pages","Creates, updates, and deploys Power Apps generative pages for model-driven apps using React v17, TypeScript, and Fluent UI V9. Orchestrates specialist agents for planning, entity creation, and code generation. Use it when user asks to build, retrieve, or update a page in an existing Microsoft Power Apps model-driven app. Use it when user mentions \"generative page\", \"page in a model-driven\", or \"genux\".",{"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,22,25],{"name":13,"slug":14,"type":15},"React","react","tag",{"name":17,"slug":18,"type":15},"TypeScript","typescript",{"name":20,"slug":21,"type":15},"Microsoft 365","microsoft-365",{"name":23,"slug":24,"type":15},"Fluent UI","fluent-ui",{"name":26,"slug":27,"type":15},"Power Apps","power-apps",564,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fpower-platform-skills","2026-07-28T05:34:54.426316",null,114,[34,35,36,37,27,38,39],"claude-code-plugin","claude-code-skills","code-apps","github-copilot-plugin","power-pages","power-platform",{"repoUrl":29,"stars":28,"forks":32,"topics":41,"description":42},[34,35,36,37,27,38,39],"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\u002Fmodel-apps\u002Fskills\u002Fgenpage","---\nname: genpage\nversion: 2.3.0\ndescription: Creates, updates, and deploys Power Apps generative pages for model-driven apps using React v17, TypeScript, and Fluent UI V9. Orchestrates specialist agents for planning, entity creation, and code generation. Use it when user asks to build, retrieve, or update a page in an existing Microsoft Power Apps model-driven app. Use it when user mentions \"generative page\", \"page in a model-driven\", or \"genux\".\nauthor: Microsoft Corporation\nargument-hint: \"\u003Cpage description> | edit\"\nuser-invocable: true\nmodel: sonnet\nallowed-tools: Read, Write, Edit, Bash, Glob, Grep, WebFetch, Task, AskUserQuestion, TaskCreate, TaskUpdate, TaskList\n---\n\n# Power Apps Generative Pages Builder\n\n**Triggers:** genpage, generative page, create genpage, genux page, build genux, power apps page, model page\n**Keywords:** power apps, generative pages, genux, model-driven, dataverse, react, fluent ui, pac cli\n**Aliases:** \u002Fgenpage, \u002Fgen-page, \u002Fgenux\n\n## Overview\n\nThis skill orchestrates four specialist agents across the create and edit flows:\n\n**Create flow:**\n1. **`genpage-planner`** — validates prerequisites, gathers requirements, detects what\n   entities and apps exist, presents a plan for approval, writes `genpage-plan.md`\n2. **`genpage-entity-builder`** — creates Dataverse entities (tables, columns,\n   relationships, choices, sample data) via the plugin's Node.js Web API scripts\n3. **`genpage-page-builder`** — generates one complete `.tsx` file per page; multiple\n   builders run in parallel for multi-page requests\n\n**Edit flow:**\n\n4. **`genpage-edit-planner`** — reads the downloaded page artifacts, gathers change\n   requirements, presents an edit plan, writes `genpage-edit-plan.md`\n\nYou (the skill) coordinate the agents and own app creation, RuntimeTypes generation,\ndeployment, browser verification, and the inline application of planned edits.\n\n## References\n\n- **Code generation rules**: [rules.md](..\u002F..\u002Freferences\u002Frules.md)\n- **Troubleshooting**: [troubleshooting.md](..\u002F..\u002Freferences\u002Ftroubleshooting.md)\n- **Sample pages**: [samples\u002F](..\u002F..\u002Fsamples\u002F)\n\n## Development Standards\n\n- **React 17 + TypeScript** — all generated code\n- **Fluent UI V9** — `@fluentui\u002Freact-components` exclusively (DatePicker from `@fluentui\u002Freact-datepicker-compat`, TimePicker from `@fluentui\u002Freact-timepicker-compat`)\n- **Single file architecture** — all components, utilities, styles in one `.tsx` file\n- **No external libraries** — only React, Fluent UI V9, approved Fluent icons, D3.js for charts\n- **Type-safe DataAPI** — use RuntimeTypes when Dataverse entities are involved\n- **Responsive design** — flexbox, relative units, never `100vh`\u002F`100vw`\n- **Accessibility** — WCAG AA, ARIA labels, keyboard navigation, semantic HTML\n- **Complete code** — no placeholders, TODOs, or ellipses in final output\n\n---\n\n## Instructions\n\nFollow these phases in order for every `\u002Fgenpage` invocation.\n\n### Phase 0: Create Working Directory\n\nDerive a short folder name from the user's requirements:\n\n1. Extract the page name or a 2-4 word summary from `$ARGUMENTS`\n2. Convert to kebab-case (e.g., \"Candidate Tracker\" → `candidate-tracker`)\n3. Create the folder: `mkdir -p \u003Cfolder-name>`\n4. Resolve its absolute path — this is the **working directory** for all subsequent phases\n\n### Phase 0.5: Initialize Local-Dev Manifest\n\nWrite `package.json` and `genpage.d.ts` into the working directory so the\ndeveloper can `npm install` and get IntelliSense, type-checking, and \"go to\ndefinition\" in their editor. Versions come from\n`references\u002Fsupported-dependencies.md` (single source of truth:\n`scripts\u002Flib\u002Fsupported-dependencies.js`).\n\n```bash\nnode \"${PLUGIN_ROOT}\u002Fscripts\u002Fgenerate-page-manifest.js\" \u003Cworking-dir> \u003Ckebab-slug>\n```\n\n- `\u003Ckebab-slug>` is the same slug used for the working directory.\n- Add `--features charts,datepicker,timepicker` (comma-separated) only when\n  the requirements clearly call for them; otherwise omit and keep the\n  manifest lean.\n- The script is **idempotent** — it skips files that already exist. Pass\n  `--force` to overwrite (used in regeneration flows when versions drift).\n- Output is a JSON summary on stdout; pipe to stderr for visibility but do\n  not block the workflow if the script returns non-zero — the manifest is a\n  dev-ergonomics aid, not part of the deployed artifact.\n\n### Phase 1: Plan\n\n> **⚠️ CRITICAL — you MUST invoke `genpage-planner` via the `Task` tool. You MUST\n> NOT inline the planner's questions yourself with `AskUserQuestion`.**\n>\n> The planner is not optional or skippable. It runs:\n> 1. Prerequisite validation (`node --version`, `pac help` version >= 2.7.0)\n> 2. Auth verification (`pac auth list`, environment selection)\n> 3. The structured \"Create new \u002F Edit existing\" question (via `AskUserQuestion`\n>    inside the planner subagent, not here)\n> 4. Language detection (`pac model list-languages`) — only on new-page path\n> 5. Entity existence detection (`pac model list-tables --search`)\n> 6. App detection (`pac model list`) with proper selection prompts\n> 7. Plan-mode presentation and approval\n> 8. Writes `genpage-plan.md` to the working directory\n>\n> Reasons to **NEVER** ask \"new or edit?\" yourself before invoking the planner:\n> - You would skip prereq + auth (the planner is the only thing that runs them)\n> - The structured question gives the user labeled options; an inline free-text\n>   prompt forces them to guess\n> - The planner returns `{ \"action\": \"edit\" }` as a contract — your inline\n>   question can't produce that signal cleanly\n>\n> Even if `$ARGUMENTS` looks like it tells you the intent, **still invoke the\n> planner**. Pass the intent in the prompt — the planner uses it to skip its\n> own Question 1 if appropriate, but the prereq\u002Fauth\u002Fenv steps still run.\n\n#### Steps\n\n1. Invoke `genpage-planner` via `Task` with the prompt below.\n2. Wait for it to finish (it returns a summary).\n3. If the return includes `{ \"action\": \"edit\" }`, jump to the **Edit Flow** section.\n4. Otherwise the planner has written `genpage-plan.md`. Proceed to Phase 2.\n\n#### Invocation prompt\n\nPass a prompt that includes:\n\n- The user's requirements: `$ARGUMENTS`\n- The working directory (absolute path from Phase 0)\n- The plugin root path: `${PLUGIN_ROOT}`\n\nExample:\n\n> You are the genpage-planner agent. Plan generative page(s) for the following requirements:\n>\n> [paste $ARGUMENTS here verbatim, or \"no arguments provided — gather from user\"]\n>\n> Working directory: [absolute path from Phase 0]\n> Plugin root: ${PLUGIN_ROOT}\n>\n> Follow the instructions in your agent file. Validate prereqs, confirm auth, ask\n> the new\u002Fedit question via AskUserQuestion, then proceed accordingly. Write\n> genpage-plan.md to the working directory if creating. Return the page list,\n> entity status, app selection, and any `{ \"action\": \"edit\" }` signal when complete.\n\n### Phase 2: Create Entities (Conditional)\n\nRead `genpage-plan.md` from the working directory. Check the **Entity Creation Required**\nsection.\n\n**If the section literally says \"No entity creation required — all entities already exist\":**\nSkip to Phase 3.\n\n**If entities need creating:**\n\n#### 2a. Pre-flight: az + pac + Dataverse\n\nEntity creation runs through the plugin's Node.js Web API scripts using `az` for\nauth, and the `az` and `pac` identities should normally match. Run the\nconsolidated pre-flight:\n\n```bash\nnode \"${PLUGIN_ROOT}\u002Fscripts\u002Fcheck-auth.js\"\n```\n\nIt returns a single JSON object:\n\n```json\n{\n  \"ok\": true | false,\n  \"blocker\": null | \"az_missing\" | \"az_not_logged_in\" | \"pac_not_logged_in\"\n                 | \"no_env_url\" | \"whoami_403\" | \"whoami_401\" | \"whoami_error\",\n  \"message\": \"human-readable next step\",\n  \"azUser\": \"...\", \"pacUser\": \"...\", \"envUrl\": \"...\",\n  \"identitiesMatch\": true | false,\n  \"whoAmI\": { \"ok\": true, \"userId\": \"...\", \"organizationId\": \"...\" }\n}\n```\n\n- **`ok: true` and `identitiesMatch: true`** → proceed to 2b.\n- **`ok: true` and `identitiesMatch: false`** → proceed to 2b but surface the\n  `message` to the user as an inline warning (\"az is X, pac is Y — WhoAmI works\n  for now, but if entity creation later returns 403, run the suggested\n  `az login --username` to align them\").\n- **`ok: false`** → show the `message` field to the user verbatim and\n  **stop the workflow**. The script already includes a fix-it command for every\n  blocker (run `az login`, etc.).\n\nCapture `envUrl` from the result — Phase 2b passes it to the entity-builder.\n\n#### 2b. Invoke entity-builder\n\nInvoke the `genpage-entity-builder` agent via the `Task` tool. Pass in the prompt:\n- Path to `genpage-plan.md`\n- Working directory (absolute path)\n- Plugin root: `${PLUGIN_ROOT}`\n- Dataverse env URL (from `pac org who`)\n\nThe entity-builder reads `Solution` and `Publisher Prefix` directly from the\nplan's `## Environment` — no need to re-thread them here.\n\nWait for completion. The builder writes a transactional log at\n`\u003Cworking-dir>\u002Fentity-creation-log.md` for recovery on failure.\n\n### Phase 3: App Creation\u002FSelection\n\nRead `genpage-plan.md` for the app decision and the `Solution` line in\n`## Environment`.\n\n**If \"create new\":**\n\n```powershell\npac model create --name \"App Name\" --solution \"\u003CSolution unique name>\" --publish\n```\n\n**`--solution` is mandatory.** `pac model create` errors out with\n`\"The given solution name is not valid: ()\"` if you omit it — its claimed\n\"active solution\" fallback does not work in practice.\n\n**`--publish` is mandatory.** Without it the new appmodule stays in draft and\nthe genux runtime URL errors with \"app not published\".\n\n- Use the plan's `Solution` value verbatim. The planner always writes one\n  (default fallback is literally `Default`).\n- If the plan is somehow missing `Solution`, pass `--solution Default` —\n  every Dataverse env has a built-in \"Default Solution\" by that unique name.\n\nStore the new app-id for Phase 6.\n\n**If existing app-id:** Use it directly. `pac model create` is not called, so\nthe `Solution` line is informational only for this phase.\n\n### Phase 4: Generate RuntimeTypes (Conditional)\n\nIf any page uses Dataverse entities, generate the TypeScript schema:\n\n```powershell\npac model genpage generate-types --data-sources \"entity1,entity2,...\" --output-file \u003Cworking-dir>\u002FRuntimeTypes.ts\n```\n\n> **Windows + Bash**: Always use forward slashes in file paths (e.g., `D:\u002Ftemp\u002FRuntimeTypes.ts`).\n\nAfter generating, read the RuntimeTypes.ts file to verify it generated correctly.\n\n**For mock data pages only:** Skip this phase.\n\n### Phase 4.5: Connector Bindings (Conditional)\n\n**Re-probe the feature gate here — do not rely on the plan content alone.** A plan\nauthored while the flag was ON must not deploy connectors after it is turned OFF:\n\n```powershell\nnode \"${PLUGIN_ROOT}\u002Fscripts\u002Flib\u002Ffeature-flags.js\" connectors\n```\n\n**If it prints `disabled`:** connectors are OFF. Skip this phase entirely — do not\ncreate or pass `connectors.json`, and never add `--connectors` on upload —\n**regardless of what the plan's `## Connector Bindings` section says**. (Backstop:\n`list-connections.js` \u002F `create-connection-reference.js` also fail closed with\nexit 3 if invoked while OFF.)\n\n**If it prints `enabled`:** read the plan's `## Connector Bindings` section and\ntreat it as bindings **only when it contains an actual binding table** (a\n`| Logical Name | …` header with at least one data row). If the section is\n`No connector bindings.`, empty, missing, or malformed, treat the page as having\nno connectors and skip this phase.\n\nWhen there are real bindings, the `genpage-connector-builder` agent already wrote\n`\u003Cworking-dir>\u002Fconnectors.json` during planning — verify it exists and matches the\nplan table. If it is missing, derive it from the plan table as a **bare JSON\narray** (never the `{ \"connectorBindings\": [...] }` object wrapper — that is the\ndeployed page `config.json` shape that `pac` writes):\n\n```json\n[\n  {\n    \"logicalName\": \"new_uxtest_sharepoint\",\n    \"connectorId\": \"\u002Fproviders\u002FMicrosoft.PowerApps\u002Fapis\u002Fshared_sharepointonline\",\n    \"dataset\": \"https:\u002F\u002Fhost.sharepoint.com\u002Fsites\u002Fx\",\n    \"tables\": [\"5709dd6f-c73e-4079-ad23-2334e45e0e13\"],\n    \"tableDisplayNames\": [\"Pet\"]\n  },\n  {\n    \"logicalName\": \"new_uxtest_msnweather\",\n    \"connectorId\": \"\u002Fproviders\u002FMicrosoft.PowerApps\u002Fapis\u002Fshared_msnweather\",\n    \"dataset\": \"\",\n    \"operations\": [\"CurrentWeather\"]\n  }\n]\n```\n\nDo **not** write connection IDs into `connectors.json` — the importing maker\u002Fadmin\nfills env-specific `ConnectionId` values through solution deployment settings.\n### Phase 5: Build Pages (Parallel)\n\nRead `genpage-plan.md` and extract the pages table.\n\n#### 5a. Validate the plan before dispatch\n\nBefore invoking any builders, verify:\n- At least one page exists in the `## Pages` table\n- Every page has a `### [Page Name]` subsection in `## Per-Page Specifications`\n- **All filenames in the `## Pages` table are unique.** If any are duplicated,\n  rewrite the plan appending `-1`, `-2`, etc. before dispatch. Duplicate filenames\n  cause silent last-writer-wins data loss under parallel execution.\n\nSee `${PLUGIN_ROOT}\u002Freferences\u002Fplan-schema.md` for the full contract.\n\n#### 5b. Single-page fast path (skip Task dispatch when N=1)\n\n**If the plan's Pages table contains exactly one row**, do NOT dispatch a Task\nsubagent. Inline the page-builder workflow directly in the orchestrator:\n\n1. Read `${PLUGIN_ROOT}\u002Freferences\u002Frules.md`\n2. Read the sample listed in the plan's `## Relevant Samples`\n3. Only when the plan's `## Connector Bindings` section contains an **actual\n   binding table** (a `| Logical Name | …` header with at least one data row),\n   also read `${PLUGIN_ROOT}\u002Freferences\u002Fconnectors.md`. Treat a\n   `No connector bindings.` sentinel, or an empty\u002Fmissing\u002Fmalformed section, as\n   having no connectors (same contract as Phase 4.5 and genpage-page-builder).\n4. If the plan's Per-Page Specification has `Needs caching: true`, also read\n   `${PLUGIN_ROOT}\u002Freferences\u002Fdata-caching.md`\n5. If the plan's `## Environment` indicates non-English languages, also read\n   `${PLUGIN_ROOT}\u002Freferences\u002Flocalization.md`\n6. Read `genpage-plan.md` (already in working directory) and `RuntimeTypes.ts`\n   if Data mode is dataverse\n7. Write the `.tsx` file to `\u003Cworking-dir>\u002F\u003Cfilename>.tsx` following all rules\n8. After writing, Grep every named import from `@fluentui\u002Freact-icons` against\n   `${PLUGIN_ROOT}\u002Freferences\u002Fverified-icons.txt` (one Grep per name).\n   Rewrite any unverified names with the closest verified alternative; do not\n   load the full icon list into context\n9. Proceed to Phase 6\n\nThis saves ~5-15s of Task overhead and ~3K tokens that would otherwise be\nduplicated in a subagent context.\n\n#### 5c. Multi-page: invoke page-builders in parallel\n\n**If the plan's Pages table contains 2+ rows**, invoke a `genpage-page-builder`\nagent via the `Task` tool per page. **Fire all invocations in a single message**\nfor parallel execution.\n\nFor each page, pass a prompt that includes:\n\n- Page name (e.g., \"Candidate Tracker\")\n- Target file name (e.g., \"candidate-tracker.tsx\")\n- Absolute path to `genpage-plan.md`\n- Data mode (see below) — either a RuntimeTypes path or an explicit mock flag\n- Working directory\n- Plugin root: `${PLUGIN_ROOT}`\n\n**For Dataverse pages**, include the RuntimeTypes line:\n\n> You are the genpage-page-builder agent. Generate the **[Page Name]** page.\n>\n> - Target file: [filename].tsx\n> - Plan document: [absolute path to genpage-plan.md]\n> - Data mode: **dataverse**\n> - RuntimeTypes: [absolute path to RuntimeTypes.ts]\n> - Working directory: [absolute path from Phase 0]\n> - Plugin root: ${PLUGIN_ROOT}\n>\n> Follow the instructions in your agent file. Write [filename].tsx and return your\n> result when done.\n\n**For mock data pages**, omit the RuntimeTypes line and set `Data mode: mock`:\n\n> You are the genpage-page-builder agent. Generate the **[Page Name]** page.\n>\n> - Target file: [filename].tsx\n> - Plan document: [absolute path to genpage-plan.md]\n> - Data mode: **mock**\n> - Working directory: [absolute path from Phase 0]\n> - Plugin root: ${PLUGIN_ROOT}\n>\n> Follow the instructions in your agent file. Write [filename].tsx and return your\n> result when done.\n\nWait for all page-builder tasks to complete before proceeding.\n\n### Phase 6: Deploy\n\nFor each `.tsx` file produced, deploy to Power Apps.\n\nIf Phase 4.5 wrote `\u003Cworking-dir>\u002Fconnectors.json`, first pre-flight the active\nPAC CLI:\n\n```powershell\npac model genpage upload --help\n```\n\nThe help output must contain `--connectors`. If it does not, stop and surface:\n\"connector deploy requires a pac build with `pac model genpage upload\n--connectors` — build from PowerPlatform-Scale-AdminTools or update pac.\" Do\nnot silently drop bindings.\n\nConnector deployment matrix:\n- **Create (new page):** include `--connectors \"\u003Cworking-dir>\u002Fconnectors.json\"`\n  with the first `upload --add-to-sitemap`.\n- **Edit — connectors changed, added, or one removed:** write the full desired\n  binding set to `connectors.json` and include `--connectors` with\n  `upload --page-id \u003Cid>` (full replace).\n- **Edit — no connector change:** omit `--connectors`; pac preserves existing\n  bindings. Never pass a stale or empty file on an unrelated edit.\n- **Delete all connectors:** write `[]` to `connectors.json` and pass\n  `--connectors` so pac clears the page's `connectorBindings`.\n\n**Copy the upload commands below exactly — `--app-id`, `--code-file`, `--prompt`, `--agent-message` are all required and must use these exact flag names.**\n\n**Log the full command verbatim into `workflow-log.md` under a `## Phase 6 — Deploy` section before invoking it.** Including `--prompt` and all other flags. The eval harness greps the log for these tokens — a terse summary like `Command: pac model genpage upload --add-to-sitemap` will fail the `--prompt scoping` assertion. Format:\n\n```markdown\n## Phase 6 — Deploy\n- Command: `pac model genpage upload --app-id \u003Cid> --code-file \u003Cpath> --data-sources '\u003Centities>' --prompt \"\u003Cfull prompt>\" --model \u003Cmodel-id> --name \"\u003Cpage name>\" --agent-message \"\u003Cdescription>\" --add-to-sitemap`\n- Result: page-id = \u003Creturned-id>, status = success\n```\n\nWhen connector bindings are present, the logged command must also include\n`--connectors \"\u003Cworking-dir>\u002Fconnectors.json\"`.\n\n#### `--prompt` semantics\n\n- **First upload** (`--add-to-sitemap`, no `--page-id`): full page description\n  from plan's `## User Requirements`.\n- **Any subsequent upload** (`--page-id`, no `--add-to-sitemap`): delta only —\n  the changes in this upload, written like a commit message, never a\n  re-statement of the original.\n\nApplies in Phase 6 updates, Phase 6.5 PAGEREF re-uploads, Phase 7.5 fix\nre-deploys, and the entire edit flow.\n\n#### For Dataverse entity pages (first upload — create):\n\n```powershell\npac model genpage upload `\n  --app-id \u003Capp-id> `\n  --code-file \u003Cworking-dir>\u002F\u003Cfile>.tsx `\n  --name \"Page Display Name\" `\n  --data-sources \"entity1,entity2\" `\n  --connectors \"\u003Cworking-dir>\u002Fconnectors.json\" `\n  --prompt \"\u003CFull page description from plan's ## User Requirements>\" `\n  --model \"\u003Ccurrent-model-id>\" `\n  --agent-message \"Description of what was built and any relevant details\" `\n  --add-to-sitemap\n```\n\nOmit the `--connectors` line when Phase 4.5 did not write `connectors.json`.\n\n**For mock data pages:** Same but omit `--data-sources`.\n\n#### For updating existing pages (subsequent upload):\n\nUse `--page-id`, omit `--add-to-sitemap`, and **scope `--prompt` to the delta only**:\n\n```powershell\npac model genpage upload `\n  --app-id \u003Capp-id> `\n  --page-id \u003Cpage-id> `\n  --code-file \u003Cworking-dir>\u002F\u003Cfile>.tsx `\n  --data-sources \"entity1,entity2\" `\n  --connectors \"\u003Cworking-dir>\u002Fconnectors.json\" `\n  --prompt \"\u003COnly the changes in this upload, e.g. 'Add a search box and sort by company name'>\" `\n  --model \"\u003Ccurrent-model-id>\" `\n  --agent-message \"Description of what was changed in this upload\"\n```\n\nFor updates, include the `--connectors` line only when this upload intentionally\nreplaces or clears connector bindings; otherwise omit it to preserve the\ndeployed page's current bindings.\n\n### Phase 6.5: Navigation Fix-Up (Multi-Page Only)\n\nRuns only when the plan has 2+ pages AND any built `.tsx` contains a `PAGEREF_`\ntoken. Page-builders emit `pageId: \"PAGEREF_\u003Cfilename-without-tsx>\"` as a\nplaceholder because GUIDs don't exist until after Phase 6 (see Rule 13). This\nphase substitutes the real GUIDs.\n\n#### Steps\n\n1. Build `filename-without-tsx → page-id` map from Phase 6 upload output.\n2. **Sort keys by length descending** so `PAGEREF_pet` can't match inside\n   `PAGEREF_pet-gallery`.\n3. For each `.tsx` in `\u003Cworking-dir>\u002F*.tsx` (top level only, no recursion),\n   replace every quoted `\"PAGEREF_\u003Cname>\"` (must be in double quotes — that's\n   the format page-builders emit) with `\"\u003Cpage-id-guid>\"`.\n4. If a placeholder doesn't match any map key (typo, missing sibling), stop\n   and report — never silently ship the literal string.\n5. Re-upload only the files that had at least one replacement. Use the update form\n   of `pac model genpage upload` (`--page-id`, no `--add-to-sitemap`). Per the\n   \"`--prompt` semantics\" rule in Phase 6, this is an **update**, so `--prompt`\n   describes the delta only — not the original page description:\n\n   ```powershell\n   pac model genpage upload `\n     --app-id \u003Capp-id> `\n     --page-id \u003Cpage-id-from-Phase-6> `\n     --code-file \u003Cworking-dir>\u002F\u003Cfile>.tsx `\n     --data-sources \"entity1,entity2\" `\n     --prompt \"Resolve cross-page navigation placeholders to real page GUIDs (post-deploy fix-up)\" `\n     --model \"\u003Ccurrent-model-id>\" `\n     --agent-message \"Replaced PAGEREF_\u003Cname> tokens with actual page IDs returned by Phase 6\"\n   ```\n\nPages with no `PAGEREF_` strings need no second upload.\n\n### Phase 6.7: Solution Packaging (ALM, optional)\n\nRuns only when the plan's `## Solution Packaging` has `Package into solution: true`.\nAdds the deployed app, the GenPage(s), and any connection references to the\ntarget solution so they travel cross-environment.\n\n1. Ensure the solution exists (create via `scripts\u002Fcreate-solution.js` if needed).\n2. Add the app + GenPage(s) + connection references (pass the page-id(s) returned\n   by Phase 6 as `--page-ids` — the GenPage is added explicitly, it does NOT travel\n   with the app on its own):\n   `node ${PLUGIN_ROOT}\u002Fscripts\u002Fadd-page-to-solution.js \u003CenvUrl> \u003CsolutionUniqueName> \u003Capp-id> --page-ids \"\u003Cpage-id1,page-id2>\" --connection-refs \"\u003ClogicalName1,logicalName2>\"`\n3. Log the command + result to `workflow-log.md`.\n\nCross-env note (verified 2026-07-10): the app (80) pulls the sitemap (62); the\nGenPage `uxagentproject` (10372) is added explicitly and pulls its\n`uxagentprojectfile` rows (10373, incl. `config.json` with `connectorBindings`);\neach `connectionreference` (10158) is added so bindings resolve. At import the\ndeployer supplies env-specific `ConnectionId` per connection reference via\n`pac solution create-settings` + `pac solution import --settings-file`.\n\n### Phase 7: Verify in Browser (Optional)\n\nAfter successful deployment, ask the user via `AskUserQuestion`:\n> \"Would you like to verify the page(s) in the browser using Playwright?\"\n\nOptions: **Yes, verify in browser** \u002F **Skip verification**\n\n- If the user picks **Skip verification** → jump to Phase 8.\n- If the user picks **Yes** → read `${PLUGIN_ROOT}\u002Fskills\u002Fgenpage\u002Fverify-flow.md`\n  for the full Playwright verification workflow (navigate, structural\n  verification including below-the-fold, interactive testing, screenshots,\n  fix-and-redeploy). The orchestrator only loads that file on demand to keep\n  context lean when verification is skipped.\n\n### Phase 8: Summary\n\nBy Phase 8 the `workflow-log.md` should already contain Phase 0 through Phase 7\nsections written incrementally — the planner writes Phase 1 inside its agent\ncontext, you (the orchestrator) write Phase 0 \u002F 0.5 \u002F 3 \u002F 4 \u002F 6 \u002F 6.5 \u002F 7 as\neach runs, and the entity-builder and page-builder agents append their own\nPhase 2 \u002F 5 sections when invoked.\n\nIn Phase 8, append a final `## Phase 8 — Summary` section to the same file:\n\n```markdown\n## Phase 8 — Summary\n\n| Page | File | Entities | Status |\n|------|------|----------|--------|\n| \u003CName> | \u003Cfile>.tsx | \u003Centities or \"mock data\"> | Deployed |\n\n- App: \u003Cname> (\u003Capp-id>)\n- Entities created: \u003Clist, or \"none\">\n- Browser verification: \u003Cskipped | confirmed | failed: \u003Creason>>\n```\n\nThe log MUST contain command-level entries for every prereq \u002F auth \u002F question \u002F\nupload \u002F script invocation — not just outcome summaries. The eval harness greps\nthe log for tokens like `node --version`, `pac auth list`, `AskUserQuestion`,\n`EnterPlanMode`, `--prompt`, `check-auth.js`, etc. A decision-only log\n(e.g., `Decision: new page` without the underlying `AskUserQuestion`) will\nfail Layer 1 assertions even when the agent's behavior was correct.\n\nThen present a final summary to the user:\n\n```\n## Genpage Complete\n\n| Page | File | Entities | Status |\n|------|------|----------|--------|\n| [Name] | [file].tsx | [entities or \"mock data\"] | Deployed |\n\nApp: [app name] ([app-id])\nScreenshots: [if verification was done]\nNext steps: Share with team, iterate on design, create additional pages\n```\n\n\n---\n\n## Edit Flow\n\nFor the edit flow (triggered when the `genpage-planner` returns\n`{ \"action\": \"edit\" }`), see [edit-flow.md](edit-flow.md) in this folder.\n\nThe edit flow has its own 8 phases (Edit Phase 1-8): discover and select target\napp + page via `pac model list` + `pac model genpage list`, download, generate\nRuntimeTypes if needed, invoke `genpage-edit-planner`, apply the edit inline,\ndeploy, verify, summarize.\n",{"data":46,"body":53},{"name":4,"version":47,"description":6,"author":48,"argument-hint":49,"user-invocable":50,"model":51,"allowed-tools":52},"2.3.0","Microsoft Corporation","\u003Cpage description> | edit",true,"sonnet","Read, Write, Edit, Bash, Glob, Grep, WebFetch, Task, AskUserQuestion, TaskCreate, TaskUpdate, TaskList",{"type":54,"children":55},"root",[56,65,91,98,103,111,173,181,205,210,216,267,273,401,405,411,424,431,436,485,491,536,626,678,684,885,892,950,956,961,990,995,1035,1041,1060,1070,1078,1084,1111,1147,1152,1662,1757,1769,1775,1794,1834,1862,1875,1881,1905,1913,1929,1961,1976,2018,2023,2047,2053,2058,2072,2092,2097,2107,2113,2123,2137,2201,2247,2298,2695,2722,2728,2739,2745,2750,2817,2830,2836,2846,3013,3018,3024,3055,3060,3102,3112,3198,3215,3280,3285,3291,3303,3315,3329,3349,3354,3470,3507,3556,3638,3649,3660,3718,3723,3729,3816,3834,3851,3857,3889,3962,3974,3980,4008,4013,4205,4217,4223,4244,4290,4355,4361,4372,4380,4396,4429,4435,4447,4460,4717,4776,4781,4791,4794,4799,4825,4851],{"type":57,"tag":58,"props":59,"children":61},"element","h1",{"id":60},"power-apps-generative-pages-builder",[62],{"type":63,"value":64},"text","Power Apps Generative Pages Builder",{"type":57,"tag":66,"props":67,"children":68},"p",{},[69,75,77,82,84,89],{"type":57,"tag":70,"props":71,"children":72},"strong",{},[73],{"type":63,"value":74},"Triggers:",{"type":63,"value":76}," genpage, generative page, create genpage, genux page, build genux, power apps page, model page\n",{"type":57,"tag":70,"props":78,"children":79},{},[80],{"type":63,"value":81},"Keywords:",{"type":63,"value":83}," power apps, generative pages, genux, model-driven, dataverse, react, fluent ui, pac cli\n",{"type":57,"tag":70,"props":85,"children":86},{},[87],{"type":63,"value":88},"Aliases:",{"type":63,"value":90}," \u002Fgenpage, \u002Fgen-page, \u002Fgenux",{"type":57,"tag":92,"props":93,"children":95},"h2",{"id":94},"overview",[96],{"type":63,"value":97},"Overview",{"type":57,"tag":66,"props":99,"children":100},{},[101],{"type":63,"value":102},"This skill orchestrates four specialist agents across the create and edit flows:",{"type":57,"tag":66,"props":104,"children":105},{},[106],{"type":57,"tag":70,"props":107,"children":108},{},[109],{"type":63,"value":110},"Create flow:",{"type":57,"tag":112,"props":113,"children":114},"ol",{},[115,137,151],{"type":57,"tag":116,"props":117,"children":118},"li",{},[119,129,131],{"type":57,"tag":70,"props":120,"children":121},{},[122],{"type":57,"tag":123,"props":124,"children":126},"code",{"className":125},[],[127],{"type":63,"value":128},"genpage-planner",{"type":63,"value":130}," — validates prerequisites, gathers requirements, detects what\nentities and apps exist, presents a plan for approval, writes ",{"type":57,"tag":123,"props":132,"children":134},{"className":133},[],[135],{"type":63,"value":136},"genpage-plan.md",{"type":57,"tag":116,"props":138,"children":139},{},[140,149],{"type":57,"tag":70,"props":141,"children":142},{},[143],{"type":57,"tag":123,"props":144,"children":146},{"className":145},[],[147],{"type":63,"value":148},"genpage-entity-builder",{"type":63,"value":150}," — creates Dataverse entities (tables, columns,\nrelationships, choices, sample data) via the plugin's Node.js Web API scripts",{"type":57,"tag":116,"props":152,"children":153},{},[154,163,165,171],{"type":57,"tag":70,"props":155,"children":156},{},[157],{"type":57,"tag":123,"props":158,"children":160},{"className":159},[],[161],{"type":63,"value":162},"genpage-page-builder",{"type":63,"value":164}," — generates one complete ",{"type":57,"tag":123,"props":166,"children":168},{"className":167},[],[169],{"type":63,"value":170},".tsx",{"type":63,"value":172}," file per page; multiple\nbuilders run in parallel for multi-page requests",{"type":57,"tag":66,"props":174,"children":175},{},[176],{"type":57,"tag":70,"props":177,"children":178},{},[179],{"type":63,"value":180},"Edit flow:",{"type":57,"tag":112,"props":182,"children":184},{"start":183},4,[185],{"type":57,"tag":116,"props":186,"children":187},{},[188,197,199],{"type":57,"tag":70,"props":189,"children":190},{},[191],{"type":57,"tag":123,"props":192,"children":194},{"className":193},[],[195],{"type":63,"value":196},"genpage-edit-planner",{"type":63,"value":198}," — reads the downloaded page artifacts, gathers change\nrequirements, presents an edit plan, writes ",{"type":57,"tag":123,"props":200,"children":202},{"className":201},[],[203],{"type":63,"value":204},"genpage-edit-plan.md",{"type":57,"tag":66,"props":206,"children":207},{},[208],{"type":63,"value":209},"You (the skill) coordinate the agents and own app creation, RuntimeTypes generation,\ndeployment, browser verification, and the inline application of planned edits.",{"type":57,"tag":92,"props":211,"children":213},{"id":212},"references",[214],{"type":63,"value":215},"References",{"type":57,"tag":217,"props":218,"children":219},"ul",{},[220,237,252],{"type":57,"tag":116,"props":221,"children":222},{},[223,228,230],{"type":57,"tag":70,"props":224,"children":225},{},[226],{"type":63,"value":227},"Code generation rules",{"type":63,"value":229},": ",{"type":57,"tag":231,"props":232,"children":234},"a",{"href":233},"..\u002F..\u002Freferences\u002Frules.md",[235],{"type":63,"value":236},"rules.md",{"type":57,"tag":116,"props":238,"children":239},{},[240,245,246],{"type":57,"tag":70,"props":241,"children":242},{},[243],{"type":63,"value":244},"Troubleshooting",{"type":63,"value":229},{"type":57,"tag":231,"props":247,"children":249},{"href":248},"..\u002F..\u002Freferences\u002Ftroubleshooting.md",[250],{"type":63,"value":251},"troubleshooting.md",{"type":57,"tag":116,"props":253,"children":254},{},[255,260,261],{"type":57,"tag":70,"props":256,"children":257},{},[258],{"type":63,"value":259},"Sample pages",{"type":63,"value":229},{"type":57,"tag":231,"props":262,"children":264},{"href":263},"..\u002F..\u002Fsamples\u002F",[265],{"type":63,"value":266},"samples\u002F",{"type":57,"tag":92,"props":268,"children":270},{"id":269},"development-standards",[271],{"type":63,"value":272},"Development Standards",{"type":57,"tag":217,"props":274,"children":275},{},[276,286,320,337,347,357,381,391],{"type":57,"tag":116,"props":277,"children":278},{},[279,284],{"type":57,"tag":70,"props":280,"children":281},{},[282],{"type":63,"value":283},"React 17 + TypeScript",{"type":63,"value":285}," — all generated code",{"type":57,"tag":116,"props":287,"children":288},{},[289,294,296,302,304,310,312,318],{"type":57,"tag":70,"props":290,"children":291},{},[292],{"type":63,"value":293},"Fluent UI V9",{"type":63,"value":295}," — ",{"type":57,"tag":123,"props":297,"children":299},{"className":298},[],[300],{"type":63,"value":301},"@fluentui\u002Freact-components",{"type":63,"value":303}," exclusively (DatePicker from ",{"type":57,"tag":123,"props":305,"children":307},{"className":306},[],[308],{"type":63,"value":309},"@fluentui\u002Freact-datepicker-compat",{"type":63,"value":311},", TimePicker from ",{"type":57,"tag":123,"props":313,"children":315},{"className":314},[],[316],{"type":63,"value":317},"@fluentui\u002Freact-timepicker-compat",{"type":63,"value":319},")",{"type":57,"tag":116,"props":321,"children":322},{},[323,328,330,335],{"type":57,"tag":70,"props":324,"children":325},{},[326],{"type":63,"value":327},"Single file architecture",{"type":63,"value":329}," — all components, utilities, styles in one ",{"type":57,"tag":123,"props":331,"children":333},{"className":332},[],[334],{"type":63,"value":170},{"type":63,"value":336}," file",{"type":57,"tag":116,"props":338,"children":339},{},[340,345],{"type":57,"tag":70,"props":341,"children":342},{},[343],{"type":63,"value":344},"No external libraries",{"type":63,"value":346}," — only React, Fluent UI V9, approved Fluent icons, D3.js for charts",{"type":57,"tag":116,"props":348,"children":349},{},[350,355],{"type":57,"tag":70,"props":351,"children":352},{},[353],{"type":63,"value":354},"Type-safe DataAPI",{"type":63,"value":356}," — use RuntimeTypes when Dataverse entities are involved",{"type":57,"tag":116,"props":358,"children":359},{},[360,365,367,373,375],{"type":57,"tag":70,"props":361,"children":362},{},[363],{"type":63,"value":364},"Responsive design",{"type":63,"value":366}," — flexbox, relative units, never ",{"type":57,"tag":123,"props":368,"children":370},{"className":369},[],[371],{"type":63,"value":372},"100vh",{"type":63,"value":374},"\u002F",{"type":57,"tag":123,"props":376,"children":378},{"className":377},[],[379],{"type":63,"value":380},"100vw",{"type":57,"tag":116,"props":382,"children":383},{},[384,389],{"type":57,"tag":70,"props":385,"children":386},{},[387],{"type":63,"value":388},"Accessibility",{"type":63,"value":390}," — WCAG AA, ARIA labels, keyboard navigation, semantic HTML",{"type":57,"tag":116,"props":392,"children":393},{},[394,399],{"type":57,"tag":70,"props":395,"children":396},{},[397],{"type":63,"value":398},"Complete code",{"type":63,"value":400}," — no placeholders, TODOs, or ellipses in final output",{"type":57,"tag":402,"props":403,"children":404},"hr",{},[],{"type":57,"tag":92,"props":406,"children":408},{"id":407},"instructions",[409],{"type":63,"value":410},"Instructions",{"type":57,"tag":66,"props":412,"children":413},{},[414,416,422],{"type":63,"value":415},"Follow these phases in order for every ",{"type":57,"tag":123,"props":417,"children":419},{"className":418},[],[420],{"type":63,"value":421},"\u002Fgenpage",{"type":63,"value":423}," invocation.",{"type":57,"tag":425,"props":426,"children":428},"h3",{"id":427},"phase-0-create-working-directory",[429],{"type":63,"value":430},"Phase 0: Create Working Directory",{"type":57,"tag":66,"props":432,"children":433},{},[434],{"type":63,"value":435},"Derive a short folder name from the user's requirements:",{"type":57,"tag":112,"props":437,"children":438},{},[439,450,462,473],{"type":57,"tag":116,"props":440,"children":441},{},[442,444],{"type":63,"value":443},"Extract the page name or a 2-4 word summary from ",{"type":57,"tag":123,"props":445,"children":447},{"className":446},[],[448],{"type":63,"value":449},"$ARGUMENTS",{"type":57,"tag":116,"props":451,"children":452},{},[453,455,461],{"type":63,"value":454},"Convert to kebab-case (e.g., \"Candidate Tracker\" → ",{"type":57,"tag":123,"props":456,"children":458},{"className":457},[],[459],{"type":63,"value":460},"candidate-tracker",{"type":63,"value":319},{"type":57,"tag":116,"props":463,"children":464},{},[465,467],{"type":63,"value":466},"Create the folder: ",{"type":57,"tag":123,"props":468,"children":470},{"className":469},[],[471],{"type":63,"value":472},"mkdir -p \u003Cfolder-name>",{"type":57,"tag":116,"props":474,"children":475},{},[476,478,483],{"type":63,"value":477},"Resolve its absolute path — this is the ",{"type":57,"tag":70,"props":479,"children":480},{},[481],{"type":63,"value":482},"working directory",{"type":63,"value":484}," for all subsequent phases",{"type":57,"tag":425,"props":486,"children":488},{"id":487},"phase-05-initialize-local-dev-manifest",[489],{"type":63,"value":490},"Phase 0.5: Initialize Local-Dev Manifest",{"type":57,"tag":66,"props":492,"children":493},{},[494,496,502,504,510,512,518,520,526,528,534],{"type":63,"value":495},"Write ",{"type":57,"tag":123,"props":497,"children":499},{"className":498},[],[500],{"type":63,"value":501},"package.json",{"type":63,"value":503}," and ",{"type":57,"tag":123,"props":505,"children":507},{"className":506},[],[508],{"type":63,"value":509},"genpage.d.ts",{"type":63,"value":511}," into the working directory so the\ndeveloper can ",{"type":57,"tag":123,"props":513,"children":515},{"className":514},[],[516],{"type":63,"value":517},"npm install",{"type":63,"value":519}," and get IntelliSense, type-checking, and \"go to\ndefinition\" in their editor. Versions come from\n",{"type":57,"tag":123,"props":521,"children":523},{"className":522},[],[524],{"type":63,"value":525},"references\u002Fsupported-dependencies.md",{"type":63,"value":527}," (single source of truth:\n",{"type":57,"tag":123,"props":529,"children":531},{"className":530},[],[532],{"type":63,"value":533},"scripts\u002Flib\u002Fsupported-dependencies.js",{"type":63,"value":535},").",{"type":57,"tag":537,"props":538,"children":543},"pre",{"className":539,"code":540,"language":541,"meta":542,"style":542},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","node \"${PLUGIN_ROOT}\u002Fscripts\u002Fgenerate-page-manifest.js\" \u003Cworking-dir> \u003Ckebab-slug>\n","bash","",[544],{"type":57,"tag":123,"props":545,"children":546},{"__ignoreMap":542},[547],{"type":57,"tag":548,"props":549,"children":552},"span",{"class":550,"line":551},"line",1,[553,559,565,571,576,582,587,592,597,602,607,611,616,621],{"type":57,"tag":548,"props":554,"children":556},{"style":555},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[557],{"type":63,"value":558},"node",{"type":57,"tag":548,"props":560,"children":562},{"style":561},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[563],{"type":63,"value":564}," \"${",{"type":57,"tag":548,"props":566,"children":568},{"style":567},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[569],{"type":63,"value":570},"PLUGIN_ROOT",{"type":57,"tag":548,"props":572,"children":573},{"style":561},[574],{"type":63,"value":575},"}",{"type":57,"tag":548,"props":577,"children":579},{"style":578},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[580],{"type":63,"value":581},"\u002Fscripts\u002Fgenerate-page-manifest.js",{"type":57,"tag":548,"props":583,"children":584},{"style":561},[585],{"type":63,"value":586},"\"",{"type":57,"tag":548,"props":588,"children":589},{"style":561},[590],{"type":63,"value":591}," \u003C",{"type":57,"tag":548,"props":593,"children":594},{"style":578},[595],{"type":63,"value":596},"working-di",{"type":57,"tag":548,"props":598,"children":599},{"style":567},[600],{"type":63,"value":601},"r",{"type":57,"tag":548,"props":603,"children":604},{"style":561},[605],{"type":63,"value":606},">",{"type":57,"tag":548,"props":608,"children":609},{"style":561},[610],{"type":63,"value":591},{"type":57,"tag":548,"props":612,"children":613},{"style":578},[614],{"type":63,"value":615},"kebab-slu",{"type":57,"tag":548,"props":617,"children":618},{"style":567},[619],{"type":63,"value":620},"g",{"type":57,"tag":548,"props":622,"children":623},{"style":561},[624],{"type":63,"value":625},">\n",{"type":57,"tag":217,"props":627,"children":628},{},[629,640,653,673],{"type":57,"tag":116,"props":630,"children":631},{},[632,638],{"type":57,"tag":123,"props":633,"children":635},{"className":634},[],[636],{"type":63,"value":637},"\u003Ckebab-slug>",{"type":63,"value":639}," is the same slug used for the working directory.",{"type":57,"tag":116,"props":641,"children":642},{},[643,645,651],{"type":63,"value":644},"Add ",{"type":57,"tag":123,"props":646,"children":648},{"className":647},[],[649],{"type":63,"value":650},"--features charts,datepicker,timepicker",{"type":63,"value":652}," (comma-separated) only when\nthe requirements clearly call for them; otherwise omit and keep the\nmanifest lean.",{"type":57,"tag":116,"props":654,"children":655},{},[656,658,663,665,671],{"type":63,"value":657},"The script is ",{"type":57,"tag":70,"props":659,"children":660},{},[661],{"type":63,"value":662},"idempotent",{"type":63,"value":664}," — it skips files that already exist. Pass\n",{"type":57,"tag":123,"props":666,"children":668},{"className":667},[],[669],{"type":63,"value":670},"--force",{"type":63,"value":672}," to overwrite (used in regeneration flows when versions drift).",{"type":57,"tag":116,"props":674,"children":675},{},[676],{"type":63,"value":677},"Output is a JSON summary on stdout; pipe to stderr for visibility but do\nnot block the workflow if the script returns non-zero — the manifest is a\ndev-ergonomics aid, not part of the deployed artifact.",{"type":57,"tag":425,"props":679,"children":681},{"id":680},"phase-1-plan",[682],{"type":63,"value":683},"Phase 1: Plan",{"type":57,"tag":685,"props":686,"children":687},"blockquote",{},[688,719,724,828,840,866],{"type":57,"tag":66,"props":689,"children":690},{},[691],{"type":57,"tag":70,"props":692,"children":693},{},[694,696,701,703,709,711,717],{"type":63,"value":695},"⚠️ CRITICAL — you MUST invoke ",{"type":57,"tag":123,"props":697,"children":699},{"className":698},[],[700],{"type":63,"value":128},{"type":63,"value":702}," via the ",{"type":57,"tag":123,"props":704,"children":706},{"className":705},[],[707],{"type":63,"value":708},"Task",{"type":63,"value":710}," tool. You MUST\nNOT inline the planner's questions yourself with ",{"type":57,"tag":123,"props":712,"children":714},{"className":713},[],[715],{"type":63,"value":716},"AskUserQuestion",{"type":63,"value":718},".",{"type":57,"tag":66,"props":720,"children":721},{},[722],{"type":63,"value":723},"The planner is not optional or skippable. It runs:",{"type":57,"tag":112,"props":725,"children":726},{},[727,748,761,773,786,798,811,816],{"type":57,"tag":116,"props":728,"children":729},{},[730,732,738,740,746],{"type":63,"value":731},"Prerequisite validation (",{"type":57,"tag":123,"props":733,"children":735},{"className":734},[],[736],{"type":63,"value":737},"node --version",{"type":63,"value":739},", ",{"type":57,"tag":123,"props":741,"children":743},{"className":742},[],[744],{"type":63,"value":745},"pac help",{"type":63,"value":747}," version >= 2.7.0)",{"type":57,"tag":116,"props":749,"children":750},{},[751,753,759],{"type":63,"value":752},"Auth verification (",{"type":57,"tag":123,"props":754,"children":756},{"className":755},[],[757],{"type":63,"value":758},"pac auth list",{"type":63,"value":760},", environment selection)",{"type":57,"tag":116,"props":762,"children":763},{},[764,766,771],{"type":63,"value":765},"The structured \"Create new \u002F Edit existing\" question (via ",{"type":57,"tag":123,"props":767,"children":769},{"className":768},[],[770],{"type":63,"value":716},{"type":63,"value":772},"\ninside the planner subagent, not here)",{"type":57,"tag":116,"props":774,"children":775},{},[776,778,784],{"type":63,"value":777},"Language detection (",{"type":57,"tag":123,"props":779,"children":781},{"className":780},[],[782],{"type":63,"value":783},"pac model list-languages",{"type":63,"value":785},") — only on new-page path",{"type":57,"tag":116,"props":787,"children":788},{},[789,791,797],{"type":63,"value":790},"Entity existence detection (",{"type":57,"tag":123,"props":792,"children":794},{"className":793},[],[795],{"type":63,"value":796},"pac model list-tables --search",{"type":63,"value":319},{"type":57,"tag":116,"props":799,"children":800},{},[801,803,809],{"type":63,"value":802},"App detection (",{"type":57,"tag":123,"props":804,"children":806},{"className":805},[],[807],{"type":63,"value":808},"pac model list",{"type":63,"value":810},") with proper selection prompts",{"type":57,"tag":116,"props":812,"children":813},{},[814],{"type":63,"value":815},"Plan-mode presentation and approval",{"type":57,"tag":116,"props":817,"children":818},{},[819,821,826],{"type":63,"value":820},"Writes ",{"type":57,"tag":123,"props":822,"children":824},{"className":823},[],[825],{"type":63,"value":136},{"type":63,"value":827}," to the working directory",{"type":57,"tag":66,"props":829,"children":830},{},[831,833,838],{"type":63,"value":832},"Reasons to ",{"type":57,"tag":70,"props":834,"children":835},{},[836],{"type":63,"value":837},"NEVER",{"type":63,"value":839}," ask \"new or edit?\" yourself before invoking the planner:",{"type":57,"tag":217,"props":841,"children":842},{},[843,848,853],{"type":57,"tag":116,"props":844,"children":845},{},[846],{"type":63,"value":847},"You would skip prereq + auth (the planner is the only thing that runs them)",{"type":57,"tag":116,"props":849,"children":850},{},[851],{"type":63,"value":852},"The structured question gives the user labeled options; an inline free-text\nprompt forces them to guess",{"type":57,"tag":116,"props":854,"children":855},{},[856,858,864],{"type":63,"value":857},"The planner returns ",{"type":57,"tag":123,"props":859,"children":861},{"className":860},[],[862],{"type":63,"value":863},"{ \"action\": \"edit\" }",{"type":63,"value":865}," as a contract — your inline\nquestion can't produce that signal cleanly",{"type":57,"tag":66,"props":867,"children":868},{},[869,871,876,878,883],{"type":63,"value":870},"Even if ",{"type":57,"tag":123,"props":872,"children":874},{"className":873},[],[875],{"type":63,"value":449},{"type":63,"value":877}," looks like it tells you the intent, ",{"type":57,"tag":70,"props":879,"children":880},{},[881],{"type":63,"value":882},"still invoke the\nplanner",{"type":63,"value":884},". Pass the intent in the prompt — the planner uses it to skip its\nown Question 1 if appropriate, but the prereq\u002Fauth\u002Fenv steps still run.",{"type":57,"tag":886,"props":887,"children":889},"h4",{"id":888},"steps",[890],{"type":63,"value":891},"Steps",{"type":57,"tag":112,"props":893,"children":894},{},[895,914,919,938],{"type":57,"tag":116,"props":896,"children":897},{},[898,900,905,907,912],{"type":63,"value":899},"Invoke ",{"type":57,"tag":123,"props":901,"children":903},{"className":902},[],[904],{"type":63,"value":128},{"type":63,"value":906}," via ",{"type":57,"tag":123,"props":908,"children":910},{"className":909},[],[911],{"type":63,"value":708},{"type":63,"value":913}," with the prompt below.",{"type":57,"tag":116,"props":915,"children":916},{},[917],{"type":63,"value":918},"Wait for it to finish (it returns a summary).",{"type":57,"tag":116,"props":920,"children":921},{},[922,924,929,931,936],{"type":63,"value":923},"If the return includes ",{"type":57,"tag":123,"props":925,"children":927},{"className":926},[],[928],{"type":63,"value":863},{"type":63,"value":930},", jump to the ",{"type":57,"tag":70,"props":932,"children":933},{},[934],{"type":63,"value":935},"Edit Flow",{"type":63,"value":937}," section.",{"type":57,"tag":116,"props":939,"children":940},{},[941,943,948],{"type":63,"value":942},"Otherwise the planner has written ",{"type":57,"tag":123,"props":944,"children":946},{"className":945},[],[947],{"type":63,"value":136},{"type":63,"value":949},". Proceed to Phase 2.",{"type":57,"tag":886,"props":951,"children":953},{"id":952},"invocation-prompt",[954],{"type":63,"value":955},"Invocation prompt",{"type":57,"tag":66,"props":957,"children":958},{},[959],{"type":63,"value":960},"Pass a prompt that includes:",{"type":57,"tag":217,"props":962,"children":963},{},[964,974,979],{"type":57,"tag":116,"props":965,"children":966},{},[967,969],{"type":63,"value":968},"The user's requirements: ",{"type":57,"tag":123,"props":970,"children":972},{"className":971},[],[973],{"type":63,"value":449},{"type":57,"tag":116,"props":975,"children":976},{},[977],{"type":63,"value":978},"The working directory (absolute path from Phase 0)",{"type":57,"tag":116,"props":980,"children":981},{},[982,984],{"type":63,"value":983},"The plugin root path: ",{"type":57,"tag":123,"props":985,"children":987},{"className":986},[],[988],{"type":63,"value":989},"${PLUGIN_ROOT}",{"type":57,"tag":66,"props":991,"children":992},{},[993],{"type":63,"value":994},"Example:",{"type":57,"tag":685,"props":996,"children":997},{},[998,1003,1011,1023],{"type":57,"tag":66,"props":999,"children":1000},{},[1001],{"type":63,"value":1002},"You are the genpage-planner agent. Plan generative page(s) for the following requirements:",{"type":57,"tag":66,"props":1004,"children":1005},{},[1006],{"type":57,"tag":548,"props":1007,"children":1008},{},[1009],{"type":63,"value":1010},"paste $ARGUMENTS here verbatim, or \"no arguments provided — gather from user\"",{"type":57,"tag":66,"props":1012,"children":1013},{},[1014,1016,1021],{"type":63,"value":1015},"Working directory: ",{"type":57,"tag":548,"props":1017,"children":1018},{},[1019],{"type":63,"value":1020},"absolute path from Phase 0",{"type":63,"value":1022},"\nPlugin root: ${PLUGIN_ROOT}",{"type":57,"tag":66,"props":1024,"children":1025},{},[1026,1028,1033],{"type":63,"value":1027},"Follow the instructions in your agent file. Validate prereqs, confirm auth, ask\nthe new\u002Fedit question via AskUserQuestion, then proceed accordingly. Write\ngenpage-plan.md to the working directory if creating. Return the page list,\nentity status, app selection, and any ",{"type":57,"tag":123,"props":1029,"children":1031},{"className":1030},[],[1032],{"type":63,"value":863},{"type":63,"value":1034}," signal when complete.",{"type":57,"tag":425,"props":1036,"children":1038},{"id":1037},"phase-2-create-entities-conditional",[1039],{"type":63,"value":1040},"Phase 2: Create Entities (Conditional)",{"type":57,"tag":66,"props":1042,"children":1043},{},[1044,1046,1051,1053,1058],{"type":63,"value":1045},"Read ",{"type":57,"tag":123,"props":1047,"children":1049},{"className":1048},[],[1050],{"type":63,"value":136},{"type":63,"value":1052}," from the working directory. Check the ",{"type":57,"tag":70,"props":1054,"children":1055},{},[1056],{"type":63,"value":1057},"Entity Creation Required",{"type":63,"value":1059},"\nsection.",{"type":57,"tag":66,"props":1061,"children":1062},{},[1063,1068],{"type":57,"tag":70,"props":1064,"children":1065},{},[1066],{"type":63,"value":1067},"If the section literally says \"No entity creation required — all entities already exist\":",{"type":63,"value":1069},"\nSkip to Phase 3.",{"type":57,"tag":66,"props":1071,"children":1072},{},[1073],{"type":57,"tag":70,"props":1074,"children":1075},{},[1076],{"type":63,"value":1077},"If entities need creating:",{"type":57,"tag":886,"props":1079,"children":1081},{"id":1080},"_2a-pre-flight-az-pac-dataverse",[1082],{"type":63,"value":1083},"2a. Pre-flight: az + pac + Dataverse",{"type":57,"tag":66,"props":1085,"children":1086},{},[1087,1089,1095,1097,1102,1103,1109],{"type":63,"value":1088},"Entity creation runs through the plugin's Node.js Web API scripts using ",{"type":57,"tag":123,"props":1090,"children":1092},{"className":1091},[],[1093],{"type":63,"value":1094},"az",{"type":63,"value":1096}," for\nauth, and the ",{"type":57,"tag":123,"props":1098,"children":1100},{"className":1099},[],[1101],{"type":63,"value":1094},{"type":63,"value":503},{"type":57,"tag":123,"props":1104,"children":1106},{"className":1105},[],[1107],{"type":63,"value":1108},"pac",{"type":63,"value":1110}," identities should normally match. Run the\nconsolidated pre-flight:",{"type":57,"tag":537,"props":1112,"children":1114},{"className":539,"code":1113,"language":541,"meta":542,"style":542},"node \"${PLUGIN_ROOT}\u002Fscripts\u002Fcheck-auth.js\"\n",[1115],{"type":57,"tag":123,"props":1116,"children":1117},{"__ignoreMap":542},[1118],{"type":57,"tag":548,"props":1119,"children":1120},{"class":550,"line":551},[1121,1125,1129,1133,1137,1142],{"type":57,"tag":548,"props":1122,"children":1123},{"style":555},[1124],{"type":63,"value":558},{"type":57,"tag":548,"props":1126,"children":1127},{"style":561},[1128],{"type":63,"value":564},{"type":57,"tag":548,"props":1130,"children":1131},{"style":567},[1132],{"type":63,"value":570},{"type":57,"tag":548,"props":1134,"children":1135},{"style":561},[1136],{"type":63,"value":575},{"type":57,"tag":548,"props":1138,"children":1139},{"style":578},[1140],{"type":63,"value":1141},"\u002Fscripts\u002Fcheck-auth.js",{"type":57,"tag":548,"props":1143,"children":1144},{"style":561},[1145],{"type":63,"value":1146},"\"\n",{"type":57,"tag":66,"props":1148,"children":1149},{},[1150],{"type":63,"value":1151},"It returns a single JSON object:",{"type":57,"tag":537,"props":1153,"children":1157},{"className":1154,"code":1155,"language":1156,"meta":542,"style":542},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"ok\": true | false,\n  \"blocker\": null | \"az_missing\" | \"az_not_logged_in\" | \"pac_not_logged_in\"\n                 | \"no_env_url\" | \"whoami_403\" | \"whoami_401\" | \"whoami_error\",\n  \"message\": \"human-readable next step\",\n  \"azUser\": \"...\", \"pacUser\": \"...\", \"envUrl\": \"...\",\n  \"identitiesMatch\": true | false,\n  \"whoAmI\": { \"ok\": true, \"userId\": \"...\", \"organizationId\": \"...\" }\n}\n","json",[1158],{"type":57,"tag":123,"props":1159,"children":1160},{"__ignoreMap":542},[1161,1169,1208,1285,1362,1401,1506,1539,1653],{"type":57,"tag":548,"props":1162,"children":1163},{"class":550,"line":551},[1164],{"type":57,"tag":548,"props":1165,"children":1166},{"style":561},[1167],{"type":63,"value":1168},"{\n",{"type":57,"tag":548,"props":1170,"children":1172},{"class":550,"line":1171},2,[1173,1178,1184,1188,1193,1198,1203],{"type":57,"tag":548,"props":1174,"children":1175},{"style":561},[1176],{"type":63,"value":1177},"  \"",{"type":57,"tag":548,"props":1179,"children":1181},{"style":1180},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1182],{"type":63,"value":1183},"ok",{"type":57,"tag":548,"props":1185,"children":1186},{"style":561},[1187],{"type":63,"value":586},{"type":57,"tag":548,"props":1189,"children":1190},{"style":561},[1191],{"type":63,"value":1192},":",{"type":57,"tag":548,"props":1194,"children":1195},{"style":561},[1196],{"type":63,"value":1197}," true",{"type":57,"tag":548,"props":1199,"children":1200},{"style":567},[1201],{"type":63,"value":1202}," | ",{"type":57,"tag":548,"props":1204,"children":1205},{"style":561},[1206],{"type":63,"value":1207},"false,\n",{"type":57,"tag":548,"props":1209,"children":1211},{"class":550,"line":1210},3,[1212,1216,1221,1225,1229,1234,1238,1242,1247,1251,1255,1259,1264,1268,1272,1276,1281],{"type":57,"tag":548,"props":1213,"children":1214},{"style":561},[1215],{"type":63,"value":1177},{"type":57,"tag":548,"props":1217,"children":1218},{"style":1180},[1219],{"type":63,"value":1220},"blocker",{"type":57,"tag":548,"props":1222,"children":1223},{"style":561},[1224],{"type":63,"value":586},{"type":57,"tag":548,"props":1226,"children":1227},{"style":561},[1228],{"type":63,"value":1192},{"type":57,"tag":548,"props":1230,"children":1231},{"style":561},[1232],{"type":63,"value":1233}," null",{"type":57,"tag":548,"props":1235,"children":1236},{"style":567},[1237],{"type":63,"value":1202},{"type":57,"tag":548,"props":1239,"children":1240},{"style":561},[1241],{"type":63,"value":586},{"type":57,"tag":548,"props":1243,"children":1244},{"style":578},[1245],{"type":63,"value":1246},"az_missing",{"type":57,"tag":548,"props":1248,"children":1249},{"style":561},[1250],{"type":63,"value":586},{"type":57,"tag":548,"props":1252,"children":1253},{"style":567},[1254],{"type":63,"value":1202},{"type":57,"tag":548,"props":1256,"children":1257},{"style":561},[1258],{"type":63,"value":586},{"type":57,"tag":548,"props":1260,"children":1261},{"style":578},[1262],{"type":63,"value":1263},"az_not_logged_in",{"type":57,"tag":548,"props":1265,"children":1266},{"style":561},[1267],{"type":63,"value":586},{"type":57,"tag":548,"props":1269,"children":1270},{"style":567},[1271],{"type":63,"value":1202},{"type":57,"tag":548,"props":1273,"children":1274},{"style":561},[1275],{"type":63,"value":586},{"type":57,"tag":548,"props":1277,"children":1278},{"style":578},[1279],{"type":63,"value":1280},"pac_not_logged_in",{"type":57,"tag":548,"props":1282,"children":1283},{"style":561},[1284],{"type":63,"value":1146},{"type":57,"tag":548,"props":1286,"children":1287},{"class":550,"line":183},[1288,1293,1297,1302,1306,1310,1314,1319,1323,1327,1331,1336,1340,1344,1348,1353,1357],{"type":57,"tag":548,"props":1289,"children":1290},{"style":567},[1291],{"type":63,"value":1292},"                 | ",{"type":57,"tag":548,"props":1294,"children":1295},{"style":561},[1296],{"type":63,"value":586},{"type":57,"tag":548,"props":1298,"children":1299},{"style":578},[1300],{"type":63,"value":1301},"no_env_url",{"type":57,"tag":548,"props":1303,"children":1304},{"style":561},[1305],{"type":63,"value":586},{"type":57,"tag":548,"props":1307,"children":1308},{"style":567},[1309],{"type":63,"value":1202},{"type":57,"tag":548,"props":1311,"children":1312},{"style":561},[1313],{"type":63,"value":586},{"type":57,"tag":548,"props":1315,"children":1316},{"style":578},[1317],{"type":63,"value":1318},"whoami_403",{"type":57,"tag":548,"props":1320,"children":1321},{"style":561},[1322],{"type":63,"value":586},{"type":57,"tag":548,"props":1324,"children":1325},{"style":567},[1326],{"type":63,"value":1202},{"type":57,"tag":548,"props":1328,"children":1329},{"style":561},[1330],{"type":63,"value":586},{"type":57,"tag":548,"props":1332,"children":1333},{"style":578},[1334],{"type":63,"value":1335},"whoami_401",{"type":57,"tag":548,"props":1337,"children":1338},{"style":561},[1339],{"type":63,"value":586},{"type":57,"tag":548,"props":1341,"children":1342},{"style":567},[1343],{"type":63,"value":1202},{"type":57,"tag":548,"props":1345,"children":1346},{"style":561},[1347],{"type":63,"value":586},{"type":57,"tag":548,"props":1349,"children":1350},{"style":578},[1351],{"type":63,"value":1352},"whoami_error",{"type":57,"tag":548,"props":1354,"children":1355},{"style":561},[1356],{"type":63,"value":586},{"type":57,"tag":548,"props":1358,"children":1359},{"style":561},[1360],{"type":63,"value":1361},",\n",{"type":57,"tag":548,"props":1363,"children":1365},{"class":550,"line":1364},5,[1366,1370,1375,1379,1383,1388,1393,1397],{"type":57,"tag":548,"props":1367,"children":1368},{"style":561},[1369],{"type":63,"value":1177},{"type":57,"tag":548,"props":1371,"children":1372},{"style":1180},[1373],{"type":63,"value":1374},"message",{"type":57,"tag":548,"props":1376,"children":1377},{"style":561},[1378],{"type":63,"value":586},{"type":57,"tag":548,"props":1380,"children":1381},{"style":561},[1382],{"type":63,"value":1192},{"type":57,"tag":548,"props":1384,"children":1385},{"style":561},[1386],{"type":63,"value":1387}," \"",{"type":57,"tag":548,"props":1389,"children":1390},{"style":578},[1391],{"type":63,"value":1392},"human-readable next step",{"type":57,"tag":548,"props":1394,"children":1395},{"style":561},[1396],{"type":63,"value":586},{"type":57,"tag":548,"props":1398,"children":1399},{"style":561},[1400],{"type":63,"value":1361},{"type":57,"tag":548,"props":1402,"children":1404},{"class":550,"line":1403},6,[1405,1409,1414,1418,1422,1426,1431,1435,1440,1444,1449,1453,1457,1461,1465,1469,1473,1477,1482,1486,1490,1494,1498,1502],{"type":57,"tag":548,"props":1406,"children":1407},{"style":561},[1408],{"type":63,"value":1177},{"type":57,"tag":548,"props":1410,"children":1411},{"style":1180},[1412],{"type":63,"value":1413},"azUser",{"type":57,"tag":548,"props":1415,"children":1416},{"style":561},[1417],{"type":63,"value":586},{"type":57,"tag":548,"props":1419,"children":1420},{"style":561},[1421],{"type":63,"value":1192},{"type":57,"tag":548,"props":1423,"children":1424},{"style":561},[1425],{"type":63,"value":1387},{"type":57,"tag":548,"props":1427,"children":1428},{"style":578},[1429],{"type":63,"value":1430},"...",{"type":57,"tag":548,"props":1432,"children":1433},{"style":561},[1434],{"type":63,"value":586},{"type":57,"tag":548,"props":1436,"children":1437},{"style":561},[1438],{"type":63,"value":1439},",",{"type":57,"tag":548,"props":1441,"children":1442},{"style":561},[1443],{"type":63,"value":1387},{"type":57,"tag":548,"props":1445,"children":1446},{"style":1180},[1447],{"type":63,"value":1448},"pacUser",{"type":57,"tag":548,"props":1450,"children":1451},{"style":561},[1452],{"type":63,"value":586},{"type":57,"tag":548,"props":1454,"children":1455},{"style":561},[1456],{"type":63,"value":1192},{"type":57,"tag":548,"props":1458,"children":1459},{"style":561},[1460],{"type":63,"value":1387},{"type":57,"tag":548,"props":1462,"children":1463},{"style":578},[1464],{"type":63,"value":1430},{"type":57,"tag":548,"props":1466,"children":1467},{"style":561},[1468],{"type":63,"value":586},{"type":57,"tag":548,"props":1470,"children":1471},{"style":561},[1472],{"type":63,"value":1439},{"type":57,"tag":548,"props":1474,"children":1475},{"style":561},[1476],{"type":63,"value":1387},{"type":57,"tag":548,"props":1478,"children":1479},{"style":1180},[1480],{"type":63,"value":1481},"envUrl",{"type":57,"tag":548,"props":1483,"children":1484},{"style":561},[1485],{"type":63,"value":586},{"type":57,"tag":548,"props":1487,"children":1488},{"style":561},[1489],{"type":63,"value":1192},{"type":57,"tag":548,"props":1491,"children":1492},{"style":561},[1493],{"type":63,"value":1387},{"type":57,"tag":548,"props":1495,"children":1496},{"style":578},[1497],{"type":63,"value":1430},{"type":57,"tag":548,"props":1499,"children":1500},{"style":561},[1501],{"type":63,"value":586},{"type":57,"tag":548,"props":1503,"children":1504},{"style":561},[1505],{"type":63,"value":1361},{"type":57,"tag":548,"props":1507,"children":1509},{"class":550,"line":1508},7,[1510,1514,1519,1523,1527,1531,1535],{"type":57,"tag":548,"props":1511,"children":1512},{"style":561},[1513],{"type":63,"value":1177},{"type":57,"tag":548,"props":1515,"children":1516},{"style":1180},[1517],{"type":63,"value":1518},"identitiesMatch",{"type":57,"tag":548,"props":1520,"children":1521},{"style":561},[1522],{"type":63,"value":586},{"type":57,"tag":548,"props":1524,"children":1525},{"style":561},[1526],{"type":63,"value":1192},{"type":57,"tag":548,"props":1528,"children":1529},{"style":561},[1530],{"type":63,"value":1197},{"type":57,"tag":548,"props":1532,"children":1533},{"style":567},[1534],{"type":63,"value":1202},{"type":57,"tag":548,"props":1536,"children":1537},{"style":561},[1538],{"type":63,"value":1207},{"type":57,"tag":548,"props":1540,"children":1542},{"class":550,"line":1541},8,[1543,1547,1552,1556,1560,1565,1569,1573,1577,1581,1586,1590,1595,1599,1603,1607,1611,1615,1619,1623,1628,1632,1636,1640,1644,1648],{"type":57,"tag":548,"props":1544,"children":1545},{"style":561},[1546],{"type":63,"value":1177},{"type":57,"tag":548,"props":1548,"children":1549},{"style":1180},[1550],{"type":63,"value":1551},"whoAmI",{"type":57,"tag":548,"props":1553,"children":1554},{"style":561},[1555],{"type":63,"value":586},{"type":57,"tag":548,"props":1557,"children":1558},{"style":561},[1559],{"type":63,"value":1192},{"type":57,"tag":548,"props":1561,"children":1562},{"style":561},[1563],{"type":63,"value":1564}," {",{"type":57,"tag":548,"props":1566,"children":1567},{"style":561},[1568],{"type":63,"value":1387},{"type":57,"tag":548,"props":1570,"children":1571},{"style":555},[1572],{"type":63,"value":1183},{"type":57,"tag":548,"props":1574,"children":1575},{"style":561},[1576],{"type":63,"value":586},{"type":57,"tag":548,"props":1578,"children":1579},{"style":561},[1580],{"type":63,"value":1192},{"type":57,"tag":548,"props":1582,"children":1583},{"style":561},[1584],{"type":63,"value":1585}," true,",{"type":57,"tag":548,"props":1587,"children":1588},{"style":561},[1589],{"type":63,"value":1387},{"type":57,"tag":548,"props":1591,"children":1592},{"style":555},[1593],{"type":63,"value":1594},"userId",{"type":57,"tag":548,"props":1596,"children":1597},{"style":561},[1598],{"type":63,"value":586},{"type":57,"tag":548,"props":1600,"children":1601},{"style":561},[1602],{"type":63,"value":1192},{"type":57,"tag":548,"props":1604,"children":1605},{"style":561},[1606],{"type":63,"value":1387},{"type":57,"tag":548,"props":1608,"children":1609},{"style":578},[1610],{"type":63,"value":1430},{"type":57,"tag":548,"props":1612,"children":1613},{"style":561},[1614],{"type":63,"value":586},{"type":57,"tag":548,"props":1616,"children":1617},{"style":561},[1618],{"type":63,"value":1439},{"type":57,"tag":548,"props":1620,"children":1621},{"style":561},[1622],{"type":63,"value":1387},{"type":57,"tag":548,"props":1624,"children":1625},{"style":555},[1626],{"type":63,"value":1627},"organizationId",{"type":57,"tag":548,"props":1629,"children":1630},{"style":561},[1631],{"type":63,"value":586},{"type":57,"tag":548,"props":1633,"children":1634},{"style":561},[1635],{"type":63,"value":1192},{"type":57,"tag":548,"props":1637,"children":1638},{"style":561},[1639],{"type":63,"value":1387},{"type":57,"tag":548,"props":1641,"children":1642},{"style":578},[1643],{"type":63,"value":1430},{"type":57,"tag":548,"props":1645,"children":1646},{"style":561},[1647],{"type":63,"value":586},{"type":57,"tag":548,"props":1649,"children":1650},{"style":561},[1651],{"type":63,"value":1652}," }\n",{"type":57,"tag":548,"props":1654,"children":1656},{"class":550,"line":1655},9,[1657],{"type":57,"tag":548,"props":1658,"children":1659},{"style":561},[1660],{"type":63,"value":1661},"}\n",{"type":57,"tag":217,"props":1663,"children":1664},{},[1665,1686,1721],{"type":57,"tag":116,"props":1666,"children":1667},{},[1668,1684],{"type":57,"tag":70,"props":1669,"children":1670},{},[1671,1677,1678],{"type":57,"tag":123,"props":1672,"children":1674},{"className":1673},[],[1675],{"type":63,"value":1676},"ok: true",{"type":63,"value":503},{"type":57,"tag":123,"props":1679,"children":1681},{"className":1680},[],[1682],{"type":63,"value":1683},"identitiesMatch: true",{"type":63,"value":1685}," → proceed to 2b.",{"type":57,"tag":116,"props":1687,"children":1688},{},[1689,1704,1706,1711,1713,1719],{"type":57,"tag":70,"props":1690,"children":1691},{},[1692,1697,1698],{"type":57,"tag":123,"props":1693,"children":1695},{"className":1694},[],[1696],{"type":63,"value":1676},{"type":63,"value":503},{"type":57,"tag":123,"props":1699,"children":1701},{"className":1700},[],[1702],{"type":63,"value":1703},"identitiesMatch: false",{"type":63,"value":1705}," → proceed to 2b but surface the\n",{"type":57,"tag":123,"props":1707,"children":1709},{"className":1708},[],[1710],{"type":63,"value":1374},{"type":63,"value":1712}," to the user as an inline warning (\"az is X, pac is Y — WhoAmI works\nfor now, but if entity creation later returns 403, run the suggested\n",{"type":57,"tag":123,"props":1714,"children":1716},{"className":1715},[],[1717],{"type":63,"value":1718},"az login --username",{"type":63,"value":1720}," to align them\").",{"type":57,"tag":116,"props":1722,"children":1723},{},[1724,1733,1735,1740,1742,1747,1749,1755],{"type":57,"tag":70,"props":1725,"children":1726},{},[1727],{"type":57,"tag":123,"props":1728,"children":1730},{"className":1729},[],[1731],{"type":63,"value":1732},"ok: false",{"type":63,"value":1734}," → show the ",{"type":57,"tag":123,"props":1736,"children":1738},{"className":1737},[],[1739],{"type":63,"value":1374},{"type":63,"value":1741}," field to the user verbatim and\n",{"type":57,"tag":70,"props":1743,"children":1744},{},[1745],{"type":63,"value":1746},"stop the workflow",{"type":63,"value":1748},". The script already includes a fix-it command for every\nblocker (run ",{"type":57,"tag":123,"props":1750,"children":1752},{"className":1751},[],[1753],{"type":63,"value":1754},"az login",{"type":63,"value":1756},", etc.).",{"type":57,"tag":66,"props":1758,"children":1759},{},[1760,1762,1767],{"type":63,"value":1761},"Capture ",{"type":57,"tag":123,"props":1763,"children":1765},{"className":1764},[],[1766],{"type":63,"value":1481},{"type":63,"value":1768}," from the result — Phase 2b passes it to the entity-builder.",{"type":57,"tag":886,"props":1770,"children":1772},{"id":1771},"_2b-invoke-entity-builder",[1773],{"type":63,"value":1774},"2b. Invoke entity-builder",{"type":57,"tag":66,"props":1776,"children":1777},{},[1778,1780,1785,1787,1792],{"type":63,"value":1779},"Invoke the ",{"type":57,"tag":123,"props":1781,"children":1783},{"className":1782},[],[1784],{"type":63,"value":148},{"type":63,"value":1786}," agent via the ",{"type":57,"tag":123,"props":1788,"children":1790},{"className":1789},[],[1791],{"type":63,"value":708},{"type":63,"value":1793}," tool. Pass in the prompt:",{"type":57,"tag":217,"props":1795,"children":1796},{},[1797,1807,1812,1822],{"type":57,"tag":116,"props":1798,"children":1799},{},[1800,1802],{"type":63,"value":1801},"Path to ",{"type":57,"tag":123,"props":1803,"children":1805},{"className":1804},[],[1806],{"type":63,"value":136},{"type":57,"tag":116,"props":1808,"children":1809},{},[1810],{"type":63,"value":1811},"Working directory (absolute path)",{"type":57,"tag":116,"props":1813,"children":1814},{},[1815,1817],{"type":63,"value":1816},"Plugin root: ",{"type":57,"tag":123,"props":1818,"children":1820},{"className":1819},[],[1821],{"type":63,"value":989},{"type":57,"tag":116,"props":1823,"children":1824},{},[1825,1827,1833],{"type":63,"value":1826},"Dataverse env URL (from ",{"type":57,"tag":123,"props":1828,"children":1830},{"className":1829},[],[1831],{"type":63,"value":1832},"pac org who",{"type":63,"value":319},{"type":57,"tag":66,"props":1835,"children":1836},{},[1837,1839,1845,1846,1852,1854,1860],{"type":63,"value":1838},"The entity-builder reads ",{"type":57,"tag":123,"props":1840,"children":1842},{"className":1841},[],[1843],{"type":63,"value":1844},"Solution",{"type":63,"value":503},{"type":57,"tag":123,"props":1847,"children":1849},{"className":1848},[],[1850],{"type":63,"value":1851},"Publisher Prefix",{"type":63,"value":1853}," directly from the\nplan's ",{"type":57,"tag":123,"props":1855,"children":1857},{"className":1856},[],[1858],{"type":63,"value":1859},"## Environment",{"type":63,"value":1861}," — no need to re-thread them here.",{"type":57,"tag":66,"props":1863,"children":1864},{},[1865,1867,1873],{"type":63,"value":1866},"Wait for completion. The builder writes a transactional log at\n",{"type":57,"tag":123,"props":1868,"children":1870},{"className":1869},[],[1871],{"type":63,"value":1872},"\u003Cworking-dir>\u002Fentity-creation-log.md",{"type":63,"value":1874}," for recovery on failure.",{"type":57,"tag":425,"props":1876,"children":1878},{"id":1877},"phase-3-app-creationselection",[1879],{"type":63,"value":1880},"Phase 3: App Creation\u002FSelection",{"type":57,"tag":66,"props":1882,"children":1883},{},[1884,1885,1890,1892,1897,1899,1904],{"type":63,"value":1045},{"type":57,"tag":123,"props":1886,"children":1888},{"className":1887},[],[1889],{"type":63,"value":136},{"type":63,"value":1891}," for the app decision and the ",{"type":57,"tag":123,"props":1893,"children":1895},{"className":1894},[],[1896],{"type":63,"value":1844},{"type":63,"value":1898}," line in\n",{"type":57,"tag":123,"props":1900,"children":1902},{"className":1901},[],[1903],{"type":63,"value":1859},{"type":63,"value":718},{"type":57,"tag":66,"props":1906,"children":1907},{},[1908],{"type":57,"tag":70,"props":1909,"children":1910},{},[1911],{"type":63,"value":1912},"If \"create new\":",{"type":57,"tag":537,"props":1914,"children":1918},{"className":1915,"code":1916,"language":1917,"meta":542,"style":542},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pac model create --name \"App Name\" --solution \"\u003CSolution unique name>\" --publish\n","powershell",[1919],{"type":57,"tag":123,"props":1920,"children":1921},{"__ignoreMap":542},[1922],{"type":57,"tag":548,"props":1923,"children":1924},{"class":550,"line":551},[1925],{"type":57,"tag":548,"props":1926,"children":1927},{},[1928],{"type":63,"value":1916},{"type":57,"tag":66,"props":1930,"children":1931},{},[1932,1943,1945,1951,1953,1959],{"type":57,"tag":70,"props":1933,"children":1934},{},[1935,1941],{"type":57,"tag":123,"props":1936,"children":1938},{"className":1937},[],[1939],{"type":63,"value":1940},"--solution",{"type":63,"value":1942}," is mandatory.",{"type":63,"value":1944}," ",{"type":57,"tag":123,"props":1946,"children":1948},{"className":1947},[],[1949],{"type":63,"value":1950},"pac model create",{"type":63,"value":1952}," errors out with\n",{"type":57,"tag":123,"props":1954,"children":1956},{"className":1955},[],[1957],{"type":63,"value":1958},"\"The given solution name is not valid: ()\"",{"type":63,"value":1960}," if you omit it — its claimed\n\"active solution\" fallback does not work in practice.",{"type":57,"tag":66,"props":1962,"children":1963},{},[1964,1974],{"type":57,"tag":70,"props":1965,"children":1966},{},[1967,1973],{"type":57,"tag":123,"props":1968,"children":1970},{"className":1969},[],[1971],{"type":63,"value":1972},"--publish",{"type":63,"value":1942},{"type":63,"value":1975}," Without it the new appmodule stays in draft and\nthe genux runtime URL errors with \"app not published\".",{"type":57,"tag":217,"props":1977,"children":1978},{},[1979,1998],{"type":57,"tag":116,"props":1980,"children":1981},{},[1982,1984,1989,1991,1997],{"type":63,"value":1983},"Use the plan's ",{"type":57,"tag":123,"props":1985,"children":1987},{"className":1986},[],[1988],{"type":63,"value":1844},{"type":63,"value":1990}," value verbatim. The planner always writes one\n(default fallback is literally ",{"type":57,"tag":123,"props":1992,"children":1994},{"className":1993},[],[1995],{"type":63,"value":1996},"Default",{"type":63,"value":535},{"type":57,"tag":116,"props":1999,"children":2000},{},[2001,2003,2008,2010,2016],{"type":63,"value":2002},"If the plan is somehow missing ",{"type":57,"tag":123,"props":2004,"children":2006},{"className":2005},[],[2007],{"type":63,"value":1844},{"type":63,"value":2009},", pass ",{"type":57,"tag":123,"props":2011,"children":2013},{"className":2012},[],[2014],{"type":63,"value":2015},"--solution Default",{"type":63,"value":2017}," —\nevery Dataverse env has a built-in \"Default Solution\" by that unique name.",{"type":57,"tag":66,"props":2019,"children":2020},{},[2021],{"type":63,"value":2022},"Store the new app-id for Phase 6.",{"type":57,"tag":66,"props":2024,"children":2025},{},[2026,2031,2033,2038,2040,2045],{"type":57,"tag":70,"props":2027,"children":2028},{},[2029],{"type":63,"value":2030},"If existing app-id:",{"type":63,"value":2032}," Use it directly. ",{"type":57,"tag":123,"props":2034,"children":2036},{"className":2035},[],[2037],{"type":63,"value":1950},{"type":63,"value":2039}," is not called, so\nthe ",{"type":57,"tag":123,"props":2041,"children":2043},{"className":2042},[],[2044],{"type":63,"value":1844},{"type":63,"value":2046}," line is informational only for this phase.",{"type":57,"tag":425,"props":2048,"children":2050},{"id":2049},"phase-4-generate-runtimetypes-conditional",[2051],{"type":63,"value":2052},"Phase 4: Generate RuntimeTypes (Conditional)",{"type":57,"tag":66,"props":2054,"children":2055},{},[2056],{"type":63,"value":2057},"If any page uses Dataverse entities, generate the TypeScript schema:",{"type":57,"tag":537,"props":2059,"children":2061},{"className":1915,"code":2060,"language":1917,"meta":542,"style":542},"pac model genpage generate-types --data-sources \"entity1,entity2,...\" --output-file \u003Cworking-dir>\u002FRuntimeTypes.ts\n",[2062],{"type":57,"tag":123,"props":2063,"children":2064},{"__ignoreMap":542},[2065],{"type":57,"tag":548,"props":2066,"children":2067},{"class":550,"line":551},[2068],{"type":57,"tag":548,"props":2069,"children":2070},{},[2071],{"type":63,"value":2060},{"type":57,"tag":685,"props":2073,"children":2074},{},[2075],{"type":57,"tag":66,"props":2076,"children":2077},{},[2078,2083,2085,2091],{"type":57,"tag":70,"props":2079,"children":2080},{},[2081],{"type":63,"value":2082},"Windows + Bash",{"type":63,"value":2084},": Always use forward slashes in file paths (e.g., ",{"type":57,"tag":123,"props":2086,"children":2088},{"className":2087},[],[2089],{"type":63,"value":2090},"D:\u002Ftemp\u002FRuntimeTypes.ts",{"type":63,"value":535},{"type":57,"tag":66,"props":2093,"children":2094},{},[2095],{"type":63,"value":2096},"After generating, read the RuntimeTypes.ts file to verify it generated correctly.",{"type":57,"tag":66,"props":2098,"children":2099},{},[2100,2105],{"type":57,"tag":70,"props":2101,"children":2102},{},[2103],{"type":63,"value":2104},"For mock data pages only:",{"type":63,"value":2106}," Skip this phase.",{"type":57,"tag":425,"props":2108,"children":2110},{"id":2109},"phase-45-connector-bindings-conditional",[2111],{"type":63,"value":2112},"Phase 4.5: Connector Bindings (Conditional)",{"type":57,"tag":66,"props":2114,"children":2115},{},[2116,2121],{"type":57,"tag":70,"props":2117,"children":2118},{},[2119],{"type":63,"value":2120},"Re-probe the feature gate here — do not rely on the plan content alone.",{"type":63,"value":2122}," A plan\nauthored while the flag was ON must not deploy connectors after it is turned OFF:",{"type":57,"tag":537,"props":2124,"children":2126},{"className":1915,"code":2125,"language":1917,"meta":542,"style":542},"node \"${PLUGIN_ROOT}\u002Fscripts\u002Flib\u002Ffeature-flags.js\" connectors\n",[2127],{"type":57,"tag":123,"props":2128,"children":2129},{"__ignoreMap":542},[2130],{"type":57,"tag":548,"props":2131,"children":2132},{"class":550,"line":551},[2133],{"type":57,"tag":548,"props":2134,"children":2135},{},[2136],{"type":63,"value":2125},{"type":57,"tag":66,"props":2138,"children":2139},{},[2140,2152,2154,2160,2162,2168,2170,2183,2185,2191,2193,2199],{"type":57,"tag":70,"props":2141,"children":2142},{},[2143,2145,2151],{"type":63,"value":2144},"If it prints ",{"type":57,"tag":123,"props":2146,"children":2148},{"className":2147},[],[2149],{"type":63,"value":2150},"disabled",{"type":63,"value":1192},{"type":63,"value":2153}," connectors are OFF. Skip this phase entirely — do not\ncreate or pass ",{"type":57,"tag":123,"props":2155,"children":2157},{"className":2156},[],[2158],{"type":63,"value":2159},"connectors.json",{"type":63,"value":2161},", and never add ",{"type":57,"tag":123,"props":2163,"children":2165},{"className":2164},[],[2166],{"type":63,"value":2167},"--connectors",{"type":63,"value":2169}," on upload —\n",{"type":57,"tag":70,"props":2171,"children":2172},{},[2173,2175,2181],{"type":63,"value":2174},"regardless of what the plan's ",{"type":57,"tag":123,"props":2176,"children":2178},{"className":2177},[],[2179],{"type":63,"value":2180},"## Connector Bindings",{"type":63,"value":2182}," section says",{"type":63,"value":2184},". (Backstop:\n",{"type":57,"tag":123,"props":2186,"children":2188},{"className":2187},[],[2189],{"type":63,"value":2190},"list-connections.js",{"type":63,"value":2192}," \u002F ",{"type":57,"tag":123,"props":2194,"children":2196},{"className":2195},[],[2197],{"type":63,"value":2198},"create-connection-reference.js",{"type":63,"value":2200}," also fail closed with\nexit 3 if invoked while OFF.)",{"type":57,"tag":66,"props":2202,"children":2203},{},[2204,2215,2217,2222,2224,2229,2231,2237,2239,2245],{"type":57,"tag":70,"props":2205,"children":2206},{},[2207,2208,2214],{"type":63,"value":2144},{"type":57,"tag":123,"props":2209,"children":2211},{"className":2210},[],[2212],{"type":63,"value":2213},"enabled",{"type":63,"value":1192},{"type":63,"value":2216}," read the plan's ",{"type":57,"tag":123,"props":2218,"children":2220},{"className":2219},[],[2221],{"type":63,"value":2180},{"type":63,"value":2223}," section and\ntreat it as bindings ",{"type":57,"tag":70,"props":2225,"children":2226},{},[2227],{"type":63,"value":2228},"only when it contains an actual binding table",{"type":63,"value":2230}," (a\n",{"type":57,"tag":123,"props":2232,"children":2234},{"className":2233},[],[2235],{"type":63,"value":2236},"| Logical Name | …",{"type":63,"value":2238}," header with at least one data row). If the section is\n",{"type":57,"tag":123,"props":2240,"children":2242},{"className":2241},[],[2243],{"type":63,"value":2244},"No connector bindings.",{"type":63,"value":2246},", empty, missing, or malformed, treat the page as having\nno connectors and skip this phase.",{"type":57,"tag":66,"props":2248,"children":2249},{},[2250,2252,2258,2260,2266,2268,2273,2275,2281,2283,2289,2291,2296],{"type":63,"value":2251},"When there are real bindings, the ",{"type":57,"tag":123,"props":2253,"children":2255},{"className":2254},[],[2256],{"type":63,"value":2257},"genpage-connector-builder",{"type":63,"value":2259}," agent already wrote\n",{"type":57,"tag":123,"props":2261,"children":2263},{"className":2262},[],[2264],{"type":63,"value":2265},"\u003Cworking-dir>\u002Fconnectors.json",{"type":63,"value":2267}," during planning — verify it exists and matches the\nplan table. If it is missing, derive it from the plan table as a ",{"type":57,"tag":70,"props":2269,"children":2270},{},[2271],{"type":63,"value":2272},"bare JSON\narray",{"type":63,"value":2274}," (never the ",{"type":57,"tag":123,"props":2276,"children":2278},{"className":2277},[],[2279],{"type":63,"value":2280},"{ \"connectorBindings\": [...] }",{"type":63,"value":2282}," object wrapper — that is the\ndeployed page ",{"type":57,"tag":123,"props":2284,"children":2286},{"className":2285},[],[2287],{"type":63,"value":2288},"config.json",{"type":63,"value":2290}," shape that ",{"type":57,"tag":123,"props":2292,"children":2294},{"className":2293},[],[2295],{"type":63,"value":1108},{"type":63,"value":2297}," writes):",{"type":57,"tag":537,"props":2299,"children":2301},{"className":1154,"code":2300,"language":1156,"meta":542,"style":542},"[\n  {\n    \"logicalName\": \"new_uxtest_sharepoint\",\n    \"connectorId\": \"\u002Fproviders\u002FMicrosoft.PowerApps\u002Fapis\u002Fshared_sharepointonline\",\n    \"dataset\": \"https:\u002F\u002Fhost.sharepoint.com\u002Fsites\u002Fx\",\n    \"tables\": [\"5709dd6f-c73e-4079-ad23-2334e45e0e13\"],\n    \"tableDisplayNames\": [\"Pet\"]\n  },\n  {\n    \"logicalName\": \"new_uxtest_msnweather\",\n    \"connectorId\": \"\u002Fproviders\u002FMicrosoft.PowerApps\u002Fapis\u002Fshared_msnweather\",\n    \"dataset\": \"\",\n    \"operations\": [\"CurrentWeather\"]\n  }\n]\n",[2302],{"type":57,"tag":123,"props":2303,"children":2304},{"__ignoreMap":542},[2305,2313,2321,2359,2396,2433,2476,2518,2526,2533,2570,2607,2636,2678,2687],{"type":57,"tag":548,"props":2306,"children":2307},{"class":550,"line":551},[2308],{"type":57,"tag":548,"props":2309,"children":2310},{"style":561},[2311],{"type":63,"value":2312},"[\n",{"type":57,"tag":548,"props":2314,"children":2315},{"class":550,"line":1171},[2316],{"type":57,"tag":548,"props":2317,"children":2318},{"style":561},[2319],{"type":63,"value":2320},"  {\n",{"type":57,"tag":548,"props":2322,"children":2323},{"class":550,"line":1210},[2324,2329,2334,2338,2342,2346,2351,2355],{"type":57,"tag":548,"props":2325,"children":2326},{"style":561},[2327],{"type":63,"value":2328},"    \"",{"type":57,"tag":548,"props":2330,"children":2331},{"style":1180},[2332],{"type":63,"value":2333},"logicalName",{"type":57,"tag":548,"props":2335,"children":2336},{"style":561},[2337],{"type":63,"value":586},{"type":57,"tag":548,"props":2339,"children":2340},{"style":561},[2341],{"type":63,"value":1192},{"type":57,"tag":548,"props":2343,"children":2344},{"style":561},[2345],{"type":63,"value":1387},{"type":57,"tag":548,"props":2347,"children":2348},{"style":578},[2349],{"type":63,"value":2350},"new_uxtest_sharepoint",{"type":57,"tag":548,"props":2352,"children":2353},{"style":561},[2354],{"type":63,"value":586},{"type":57,"tag":548,"props":2356,"children":2357},{"style":561},[2358],{"type":63,"value":1361},{"type":57,"tag":548,"props":2360,"children":2361},{"class":550,"line":183},[2362,2366,2371,2375,2379,2383,2388,2392],{"type":57,"tag":548,"props":2363,"children":2364},{"style":561},[2365],{"type":63,"value":2328},{"type":57,"tag":548,"props":2367,"children":2368},{"style":1180},[2369],{"type":63,"value":2370},"connectorId",{"type":57,"tag":548,"props":2372,"children":2373},{"style":561},[2374],{"type":63,"value":586},{"type":57,"tag":548,"props":2376,"children":2377},{"style":561},[2378],{"type":63,"value":1192},{"type":57,"tag":548,"props":2380,"children":2381},{"style":561},[2382],{"type":63,"value":1387},{"type":57,"tag":548,"props":2384,"children":2385},{"style":578},[2386],{"type":63,"value":2387},"\u002Fproviders\u002FMicrosoft.PowerApps\u002Fapis\u002Fshared_sharepointonline",{"type":57,"tag":548,"props":2389,"children":2390},{"style":561},[2391],{"type":63,"value":586},{"type":57,"tag":548,"props":2393,"children":2394},{"style":561},[2395],{"type":63,"value":1361},{"type":57,"tag":548,"props":2397,"children":2398},{"class":550,"line":1364},[2399,2403,2408,2412,2416,2420,2425,2429],{"type":57,"tag":548,"props":2400,"children":2401},{"style":561},[2402],{"type":63,"value":2328},{"type":57,"tag":548,"props":2404,"children":2405},{"style":1180},[2406],{"type":63,"value":2407},"dataset",{"type":57,"tag":548,"props":2409,"children":2410},{"style":561},[2411],{"type":63,"value":586},{"type":57,"tag":548,"props":2413,"children":2414},{"style":561},[2415],{"type":63,"value":1192},{"type":57,"tag":548,"props":2417,"children":2418},{"style":561},[2419],{"type":63,"value":1387},{"type":57,"tag":548,"props":2421,"children":2422},{"style":578},[2423],{"type":63,"value":2424},"https:\u002F\u002Fhost.sharepoint.com\u002Fsites\u002Fx",{"type":57,"tag":548,"props":2426,"children":2427},{"style":561},[2428],{"type":63,"value":586},{"type":57,"tag":548,"props":2430,"children":2431},{"style":561},[2432],{"type":63,"value":1361},{"type":57,"tag":548,"props":2434,"children":2435},{"class":550,"line":1403},[2436,2440,2445,2449,2453,2458,2462,2467,2471],{"type":57,"tag":548,"props":2437,"children":2438},{"style":561},[2439],{"type":63,"value":2328},{"type":57,"tag":548,"props":2441,"children":2442},{"style":1180},[2443],{"type":63,"value":2444},"tables",{"type":57,"tag":548,"props":2446,"children":2447},{"style":561},[2448],{"type":63,"value":586},{"type":57,"tag":548,"props":2450,"children":2451},{"style":561},[2452],{"type":63,"value":1192},{"type":57,"tag":548,"props":2454,"children":2455},{"style":561},[2456],{"type":63,"value":2457}," [",{"type":57,"tag":548,"props":2459,"children":2460},{"style":561},[2461],{"type":63,"value":586},{"type":57,"tag":548,"props":2463,"children":2464},{"style":578},[2465],{"type":63,"value":2466},"5709dd6f-c73e-4079-ad23-2334e45e0e13",{"type":57,"tag":548,"props":2468,"children":2469},{"style":561},[2470],{"type":63,"value":586},{"type":57,"tag":548,"props":2472,"children":2473},{"style":561},[2474],{"type":63,"value":2475},"],\n",{"type":57,"tag":548,"props":2477,"children":2478},{"class":550,"line":1508},[2479,2483,2488,2492,2496,2500,2504,2509,2513],{"type":57,"tag":548,"props":2480,"children":2481},{"style":561},[2482],{"type":63,"value":2328},{"type":57,"tag":548,"props":2484,"children":2485},{"style":1180},[2486],{"type":63,"value":2487},"tableDisplayNames",{"type":57,"tag":548,"props":2489,"children":2490},{"style":561},[2491],{"type":63,"value":586},{"type":57,"tag":548,"props":2493,"children":2494},{"style":561},[2495],{"type":63,"value":1192},{"type":57,"tag":548,"props":2497,"children":2498},{"style":561},[2499],{"type":63,"value":2457},{"type":57,"tag":548,"props":2501,"children":2502},{"style":561},[2503],{"type":63,"value":586},{"type":57,"tag":548,"props":2505,"children":2506},{"style":578},[2507],{"type":63,"value":2508},"Pet",{"type":57,"tag":548,"props":2510,"children":2511},{"style":561},[2512],{"type":63,"value":586},{"type":57,"tag":548,"props":2514,"children":2515},{"style":561},[2516],{"type":63,"value":2517},"]\n",{"type":57,"tag":548,"props":2519,"children":2520},{"class":550,"line":1541},[2521],{"type":57,"tag":548,"props":2522,"children":2523},{"style":561},[2524],{"type":63,"value":2525},"  },\n",{"type":57,"tag":548,"props":2527,"children":2528},{"class":550,"line":1655},[2529],{"type":57,"tag":548,"props":2530,"children":2531},{"style":561},[2532],{"type":63,"value":2320},{"type":57,"tag":548,"props":2534,"children":2536},{"class":550,"line":2535},10,[2537,2541,2545,2549,2553,2557,2562,2566],{"type":57,"tag":548,"props":2538,"children":2539},{"style":561},[2540],{"type":63,"value":2328},{"type":57,"tag":548,"props":2542,"children":2543},{"style":1180},[2544],{"type":63,"value":2333},{"type":57,"tag":548,"props":2546,"children":2547},{"style":561},[2548],{"type":63,"value":586},{"type":57,"tag":548,"props":2550,"children":2551},{"style":561},[2552],{"type":63,"value":1192},{"type":57,"tag":548,"props":2554,"children":2555},{"style":561},[2556],{"type":63,"value":1387},{"type":57,"tag":548,"props":2558,"children":2559},{"style":578},[2560],{"type":63,"value":2561},"new_uxtest_msnweather",{"type":57,"tag":548,"props":2563,"children":2564},{"style":561},[2565],{"type":63,"value":586},{"type":57,"tag":548,"props":2567,"children":2568},{"style":561},[2569],{"type":63,"value":1361},{"type":57,"tag":548,"props":2571,"children":2573},{"class":550,"line":2572},11,[2574,2578,2582,2586,2590,2594,2599,2603],{"type":57,"tag":548,"props":2575,"children":2576},{"style":561},[2577],{"type":63,"value":2328},{"type":57,"tag":548,"props":2579,"children":2580},{"style":1180},[2581],{"type":63,"value":2370},{"type":57,"tag":548,"props":2583,"children":2584},{"style":561},[2585],{"type":63,"value":586},{"type":57,"tag":548,"props":2587,"children":2588},{"style":561},[2589],{"type":63,"value":1192},{"type":57,"tag":548,"props":2591,"children":2592},{"style":561},[2593],{"type":63,"value":1387},{"type":57,"tag":548,"props":2595,"children":2596},{"style":578},[2597],{"type":63,"value":2598},"\u002Fproviders\u002FMicrosoft.PowerApps\u002Fapis\u002Fshared_msnweather",{"type":57,"tag":548,"props":2600,"children":2601},{"style":561},[2602],{"type":63,"value":586},{"type":57,"tag":548,"props":2604,"children":2605},{"style":561},[2606],{"type":63,"value":1361},{"type":57,"tag":548,"props":2608,"children":2610},{"class":550,"line":2609},12,[2611,2615,2619,2623,2627,2632],{"type":57,"tag":548,"props":2612,"children":2613},{"style":561},[2614],{"type":63,"value":2328},{"type":57,"tag":548,"props":2616,"children":2617},{"style":1180},[2618],{"type":63,"value":2407},{"type":57,"tag":548,"props":2620,"children":2621},{"style":561},[2622],{"type":63,"value":586},{"type":57,"tag":548,"props":2624,"children":2625},{"style":561},[2626],{"type":63,"value":1192},{"type":57,"tag":548,"props":2628,"children":2629},{"style":561},[2630],{"type":63,"value":2631}," \"\"",{"type":57,"tag":548,"props":2633,"children":2634},{"style":561},[2635],{"type":63,"value":1361},{"type":57,"tag":548,"props":2637,"children":2639},{"class":550,"line":2638},13,[2640,2644,2649,2653,2657,2661,2665,2670,2674],{"type":57,"tag":548,"props":2641,"children":2642},{"style":561},[2643],{"type":63,"value":2328},{"type":57,"tag":548,"props":2645,"children":2646},{"style":1180},[2647],{"type":63,"value":2648},"operations",{"type":57,"tag":548,"props":2650,"children":2651},{"style":561},[2652],{"type":63,"value":586},{"type":57,"tag":548,"props":2654,"children":2655},{"style":561},[2656],{"type":63,"value":1192},{"type":57,"tag":548,"props":2658,"children":2659},{"style":561},[2660],{"type":63,"value":2457},{"type":57,"tag":548,"props":2662,"children":2663},{"style":561},[2664],{"type":63,"value":586},{"type":57,"tag":548,"props":2666,"children":2667},{"style":578},[2668],{"type":63,"value":2669},"CurrentWeather",{"type":57,"tag":548,"props":2671,"children":2672},{"style":561},[2673],{"type":63,"value":586},{"type":57,"tag":548,"props":2675,"children":2676},{"style":561},[2677],{"type":63,"value":2517},{"type":57,"tag":548,"props":2679,"children":2681},{"class":550,"line":2680},14,[2682],{"type":57,"tag":548,"props":2683,"children":2684},{"style":561},[2685],{"type":63,"value":2686},"  }\n",{"type":57,"tag":548,"props":2688,"children":2690},{"class":550,"line":2689},15,[2691],{"type":57,"tag":548,"props":2692,"children":2693},{"style":561},[2694],{"type":63,"value":2517},{"type":57,"tag":66,"props":2696,"children":2697},{},[2698,2700,2705,2707,2712,2714,2720],{"type":63,"value":2699},"Do ",{"type":57,"tag":70,"props":2701,"children":2702},{},[2703],{"type":63,"value":2704},"not",{"type":63,"value":2706}," write connection IDs into ",{"type":57,"tag":123,"props":2708,"children":2710},{"className":2709},[],[2711],{"type":63,"value":2159},{"type":63,"value":2713}," — the importing maker\u002Fadmin\nfills env-specific ",{"type":57,"tag":123,"props":2715,"children":2717},{"className":2716},[],[2718],{"type":63,"value":2719},"ConnectionId",{"type":63,"value":2721}," values through solution deployment settings.",{"type":57,"tag":425,"props":2723,"children":2725},{"id":2724},"phase-5-build-pages-parallel",[2726],{"type":63,"value":2727},"Phase 5: Build Pages (Parallel)",{"type":57,"tag":66,"props":2729,"children":2730},{},[2731,2732,2737],{"type":63,"value":1045},{"type":57,"tag":123,"props":2733,"children":2735},{"className":2734},[],[2736],{"type":63,"value":136},{"type":63,"value":2738}," and extract the pages table.",{"type":57,"tag":886,"props":2740,"children":2742},{"id":2741},"_5a-validate-the-plan-before-dispatch",[2743],{"type":63,"value":2744},"5a. Validate the plan before dispatch",{"type":57,"tag":66,"props":2746,"children":2747},{},[2748],{"type":63,"value":2749},"Before invoking any builders, verify:",{"type":57,"tag":217,"props":2751,"children":2752},{},[2753,2766,2785],{"type":57,"tag":116,"props":2754,"children":2755},{},[2756,2758,2764],{"type":63,"value":2757},"At least one page exists in the ",{"type":57,"tag":123,"props":2759,"children":2761},{"className":2760},[],[2762],{"type":63,"value":2763},"## Pages",{"type":63,"value":2765}," table",{"type":57,"tag":116,"props":2767,"children":2768},{},[2769,2771,2777,2779],{"type":63,"value":2770},"Every page has a ",{"type":57,"tag":123,"props":2772,"children":2774},{"className":2773},[],[2775],{"type":63,"value":2776},"### [Page Name]",{"type":63,"value":2778}," subsection in ",{"type":57,"tag":123,"props":2780,"children":2782},{"className":2781},[],[2783],{"type":63,"value":2784},"## Per-Page Specifications",{"type":57,"tag":116,"props":2786,"children":2787},{},[2788,2800,2802,2808,2809,2815],{"type":57,"tag":70,"props":2789,"children":2790},{},[2791,2793,2798],{"type":63,"value":2792},"All filenames in the ",{"type":57,"tag":123,"props":2794,"children":2796},{"className":2795},[],[2797],{"type":63,"value":2763},{"type":63,"value":2799}," table are unique.",{"type":63,"value":2801}," If any are duplicated,\nrewrite the plan appending ",{"type":57,"tag":123,"props":2803,"children":2805},{"className":2804},[],[2806],{"type":63,"value":2807},"-1",{"type":63,"value":739},{"type":57,"tag":123,"props":2810,"children":2812},{"className":2811},[],[2813],{"type":63,"value":2814},"-2",{"type":63,"value":2816},", etc. before dispatch. Duplicate filenames\ncause silent last-writer-wins data loss under parallel execution.",{"type":57,"tag":66,"props":2818,"children":2819},{},[2820,2822,2828],{"type":63,"value":2821},"See ",{"type":57,"tag":123,"props":2823,"children":2825},{"className":2824},[],[2826],{"type":63,"value":2827},"${PLUGIN_ROOT}\u002Freferences\u002Fplan-schema.md",{"type":63,"value":2829}," for the full contract.",{"type":57,"tag":886,"props":2831,"children":2833},{"id":2832},"_5b-single-page-fast-path-skip-task-dispatch-when-n1",[2834],{"type":63,"value":2835},"5b. Single-page fast path (skip Task dispatch when N=1)",{"type":57,"tag":66,"props":2837,"children":2838},{},[2839,2844],{"type":57,"tag":70,"props":2840,"children":2841},{},[2842],{"type":63,"value":2843},"If the plan's Pages table contains exactly one row",{"type":63,"value":2845},", do NOT dispatch a Task\nsubagent. Inline the page-builder workflow directly in the orchestrator:",{"type":57,"tag":112,"props":2847,"children":2848},{},[2849,2859,2870,2911,2930,2948,2967,2987,3008],{"type":57,"tag":116,"props":2850,"children":2851},{},[2852,2853],{"type":63,"value":1045},{"type":57,"tag":123,"props":2854,"children":2856},{"className":2855},[],[2857],{"type":63,"value":2858},"${PLUGIN_ROOT}\u002Freferences\u002Frules.md",{"type":57,"tag":116,"props":2860,"children":2861},{},[2862,2864],{"type":63,"value":2863},"Read the sample listed in the plan's ",{"type":57,"tag":123,"props":2865,"children":2867},{"className":2866},[],[2868],{"type":63,"value":2869},"## Relevant Samples",{"type":57,"tag":116,"props":2871,"children":2872},{},[2873,2875,2880,2882,2887,2889,2894,2896,2902,2904,2909],{"type":63,"value":2874},"Only when the plan's ",{"type":57,"tag":123,"props":2876,"children":2878},{"className":2877},[],[2879],{"type":63,"value":2180},{"type":63,"value":2881}," section contains an ",{"type":57,"tag":70,"props":2883,"children":2884},{},[2885],{"type":63,"value":2886},"actual\nbinding table",{"type":63,"value":2888}," (a ",{"type":57,"tag":123,"props":2890,"children":2892},{"className":2891},[],[2893],{"type":63,"value":2236},{"type":63,"value":2895}," header with at least one data row),\nalso read ",{"type":57,"tag":123,"props":2897,"children":2899},{"className":2898},[],[2900],{"type":63,"value":2901},"${PLUGIN_ROOT}\u002Freferences\u002Fconnectors.md",{"type":63,"value":2903},". Treat a\n",{"type":57,"tag":123,"props":2905,"children":2907},{"className":2906},[],[2908],{"type":63,"value":2244},{"type":63,"value":2910}," sentinel, or an empty\u002Fmissing\u002Fmalformed section, as\nhaving no connectors (same contract as Phase 4.5 and genpage-page-builder).",{"type":57,"tag":116,"props":2912,"children":2913},{},[2914,2916,2922,2924],{"type":63,"value":2915},"If the plan's Per-Page Specification has ",{"type":57,"tag":123,"props":2917,"children":2919},{"className":2918},[],[2920],{"type":63,"value":2921},"Needs caching: true",{"type":63,"value":2923},", also read\n",{"type":57,"tag":123,"props":2925,"children":2927},{"className":2926},[],[2928],{"type":63,"value":2929},"${PLUGIN_ROOT}\u002Freferences\u002Fdata-caching.md",{"type":57,"tag":116,"props":2931,"children":2932},{},[2933,2935,2940,2942],{"type":63,"value":2934},"If the plan's ",{"type":57,"tag":123,"props":2936,"children":2938},{"className":2937},[],[2939],{"type":63,"value":1859},{"type":63,"value":2941}," indicates non-English languages, also read\n",{"type":57,"tag":123,"props":2943,"children":2945},{"className":2944},[],[2946],{"type":63,"value":2947},"${PLUGIN_ROOT}\u002Freferences\u002Flocalization.md",{"type":57,"tag":116,"props":2949,"children":2950},{},[2951,2952,2957,2959,2965],{"type":63,"value":1045},{"type":57,"tag":123,"props":2953,"children":2955},{"className":2954},[],[2956],{"type":63,"value":136},{"type":63,"value":2958}," (already in working directory) and ",{"type":57,"tag":123,"props":2960,"children":2962},{"className":2961},[],[2963],{"type":63,"value":2964},"RuntimeTypes.ts",{"type":63,"value":2966},"\nif Data mode is dataverse",{"type":57,"tag":116,"props":2968,"children":2969},{},[2970,2972,2977,2979,2985],{"type":63,"value":2971},"Write the ",{"type":57,"tag":123,"props":2973,"children":2975},{"className":2974},[],[2976],{"type":63,"value":170},{"type":63,"value":2978}," file to ",{"type":57,"tag":123,"props":2980,"children":2982},{"className":2981},[],[2983],{"type":63,"value":2984},"\u003Cworking-dir>\u002F\u003Cfilename>.tsx",{"type":63,"value":2986}," following all rules",{"type":57,"tag":116,"props":2988,"children":2989},{},[2990,2992,2998,3000,3006],{"type":63,"value":2991},"After writing, Grep every named import from ",{"type":57,"tag":123,"props":2993,"children":2995},{"className":2994},[],[2996],{"type":63,"value":2997},"@fluentui\u002Freact-icons",{"type":63,"value":2999}," against\n",{"type":57,"tag":123,"props":3001,"children":3003},{"className":3002},[],[3004],{"type":63,"value":3005},"${PLUGIN_ROOT}\u002Freferences\u002Fverified-icons.txt",{"type":63,"value":3007}," (one Grep per name).\nRewrite any unverified names with the closest verified alternative; do not\nload the full icon list into context",{"type":57,"tag":116,"props":3009,"children":3010},{},[3011],{"type":63,"value":3012},"Proceed to Phase 6",{"type":57,"tag":66,"props":3014,"children":3015},{},[3016],{"type":63,"value":3017},"This saves ~5-15s of Task overhead and ~3K tokens that would otherwise be\nduplicated in a subagent context.",{"type":57,"tag":886,"props":3019,"children":3021},{"id":3020},"_5c-multi-page-invoke-page-builders-in-parallel",[3022],{"type":63,"value":3023},"5c. Multi-page: invoke page-builders in parallel",{"type":57,"tag":66,"props":3025,"children":3026},{},[3027,3032,3034,3039,3041,3046,3048,3053],{"type":57,"tag":70,"props":3028,"children":3029},{},[3030],{"type":63,"value":3031},"If the plan's Pages table contains 2+ rows",{"type":63,"value":3033},", invoke a ",{"type":57,"tag":123,"props":3035,"children":3037},{"className":3036},[],[3038],{"type":63,"value":162},{"type":63,"value":3040},"\nagent via the ",{"type":57,"tag":123,"props":3042,"children":3044},{"className":3043},[],[3045],{"type":63,"value":708},{"type":63,"value":3047}," tool per page. ",{"type":57,"tag":70,"props":3049,"children":3050},{},[3051],{"type":63,"value":3052},"Fire all invocations in a single message",{"type":63,"value":3054},"\nfor parallel execution.",{"type":57,"tag":66,"props":3056,"children":3057},{},[3058],{"type":63,"value":3059},"For each page, pass a prompt that includes:",{"type":57,"tag":217,"props":3061,"children":3062},{},[3063,3068,3073,3083,3088,3093],{"type":57,"tag":116,"props":3064,"children":3065},{},[3066],{"type":63,"value":3067},"Page name (e.g., \"Candidate Tracker\")",{"type":57,"tag":116,"props":3069,"children":3070},{},[3071],{"type":63,"value":3072},"Target file name (e.g., \"candidate-tracker.tsx\")",{"type":57,"tag":116,"props":3074,"children":3075},{},[3076,3078],{"type":63,"value":3077},"Absolute path to ",{"type":57,"tag":123,"props":3079,"children":3081},{"className":3080},[],[3082],{"type":63,"value":136},{"type":57,"tag":116,"props":3084,"children":3085},{},[3086],{"type":63,"value":3087},"Data mode (see below) — either a RuntimeTypes path or an explicit mock flag",{"type":57,"tag":116,"props":3089,"children":3090},{},[3091],{"type":63,"value":3092},"Working directory",{"type":57,"tag":116,"props":3094,"children":3095},{},[3096,3097],{"type":63,"value":1816},{"type":57,"tag":123,"props":3098,"children":3100},{"className":3099},[],[3101],{"type":63,"value":989},{"type":57,"tag":66,"props":3103,"children":3104},{},[3105,3110],{"type":57,"tag":70,"props":3106,"children":3107},{},[3108],{"type":63,"value":3109},"For Dataverse pages",{"type":63,"value":3111},", include the RuntimeTypes line:",{"type":57,"tag":685,"props":3113,"children":3114},{},[3115,3130,3187],{"type":57,"tag":66,"props":3116,"children":3117},{},[3118,3120,3128],{"type":63,"value":3119},"You are the genpage-page-builder agent. Generate the ",{"type":57,"tag":70,"props":3121,"children":3122},{},[3123],{"type":57,"tag":548,"props":3124,"children":3125},{},[3126],{"type":63,"value":3127},"Page Name",{"type":63,"value":3129}," page.",{"type":57,"tag":217,"props":3131,"children":3132},{},[3133,3144,3154,3164,3174,3182],{"type":57,"tag":116,"props":3134,"children":3135},{},[3136,3138,3143],{"type":63,"value":3137},"Target file: ",{"type":57,"tag":548,"props":3139,"children":3140},{},[3141],{"type":63,"value":3142},"filename",{"type":63,"value":170},{"type":57,"tag":116,"props":3145,"children":3146},{},[3147,3149],{"type":63,"value":3148},"Plan document: ",{"type":57,"tag":548,"props":3150,"children":3151},{},[3152],{"type":63,"value":3153},"absolute path to genpage-plan.md",{"type":57,"tag":116,"props":3155,"children":3156},{},[3157,3159],{"type":63,"value":3158},"Data mode: ",{"type":57,"tag":70,"props":3160,"children":3161},{},[3162],{"type":63,"value":3163},"dataverse",{"type":57,"tag":116,"props":3165,"children":3166},{},[3167,3169],{"type":63,"value":3168},"RuntimeTypes: ",{"type":57,"tag":548,"props":3170,"children":3171},{},[3172],{"type":63,"value":3173},"absolute path to RuntimeTypes.ts",{"type":57,"tag":116,"props":3175,"children":3176},{},[3177,3178],{"type":63,"value":1015},{"type":57,"tag":548,"props":3179,"children":3180},{},[3181],{"type":63,"value":1020},{"type":57,"tag":116,"props":3183,"children":3184},{},[3185],{"type":63,"value":3186},"Plugin root: ${PLUGIN_ROOT}",{"type":57,"tag":66,"props":3188,"children":3189},{},[3190,3192,3196],{"type":63,"value":3191},"Follow the instructions in your agent file. Write ",{"type":57,"tag":548,"props":3193,"children":3194},{},[3195],{"type":63,"value":3142},{"type":63,"value":3197},".tsx and return your\nresult when done.",{"type":57,"tag":66,"props":3199,"children":3200},{},[3201,3206,3208,3214],{"type":57,"tag":70,"props":3202,"children":3203},{},[3204],{"type":63,"value":3205},"For mock data pages",{"type":63,"value":3207},", omit the RuntimeTypes line and set ",{"type":57,"tag":123,"props":3209,"children":3211},{"className":3210},[],[3212],{"type":63,"value":3213},"Data mode: mock",{"type":63,"value":1192},{"type":57,"tag":685,"props":3216,"children":3217},{},[3218,3230,3271],{"type":57,"tag":66,"props":3219,"children":3220},{},[3221,3222,3229],{"type":63,"value":3119},{"type":57,"tag":70,"props":3223,"children":3224},{},[3225],{"type":57,"tag":548,"props":3226,"children":3227},{},[3228],{"type":63,"value":3127},{"type":63,"value":3129},{"type":57,"tag":217,"props":3231,"children":3232},{},[3233,3242,3250,3259,3267],{"type":57,"tag":116,"props":3234,"children":3235},{},[3236,3237,3241],{"type":63,"value":3137},{"type":57,"tag":548,"props":3238,"children":3239},{},[3240],{"type":63,"value":3142},{"type":63,"value":170},{"type":57,"tag":116,"props":3243,"children":3244},{},[3245,3246],{"type":63,"value":3148},{"type":57,"tag":548,"props":3247,"children":3248},{},[3249],{"type":63,"value":3153},{"type":57,"tag":116,"props":3251,"children":3252},{},[3253,3254],{"type":63,"value":3158},{"type":57,"tag":70,"props":3255,"children":3256},{},[3257],{"type":63,"value":3258},"mock",{"type":57,"tag":116,"props":3260,"children":3261},{},[3262,3263],{"type":63,"value":1015},{"type":57,"tag":548,"props":3264,"children":3265},{},[3266],{"type":63,"value":1020},{"type":57,"tag":116,"props":3268,"children":3269},{},[3270],{"type":63,"value":3186},{"type":57,"tag":66,"props":3272,"children":3273},{},[3274,3275,3279],{"type":63,"value":3191},{"type":57,"tag":548,"props":3276,"children":3277},{},[3278],{"type":63,"value":3142},{"type":63,"value":3197},{"type":57,"tag":66,"props":3281,"children":3282},{},[3283],{"type":63,"value":3284},"Wait for all page-builder tasks to complete before proceeding.",{"type":57,"tag":425,"props":3286,"children":3288},{"id":3287},"phase-6-deploy",[3289],{"type":63,"value":3290},"Phase 6: Deploy",{"type":57,"tag":66,"props":3292,"children":3293},{},[3294,3296,3301],{"type":63,"value":3295},"For each ",{"type":57,"tag":123,"props":3297,"children":3299},{"className":3298},[],[3300],{"type":63,"value":170},{"type":63,"value":3302}," file produced, deploy to Power Apps.",{"type":57,"tag":66,"props":3304,"children":3305},{},[3306,3308,3313],{"type":63,"value":3307},"If Phase 4.5 wrote ",{"type":57,"tag":123,"props":3309,"children":3311},{"className":3310},[],[3312],{"type":63,"value":2265},{"type":63,"value":3314},", first pre-flight the active\nPAC CLI:",{"type":57,"tag":537,"props":3316,"children":3318},{"className":1915,"code":3317,"language":1917,"meta":542,"style":542},"pac model genpage upload --help\n",[3319],{"type":57,"tag":123,"props":3320,"children":3321},{"__ignoreMap":542},[3322],{"type":57,"tag":548,"props":3323,"children":3324},{"class":550,"line":551},[3325],{"type":57,"tag":548,"props":3326,"children":3327},{},[3328],{"type":63,"value":3317},{"type":57,"tag":66,"props":3330,"children":3331},{},[3332,3334,3339,3341,3347],{"type":63,"value":3333},"The help output must contain ",{"type":57,"tag":123,"props":3335,"children":3337},{"className":3336},[],[3338],{"type":63,"value":2167},{"type":63,"value":3340},". If it does not, stop and surface:\n\"connector deploy requires a pac build with ",{"type":57,"tag":123,"props":3342,"children":3344},{"className":3343},[],[3345],{"type":63,"value":3346},"pac model genpage upload --connectors",{"type":63,"value":3348}," — build from PowerPlatform-Scale-AdminTools or update pac.\" Do\nnot silently drop bindings.",{"type":57,"tag":66,"props":3350,"children":3351},{},[3352],{"type":63,"value":3353},"Connector deployment matrix:",{"type":57,"tag":217,"props":3355,"children":3356},{},[3357,3382,3414,3431],{"type":57,"tag":116,"props":3358,"children":3359},{},[3360,3365,3367,3373,3375,3381],{"type":57,"tag":70,"props":3361,"children":3362},{},[3363],{"type":63,"value":3364},"Create (new page):",{"type":63,"value":3366}," include ",{"type":57,"tag":123,"props":3368,"children":3370},{"className":3369},[],[3371],{"type":63,"value":3372},"--connectors \"\u003Cworking-dir>\u002Fconnectors.json\"",{"type":63,"value":3374},"\nwith the first ",{"type":57,"tag":123,"props":3376,"children":3378},{"className":3377},[],[3379],{"type":63,"value":3380},"upload --add-to-sitemap",{"type":63,"value":718},{"type":57,"tag":116,"props":3383,"children":3384},{},[3385,3390,3392,3397,3399,3404,3406,3412],{"type":57,"tag":70,"props":3386,"children":3387},{},[3388],{"type":63,"value":3389},"Edit — connectors changed, added, or one removed:",{"type":63,"value":3391}," write the full desired\nbinding set to ",{"type":57,"tag":123,"props":3393,"children":3395},{"className":3394},[],[3396],{"type":63,"value":2159},{"type":63,"value":3398}," and include ",{"type":57,"tag":123,"props":3400,"children":3402},{"className":3401},[],[3403],{"type":63,"value":2167},{"type":63,"value":3405}," with\n",{"type":57,"tag":123,"props":3407,"children":3409},{"className":3408},[],[3410],{"type":63,"value":3411},"upload --page-id \u003Cid>",{"type":63,"value":3413}," (full replace).",{"type":57,"tag":116,"props":3415,"children":3416},{},[3417,3422,3424,3429],{"type":57,"tag":70,"props":3418,"children":3419},{},[3420],{"type":63,"value":3421},"Edit — no connector change:",{"type":63,"value":3423}," omit ",{"type":57,"tag":123,"props":3425,"children":3427},{"className":3426},[],[3428],{"type":63,"value":2167},{"type":63,"value":3430},"; pac preserves existing\nbindings. Never pass a stale or empty file on an unrelated edit.",{"type":57,"tag":116,"props":3432,"children":3433},{},[3434,3439,3441,3447,3449,3454,3456,3461,3463,3469],{"type":57,"tag":70,"props":3435,"children":3436},{},[3437],{"type":63,"value":3438},"Delete all connectors:",{"type":63,"value":3440}," write ",{"type":57,"tag":123,"props":3442,"children":3444},{"className":3443},[],[3445],{"type":63,"value":3446},"[]",{"type":63,"value":3448}," to ",{"type":57,"tag":123,"props":3450,"children":3452},{"className":3451},[],[3453],{"type":63,"value":2159},{"type":63,"value":3455}," and pass\n",{"type":57,"tag":123,"props":3457,"children":3459},{"className":3458},[],[3460],{"type":63,"value":2167},{"type":63,"value":3462}," so pac clears the page's ",{"type":57,"tag":123,"props":3464,"children":3466},{"className":3465},[],[3467],{"type":63,"value":3468},"connectorBindings",{"type":63,"value":718},{"type":57,"tag":66,"props":3471,"children":3472},{},[3473],{"type":57,"tag":70,"props":3474,"children":3475},{},[3476,3478,3484,3485,3491,3492,3498,3499,3505],{"type":63,"value":3477},"Copy the upload commands below exactly — ",{"type":57,"tag":123,"props":3479,"children":3481},{"className":3480},[],[3482],{"type":63,"value":3483},"--app-id",{"type":63,"value":739},{"type":57,"tag":123,"props":3486,"children":3488},{"className":3487},[],[3489],{"type":63,"value":3490},"--code-file",{"type":63,"value":739},{"type":57,"tag":123,"props":3493,"children":3495},{"className":3494},[],[3496],{"type":63,"value":3497},"--prompt",{"type":63,"value":739},{"type":57,"tag":123,"props":3500,"children":3502},{"className":3501},[],[3503],{"type":63,"value":3504},"--agent-message",{"type":63,"value":3506}," are all required and must use these exact flag names.",{"type":57,"tag":66,"props":3508,"children":3509},{},[3510,3531,3533,3538,3540,3546,3548,3554],{"type":57,"tag":70,"props":3511,"children":3512},{},[3513,3515,3521,3523,3529],{"type":63,"value":3514},"Log the full command verbatim into ",{"type":57,"tag":123,"props":3516,"children":3518},{"className":3517},[],[3519],{"type":63,"value":3520},"workflow-log.md",{"type":63,"value":3522}," under a ",{"type":57,"tag":123,"props":3524,"children":3526},{"className":3525},[],[3527],{"type":63,"value":3528},"## Phase 6 — Deploy",{"type":63,"value":3530}," section before invoking it.",{"type":63,"value":3532}," Including ",{"type":57,"tag":123,"props":3534,"children":3536},{"className":3535},[],[3537],{"type":63,"value":3497},{"type":63,"value":3539}," and all other flags. The eval harness greps the log for these tokens — a terse summary like ",{"type":57,"tag":123,"props":3541,"children":3543},{"className":3542},[],[3544],{"type":63,"value":3545},"Command: pac model genpage upload --add-to-sitemap",{"type":63,"value":3547}," will fail the ",{"type":57,"tag":123,"props":3549,"children":3551},{"className":3550},[],[3552],{"type":63,"value":3553},"--prompt scoping",{"type":63,"value":3555}," assertion. Format:",{"type":57,"tag":537,"props":3557,"children":3561},{"className":3558,"code":3559,"language":3560,"meta":542,"style":542},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","## Phase 6 — Deploy\n- Command: `pac model genpage upload --app-id \u003Cid> --code-file \u003Cpath> --data-sources '\u003Centities>' --prompt \"\u003Cfull prompt>\" --model \u003Cmodel-id> --name \"\u003Cpage name>\" --agent-message \"\u003Cdescription>\" --add-to-sitemap`\n- Result: page-id = \u003Creturned-id>, status = success\n","markdown",[3562],{"type":57,"tag":123,"props":3563,"children":3564},{"__ignoreMap":542},[3565,3578,3606],{"type":57,"tag":548,"props":3566,"children":3567},{"class":550,"line":551},[3568,3573],{"type":57,"tag":548,"props":3569,"children":3570},{"style":561},[3571],{"type":63,"value":3572},"## ",{"type":57,"tag":548,"props":3574,"children":3575},{"style":555},[3576],{"type":63,"value":3577},"Phase 6 — Deploy\n",{"type":57,"tag":548,"props":3579,"children":3580},{"class":550,"line":1171},[3581,3586,3591,3596,3601],{"type":57,"tag":548,"props":3582,"children":3583},{"style":561},[3584],{"type":63,"value":3585},"-",{"type":57,"tag":548,"props":3587,"children":3588},{"style":567},[3589],{"type":63,"value":3590}," Command: ",{"type":57,"tag":548,"props":3592,"children":3593},{"style":561},[3594],{"type":63,"value":3595},"`",{"type":57,"tag":548,"props":3597,"children":3598},{"style":578},[3599],{"type":63,"value":3600},"pac model genpage upload --app-id \u003Cid> --code-file \u003Cpath> --data-sources '\u003Centities>' --prompt \"\u003Cfull prompt>\" --model \u003Cmodel-id> --name \"\u003Cpage name>\" --agent-message \"\u003Cdescription>\" --add-to-sitemap",{"type":57,"tag":548,"props":3602,"children":3603},{"style":561},[3604],{"type":63,"value":3605},"`\n",{"type":57,"tag":548,"props":3607,"children":3608},{"class":550,"line":1210},[3609,3613,3618,3623,3629,3633],{"type":57,"tag":548,"props":3610,"children":3611},{"style":561},[3612],{"type":63,"value":3585},{"type":57,"tag":548,"props":3614,"children":3615},{"style":567},[3616],{"type":63,"value":3617}," Result: page-id = ",{"type":57,"tag":548,"props":3619,"children":3620},{"style":561},[3621],{"type":63,"value":3622},"\u003C",{"type":57,"tag":548,"props":3624,"children":3626},{"style":3625},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[3627],{"type":63,"value":3628},"returned-id",{"type":57,"tag":548,"props":3630,"children":3631},{"style":561},[3632],{"type":63,"value":606},{"type":57,"tag":548,"props":3634,"children":3635},{"style":567},[3636],{"type":63,"value":3637},", status = success\n",{"type":57,"tag":66,"props":3639,"children":3640},{},[3641,3643,3648],{"type":63,"value":3642},"When connector bindings are present, the logged command must also include\n",{"type":57,"tag":123,"props":3644,"children":3646},{"className":3645},[],[3647],{"type":63,"value":3372},{"type":63,"value":718},{"type":57,"tag":886,"props":3650,"children":3652},{"id":3651},"prompt-semantics",[3653,3658],{"type":57,"tag":123,"props":3654,"children":3656},{"className":3655},[],[3657],{"type":63,"value":3497},{"type":63,"value":3659}," semantics",{"type":57,"tag":217,"props":3661,"children":3662},{},[3663,3696],{"type":57,"tag":116,"props":3664,"children":3665},{},[3666,3671,3673,3679,3681,3687,3689,3695],{"type":57,"tag":70,"props":3667,"children":3668},{},[3669],{"type":63,"value":3670},"First upload",{"type":63,"value":3672}," (",{"type":57,"tag":123,"props":3674,"children":3676},{"className":3675},[],[3677],{"type":63,"value":3678},"--add-to-sitemap",{"type":63,"value":3680},", no ",{"type":57,"tag":123,"props":3682,"children":3684},{"className":3683},[],[3685],{"type":63,"value":3686},"--page-id",{"type":63,"value":3688},"): full page description\nfrom plan's ",{"type":57,"tag":123,"props":3690,"children":3692},{"className":3691},[],[3693],{"type":63,"value":3694},"## User Requirements",{"type":63,"value":718},{"type":57,"tag":116,"props":3697,"children":3698},{},[3699,3704,3705,3710,3711,3716],{"type":57,"tag":70,"props":3700,"children":3701},{},[3702],{"type":63,"value":3703},"Any subsequent upload",{"type":63,"value":3672},{"type":57,"tag":123,"props":3706,"children":3708},{"className":3707},[],[3709],{"type":63,"value":3686},{"type":63,"value":3680},{"type":57,"tag":123,"props":3712,"children":3714},{"className":3713},[],[3715],{"type":63,"value":3678},{"type":63,"value":3717},"): delta only —\nthe changes in this upload, written like a commit message, never a\nre-statement of the original.",{"type":57,"tag":66,"props":3719,"children":3720},{},[3721],{"type":63,"value":3722},"Applies in Phase 6 updates, Phase 6.5 PAGEREF re-uploads, Phase 7.5 fix\nre-deploys, and the entire edit flow.",{"type":57,"tag":886,"props":3724,"children":3726},{"id":3725},"for-dataverse-entity-pages-first-upload-create",[3727],{"type":63,"value":3728},"For Dataverse entity pages (first upload — create):",{"type":57,"tag":537,"props":3730,"children":3732},{"className":1915,"code":3731,"language":1917,"meta":542,"style":542},"pac model genpage upload `\n  --app-id \u003Capp-id> `\n  --code-file \u003Cworking-dir>\u002F\u003Cfile>.tsx `\n  --name \"Page Display Name\" `\n  --data-sources \"entity1,entity2\" `\n  --connectors \"\u003Cworking-dir>\u002Fconnectors.json\" `\n  --prompt \"\u003CFull page description from plan's ## User Requirements>\" `\n  --model \"\u003Ccurrent-model-id>\" `\n  --agent-message \"Description of what was built and any relevant details\" `\n  --add-to-sitemap\n",[3733],{"type":57,"tag":123,"props":3734,"children":3735},{"__ignoreMap":542},[3736,3744,3752,3760,3768,3776,3784,3792,3800,3808],{"type":57,"tag":548,"props":3737,"children":3738},{"class":550,"line":551},[3739],{"type":57,"tag":548,"props":3740,"children":3741},{},[3742],{"type":63,"value":3743},"pac model genpage upload `\n",{"type":57,"tag":548,"props":3745,"children":3746},{"class":550,"line":1171},[3747],{"type":57,"tag":548,"props":3748,"children":3749},{},[3750],{"type":63,"value":3751},"  --app-id \u003Capp-id> `\n",{"type":57,"tag":548,"props":3753,"children":3754},{"class":550,"line":1210},[3755],{"type":57,"tag":548,"props":3756,"children":3757},{},[3758],{"type":63,"value":3759},"  --code-file \u003Cworking-dir>\u002F\u003Cfile>.tsx `\n",{"type":57,"tag":548,"props":3761,"children":3762},{"class":550,"line":183},[3763],{"type":57,"tag":548,"props":3764,"children":3765},{},[3766],{"type":63,"value":3767},"  --name \"Page Display Name\" `\n",{"type":57,"tag":548,"props":3769,"children":3770},{"class":550,"line":1364},[3771],{"type":57,"tag":548,"props":3772,"children":3773},{},[3774],{"type":63,"value":3775},"  --data-sources \"entity1,entity2\" `\n",{"type":57,"tag":548,"props":3777,"children":3778},{"class":550,"line":1403},[3779],{"type":57,"tag":548,"props":3780,"children":3781},{},[3782],{"type":63,"value":3783},"  --connectors \"\u003Cworking-dir>\u002Fconnectors.json\" `\n",{"type":57,"tag":548,"props":3785,"children":3786},{"class":550,"line":1508},[3787],{"type":57,"tag":548,"props":3788,"children":3789},{},[3790],{"type":63,"value":3791},"  --prompt \"\u003CFull page description from plan's ## User Requirements>\" `\n",{"type":57,"tag":548,"props":3793,"children":3794},{"class":550,"line":1541},[3795],{"type":57,"tag":548,"props":3796,"children":3797},{},[3798],{"type":63,"value":3799},"  --model \"\u003Ccurrent-model-id>\" `\n",{"type":57,"tag":548,"props":3801,"children":3802},{"class":550,"line":1655},[3803],{"type":57,"tag":548,"props":3804,"children":3805},{},[3806],{"type":63,"value":3807},"  --agent-message \"Description of what was built and any relevant details\" `\n",{"type":57,"tag":548,"props":3809,"children":3810},{"class":550,"line":2535},[3811],{"type":57,"tag":548,"props":3812,"children":3813},{},[3814],{"type":63,"value":3815},"  --add-to-sitemap\n",{"type":57,"tag":66,"props":3817,"children":3818},{},[3819,3821,3826,3828,3833],{"type":63,"value":3820},"Omit the ",{"type":57,"tag":123,"props":3822,"children":3824},{"className":3823},[],[3825],{"type":63,"value":2167},{"type":63,"value":3827}," line when Phase 4.5 did not write ",{"type":57,"tag":123,"props":3829,"children":3831},{"className":3830},[],[3832],{"type":63,"value":2159},{"type":63,"value":718},{"type":57,"tag":66,"props":3835,"children":3836},{},[3837,3842,3844,3850],{"type":57,"tag":70,"props":3838,"children":3839},{},[3840],{"type":63,"value":3841},"For mock data pages:",{"type":63,"value":3843}," Same but omit ",{"type":57,"tag":123,"props":3845,"children":3847},{"className":3846},[],[3848],{"type":63,"value":3849},"--data-sources",{"type":63,"value":718},{"type":57,"tag":886,"props":3852,"children":3854},{"id":3853},"for-updating-existing-pages-subsequent-upload",[3855],{"type":63,"value":3856},"For updating existing pages (subsequent upload):",{"type":57,"tag":66,"props":3858,"children":3859},{},[3860,3862,3867,3869,3874,3876,3888],{"type":63,"value":3861},"Use ",{"type":57,"tag":123,"props":3863,"children":3865},{"className":3864},[],[3866],{"type":63,"value":3686},{"type":63,"value":3868},", omit ",{"type":57,"tag":123,"props":3870,"children":3872},{"className":3871},[],[3873],{"type":63,"value":3678},{"type":63,"value":3875},", and ",{"type":57,"tag":70,"props":3877,"children":3878},{},[3879,3881,3886],{"type":63,"value":3880},"scope ",{"type":57,"tag":123,"props":3882,"children":3884},{"className":3883},[],[3885],{"type":63,"value":3497},{"type":63,"value":3887}," to the delta only",{"type":63,"value":1192},{"type":57,"tag":537,"props":3890,"children":3892},{"className":1915,"code":3891,"language":1917,"meta":542,"style":542},"pac model genpage upload `\n  --app-id \u003Capp-id> `\n  --page-id \u003Cpage-id> `\n  --code-file \u003Cworking-dir>\u002F\u003Cfile>.tsx `\n  --data-sources \"entity1,entity2\" `\n  --connectors \"\u003Cworking-dir>\u002Fconnectors.json\" `\n  --prompt \"\u003COnly the changes in this upload, e.g. 'Add a search box and sort by company name'>\" `\n  --model \"\u003Ccurrent-model-id>\" `\n  --agent-message \"Description of what was changed in this upload\"\n",[3893],{"type":57,"tag":123,"props":3894,"children":3895},{"__ignoreMap":542},[3896,3903,3910,3918,3925,3932,3939,3947,3954],{"type":57,"tag":548,"props":3897,"children":3898},{"class":550,"line":551},[3899],{"type":57,"tag":548,"props":3900,"children":3901},{},[3902],{"type":63,"value":3743},{"type":57,"tag":548,"props":3904,"children":3905},{"class":550,"line":1171},[3906],{"type":57,"tag":548,"props":3907,"children":3908},{},[3909],{"type":63,"value":3751},{"type":57,"tag":548,"props":3911,"children":3912},{"class":550,"line":1210},[3913],{"type":57,"tag":548,"props":3914,"children":3915},{},[3916],{"type":63,"value":3917},"  --page-id \u003Cpage-id> `\n",{"type":57,"tag":548,"props":3919,"children":3920},{"class":550,"line":183},[3921],{"type":57,"tag":548,"props":3922,"children":3923},{},[3924],{"type":63,"value":3759},{"type":57,"tag":548,"props":3926,"children":3927},{"class":550,"line":1364},[3928],{"type":57,"tag":548,"props":3929,"children":3930},{},[3931],{"type":63,"value":3775},{"type":57,"tag":548,"props":3933,"children":3934},{"class":550,"line":1403},[3935],{"type":57,"tag":548,"props":3936,"children":3937},{},[3938],{"type":63,"value":3783},{"type":57,"tag":548,"props":3940,"children":3941},{"class":550,"line":1508},[3942],{"type":57,"tag":548,"props":3943,"children":3944},{},[3945],{"type":63,"value":3946},"  --prompt \"\u003COnly the changes in this upload, e.g. 'Add a search box and sort by company name'>\" `\n",{"type":57,"tag":548,"props":3948,"children":3949},{"class":550,"line":1541},[3950],{"type":57,"tag":548,"props":3951,"children":3952},{},[3953],{"type":63,"value":3799},{"type":57,"tag":548,"props":3955,"children":3956},{"class":550,"line":1655},[3957],{"type":57,"tag":548,"props":3958,"children":3959},{},[3960],{"type":63,"value":3961},"  --agent-message \"Description of what was changed in this upload\"\n",{"type":57,"tag":66,"props":3963,"children":3964},{},[3965,3967,3972],{"type":63,"value":3966},"For updates, include the ",{"type":57,"tag":123,"props":3968,"children":3970},{"className":3969},[],[3971],{"type":63,"value":2167},{"type":63,"value":3973}," line only when this upload intentionally\nreplaces or clears connector bindings; otherwise omit it to preserve the\ndeployed page's current bindings.",{"type":57,"tag":425,"props":3975,"children":3977},{"id":3976},"phase-65-navigation-fix-up-multi-page-only",[3978],{"type":63,"value":3979},"Phase 6.5: Navigation Fix-Up (Multi-Page Only)",{"type":57,"tag":66,"props":3981,"children":3982},{},[3983,3985,3990,3992,3998,4000,4006],{"type":63,"value":3984},"Runs only when the plan has 2+ pages AND any built ",{"type":57,"tag":123,"props":3986,"children":3988},{"className":3987},[],[3989],{"type":63,"value":170},{"type":63,"value":3991}," contains a ",{"type":57,"tag":123,"props":3993,"children":3995},{"className":3994},[],[3996],{"type":63,"value":3997},"PAGEREF_",{"type":63,"value":3999},"\ntoken. Page-builders emit ",{"type":57,"tag":123,"props":4001,"children":4003},{"className":4002},[],[4004],{"type":63,"value":4005},"pageId: \"PAGEREF_\u003Cfilename-without-tsx>\"",{"type":63,"value":4007}," as a\nplaceholder because GUIDs don't exist until after Phase 6 (see Rule 13). This\nphase substitutes the real GUIDs.",{"type":57,"tag":886,"props":4009,"children":4011},{"id":4010},"steps-1",[4012],{"type":63,"value":891},{"type":57,"tag":112,"props":4014,"children":4015},{},[4016,4029,4054,4088,4093],{"type":57,"tag":116,"props":4017,"children":4018},{},[4019,4021,4027],{"type":63,"value":4020},"Build ",{"type":57,"tag":123,"props":4022,"children":4024},{"className":4023},[],[4025],{"type":63,"value":4026},"filename-without-tsx → page-id",{"type":63,"value":4028}," map from Phase 6 upload output.",{"type":57,"tag":116,"props":4030,"children":4031},{},[4032,4037,4039,4045,4047,4053],{"type":57,"tag":70,"props":4033,"children":4034},{},[4035],{"type":63,"value":4036},"Sort keys by length descending",{"type":63,"value":4038}," so ",{"type":57,"tag":123,"props":4040,"children":4042},{"className":4041},[],[4043],{"type":63,"value":4044},"PAGEREF_pet",{"type":63,"value":4046}," can't match inside\n",{"type":57,"tag":123,"props":4048,"children":4050},{"className":4049},[],[4051],{"type":63,"value":4052},"PAGEREF_pet-gallery",{"type":63,"value":718},{"type":57,"tag":116,"props":4055,"children":4056},{},[4057,4058,4063,4065,4071,4073,4079,4081,4087],{"type":63,"value":3295},{"type":57,"tag":123,"props":4059,"children":4061},{"className":4060},[],[4062],{"type":63,"value":170},{"type":63,"value":4064}," in ",{"type":57,"tag":123,"props":4066,"children":4068},{"className":4067},[],[4069],{"type":63,"value":4070},"\u003Cworking-dir>\u002F*.tsx",{"type":63,"value":4072}," (top level only, no recursion),\nreplace every quoted ",{"type":57,"tag":123,"props":4074,"children":4076},{"className":4075},[],[4077],{"type":63,"value":4078},"\"PAGEREF_\u003Cname>\"",{"type":63,"value":4080}," (must be in double quotes — that's\nthe format page-builders emit) with ",{"type":57,"tag":123,"props":4082,"children":4084},{"className":4083},[],[4085],{"type":63,"value":4086},"\"\u003Cpage-id-guid>\"",{"type":63,"value":718},{"type":57,"tag":116,"props":4089,"children":4090},{},[4091],{"type":63,"value":4092},"If a placeholder doesn't match any map key (typo, missing sibling), stop\nand report — never silently ship the literal string.",{"type":57,"tag":116,"props":4094,"children":4095},{},[4096,4098,4104,4105,4110,4111,4116,4118,4123,4125,4130,4132,4137,4139],{"type":63,"value":4097},"Re-upload only the files that had at least one replacement. Use the update form\nof ",{"type":57,"tag":123,"props":4099,"children":4101},{"className":4100},[],[4102],{"type":63,"value":4103},"pac model genpage upload",{"type":63,"value":3672},{"type":57,"tag":123,"props":4106,"children":4108},{"className":4107},[],[4109],{"type":63,"value":3686},{"type":63,"value":3680},{"type":57,"tag":123,"props":4112,"children":4114},{"className":4113},[],[4115],{"type":63,"value":3678},{"type":63,"value":4117},"). Per the\n\"",{"type":57,"tag":123,"props":4119,"children":4121},{"className":4120},[],[4122],{"type":63,"value":3497},{"type":63,"value":4124}," semantics\" rule in Phase 6, this is an ",{"type":57,"tag":70,"props":4126,"children":4127},{},[4128],{"type":63,"value":4129},"update",{"type":63,"value":4131},", so ",{"type":57,"tag":123,"props":4133,"children":4135},{"className":4134},[],[4136],{"type":63,"value":3497},{"type":63,"value":4138},"\ndescribes the delta only — not the original page description:",{"type":57,"tag":537,"props":4140,"children":4142},{"className":1915,"code":4141,"language":1917,"meta":542,"style":542},"pac model genpage upload `\n  --app-id \u003Capp-id> `\n  --page-id \u003Cpage-id-from-Phase-6> `\n  --code-file \u003Cworking-dir>\u002F\u003Cfile>.tsx `\n  --data-sources \"entity1,entity2\" `\n  --prompt \"Resolve cross-page navigation placeholders to real page GUIDs (post-deploy fix-up)\" `\n  --model \"\u003Ccurrent-model-id>\" `\n  --agent-message \"Replaced PAGEREF_\u003Cname> tokens with actual page IDs returned by Phase 6\"\n",[4143],{"type":57,"tag":123,"props":4144,"children":4145},{"__ignoreMap":542},[4146,4153,4160,4168,4175,4182,4190,4197],{"type":57,"tag":548,"props":4147,"children":4148},{"class":550,"line":551},[4149],{"type":57,"tag":548,"props":4150,"children":4151},{},[4152],{"type":63,"value":3743},{"type":57,"tag":548,"props":4154,"children":4155},{"class":550,"line":1171},[4156],{"type":57,"tag":548,"props":4157,"children":4158},{},[4159],{"type":63,"value":3751},{"type":57,"tag":548,"props":4161,"children":4162},{"class":550,"line":1210},[4163],{"type":57,"tag":548,"props":4164,"children":4165},{},[4166],{"type":63,"value":4167},"  --page-id \u003Cpage-id-from-Phase-6> `\n",{"type":57,"tag":548,"props":4169,"children":4170},{"class":550,"line":183},[4171],{"type":57,"tag":548,"props":4172,"children":4173},{},[4174],{"type":63,"value":3759},{"type":57,"tag":548,"props":4176,"children":4177},{"class":550,"line":1364},[4178],{"type":57,"tag":548,"props":4179,"children":4180},{},[4181],{"type":63,"value":3775},{"type":57,"tag":548,"props":4183,"children":4184},{"class":550,"line":1403},[4185],{"type":57,"tag":548,"props":4186,"children":4187},{},[4188],{"type":63,"value":4189},"  --prompt \"Resolve cross-page navigation placeholders to real page GUIDs (post-deploy fix-up)\" `\n",{"type":57,"tag":548,"props":4191,"children":4192},{"class":550,"line":1508},[4193],{"type":57,"tag":548,"props":4194,"children":4195},{},[4196],{"type":63,"value":3799},{"type":57,"tag":548,"props":4198,"children":4199},{"class":550,"line":1541},[4200],{"type":57,"tag":548,"props":4201,"children":4202},{},[4203],{"type":63,"value":4204},"  --agent-message \"Replaced PAGEREF_\u003Cname> tokens with actual page IDs returned by Phase 6\"\n",{"type":57,"tag":66,"props":4206,"children":4207},{},[4208,4210,4215],{"type":63,"value":4209},"Pages with no ",{"type":57,"tag":123,"props":4211,"children":4213},{"className":4212},[],[4214],{"type":63,"value":3997},{"type":63,"value":4216}," strings need no second upload.",{"type":57,"tag":425,"props":4218,"children":4220},{"id":4219},"phase-67-solution-packaging-alm-optional",[4221],{"type":63,"value":4222},"Phase 6.7: Solution Packaging (ALM, optional)",{"type":57,"tag":66,"props":4224,"children":4225},{},[4226,4228,4234,4236,4242],{"type":63,"value":4227},"Runs only when the plan's ",{"type":57,"tag":123,"props":4229,"children":4231},{"className":4230},[],[4232],{"type":63,"value":4233},"## Solution Packaging",{"type":63,"value":4235}," has ",{"type":57,"tag":123,"props":4237,"children":4239},{"className":4238},[],[4240],{"type":63,"value":4241},"Package into solution: true",{"type":63,"value":4243},".\nAdds the deployed app, the GenPage(s), and any connection references to the\ntarget solution so they travel cross-environment.",{"type":57,"tag":112,"props":4245,"children":4246},{},[4247,4260,4279],{"type":57,"tag":116,"props":4248,"children":4249},{},[4250,4252,4258],{"type":63,"value":4251},"Ensure the solution exists (create via ",{"type":57,"tag":123,"props":4253,"children":4255},{"className":4254},[],[4256],{"type":63,"value":4257},"scripts\u002Fcreate-solution.js",{"type":63,"value":4259}," if needed).",{"type":57,"tag":116,"props":4261,"children":4262},{},[4263,4265,4271,4273],{"type":63,"value":4264},"Add the app + GenPage(s) + connection references (pass the page-id(s) returned\nby Phase 6 as ",{"type":57,"tag":123,"props":4266,"children":4268},{"className":4267},[],[4269],{"type":63,"value":4270},"--page-ids",{"type":63,"value":4272}," — the GenPage is added explicitly, it does NOT travel\nwith the app on its own):\n",{"type":57,"tag":123,"props":4274,"children":4276},{"className":4275},[],[4277],{"type":63,"value":4278},"node ${PLUGIN_ROOT}\u002Fscripts\u002Fadd-page-to-solution.js \u003CenvUrl> \u003CsolutionUniqueName> \u003Capp-id> --page-ids \"\u003Cpage-id1,page-id2>\" --connection-refs \"\u003ClogicalName1,logicalName2>\"",{"type":57,"tag":116,"props":4280,"children":4281},{},[4282,4284,4289],{"type":63,"value":4283},"Log the command + result to ",{"type":57,"tag":123,"props":4285,"children":4287},{"className":4286},[],[4288],{"type":63,"value":3520},{"type":63,"value":718},{"type":57,"tag":66,"props":4291,"children":4292},{},[4293,4295,4301,4303,4309,4311,4316,4318,4323,4325,4331,4333,4338,4340,4346,4348,4354],{"type":63,"value":4294},"Cross-env note (verified 2026-07-10): the app (80) pulls the sitemap (62); the\nGenPage ",{"type":57,"tag":123,"props":4296,"children":4298},{"className":4297},[],[4299],{"type":63,"value":4300},"uxagentproject",{"type":63,"value":4302}," (10372) is added explicitly and pulls its\n",{"type":57,"tag":123,"props":4304,"children":4306},{"className":4305},[],[4307],{"type":63,"value":4308},"uxagentprojectfile",{"type":63,"value":4310}," rows (10373, incl. ",{"type":57,"tag":123,"props":4312,"children":4314},{"className":4313},[],[4315],{"type":63,"value":2288},{"type":63,"value":4317}," with ",{"type":57,"tag":123,"props":4319,"children":4321},{"className":4320},[],[4322],{"type":63,"value":3468},{"type":63,"value":4324},");\neach ",{"type":57,"tag":123,"props":4326,"children":4328},{"className":4327},[],[4329],{"type":63,"value":4330},"connectionreference",{"type":63,"value":4332}," (10158) is added so bindings resolve. At import the\ndeployer supplies env-specific ",{"type":57,"tag":123,"props":4334,"children":4336},{"className":4335},[],[4337],{"type":63,"value":2719},{"type":63,"value":4339}," per connection reference via\n",{"type":57,"tag":123,"props":4341,"children":4343},{"className":4342},[],[4344],{"type":63,"value":4345},"pac solution create-settings",{"type":63,"value":4347}," + ",{"type":57,"tag":123,"props":4349,"children":4351},{"className":4350},[],[4352],{"type":63,"value":4353},"pac solution import --settings-file",{"type":63,"value":718},{"type":57,"tag":425,"props":4356,"children":4358},{"id":4357},"phase-7-verify-in-browser-optional",[4359],{"type":63,"value":4360},"Phase 7: Verify in Browser (Optional)",{"type":57,"tag":66,"props":4362,"children":4363},{},[4364,4366,4371],{"type":63,"value":4365},"After successful deployment, ask the user via ",{"type":57,"tag":123,"props":4367,"children":4369},{"className":4368},[],[4370],{"type":63,"value":716},{"type":63,"value":1192},{"type":57,"tag":685,"props":4373,"children":4374},{},[4375],{"type":57,"tag":66,"props":4376,"children":4377},{},[4378],{"type":63,"value":4379},"\"Would you like to verify the page(s) in the browser using Playwright?\"",{"type":57,"tag":66,"props":4381,"children":4382},{},[4383,4385,4390,4391],{"type":63,"value":4384},"Options: ",{"type":57,"tag":70,"props":4386,"children":4387},{},[4388],{"type":63,"value":4389},"Yes, verify in browser",{"type":63,"value":2192},{"type":57,"tag":70,"props":4392,"children":4393},{},[4394],{"type":63,"value":4395},"Skip verification",{"type":57,"tag":217,"props":4397,"children":4398},{},[4399,4410],{"type":57,"tag":116,"props":4400,"children":4401},{},[4402,4404,4408],{"type":63,"value":4403},"If the user picks ",{"type":57,"tag":70,"props":4405,"children":4406},{},[4407],{"type":63,"value":4395},{"type":63,"value":4409}," → jump to Phase 8.",{"type":57,"tag":116,"props":4411,"children":4412},{},[4413,4414,4419,4421,4427],{"type":63,"value":4403},{"type":57,"tag":70,"props":4415,"children":4416},{},[4417],{"type":63,"value":4418},"Yes",{"type":63,"value":4420}," → read ",{"type":57,"tag":123,"props":4422,"children":4424},{"className":4423},[],[4425],{"type":63,"value":4426},"${PLUGIN_ROOT}\u002Fskills\u002Fgenpage\u002Fverify-flow.md",{"type":63,"value":4428},"\nfor the full Playwright verification workflow (navigate, structural\nverification including below-the-fold, interactive testing, screenshots,\nfix-and-redeploy). The orchestrator only loads that file on demand to keep\ncontext lean when verification is skipped.",{"type":57,"tag":425,"props":4430,"children":4432},{"id":4431},"phase-8-summary",[4433],{"type":63,"value":4434},"Phase 8: Summary",{"type":57,"tag":66,"props":4436,"children":4437},{},[4438,4440,4445],{"type":63,"value":4439},"By Phase 8 the ",{"type":57,"tag":123,"props":4441,"children":4443},{"className":4442},[],[4444],{"type":63,"value":3520},{"type":63,"value":4446}," should already contain Phase 0 through Phase 7\nsections written incrementally — the planner writes Phase 1 inside its agent\ncontext, you (the orchestrator) write Phase 0 \u002F 0.5 \u002F 3 \u002F 4 \u002F 6 \u002F 6.5 \u002F 7 as\neach runs, and the entity-builder and page-builder agents append their own\nPhase 2 \u002F 5 sections when invoked.",{"type":57,"tag":66,"props":4448,"children":4449},{},[4450,4452,4458],{"type":63,"value":4451},"In Phase 8, append a final ",{"type":57,"tag":123,"props":4453,"children":4455},{"className":4454},[],[4456],{"type":63,"value":4457},"## Phase 8 — Summary",{"type":63,"value":4459}," section to the same file:",{"type":57,"tag":537,"props":4461,"children":4463},{"className":3558,"code":4462,"language":3560,"meta":542,"style":542},"## Phase 8 — Summary\n\n| Page | File | Entities | Status |\n|------|------|----------|--------|\n| \u003CName> | \u003Cfile>.tsx | \u003Centities or \"mock data\"> | Deployed |\n\n- App: \u003Cname> (\u003Capp-id>)\n- Entities created: \u003Clist, or \"none\">\n- Browser verification: \u003Cskipped | confirmed | failed: \u003Creason>>\n",[4464],{"type":57,"tag":123,"props":4465,"children":4466},{"__ignoreMap":542},[4467,4479,4487,4532,4540,4583,4590,4637,4668],{"type":57,"tag":548,"props":4468,"children":4469},{"class":550,"line":551},[4470,4474],{"type":57,"tag":548,"props":4471,"children":4472},{"style":561},[4473],{"type":63,"value":3572},{"type":57,"tag":548,"props":4475,"children":4476},{"style":555},[4477],{"type":63,"value":4478},"Phase 8 — Summary\n",{"type":57,"tag":548,"props":4480,"children":4481},{"class":550,"line":1171},[4482],{"type":57,"tag":548,"props":4483,"children":4484},{"emptyLinePlaceholder":50},[4485],{"type":63,"value":4486},"\n",{"type":57,"tag":548,"props":4488,"children":4489},{"class":550,"line":1210},[4490,4495,4500,4504,4509,4513,4518,4522,4527],{"type":57,"tag":548,"props":4491,"children":4492},{"style":561},[4493],{"type":63,"value":4494},"|",{"type":57,"tag":548,"props":4496,"children":4497},{"style":567},[4498],{"type":63,"value":4499}," Page ",{"type":57,"tag":548,"props":4501,"children":4502},{"style":561},[4503],{"type":63,"value":4494},{"type":57,"tag":548,"props":4505,"children":4506},{"style":567},[4507],{"type":63,"value":4508}," File ",{"type":57,"tag":548,"props":4510,"children":4511},{"style":561},[4512],{"type":63,"value":4494},{"type":57,"tag":548,"props":4514,"children":4515},{"style":567},[4516],{"type":63,"value":4517}," Entities ",{"type":57,"tag":548,"props":4519,"children":4520},{"style":561},[4521],{"type":63,"value":4494},{"type":57,"tag":548,"props":4523,"children":4524},{"style":567},[4525],{"type":63,"value":4526}," Status ",{"type":57,"tag":548,"props":4528,"children":4529},{"style":561},[4530],{"type":63,"value":4531},"|\n",{"type":57,"tag":548,"props":4533,"children":4534},{"class":550,"line":183},[4535],{"type":57,"tag":548,"props":4536,"children":4537},{"style":561},[4538],{"type":63,"value":4539},"|------|------|----------|--------|\n",{"type":57,"tag":548,"props":4541,"children":4542},{"class":550,"line":1364},[4543,4547,4552,4556,4561,4565,4570,4574,4579],{"type":57,"tag":548,"props":4544,"children":4545},{"style":561},[4546],{"type":63,"value":4494},{"type":57,"tag":548,"props":4548,"children":4549},{"style":567},[4550],{"type":63,"value":4551}," \u003CName> ",{"type":57,"tag":548,"props":4553,"children":4554},{"style":561},[4555],{"type":63,"value":4494},{"type":57,"tag":548,"props":4557,"children":4558},{"style":567},[4559],{"type":63,"value":4560}," \u003Cfile>.tsx ",{"type":57,"tag":548,"props":4562,"children":4563},{"style":561},[4564],{"type":63,"value":4494},{"type":57,"tag":548,"props":4566,"children":4567},{"style":567},[4568],{"type":63,"value":4569}," \u003Centities or \"mock data\"> ",{"type":57,"tag":548,"props":4571,"children":4572},{"style":561},[4573],{"type":63,"value":4494},{"type":57,"tag":548,"props":4575,"children":4576},{"style":567},[4577],{"type":63,"value":4578}," Deployed ",{"type":57,"tag":548,"props":4580,"children":4581},{"style":561},[4582],{"type":63,"value":4531},{"type":57,"tag":548,"props":4584,"children":4585},{"class":550,"line":1403},[4586],{"type":57,"tag":548,"props":4587,"children":4588},{"emptyLinePlaceholder":50},[4589],{"type":63,"value":4486},{"type":57,"tag":548,"props":4591,"children":4592},{"class":550,"line":1508},[4593,4597,4602,4606,4611,4615,4619,4623,4628,4632],{"type":57,"tag":548,"props":4594,"children":4595},{"style":561},[4596],{"type":63,"value":3585},{"type":57,"tag":548,"props":4598,"children":4599},{"style":567},[4600],{"type":63,"value":4601}," App: ",{"type":57,"tag":548,"props":4603,"children":4604},{"style":561},[4605],{"type":63,"value":3622},{"type":57,"tag":548,"props":4607,"children":4608},{"style":3625},[4609],{"type":63,"value":4610},"name",{"type":57,"tag":548,"props":4612,"children":4613},{"style":561},[4614],{"type":63,"value":606},{"type":57,"tag":548,"props":4616,"children":4617},{"style":567},[4618],{"type":63,"value":3672},{"type":57,"tag":548,"props":4620,"children":4621},{"style":561},[4622],{"type":63,"value":3622},{"type":57,"tag":548,"props":4624,"children":4625},{"style":3625},[4626],{"type":63,"value":4627},"app-id",{"type":57,"tag":548,"props":4629,"children":4630},{"style":561},[4631],{"type":63,"value":606},{"type":57,"tag":548,"props":4633,"children":4634},{"style":567},[4635],{"type":63,"value":4636},")\n",{"type":57,"tag":548,"props":4638,"children":4639},{"class":550,"line":1541},[4640,4644,4649,4653,4658,4663],{"type":57,"tag":548,"props":4641,"children":4642},{"style":561},[4643],{"type":63,"value":3585},{"type":57,"tag":548,"props":4645,"children":4646},{"style":567},[4647],{"type":63,"value":4648}," Entities created: ",{"type":57,"tag":548,"props":4650,"children":4651},{"style":561},[4652],{"type":63,"value":3622},{"type":57,"tag":548,"props":4654,"children":4655},{"style":3625},[4656],{"type":63,"value":4657},"list,",{"type":57,"tag":548,"props":4659,"children":4660},{"style":1180},[4661],{"type":63,"value":4662}," or",{"type":57,"tag":548,"props":4664,"children":4665},{"style":561},[4666],{"type":63,"value":4667}," \"none\">\n",{"type":57,"tag":548,"props":4669,"children":4670},{"class":550,"line":1655},[4671,4675,4680,4684,4689,4694,4699,4703,4708,4713],{"type":57,"tag":548,"props":4672,"children":4673},{"style":561},[4674],{"type":63,"value":3585},{"type":57,"tag":548,"props":4676,"children":4677},{"style":567},[4678],{"type":63,"value":4679}," Browser verification: ",{"type":57,"tag":548,"props":4681,"children":4682},{"style":561},[4683],{"type":63,"value":3622},{"type":57,"tag":548,"props":4685,"children":4686},{"style":3625},[4687],{"type":63,"value":4688},"skipped",{"type":57,"tag":548,"props":4690,"children":4691},{"style":1180},[4692],{"type":63,"value":4693}," |",{"type":57,"tag":548,"props":4695,"children":4696},{"style":1180},[4697],{"type":63,"value":4698}," confirmed",{"type":57,"tag":548,"props":4700,"children":4701},{"style":1180},[4702],{"type":63,"value":4693},{"type":57,"tag":548,"props":4704,"children":4705},{"style":1180},[4706],{"type":63,"value":4707}," failed:",{"type":57,"tag":548,"props":4709,"children":4710},{"style":561},[4711],{"type":63,"value":4712}," \u003Creason>",{"type":57,"tag":548,"props":4714,"children":4715},{"style":567},[4716],{"type":63,"value":625},{"type":57,"tag":66,"props":4718,"children":4719},{},[4720,4722,4727,4728,4733,4734,4739,4740,4746,4747,4752,4753,4759,4761,4767,4769,4774],{"type":63,"value":4721},"The log MUST contain command-level entries for every prereq \u002F auth \u002F question \u002F\nupload \u002F script invocation — not just outcome summaries. The eval harness greps\nthe log for tokens like ",{"type":57,"tag":123,"props":4723,"children":4725},{"className":4724},[],[4726],{"type":63,"value":737},{"type":63,"value":739},{"type":57,"tag":123,"props":4729,"children":4731},{"className":4730},[],[4732],{"type":63,"value":758},{"type":63,"value":739},{"type":57,"tag":123,"props":4735,"children":4737},{"className":4736},[],[4738],{"type":63,"value":716},{"type":63,"value":1361},{"type":57,"tag":123,"props":4741,"children":4743},{"className":4742},[],[4744],{"type":63,"value":4745},"EnterPlanMode",{"type":63,"value":739},{"type":57,"tag":123,"props":4748,"children":4750},{"className":4749},[],[4751],{"type":63,"value":3497},{"type":63,"value":739},{"type":57,"tag":123,"props":4754,"children":4756},{"className":4755},[],[4757],{"type":63,"value":4758},"check-auth.js",{"type":63,"value":4760},", etc. A decision-only log\n(e.g., ",{"type":57,"tag":123,"props":4762,"children":4764},{"className":4763},[],[4765],{"type":63,"value":4766},"Decision: new page",{"type":63,"value":4768}," without the underlying ",{"type":57,"tag":123,"props":4770,"children":4772},{"className":4771},[],[4773],{"type":63,"value":716},{"type":63,"value":4775},") will\nfail Layer 1 assertions even when the agent's behavior was correct.",{"type":57,"tag":66,"props":4777,"children":4778},{},[4779],{"type":63,"value":4780},"Then present a final summary to the user:",{"type":57,"tag":537,"props":4782,"children":4786},{"className":4783,"code":4785,"language":63},[4784],"language-text","## Genpage Complete\n\n| Page | File | Entities | Status |\n|------|------|----------|--------|\n| [Name] | [file].tsx | [entities or \"mock data\"] | Deployed |\n\nApp: [app name] ([app-id])\nScreenshots: [if verification was done]\nNext steps: Share with team, iterate on design, create additional pages\n",[4787],{"type":57,"tag":123,"props":4788,"children":4789},{"__ignoreMap":542},[4790],{"type":63,"value":4785},{"type":57,"tag":402,"props":4792,"children":4793},{},[],{"type":57,"tag":92,"props":4795,"children":4797},{"id":4796},"edit-flow",[4798],{"type":63,"value":935},{"type":57,"tag":66,"props":4800,"children":4801},{},[4802,4804,4809,4811,4816,4818,4823],{"type":63,"value":4803},"For the edit flow (triggered when the ",{"type":57,"tag":123,"props":4805,"children":4807},{"className":4806},[],[4808],{"type":63,"value":128},{"type":63,"value":4810}," returns\n",{"type":57,"tag":123,"props":4812,"children":4814},{"className":4813},[],[4815],{"type":63,"value":863},{"type":63,"value":4817},"), see ",{"type":57,"tag":231,"props":4819,"children":4821},{"href":4820},"edit-flow.md",[4822],{"type":63,"value":4820},{"type":63,"value":4824}," in this folder.",{"type":57,"tag":66,"props":4826,"children":4827},{},[4828,4830,4835,4836,4842,4844,4849],{"type":63,"value":4829},"The edit flow has its own 8 phases (Edit Phase 1-8): discover and select target\napp + page via ",{"type":57,"tag":123,"props":4831,"children":4833},{"className":4832},[],[4834],{"type":63,"value":808},{"type":63,"value":4347},{"type":57,"tag":123,"props":4837,"children":4839},{"className":4838},[],[4840],{"type":63,"value":4841},"pac model genpage list",{"type":63,"value":4843},", download, generate\nRuntimeTypes if needed, invoke ",{"type":57,"tag":123,"props":4845,"children":4847},{"className":4846},[],[4848],{"type":63,"value":196},{"type":63,"value":4850},", apply the edit inline,\ndeploy, verify, summarize.",{"type":57,"tag":4852,"props":4853,"children":4854},"style",{},[4855],{"type":63,"value":4856},"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":4858,"total":5051},[4859,4881,4902,4923,4938,4955,4966,4979,4994,5009,5028,5039],{"slug":4860,"name":4860,"fn":4861,"description":4862,"org":4863,"tags":4864,"stars":4878,"repoUrl":4879,"updatedAt":4880},"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},[4865,4868,4871,4872,4875],{"name":4866,"slug":4867,"type":15},"Engineering","engineering",{"name":4869,"slug":4870,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":4873,"slug":4874,"type":15},"Project Management","project-management",{"name":4876,"slug":4877,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":4882,"name":4882,"fn":4883,"description":4884,"org":4885,"tags":4886,"stars":4899,"repoUrl":4900,"updatedAt":4901},"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},[4887,4890,4893,4896],{"name":4888,"slug":4889,"type":15},".NET","net",{"name":4891,"slug":4892,"type":15},"Agents","agents",{"name":4894,"slug":4895,"type":15},"Azure","azure",{"name":4897,"slug":4898,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":4903,"name":4903,"fn":4904,"description":4905,"org":4906,"tags":4907,"stars":4899,"repoUrl":4900,"updatedAt":4922},"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},[4908,4911,4912,4915,4918,4919],{"name":4909,"slug":4910,"type":15},"Analytics","analytics",{"name":4894,"slug":4895,"type":15},{"name":4913,"slug":4914,"type":15},"Data Analysis","data-analysis",{"name":4916,"slug":4917,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":4920,"slug":4921,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":4924,"name":4924,"fn":4925,"description":4926,"org":4927,"tags":4928,"stars":4899,"repoUrl":4900,"updatedAt":4937},"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},[4929,4932,4933,4934],{"name":4930,"slug":4931,"type":15},"AI Infrastructure","ai-infrastructure",{"name":4894,"slug":4895,"type":15},{"name":4916,"slug":4917,"type":15},{"name":4935,"slug":4936,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":4939,"name":4939,"fn":4940,"description":4941,"org":4942,"tags":4943,"stars":4899,"repoUrl":4900,"updatedAt":4954},"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},[4944,4945,4948,4949,4950,4953],{"name":4894,"slug":4895,"type":15},{"name":4946,"slug":4947,"type":15},"Compliance","compliance",{"name":4897,"slug":4898,"type":15},{"name":9,"slug":8,"type":15},{"name":4951,"slug":4952,"type":15},"Python","python",{"name":4935,"slug":4936,"type":15},"2026-07-18T05:14:23.017504",{"slug":4956,"name":4956,"fn":4957,"description":4958,"org":4959,"tags":4960,"stars":4899,"repoUrl":4900,"updatedAt":4965},"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},[4961,4962,4963,4964],{"name":4909,"slug":4910,"type":15},{"name":4894,"slug":4895,"type":15},{"name":4897,"slug":4898,"type":15},{"name":4951,"slug":4952,"type":15},"2026-07-31T05:54:29.068751",{"slug":4967,"name":4967,"fn":4968,"description":4969,"org":4970,"tags":4971,"stars":4899,"repoUrl":4900,"updatedAt":4978},"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},[4972,4975,4976,4977],{"name":4973,"slug":4974,"type":15},"API Development","api-development",{"name":4894,"slug":4895,"type":15},{"name":9,"slug":8,"type":15},{"name":4951,"slug":4952,"type":15},"2026-07-18T05:14:16.988376",{"slug":4980,"name":4980,"fn":4981,"description":4982,"org":4983,"tags":4984,"stars":4899,"repoUrl":4900,"updatedAt":4993},"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},[4985,4986,4989,4992],{"name":4894,"slug":4895,"type":15},{"name":4987,"slug":4988,"type":15},"Computer Vision","computer-vision",{"name":4990,"slug":4991,"type":15},"Images","images",{"name":4951,"slug":4952,"type":15},"2026-07-18T05:14:18.007737",{"slug":4995,"name":4995,"fn":4996,"description":4997,"org":4998,"tags":4999,"stars":4899,"repoUrl":4900,"updatedAt":5008},"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},[5000,5001,5004,5007],{"name":4894,"slug":4895,"type":15},{"name":5002,"slug":5003,"type":15},"Configuration","configuration",{"name":5005,"slug":5006,"type":15},"Feature Flags","feature-flags",{"name":4916,"slug":4917,"type":15},"2026-07-03T16:32:01.278468",{"slug":5010,"name":5010,"fn":5011,"description":5012,"org":5013,"tags":5014,"stars":4899,"repoUrl":4900,"updatedAt":5027},"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},[5015,5018,5021,5024],{"name":5016,"slug":5017,"type":15},"Cosmos DB","cosmos-db",{"name":5019,"slug":5020,"type":15},"Database","database",{"name":5022,"slug":5023,"type":15},"NoSQL","nosql",{"name":5025,"slug":5026,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":5029,"name":5029,"fn":5011,"description":5030,"org":5031,"tags":5032,"stars":4899,"repoUrl":4900,"updatedAt":5038},"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},[5033,5034,5035,5036,5037],{"name":5016,"slug":5017,"type":15},{"name":5019,"slug":5020,"type":15},{"name":9,"slug":8,"type":15},{"name":5022,"slug":5023,"type":15},{"name":17,"slug":18,"type":15},"2026-07-03T16:31:19.368382",{"slug":5040,"name":5040,"fn":5041,"description":5042,"org":5043,"tags":5044,"stars":4899,"repoUrl":4900,"updatedAt":5050},"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},[5045,5046,5047,5048,5049],{"name":4894,"slug":4895,"type":15},{"name":5016,"slug":5017,"type":15},{"name":5019,"slug":5020,"type":15},{"name":4916,"slug":4917,"type":15},{"name":5022,"slug":5023,"type":15},"2026-05-13T06:14:17.582229",267,{"items":5053,"total":5145},[5054,5067,5080,5090,5104,5117,5131],{"slug":5055,"name":5055,"fn":5056,"description":5057,"org":5058,"tags":5059,"stars":28,"repoUrl":29,"updatedAt":5066},"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},[5060,5063,5064],{"name":5061,"slug":5062,"type":15},"Deployment","deployment",{"name":9,"slug":8,"type":15},{"name":5065,"slug":38,"type":15},"Power Pages","2026-04-06T18:34:34.732549",{"slug":5068,"name":5068,"fn":5069,"description":5070,"org":5071,"tags":5072,"stars":28,"repoUrl":29,"updatedAt":5079},"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},[5073,5076,5077],{"name":5074,"slug":5075,"type":15},"Integrations","integrations",{"name":26,"slug":27,"type":15},{"name":5078,"slug":39,"type":15},"Power Platform","2026-07-31T05:54:47.042251",{"slug":5081,"name":5081,"fn":5082,"description":5083,"org":5084,"tags":5085,"stars":28,"repoUrl":29,"updatedAt":5089},"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},[5086,5087,5088],{"name":5074,"slug":5075,"type":15},{"name":9,"slug":8,"type":15},{"name":26,"slug":27,"type":15},"2026-07-03T16:31:47.822186",{"slug":5091,"name":5091,"fn":5092,"description":5093,"org":5094,"tags":5095,"stars":28,"repoUrl":29,"updatedAt":5103},"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},[5096,5099,5101,5102],{"name":5097,"slug":5098,"type":15},"Data Modeling","data-modeling",{"name":5100,"slug":3163,"type":15},"Dataverse",{"name":9,"slug":8,"type":15},{"name":26,"slug":27,"type":15},"2026-07-31T05:54:46.078014",{"slug":5105,"name":5105,"fn":5106,"description":5107,"org":5108,"tags":5109,"stars":28,"repoUrl":29,"updatedAt":5116},"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},[5110,5113,5114,5115],{"name":5111,"slug":5112,"type":15},"Excel","excel",{"name":5074,"slug":5075,"type":15},{"name":9,"slug":8,"type":15},{"name":26,"slug":27,"type":15},"2026-07-31T05:54:44.030943",{"slug":5118,"name":5118,"fn":5119,"description":5120,"org":5121,"tags":5122,"stars":28,"repoUrl":29,"updatedAt":5130},"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},[5123,5124,5127,5128,5129],{"name":4891,"slug":4892,"type":15},{"name":5125,"slug":5126,"type":15},"Copilot Studio","copilot-studio",{"name":5074,"slug":5075,"type":15},{"name":9,"slug":8,"type":15},{"name":26,"slug":27,"type":15},"2026-07-31T05:54:39.025597",{"slug":5132,"name":5132,"fn":5133,"description":5134,"org":5135,"tags":5136,"stars":28,"repoUrl":29,"updatedAt":5144},"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},[5137,5138,5139,5140,5141],{"name":5019,"slug":5020,"type":15},{"name":5100,"slug":3163,"type":15},{"name":9,"slug":8,"type":15},{"name":5065,"slug":38,"type":15},{"name":5142,"slug":5143,"type":15},"Testing","testing","2026-04-06T18:34:41.141155",26]