Azure / Azure/azure-functions-host

[Compute Separation][HT14] Track standard-product protection through M1

Open
#11,972 0 comments 0 reactions 1 assignee Claimed by @brettsam View on GitHub
compute-separation
Dominant language
C#
Stars
2k
Forks
482
Avg merge
2d 12h
Merged PRs (30d)
38

Description

## Roadmap mapping

| Field | Value |
|---|---|
| Roadmap ID | `HT14` |
| Lane | Host continuous guard |
| BYOC milestone | M1 |
| Parent | #11965 |
| Depends on | `HT1` / #11966 |
| Applies to | Every M1 Host and WorkerProxy PR |
| Pull request | None; evidence tracker |

## Goal

Guarantee that compute separation M1 does not change the standard co-located Functions Host product. Standard WebHost service graph, dependency direction, publish output, startup, and worker-process lifecycle remain stable; compute is a separate static composition and executable, never a runtime flag.

Every M1 PR posts its evidence here. This issue owns no product behavior.

## Source material

- `Functions-NoPlaceholders@brettsam/ga_plan`: `docs/host/ga/roadmap.md`, row `HT14`, and `docs/host/ga/ga-plan.md`.
- `.github/prompts/update-deps-json.prompt.md` for deps baseline updates.

## Per-PR evidence checklist

Copy this checklist into a comment for each M1 PR. A not-applicable item requires a one-line reason.

```markdown
### HT14 evidence - / PR #

- [ ] `test/WebJobs.Script.Tests/DependencyTests.cs` passes and dependency direction is unchanged.
- [ ] `test/Functions.Rpc.Client.Tests/RpcClientAssemblyTests.cs` passes where Client is touched.
- [ ] `Verify_DepsJsonChanges` passes against `test/WebJobs.Script.Tests/Microsoft.Azure.WebJobs.Script.WebHost.deps.json`; any change is justified line by line.
- [ ] `tools/ExtensionsMetadataGenerator/test/ExtensionsMetadataGeneratorTests/ExistingRuntimeAssemblies.txt` is unchanged or justified.
- [ ] `test/WebJobs.Script.Tests/WebHost/WebHostServiceCollectionExtensionsTests.cs` passes; standard registration set/order is unchanged.
- [ ] Default dependency validator tests pass.
- [ ] Standard WebHost startup tests pass and standard startup still starts ScriptHost automatically without a worker-link precondition.
- [ ] Standard worker/process/channel tests pass; local process lifecycle is unchanged.
- [ ] `test/Functions.WorkerProxy.Tests` and the WorkerProxy Native AOT build pass where Proxy is touched.
- [ ] `test/Functions.Rpc.Client.Tests` passes where Client is touched.
- [ ] `WebJobs.Script.sln` and `Azure.Functions.Host.slnx` build clean with no new warnings.
- [ ] No runtime configuration key selects standard versus compute product.
- [ ] Compute publish excludes Server process implementation and WorkerProxy; standard publish excludes Client, compute product, and WorkerProxy where applicable.
- [ ] Compute-only routes are absent from standard Host where applicable.
- [ ] Aspire/test drivers remain harness-only and absent from shipping outputs where applicable.
```

## Guarded invariants

| Invariant | Primary evidence |
|---|---|
| Standard registration set/order unchanged | `WebHostServiceCollectionExtensionsTests.cs` |
| `Server -> Grpc -> Script`, `Client -> Grpc/Script`, no reverse or WorkerProxy edges | `DependencyTests.cs`, `RpcClientAssemblyTests.cs` |
| Standard publish/deps changes explicit and justified | deps baseline and runtime inventory |
| Standard ScriptHost starts automatically; deferral is compute-only | standard startup tests |
| Local worker lifecycle unchanged | `test/WebJobs.Script.Tests/Workers` |
| No runtime topology flag | review plus checklist |
| Compute routes/services absent from standard | HT9 route-absence test |

## Coverage record

Retrospective evidence starts with HT1/#11916, HT2/#11940, HP1/#11921, and HP2/#11949. HT3/#11964 and each subsequent required M1 PR add one completed checklist comment. Optional Aspire PRs supply harness-containment evidence but do not gate BYOC-M1.

## Dependencies

- Depends on HT1's assembly boundary.
- Blocks each M1 PR from merging without evidence, but never blocks work from starting.

## Explicit exclusions

No new analyzer/test framework/product behavior is owned here. If a missing guard is found, the feature issue that exposes it adds the test. This issue does not own performance, GA parity, or the stamp run.

## Close condition

Close when every required M1 child is closed or accepted, every required PR posted evidence, and a final standard regression run passes on `dev` after the last M1 merge. Post-M1 work opens a successor guard instead of reopening this issue.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.