home-assistant / home-assistant/iOS

Legacy watch complications never update: update_complications no longer requests a template render

Open
#5,830 0 comments 0 reactions 0 assignees View on GitHub
bug ios
Dominant language
Swift
Stars
2.4k
Forks
520
Avg merge
7h 27m
Merged PRs (30d)
264

Description

**iOS device model, version and app version**

Model Name: iPhone 15 Pro (iPhone16,1), Apple Watch (Watch7,1)
Software Version: iOS 26.6.2, watchOS 26.6
App version: 2026.9.1 (2026.2985)

**Home Assistant Core Version**

2026.9.2

**Describe the bug**

After updating the app, my legacy Graphic Corner complication stopped updating. I edited its templates, saved, and tapped Reload Complications. I get the "Reload Sent" confirmation, but the watch face never changes. It still shows the values it had before the update. Re-entering the same templates, replacing them with something completely different, and reloading several times all made no difference.

The part that cost me the most time is that nothing indicates a problem. The editor accepts and saves the templates, the preview evaluates them correctly, and Reload Complications reports success every time.

I asked for help digging into why it never updates. I don't fully understand the answer, so I am quoting rather than presenting it as my own. It may save you some time:

> With debug logging enabled for mobile_app and websocket_api, an update_complications push reaches the phone and the phone calls back with get_config, but no render_template request is ever made, over the webhook or the websocket. In the app, HandlerUpdateComplications in NotificationsCommandManager.swift only calls Communicator.shared.transfer(HAWatchConnectivity.ComplicationInfo(content: [:])), and never builds the render_template request that WebhookResponseUpdateComplications.request(for:) produces. A legacy complication's face text is read from Data["rendered"], which only that request writes.

If that is right, a legacy complication can never receive new values, which matches what I am seeing.

**To Reproduce**

1. Have a legacy complication using Jinja templates on a watch face.
2. Edit one of its templates to something visibly different, and save.
3. Tap Reload Complications.
4. The face keeps showing the old value.

**Expected behavior**

Either the templates render and the face updates, or the app makes it clear that legacy complications no longer update.

**Screenshots**

**Additional context**

Contributor guide

Open the contributing guide

Research direction

Start in NotificationsCommandManager.swift at HandlerUpdateComplications and trace the update_complications flow through the watch communication code. Compare it with WebhookResponseUpdateComplications.request(for:) and follow how a legacy complication reads Data["rendered"]. Done means editing a legacy complication template and reloading it causes the watch face to show the new value.

Written by the indexing model from the issue text.

Assessment

Tech stack
ios, swift
Domain
mobile-dev
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
72/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.