feat: build from Core alone and publish beta and stable apps - #8
Merged
Merged
Conversation
Track every FTW release: the newest FTW beta becomes the ftw-beta app and, once a Home Assistant OS and Supervisor pilot is recorded, the newest FTW stable promotes the matching app beta into ftw by re-tagging its digest. - Build the image FROM the pinned Core digest; drop the retired optimizer image, its supervisor loop, socket and Python health check. - Add the ftw-beta app; the app version mirrors the Core version. - Verify each pin against FTW's release receipt and the registry instead of a release-body regex; record the signed driver baseline at pin time. - Replace the per-version pilot records with one qualification block that gates stable promotion. Part of srcfl/ftw#1233. Signed-off-by: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: Hugo Karlsson <48095810+HuggeK@users.noreply.github.com> Co-authored-by: HuggeK <48095810+HuggeK@users.noreply.github.com> Claude-Session: https://claude.ai/code/session_014Mn3h7AgWsYcNgPGSCBU62
Signed-off-by: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: Hugo Karlsson <48095810+HuggeK@users.noreply.github.com> Co-authored-by: HuggeK <48095810+HuggeK@users.noreply.github.com>
The fixture's shebang makes the process name python3, and the slim image has no kill binary. Signed-off-by: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: Hugo Karlsson <48095810+HuggeK@users.noreply.github.com> Co-authored-by: HuggeK <48095810+HuggeK@users.noreply.github.com>
This was referenced Sep 13, 2026
miravoss26
reviewed
Sep 16, 2026
miravoss26
left a comment
There was a problem hiding this comment.
Solid simplification. Drops the whole ftw-optimizer sidecar (socket, PID file, monitor/restart loop in run.sh) now that Core ships the optimizer worker itself — the wrapper shrinks from 159 to ~20 lines and the Dockerfile loses a whole build stage + two ARG pairs. healthcheck.sh swaps the old Python health checker for the wget Core already carries, matching the "no apt, no Python in the app layer" goal stated in the description.
Two things worth a second look, not blockers:
- The two-app split (
ftw-betaalways tracks the newest beta,ftwpromotes oncequalification.home_assistant_os_supervisorsayspassed) is a real behavior change for existingftw0.1.0-beta.1 installs — they lose the app until first stable promotion. The PR body already flags this and says the stable changelog covers it, so that's the right place for it, just confirm it actually lands before merge. release-beta.yml's marker check (__PUBLISHED_BY_BETA_WORKFLOW__) is removed rather than adapted — worth a beat to confirm that guard wasn't catching a real race (double-publish), not just dead code from the old optimizer-coupled flow.
CI green across repo checks, addon lint, and both amd64/aarch64 smoke builds. Not on the auto-merge allowlist (home-assistant-addons isn't a listed repo), so this needs a human merge regardless — safe to merge from my read.
frahlg
added a commit
that referenced
this pull request
Sep 18, 2026
The notice step merged in #8 wrote a plain scalar with ": " inside it, which YAML reads as a second mapping key. GitHub refused the file, so the push to main produced a failed run with no jobs, and the hourly sync and the ftw-release dispatch from srcfl/ftw both stopped. Use a block scalar for the echo. Add a test that parses every workflow file, because the existing tests read them as text and could not catch this. Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This was referenced Sep 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of srcfl/ftw#1233. Companion: srcfl/ftw#1238 makes FTW send the
ftw-releasedispatch this repository already listens for.Why
The app has been stuck at
0.1.0-beta.1(Core v1.10.0-beta.1) since July. Its image was built on the optimizer image that srcfl/ftw#1083 retired, and the sync waited for a "live pilot" link that FTW's generated release notes never contain, so every hourly run since 2026-08-17 ended withretrying later.What changes
ftw-betaX.Y.Z-beta.NftwX.Y.Zftw/DockerfileisFROM ghcr.io/srcfl/ftw@<digest>plusrun.shand a wget-basedhealthcheck.sh. No apt, no optimizer loop, no Unix socket, no Python in the app layer. Supervisor's default init reaps;run.shexecs Core as uid 100.ftw-beta/config.yamlis new.ftw/config.yamlappears at the first stable promotion; the sync renders it from the beta manifest. Both installghcr.io/srcfl/home-assistant-addons/ftw:<version>, and the app version mirrors the Core version.upstream_sync.pypins the newest FTW beta intoftw-beta, and the newest FTW stable intoftwby promoting the app beta whose Core digest FTW'sftw-promotion-receipt.jsonnames. Every pin is checked against FTW's receipt and the registry (multi-arch index, revision and version labels). The signed stable driver manifest is recorded at pin time; the gate verifies the live manifest's signature rather than requiring equality with a July snapshot, which would have failed the first publish.sync-upstream.ymlkeeps its hourly schedule and theftw-releasedispatch, stages both apps and dispatchesauto-publish.yml(wasauto-publish-beta.yml), which dispatches Publish beta and Promote stable for versions without a tag. Publish beta builds from the Core digest; Promote stable still re-tags the beta digest and never rebuilds.pilot/*.yamlrecords give way to onequalification.home_assistant_os_supervisorblock; stable promotion refuses to run until it sayspassed.pilot/README.mdis the checklist.compatibility.yamlmoves to schema 2;validate.py,release_gate.py, the workflows, docs and tests follow.Seeded state
ftw-betais pinned to Core v3.4.2-beta.4 (commitfc1c7af9, digestsha256:06ab3751d55527dc557c239307124ab9c131401bba83057b3cb4b52c0643864c), checked against FTW'sftw-image-digests.jsonand the GHCR manifest. Merging publishes that beta through Auto publish → Publish beta.Validation
ftw-beta, and the container smoke test on amd64 and aarch64. Run: https://github.com/HuggeK/home-assistant-addons/actions/workflows/check.yml?query=branch%3Aha-core-only-channelsmainhere) and a Home Assistant OS install. HuggeK has volunteered to run the pilot inpilot/README.mdon the first published beta.Decisions worth an explicit yes or no from the owner
ftw-betausers see that many update prompts.ftw0.1.0-beta.1 sees the app leave the store until the first stable promotion; the stable changelog says so.🤖 Generated with Claude Code
https://claude.ai/code/session_014Mn3h7AgWsYcNgPGSCBU62