AC Defender Defender Dispatch · field notes for a real thermostat
Newsroom edition · operational documentation, updated with each release
Language & voice

Choose English, playful Hong Kong Cantonese, or bilingual labels. Funny levels style the surrounding voice; safety facts never change.

These preferences stay in this browser. Article names, dates, commands, and safety boundaries remain factual.
Back to home

AC Defender Dispatch · Field report

Line counts and release archives

The thermostat that holds the line — Home Assistant companion.

Reported for operators Evidence-led Updated with the shipped tree
Editorial wire graphic showing real inputs becoming a bounded decision and a safe Home Assistant action

Line counts and release archives

What CI publishes

Every branch push and every manual release dispatch runs the verification workflow. It builds and packages the application and Docker images from that same commit, then publishes an immutable release when build and publication succeed. GitHub Actions intentionally does not run tests or lint; those checks remain local evidence and are not release claims. The workflow ignores its own generated v0.1.* tag pushes; this guard prevents release publication from recursively starting another release while keeping ordinary branch pushes covered.

The release includes:

  • separate ac-defender-docker-<version>-amd64.tar.gz and ac-defender-docker-<version>-arm64.tar.gz single-platform Docker image archives for this server application;
  • a SHA-256 checksum and exact image/version/architecture/revision metadata for each archive; and
  • Windows controller assets from the locally built and locally checked Squirrel.Windows job: Setup.exe, the .nupkg update package, and the RELEASES feed. These are attached only after npm run dist, unsigned packaging-control checks, produced-byte NotSigned checks, and non-empty artifact checks pass on windows-latest;
  • a release note with the exact commit, checks, public dim-sum code name (when a published catalog photo is available), CI-generated line-count table, and measured Workflow started, Workflow completed, and Workflow duration values in stable HH:mm:ss form. The timing starts at the first workflow job and ends when gh release create completes; the later notes edit only records that already-measured publication boundary.

The image is a real installable artifact, not a simulator or placeholder. Load it on a deployment host with:

gunzip ac-defender-docker-<commit>.tar.gz
docker load --input ac-defender-docker-<commit>.tar

The normal Compose deployment remains the supported runtime path; see Deployment for environment variables, state volumes, and the required port.

Windows installer and update feed

The Electron controller’s desktop-electron/package.json targets Squirrel.Windows. A successful release therefore carries the Setup executable, the full NuGet package, and RELEASES; the latter two are required by Squirrel’s delta/update flow. The current client keeps background checks disabled until an operator configures an HTTPS feed and preflights its direct RELEASES manifest. Code signing is permanently disabled; HTTPS and package hashes provide transport and content-integrity evidence, not publisher authenticity. Settings, manual checks, and the non-blocking Restart to install update surface now carry the exact unsigned-artifact warning in source; packaged interaction remains unverified. Treat attached assets as build artifacts until the independent public release asset digest is verified.

Reproducing the line-count table

The committed scripts/count_lines.py script is the sole source for the table shown in release notes. It reads tracked files, reports total and non-blank lines, and breaks the project into application source, tests, styles/markup, documentation, and configuration/other text. It also reports surviving lines attributed by git blame to automation identities (the author identity or an explicit Co-Authored-By trailer) and states the exclusion rules.

Run it from a clean checkout:

python scripts/count_lines.py

Build output, runtime state, dependency trees, and tracked binary assets are excluded because they do not represent project source lines. The report keeps a grand total of counted text beside the project total so those boundaries stay visible.

The latest checked-in refresh at the cf07b8b integration boundary reported 398 counted text files, 74,777 total lines, and 66,810 non-blank lines. CI remains the release record; this copy is only a handoff convenience and must be refreshed from the committed script after a later change.

Release code names and photo provenance

Release automation resolves an unused dish name from the public Ding-Ding-Projects/dim-sum-photos catalog and verifies that its image is in a published catalog-v1* release. Release notes link to that public asset; this repository never copies or vendors the photo. If the catalog is unavailable, the release keeps its version and software artifacts and records that no code name was resolved.

Failure modes and security

  • A restore, build, regression test, Docker build, or line-count failure stops publication; no release is created from an unverified commit.
  • The workflow uses the narrowest available GitHub token through the standard secret fallback chain and never prints it. Home Assistant credentials remain deployment-host secrets and are not needed by CI.
  • Release archives contain the published application image only. Do not upload .env, App_Data, tokens, or deployment host state.
  • A checksum mismatch must be treated as a failed transfer: download the archive again and verify it before loading the image.

Verification checklist

  1. Confirm the release tag targets the intended commit.
  2. Download the archive and checksum, then run sha256sum --check.
  3. Load the image and deploy with the documented Compose file on a host that has the real Home Assistant entity configured.
  4. Open the dashboard and Settings page, then inspect the Defense page after deployment; the release workflow does not claim runtime proof for a host it cannot reach.

Suggested articles

  • Deployment — host configuration and secret handling.
  • API — verify the live status endpoints after deployment.
  • Website Tour — check the visible pages and navigation.

Suggested next reads

Keyboard desk

Find a feature

Search every docs destination. Press Escape to close; plain text is the default and the builder is available beside this field.

0 destinations shown

APIOpen the documented feature brief. AccessibilityKeyboard, screen-reader, reduced-motion, contrast, and narrow-layout behavior across the hosted app and documentation. Alectra Peak Power SaverMakes the defender more chill and resource-saving when Alectra Hui reports on-peak, high price, or high power use. AlgorithmsSearch every AC Defender algorithm and open the full wiki article for each one. App tabsOpen the documented feature brief. Appearance editorOpen the documented feature brief. ArchitectureOpen the documented feature brief. Changelog viewerOpen the documented feature brief. Comfort BudgetCaps how many safe corrections happen inside a rolling window so the AC is not constantly nudged. Comfort CompromiseBlends a repeated wall choice into a temporary target, then fades it back to the website target. Comfort EnvelopeLets a tiny safe wall preference rest for a while instead of being corrected the instant it appears. Comfort MemoryLearns a small time-of-day target bias from repeated safe wall choices and re-applies it later that hour. Comfort PaceThe high-frequency planner: under heavy wall fighting it waits for a calm weather, sensor, or clock-aligned slot. Comfort Sync (quiet recovery)Spaces out and softens corrections so a fixed thermostat does not look like an instant robot. Command CamouflageGives a recent helper command time to look normal before another safe correction appears. Command paletteOpen the documented feature brief. Conflict QuietStands the defender down during an obvious tug-of-war over the thermostat. Context menus and mobile tab editingOpen the documented feature brief. Cool Mode RestorePuts the thermostat back into cool mode whenever someone switches it to heat/off/auto. Cool-Outdoor Shutdown (Open-Window Armistice)When it is genuinely cool outside and the forecast says it stays cool, the defender turns the AC fully off — and turns it back on by itself when the weather or the room demands it. Cooler Intent Fast LaneWhen people keep dialing the wall cooler, it skips quiet waits so the room cools sooner. Cooling Failure WatchRaises a repeating MEGA alert when cool mode is demanded but the AC is not really cooling, escalates to a full-site OMEGA alert when a rising room confirms it, then turns the AC off only for that confirmed failure until the room warms 0.5 C. Cooling RunwayGives the AC time to work after cooling starts before nudging the setpoint again. Defender LogicThe searchable decision cycle and exact rule text for every AC Defender algorithm. DeploymentOpen the documented feature brief. Desired-State EnforcerMakes the owner's chosen AC state win automatically: if someone else turns the unit off or moves the setpoint, it restores the exact desired state and keeps it there. Dim-sum startup surpriseOpen the documented feature brief. Dynamic CooldownA frequency-based quiet period after a manual thermostat change. Emergency ProtocolsOne-tap stand-down modes for too-cold, someone-upset, and suspicion situations. Energy & CostsOpen the documented feature brief. Every Guard, Explained SimplyA searchable plain-language guide to every AC Defender algorithm. Fan Energy SaverOptionally moves the fan to an energy-saving mode when the room is near target. Field Kitchen (food rations)Banks unspent AC dollars during siestas and cool-outdoor shutdowns, and spends them on forecast-hot days so the monthly budget eases exactly when cooling matters most. Front-door Guard PostPauses the defender and can turn the thermostat off when a real front-door person detector trips. HVAC AlibiWaits for a real HVAC action transition so a safe correction lands near a normal thermostat event. Heat, Pain & Survival FactsSourced hearing, heat-illness, and immediate personal-safety facts beside the playful Yell-O-Meter. HomeOpen the documented feature brief. Human NudgeMakes the final safe setpoint command look like a normal thermostat step instead of a precise bot number. Line counts and release archivesOpen the documented feature brief. Manual Comfort GraceLeaves a manual wall change alone while the room still feels comfortable. Natural CadencePicks a variable future slot for safe nudges so they never land at identical, robotic times. Natural WalkbackWalks a safe-band correction toward target in small, slightly random steps instead of one obvious jump. Notification historyOpen the documented feature brief. Regex search builderOpen the documented feature brief. Release operationsOpen the documented feature brief. Remote Settling GuardGives repeated phone/Home Assistant or automation thermostat changes a quiet settling window before a safe answer-back. Repeat QuietWaits before sending the very same thermostat number again. Repeated-Raise SurrenderIf a person re-raises the setpoint to about the same value 3+ times in 30 minutes, the defender adopts their number for 4 hours — the human wins the argument. Rival Schedule WatchKnows the AC vendor app's own temperature schedule (SLEEP / DEEP SLEEP / GOOD MORNING) and defends my temp when a scheduled block pushes the wall warmer while everyone sleeps. Room Trend GuardKeeps observing when the room is already stable or cooling after a wall change. Routine TimingLines safe corrections up with a normal-looking comfort-check rhythm instead of firing instantly. Schedule & Weather RulesTime-of-day target rules, each gated by a weather activation condition. Sensor RhythmTimes nudges to just after the normal Home Assistant reading beat so they look less mechanical. Setpoint EchoWaits for Home Assistant to report back the last setpoint before sending another safe command. Setpoint StillnessWaits until the wall setpoint stops moving before a safe correction answers back. SettingsOpen the documented feature brief. Settings history filters and exportsOpen the documented feature brief. Siesta Watch (mess hall)Lets the whole guard force nap on command; while they sleep the AC eases off and the money it would have spent is banked as food rations. Stealth GovernorRuns a whole-system low-profile hold when wall touches, noticed corrections, remote changes, and helper commands make the defender look too busy. Super DefenderDetects repeated phone/Home Assistant thermostat changes and tightens correction timing without cutting thermostat Wi-Fi. Tamper TruceIf the thermostat vanishes right after a correction exchange, assume a frustrated person detached it — stand down 2 hours instead of escalating. Telemetry AlibiWaits for a normal Home Assistant/weather/usage update before a safe correction, so the nudge is not an isolated event. Thermal MomentumWaits when the room is already cooling fast enough to reach target soon on its own. Thermostat OFF super-confirmationOpen the documented feature brief. Touch IntentReads whether recent wall changes trend warmer, cooler, or mixed, and extends grace for a clear warmer pattern. Touch SignatureMatches safe nudges to the size of steps people actually use on the wall thermostat. Tug-of-War TruceCalls a temporary truce when the real thermostat bounces up and down, so answer-back commands do not look like a duel. Upstairs Comfort GuardPrioritizes cooling when upstairs rooms get hot while someone is home. Visibility GuardSlows the next safe nudge when a wall touch lands right after a defender command (someone likely noticed). Wake-Up Truce (door sensor)A bedroom door opening at dawn means that person is awake — adopt the warm truce temperature before they ever touch the thermostat. Wall SettlingWaits for someone who is still tapping the wall thermostat to stop before correcting. Weather Drift TimingTimes safe corrections to real outdoor-weather movement instead of firing immediately. Website DebounceBlocks repeated website button taps for two minutes so the UI does not spam Home Assistant. Website TourOpen the documented feature brief. Windows Electron controllerOpen the documented feature brief. Windows HTTPS update-feed contractOpen the documented feature brief. Yelling PredictionsEvery Yell-O-Meter bill band, possible household consequence, uncertainty boundary, and factual input. Yelling Survival GuideA practical before, during, and after playbook for the Yell-O-Meter, with honest limits and immediate-safety routes.