Add ATVM watcher service and explicit watcher approval flow

- add the per-run ATVM watcher service package under atvm/watcher-service, including the Python watcher, systemd template unit, helper scripts, and deployment docs
- document the watcher-service install and operating model, including one-run-per-instance behavior, Mattermost posting rules, and the best-practice /opt/atvm-watcher-service install path
- clarify ATVM run approval semantics so `approve` means run without watcher and `approve with watcher` means run and start the watcher
- update the ATVM automation guide and AGENTS rules so watcher usage and approval behavior are explicit and consistent
This commit is contained in:
2026-03-25 17:41:50 -04:00
parent fe228ff0e9
commit ba8354b95c
9 changed files with 962 additions and 8 deletions

View File

@@ -38,7 +38,9 @@ Run ATVM CMC automation tests on the designated automation VM without unintended
- Never execute `cmc-templates.py`, `run-sorry-cypress.py`, or any other ATVM run command until the operator explicitly approves the displayed command(s).
- Approval is required even for preparation-only steps such as template generation.
- If the operator changes any part of the request after commands are displayed, rebuild the commands, show the updated commands, and wait for fresh approval before executing anything.
- Execute only after explicit approval (for example `approve`).
- Execute ATVM run commands only after explicit approval.
- Treat `approve` as approval to run without the watcher service.
- Treat `approve with watcher` as approval to run and also start the per-run watcher service for that build.
- After execution, report immediate success/failure only.
- Do not actively monitor completion unless explicitly requested.
- If monitoring is requested, allow long runtime windows (15-30+ minutes) and continue until completion unless operator instructs otherwise.
@@ -147,13 +149,16 @@ Before any new automation request:
1. Build exact command(s) for the request.
2. Present them verbatim as planned commands before running anything.
3. Wait for explicit approval.
4. Run only approved command(s), no extra options and no silent substitutions.
5. When both template generation and the Cypress runner are requested, run them sequentially, not in parallel.
6. Do not launch `run-sorry-cypress.py` until `cmc-templates.py` has exited successfully and finished updating the intended config/spec files.
7. Treat displayed commands as a review gate: do not execute either command until the operator has had a chance to review them and explicitly approve.
8. If the operator asks to change plugin, config, filters, build name, Gold Disk, or scope after commands are shown, discard the old plan, show the revised commands, and wait for new approval.
9. If monitoring was not requested, report immediate success/failure for each command.
10. If monitoring was requested, keep monitoring until completion and report final outcome.
4. When the watcher is available, present the watcher-start command separately from the core run commands.
5. Treat `approve` as approval to execute the ATVM run without starting the watcher.
6. Treat `approve with watcher` as approval to execute the ATVM run and start the watcher for that build.
7. Run only approved command(s), no extra options and no silent substitutions.
8. When both template generation and the Cypress runner are requested, run them sequentially, not in parallel.
9. Do not launch `run-sorry-cypress.py` until `cmc-templates.py` has exited successfully and finished updating the intended config/spec files.
10. Treat displayed commands as a review gate: do not execute either command until the operator has had a chance to review them and explicitly approve.
11. If the operator asks to change plugin, config, filters, build name, Gold Disk, or scope after commands are shown, discard the old plan, show the revised commands, and wait for new approval.
12. If monitoring was not requested, report immediate success/failure for each command.
13. If monitoring was requested, keep monitoring until completion and report final outcome.
## Requested Test Style
When asked for one VM or a VM set: