Skip to content

Commit f1f2358

Browse files
authored
Merge pull request #641 from Azure/placerda-hosted-agent-docs-v2
docs: record hosted readiness blocker
2 parents 81c2349 + 95ed622 commit f1f2358

9 files changed

Lines changed: 106 additions & 27 deletions

docs/architecture.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,16 @@ deployments retain their persisted topology during upgrade. Network isolation,
77
enterprise integration, public ingress, and optional AI capabilities remain
88
separate choices.
99

10-
!!! warning "Exact matrix pinned; live evidence gates remain"
10+
!!! warning "Exact matrix pinned; runtime validation and release remain blocked"
1111
UI `v2.6.0`, orchestrator `v4.0.0`, ingestion `v2.7.0`, and AILZ `v2.5.0`
1212
are pinned by the umbrella integration and implement the delegated
1313
`x-ms-user-identity` contract. Classic, hosted/no-panel, and explicitly
1414
selected hosted-panel are supported topologies. Continuity, user-history,
1515
owner-binding validation, and operator-surface gates remain
16-
deployment-published `false`, so their routes stay off/503; no live
17-
validation result is implied. See the
18-
[hosted-agent supported matrix](hosted_agent_release_matrix.md).
16+
deployment-published `false`, so their routes stay off/503. The agent version
17+
became active in the latest runtime attempt, but session readiness returned
18+
HTTP 424. The integration is not runtime-validated or shipped. See the
19+
[hosted-agent integration matrix](hosted_agent_release_matrix.md).
1920

2021
## Full Zero Trust reference
2122

@@ -72,6 +73,9 @@ The lower lane in the diagram shows the planned two-phase hosted image flow:
7273
provision prerequisites, build through public ACR Tasks or the dedicated
7374
VNet-connected ACR Tasks agent pool, resolve the hosted image to an immutable
7475
`sha256` digest, provision the digest-backed hosted handoff, and deploy.
76+
The child hosted service remains a Docker service with remote build enabled,
77+
while `AZD_AGENT_SKIP_ACR=true` selects the already-prepared image during the
78+
child deployment.
7579

7680
## Complementary modular views
7781

@@ -98,11 +102,11 @@ Use the table below for the deployment parameters behind each layer, and the [De
98102

99103
| Layer | Posture | Controlled by | Include when |
100104
| --- | --- | --- | --- |
101-
| UI, chat runtime, ingestion | Mode-selected baseline | Canonical `DEPLOYMENT_TOPOLOGY`; materialized `DEPLOY_HOSTED_AGENT_ORCHESTRATION`, `DEPLOY_ADMINISTRATIVE_PANEL`, `CHAT_BACKEND`; `manifest.json` components; `containerAppsList` | The umbrella manifest pins the exact supported matrix. Existing topologies stay sticky, `classic` selects the Container Apps fallback, hosted/no-panel is the fresh default, and hosted-panel requires explicit operator selection while its independent evidence gates remain off/503. |
105+
| UI, chat runtime, ingestion | Mode-selected baseline | Canonical `DEPLOYMENT_TOPOLOGY`; materialized `DEPLOY_HOSTED_AGENT_ORCHESTRATION`, `DEPLOY_ADMINISTRATIVE_PANEL`, `CHAT_BACKEND`; `manifest.json` components; `containerAppsList` | The umbrella manifest pins the exact integration matrix. Existing topologies stay sticky, `classic` selects the Container Apps fallback, hosted/no-panel is the fresh default, and hosted-panel requires explicit operator selection while its independent evidence gates remain off/503. Runtime readiness is not yet validated. |
102106
| AI Foundry account, project, and model deployments | Required AI control plane | `deployAiFoundry`, `deployAfProject`, `deployAAfAgentSvc`, `modelDeploymentList` | Provisioning Azure AI Foundry / Azure OpenAI and the model deployments used by GPT-RAG. |
103107
| AI Foundry associated resources | Default-created or BYO-capable | `aiSearchResourceId`, `aiFoundryStorageAccountResourceId`, `aiFoundryCosmosDBAccountResourceId`, `keyVaultResourceId`, `aiFoundryStorageSku` | Letting the AI Foundry module create its required Storage, Search, Cosmos DB, and Key Vault resources, or reusing existing ones. |
104-
| RAG workload data services | Mode-selected, parameter-controlled | `deploySearchService`, `deployStorageAccount`, `deployCosmosDb`, `storageAccountContainersList`, `databaseContainersList` | Running indexed-document and file-storage paths. Hosted/no-panel uses Foundry managed Conversations and omits panel-only Cosmos DB; classic preserves its existing state path. |
105-
| App Configuration, identity / RBAC, Container Apps, Container Registry | Required platform capabilities, topology varies by mode | `deployAppConfig`, `deployContainerApps`, `deployContainerEnv`, `deployContainerRegistry`, `useUAI`, service role lists | Publishing the sticky topology and runtime contract, hosting UI/ingestion, and preparing immutable images. Hosted/no-panel does not provision an orchestrator Container App. Delegated continuity grants the two exact direct agent-scoped roles only to the UI BFF after protocol and owner-binding validation. |
108+
| RAG workload data services | Mode-selected, parameter-controlled | `deploySearchService`, `deployStorageAccount`, `deployCosmosDb`, `storageAccountContainersList`, `databaseContainersList`, `SEARCH_SERVICE_UAI_RESOURCE_ID` | Running indexed-document and file-storage paths. Private Search uses its explicit Search UAI. Hosted/no-panel uses Foundry managed Conversations and omits panel-only Cosmos DB; classic preserves its existing state path. |
109+
| App Configuration, identity / RBAC, Container Apps, Container Registry | Required platform capabilities, topology varies by mode | `deployAppConfig`, `deployContainerApps`, `deployContainerEnv`, `deployContainerRegistry`, `useUAI`, service role lists | Publishing the sticky topology and runtime contract, hosting UI/ingestion, and preparing immutable images. Hosted/no-panel does not provision an orchestrator Container App. Hosted-panel resolves exactly one managed-identity principal per Container App and limits Cosmos grants to frontend Contributor plus ingestion Reader on the two panel containers. Delegated continuity grants the two exact direct agent-scoped roles only to the UI BFF after protocol and owner-binding validation. |
106110
| Workload Key Vault and observability | Default support, parameter-controlled or reusable | `deployKeyVault`, `deployLogAnalytics`, `deployAppInsights`, `EXISTING_LOG_ANALYTICS_WORKSPACE_RESOURCE_ID`, `EXISTING_APPLICATION_INSIGHTS_RESOURCE_ID`, `EXISTING_APPLICATION_INSIGHTS_CONNECTION_STRING` | Storing workload secrets and capturing telemetry. The delegated primary continuity path does not provision or require a capability key or dedicated continuity vault; those inputs remain disabled fallback-only. Application Insights is created or wired only when an effective Log Analytics workspace is available. |
107111
| Zero Trust private networking | Optional security posture | `networkIsolation`, `allowedIpRanges`, `useExistingVNet`, `deploySubnets`, `policyManagedPrivateDns`, `EXISTING_PRIVATE_DNS_ZONE_*` | Requiring private endpoints, private DNS, VNet integration, NSGs, and internal Container Apps ingress. |
108112
| Azure Firewall, Jumpbox, Bastion, NAT Gateway, private ACR build pool | Zero Trust operations/build options | `DEPLOY_AZURE_FIREWALL`, `DEPLOY_JUMPBOX`, `DEPLOY_BASTION`, `DEPLOY_NAT_GATEWAY`, `DEPLOY_ACR_TASK_AGENT_POOL`, `EXISTING_JUMPBOX_RESOURCE_ID`, `EXISTING_BASTION_RESOURCE_ID`, `EXISTING_NAT_GATEWAY_RESOURCE_ID` | Operating inside the VNet or reusing central access/egress resources. The gated hosted flow uses the dedicated VNet-connected ACR Tasks agent pool for private builds; shared ACR Tasks cannot reach a private endpoint. |

docs/deploy.md

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,17 @@ ingestion services in the classic Container Apps topology.
5353

5454
### Chat runtime modes
5555

56-
!!! warning "Exact matrix pinned; evidence-gated surfaces remain off"
56+
!!! warning "Exact matrix pinned; runtime validation and release remain blocked"
5757
UI `v2.6.0`, orchestrator `v4.0.0`, ingestion `v2.7.0`, and AILZ `v2.5.0`
5858
are pinned by the umbrella integration at their exact release commits.
5959
Classic, hosted/no-panel, and explicitly selected hosted-panel are supported
6060
topologies. The manifest's umbrella tag remains `unreleased`; use a GPT-RAG
6161
source or release that contains these pins. Continuity, user-history,
6262
owner-binding validation, and operator-surface evidence gates remain
63-
deployment-published `false`; no live validation result is implied. See the
64-
[exact supported matrix](hosted_agent_release_matrix.md).
63+
deployment-published `false`. The agent version became active in the latest
64+
runtime attempt, but session readiness returned HTTP 424. The integration is
65+
not runtime-validated or shipped. See the
66+
[exact integration matrix](hosted_agent_release_matrix.md).
6567

6668
The platform implementation resolves one canonical topology before provisioning
6769
and materializes the corresponding legacy flags and App Configuration values.
@@ -93,6 +95,7 @@ Configuration label `gpt-rag`:
9395
| `HOSTED_AGENT_AUTH_MODE` | `user_delegated` is the default and required continuity path. Under OQ-OWN, it means the trusted UI BFF derives `x-ms-user-identity`; it does not mean an OBO token is sent to the agent. OBO remains a separate retrieval flow. `service_identity` is an explicit reviewed exception that is incompatible with owner-bound continuity, so continuity stays off/503 in that mode. |
9496
| `HOSTED_AGENT_SSE_IDLE_TIMEOUT_SECONDS` | Finite positive wait for the next SSE event. The UI default is `60`; an infinite timeout is rejected. |
9597
| `HOSTED_AGENT_IMAGE_VERSION` | Canonical lowercase immutable digest in `sha256:<64-hex-characters>` form. Mutable tags are rejected. |
98+
| `SEARCH_SERVICE_UAI_RESOURCE_ID` | Required identity boundary for private Search. Post-provisioning preserves an explicit value or resolves the single Search user-assigned identity from the Search resource; it must not publish an empty replacement. |
9699
| `OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT` | Generative-AI prompt and completion telemetry capture. Defaults to `false`. Set to `true` only when the deployment's data-handling policy explicitly permits sensitive content telemetry. |
97100

98101
Hosted configuration, authentication, connection, timeout, protocol, and
@@ -243,6 +246,14 @@ This composes UI and ingestion plus only the two panel metadata containers.
243246
override them before their separate evidence and authorization procedures
244247
complete. The corresponding routes return HTTP 503 while disabled.
245248

249+
Panel post-provisioning resolves exactly one managed-identity principal from the
250+
frontend Container App and exactly one from ingestion. It then creates only
251+
container-scoped Cosmos SQL grants on `panel-conversation-owner-index` and
252+
`panel-feedback`: **Cosmos DB Built-in Data Contributor** for frontend and
253+
**Cosmos DB Built-in Data Reader** for ingestion. Missing or ambiguous
254+
Container App identities fail setup. Do not substitute account-scope grants,
255+
grant ingestion write access, or grant the hosted agent any panel Cosmos role.
256+
246257
The first provision creates hosted prerequisites with image preparation
247258
enabled but hosted deployment disabled. The preparation command clones and
248259
verifies the manifest-pinned orchestrator source, builds the standard image and
@@ -257,6 +268,21 @@ private endpoint. Operators may pass an already-built immutable
257268
`sha256:<64-hex-characters>` digest to the preparation command to skip builds.
258269
No lifecycle hook recursively invokes `azd provision`.
259270

271+
The child `hosted-agent/azure.yaml` service definition is part of the prebuilt
272+
handoff contract. It must declare `language: docker` and
273+
`docker.remoteBuild: true`. The parent pre-deploy hook sets
274+
`AZD_AGENT_SKIP_ACR=true` in the child azd environment before
275+
`azd deploy orchestrator-agent`, so the already-prepared immutable image is used
276+
instead of triggering another ACR build. Do not remove any of these three
277+
settings from a prebuilt hosted deployment.
278+
279+
!!! danger "Current runtime readiness blocker"
280+
The latest implementation validation activated the agent version, but a new
281+
session readiness request returned HTTP 424. This is not a successful hosted
282+
runtime validation. Keep continuity and panel evidence gates false/off/503,
283+
keep the classic rollback available, and do not describe the integrated
284+
matrix as shipped until readiness and the remaining live checks pass.
285+
260286
#### Explicit classic fallback
261287

262288
Fallback is a deployment operation, not a request-time retry:

docs/hosted_agent_release_matrix.md

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
# Hosted-agent supported release matrix
1+
# Hosted-agent integration matrix
22

33
This page records the exact hosted-agent component releases pinned by the
44
GPT-RAG umbrella integration on 2026-08-07 and the independent evidence gates
55
that remain fail closed.
66

7-
!!! warning "Pins are integrated; live evidence gates remain closed"
7+
!!! warning "Pins are integrated; runtime validation and release remain blocked"
88
The umbrella `manifest.json` pins all four exact releases below and explicit
99
`hosted-panel` topology selection is supported. The manifest's umbrella tag
1010
remains `unreleased`; use only a GPT-RAG source or release that contains
@@ -13,9 +13,12 @@ that remain fail closed.
1313
`PANEL_HISTORY_OWNER_BINDING_VALIDATED`, and
1414
`PANEL_OPERATOR_SURFACES_ENABLED` remain deployment-published `false`.
1515
This documentation does not claim that their separate live evidence and
16-
authorization procedures have completed.
16+
authorization procedures have completed. The hosted agent version became
17+
active during validation, but session readiness returned HTTP 424. Treat the
18+
matrix as implemented configuration, not as a validated or shipped umbrella
19+
release.
1720

18-
## Exact published matrix
21+
## Exact integrated matrix
1922

2023
| Component | Release | Reviewed release commit | Relevant contract |
2124
| --- | --- | --- | --- |
@@ -221,6 +224,23 @@ Managed Conversations is the only chat-content store for the hosted design.
221224
- The hosted runtime identity has no Conversations role, impersonation role,
222225
capability key, or panel Cosmos role.
223226

227+
### Deployment identity boundaries
228+
229+
- A private Azure AI Search deployment uses its explicit Search user-assigned
230+
identity. `postProvision` preserves `SEARCH_SERVICE_UAI_RESOURCE_ID` when
231+
already supplied or resolves it from the Search resource; it must not replace
232+
the value with an empty identity.
233+
- Panel setup resolves exactly one managed-identity principal from each target
234+
Container App. Zero or multiple distinct principals fail setup rather than
235+
guessing.
236+
- The frontend principal receives **Cosmos DB Built-in Data Contributor** and
237+
the ingestion principal receives **Cosmos DB Built-in Data Reader**, each
238+
scoped separately to only `panel-conversation-owner-index` and
239+
`panel-feedback`.
240+
- Neither principal receives panel access at Cosmos account scope. Ingestion
241+
receives no panel write access, and the hosted agent receives no panel Cosmos
242+
role.
243+
224244
## Operator verification and rollback
225245

226246
The matrix and all three topologies are composed by the umbrella integration.
@@ -244,6 +264,23 @@ hosted handoff. UI and ingestion are deployed, but the orchestrator Container
244264
App is omitted. Do not override the deployment-published panel or continuity
245265
evidence flags: their routes intentionally remain off/503.
246266

267+
The generated `hosted-agent/azure.yaml` prebuilt-image path must retain:
268+
269+
```yaml
270+
services:
271+
orchestrator-agent:
272+
host: azure.ai.agent
273+
language: docker
274+
docker:
275+
remoteBuild: true
276+
```
277+
278+
Before the child project runs `azd deploy orchestrator-agent`, the pre-deploy
279+
hook sets `AZD_AGENT_SKIP_ACR=true` alongside the immutable
280+
`HOSTED_AGENT_IMAGE_VERSION`. These settings tell the `azure.ai.agent` host to
281+
deploy the prepared digest without replacing the reviewed Docker service
282+
contract or launching a second ACR build.
283+
247284
Before those independent live surfaces can be enabled, validation must:
248285

249286
1. deploy the immutable hosted image and verify the live Responses protocol;
@@ -261,6 +298,11 @@ Before those independent live surfaces can be enabled, validation must:
261298
8. separately validate panel user auth and the ingestion browser operator-token
262299
path before enabling panel flags.
263300

301+
The latest runtime attempt does not satisfy item 1: the agent version reached
302+
active state, but session readiness returned HTTP 424. Preserve the fail-closed
303+
flags and do not describe this integration as runtime-validated or shipped until
304+
readiness and the remaining evidence steps succeed.
305+
264306
The configuration contract uses:
265307

266308
| Key | Required value or default |

docs/howto_dashboard_signin.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@ If you are looking for the wider authentication picture (chat UI sign-in, On-Beh
66

77
This procedure applies to the orchestrator dashboard in the currently released
88
classic Container Apps topology and in the explicit classic fallback. The
9-
[hosted supported matrix](hosted_agent_release_matrix.md) keeps hosted/no-panel
9+
[hosted integration matrix](hosted_agent_release_matrix.md) keeps hosted/no-panel
1010
as the fresh default and supports explicit hosted-panel selection. The
1111
hosted-panel user-history and operator routes remain off/503 because their
12-
independent evidence gates are deployment-published `false`.
12+
independent evidence gates are deployment-published `false`. This describes the
13+
integrated configuration, not a shipped hosted runtime; session readiness
14+
currently remains blocked by HTTP 424.
1315

1416
## What this is
1517

docs/index.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ chat runtime and retains the Container Apps orchestrator as an explicit
2020
fallback. See the [Architecture](architecture.md) page for the mode contract
2121
and required-vs-configurable deployment table.
2222

23-
!!! warning "Exact matrix pinned; evidence gates remain fail closed"
23+
!!! warning "Exact matrix pinned; runtime validation and release remain blocked"
2424
The umbrella integration pins UI `v2.6.0`, orchestrator `v4.0.0`, ingestion
2525
`v2.7.0`, and AILZ `v2.5.0`. Explicit hosted-panel topology selection is
2626
supported, but continuity, user-history, owner-binding validation, and
27-
operator-surface gates remain deployment-published `false`; this page does
28-
not claim live validation has completed. See the
29-
[hosted-agent supported release matrix](hosted_agent_release_matrix.md) for
27+
operator-surface gates remain deployment-published `false`. The latest
28+
runtime attempt activated the agent version but session readiness returned
29+
HTTP 424, so the integration is not validated or shipped. See the
30+
[hosted-agent integration matrix](hosted_agent_release_matrix.md) for
3031
the exact runtime, identity, RBAC, panel, data, and rollback contracts.
3132

3233
![Chat runtime modes and hosted deployment lifecycle](media/architecture_chat_runtime_modes.svg)

docs/quickstart_simple_rag.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ azd provision
7676
- **Microsoft Foundry** - Foundry Account and project for agent orchestration
7777
- **OpenAI Models** - GPT-4o and text-embedding-3-large deployments
7878
- **Container Registry** - Stores Docker images
79-
- **Container Apps (4)** - UI, orchestrator, ingestion, MCP in the currently released classic topology. The [hosted-agent supported matrix](hosted_agent_release_matrix.md) pins UI, orchestrator runtime, ingestion, and AILZ releases; hosted/no-panel and explicit hosted-panel keep UI and ingestion in Container Apps and omit the orchestrator Container App from the hosted chat path.
79+
- **Container Apps (4)** - UI, orchestrator, ingestion, MCP in the currently released classic topology. The [hosted-agent integration matrix](hosted_agent_release_matrix.md) pins UI, orchestrator runtime, ingestion, and AILZ releases; hosted/no-panel and explicit hosted-panel keep UI and ingestion in Container Apps and omit the orchestrator Container App from the hosted chat path. The hosted integration is not yet shipped because runtime session readiness remains blocked.
8080
- **App Configuration** - Centralized configuration store
8181
- **Key Vault** - Secrets management
8282
- **Cosmos DB** - Agent state and metadata

0 commit comments

Comments
 (0)