# ATVM AGENTS Guide This file defines how to operate and maintain the ATVM workspace in `/home/aw/code/cds/atvm`. ## Workspace Layout - `README.md` - human entry point for the folder - `scripts/` - executable workflow assets - `docs/setup/` - setup/bootstrap procedure and run learnings - `docs/automation/` - ATVM Cypress automation procedure, examples, and run learnings - `docs/workflow/` - shared conventions for how the docs are maintained - `inventory/` - environment reference, credentials, IP allocations, and inventory indexes - `archive/imported-notes/` - preserved original long-form source material ## Authoritative Sources - Setup/bootstrap procedure: - `docs/setup/guide.md` - Setup/bootstrap learnings: - `docs/setup/run-learnings.md` - Automation execution procedure: - `docs/automation/guide.md` - Automation command examples: - `docs/automation/examples.md` - Automation run learnings: - `docs/automation/run-learnings.md` - Workspace conventions: - `docs/workflow/conventions.md` ## Setup Track Defaults - ATVM static IP target: `192.168.3.191/22` - Gateway: `192.168.0.1` - DNS: `8.8.8.8`, `8.8.4.4` - Default Linux setup credential source: `/home/aw/code/cds/.env.credentials.local` via `ATVM_TARGET_USER` and `ATVM_TARGET_PASSWORD` - Client log file: `atvm_setup_script.log` - Treat `192.168.3.191` as the default ATVM target host reference. - For SSH to `192.168.3.191`, ignore host key mismatch by default with `-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null`. - For Linux SSH to `192.168.3.191`, source `/home/aw/code/cds/.env.credentials.local` and use `ATVM_TARGET_USER` plus `ATVM_TARGET_PASSWORD` unless explicitly overridden. - Use `ATVM_WINDOWS_TARGET_USER` plus `ATVM_WINDOWS_TARGET_PASSWORD` for Windows guest access to the same ATVM target IP unless explicitly overridden. ## Automation Track Defaults - Controller host: `atvm-cypres-vm-1` - Controller IP: `192.168.3.190` - Controller credential source: `/home/aw/code/cds/.env.credentials.local` via `ATVM_CONTROLLER_USER` and `ATVM_CONTROLLER_PASSWORD` - Detailed test artifact root on controller: `/root/cdc-e2e-cyp-12.17.4/cypress/cmcReporter` - Default Mattermost status destination config: `/home/aw/code/cds/.env.credentials.local` - Default plugin: `--use_specified_plugin iscsi` - Always include `--ignore_force_shutdown` unless explicitly told not to. - Default config family: `gold` - Do not auto-add the maintained `--exclude_partial_match` blacklist when the operator explicitly targets named VMs with `--specify_vms`. - Even for explicit `--specify_vms` requests, first check whether any requested VM is on the maintained blacklist and stop if it is. ## Required Operating Rules - Never run setup without operator-provided `--expected-ip` and `--expected-hostname`. - Keep static IP configuration as the final setup step. - Before any automation run, always check whether automation is already running. - Always show exact planned ATVM commands before execution. - Never execute setup or automation commands that require approval until the operator explicitly approves them. - For ATVM run approvals, treat `approve` as run-with-watcher and `approve without watcher` as run-without-watcher. - Treat git/commit requests as a separate approval gate. - Follow `/home/aw/code/cds/git-guide.md` for commit-request handling, including the rule that phrases such as `create me a git`, `create a git`, `create a git description`, `make me a git`, `make a git`, `make me a git description`, `create me a git description`, and close variations are prepare-only until the operator explicitly approves the displayed commit command. - After `cmc-templates.py`, always verify that the generated spec files and the config `specPattern` still include every requested VM before starting `run-sorry-cypress.py`. - If any requested VM is missing after template generation, stop and report the mismatch instead of launching the runner. - When the watcher is requested, start the watcher before `run-sorry-cypress.py`. - Do not start the runner before the watcher, because the watcher helper clears stale `/tmp/.log` and can delete the fresh live runner log if the runner starts first. - For host-level test detail and failed-test investigation, use `/root/cdc-e2e-cyp-12.17.4/cypress/cmcReporter`, especially `logs/`, `xml/`, and `mochawesome/`. - If the operator asks for ATVM run status without mentioning Mattermost, respond locally only and do not post externally. - If the operator asks to send ATVM run status to Mattermost, use `MATTERMOST_ATVM_WEBHOOK` and `MATTERMOST_ATVM_CHANNEL` from `/home/aw/code/cds/.env.credentials.local` by default and send the final status only after the run has fully completed, whether the run passed or failed. - Do not call out expected, harmless `systemctl reset-failed ... unit not loaded` output in routine run updates; mention it only if it blocks startup or matters for debugging. - Treat `docs/automation/examples.md` as reference-only, not default operator intent. - Put reusable workflow rules in `guide.md` files. - Put dated lessons only in `run-learnings.md` files. - Keep durable environment reference in `inventory/`. - Preserve imported long-form notes in `archive/imported-notes/`; do not treat them as the primary runbook. ## Maintenance Rules - When changing workflow behavior, update the corresponding `guide.md`. - When adding a reusable command pattern, update `docs/automation/examples.md`. - When a run produces a new lesson, update the appropriate `run-learnings.md`. - Keep filesystem paths in docs aligned with the actual repo layout. - Do not remove detailed inventory or credential information from this workspace unless explicitly instructed.