photoncloud-monorepo/docs/por/T012-vm-tenancy-persistence/task.yaml
centra a7ec7e2158 Add T026 practical test + k8shost to flake + workspace files
- Created T026-practical-test task.yaml for MVP smoke testing
- Added k8shost-server to flake.nix (packages, apps, overlays)
- Staged all workspace directories for nix flake build
- Updated flake.nix shellHook to include k8shost

Resolves: T026.S1 blocker (R8 - nix submodule visibility)
2025-12-09 06:07:50 +09:00

64 lines
2.3 KiB
YAML

id: T012
name: PlasmaVMC tenancy + persistence hardening
status: complete
goal: Scope VM CRUD by org/project and persist VM state so restarts are safe
priority: P0
owner: peerA (strategy) + peerB (implementation)
created: 2025-12-08
context: |
T011 delivered functional KvmBackend + gRPC VmService but uses shared in-memory DashMap.
Today get/list expose cross-tenant visibility and state is lost on server restart.
ChainFire is the intended durable store; use it (or a stub) to survive restarts.
acceptance:
- VmService list/get enforce org_id + project_id scoping; no cross-tenant leaks
- VM + handle metadata persisted (ChainFire or stub) and reloaded on server start
- Basic grpcurl or integration smoke proves lifecycle and scoping with KVM env
steps:
- step: S1
action: Tenant-scoped maps and API filters
priority: P0
status: complete
owner: peerB
notes: |
Key VM/handle storage by (org_id, project_id, vm_id) and gate list/get on requester context.
Ensure existing KVM backend handles remain compatible.
deliverables:
- list/get filtered by org/project
- cross-tenant access returns NOT_FOUND or permission error
- step: S2
action: Persist VM + handle state
priority: P0
status: complete
owner: peerB
notes: |
Use ChainFire client (preferred) or disk stub to persist VM metadata/handles on CRUD.
Load persisted state on server startup to allow status/stop/kill after restart.
deliverables:
- persistence layer with minimal schema
- startup load path exercised
- step: S3
action: gRPC smoke (env-gated)
priority: P1
status: complete
owner: peerB
notes: |
grpcurl (or integration test) that creates/starts/status/stops VM using KVM env.
Verify tenant scoping behavior via filter or multi-tenant scenario when feasible.
deliverables:
- script or #[ignore] test proving lifecycle works via gRPC
blockers: []
evidence:
- cmd: cd plasmavmc && cargo test -p plasmavmc-server
- cmd: cd plasmavmc && cargo test -p plasmavmc-server -- --ignored
- path: plasmavmc/crates/plasmavmc-server/src/vm_service.rs
- path: plasmavmc/crates/plasmavmc-server/tests/grpc_smoke.rs
notes: |
Primary risks: tenancy leakage, state loss on restart. This task hardens server ahead of wider use.