> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bijection.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Azure DevOps

> Resources, examples, configuration and evidence for Azure DevOps.

Use the `@bijection/connectors/azure-devops` entrypoint to declare Azure DevOps resources.

## Availability

This page describes the pinned source package. Published availability is unestablished for this artifact. [Source build and package availability](https://docs.bijection.com/client/sdk-distribution.md).

## Resources and modes

| Resource | Mode | Description |
| - | - | - |
| Work items | `pull` | WIQL watermark, recycle-bin withdrawal and a state change conditioned on rev |
| Git repositories | `pull` | Repository metadata with deleted-repository withdrawal |
| Pipeline runs | `pull` | Completed builds by finish time |

Declare a resource in application code, then bind deployment-specific settings and credentials. See [typed resources](https://docs.bijection.com/integrations/resources.md), [connections](https://docs.bijection.com/integrations/connections.md) and [source inspection](https://docs.bijection.com/integrations/cli.md).

## Work items

### pull: WIQL watermark, recycle-bin withdrawal and a state change conditioned on rev

The following example matches configuration `standard`.

```ts theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
import { azureDevOps } from "@bijection/connectors/azure-devops";

export const workItems = azureDevOps.workItems.pull({});
```

> **Inferred record types**
>
> ```ts theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> Resource without an operational record table
> ```

#### Configuration: standard

Case: `azure-devops/workItems/pull/standard`.

Connection and resource configuration are declared by this exact case.

Credential kind: `azure-devops`. Keep credential material in the private credential inventory.

| Setting | Type | Required | Owner |
| - | - | - | - |
| `organization` | string | Yes | Shared connection |
| `project` | string | Yes | Shared connection |

Provider setup requirements:

```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
[
  {
    "key": "organization",
    "supplier": "account",
    "label": "Azure DevOps organization",
    "help": "The name after dev.azure.com/ in your organization's address.",
    "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/create-organization",
    "example": "fabrikam",
    "prefix": "https://dev.azure.com/",
    "suffix": "/",
    "pattern": "[A-Za-z0-9](?:[A-Za-z0-9-]{0,47}[A-Za-z0-9])?",
    "minLength": 1,
    "maxLength": 49
  },
  {
    "key": "project",
    "supplier": "account",
    "label": "Azure DevOps project",
    "help": "The project's name or id, as it appears after the organization in its address.",
    "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/settings/naming-restrictions",
    "example": "Fabrikam-Fiber",
    "pattern": "[A-Za-z0-9][A-Za-z0-9 ._-]{0,63}",
    "minLength": 1,
    "maxLength": 64
  }
]
```

> **Complete configuration contract**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "setup": [
>     {
>       "key": "organization",
>       "supplier": "account",
>       "label": "Azure DevOps organization",
>       "help": "The name after dev.azure.com/ in your organization's address.",
>       "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/create-organization",
>       "example": "fabrikam",
>       "prefix": "https://dev.azure.com/",
>       "suffix": "/",
>       "pattern": "[A-Za-z0-9](?:[A-Za-z0-9-]{0,47}[A-Za-z0-9])?",
>       "minLength": 1,
>       "maxLength": 49
>     },
>     {
>       "key": "project",
>       "supplier": "account",
>       "label": "Azure DevOps project",
>       "help": "The project's name or id, as it appears after the organization in its address.",
>       "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/settings/naming-restrictions",
>       "example": "Fabrikam-Fiber",
>       "pattern": "[A-Za-z0-9][A-Za-z0-9 ._-]{0,63}",
>       "minLength": 1,
>       "maxLength": 64
>     }
>   ],
>   "resource": {
>     "access": {},
>     "defaults": {},
>     "connector": "azure-devops",
>     "output": {
>       "kind": "single",
>       "collection": "workItems"
>     },
>     "credential_kind": "azure-devops",
>     "connection_fields": [
>       "organization",
>       "project"
>     ],
>     "address": {
>       "kind": "path",
>       "base": "https://dev.azure.com/",
>       "segments": [
>         {
>           "field": "organization"
>         }
>       ]
>     }
>   },
>   "connection_setup": {
>     "type": "object",
>     "value": {
>       "organization": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "project": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       }
>     }
>   },
>   "execution": null
> }
> ```

Native admission analysis is available for this exact declaration.

**Collection: workItems**

| Contract | Meaning |
| - | - |
| Initial | Enumeration of observed records |
| Changes | Repeated observations of current records |
| Deletions | Explicit deletion evidence |
| Resume | No continuation |
| Gap | Not applicable |
| Retention | Unspecified |

> **Complete native profile**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "movement": {
>     "exchanges": {
>       "batch": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       },
>       "recycled": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "404": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       },
>       "wiql": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       },
>       "workItem": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "404": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       }
>     },
>     "nativeInputLimitBytes": null,
>     "steps": [
>       {
>         "id": "acquire.1",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange batch",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "acquire.2",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange recycled",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "acquire.3",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange wiql",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "acquire.4",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange workItem",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "retain.1",
>         "inputs": [
>           "acquire.1",
>           "acquire.2",
>           "acquire.3",
>           "acquire.4"
>         ],
>         "action": {
>           "operation": "retain",
>           "subject": "acquisition evidence",
>           "reason": "recovery",
>           "release": "acquisition_custody"
>         }
>       },
>       {
>         "id": "interpret.1",
>         "inputs": [
>           "retain.1"
>         ],
>         "action": {
>           "operation": "interpret",
>           "subject": "acquired input",
>           "produces": "records"
>         }
>       },
>       {
>         "id": "materialize.1",
>         "inputs": [
>           "interpret.1"
>         ],
>         "action": {
>           "operation": "materialize",
>           "subject": "source rows",
>           "reason": "serving",
>           "release": "replacement"
>         }
>       },
>       {
>         "id": "publish.1",
>         "inputs": [
>           "materialize.1"
>         ],
>         "action": {
>           "operation": "publish",
>           "subject": "source rows",
>           "visibility": "with_acquisition"
>         }
>       }
>     ]
>   },
>   "initial": "enumeration",
>   "changes": "observations",
>   "deletions": "explicit_events",
>   "resume": "none",
>   "retentionMs": null,
>   "gap": "not_applicable",
>   "limits": {
>     "http_response_bytes": "524288"
>   },
>   "restrictions": [],
>   "commands": {}
> }
> ```

> **Commands, occurrences and artifacts**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "records": {
>     "workItems": {
>       "protocol": "record_observation",
>       "coverage": "records",
>       "consistency": "observations",
>       "atomicity": "record",
>       "history": "observations",
>       "recordRefresh": true,
>       "reconciliation": true,
>       "notifications": false,
>       "snapshotMaxRows": null,
>       "profile": {
>         "movement": {
>           "exchanges": {
>             "batch": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             },
>             "recycled": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "404": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             },
>             "wiql": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             },
>             "workItem": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "404": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             }
>           },
>           "nativeInputLimitBytes": null,
>           "steps": [
>             {
>               "id": "acquire.1",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange batch",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "acquire.2",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange recycled",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "acquire.3",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange wiql",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "acquire.4",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange workItem",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "retain.1",
>               "inputs": [
>                 "acquire.1",
>                 "acquire.2",
>                 "acquire.3",
>                 "acquire.4"
>               ],
>               "action": {
>                 "operation": "retain",
>                 "subject": "acquisition evidence",
>                 "reason": "recovery",
>                 "release": "acquisition_custody"
>               }
>             },
>             {
>               "id": "interpret.1",
>               "inputs": [
>                 "retain.1"
>               ],
>               "action": {
>                 "operation": "interpret",
>                 "subject": "acquired input",
>                 "produces": "records"
>               }
>             },
>             {
>               "id": "materialize.1",
>               "inputs": [
>                 "interpret.1"
>               ],
>               "action": {
>                 "operation": "materialize",
>                 "subject": "source rows",
>                 "reason": "serving",
>                 "release": "replacement"
>               }
>             },
>             {
>               "id": "publish.1",
>               "inputs": [
>                 "materialize.1"
>               ],
>               "action": {
>                 "operation": "publish",
>                 "subject": "source rows",
>                 "visibility": "with_acquisition"
>               }
>             }
>           ]
>         },
>         "initial": "enumeration",
>         "changes": "observations",
>         "deletions": "explicit_events",
>         "resume": "none",
>         "retentionMs": null,
>         "gap": "not_applicable",
>         "limits": {
>           "http_response_bytes": "524288"
>         },
>         "restrictions": [],
>         "commands": {}
>       }
>     }
>   },
>   "occurrences": null,
>   "artifacts": {
>     "raw_archive": false,
>     "native_file_transfer_limit_bytes": null,
>     "external_versions": false,
>     "files": {}
>   },
>   "commands": {}
> }
> ```

**Recorded checks**

| Requirement | Scope | Evidence | Result |
| - | - | - | - |
| page-publication-recovery | \{"kind":"collection","name":"workItems"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |
| backoff-stated-wait | \{"kind":"connection"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |
| identity-account | \{"kind":"connection"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |

Hosted qualification: **unestablished for this catalog configuration**. Installed connections report their own identity, authority and current status.

#### Configuration: writes

Case: `azure-devops/workItems/pull/writes`.

Connection and resource configuration are declared by this exact case.

Credential kind: `azure-devops`. Keep credential material in the private credential inventory.

| Setting | Type | Required | Owner |
| - | - | - | - |
| `organization` | string | Yes | Shared connection |
| `project` | string | Yes | Shared connection |

Provider setup requirements:

```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
[
  {
    "key": "organization",
    "supplier": "account",
    "label": "Azure DevOps organization",
    "help": "The name after dev.azure.com/ in your organization's address.",
    "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/create-organization",
    "example": "fabrikam",
    "prefix": "https://dev.azure.com/",
    "suffix": "/",
    "pattern": "[A-Za-z0-9](?:[A-Za-z0-9-]{0,47}[A-Za-z0-9])?",
    "minLength": 1,
    "maxLength": 49
  },
  {
    "key": "project",
    "supplier": "account",
    "label": "Azure DevOps project",
    "help": "The project's name or id, as it appears after the organization in its address.",
    "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/settings/naming-restrictions",
    "example": "Fabrikam-Fiber",
    "pattern": "[A-Za-z0-9][A-Za-z0-9 ._-]{0,63}",
    "minLength": 1,
    "maxLength": 64
  }
]
```

> **Complete configuration contract**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "setup": [
>     {
>       "key": "organization",
>       "supplier": "account",
>       "label": "Azure DevOps organization",
>       "help": "The name after dev.azure.com/ in your organization's address.",
>       "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/create-organization",
>       "example": "fabrikam",
>       "prefix": "https://dev.azure.com/",
>       "suffix": "/",
>       "pattern": "[A-Za-z0-9](?:[A-Za-z0-9-]{0,47}[A-Za-z0-9])?",
>       "minLength": 1,
>       "maxLength": 49
>     },
>     {
>       "key": "project",
>       "supplier": "account",
>       "label": "Azure DevOps project",
>       "help": "The project's name or id, as it appears after the organization in its address.",
>       "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/settings/naming-restrictions",
>       "example": "Fabrikam-Fiber",
>       "pattern": "[A-Za-z0-9][A-Za-z0-9 ._-]{0,63}",
>       "minLength": 1,
>       "maxLength": 64
>     }
>   ],
>   "resource": {
>     "access": {},
>     "defaults": {},
>     "connector": "azure-devops",
>     "output": {
>       "kind": "single",
>       "collection": "workItems"
>     },
>     "credential_kind": "azure-devops",
>     "connection_fields": [
>       "organization",
>       "project"
>     ],
>     "address": {
>       "kind": "path",
>       "base": "https://dev.azure.com/",
>       "segments": [
>         {
>           "field": "organization"
>         }
>       ]
>     }
>   },
>   "connection_setup": {
>     "type": "object",
>     "value": {
>       "organization": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "project": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       }
>     }
>   },
>   "execution": null
> }
> ```

Native admission analysis is available for this exact declaration.

**Collection: workItems**

| Contract | Meaning |
| - | - |
| Initial | Enumeration of observed records |
| Changes | Repeated observations of current records |
| Deletions | Explicit deletion evidence |
| Resume | No continuation |
| Gap | Not applicable |
| Retention | Unspecified |

> **Complete native profile**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "movement": {
>     "exchanges": {
>       "batch": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       },
>       "recycled": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "404": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       },
>       "wiql": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       },
>       "workItem": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "404": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       }
>     },
>     "nativeInputLimitBytes": null,
>     "steps": [
>       {
>         "id": "acquire.1",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange batch",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "acquire.2",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange recycled",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "acquire.3",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange wiql",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "acquire.4",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange workItem",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "retain.1",
>         "inputs": [
>           "acquire.1",
>           "acquire.2",
>           "acquire.3",
>           "acquire.4"
>         ],
>         "action": {
>           "operation": "retain",
>           "subject": "acquisition evidence",
>           "reason": "recovery",
>           "release": "acquisition_custody"
>         }
>       },
>       {
>         "id": "interpret.1",
>         "inputs": [
>           "retain.1"
>         ],
>         "action": {
>           "operation": "interpret",
>           "subject": "acquired input",
>           "produces": "records"
>         }
>       },
>       {
>         "id": "materialize.1",
>         "inputs": [
>           "interpret.1"
>         ],
>         "action": {
>           "operation": "materialize",
>           "subject": "source rows",
>           "reason": "serving",
>           "release": "replacement"
>         }
>       },
>       {
>         "id": "publish.1",
>         "inputs": [
>           "materialize.1"
>         ],
>         "action": {
>           "operation": "publish",
>           "subject": "source rows",
>           "visibility": "with_acquisition"
>         }
>       }
>     ]
>   },
>   "initial": "enumeration",
>   "changes": "observations",
>   "deletions": "explicit_events",
>   "resume": "none",
>   "retentionMs": null,
>   "gap": "not_applicable",
>   "limits": {
>     "http_response_bytes": "524288"
>   },
>   "restrictions": [],
>   "commands": {
>     "setState": {
>       "target": "workItems",
>       "delivery": "single_attempt",
>       "condition": "target_version",
>       "replayWindowMs": null,
>       "maxDeliveryHours": "1",
>       "providerEnforcedExpiry": false
>     }
>   }
> }
> ```

**Commands**

| Command | Target | Condition | Delivery |
| - | - | - | - |
| `setState` | workItems | Target version precondition | Single dispatch attempt |

> **Commands, occurrences and artifacts**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "records": {
>     "workItems": {
>       "protocol": "record_observation",
>       "coverage": "records",
>       "consistency": "observations",
>       "atomicity": "record",
>       "history": "observations",
>       "recordRefresh": true,
>       "reconciliation": true,
>       "notifications": false,
>       "snapshotMaxRows": null,
>       "profile": {
>         "movement": {
>           "exchanges": {
>             "batch": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             },
>             "recycled": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "404": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             },
>             "wiql": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             },
>             "workItem": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "404": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             }
>           },
>           "nativeInputLimitBytes": null,
>           "steps": [
>             {
>               "id": "acquire.1",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange batch",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "acquire.2",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange recycled",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "acquire.3",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange wiql",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "acquire.4",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange workItem",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "retain.1",
>               "inputs": [
>                 "acquire.1",
>                 "acquire.2",
>                 "acquire.3",
>                 "acquire.4"
>               ],
>               "action": {
>                 "operation": "retain",
>                 "subject": "acquisition evidence",
>                 "reason": "recovery",
>                 "release": "acquisition_custody"
>               }
>             },
>             {
>               "id": "interpret.1",
>               "inputs": [
>                 "retain.1"
>               ],
>               "action": {
>                 "operation": "interpret",
>                 "subject": "acquired input",
>                 "produces": "records"
>               }
>             },
>             {
>               "id": "materialize.1",
>               "inputs": [
>                 "interpret.1"
>               ],
>               "action": {
>                 "operation": "materialize",
>                 "subject": "source rows",
>                 "reason": "serving",
>                 "release": "replacement"
>               }
>             },
>             {
>               "id": "publish.1",
>               "inputs": [
>                 "materialize.1"
>               ],
>               "action": {
>                 "operation": "publish",
>                 "subject": "source rows",
>                 "visibility": "with_acquisition"
>               }
>             }
>           ]
>         },
>         "initial": "enumeration",
>         "changes": "observations",
>         "deletions": "explicit_events",
>         "resume": "none",
>         "retentionMs": null,
>         "gap": "not_applicable",
>         "limits": {
>           "http_response_bytes": "524288"
>         },
>         "restrictions": [],
>         "commands": {
>           "setState": {
>             "target": "workItems",
>             "delivery": "single_attempt",
>             "condition": "target_version",
>             "replayWindowMs": null,
>             "maxDeliveryHours": "1",
>             "providerEnforcedExpiry": false
>           }
>         }
>       }
>     }
>   },
>   "occurrences": null,
>   "artifacts": {
>     "raw_archive": false,
>     "native_file_transfer_limit_bytes": null,
>     "external_versions": false,
>     "files": {}
>   },
>   "commands": {
>     "setState": {
>       "target": "workItems",
>       "condition": {
>         "kind": "target_version",
>         "from": {
>           "kind": "record_version"
>         }
>       },
>       "delivery": {
>         "kind": "single_attempt",
>         "retention": {
>           "kind": "unknown"
>         },
>         "max_delivery_hours": 1
>       }
>     }
>   }
> }
> ```

**Recorded checks**

| Requirement | Scope | Evidence | Result |
| - | - | - | - |
| page-publication-recovery | \{"kind":"collection","name":"workItems"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |
| command-response-lost | \{"kind":"command","name":"setState"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |
| backoff-stated-wait | \{"kind":"connection"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |
| identity-account | \{"kind":"connection"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |

Hosted qualification: **unestablished for this catalog configuration**. Installed connections report their own identity, authority and current status.

## Git repositories

### pull: Repository metadata with deleted-repository withdrawal

The following example matches configuration `standard`.

```ts theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
import { azureDevOps } from "@bijection/connectors/azure-devops";
export const repositories = azureDevOps.repositories.pull();
```

> **Inferred record types**
>
> ```ts theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> Resource without an operational record table
> ```

#### Configuration: standard

Case: `azure-devops/repositories/pull/standard`.

Connection and resource configuration are declared by this exact case.

Credential kind: `azure-devops`. Keep credential material in the private credential inventory.

| Setting | Type | Required | Owner |
| - | - | - | - |
| `organization` | string | Yes | Shared connection |
| `project` | string | Yes | Shared connection |

Provider setup requirements:

```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
[
  {
    "key": "organization",
    "supplier": "account",
    "label": "Azure DevOps organization",
    "help": "The name after dev.azure.com/ in your organization's address.",
    "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/create-organization",
    "example": "fabrikam",
    "prefix": "https://dev.azure.com/",
    "suffix": "/",
    "pattern": "[A-Za-z0-9](?:[A-Za-z0-9-]{0,47}[A-Za-z0-9])?",
    "minLength": 1,
    "maxLength": 49
  },
  {
    "key": "project",
    "supplier": "account",
    "label": "Azure DevOps project",
    "help": "The project's name or id, as it appears after the organization in its address.",
    "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/settings/naming-restrictions",
    "example": "Fabrikam-Fiber",
    "pattern": "[A-Za-z0-9][A-Za-z0-9 ._-]{0,63}",
    "minLength": 1,
    "maxLength": 64
  }
]
```

> **Complete configuration contract**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "setup": [
>     {
>       "key": "organization",
>       "supplier": "account",
>       "label": "Azure DevOps organization",
>       "help": "The name after dev.azure.com/ in your organization's address.",
>       "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/create-organization",
>       "example": "fabrikam",
>       "prefix": "https://dev.azure.com/",
>       "suffix": "/",
>       "pattern": "[A-Za-z0-9](?:[A-Za-z0-9-]{0,47}[A-Za-z0-9])?",
>       "minLength": 1,
>       "maxLength": 49
>     },
>     {
>       "key": "project",
>       "supplier": "account",
>       "label": "Azure DevOps project",
>       "help": "The project's name or id, as it appears after the organization in its address.",
>       "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/settings/naming-restrictions",
>       "example": "Fabrikam-Fiber",
>       "pattern": "[A-Za-z0-9][A-Za-z0-9 ._-]{0,63}",
>       "minLength": 1,
>       "maxLength": 64
>     }
>   ],
>   "resource": {
>     "access": {},
>     "defaults": {},
>     "connector": "azure-devops",
>     "output": {
>       "kind": "single",
>       "collection": "repositories"
>     },
>     "credential_kind": "azure-devops",
>     "connection_fields": [
>       "organization",
>       "project"
>     ],
>     "address": {
>       "kind": "path",
>       "base": "https://dev.azure.com/",
>       "segments": [
>         {
>           "field": "organization"
>         }
>       ]
>     }
>   },
>   "connection_setup": {
>     "type": "object",
>     "value": {
>       "organization": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "project": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       }
>     }
>   },
>   "execution": null
> }
> ```

Native admission analysis is available for this exact declaration.

**Collection: repositories**

| Contract | Meaning |
| - | - |
| Initial | Enumeration of observed records |
| Changes | Repeated observations of current records |
| Deletions | Explicit deletion evidence |
| Resume | No continuation |
| Gap | Not applicable |
| Retention | Unspecified |

> **Complete native profile**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "movement": {
>     "exchanges": {
>       "deleted": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       },
>       "list": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       }
>     },
>     "nativeInputLimitBytes": null,
>     "steps": [
>       {
>         "id": "acquire.1",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange deleted",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "acquire.2",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange list",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "retain.1",
>         "inputs": [
>           "acquire.1",
>           "acquire.2"
>         ],
>         "action": {
>           "operation": "retain",
>           "subject": "acquisition evidence",
>           "reason": "recovery",
>           "release": "acquisition_custody"
>         }
>       },
>       {
>         "id": "interpret.1",
>         "inputs": [
>           "retain.1"
>         ],
>         "action": {
>           "operation": "interpret",
>           "subject": "acquired input",
>           "produces": "records"
>         }
>       },
>       {
>         "id": "materialize.1",
>         "inputs": [
>           "interpret.1"
>         ],
>         "action": {
>           "operation": "materialize",
>           "subject": "source rows",
>           "reason": "serving",
>           "release": "replacement"
>         }
>       },
>       {
>         "id": "publish.1",
>         "inputs": [
>           "materialize.1"
>         ],
>         "action": {
>           "operation": "publish",
>           "subject": "source rows",
>           "visibility": "with_acquisition"
>         }
>       }
>     ]
>   },
>   "initial": "enumeration",
>   "changes": "observations",
>   "deletions": "explicit_events",
>   "resume": "none",
>   "retentionMs": null,
>   "gap": "not_applicable",
>   "limits": {
>     "http_response_bytes": "524288"
>   },
>   "restrictions": [],
>   "commands": {}
> }
> ```

> **Commands, occurrences and artifacts**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "records": {
>     "repositories": {
>       "protocol": "record_observation",
>       "coverage": "records",
>       "consistency": "observations",
>       "atomicity": "record",
>       "history": "observations",
>       "recordRefresh": false,
>       "reconciliation": false,
>       "notifications": false,
>       "snapshotMaxRows": null,
>       "profile": {
>         "movement": {
>           "exchanges": {
>             "deleted": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             },
>             "list": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             }
>           },
>           "nativeInputLimitBytes": null,
>           "steps": [
>             {
>               "id": "acquire.1",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange deleted",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "acquire.2",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange list",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "retain.1",
>               "inputs": [
>                 "acquire.1",
>                 "acquire.2"
>               ],
>               "action": {
>                 "operation": "retain",
>                 "subject": "acquisition evidence",
>                 "reason": "recovery",
>                 "release": "acquisition_custody"
>               }
>             },
>             {
>               "id": "interpret.1",
>               "inputs": [
>                 "retain.1"
>               ],
>               "action": {
>                 "operation": "interpret",
>                 "subject": "acquired input",
>                 "produces": "records"
>               }
>             },
>             {
>               "id": "materialize.1",
>               "inputs": [
>                 "interpret.1"
>               ],
>               "action": {
>                 "operation": "materialize",
>                 "subject": "source rows",
>                 "reason": "serving",
>                 "release": "replacement"
>               }
>             },
>             {
>               "id": "publish.1",
>               "inputs": [
>                 "materialize.1"
>               ],
>               "action": {
>                 "operation": "publish",
>                 "subject": "source rows",
>                 "visibility": "with_acquisition"
>               }
>             }
>           ]
>         },
>         "initial": "enumeration",
>         "changes": "observations",
>         "deletions": "explicit_events",
>         "resume": "none",
>         "retentionMs": null,
>         "gap": "not_applicable",
>         "limits": {
>           "http_response_bytes": "524288"
>         },
>         "restrictions": [],
>         "commands": {}
>       }
>     }
>   },
>   "occurrences": null,
>   "artifacts": {
>     "raw_archive": false,
>     "native_file_transfer_limit_bytes": null,
>     "external_versions": false,
>     "files": {}
>   },
>   "commands": {}
> }
> ```

**Recorded checks**

| Requirement | Scope | Evidence | Result |
| - | - | - | - |
| page-publication-recovery | \{"kind":"collection","name":"repositories"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |
| backoff-stated-wait | \{"kind":"connection"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |
| identity-account | \{"kind":"connection"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |

Hosted qualification: **unestablished for this catalog configuration**. Installed connections report their own identity, authority and current status.

## Pipeline runs

### pull: Completed builds by finish time

The following example matches configuration `standard`.

```ts theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
import { azureDevOps } from "@bijection/connectors/azure-devops";
export const runs = azureDevOps.pipelineRuns.pull();
```

> **Inferred record types**
>
> ```ts theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> Resource without an operational record table
> ```

#### Configuration: standard

Case: `azure-devops/pipelineRuns/pull/standard`.

Connection and resource configuration are declared by this exact case.

Credential kind: `azure-devops`. Keep credential material in the private credential inventory.

| Setting | Type | Required | Owner |
| - | - | - | - |
| `organization` | string | Yes | Shared connection |
| `project` | string | Yes | Shared connection |

Provider setup requirements:

```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
[
  {
    "key": "organization",
    "supplier": "account",
    "label": "Azure DevOps organization",
    "help": "The name after dev.azure.com/ in your organization's address.",
    "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/create-organization",
    "example": "fabrikam",
    "prefix": "https://dev.azure.com/",
    "suffix": "/",
    "pattern": "[A-Za-z0-9](?:[A-Za-z0-9-]{0,47}[A-Za-z0-9])?",
    "minLength": 1,
    "maxLength": 49
  },
  {
    "key": "project",
    "supplier": "account",
    "label": "Azure DevOps project",
    "help": "The project's name or id, as it appears after the organization in its address.",
    "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/settings/naming-restrictions",
    "example": "Fabrikam-Fiber",
    "pattern": "[A-Za-z0-9][A-Za-z0-9 ._-]{0,63}",
    "minLength": 1,
    "maxLength": 64
  }
]
```

> **Complete configuration contract**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "setup": [
>     {
>       "key": "organization",
>       "supplier": "account",
>       "label": "Azure DevOps organization",
>       "help": "The name after dev.azure.com/ in your organization's address.",
>       "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/create-organization",
>       "example": "fabrikam",
>       "prefix": "https://dev.azure.com/",
>       "suffix": "/",
>       "pattern": "[A-Za-z0-9](?:[A-Za-z0-9-]{0,47}[A-Za-z0-9])?",
>       "minLength": 1,
>       "maxLength": 49
>     },
>     {
>       "key": "project",
>       "supplier": "account",
>       "label": "Azure DevOps project",
>       "help": "The project's name or id, as it appears after the organization in its address.",
>       "docUrl": "https://learn.microsoft.com/en-us/azure/devops/organizations/settings/naming-restrictions",
>       "example": "Fabrikam-Fiber",
>       "pattern": "[A-Za-z0-9][A-Za-z0-9 ._-]{0,63}",
>       "minLength": 1,
>       "maxLength": 64
>     }
>   ],
>   "resource": {
>     "access": {},
>     "defaults": {},
>     "connector": "azure-devops",
>     "output": {
>       "kind": "single",
>       "collection": "pipelineRuns"
>     },
>     "credential_kind": "azure-devops",
>     "connection_fields": [
>       "organization",
>       "project"
>     ],
>     "address": {
>       "kind": "path",
>       "base": "https://dev.azure.com/",
>       "segments": [
>         {
>           "field": "organization"
>         }
>       ]
>     }
>   },
>   "connection_setup": {
>     "type": "object",
>     "value": {
>       "organization": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "project": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       }
>     }
>   },
>   "execution": null
> }
> ```

Native admission analysis is available for this exact declaration.

**Collection: pipelineRuns**

| Contract | Meaning |
| - | - |
| Initial | Enumeration of observed records |
| Changes | Repeated observations of current records |
| Deletions | Explicit deletion evidence |
| Resume | Opaque cursor |
| Gap | Explicit repair required after a gap |
| Retention | Unspecified |

> **Complete native profile**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "movement": {
>     "exchanges": {
>       "changed": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       },
>       "run": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       },
>       "runs": {
>         "200": {
>           "placement": "retained_bytes",
>           "interpretation": "json",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         },
>         "429": {
>           "placement": "retained_bytes",
>           "interpretation": "opaque",
>           "projectsBeforeRetention": false,
>           "retainedBodyLimitBytes": "524288",
>           "fileLimitBytes": null
>         }
>       }
>     },
>     "nativeInputLimitBytes": null,
>     "steps": [
>       {
>         "id": "acquire.1",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange changed",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "acquire.2",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange run",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "acquire.3",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "exchange runs",
>           "limitBytes": null
>         }
>       },
>       {
>         "id": "retain.1",
>         "inputs": [
>           "acquire.1",
>           "acquire.2",
>           "acquire.3"
>         ],
>         "action": {
>           "operation": "retain",
>           "subject": "acquisition evidence",
>           "reason": "recovery",
>           "release": "acquisition_custody"
>         }
>       },
>       {
>         "id": "interpret.1",
>         "inputs": [
>           "retain.1"
>         ],
>         "action": {
>           "operation": "interpret",
>           "subject": "acquired input",
>           "produces": "records"
>         }
>       },
>       {
>         "id": "materialize.1",
>         "inputs": [
>           "interpret.1"
>         ],
>         "action": {
>           "operation": "materialize",
>           "subject": "source rows",
>           "reason": "serving",
>           "release": "replacement"
>         }
>       },
>       {
>         "id": "publish.1",
>         "inputs": [
>           "materialize.1"
>         ],
>         "action": {
>           "operation": "publish",
>           "subject": "source rows",
>           "visibility": "with_acquisition"
>         }
>       }
>     ]
>   },
>   "initial": "enumeration",
>   "changes": "observations",
>   "deletions": "explicit_events",
>   "resume": "opaque_cursor",
>   "retentionMs": null,
>   "gap": "explicit_repair",
>   "limits": {
>     "http_response_bytes": "524288"
>   },
>   "restrictions": [],
>   "commands": {}
> }
> ```

> **Commands, occurrences and artifacts**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "records": {
>     "pipelineRuns": {
>       "protocol": "record_observation",
>       "coverage": "records",
>       "consistency": "observations",
>       "atomicity": "record",
>       "history": "observations",
>       "recordRefresh": true,
>       "reconciliation": true,
>       "notifications": false,
>       "snapshotMaxRows": null,
>       "profile": {
>         "movement": {
>           "exchanges": {
>             "changed": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             },
>             "run": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             },
>             "runs": {
>               "200": {
>                 "placement": "retained_bytes",
>                 "interpretation": "json",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               },
>               "429": {
>                 "placement": "retained_bytes",
>                 "interpretation": "opaque",
>                 "projectsBeforeRetention": false,
>                 "retainedBodyLimitBytes": "524288",
>                 "fileLimitBytes": null
>               }
>             }
>           },
>           "nativeInputLimitBytes": null,
>           "steps": [
>             {
>               "id": "acquire.1",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange changed",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "acquire.2",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange run",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "acquire.3",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "exchange runs",
>                 "limitBytes": null
>               }
>             },
>             {
>               "id": "retain.1",
>               "inputs": [
>                 "acquire.1",
>                 "acquire.2",
>                 "acquire.3"
>               ],
>               "action": {
>                 "operation": "retain",
>                 "subject": "acquisition evidence",
>                 "reason": "recovery",
>                 "release": "acquisition_custody"
>               }
>             },
>             {
>               "id": "interpret.1",
>               "inputs": [
>                 "retain.1"
>               ],
>               "action": {
>                 "operation": "interpret",
>                 "subject": "acquired input",
>                 "produces": "records"
>               }
>             },
>             {
>               "id": "materialize.1",
>               "inputs": [
>                 "interpret.1"
>               ],
>               "action": {
>                 "operation": "materialize",
>                 "subject": "source rows",
>                 "reason": "serving",
>                 "release": "replacement"
>               }
>             },
>             {
>               "id": "publish.1",
>               "inputs": [
>                 "materialize.1"
>               ],
>               "action": {
>                 "operation": "publish",
>                 "subject": "source rows",
>                 "visibility": "with_acquisition"
>               }
>             }
>           ]
>         },
>         "initial": "enumeration",
>         "changes": "observations",
>         "deletions": "explicit_events",
>         "resume": "opaque_cursor",
>         "retentionMs": null,
>         "gap": "explicit_repair",
>         "limits": {
>           "http_response_bytes": "524288"
>         },
>         "restrictions": [],
>         "commands": {}
>       }
>     }
>   },
>   "occurrences": null,
>   "artifacts": {
>     "raw_archive": false,
>     "native_file_transfer_limit_bytes": null,
>     "external_versions": false,
>     "files": {}
>   },
>   "commands": {}
> }
> ```

**Recorded checks**

| Requirement | Scope | Evidence | Result |
| - | - | - | - |
| page-publication-recovery | \{"kind":"collection","name":"pipelineRuns"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |
| stated-cursor-empty-page-advances | \{"kind":"collection","name":"pipelineRuns"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |
| stated-cursor-repeat-refused | \{"kind":"collection","name":"pipelineRuns"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |
| backoff-stated-wait | \{"kind":"connection"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |
| identity-account | \{"kind":"connection"} | Declared from Microsoft Learn REST 7.1 documentation; no check has run this packaged declaration against Azure DevOps. | Execution result unavailable |

Hosted qualification: **unestablished for this catalog configuration**. Installed connections report their own identity, authority and current status.

## Provider guidance

One project of an Azure DevOps Services organization: work items, Git
repositories and completed pipeline runs, declared from the Microsoft Learn
REST 7.1 reference. Nothing here has run against Azure DevOps.

Compiled declaration examples and configuration details are published in the [connector reference](https://docs.bijection.com/integrations/connectors/index).

* **Work items** are read by a WIQL watermark on `System.ChangedDate`
  (`timePrecision=true`, 200 ids per page) and a `workitemsbatch` read `asOf`
  the query's own instant. The boundary is re-read. A work item's version is
  its integer `rev`, which every update increments. More than 200 work items changed at one
  instant is refused. A deleted work item leaves every query, so deletion is
  read by the reconciliation sweep, and only from the recycle bin's own entry
  for the id.
* **Repositories** are the deleted-repository listing (withdrawals) followed by
  the repository listing. No coverage is claimed: the listing is
  permission-filtered.
* **Pipeline runs** are completed builds in `finishTimeAscending` order,
  following the `x-ms-continuationtoken` header, with the latest finish time
  carried between passes. `deleted: true` withdraws.

`workItems.pull({ governingRule, states })` adds `setState`, a single-field
JSON Patch of `System.State` limited to the listed states. It is conditioned
on the observed version: the patch opens with `&#123;"op":"test","path":"/rev",
"value":&lt;rev&gt;&#125;`, the version rendered as the JSON integer it was read from, so
a work item changed since it was observed is not overwritten. A failed test's
status is not documented; 409 and 412 are both refusals. A lost reply stays
unknown.

Bind the organization and project as setup and keep the credential (a personal
access token as Basic with an empty user, or a Microsoft Entra bearer) in
native credential custody:

Compiled declaration examples and configuration details are published in the [connector reference](https://docs.bijection.com/integrations/connectors/index).

Package replay is not live qualification. See the generated catalog for exact
declared scenarios and evidence status.

## Provider references

Provider references and prerequisites are maintained in the connector guidance above. No separate provider-documentation review date is recorded.

## Source and evidence

[Canonical connector source](https://github.com/bijectionhq/component-support/blob/b632604330ce9cbcfe17a5a680ef4fbe80f6f672/packages/connectors/src/connectors/azure-devops/README.md), [native analysis](https://github.com/bijectionhq/component-support/blob/b632604330ce9cbcfe17a5a680ef4fbe80f6f672/packages/connectors/contract-analysis.json) and [check receipts](https://github.com/bijectionhq/component-support/blob/b632604330ce9cbcfe17a5a680ef4fbe80f6f672/packages/connectors/evidence.json).

Connector artifact: `905888ea276a2a28e36981a79e8142b2547ea451c3e63162cb6915ad4a7d1305`.

The resource declaration examples above are compiled and compared with exact catalog declarations. Recorded checks apply only to their source, declaration and runtime identities. Configure a connection and inspect its status to establish deployment-specific readiness.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.