Skip to content

The push that succeeded and the theme that never changed

Date

25 Jul 2026

Category

Gotcha

Platform

Shopify

A product page header we were building for a client’s store stopped updating. The code was right, the local checks were clean, every push to the connected GitHub branch reported success, and the preview theme kept rendering an older version anyway. Nothing was visibly broken, which is exactly what makes this one expensive to find.

What we found

Shopify’s GitHub integration runs its own validation when it syncs a commit, and part of it is a strict sanitiser on the content of native text blocks. It strips inline styling, only accepts a short list of tags, and rejects some perfectly ordinary Liquid. None of this runs locally. The theme check tool that passes your code clean has never heard of these rules, because they are enforced by the sync, not the theme.

The nasty part is the failure mode. One invalid setting does not fail one setting, it fails the entire template file, and Shopify’s response is to keep the last version it accepted and quietly drop the new one. So the repository moves forward, the pushes keep reporting success, and the theme is frozen several commits back. The only place the truth appears is the sync log inside the Shopify admin, one line saying a file failed while everything around it succeeded.

Once we read that log, the fix took minutes. Anything that needs precise styling or dynamic values moved out of the native text settings and into a small custom block we own in code, where those restrictions do not apply. The template unfroze on the next push and every commit since has landed.

What to take from it

If your theme is connected to GitHub and a change you were told about has not appeared, do not assume it was never made. Green pushes are not proof the theme took the change, they are only proof the code left the building. The sync log in the admin is the record that matters, and a developer who knows to read it will find in five minutes what could otherwise burn an afternoon of everyone insisting the work was done. It was. The platform just declined it without raising its voice.