Skip to content

fix: stop false "update available" for same-version images, plus review fixes and Skip - #99

Merged
StrandedTurtle merged 1 commit into
mainfrom
ccr-44bed3b3-tyenjv
Sep 30, 2026
Merged

StrandedTurtle merged 1 commit into
mainfrom
ccr-44bed3b3-tyenjv

Conversation

@StrandedTurtle

Copy link
Copy Markdown
Owner

Summary

  • Fixes false "update available" with identical versions: the checker compared the registry digest against only the first of an image's RepoDigests. All matching repo digests are now compared. Same-version rebuilds are labelled "(rebuilt)" on the card.
  • ntfy notifications were never delivered (emoji title in a header is rejected by fetch); title/tags now go in query params. Messages show "current → available".
  • SSE: a finished session's cleanup timer could delete a newer session (e.g. Revert right after a failed update).
  • Standalone update/revert: no longer pins old image ENV/CMD/labels onto the new image, keeps anonymous volumes and custom hostname, and restores the old container if recreate fails.
  • Checker: evaluates every container sharing an image tag, skips containers with no registry digest, single-flights concurrent checks, better breaking-change version basis.
  • Client: brief SSE drops no longer mark an update failed; "Update all" is sequential per stack.
  • New: Skip an offered update until a newer build is published (POST /api/skip, DELETE /api/skip/:ref).

Testing

  • Server tests: 135 passing (was 118), including regressions for each fix above.
  • Client builds; card states checked visually with mocked API data.
  • Not exercised against a live Docker daemon (none available here); the standalone recreate path is the one to watch.

🤖 Generated with Claude Code

https://claude.ai/code/session_01KiL5R3bRpvGk6QP3E21eHF


Generated by Claude Code

…ew fixes

The checker compared the registry digest against only the FIRST of the
image's RepoDigests. Docker keeps several digests for one repo when the same
image is known under more than one manifest (tag re-pushed with a new index,
or pulled via two tags), listed lexically rather than newest-first — so an
up-to-date container could be flagged forever, showing the same version on
both sides, and updating it changed nothing. All matching repo digests are
now tracked and compared.

Also:
- sse: a finished session's cleanup timer could delete a NEW session started
  within 30s (e.g. Revert right after a failed update), hanging its log.
- notify: ntfy titles contain emoji and were sent as a header, which fetch
  rejects — every real ntfy notification threw (the ASCII test passed).
  Title/tags now go in query params. Messages show "current → available".
- standalone recreate/revert: no longer pins the old image's ENV/CMD/labels
  onto the new image; keeps anonymous volumes and a custom hostname; renames
  the old container aside and restores it if create/start fails.
- checker: check each ref once but evaluate every container running it;
  skip containers with no registry digest; single-flight concurrent checks;
  breaking-change scan uses the remembered running version.
- scheduler: notifications use remembered versions; dashboards refresh after
  the daily scan.
- client: brief SSE disconnects no longer mark an update failed; "Update all"
  runs one container at a time per stack; same-version rebuilds are labelled.

feat: "Skip" an offered update until a newer build is published

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KiL5R3bRpvGk6QP3E21eHF
@StrandedTurtle
StrandedTurtle merged commit ba0ccc0 into main Sep 30, 2026
2 checks passed
@StrandedTurtle
StrandedTurtle deleted the ccr-44bed3b3-tyenjv branch September 30, 2026 23:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants