Skip to content
This repository was archived by the owner on May 29, 2026. It is now read-only.

feat(notifications): schema-driven notification engine + field-change condition#1921

Merged
rubenvdlinde merged 1 commit into
developmentfrom
feat/notification-engine
May 25, 2026
Merged

feat(notifications): schema-driven notification engine + field-change condition#1921
rubenvdlinde merged 1 commit into
developmentfrom
feat/notification-engine

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Lands the OpenRegister notification engine the fleet apps consume (pipelinq #559, procest #610, nextcloud-vue #446 are already merged against this API).

What

  • Rules live only in the schema (x-openregister-notifications), evaluated at dispatch from the already-loaded schema — no rule table.
  • Override-only per-user preferences via Nextcloud user-config: NotificationPreferenceService + NotificationPreferencesController (GET/PUT /api/notification-preferences). Absence falls through to the schema default (zero-migration).
  • AnnotationNotifier renders object_created/object_updated/object_transitioned (nl/en + object-detail action link); Notifier keeps configuration_update_available (mutually exclusive by subject so the manager never double-renders).
  • Per-recipient delivery gate (schema default ⊕ user override).
  • updated trigger field-change condition (changed / equals (+optional from)) — fail-closed when old/new data absent, back-compatible for condition-less rules. Unblocks status/assignee-change rules across the fleet.
  • Deprecates the NotificationSubscription table/controller + one-shot idempotent repair migrating rows to user-config.

Verification

  • 52 + 30 notification unit tests pass; PHPCS/Psalm/PHPStan clean on all touched files; both bundled openspec changes validate --strict.

Carries the archived notificatie-engine delta sync, the notification-updated-field-change-condition change, and a queued openregister-system-notifications change request. Part of the fleet notification rollout (hydra/openspec/fleet-notification-plan.md).

🤖 Generated with Claude Code

… condition

Lands the OpenRegister notification engine that the fleet apps consume:

- Rules sourced ONLY from the schema annotation x-openregister-notifications,
  evaluated at dispatch from the already-loaded schema (no rule table).
- Override-only per-user preferences via Nextcloud user-config
  (NotificationPreferenceService + NotificationPreferencesController:
  GET/PUT /api/notification-preferences); absence falls through to the
  schema default (zero-migration).
- AnnotationNotifier renders object_created/object_updated/object_transitioned
  with nl/en i18n + object-detail action link; Notifier keeps
  configuration_update_available (mutually exclusive by subject).
- Per-recipient delivery gate (schema-default merged with user override).
- updated trigger gains an optional non-numeric field-change condition
  (changed / equals (+from)), fail-closed when old/new data absent,
  back-compatible for condition-less rules.
- Deprecates the NotificationSubscription table/controller with a one-shot
  idempotent repair migrating rows to user-config overrides.

Includes the archived notificatie-engine delta sync, the
notification-updated-field-change-condition change, and a queued
openregister-system-notifications change request.
@rubenvdlinde rubenvdlinde merged commit 188a4b9 into development May 25, 2026
14 of 18 checks passed
@rubenvdlinde rubenvdlinde deleted the feat/notification-engine branch May 25, 2026 23:30
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/openregister @ 12def18

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
composer ✅ 165/165
npm ✅ 539/539
PHPUnit ⏭️
Newman ⏭️
Playwright ⏭️

Quality workflow — 2026-05-25 23:32 UTC

Download the full PDF report from the workflow artifacts.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant