[ESS DA GA] Connect Workday Skill - #290
Surendra Goutham (is-goutham) wants to merge 17 commits into
Conversation
There was a problem hiding this comment.
🟡 Changes recommended
Lifecycle regression handling, routing, readiness persistence, and Dataverse authorization contain blocking correctness and security issues.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
Adds architecture-aware /connect workday support for ESS Declarative Agents and safer per-agent CEA lifecycle handling.
Changes:
- Adds DA HR Workday setup, validation, installation, and authorization workflows.
- Introduces resumable CEA lifecycle state, scoped validation, rollback, and publishing approval.
- Expands FlightCheck and automated tests for DA packages and active-agent scoping.
File summaries
| File | Description |
|---|---|
tests/setup/test_setup_router.py |
Tests architecture-aware routing. |
tests/scripts/test_install_workday_da_extension.py |
Tests DA package installation. |
tests/scripts/test_checkpoint.py |
Tests named scoped rollback. |
tests/flightcheck/test_cli.py |
Tests DA scope isolation. |
tests/flightcheck/test_cli_single_checkpoint.py |
Tests config overlays and agent scoping. |
tests/flightcheck/checks/test_workday_extension.py |
Tests active-agent validation. |
tests/flightcheck/checks/test_workday_da.py |
Tests DA package checks. |
tests/flightcheck/checks/test_entra_app.py |
Tests architecture-specific Entra hints. |
solutions/ess-maker-skills/src/skills/setup/workday-da/verify-connection.md |
Defines final runtime validation. |
solutions/ess-maker-skills/src/skills/setup/workday-da/tasks.md |
Defines the DA checklist. |
solutions/ess-maker-skills/src/skills/setup/workday-da/SKILL.md |
Orchestrates DA Workday setup. |
solutions/ess-maker-skills/src/skills/setup/workday-da/shared/permission-gate.md |
Defines shared role gates. |
solutions/ess-maker-skills/src/skills/setup/workday-da/shared/connection-fields.md |
Defines connection-field validation. |
solutions/ess-maker-skills/src/skills/setup/workday-da/shared/config-schema.md |
Documents DA state schema. |
solutions/ess-maker-skills/src/skills/setup/workday-da/shared/checklist-updater.md |
Persists checklist progress. |
solutions/ess-maker-skills/src/skills/setup/workday-da/provision-entra-app.md |
Guides Entra provisioning. |
solutions/ess-maker-skills/src/skills/setup/workday-da/install-extension.md |
Guides DA package installation. |
solutions/ess-maker-skills/src/skills/setup/workday-da/configure-tenant.md |
Guides Workday tenant setup. |
solutions/ess-maker-skills/src/skills/setup/workday-da/configure-power-platform.md |
Guides Power Platform integration. |
solutions/ess-maker-skills/src/skills/connect/workday/SKILL.md |
Starts installed CEA lifecycle. |
solutions/ess-maker-skills/src/skills/connect/workday/contract.json |
Defines Workday lifecycle phases. |
solutions/ess-maker-skills/src/skills/connect/workday/actions/wire-user-context-redirect.md |
Wires and publishes user context. |
solutions/ess-maker-skills/src/skills/connect/steps.md |
Documents architecture routing. |
solutions/ess-maker-skills/src/skills/connect/step1.md |
Implements integration routing. |
solutions/ess-maker-skills/src/skills/connect/SKILL.md |
Documents connect dispatch. |
solutions/ess-maker-skills/src/skills/connect/shared/lifecycle-runner.md |
Implements resumable lifecycles. |
solutions/ess-maker-skills/src/skills/connect/shared/lifecycle-contract-schema.md |
Documents lifecycle contracts. |
solutions/ess-maker-skills/scripts/install_workday_da_extension.py |
Installs the DA extension package. |
solutions/ess-maker-skills/scripts/flightcheck/registry.py |
Registers the DA checkpoint. |
solutions/ess-maker-skills/scripts/flightcheck/cli.py |
Adds config and agent arguments. |
solutions/ess-maker-skills/scripts/flightcheck/checks/workday_tenant.py |
Generalizes provider config messaging. |
solutions/ess-maker-skills/scripts/flightcheck/checks/workday_extension.py |
Scopes checks to one agent. |
solutions/ess-maker-skills/scripts/flightcheck/checks/workday_da.py |
Validates DA package presence. |
solutions/ess-maker-skills/scripts/flightcheck/checks/_workday_app_assignment.py |
Isolates explicit provider overlays. |
solutions/ess-maker-skills/scripts/checkpoint.py |
Adds named, path-scoped restoration. |
solutions/ess-maker-skills/scripts/alm/README.md |
Documents target-environment authorization. |
solutions/ess-maker-skills/scripts/alm/Enable-CosmosDAFlowAuthorization.ps1 |
Provisions Dataverse flow authorization. |
solutions/ess-maker-skills/README.md |
Documents DA Workday support. |
Review details
Suppressed comments (1)
solutions/ess-maker-skills/scripts/alm/Enable-CosmosDAFlowAuthorization.ps1:278
- When the lookup returns multiple teams, this prints
[FAIL]but leaves$oktrue. If the first team has the requested shares, the script exits 0 even though the documented success condition requires exactly one team and Flow-RP will choose ambiguously. Mark every count other than one as a failed verification.
} else {
Write-Fail "GetTeamsForBotId returned $($teamCheck.Count) teams; Flow-RP takes the first and expects exactly one"
if ($teamCheck.Count -eq 0) { $ok = $false }
- Files reviewed: 38/38 changed files
- Comments generated: 10
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| if ($null -ne $Body) { | ||
| $json = if ($Body -is [string]) { $Body } else { $Body | ConvertTo-Json -Depth 10 } |
There was a problem hiding this comment.
Kept the Microsoft PowerShell file unchanged; setup now blocks missing authorization/team creation until a corrected script is available.
e126ce5 to
c02be82
Compare
c02be82 to
ca4ce46
Compare
…rkday as reference provider - src/skills/connect/shared/lifecycle-contract-schema.md: canonical JSON contract shape a provider supplies (phases, checkpoint gates, role gates, action fragments for mutating steps, pending-scoped-profile annotations). - src/skills/connect/shared/lifecycle-runner.md: the single provider-agnostic routine that shows the plan, collects attestation, live-re-verifies any previously-done phase before trusting it, runs each phase's FlightCheck checkpoints, renders results via the existing checklist-updater.md U.0/U.0a routine, and gates mutating phases through the existing permission-gate.md. Contains zero Workday-specific (or any provider-specific) logic. - src/skills/connect/workday/contract.json: Workday's contract - discovery (WD-PKG-001, DV-CONN-001, WD-CONN-012), agent-wiring (WD-REST-002, a programmatic Environment Maker gate reusing the exact Dataverse security-role query already proven in setup/workday/install-workday-extension-pack.md P5.0), validation (WD-RUN-001). Not-yet-available FlightCheck scoped connect profiles (ADO 7865450) are recorded as a pending annotation only - never fabricated as a passing result. - src/skills/connect/workday/actions/wire-user-context-redirect.md: the one bespoke mutation this provider needs - wiring the agent's User Context topic redirect, with checkpoint/scan/dry-run/push discipline. - src/skills/connect/workday/SKILL.md: thin entry point that hands off to the generic runner. - src/skills/connect/step1.md + SKILL.md: Workday routing now checks whether an extension is already installed anywhere in the environment (live WD-PKG-001 check) before deciding between this lightweight lifecycle and the full setup orchestrator; an already-completed lifecycle resumes through the same live re-verification path rather than a separate fast-path check. A future ISV (ServiceNow, SuccessFactors, ...) reuses this same runner by authoring its own contract.json + action fragments - no changes to the runner itself. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
pendingScopedProfile.tracking referenced an internal Azure DevOps work item ID inside contract.json / the schema reference doc - meaningless to anyone outside this team and unrelated to how the runner behaves. Dropped the whole unused pendingScopedProfile field (the runner never read it); kept the substantive engineering point - that a contract lists individual checkpoints today until FlightCheck ships a consolidated profile - as plain prose in the schema doc, with no internal ID. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Adds /connect workday support for ESS DA agents, including Workday extension package detection and installation, Entra and tenant configuration guidance, resumable validation, and HR/IT multi-vertical support. It also introduces architecture-aware routing and safer per-agent lifecycle handling for existing CEA Workday integrations.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1f6278f to
f0ee1d6
Compare
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Superseded by the focused replacement PR stack:
The replacement stack was reconstructed from the validated final tree rather than cherry-picking the intertwined commits. It also adds fail-closed authorization cardinality checks, validates fallback Dataverse tokens, excludes unrelated telemetry/CLI cosmetic changes, and keeps the setup PR boundaries independently reviewable. Validation: all focused Workday/setup suites pass; the repository-wide run completed with 2,579 passed and 15 skipped. The remaining 11 installer-launch failures reproduce on the current main-based branch and are unrelated to this Workday stack. |
Review: Request changesThe foundation-to-connect handoff is directionally correct: 1. DA Workday readiness is not scoped to the active agentFiles: DA Workday state is stored globally in In a multi-agent workspace, completing Workday for agent A and then selecting agent B allows agent B to consume agent A’s readiness without having its own authorization, topic wiring, or runtime validation. Required change: Separate environment-shared Workday configuration from per-agent progress and readiness. Store agent-specific state under a stable agent key such as 2. Workday’s SAML identifier is conflated with the OAuth App ID URIFiles: The connection reference correctly distinguishes:
The tenant guidance and Required change: Persist and validate separate 3. The
|
Description
Adds /connect workday support for ESS DA agents, including architecture-aware routing, Workday extension package installation for HR and IT, Entra and Workday tenant configuration guidance, resumable validation, and honest configuration status reporting.
Also introduces safer per-agent lifecycle handling for existing CEA Workday integrations, including scoped validation, explicit publish approval, and rollback support.
Related issue
Type of change
• Bug fix (non-breaking change which fixes an issue)
✓ New feature (non-breaking change which adds functionality)
• Breaking change (fix or feature that would cause existing functionality to not work as expected)
✓ Documentation update
✓ Refactor / cleanup
Testing
• Focused Connect Workday and FlightCheck tests: 96 passed
• Full test suite: 2,344 passed, 14 skipped
• The remaining 11 installer-related failures are pre-existing and reproducible on main .
Checklist
✓ My code follows the existing style
✓ I have added/updated tests where applicable
✓ I have updated documentation as needed
Static validation (samples/ only)