Skip to content

Phase 1: drop Diun, fix update bug, dashboard UX overhaul#7

Merged
StrandedTurtle merged 1 commit into
mainfrom
claude/phase1-selfcontained-ux
Jun 25, 2026
Merged

Phase 1: drop Diun, fix update bug, dashboard UX overhaul#7
StrandedTurtle merged 1 commit into
mainfrom
claude/phase1-selfcontained-ux

Conversation

@StrandedTurtle

Copy link
Copy Markdown
Owner

First phase of the self-contained rework (per the approved plan). Unblocks daily use and addresses the most-felt UX feedback.

The blocking bug

docker compose pull failed ... open /opt/stacks/notes/compose.yaml: no such file or directory. The docker compose CLI runs inside this container and reads the compose file from this container's filesystem, so the stacks dir must be mounted at the same absolute path. Fixes:

  • updateContainer now fs.existsSync(composeFile) up front and returns an actionable error ("mount your stacks at the same path") instead of the cryptic one.
  • New GET /api/diagnostics + a dashboard banner that warns when STACKS_DIR isn't mounted, before you click Update.
  • README "add to existing stack" snippet corrected to mount /opt/stacks (Dockge default), not the placeholder path.

Drop Diun

  • Removed the webhook ingest, the /api/diun/webhook route, and the DIUN_WEBHOOK_TOKEN requirement. The active registry check (checker.js + registry.js) is now the sole source of update info — no external notifier required.
  • Scrubbed Diun from README / docker-compose.yml / .env.example / API_CONTRACT.md.

Dashboard UX

  • Collapsed Check + Refresh into one "Check for updates" action; auto-runs on first open each session.
  • Group by stack (compose project) in collapsible sections that remember open/closed; updates sorted to the top.
  • Default to Updates-only with an All/Updates-only filter.
  • Real version numbers (org.opencontainers.image.version label, else the tag) instead of digest hashes; digest demoted to a tooltip.
  • Relabelled pinning as "Pin Version".

Not in this PR (later phases, per plan)

  • Phase 2: dedicated Pinned-versions section + Hide + server-side Settings store.
  • Phase 3: background scheduled checks + Discord notify.
  • Phase 4: best-effort changelog.

Test plan

  • cd server && node --test → 60/60
  • cd client && npm run build → clean
  • Server boots without import errors after Diun removal (smoke-tested)
  • Host: with /opt/stacks:/opt/stacks mounted, Update succeeds; without it, the banner + clear error show

Generated by Claude Code

Make the app self-contained and fix the blocking update failure.

- Fix the compose-mount bug: docker compose runs inside this container and
  reads the compose file from its own filesystem, so check fs.existsSync
  up front and return an actionable "mount your stacks at the same path"
  error instead of a cryptic "no such file or directory". Add GET
  /api/diagnostics + a dashboard banner that warns when STACKS_DIR isn't
  mounted, before an update is even attempted.
- Drop Diun entirely: remove the webhook ingest, the /api/diun/webhook
  route, and the DIUN_WEBHOOK_TOKEN requirement. The active registry check
  (checker.js + registry.js) is now the sole source of update info. Scrub
  Diun from README, docker-compose.yml, .env.example, API_CONTRACT.md.
- Collapse "Check" + "Refresh" into one "Check for updates" action and
  auto-run it on first open each session.
- Group containers by stack (compose project) in collapsible sections that
  remember open/closed; sort containers with updates to the top.
- Default to showing only containers that need an update, with an
  All/Updates-only filter.
- Show real version numbers (org.opencontainers.image.version label, else
  the tag) instead of digest hashes; demote the digest to a tooltip.
- Relabel pinning as "Pin Version".

Server tests 60/60; client builds clean.
@StrandedTurtle StrandedTurtle merged commit e2fa6fe into main Jun 25, 2026
4 checks passed
@StrandedTurtle StrandedTurtle deleted the claude/phase1-selfcontained-ux branch June 26, 2026 09:53
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.

1 participant