{ "packageName": "Automation Map (Dev)", "author": "Gordon Thelander", "version": "2.2.1", "minimumHEVersion": "2.5.1", "dateReleased": "2026-09-02", "documentationLink": "https://github.com/GordonThelander/hubitat-automation-map/blob/dev/README.md", "communityLink": "https://community.hubitat.com/t/release-hubitat-automation-map/165524", "releaseNotes": "DEV CHANNEL - this manifest tracks the development branch, not the production release.\n\n2.2.1 - In development on the dev channel. Insights gains findings for things that look fine but silently do nothing: a paused or disabled rule another rule still calls, a disabled device automations still command or wait on, and rules Hubitat itself marks broken. Every paused or disabled rule is also listed as plain context rather than as a fault, and Local Variables with no decoded read or write now get the same finding their Hub Variable equivalent already had. Each pairs a state with the second fact that makes it actionable, so deliberately paused rules and deliberately disabled devices stay out of the way. Static configuration evidence only - nothing here observes runtime behaviour.\n\n2.2.0 - Production-cleanup release. The Automation Map Telemetry Driver is removed entirely - an upgrading instance automatically removes its own telemetry child device (best-effort; if Hubitat refuses deletion because it is still referenced elsewhere, the settings page shows an actionable warning and the app retries automatically the next time its settings are saved). In its place, a settings-page toggle enables on-demand diagnostic logging for troubleshooting, off by default and auto-disabling after one hour so it cannot be left on by accident; routine/lifecycle log lines are now gated behind it, while failures that can leave the map incomplete or stale remain always logged. The automatic-scan time field now shows its actual default (00:30 production, 01:00 Dev) pre-filled instead of appearing blank with an unrendered explanation. Both the removed telemetry approach and the new logging approach are documented for reuse at https://github.com/GordonThelander/hubitat_dev_utililities under \"Application Telemetry Methods\". The four Focus dropdowns (Apps, Devices, Hub Variables, Local Variables) are now a single combined combobox each: a non-editable closed control (label plus arrow) opens a popup whose first row is a dedicated, auto-focused search field, with the filtered options list directly below it and no pinned \"All X\" row once a filter narrows the list. A colour and typography pass brings the desktop UI closer to gordonthelander.github.io/HPM_Manifest_Crawl/ (Hubitat Community Utilities) - Mulish typeface (self-hosted from this repo, not fetched live from Google Fonts, for the same reason the telemetry driver was removed), pill-shaped buttons and a shared blue accent, softer panel corners. The dark background and the graph's own node/edge colours are unchanged.\n\n2.1.7 - Device discovery now walks the complete tree /hub2/devicesList returns instead of only its top-level entries. A device-owned component device (isComponent: true, created by a parent device driver rather than an app - Shelly, Bond, and Matter bridges are the reported examples) can be represented nested inside its parent's own children array, invisible to the previous flat read regardless of whether the component was referenced by anything. Confirmed live on this hub: the Variable Connectors parent carries all nine per-variable Connector devices this way, previously invisible to bulk discovery and synthesized as bare placeholder nodes from Hub Variable metadata instead - intended to resolve with real room/type/capability data like any other device once verified on a live Dev scan. Aggregates by device ID before grouping so a device exposed both at the top level and beneath a parent is enriched, not duplicated. Reported by community tester Steve (oldcomputerwiz); independently confirmed on his own hub - Hubitat and Automation Map both reported 351 devices, Aqara/Bond/Harmony/Shelly devices specifically checked and all present, described as \"spot on\".\n\n2.1.6 - Local Variables (belong to one rule) become first-class nodes on the network graph and in the AI-friendly export (schema 6), not just names inside the rule detail card. Seeded from each rule's own declarations so a declared-but-unused Local Variable is still shown, isolated on the same shelf an orphaned app already uses. Owner-scoped identity throughout - two rules with their own same-named Local Variable get two distinct nodes, never merged. Graph schema bumped 7->8. 2026-08-29: fixed a live-confirmed race where a page load right after a scan completed could read stale pre-commit state and auto-start a genuine second scan; graphVersion now lives in atomicState, which commits immediately instead of once per execution. Verified on the Dev hub with a real scan plus repeated post-completion checks. 2026-08-30: fixed a related live-confirmed race where state.graph itself could be clobbered back to null after a completed scan, hiding the map link/counts until a fresh scan was run - the app now rebuilds the graph locally from the scan's other still-intact results instead of requiring a rescan. Verified live: reproduced naturally, self-heal fired and repaired it within about a second, correct on every check for the following two minutes.\n\n2.1.5 - Adds short [LOC]/[HVR]/[CON] class tags to the Hub Variable Focus dropdown and the rule detail variables card, matching the existing app/device Focus tag convention, so Local, Hub, and Connector-backed variables are distinguishable at a glance. No new backend fields; every tag reads a value already resolved elsewhere. Verified on the Dev hub: a fresh scan against fixture rule 3079 confirmed both tags render from the correct source data (the Hub Variable's own connectorDeviceId, and the already-proven Local/Hub scope split), with no regression on the earlier Gate A fixtures. Dev-only testing build, not yet promoted to production.\n\n2.1.4 - Correctly distinguishes Local Variables (belong to one rule) from Hub Variables (shared hub-wide) and Variable Connector devices, instead of treating every structured variable reference as a Hub Variable. A same-named Local and Hub Variable in one rule is now reported as genuinely ambiguous rather than guessed, and a reference this app cannot confirm against the hub's own variable list is reported as unresolved rather than creating a weaker-guarantee node. Adds a Local/Hub/Needs-review variables section to the rule detail panel and corresponding fields to the AI-friendly export (schema 5). Verified on the Dev hub against Gate A's fixture predictions: classification, graph topology, corrected flow labels, and the Local/Needs-review rule detail card all matched exactly, with no invented relationships and no variable values exposed anywhere. Dev-only testing build, not yet promoted to production.\n\n2.1.3 - Fixes the registry-finalization stale-snapshot race and closes the watchdog-boundary path: a finalizer entering with a stale registry snapshot now resolves correctly instead of publishing an incomplete result, and a completed generation can never be republished. Also fixes the settings page showing stale scanning/building-map text after a scan has actually completed. Verified on the Dev hub, including a controlled test forcing the registry watchdog to win the finalizer claim, and independently on a second, larger hub.\n\n2.1.2 - Adds the Automation Map Telemetry Driver: reports anonymous data to support ongoing development and future features, after every scan, disclosed in the README, no toggle. Fixes a false error status the driver reported for a successful send (Apps Script's redirect response was being read as an HTTP error).\n\n2.1.1 - Version bump only, no functional change; keeps Dev in sync with the production release.\n\n2.1.0 - Makes Insights concise and actionable with plain-language explanations and next checks, shares that guidance with the AI-friendly export, adds reviewed defaults for common external systems, reconciles Hub Variable identities that include a trailing period, and corrects the installation-page description of app discovery. Dev-hub testing build.\n\n2.0.14 - Adds authoritative Hub Variable inventory via Hubitat's in-process getAllGlobalVars() API (replacing the purely reference-derived list), Connector reconciliation, structured device-attribute writeSource, and export schema 4. Dev-hub testing build, not yet verified - see Supporting Docs/hub_variable_v2014_implementation_spec.md for the design record.\n\nComplete history: https://github.com/GordonThelander/hubitat-automation-map/blob/dev/CHANGELOG.md", "apps": [ { "id": "2c2c28d6-f6eb-4c88-afad-d9d32a6013bc", "name": "Automation Map (Dev)", "namespace": "Hubitat Integrations", "location": "https://raw.githubusercontent.com/GordonThelander/hubitat-automation-map/dev/apps/automation_map.groovy", "required": true, "oauth": true, "primary": true, "version": "2.2.1" } ] }