fix(flightcheck): explain incomplete setup readiness - #351
Merged
nkemms merged 6 commits intoSep 26, 2026
Merged
Conversation
Keep FlightCheck gated on canonical setup readiness while surfacing the recorded setup blockers that require attention. Centralize the ordered entry contract and use explicit maker-facing message templates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: eff50b3c-427f-453a-8f4a-49848ad02602
…trict-setup-flightcheck-routing
Carry confirmed setup intent through FlightCheck recovery and remove redundant confirmation prompts. End completed setup with stable landing-page, connection, and menu entry points. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace nested setup cancellation dead ends with explicit back routes while retaining cancellation on entry menus. Preserve or reset account context according to observed access evidence. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Probe native MinimalBot and Dataverse identities independently, classify supported ESS families by schema prefix, and keep ALM enrollment distinct from agent existence. Stop unsupported or ambiguous agents with explicit recovery UX while preserving authoritative access and failure evidence. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: c820c60f-79a3-4b3d-ac32-3a309689c1ca
amilandi
approved these changes
Sep 26, 2026
amilandi
left a comment
Contributor
There was a problem hiding this comment.
LGTM. Traced the dual-store probe, router contract, decision matrix, and UX changes — no issues at any severity.
Confirmed:
probe_native_identityandprobe_dataverse_identityare fully independent CLI entries in a mutually-exclusive group; regression test asserts the native probe never touches the dataverse resolver.- HTTP failure taxonomy (401 → auth-required, 403 → access-denied, 404 → not-found, other → uncertain) mapped uniformly for both
AgentBuilderHTTPErrorandrequests.HTTPError; parametrized coverage present. _exception_evidencepreservesstatus_code/error_code/request_idthrough a bounded__cause__/__context__chain; no bare-except swallows evidence._resolve_dataverse_urlsentinel is now raised asAPIErrorand caught into astage: "environment-resolution"failure — 401/403 are preserved (asserted bytest_environment_resolution_preserves_permission_failure). DroppedSystemExit/AuthExpiredErrorare safe on this path (MSALsys.exitis import-time only;AuthExpiredErroris only raised bydataverse_get/query_all, neither of which runs here).- The four FlightCheck router states in
copilot-instructions.mdare gated by "Apply the first matching state" and are exhaustive;flightcheck.prompt.mdandflightcheck/SKILL.mddelegate to the entry contract rather than carrying parallel gates. setup_existing_da.inspect_agent_routeconverts only 404 →almEnrollment: "not-enrolled"; 401/403/5xx re-raise.STUDIO_RING_BY_HOSTuntouched.- Every
da-*.mdrecovery prompt replaces**Cancel setup**with**Go back**and documents the back-target; destructive actions and the compatible-kit selection retain explicit "do not preselect" clauses. - Schema classification splits
msdyn_...(compatible-kit) vsgptagent_...(DA-GA), casefold-normalized and tested.
Thanks for the strict-setup rework — the "one ordered entry contract" refactor is a nice cleanup.
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
FlightCheck remains gated until canonical setup readiness is complete. When setup is incomplete, routing now preserves the recorded readiness blockers instead of replacing them with generic
/setupguidance. Foundation Setup also reconciles selected agents across native MinimalBot and Dataverse storage before entering DA-only work.Description
The global router defines one ordered FlightCheck entry contract for standalone installations, completed canonical setup, materialized workspaces with readiness outstanding, and workspaces that still require preparation. The FlightCheck prompt and skill delegate to that contract rather than carrying separate gates.
For materialized workspaces, routing collects and deduplicates recorded
failure_causes, maps internal steps to maker-facing readiness labels, and preserves service status, error codes, request IDs, and remediation. A neutral readiness template covers incomplete steps without a recorded cause.Foundation Setup independently probes the native MinimalBot and Dataverse exact-ID endpoints. The URL backend only determines probe order. Product family comes from supported schema prefixes, while existence, backend, access, supportability, and ALM enrollment remain separate decisions.
ADO Bug 7947735.
Fixes
/setupredirect.main-cakit and native DA-GA agents to the existing DA setup path.not-enrolled, not as a missing agent.Outcome
FlightCheck requests follow the strict setup-first model while keeping readiness failures visible and actionable. Foundation Setup identifies the selected agent without assuming its storage backend, enters only supported authoring paths, and stops with explicit recovery choices when evidence is ambiguous or unsupported.
Testing
Test
flightcheck-strict-setup-routing/setupwelcome replaces blocker detailsnot-enrolled