Skip to content

Prepare UnixNotis v1.1.0#30

Merged
locainin merged 65 commits into
masterfrom
dev
Jul 6, 2026
Merged

Prepare UnixNotis v1.1.0#30
locainin merged 65 commits into
masterfrom
dev

Conversation

@locainin

@locainin locainin commented Jul 6, 2026

Copy link
Copy Markdown
Owner

Summary

  • Refactor noticenterctl, daemon, store, and core config modules into focused domain folders
  • Add panel ordering controls, split clear commands, preset hardening, and release archive packaging
  • Expand regression coverage across CLI, D-Bus, CSS-check, presets, daemon state/control/notifications/store, core config, and installer paths
  • Prepare workspace metadata for v1.1.0

Verification

  • shellcheck scripts/package-release.sh
  • shellharden --check scripts/package-release.sh
  • cargo test --all-targets --all-features
  • cargo clippy --all-targets --all-features -- -D warnings -W clippy::pedantic -W clippy::nursery
  • scripts/package-release.sh v1.1.0
  • tar --zstd -tf dist/unixnotis-v1.1.0-x86_64-unknown-linux-gnu.tar.zst
  • sha256sum -c dist/unixnotis-v1.1.0-x86_64-unknown-linux-gnu.tar.zst.sha256

locainin added 30 commits July 5, 2026 14:14
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.
locainin added 29 commits July 5, 2026 22:25
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.
@locainin locainin merged commit 97dbd3d into master Jul 6, 2026
5 checks passed
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