Skip to content

Conversation

@spupuz
Copy link
Contributor

@spupuz spupuz commented Feb 8, 2026

Thanks for the feedback! I've moved my changes to a new branch and synced my fork's main with upstream. Here's the new PR:

main...spupuz:arcane:feature/container-exclusion-prune-notifications

Let me know if there's anything else that needs adjustment!

Disclaimer Greptiles Reviews use AI, make sure to check over its work.

To better help train Greptile on our codebase, if the comment is useful and valid Like the comment, if its not helpful or invalid Dislike

Greptile Overview

Greptile Summary

This PR replaces the excluded-containers dropdown in the environment Jobs tab with an inline searchable list of containers using checkboxes, and adds a new autoUpdateExcludedContainers field to the settings update type. It also includes a small non-functional change to three notification provider forms (an extra comment line, already discussed in prior threads).

Confidence Score: 3/5

  • Moderately safe to merge, but UX/behavior around label-excluded containers likely needs adjustment.
  • Main functional change is localized to JobsTab. The new UI is straightforward, but it currently treats label-excluded containers as selected while disabling interaction, which can confuse users and makes the exclusion count include items they didn't choose. Other changes are minimal and type-only.
  • frontend/src/routes/(app)/environments/[id]/components/JobsTab.svelte

Important Files Changed

Filename Overview
frontend/src/routes/(app)/environments/[id]/components/JobsTab.svelte Replaced searchable select with inline searchable checkbox list for excluded containers; label-excluded containers are rendered as checked+disabled which can mislead users about what they configured.
frontend/src/routes/(app)/settings/notifications/providers/GenericProviderForm.svelte Only change is an extraneous top-of-file comment (already noted in prior thread); otherwise no functional changes.
frontend/src/routes/(app)/settings/notifications/providers/GotifyProviderForm.svelte Only change is an extraneous top-of-file comment (already noted in prior thread); otherwise no functional changes.
frontend/src/routes/(app)/settings/notifications/providers/SignalProviderForm.svelte Only change is an extraneous top-of-file comment (already noted in prior thread); otherwise no functional changes.
types/settings/settings.go Adds Update.AutoUpdateExcludedContainers field to settings types; appears straightforward.

spupuz and others added 17 commits February 2, 2026 11:55
…ications

Prune Notifications:
- Backend: Implemented Prune Report Notification logic and templates
- Backend: Updated ScheduledPruneJob to send reports via NotificationService
- Frontend: Added Prune Report Notification switch to Notification Settings
- Frontend: Updated FormSchema and models to support prune notifications

Container Exclusion:
- Backend: Added AutoUpdateExcludedContainers setting
- Backend: Updated UpdaterService to filter excluded containers
- Frontend: Added AutoUpdateExcludedContainers to environment schema
- Frontend: Added multi-select UI in Job Schedules tab for exclusions
- Frontend: Fixed infinite loop in JobsTab state management
- Frontend: Fixed missing icon import in JobsTab
- Fixed implicit any type in JobsTab.svelte container exclusion logic
- Added autoUpdateExcludedContainers to Settings type definition
- Added logic to detect 'com.getarcaneapp.arcane.updater=false' label
- Containers excluded by label are now shown as selected but disabled in the exclusion UI
- Added visual indicator '(Label)' for these containers
Renamed helper functions per code review suggestion:
- unmarshalConfig -> unmarshalConfigInternal
- validateEmailConfig -> validateEmailConfigInternal
- decryptDiscordToken -> decryptDiscordTokenInternal
- decryptTelegramToken -> decryptTelegramTokenInternal
- decryptEmailPassword -> decryptEmailPasswordInternal
- renderTemplates -> renderTemplatesInternal
- formatBytes -> formatBytesInternal
- Add AutoUpdateExcludedContainers field to settings.Update struct to fix 422 validation error
- Replace dropdown with inline scrollable checkbox list for better multi-select UX
- Add search input for filtering containers
- Show excluded count badge next to section header
- Revert unnecessary dropdown keep-open workarounds from SearchableSelect
…effect state mutation with derived pattern - Remove emoji from prune notification messages in notification_service.go - Rename unexported prune notification functions with Internal suffix - Fix indentation in NtfyProviderForm.svelte and PushoverProviderForm.svelte
@spupuz spupuz requested a review from a team February 8, 2026 17:45
@github-actions
Copy link

github-actions bot commented Feb 8, 2026

This pull request has merge conflicts. Please resolve the conflicts so the PR can stay up-to-date and reviewed.

@github-actions
Copy link

github-actions bot commented Feb 8, 2026

This pull request has merge conflicts. Please resolve the conflicts so the PR can stay up-to-date and reviewed.

@spupuz
Copy link
Contributor Author

spupuz commented Feb 8, 2026

Merging upstream changes into my feature branch. Resolving conflicts by accepting upstream versions, as my features (Container Exclusion & Prune Notifications) have already been merged into the main project. This commit aligns my fork with the current codebase.

@spupuz
Copy link
Contributor Author

spupuz commented Feb 8, 2026

Hey @mkendell, just pushed a fix for the merge conflicts in the provider forms (synced with main), so that should be sorted now. 🤞 Fingers crossed for the CI! I noticed some random timeouts with the linter earlier due to an upstream issue with the latest version, but hopefully it goes through this time. Let me know if it looks good!

@spupuz
Copy link
Contributor Author

spupuz commented Feb 8, 2026

@kmendell all test are good ... or at least it seems

@kmendell kmendell changed the title Feature/container exclusion prune notifications feat: inline container exclusion list Feb 8, 2026
@kmendell kmendell changed the title feat: inline container exclusion list fix: add missing container exclusion option Feb 8, 2026
@kmendell
Copy link
Member

kmendell commented Feb 8, 2026

@greptileai

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4 files reviewed, 2 comments

Edit Code Review Agent Settings | Greptile

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Feb 8, 2026

Additional Comments (1)

types/settings/settings.go
Setting added but unused

AutoUpdateExcludedContainers is added to types/settings.Update, but this PR doesn’t update any frontend settings model, API handler, or UI to actually read/write this field. As-is, the option won’t be surfaced or persisted anywhere, so the feature described by the PR title won’t work end-to-end.

Prompt To Fix With AI
This is a comment left during a code review.
Path: types/settings/settings.go
Line: 279:282

Comment:
**Setting added but unused**

`AutoUpdateExcludedContainers` is added to `types/settings.Update`, but this PR doesn’t update any frontend settings model, API handler, or UI to actually read/write this field. As-is, the option won’t be surfaced or persisted anywhere, so the feature described by the PR title won’t work end-to-end.

How can I resolve this? If you propose a fix, please make it concise.

@kmendell
Copy link
Member

kmendell commented Feb 9, 2026

Is the whole fix just that one line? or was there supposed to be more?

@spupuz
Copy link
Contributor Author

spupuz commented Feb 9, 2026

Is the whole fix just that one line? or was there supposed to be more?

Umh should have been more let me check.

@spupuz
Copy link
Contributor Author

spupuz commented Feb 9, 2026

Hey @kmendell, just pushed an update to main (commit 9846346) that replaces the multi-select dropdown for excluded containers with a proper scrollable list + search. The dropdown was really annoying because it would close every time you selected a container, making it tedious to select multiple items. The new list fixes this. 🚀

image

@kmendell kmendell changed the title fix: add missing container exclusion option feat: inline container exclusion list Feb 9, 2026
@kmendell
Copy link
Member

kmendell commented Feb 9, 2026

@greptileai

@spupuz
Copy link
Contributor Author

spupuz commented Feb 9, 2026

@kmendell i just forgot to put a small counter for excluded containers
i can add it if you want

@spupuz
Copy link
Contributor Author

spupuz commented Feb 9, 2026

image

@kmendell Just pushed an update to feature/container-exclusion-prune-notifications. I added a live count to the "Excluded Containers" label so it's easier to see how many are ignored at a glance (including the label-based ones).

@stavros-k
Copy link

This might also benefit from some label per container in stacks!
ie arcane.auto-update: false.

@spupuz
Copy link
Contributor Author

spupuz commented Feb 9, 2026

This might also benefit from some label per container in stacks!
ie arcane.auto-update: false.

Already implemented

@kmendell
Copy link
Member

This might also benefit from some label per container in stacks! ie arcane.auto-update: false.

This has been a feature since i made the auto updater:

https://getarcane.app/docs/guides/updates

com.getarcaneapp.arcane.updater=false is the label

@kmendell
Copy link
Member

@greptileai

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

5 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Feb 10, 2026

Additional Comments (1)

frontend/src/routes/(app)/environments/[id]/components/JobsTab.svelte
Disabled items are pre-selected

mapContainerToItem() marks label-excluded containers as selected (excludedContainers.has(name) || labelExcluded) while also setting disabled: labelExcluded. In the UI this renders a checked-but-disabled checkbox, which can’t be unchecked and also gets counted as “excluded” even if the user never chose it. If label exclusion is meant to be informational/override, it should probably not force selected, or the UI should distinguish “excluded by label” vs “excluded by setting” so users don’t think they configured it.

Prompt To Fix With AI
This is a comment left during a code review.
Path: frontend/src/routes/(app)/environments/[id]/components/JobsTab.svelte
Line: 166:176

Comment:
**Disabled items are pre-selected**

`mapContainerToItem()` marks label-excluded containers as `selected` (`excludedContainers.has(name) || labelExcluded`) while also setting `disabled: labelExcluded`. In the UI this renders a checked-but-disabled checkbox, which can’t be unchecked and also gets counted as “excluded” even if the user never chose it. If label exclusion is meant to be informational/override, it should probably not force `selected`, or the UI should distinguish “excluded by label” vs “excluded by setting” so users don’t think they configured it.

How can I resolve this? If you propose a fix, please make it concise.

 - Refactored JobsTab.svelte to not force selection for label-excluded containers

 - Updated container count logic to exclude label-excluded containers

 - Added missing i18n strings for auto-update exclusion description and label

 - Replaced hardcoded 'No results' strings with 'common_no_results_found'
@spupuz
Copy link
Contributor Author

spupuz commented Feb 10, 2026

@mkendell, here is a concise summary of the work:

UI Refactor & i18n (Commit: 98c9ada)

  • New List View: Replaced the exclusion dropdown with a scrollable checklist and real-time search.
  • Label Handling: Containers excluded via Docker labels are now disabled, marked with (Label), and no longer included in the manual exclusion count.
  • i18n: Moved all hardcoded strings to en.json using paraglide-js.

Backend Linter Investigation

  • Zero Backend Changes: Confirmed no Go changes compared to main in this branch.
  • Local Verification: golangci-lint passes locally with CI config (0 issues).
  • CI Diagnosis: The "2 errors" in CI appear to be environment-related (likely a missing dist folder for //go:embed) and unrelated to the changes in this PR.

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.

3 participants