Context for developing and debugging Hubitat Elevation apps, drivers, and hub environment — sandbox constraints, lifecycle idioms, capability contracts, plus grounded deploy/log-tail/lint mechanisms.
74
93%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Room Lighting drives capability.windowShade devices, not only lights. Repurposing an RL activator device as a shade group is a deliberate, Hubitat-staff-endorsed pattern (bravenel, community thread t/new-app-room-lighting/93098).
0/0 = "always close these", 100/100 = "always open these".All Shades, Dark Shades, Light Shades).100/100), some are close groups (0/0); the aggregate plus dedicated open/close rules orchestrate them.Act == Off is normal. The parent's Act/Off match the children's — no "fight."state.active flag, not on what the members are doing.active == false the off fires, logs Already Turned Off, and sends no off() command. The light stays on and nothing reports a failure.active = false. Physical switch, Alexa, HomeKit, a dashboard, a runmethod during maintenance.allOffHandler to switch.off on its members.appState.active == false while a member reads switch: on, read from GET /installedapp/statusJson/<id>. The confirming log line is Already Turned Off.doTurnOff ("Turn Off even if already partially off") on offMeansPage → optionsOffPage, which bypasses the active gate.prevRunTime advancing is not evidence the off happened. The cron fires and the handler runs. The no-op is downstream of both.rules/ui-automation.md).switch turns on in onMeans is not a self-heal. It subscribes switch.on → actHandler on the separately-picked switches list, not on the room's own lights.eventSubscriptions to see which device an option actually watches before reasoning from its name (rules/app-lifecycle.md).Act position == Off position does NOT make a shade RL instance broken — that is a one-position preset.position 0 == closed semantics before calling it a bug. Reading a lighting on/off toggle expectation onto a windowShade position-setter is the mistake.