Admin onboarding guide — agent-intake v1.0.0-preview¶
Audience: Power Platform and Microsoft 365 administrators deploying agent-intake for a customer.
Use this guide with: pilot-deployment-runbook.md, orchestrator-architecture.md, flow-build-prerequisites.md, flow-configuration.md, reviewer-app-build.md, identity-records-automation.md, mrm-integration.md, and drift-detection-integration.md.
1. Who this guide is for¶
This handbook is for the customer admin who owns the first real deployment of agent-intake in a lab, pilot, or early production-ready environment.
You are probably one of these people:
- a Power Platform Admin wiring Dataverse, Power Pages, solution components, and flows
- a Microsoft 365 platform admin coordinating Teams, Microsoft Graph, and Purview dependencies
- an AI governance platform owner who must explain how the solution works to InfoSec, Privacy, Compliance, Legal, and MRM
If you only need a quick pilot checklist, start with pilot-deployment-runbook.md. If you are the person expected to build, configure, smoke-test, and operate the solution, stay here.
2. What you're getting¶
agent-intake v1.0.0-preview is a full preview slice of the intake workflow, not just the original Express path.
| Feature area | What ships in this preview | Primary source |
|---|---|---|
| Three-path intake | Express, Standard, Full, and DefaultDeny routing | classification-rules.md |
| Maker surface | Progressive-disclosure Power Pages form design | portal-configuration.md and maker-form-progressive-disclosure.md |
| Sponsor approval | Teams sponsor card for Express | flow-configuration.md |
| Reviewer board | Standard / Full parallel review and quorum | reviewer-app-build.md and flow-configuration.md |
| Decision evidence | Immutable decision pack and audit events | flow-configuration.md |
| Appeal path | Denial appeal with lineage preservation | flow-configuration.md |
| Identity handoff | Microsoft Entra Agent ID blueprint and identity minting | identity-records-automation.md |
| Downstream governance | Registry, drift, and optional MRM handoff | drift-detection-integration.md and mrm-integration.md |
| Repeatable deployment | deploy.ps1, smoke test, seed data, teardown |
orchestrator-architecture.md |
ADR highlights every admin should know¶
These are the design decisions customers usually ask about first:
| Decision | Why you should care | Source |
|---|---|---|
| Express requires all six triggers = No and Zone 3 | Explains why many apparently simple requests still route out of Express | ADR-002 |
| Cross-border defaults to deny until Privacy override | This is the most common “why was it denied?” question in pilots | ADR-005 |
| 7-year retained decision evidence | Drives retention label setup and records conversations | ADR-006 |
| Sponsor 1-click is Express-only | Prevents admins from reusing the Express card for Standard or Full sign-off | ADR-007 |
| Sponsor self-approval is blocked | Explains a common default-deny path during testing | ADR-008 |
| Trigger changes force re-review | Matters for post-approval updates and drift handling | ADR-009 |
| Appeals preserve lineage | Important for audit and customer change management | ADR-010 |
| Reviewer app export is permitted | Explains why a managed model-driven app package can exist for the reviewer UI | ADR-011 |
3. Customer responsibility note¶
This repository follows a strict solution-content boundary:
- it ships documentation, scripts, and templates
- it does not ship exported Power Automate flow JSON, Canvas app packages, connection-reference exports, or environment-variable exports as customer deliverables
- customers build the 12 flows manually by following
flow-configuration.md
That boundary matters for two reasons:
- it keeps tenant-specific bindings, approvals, and connection choices in the customer's control
- it avoids brittle runtime artifacts that are hard to validate across environments
The solution also does not make policy decisions for the customer. The customer still owns:
- DLP policy
- data-classification policy
- country-routing policy
- sponsor and reviewer assignment
- legal interpretation of regulatory obligations
- production change management
In other words, agent-intake supports compliance with the customer's governance program when it is configured and operated correctly. It does not replace that program.
4. Prerequisites¶
Tooling and local workstation prerequisites¶
| Requirement | Minimum | Why it is required |
|---|---|---|
| PowerShell | 7.0+ | deploy.ps1, smoke_test.ps1, retention-label setup, shell provisioning |
Power Platform CLI (pac) |
Current supported release | Solution shell, Power Pages checks, environment selection |
Azure CLI (az) |
Current supported release | Default AzCli auth mode and access-token acquisition |
| Python | 3.10+ (3.11+ recommended) | Schema, identity, MRM, and helper scripts |
| Git | Current supported release | Repo clone and upgrade workflows |
| ExchangeOnlineManagement | 3.2.0+ | Purview retention-label automation on Windows |
| Python packages | requests, msal, pyyaml, azure-identity, jsonschema |
Script dependencies used by deploy, handoff, and validation steps |
Environment and tenant prerequisites¶
| Requirement | Why it is required |
|---|---|
| Power Platform environment with Dataverse | Core data model and flows live here |
| Power Pages site in the same environment | Maker-facing intake form |
| Teams enabled | Sponsor and reviewer adaptive cards |
| Microsoft Entra Agent ID feature enabled | Agent ID minting after approval |
| Microsoft Purview Records Management | Retention labels for decision evidence |
Optional model-risk-management-automation deployment |
Full-path Tier-1 MRM handoff |
| Optional downstream drift solutions | Live post-approval monitoring and feedback loop |
Roles and access¶
| Role | Typical reason |
|---|---|
| Power Platform Admin | Solution shell, Dataverse, Power Pages, flow build |
| System Administrator or System Customizer in Dataverse | Reviewer app and solution-component changes |
| Purview Compliance Admin (or equivalent records role) | Connect-IPPSSession, Get-ComplianceTag, New-ComplianceTag |
| Cloud Application Administrator or Entra Global Admin | Agent ID consent and blueprint setup when needed |
| Teams / Microsoft 365 admin | Connector readiness and notification routing |
| Reviewer-board security-role assigner | InfoSec / Privacy / Compliance / Legal / MRM role setup |
Optional but strongly recommended dependencies¶
model-risk-management-automationfor Tier-1 MRM handoffagent-registry-automationfor live approved-request registration- drift-monitoring peer solutions referenced in
drift-detection-integration.md
5. First deployment¶
Recommended first-run command¶
From the agent-intake solution folder:
Set-Location .\agent-intake\scripts
pwsh .\deploy.ps1 -EnvironmentUrl https://<your-env>.crm.dynamics.com -SeedTestData
For unattended automation, prefer managed identity when available:
pwsh .\deploy.ps1 `
-EnvironmentUrl https://<your-env>.crm.dynamics.com `
-AuthMode ManagedIdentity `
-SeedTestData
What the orchestrator does¶
The orchestrator stages are documented in orchestrator-architecture.md.
| Stage | What it does | Typical first-run timing |
|---|---|---|
| Stage 0 | Preflight tooling, PAC, Azure CLI, auth, connectivity | 1-2 min |
| Stage 1 | Deploy or validate schema and option sets | 1-2 min |
| Stage 2 | Create or validate the unmanaged solution shell | ~1 min |
| Stage 3 | Identity and records setup checks | 1-3 min |
| Stage 4 | Maker-surface validation and Power Pages checks | ~1 min |
| Stage 5 | Reviewer app provisioning or validation | 1-2 min |
| Stage 6 | Hydrate solution environment variables from policy and overrides | <1 min |
| Stage 7 | Smoke test | ~1 min |
| Stage 8 | Seed deterministic demo data and rerun seeded smoke gate | 1-2 min |
A well-prepared lab usually finishes in about 10 minutes. The first run may take longer if Power Pages or Agent ID prerequisites still need manual work.
Expected output on success¶
Look for all of the following:
- exit code
0 - a stage summary where each required stage is
Success - a structured log file named like
agent-intake-deploy-<timestamp>.log - a smoke pass at Stage 7
- seeded scenario creation and a seeded smoke pass at Stage 8 if
-SeedTestDatawas used
Expected output when manual work is still needed¶
The orchestrator intentionally prints MANUAL STEP REQUIRED: messages for gaps it cannot close automatically, especially around classic Power Pages steps and some custom-connector edges. That is not a fatal error by itself. Complete the manual step, then rerun deploy.ps1.
First-run recommendations¶
- Do not use
-SkipSmokeon the first deployment. - Keep
-SeedTestDataon for the first lab so you can validate Express, Standard, Full, and deny paths quickly. - Save the structured log with the change record for the deployment.
6. Configuring policy-lookup-tables.yaml¶
templates/policy-lookup-tables.yaml is the shipped policy surface for routing, quorum, reviewer SLAs, retention labels, and handoff behavior. Read it before your first deployment, even if you keep the defaults.
Top-level keys and what they control¶
| Key | What it controls | Common customer override |
|---|---|---|
schema_version |
Policy document version marker | Leave as shipped unless you control a customer fork |
last_updated_utc |
Timestamp for policy update tracking | Update when you change the file |
data_residency |
Cross-border default action and privacy override behavior | Allow-list country pairs or change the default action |
infosec_sampling |
Express passive-sample policy | Increase or decrease the sample rate |
sponsor_sla |
Sponsor response, escalation, and timeout timing | Tighten or loosen review windows |
reviewer_routing |
Per-role SLA, escalation contact, and condition policy | Replace placeholder contacts with real shared mailboxes |
quorum |
Minimum approvals and total board size by tier | Example: change Tier 1 from 3-of-5 to 4-of-5 |
mrm |
MRM target and fallback behavior | Point Full-path handoff to a different queue |
parallel_routing |
Sequential vs parallel routing model per tier | Keep as shipped in most pilots |
retention_labels |
Label names used by the solution | Rename to the customer's Purview labels |
managed_environment |
Required environment posture by tier | Enforce stricter environment discipline |
dlp_connector_group |
DLP connector policy by tier | Tighten Tier 3 if the customer is conservative |
connector_allowlist |
Connector baseline for decision-pack and drift logic | Add the customer-approved connector list |
zone_routing |
Role expectations by zone | Add or tighten role requirements |
audience_to_zone |
Maps the audience answer to a zone | Adjust if the customer wants department use treated as Zone 1 |
modification_cutoff |
Re-review expectations after approval | Tune what counts as minor or major |
denial_appeal |
Appeal caps by path | Tighten or loosen resubmission count |
sponsor_attestation |
Card wording and retention-years framing | Replace placeholder wording with the firm's approved text |
deferred |
Work still intentionally not implemented as a fully automated experience | Usually read-only context |
Common override examples¶
If the customer wants a stricter Tier-1 quorum:
If the customer already allows a specific country pair:
data_residency:
default_action: "deny"
privacy_override_enabled: true
allowed_country_pairs:
- maker: "US"
data: "CA"
If the customer uses different retention-label names:
retention_labels:
tier_1: "AI-Intake-7yr"
tier_2: "AI-Intake-7yr"
tier_3: "AI-Intake-7yr"
decision_log: "AI-Intake-7yr-WORM"
Practical guidance¶
- Treat the shipped values as placeholders for a customer pilot, not final production policy.
- Keep one reviewed copy of the YAML in source control and one approved copy in customer change management.
- Rerun
deploy.ps1after material YAML changes so policy hydration and smoke checks stay aligned.
7. Hydrating environment variables¶
The orchestrator writes solution environment variables in Stage 6. The baseline list is documented in flow-build-prerequisites.md.
Solution environment variables¶
| Solution env var | What to set | Where to source it |
|---|---|---|
fsi_intake_powerplatformenvironmenturl |
Current Dataverse environment URL | The actual environment URL you are deploying into |
fsi_intake_makerportalurl |
Public maker portal URL | Final Power Pages URL for /agent-intake |
fsi_intake_reviewerappurl |
Reviewer model-driven app URL | The appmodule URL or friendly customer app link |
fsi_intake_mrmtargetenv |
MRM target environment or wrapper endpoint | Same environment, or the target used by model-risk-management-automation |
fsi_intake_driftdetectorenv |
Drift-detector endpoint or environment | The downstream drift target used by peer solutions |
fsi_intake_retentionlabelid |
Purview label identifier or wrapper identifier | Customer Purview label ID or label name strategy |
fsi_intake_sponsorbackupgroup |
Backup sponsor group or mailbox | Customer group used for sponsor timeout and escalation fallback |
What the orchestrator does if values are missing¶
Per deploy.ps1, the orchestrator will:
- use the environment URL for
fsi_intake_powerplatformenvironmenturl - use the current environment or existing value when possible for MRM and drift targets
- fall back to placeholders for the maker portal URL, reviewer app URL, and sponsor backup group when the real value is not known yet
That makes the first run easier, but you should replace placeholders before any real pilot.
Runtime override environment variables recognized by deploy.ps1¶
These are host environment variables, not solution environment variables. They let you inject customer-specific values without editing the script.
| Runtime variable | Typical use |
|---|---|
AGENT_INTAKE_MAKER_PORTAL_URL |
Override the maker portal URL |
AGENT_INTAKE_REVIEWER_APP_URL |
Override the reviewer app URL |
AGENT_INTAKE_MRM_TARGET_ENV |
Override the MRM target |
AGENT_INTAKE_DRIFT_DETECTOR_ENV |
Override the drift target |
AGENT_INTAKE_RETENTION_LABEL_ID |
Override the retention label identifier |
AGENT_INTAKE_SPONSOR_BACKUP_GROUP |
Override the sponsor backup group |
AGENT_INTAKE_GRAPH_CUSTOM_CONNECTOR_API_ID |
Reuse an existing Microsoft Graph custom connector |
AGENT_INTAKE_PURVIEW_ADMIN_UPN |
Drive retention-label setup under a known admin identity |
AGENT_INTAKE_BLUEPRINT_SPONSOR_UPN |
Set the blueprint sponsor used by Agent ID setup |
AGENT_INTAKE_AGENT_BLUEPRINT_ID |
Supply a known blueprint ID for Agent ID minting |
AGENT_INTAKE_LIVE_AGENT_ID |
Opt into live Agent ID creation during seeded tests |
8. Building the 12 flows¶
The repository does not ship exported flow artifacts. Build all flows manually in the FSIAgentIntake unmanaged solution shell created by provision_solution_shell.ps1 or by Stage 2 of deploy.ps1.
Read these first:
flow-build-prerequisites.mdflow-configuration.mdportal-configuration.mdmaker-form-progressive-disclosure.md
Rough effort estimate¶
- Experienced Power Platform admin in a prepared tenant: 2-4 hours
- First-time tenant build with policy/legal reviews still happening: 1-2 days elapsed time
Build order¶
Follow the build order from flow-configuration.md.
| Order | Flow | Purpose |
|---|---|---|
| 1 | fsi-intake-presubmit-classifier |
Synchronous routing contract for the maker form |
| 2 | fsi-intake-router |
Writes path, tier, zone, quorum, and status |
| 3 | fsi-intake-sponsor-card |
Express sponsor surface |
| 4 | fsi-intake-parallel-reviewers |
Standard / Full reviewer fan-out |
| 5 | fsi-intake-reviewer-decision-handler |
Captures reviewer decisions and recomputes quorum |
| 6 | fsi-intake-mrm-handoff |
Full Tier-1 handoff into MRM |
| 7 | fsi-intake-decision-pack-writer |
Immutable evidence writer |
| 8 | fsi-intake-registry-handoff |
Agent ID minting and registry handoff |
| 9 | fsi-intake-drift-handoff |
Downstream drift baseline |
| 10 | fsi-intake-denial-appeal |
Appeal lineage |
| 11 | fsi-intake-escalation |
Overdue reviewer escalation |
| 12 | fsi-intake-retention-tagger |
Retention evidence stamping |
Practical build tips¶
- Bind connection references before saving the first flow.
- Build inside the solution shell so environment variables and connection references travel together.
- Keep the flow payload keys unchanged even if the customer wants different wording on the card.
- If PAC CLI leaves a Power Pages gap, finish the manual work in the maker portal, then rerun
deploy.ps1.
9. Smoke testing¶
Baseline validation¶
Run the smoke test after the first deploy and after any material config change.
Set-Location .\agent-intake
pwsh .\scripts\smoke_test.ps1 -EnvironmentUrl https://<your-env>.crm.dynamics.com
Seeded path validation¶
Use this after deploy.ps1 -SeedTestData or after a standalone seed run:
pwsh .\scripts\smoke_test.ps1 `
-EnvironmentUrl https://<your-env>.crm.dynamics.com `
-IncludeSeededDataChecks `
-PathScope All
How to read the output¶
A healthy smoke run should confirm:
- all nine Dataverse tables exist
- required option sets exist
- environment variables are hydrated
- key columns exist
- the docs language scan is clean
- seeded scenarios pass for Express, Standard, Full, and the deny paths when you include seeded checks
Use -PathScope Express, Standard, or Full when you are troubleshooting one path without rechecking the entire seeded set.
10. Ongoing operations¶
Drift monitoring¶
Once requests are approved and handed off, ongoing governance moves to peer solutions. Review drift-detection-integration.md so you know which fields downstream tools expect:
- origin intake ID
- approved tier and zone
- declared audience
- declared data sources
- sponsor UPN
- Microsoft Entra Agent ID
- reviewer attestation chain for Standard and Full
If the customer deploys unrestricted-agent-sharing-detector, scope-drift-monitor, agent-access-monitor, or agent-365-lifecycle-governance, make sure those teams know the handoff contract is live.
Retention-label management¶
The shipped labels are FSI-AgentIntake-7yr and FSI-AgentIntake-7yr-WORM.
Operational reminders:
- keep the label names in Purview aligned with
retention_labelsin the policy YAML - do not remove shared Purview labels casually; the orchestrator intentionally leaves them in place during teardown
- verify the decision-pack writer and retention tagger still reference the intended label after any rename
Agent ID lifecycle¶
The approval flow mints or references a Microsoft Entra Agent ID after approval. Operationally, you should track:
- the blueprint ID used for the environment
- whether the tenant still has the Agent ID feature enabled
- whether seeded tests are using synthetic IDs or live IDs
- the downstream registry record ID linked to each approved request
If a tenant feature gate is still closed, the solution can proceed through most setup steps and then finish the identity handoff later once the tenant flag is available.
Sponsor backup designation¶
Keep fsi_intake_sponsorbackupgroup current when managers leave, team structures change, or the customer wants a formal backup approver path.
Escalation policy tuning¶
Review these settings periodically:
sponsor_slareviewer_routingquorumdenial_appealdata_residency
A good pilot habit is to review them after the first 10-20 real requests rather than waiting for production.
11. Reviewer board changes¶
When the customer wants a new reviewer role, follow the pattern documented in reviewer-app-build.md.
At a minimum you must:
- extend the
fsi_intake_reviewerrolechoice set - create the Dataverse security role for that reviewer group
- add a role-scoped queue view in the reviewer app
- update
templates/policy-lookup-tables.yaml > reviewer_routing - add role-specific attestation text to
reviewer-notification-card.json - rerun
provision_reviewer_app.ps1or rebuild the reviewer app components manually - retest Standard and Full routing plus the reviewer decision handler
Do not stop after the choice-set change. The flow, card, app, and security model all need to agree.
12. Customer-specific tailoring¶
Most customer tailoring should happen in configuration and tenant setup, not in code forks.
DLP per zone¶
Use these policy areas together:
dlp_connector_groupconnector_allowlistmanaged_environment
A common pattern is to keep Tier 1 and Tier 2 inside businessDataOnly, while allowing a narrower approved set for Tier 3 personal agents.
Environment topology¶
Customers often tailor by:
- separate dev / test / prod environments
- one maker portal URL per environment
- one reviewer app URL per environment
- different MRM or drift targets per environment
If you do this, keep the solution environment variables environment-specific and avoid hard-coding URLs in the flows.
Sensitive-data classifications and residency¶
Customers usually tailor:
- label names
- output classification assumptions
- country allow-lists
- Privacy override ownership
- whether department scope is Zone 2 or Zone 1
Make those changes in policy, then rerun deployment and smoke validation.
13. Upgrading¶
Because this is preview content, expect future version bumps to tighten the schema, reviewer logic, or handoff payloads.
Safe upgrade pattern¶
- review the updated docs and change notes
- apply changes in a lower environment first
- refresh
policy-lookup-tables.yamlwith customer overrides - rerun
deploy.ps1 - rerun smoke tests
- rerun seeded test data if the customer uses the demo lab
When -Teardown makes sense¶
deploy.ps1 -Teardown is best for:
- disposable lab tenants
- early pilot rebuilds before regulated records matter
- schema-reset exercises during development
It is not the right first choice for an environment where retained decision evidence must be preserved. The orchestrator is idempotent, so prefer a re-run over teardown when you are fixing a partial failure.
When you still might use teardown for a major schema change¶
If a future release introduces a breaking schema revision and the environment is still a disposable lab, the fastest path may be:
- export any local notes you want to keep
- run
deploy.ps1 -Teardown - rerun
deploy.ps1 -SeedTestData - rebuild any manual Power Pages pieces the orchestrator could not recreate automatically
14. Troubleshooting¶
Exit-code matrix¶
The deploy exit codes are defined in orchestrator-architecture.md.
| Exit code | Stage | Common causes | Typical remediation |
|---|---|---|---|
10 |
Preflight | Missing pac, az, PowerShell module, Python package, or auth context |
Install the missing tool or module, sign in again, rerun |
20 |
Schema | Dataverse permissions, schema drift, or table/option-set creation failure | Rerun the schema script directly, fix the permission issue, rerun deploy |
30 |
Solution shell | Solution shell missing, connection-reference setup failed, or PAC environment mismatch | Confirm the schema exists, confirm pac env who, rerun Stage 2 via deploy |
40 |
Identity and records | Purview label failure, Agent ID consent issue, feature gating, missing blueprint | Use the manual fallback in identity-records-automation.md, then rerun |
50 |
Maker surface | Power Pages site missing, PAC classic-site limitation, maker portal URL unresolved | Complete the manual portal steps, populate the URL, rerun |
60 |
Reviewer app | Missing rights, spec mismatch, or reviewer app provisioning failure | Check reviewer roles and Dataverse rights, rerun app provisioning |
70 |
Policy hydration | Invalid YAML, unresolved override, or environment-variable write failure | Fix the YAML or override values, rerun |
80 |
Smoke | Required deployment object missing or seeded contract mismatch | Review the failing smoke row, fix the specific dependency, rerun |
90 |
Seed | Fixture creation or downstream seeded check failed | Run cleanup if needed, fix the path-specific issue, rerun seeded deploy |
100 |
Teardown | PAC delete gap or manual follow-up still needed | Review the teardown summary, complete manual items, rerun teardown if needed |
Common failure modes and what they usually mean¶
| Symptom | Likely cause | Fix |
|---|---|---|
| Sponsor card never arrives | Teams connection reference not bound, wrong sponsor UPN, or sponsor timeout path misconfigured | Rebind the Teams connection, verify fsi_sponsorupn, test the sponsor flow directly |
| Reviewer app opens a placeholder URL | fsi_intake_reviewerappurl was never hydrated with the real app link |
Set the real URL or override environment variable, rerun deploy |
| Approved request has no Agent ID | Tenant feature gate, missing blueprint ID, or Graph permission issue | Recheck Stage 3 prerequisites and AGENT_INTAKE_AGENT_BLUEPRINT_ID |
| Cross-border case denies immediately | Country mismatch with no Privacy override or allow-listed pair | Review data_residency, confirm fsi_privacyoverride, resubmit or appeal |
| Full-path request stalls after quorum | fsi_mrmhandoffstatus is pending or failed |
Check the MRM target and the Flow 7 handoff behavior |
| Drift handoff never appears | fsi_status never reached LiveTracking, or drift target not configured |
Verify the registry handoff completed and fsi_intake_driftdetectorenv is correct |
| Teardown leaves artifacts | This is expected for shared labels, classic Power Pages pieces, or shared blueprints | Read the teardown summary and remove only what is safe to remove manually |
15. Where to file issues¶
For product or repository issues, open an issue in the public repo:
- https://github.com/judeper/FSI-AgentGov-Solutions/issues
When you file an issue, include:
- the branch or release tag you deployed
- the exact
deploy.ps1command used - the exit code
- the relevant stage-summary lines
- the structured log file if policy allows you to share it
For tenant-specific incidents, keep the public issue focused on reproducible product behavior and route customer-specific credentials, screenshots, or regulated data through your internal support channel, AI governance lead, or Power Platform support process.