Repository navigation
Installer: prerequisite checks say what to ask for, and who - #183
Open
Keith McGrane (Keithland89) wants to merge 2 commits into
Conversation
Admin work someone else does now shows as a Hand-off (→), not missing: the app's Graph consent, the audit log role while it's not granted, the Teams app upload, the Fabric Administrator and Insights Analyst roles, and Power Platform Administrator when you're a System Administrator in an environment. Hand-offs never block an install and preflight lists them on their own line, with Fabric's consent and audit role shown once. - Viva Insights analyst is a real Entra role check (Insights Analyst). - Tenant settings that can't be read are listed by their current names, with Create workspaces and, for org-scoped access, the XMLA setting; readable ones use the API's titles. Azure now checks Semantic Model Execute Queries REST API, which its web app uses. - An Admin or Member workspace already on a capacity is enough on Fabric: no capacity question, only those workspaces offered, and --yes needs a recorded workspace. - A 403 on a private Key Vault's managed private endpoint names the workspace Admin role. - Concealed names name a Global Administrator and the current label. - The web page says Analytics Hub installer. - Docs and CHANGELOG (0.6.9 candidate). Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…on" is said once, and the consent hand-off names who approves once - Preflight's --yes stop, when only Admin or Member workspaces on a capacity are available, now also names capacity rights (ask a capacity admin, or start a Fabric trial), so the installer can create a workspace itself. TROUBLESHOOTING.md matches. - reportPreflight says "The install carries on." on the hand-off line only when nothing needs attention; otherwise the attention line already says it. - The consent-role hand-off's detail no longer repeats who approves (the label and "Who does it" say it), and its howTo says what they approve and from where. On Fabric, the merged audit note follows the consent sentence, ahead of "Couldn't check for roles you could activate yourself." Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This was referenced Oct 23, 2026
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Layer S1 of Stack A, the installer's 0.6.9 self-serve work. A non-admin in a large, locked-down tenant now sees, in
prereqsand in install's and update's preflight, which roles and settings someone else must provide, who that someone is, and where to do it. Optional admin work shows as Hand-off (→), not Missing. It comes from the non-Global-Admin, large-tenant desk review: Top 5 #2; High findings B9, B10, B14 and B18; confusion points #1, #2, #12, #14, #15, #17 and #19.Stack: based on #170, which sits on #169. This PR merges after #169, #170 and the 0.6.8 release, then retargets to
main. It builds on #169'saudit-ingestionrow andcheck-audit, and on #170'spreflightVerdict,reportPreflightandpreflightChecks; it doesn't duplicate them.Review fixes, in d0a6b46 on top of 13abb50 (a separate commit, so it can be reviewed on its own):
--yesstop, when the only option is a workspace you're an Admin or Member of that's on a capacity, now names both ways forward. You can run without--yesand choose that workspace, or get admin or contributor rights on a capacity (or start a Fabric trial) so the installer can create a workspace. docs/TROUBLESHOOTING.md matches.A new status:
handoff. Hand-off is optional admin work someone else does while you carry on. It never blocks an install, with or without--yes, and never counts as needing attention or as missing. A row becomes Hand-off when you lack the role;metandeligibleare unchanged, and required rows staymissing:consent-role: you don't need it yourself, because the installer gives you an admin consent link to send. A Privileged Role Administrator or Global Administrator approves the app's Graph permissions from that link. An Application Administrator or Cloud Application Administrator can't.fabric-admin: a Fabric administrator turns on, or confirms, the tenant settings. The circular "only needed if the tenant settings below are off" is gone.power-platform-admin: only when you're a System Administrator in an environment, so only the flows' Power Platform API connection sign-in needs an admin. The row names which admin each flow's connection needs. Otherwise it stays missing.teams-admin(Azure): a Teams Administrator uploads the package. The row links the Teams admin center's Manage apps page.viva-analyst: now a real Entra role check for Insights Analyst (template25df335f-…). It reads the active roles and PIM eligibility the other Entra rows already read, so there's no new permission. Met when active, eligible when PIM-eligible, otherwise Hand-off. The row says who assigns the role (a Global Administrator, or a Privileged Role Administrator with PIM), or that an analyst can share the query instead.audit-ingestion(Installer: check audit ingestion up front, and sign in to Viva Insights first #169): both "not granted yet" states, Fabric's and Azure'sgraphRoles.pending, are now Hand-off and say the audit load finds 0 records until it's granted. A failed audit check stays missing.Preflight.
preflightVerdictreturns a third list,handoff.reportPreflightprints it on its own line after what needs attention: "Hand-off(s): someone else does this/these." "The install carries on." is said once: on the attention line, or on the hand-off line when nothing needs attention. With only hand-offs it says "Prerequisites: you have what you need yourself" rather than "nothing missing". On Fabric, the consent and the audit role are one ask, so they're shown once; on Azure, both.viva-analystshows in preflight only when Cowork credits come from the Viva Insights query.power-platform-admin's Hand-off shows only when a chosen flow uses the Power Platform API connection. The fullprereqslist shows every row.Every row that isn't met says who and where. Terminal, web and the web Markdown export print "Who does it:" for a Hand-off, and "How to get it:" otherwise.
An existing workspace on a capacity is enough (Fabric). docs/PREREQUISITES.md already promised this; the code now keeps it.
listWorkspaces(['Admin','Member']), orgetWorkspacefor a recorded workspace.--yeswith no recorded workspace, it stops, because the installer can't choose a workspace for you. The stop names both ways forward. You can run it without--yesand choose a workspace you're an Admin or Member of that's on a capacity. Or ask a capacity admin for admin or contributor rights, or start a Fabric trial, so the installer can create a workspace. A recorded workspace on a capacity passes.UI, docs and CHANGELOG.
Departures from the plan, for review:
executeQueries(azure/web/src/query.js:63), and the docs said the setting was needed on Azure, but the Azure check left it out because it's flaggedapp.POWER_BI_SETTINGSmarks itweb: true, andblockedSettingstakes{ web }; the Fabric app's own setting stays Fabric-only.--yesstop and the workspace option for the no-capacity error. docs/PERMISSIONS.md also uses the XMLA setting's full name in its org-scoped access table.canAssignDirectoryRolescheck.Scope
Parts affected (installer / app / Fabric notebooks and pipeline / Azure infra, jobs or web / core / Power BI models):
prereqs.js,steps/plan.js,setup.js,ui.js,web/app.js,web/app.css,clients/fabric.js,clients/graph.js,steps/fabric.js,steps/flows.js,steps/org-access.jsandsteps/run.js, with their tests.Source contracts, optional inputs, install record or deployed item names changed:
PrereqStatusgains'handoff'.preflightVerdictandreportPreflightreturn{ block, warn, handoff }.Preflightgains an optionalworkspacesOnCapacity.fabricApi.listWorkspaces(roles?)adds?roles=Admin,Member.POWER_BI_SETTINGSentries gain optionalwebandsection.usableCapacity,workspacesOnCapacity,settingLabel,settingsToConfirm,ppApiFlowsandINSIGHTS_ANALYST_ROLE.Validation
python -B -m pytest tests -qand recorded results below. (Locally, I ran the docs and release subset only; the full suite ran in CI on the head commit, see below.)npm test(andnpm run typecheckfor the installer) in each changed Node project..pbitfiles changed, documented the rebuild method and Desktop refresh / visual checks. (No.pbitchanges.)Results, skipped checks and limitations:
Local results on head d0a6b46 (Windows):
cd installer; npm testcd installer; npm run typecheckgit diff --checkpython -B -m pytest tests/test_docs.py tests/test_consolidated_release.py -qCI on head d0a6b46 (tests.yml, run 39943565360, Linux). All six checks pass: app, arm-drift, installer, pytest, valuelens-web and license/cla.
python -B -m pytest tests -q -ra(pytest)npm test(installer)npm run typecheck(installer)The previous head, 13abb50, also passed all six checks (run 39940024985).
script.test.js:115. This PC's PowerShell execution policy blocks it ("running scripts is disabled"), and it fails the same way on main. CI on Linux skips it. The execution policy was not bypassed.npm run build:armisn't needed.Overlaps:
audit-ingestionrow andcheck-audit) and Installer: run the prerequisite checks inside install and update #170 (preflightVerdict,reportPreflightandpreflightChecks).steps/plan.js, docs/PREREQUISITES.md,web/app.js,web.test.jsand CHANGELOG.md. Expect line-local conflicts; whichever lands second rebases.steps/plan.js:526-528: "The installer can't see that capacity's size. With N Copilot seats assigned, F64 or larger is best") is keyed onpre.seatsandBIG_CAPACITY_SEATS. Installer: size for the number of people, and ask in the main flow #181 renames those constants toBIG_CAPACITY_PEOPLEandLARGE_TENANT_PEOPLEand sizes by headcount (pre.headcount,headcountPhrase,sizingWarnings({ headcount })). Whichever lands second keys this note on headcount.web-session.js. This PR doesn't changeweb-session.js; it only adds a test that a Hand-off doesn't count forcanAssignDirectoryRoles.Compatibility
Repair or change on an existing install:
Deliberately left unchanged:
ValueLens: no Power BI template or model change, so no matching change is needed there.