testsAndMisc/docs/superpowers/contracts/phone-lease-scopes-2026-09-25.json
Krzysztof kuhy Rudnicki c0c51036fc phone_lease: per-app leases, a self-cleaning whole-phone lease, one serial
Several sessions can now share one phone: a lease covers one package (the
real screen stays the default scope, so existing callers keep their
meaning), and only phone-wide actions take `--whole-phone`, which is capped
at 300 s and runs its `--cleanup` commands exactly once on release or, via a
detached reaper, on expiry. The serial is always resolved, never the
"default" placeholder that let android_ui and phone_deploy lease different
keys for the same phone (2026-09-25). Adds status --json, holds and whoami
for phone_vd.sh and the raw-adb hook.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012Ajzz98xksbfak8CaunZWC
2026-09-25 15:05:57 +02:00

15 lines
1.1 KiB
JSON

{
"title": "phone_lease: per-app leases, a short self-cleaning whole-phone lease, one serial",
"objective": "Two sessions each drive a different app on their own virtual display at the same time, only phone-wide actions take the whole phone, and a forgotten forced-Doze cannot outlive five minutes.",
"acceptance_criteria": [
"Package leases on different apps coexist; the same app is exclusive (exit 3).",
"A whole-phone lease conflicts with every foreign lease in both directions and is clamped to 300 s.",
"--cleanup commands run exactly once, on release or on expiry, with no holder action needed.",
"`holds` answers exit 0/1 for this owner and a scope (whole-phone implies every scope); `status --json` lists all live leases.",
"No caller ever leases a placeholder serial.",
"phone_deploy.sh and android_ui keep working unchanged."
],
"out_of_scope": ["phone_deploy virtual-display default, android_ui --display, the raw-adb hook (other session)."],
"verifier": "CLI scenario on a temp lease dir; two concurrent phone_vd displays on the real phone; pytest python_pkg/phone_lease 65 passed at 100% branch coverage."
}