Azure / Azure/azure-functions-host
[Compute Separation][AH4B] Run project mode through the real compute Host
- Dominant language
- C#
- Stars
- 2k
- Forks
- 482
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 38
Description
> **Parallel non-blocking validation.** This issue is outside `BYOC-M1`, is not a required sub-issue of #11965, and is not a prerequisite for #11965 or [internal BYOC #219](https://github.com/serverless-paas-balam/FlexConsumption-BYOC/issues/219). It consumes M1 product work rather than gating it.
## Roadmap mapping
| Field | Value |
|---|---|
| Roadmap ID | `AH4B` |
| Lane | Aspire integration harness |
| Related Feature | #11965, non-blocking |
| Depends on | `AH4-M1`, `HT8b`, `HT9`, `HT10-M1+HT13B-M1`, `PR-M10+HB4A` |
| Blocks | Only `AH5+AH6A-M1` |
| Related gate | `HI4` |
## Why this PR exists
Re-run the one-worker anonymous HTTP flow with the test Client driver removed and the real dedicated compute Host in its place. This isolates the composition question from the earlier worker-compatibility question and proves real service registration, deferred ScriptHost startup, link acceptance, readiness, and capacity.
## Source material
- Roadmap AH4B and HI4.
- Reference-only AppHost project-mode wiring and manual workflow files from `origin/feature/compute_separation`.
- HT8b, HT9, HT10/HT13B, PR-M10/HB4A, HP3/HP4 product contracts.
- [internal BYOC #219](https://github.com/serverless-paas-balam/FlexConsumption-BYOC/issues/219) and [internal BYOC #117](https://github.com/serverless-paas-balam/FlexConsumption-BYOC/issues/117).
Do not port prototype Host RequestSlotsController; appserver owns Frontend slots and Host publishes capacity.
## Current state
AH4-M1 proves real worker behavior through a harness-only driver. It does not exercise real compute composition, deferred ScriptHost startup, link route, or capacity revision. Once product issues land, the driver must be removed or frozen so the harness cannot pass while real composition is broken.
## Proposed implementation
1. Replace the `client-driver` resource with the dedicated compute executable and supply platform-style environment values from HT8b through Aspire dynamic configuration.
2. Assert pre-link state: compute Host process is ready, ScriptHost has not started, and capacity is zero.
3. Call WorkerProxy assign, then ready/state routes; assert equivalent re-assignment is idempotent and conflicting assignment fails.
4. Call HT9 link and assert acceptance occurs after handshake/registration but before ScriptHost/capacity completion; verify duplicate/stale rules from [internal BYOC #117](https://github.com/serverless-paas-balam/FlexConsumption-BYOC/issues/117).
5. Add a small harness-only fake appserver capacity receiver. Wait for zero-before-link and one strictly higher positive revision after readiness; verify a higher zero revision on worker ineligibility.
6. Re-run the exact shared AH4-M1 HTTP request and terminal-leg assertions—reuse code, do not duplicate it.
7. Delete the test Client driver or freeze it in an unmistakably harness-only project with HT14 containment evidence. Deletion is preferred.
8. Make every failure identify assignment/readiness, link, ScriptHost startup, capacity, HTTP forwarding, or worker ownership and last state.
9. Update the harness README and state explicitly that this validation gates nothing.
## Runtime-generated credentials
Generate any payload key or local storage credential per AppHost run and inject it through environment/request construction. Do not port fixed keys, pre-encrypted payloads, JWT audiences, or well-known Azurite credentials. No credential in source, launch settings, logs, or artifacts.
## Tests and evidence
- Before link: no ScriptHost and zero capacity.
- Assign/ready/state workflow deterministic and idempotent.
- Link acceptance timing and replay behavior match HT9.
- Exactly one positive monotonic capacity revision follows first-worker readiness.
- Shared AH4-M1 request returns `200`; HTTP and FunctionRpc legs terminate under one ID.
- Driver removed/frozen and no shipping project references harness code.
- Induced failures name correct component.
- HT14 standard service graph, startup, dependency, publish/deps, and compute-output isolation evidence passes.
The exit signal for the container issue is a fully automated project-mode assign -> link -> positive capacity -> request workflow against real compute composition.
## Explicit exclusions
No containers/images, production ACR/pools, auth/TLS, customer host.json, drain/reconnect, multi-worker, billing, extension gRPC, Durable, assembly streaming, real appserver, Host slot leasing, required CI, worker modification, or performance testing.
## PR stop condition
Stop when project mode runs real compute Host, WorkerProxy, one unchanged real .NET worker, and fake capacity receiver; assign/link/readiness/capacity are automated; shared HTTP assertions pass; driver is retired; failures are attributable; and standard product is unchanged. Do not add containers or later lifecycle/security work.
Contributor guide
Assessment
This issue has not been assessed yet.