perf(e2e): reuse one authorized Telegram Desktop session per Mantis run (#127835)

* refactor(mantis): reuse authorized desktop captures

* fix(mantis): budget desktop authorization failures

* chore(mantis): bound desktop proof retries

* fix(e2e): drop unused recorder failure fact type export

* fix(ci): route Mantis desktop teardown through the recorder wrapper

Cleanup invoked the internal recorder executable as mantis-sut, which is
deliberately kept out of the docker group and cannot read the
recorder-owned session file; teardown therefore failed and blocked
safe_to_release. The cleanup step already runs as the recorder user, so
call the public wrapper whose exec shim cds into the session root.

* fix(e2e): make recorder failure fact lane-readable; document v2 lifecycle

The Mantis workflow runs the recorder as the desktop user while the lane
reads the authorization-failure fact as mantis-sut; 0600 made that read
fail EACCES and silently disabled the two-attempt retry budget. Write the
fact 0644 — the 0770 attempt directory bounds visibility.

Update the mantis doc's recorder section for the v2 session lifecycle:
required --session handle with healthy-session reuse, capture-only stop,
and teardown owning authorization termination and lease release.
This commit is contained in:
Ayaan Zaidi
2026-08-22 15:58:12 +05:30
committed by GitHub
parent 2d0fff4ac5
commit da0cb592dd
9 changed files with 797 additions and 253 deletions
@@ -139,7 +139,9 @@ behavior, call `block`; do not call `finish` and describe the block only in pros
Inspect `mantis-lane-facts.json`, every returned event/request, the inspection
PNG, final PNG, and cropped GIF. Confirm the evaluated message is fully visible
near the bottom and the recording covers the behavior—not only its final state.
Iterate as needed; all attempts remain recorded.
Iteration is allowed, but if `start` reports `desktop-unavailable`, record that
fact and use `block`; never retry that lane. Two non-advancing repeats of the
same failing step mean classify and stop, not retry. All attempts remain recorded.
If you design a novel working scenario worth reusing, optionally write
`MANTIS_OUTPUT_DIR/recipe-suggestion.md` with its trigger, exact commands, and
@@ -273,7 +273,7 @@ jobs:
needs: resolve_request
if: needs.resolve_request.outputs.should_run == 'true' && needs.resolve_request.outputs.publish_artifact_name == ''
runs-on: blacksmith-16vcpu-ubuntu-2404
timeout-minutes: 360
timeout-minutes: 120
environment: qa-live-shared
outputs:
comparison_status: ${{ steps.inspect.outputs.comparison_status }}
@@ -934,6 +934,11 @@ jobs:
abort --lane "$lane" || result=1
fi
done
# Teardown goes through the public wrapper: this step already runs as the
# recorder user, and the internal exec shim cds into the session root where
# the recorder-owned session file lives. mantis-sut can do neither.
/usr/local/bin/openclaw-telegram-desktop-recorder \
teardown --session desktop-recorder.json || result=1
if sudo test -f "$lock"; then
echo "Mantis harness lock remained after cleanup." >&2
result=1