Skip to content

feat(mandates): another app can ask whether an account holds an authority for an act - #1696

Merged
rubenvdlinde merged 5 commits into
developmentfrom
refactor/r9-mandate-registry
Oct 12, 2026
Merged

rubenvdlinde merged 5 commits into
developmentfrom
refactor/r9-mandate-registry

Conversation

@rubenvdlinde

@rubenvdlinde rubenvdlinde commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Refactor lane R9, capability C17 (decisions 182, 184, 185; hydra ADR-118). Builds on question Q6's recommended option: decidiq owns the mandate registry and matrix, dossiq keeps one generic guard that asks.

Pair: ConductionNL/dossiq#3642. Merge this one first; the dossiq guard refuses with "register absent" until decidiq answers.

What changes

  • bevoegdheidstoedeling gains three optional properties: delegateUser (Nextcloud account), delegateGroup (Nextcloud group) and acts (the act keys the authority covers). Schema 0.1.0 to 0.2.0, register info.version 0.14.0 to 0.15.0 so installs re-import it.
  • New Service/DelegatedAuthorityCheck::check(actor, act, amount, at). It answers authorised, a reason (authorised, no-actor, no-act, no-allocation, over-ceiling, register-unreadable) and the covering allocation.
  • Every uncertain answer is no: an empty acts list covers no act, an unreadable date covers nothing, an ondermandaat whose parent does not permit it, is not in force, cannot be found or forms a cycle covers nothing, and an unreadable register answers register-unreadable.
  • REQ-DMR-006 stands: decidiq gates none of its own Decision transitions. The asking app enforces.
  • OpenSpec change delegated-authority-check (adds REQ-DMR-008).

Not in this PR

The mandate matrix CSV import through OpenRegister's import preview (C23) and the matrix move from dossiq follow in pair 2, after dossiq#3300 lands.

Verified

  • tests/Unit/Service/DelegatedAuthorityCheckTest.php: 9 tests, 37 assertions, exit 0. Rows go through the real RegisterObjectStore; fixture rows validate with Opis against the merged schema. Red first: without the schema change the schema test fails with "delegateUser must be declared".
  • phpcs on lib/Service/DelegatedAuthorityCheck.php: exit 0.
  • phpstan on lib/Service/DelegatedAuthorityCheck.php through the slot: exit 0.
  • No full check:strict slot started within 10 minutes (the fleet held both), so psalm and the full suite are left to CI on this PR; CI is the full check.

Open questions for Ruben: Q9 (act keys) in for-ruben/refactor-questions.md.

…rity for an act

DelegatedAuthorityCheck answers, for an account, an act key, an optional
amount and a moment, whether an in-force bevoegdheidstoedeling grants it.
The toedeling gains delegateUser, delegateGroup and acts (schema 0.2.0,
register 0.15.0). Every uncertain answer is no. decidiq still gates none
of its own Decision transitions (REQ-DMR-006): the asking app enforces.

Refactor lane R9, capability C17 (decisions 182, 184, 185).
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/decidiq @ 9c6a71f

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ❌
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
check-nav-ceiling ✅
test-l10n ✅
format ✅
check-l10n-js ✅
check-schema-l10n ❌
composer ✅ ✅ 107/107
npm ✅ ✅ 652/652
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ✅ 2645/2645 · 8 skipped
Newman ✅ 363/363 · 1 skipped
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ❌

Quality workflow — 2026-10-10 18:43 UTC

Download the full PDF report from the workflow artifacts.

…e delegated authority check names its moment parameter
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/decidiq @ 532cecc

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
check-nav-ceiling ✅
test-l10n ✅
format ✅
check-l10n-js ✅
check-schema-l10n ✅
composer ✅ ✅ 107/107
npm ✅ ✅ 652/652
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ✅ 2645/2645 · 8 skipped
Newman ✅ 363/363 · 1 skipped
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ❌

Quality workflow — 2026-10-11 07:25 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/decidiq @ d8546fe

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
check-nav-ceiling ✅
test-l10n ✅
format ✅
check-l10n-js ✅
check-schema-l10n ✅
composer ✅ ✅ 107/107
npm ✅ ✅ 652/652
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ✅ 2655/2655 · 8 skipped
Newman ✅ 363/363 · 1 skipped
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ❌

Quality workflow — 2026-10-11 08:47 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/decidiq @ e5ebb02

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
check-nav-ceiling ✅
test-l10n ✅
format ❌
check-l10n-js ✅
check-schema-l10n ✅
composer ✅ ✅ 107/107
npm ✅ ✅ 652/652
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ✅ 2655/2655 · 8 skipped
Newman ✅ 363/363 · 1 skipped
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ❌

Quality workflow — 2026-10-12 05:41 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/decidiq @ 599c782

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
check-nav-ceiling ✅
test-l10n ✅
format ✅
check-l10n-js ✅
check-schema-l10n ✅
composer ✅ ✅ 107/107
npm ✅ ✅ 652/652
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ✅ 2655/2655 · 8 skipped
Newman ✅ 363/363 · 1 skipped
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ❌

Quality workflow — 2026-10-12 06:22 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde merged commit 857a220 into development Oct 12, 2026
46 of 48 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