# `mgf-vm-sdk` — scope policy

> Scope policy (family **SP**) — what belongs in the VM-manager client SDK.

## §1 In scope (SP-01)
- `VmManagerClient` / `AsyncVmManagerClient` — the typed client facade
- the **transport seam** (`Transport`/`AsyncTransport` Protocol + in-process, async, gRPC impls)
- typed operations / queries / `OperationHandle` (the client-side domain surface re-exported from mgf-vm-core)

The boundary: **a UI-free, transport-pluggable client both the CLI and GUI import.**

## §2 Out of scope (SP-02) — with reasons
| Not here | Why | Where instead |
|---|---|---|
| The VM engine / domain logic | this is a client | `mgf-vm-core` / `mgf-vm-libvirt` |
| The vmanager server | client, not server | `vm-vmanager-app` |
| A CLI or GUI | this is what they import | the CLI / GUI apps |
| gRPC stub/proto generation | wire detail behind the seam | the grpc transport module + buf/protoc |
| Persistence / scheduling | engine concern | `mgf-vm-core` |

## §3 Scope-creep gate (SP-03)
A PR MUST answer: (1) is it client-side facade/transport/typed-surface (else out)? (2) does it keep
the SDK UI-free + the transport behind the Protocol (import-linter)? (3) consumer demand? Any "no" blocks it.

## §4 Adjacent scope (SP-04)
Adjacent: a websocket transport, a caching/offline transport, retry-on-reconnect (gRPC). Promote on a
documented consumer demand signal only.

## §5 Alternatives for out-of-scope needs (SP-05)
Engine → `mgf-vm-core`; server → `vm-vmanager-app`; CLI/GUI → the apps; proto codegen → buf/protoc.

## §6 Revisiting scope (SP-06)
Revisited at every **MAJOR** boundary; re-affirms the UI-free / transport-behind-a-seam / client-not-engine invariants.


## Boundary — verified ownership (generated)

> Generated from the fleet-wide import matrix — the **verified** ownership boundary (who is the SOLE importer of each third-party dep across the whole federation). Regenerate with `fleet_ownership_audit.py --inject`; CI-gated against code drift by `--check`. **Do not hand-edit the block below.**

<!-- BEGIN BOUNDARY (generated by mgf-standard/scripts/fleet_ownership_audit.py --inject; do not hand-edit) -->
- **Owns (sole third-party importer, fleet-verified):** — (no exclusive third-party dep; domain/seam owner)
- **Federation deps (imports):** `mgf.vm`
<!-- END BOUNDARY -->
