Conversation
Stop clamping the active notification limit to the saved history retention limit. This lets users disable saved history while still allowing active notifications, and updates the sanitizer regression test to lock that behavior in.
Treat inline markup as formatting instead of forced word separation when rendering notification views. The new tests cover adjacent inline tags and mixed inline/block spacing so bodies do not gain artificial spaces.
Normalize and bound image paths and icon names derived from untrusted notification hints. This adds UTF-8-safe truncation, localhost file URI normalization, remote file URI rejection for app icons, and regression coverage for each behavior.
Add clear_active and clear_history to the generated control proxy contract alongside clear_all. This keeps client tooling aligned with the daemon methods that distinguish active rows from saved history.
Move the former flat cli_args implementation into a focused cli module tree. Argument structs, command enums, DND/debug/inhibit/preset mapping, and CLI tests now live under crates/noticenterctl/src/cli with clearer ownership.
Replace the dbus_ops catch-all with client, dispatch, and output gate modules under the dbus folder. The tests move with the D-Bus layer and verify command dispatch, local command bypasses, and diagnostic output gating.
Remove trailing periods from touched noticenterctl comments and keep nearby explanatory comments consistent with the repository comment style. No runtime behavior changes are included in this cleanup.
Remove the flat daemon control module and make daemon/control the owner of the control server surface. The server wrapper now sits beside the existing clear, DND, inhibit, query, sanitize, watch, and test modules.
Move the notification server out of the flat notifications.rs file and split server responsibilities into capabilities, close, and flow modules. Notification tests now live under daemon/notifications/tests, including the payload.rs move requested for the old payload_tests file.
Replace the long daemon/state.rs file with state modules for the model, scheduler wiring, notification lifecycle helpers, runtime flags, cache logic, and signal fanout. Focused tests now live under daemon/state/tests instead of daemon/tests.
Add explicit path attributes for daemon, child process, sound, and trial mode root modules. This keeps nested module discovery stable after the folder refactors and makes cargo-mutants see the moved files reliably.
Make expiration scheduling synchronous from callers by switching the scheduler command channel to an unbounded sender. This removes unnecessary await points from close/cancel paths while preserving stale deadline filtering and heap compaction.
Add a regression test that stores an active notification, schedules a near-term deadline, and verifies the scheduler closes it and clears expiration bookkeeping. This covers the live scheduler path rather than only heap helpers.
Preserve active notification capacity even when saved history retention is set to zero. The new store regression test proves active rows remain visible when max_active allows them while history stays disabled.
Normalize touched daemon comments so they avoid trailing periods and remain short, direct explanations. This keeps the expanded module tree consistent with the requested comment style without changing daemon behavior.
Add helpers to remove installer-owned PATH blocks from shell startup files during cleanup. The tests cover startup file selection, idempotent insertion, safe removal, missing files, and preserving unrelated user-managed lines.
Update the uninstall plan so the daemon is stopped before service and file removal. Uninstall now also removes installer-managed Hyprland autostart and shell PATH entries on a best-effort basis, with UI copy updated to describe that scope.
Support -V and --version as early-exit installer CLI options alongside help. Tests cover both help aliases, version parsing, version output, and usage text that documents the new flags.
Use the release manifest binary list as the source of truth when detecting release archives. The validation now rejects empty or unsafe binary names and checks that every declared runtime binary exists inside the release bin directory.
Teach the release packaging script to read managed binary names from workspace metadata, build that set, install it into the archive, and write the same list into the release manifest. Shell quoting stays checked by shellcheck and shellharden.
Move noticenterctl out of flat main/dbus path redirects and into app, cli, css_check, dbus, debug_logs, output, and preset domain folders. Rename daemon store files away from store_* while preserving the existing logic as a pure layout step.
Update css-check cache and theme modules after the domain move so imports and comments match their new locations. Keep existing behavior while preserving the organized cache and theme test folders.
Add local tests for CSS block scanning, declaration parsing, selector splitting, lint duplicate detection, runtime warnings, file walking, and policy hints. Keep root css-check helpers covered through organized tests under css_check/tests.
Add focused geometry tests for model targets, custom-property scopes, length parsing, stock class handling, and nested rule collection. Fix three-value horizontal shorthand parsing so left and right both follow the CSS horizontal value.
Keep D-Bus command dispatch under dbus/commands with timeout handling beside the client. Move output gating and formatting tests under output so command execution and presentation stay separate.
Break debug log following into command and journal modules. Add tests for daemon unit selection and journalctl argument construction so debug_logs/mod.rs stays as a small module surface.
Normalize preset archive, command rule, css asset, manifest, inspect, config-root, and pathing tests into feature test folders. Cover top-level preset helpers that are not already owned by a subfolder.
Move export, import, prompt, exec-review, and filesystem tests into nested tests folders. Keep practical coverage for host-specific rewrites, executable import review, path safety, dry-run behavior, and secure writes.
Replace the single shallow entrypoint test with help and error-path integration tests. Verify clap handles help and invalid input locally before any daemon or D-Bus setup is needed.
Keep store/mod.rs as the module surface and move implementation into focused core, dnd, and types modules. Preserve the renamed store submodules and make store/tests/mod.rs the organized test index.
Replace the flat import file with focused import modules for preparation, prompting, summary rendering, commit validation, and the CLI-facing runner.
Add import regression coverage for missing bundles, dry-run writes, config-only bundles, and missing config rejection.
Exercise the extracted import commit path for successful writes, backup creation, invalid config rollback, and outside-root validation rollback.
Add focused tests for external CSS warning formatting, noninteractive rejection, summary lines, and printed summary return values.
Remove the nested exec_review/tests folder and keep executable-content review coverage in the main preset import tests tree.
Wire configured action order into the panel action row and add tests for ordering, close placement, and action config application.
Use the configured action set when deciding whether the header should render its separate close button and cover both placement modes.
Track panel section widgets through reload so configured body order survives refreshes and visibility changes.
Add panel body tests for notification/widget ordering and make build wiring keep section application explicit.
Move panel config, action metadata, and section ordering out of layout into config/panel while preserving the existing public re-exports.
Add panel-local tests for default config values, custom TOML ordering, action IDs, clear placement, and section parsing.
Relocate media effective-behavior tests under config/media/tests so the media folder owns its coverage.
Relocate runtime sanitize tests into config/runtime/sanitize/tests and keep sanitizer modules responsible for their own edge-case coverage.
Move runtime widget backend migration tests under config/runtime/tests so backend detection coverage sits beside runtime shaping.
Replace the flat widget test file with a tests module and keep root WidgetsConfig coverage in a dedicated test file.
Add TOML and default coverage for slider bounds, parse modes, toggle aliases, layout values, and stock command portability.
Cover card layouts, carousel options, stat plugin configs, blank defaults, and widget plugin fallback limits.
Add debug-log command tests that use a temporary journalctl shim on PATH instead of depending on the host journal. Cover journalctl availability, unit probing, follow failures, missing unit logs, and the successful probe-then-follow path.
Add deterministic coverage for import rollback when imported command paths leave the config root and when backup writing fails after a partial backup. Assert that CSS-check failures happen after the import is committed, so the command returns an error without rolling back the imported files.
Add a test-only constructor for ExpirationScheduler that returns the scheduler and receiver together. This keeps later daemon state tests observable without changing production scheduler behavior.
Add tests for expiration cancel commands, ordered multi-cancel behavior, duplicate scheduler installation, and missing-scheduler no-op behavior. Cover panel dismiss and close behavior for active, history, and missing notification ids, including the scheduler cancellation side effects. Extract the missing-scheduler warning guard so the first-use and already-reported cases are observable without relying on log capture.
Add tests for draining active notifications, clearing saved history, DND persistence rollback, and successful DND toggles. Cover unauthorized clear and action calls so rejected control requests are proven not to mutate daemon state. Tighten the inhibitor watch export to avoid keeping an extra wrapper around the watch module.
Add notification server tests for capabilities, server information, notify storage, and close-notification ownership behavior. Make the received-notification debug helper report whether it actually logged, then cover both disabled and enabled debug paths.
Return a small tracing initialization outcome so invalid RUST_LOG fallback behavior is observable in tests. Add coverage for shutdown_signal staying pending without a signal and D-Bus owner wait behavior for immediate and missing owner states. Add a CI-compatible binary help test for the daemon entrypoint.
Exercise shell PATH block removal through the high-level environment action path across selected startup files. Add a CI-compatible installer --help integration test that verifies the service manager option remains exposed.
Run stdout probe tests through /bin/sh directly instead of writing temporary executable scripts. This avoids transient Text file busy failures when cargo-mutants runs a fresh baseline in a copied workspace while preserving the success and failure probe assertions.
Remove trailing periods from plain inline comments touched by the dev branch so the code follows the project comment style before the v1.1.0 release.
Read installer binary metadata from Cargo's current workspace metadata field and capture metadata discovery failures before the release build starts. This prevents package-release.sh from writing a successful archive with an empty bin directory.
Bump the workspace packages and lockfile to 1.1.0, update release-package examples, and align the installer welcome-screen test with the new displayed version.
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.
Summary
Verification