WI: Create anima-qa crate in Anima workspace #180

Closed
opened 2026-05-24 05:09:07 +00:00 by toasterson · 0 comments
Owner

Goal

Create the crates/anima-qa/ crate skeleton as a new member of the Anima Cargo workspace.

Background

We need a QA system that tests Work Items via CLI invocation AND desktop UI navigation. The QA layer wraps the existing vm-manager (on Archibald) behind an MCP server, adding Wayland GUI testing capabilities.

🔗 Remote Sources (all on code.aopc.cloud)

vm-manager — VM lifecycle management library:

Anima workspace:

Design doc: The full architecture spec lives in Tecton's workspace. When implementing, ask Tecton for memory/projects/anima-qa.md.

🏗️ Implementation Guide

Dependency: Use vm-manager from crates.io or Git

vm-manager is mirrored to code.aopc.cloud. For the Cargo.toml, reference it as a git dependency:

vm-manager = { git = "https://code.aopc.cloud/CloudNebulaProject/vm-manager.git" }

Or if published to code.aopc.cloud package registry, use the package path.

Crate setup

Create crates/anima-qa/Cargo.toml with: axum, serde, serde_json, tokio, tracing, base64, reqwest, uuid, ssh2, openssl/vendored, vm-manager (git dep)

Module structure

  • src/main.rs — axum server
  • src/mcp.rs — MCP JSON-RPC handler
  • src/actions.rs — QaAction enum + Hypervisor calls
  • src/screenshot.rs — grim capture + Ollama vision
  • src/vm_registry.rs — Active VM tracking
  • src/test_runner.rs — YAML test spec parser

Acceptance Criteria

  • cargo build -p anima-qa succeeds
  • MCP tools/list returns all 10 tools
  • VM lifecycle: start → run command → stop
  • #181 — MCP server implementation
  • #182 — CLI runner
  • #184 — Visual testing primitives
## Goal Create the `crates/anima-qa/` crate skeleton as a new member of the Anima Cargo workspace. ## Background We need a QA system that tests Work Items via CLI invocation AND desktop UI navigation. The QA layer wraps the existing vm-manager (on Archibald) behind an MCP server, adding Wayland GUI testing capabilities. ## 🔗 Remote Sources (all on code.aopc.cloud) **vm-manager** — VM lifecycle management library: - **Repo:** https://code.aopc.cloud/CloudNebulaProject/vm-manager (mirror from GitHub) - **Clone:** `git clone https://code.aopc.cloud/CloudNebulaProject/vm-manager.git` - **Key files (browse online):** - https://code.aopc.cloud/CloudNebulaProject/vm-manager/src/branch/main/Cargo.toml — workspace deps - https://code.aopc.cloud/CloudNebulaProject/vm-manager/src/branch/main/crates/vm-manager/src/traits.rs — Hypervisor trait - https://code.aopc.cloud/CloudNebulaProject/vm-manager/src/branch/main/crates/vm-manager/src/types.rs — VmSpec, VmHandle, VmState - https://code.aopc.cloud/CloudNebulaProject/vm-manager/src/branch/main/crates/vm-manager/src/backends/qemu.rs — QemuBackend - https://code.aopc.cloud/CloudNebulaProject/vm-manager/src/branch/main/crates/vm-manager/src/backends/mod.rs — RouterHypervisor - https://code.aopc.cloud/CloudNebulaProject/vm-manager/src/branch/main/crates/vm-manager/src/image.rs — ImageManager - https://code.aopc.cloud/CloudNebulaProject/vm-manager/src/branch/main/crates/vm-manager/src/console.rs — ConsoleTailer - https://code.aopc.cloud/CloudNebulaProject/vm-manager/src/branch/main/crates/vm-manager/src/cloudinit.rs — cloud-init ISO generation - https://code.aopc.cloud/CloudNebulaProject/vm-manager/src/branch/main/crates/vm-manager/src/ssh.rs — SSH key management - https://code.aopc.cloud/CloudNebulaProject/vm-manager/src/branch/main/crates/vm-manager/src/error.rs — VmError - https://code.aopc.cloud/CloudNebulaProject/vm-manager/src/branch/main/crates/vm-manager/src/vmfile.rs — VMFile.kdl parser - https://code.aopc.cloud/CloudNebulaProject/vm-manager/src/branch/main/VMFile.kdl — example VM spec **Anima workspace:** - **Repo:** https://code.aopc.cloud/toasterson/Anima - **Clone:** `git clone https://code.aopc.cloud/toasterson/Anima.git` - **Key files:** - https://code.aopc.cloud/toasterson/Anima/src/branch/main/Cargo.toml — root workspace with 13 existing crates - https://code.aopc.cloud/toasterson/Anima/src/branch/main/crates/ — existing crate structure **Design doc:** The full architecture spec lives in Tecton's workspace. When implementing, ask Tecton for `memory/projects/anima-qa.md`. ## 🏗️ Implementation Guide ### Dependency: Use vm-manager from crates.io or Git vm-manager is mirrored to code.aopc.cloud. For the Cargo.toml, reference it as a git dependency: ```toml vm-manager = { git = "https://code.aopc.cloud/CloudNebulaProject/vm-manager.git" } ``` Or if published to code.aopc.cloud package registry, use the package path. ### Crate setup Create `crates/anima-qa/Cargo.toml` with: axum, serde, serde_json, tokio, tracing, base64, reqwest, uuid, ssh2, openssl/vendored, vm-manager (git dep) ### Module structure - src/main.rs — axum server - src/mcp.rs — MCP JSON-RPC handler - src/actions.rs — QaAction enum + Hypervisor calls - src/screenshot.rs — grim capture + Ollama vision - src/vm_registry.rs — Active VM tracking - src/test_runner.rs — YAML test spec parser ## ✅ Acceptance Criteria - [ ] `cargo build -p anima-qa` succeeds - [ ] MCP tools/list returns all 10 tools - [ ] VM lifecycle: start → run command → stop ## Related WIs - #181 — MCP server implementation - #182 — CLI runner - #184 — Visual testing primitives
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
toasterson/Anima#180
No description provided.