Skip to content

feat(example-sets): a fragment may give a resident a portal task - #4754

Merged
rubenvdlinde merged 1 commit into
developmentfrom
feat/example-set-external-party-tasks
Oct 21, 2026
Merged

rubenvdlinde merged 1 commit into
developmentfrom
feat/example-set-external-party-tasks

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

This PR lets an example set seed a resident's portal task. Until now an example set could only seed tasks for its own Nextcloud accounts. The change is example-set-external-party-tasks, and its spec is included.

  • A fragment's task may declare performerType: external with an assignee of the form party:<reference>. Placeholders work in the reference, for example party:{{cast:sanne.uid}}.
  • An external task may carry uploadRules: required, maxFiles, maxSizeBytes and acceptedTypes. Install writes them as metadata.upload, which is where PortalTaskService::assertUploadConstraints reads them.
  • An external task is raised as the fragment's app, not as the party.
  • The check refuses four things, and nothing is written when it does:
    • an external task that isn't addressed to a party
    • an external task with completedBy
    • uploadRules on an internal task
    • an unknown upload rule
  • The checks live in a new ExampleSetExternalTask, which keeps ExampleSetTasks under phpmd's complexity limit.

Why: portaliq's TaakAfronden board ("Stuur een kopie van uw ID-bewijs") needs an open portal task for the example resident Sanne. The Zuiddrecht set adds that task in a portaliq PR that depends on this one.

Verified:

  • PHPUnit tests/Unit/Service/ExampleSet/ passes: 146 tests, including the new external-task test and four new refusal cases.
  • phpstan is OK, and phpmd is clean on both classes.
  • phpcs is clean on the lib files. The test file has no new findings; the 36 it had before are untouched.

🤖 Generated with Claude Code

A fragment's task may declare performerType: external with a
party:<reference> assignee and uploadRules (required, maxFiles,
maxSizeBytes, acceptedTypes). Install writes the rules as
metadata.upload, where the portal task seam reads them, and raises the
task as the fragment's app. The check refuses an external task that is
not addressed to a party, one marked done by completedBy, upload rules
on an internal task and an unknown upload rule.

Assisted-by: ClaudeCode:claude-opus-5-5
@rubenvdlinde
rubenvdlinde merged commit d27e92b into development Oct 21, 2026
37 of 39 checks passed
rubenvdlinde added a commit to ConductionNL/portaliq that referenced this pull request Oct 21, 2026
…ID (#1672)

The Zuiddrecht set adds Sanne's open parking permit case (requester
persoon-sanne via her BRP lookup) and on it an external portal task
for party:<her uid>: "Stuur een kopie van uw ID-bewijs", at most two
files, due in seven days, so Mijn taken opens the task page the
TaakAfronden board draws. Needs openregister's external-party example
set tasks (ConductionNL/openregister#4754).

Assisted-by: ClaudeCode:claude-opus-5-5
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/openregister @ a529068

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-specs ✅
test-l10n ✅
test-l10n-parity ✅
format ✅
check-schema-l10n ✅
composer ✅ ✅ 173/173
npm ✅ ✅ 648/648
app:check-code ⏭️
info.xml ✅
REUSE ✅
lockfile sync ✅
PHPUnit ❌
Newman ❌
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-21 17:30 UTC

Download the full PDF report from the workflow artifacts.

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