verisure-deploy
Full deploy pipeline — test, typecheck, deploy to HAOS, smoke test
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Menu
Full deploy pipeline — test, typecheck, deploy to HAOS, smoke test
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Baseado na classificação ocupacional SOC
End-of-session protocol — push, checkpoint, CHANGELOG, docs, todo
Session start protocol — workflow gates, pending work, status report
Structured investigation — HA logs, API trace, code trace. No code changes until approved.
Bump version, publish to PyPI, create GitHub release, update HACS manifest
Dispatch 8 parallel agents for full codebase review (line-level + architecture)
| name | verisure-deploy |
| description | Full deploy pipeline — test, typecheck, deploy to HAOS, smoke test |
Run the full deployment pipeline. Abort on any failure — never continue past a red gate.
pytest tests/ -x -q — abort if any test fails.pyright verisure_italy/ custom_components/ — abort if any new errors.ruff check verisure_italy/ tests/ custom_components/ — abort on errors.manifest.json to HAOS via SSH pipe. Manifest is load-bearing — it carries the integration version + client library pin, so HACS and HA Dev Tools both show the deployed version correctly:
for f in custom_components/verisure_italy/*.py custom_components/verisure_italy/manifest.json; do
ssh root@homeassistant -p 22222 \
"cat > /mnt/data/supervisor/homeassistant/custom_components/verisure_italy/$(basename $f)" \
< "$f"
done
verisure_italy/ package is pip-installed inside the HA
Docker container. Must deploy it separately — the integration imports it at runtime:
for f in verisure_italy/*.py; do
ssh root@homeassistant -p 22222 \
"docker exec -i homeassistant sh -c 'cat > /usr/local/lib/python3.14/site-packages/verisure_italy/$(basename $f)'" \
< "$f"
done
Note: The Python version path (3.14) may change with HA updates. If deploy fails
with "No such file or directory", check the actual path with:
ssh root@homeassistant -p 22222 "docker exec homeassistant python3 -c \"import verisure_italy; print(verisure_italy.__file__)\""ssh root@homeassistant -p 22222 "ha core restart" — returns immediately once the restart is scheduled; core takes ~30-60s to come back up.sleep N commands. ha core info returns info even while core is restarting, so poll the HTTP API instead — it only answers 200 once HA is fully booted:
source .env
until [ "$(curl -sf -o /dev/null -w '%{http_code}' \
http://homeassistant:8123/api/ -H "Authorization: Bearer $HA_TOKEN")" = "200" ]; do
sleep 3
done
Use this inside a plain Bash call (not Monitor) — it exits as soon as the API responds. You'll get a completion notification automatically../scripts/smoke_test.sh — abort if any entity/service missing.ssh root@homeassistant -p 22222 "docker logs homeassistant 2>&1 | grep -i verisure_italy | tail -20" — look for ERROR/WARNING.On failure at any step: stop, show full error, do NOT proceed or auto-fix. On success: report all gates passed.
Deploy does NOT release. Releasing (PyPI + GitHub tag) is a separate manual step.
If an end-to-end arm/disarm cycle is run against the live panel as
part of verification (either within this skill or downstream in a plan
like docs/plans/*.md), the panel's initial state and the user's
automations must be restored afterwards. This is a real home
alarm — leaving it in the wrong state is a security failure.
Protocol:
source .env
INITIAL=$(curl -s http://homeassistant:8123/api/states/alarm_control_panel.verisure_alarm \
-H "Authorization: Bearer $HA_TOKEN" | python3 -c "import sys,json;print(json.load(sys.stdin)['state'])")
echo "initial: $INITIAL"
project_ha_automations.md.INITIAL == armed_away, the last
transition must be alarm_arm_away, not alarm_disarm. Never
end the cycle on a different state than where you started.alarm_control_panel.verisure_alarm state equals
INITIAL, and every paused automation is back to on.Do not rely on a plan's default "cycle ends disarmed" template — patch the last transition to restore. If unsure what the initial state was, ASK the user before running the cycle.