feature-map/azure-devops.md
Rama main · réplica de lectura del repositorio original.
# Azure DevOps pull requests
Azure DevOps Services sessions show pull requests in the shared Pull Requests
panel, composer controls, and Canvas cards. The execution host's PAT or Azure
CLI sign-in reads the request. The panel identifies Azure requests with `!`.
## Sub-features
- `summary`: organization/project/repository, request title, description and status.
- `comments`: request comments on their own tab, whose label shows the count.
- `changes`: local file diff and expanded context pinned to displayed revisions, with a path filter and copy-path and open actions. Find searches the fetched patch from the toolbar search button, or Cmd/Ctrl+F while focus is in the Changes tab.
- `associations`: link, select and unlink a request from another repository.
- `partial`: retain loaded results and explain incomplete data or unavailable diffs.
- `auth`: an authenticated PAT works without the Azure CLI; account switching is absent.
- `tracking`: supported successful agent mutations associate their resulting request.
- `render-recovery`: Panel render failures offer **Try again** without removing
chat, Workspace tabs or mobile Close.
## How to get to it (user POV)
- `desktop-rail`: open Workspace and choose Pull Requests.
- `desktop-composer`: click the request number beside the session composer.
Hover it to open a request in a new tab from the status preview; see
[pull-request-conversations.md](pull-request-conversations.md).
- `mobile-composer`: tap the request number to open the full-screen panel.
- `canvas`: when Canvas is enabled, follow a request link on a session card.
- `agent-tool`: create or update a request through the session's agent tools.
A session with one PR opens its details directly under **Pull Requests**.
With multiple PRs, select a row in the list to open its details;
**All pull requests** returns to the list. Stored metadata and unlinking remain
available while the host is offline; checks and merge controls resume after
reconnection.
On desktop, mobile and Canvas, **Try again** retries failed panel content;
switching sessions also clears a failed panel. Healthy chat drafts stay mounted.
## Driving it with the repro environment
Preconditions: use the [Verify Omnigent skill](skills/verify-omnigent/SKILL.md)
and an isolated instance. Browser fixtures replace provider responses and do
not contact Azure DevOps or invoke the Azure CLI.
Shared render recovery has component coverage in
`web/src/components/RenderErrorBoundary.test.tsx` and
`web/src/shell/AppShell.pullRequestTabVisibility.test.tsx`. For each panel entry
above, inject a panel render exception, confirm chat and tab/Close controls
remain usable, clear the fault, and choose **Try again**. Switching sessions
should also recover. This is separate from provider authentication failures.
- `desktop-rail`, `desktop-composer`, and `mobile-composer`:
`tests/e2e_ui/azure_devops/test_azure_devops_tab.py::test_azure_devops_tab_shows_provider_repo_and_pull_request`
opens Summary and Changes, then expands unchanged context. The rail variant
also proves a signed-in credential works without the Azure CLI.
- Associations:
`tests/e2e_ui/azure_devops/test_azure_devops_tab.py::test_azure_link_select_unlink_explains_outside_workspace_diff`
links another repository's request, shows its diff limitation, switches
selection and removes it.
- Partial and unsupported states:
`tests/e2e_ui/azure_devops/test_azure_devops_tab.py::test_azure_partial_results_keep_loaded_data_and_explain_unavailable_diff`
and
`tests/e2e_ui/azure_devops/test_azure_devops_tab.py::test_unsupported_remote_shows_empty_state_without_a_provider_name`
check visible explanations, including the Comments tab's incomplete-list
notice, without implying an empty successful response.
- `canvas`:
`tests/e2e_ui/azure_devops/test_azure_devops_tab.py::test_azure_canvas_link_uses_provider_identity`
checks the request's `!` number and exact external URL.
- `agent-tool`: browser fixtures do not verify automatic tracking. Use a permitted
test repository and the [observer instructions](../docs/AZURE_DEVOPS.md#observer-limits);
after a successful supported creation or update, confirm the resulting request
appears in the panel. Reads and comments must not add an association.
## Gotchas
- The tab retains the generic Pull Requests label; its provider heading, number
and Canvas link use Azure DevOps metadata.
- An authenticated PAT does not require the Azure CLI. Managed sandbox credential
provisioning and Azure DevOps Server on premises are separate features.
- Linked requests outside the checkout can show a summary but have no local
diff. Missing commits may finish fetching in the background; refresh to retry.
- Mocked browser evidence proves rendering and interaction, not live account
access, local git fetching, or native agent tracking.
- Keep screenshots and recordings outside the tracked tree.