Hassfest scans every manifest in the repo, and demo_guard (which re-registers homeassistant.restart/stop as no-ops on the public stand) tripped the SERVICES check. It defines no services of its own; the file documents exactly that.
Demo-stand extras
Things that live on the public stand (demo.houseplan.tech) but are not part of the shipped integration.
-
demo_robot/— the scripted robot vacuum (docs/VACUUM.md, "demo stand gets a scripted synthetic robot"). Deployed by copying the folder tocustom_components/demo_robotin both stand seeds and addingdemo_robot:to configuration.yaml; the dev stand picks it up automatically from this path (/opt/hp/bin/hp-update-dev.sh). The rest of the stand-only config (template LQI sensors, alarm helpers, the smoke automation) lives in the seeds on the stand host — seedocs/TESTING-DEMO.mdand the memory notehouseplan-demo-stand. -
demo_guard/— stand-only guard (2026-07-31). Visitors log in as an administrator (the card editor is gated onis_admin) and kept restarting HA from the UI, which looked like the stand crashing between hourly resets. The component re-registershomeassistant.restart/homeassistant.stopas no-ops after startup. Deployed tocustom_components/demo_guardin seed-demo only (the dev stand sits behind basic auth) +demo_guard:in configuration.yaml. -
www/stand-reset-timer.js— console-only countdown to the next hourly reset (hp-reset.timer, every hour at :00). Served as/local/stand-reset-timer.jsfromseed-demo/www/, wired throughfrontend: extra_module_url. Logs a styledconsole.infoevery minute, switching toconsole.warnfor the last 5 minutes.www/stand-dev-info.jsis the dev-stand counterpart: a singleconsole.infosaying the dev stand only resets on deploy.