feat(schemas): namespace the CRM task - #1833
Merged
Merged
Conversation
`task` was claimed by three apps: planninq, dossiq and this one. They share
`description`, `priority` and `status` — what any task-shaped record carries,
and nothing that identifies the record.
planninq's project task is the largest and keeps the bare slug. dossiq's becomes
`caseTask`; this is the CRM task, raised from a lead, a ticket or the KCC
werkplek.
THE DECOYS HERE ARE A VOCABULARY, NOT STRAY WORDS, which makes them easier to
misjudge than `contract`'s GDPR enum:
- ACTIVITY TYPES. ActivityTimelineService maps a source type to an activity
type (`'emailLink' => 'email'`, `'task' => 'task'`). The siblings give it
away: `interaction` is not a schema either, it queries tickets by
ticketType. The whole source-type vocabulary stays.
- NOTIFICATION SUBJECTS. NotificationService branches on
`$entityType === 'task'` to pick `task_assigned` and passes
`objectType: 'task'` to Nextcloud's notification API. Routing, not a schema
lookup.
Both left alone. The schema references moved: four register lists, the
descriptor, TASK_SCHEMA_SLUG, SchemaMapService's entity type, the exportable
schema list and the werkplek dialog's save.
Config key stays `task_schema`.
Full suite: 2,822 tests, 11,095 assertions, exit 0. phpcs, phpstan, psalm exit
0. The repair map now carries ten renames and its test asserts all ten.
rubenvdlinde
requested review from
Rem-Dam,
SudoThijn,
WilcoLouwerse,
bbrands02,
remko48 and
rjzondervan
as code owners
September 5, 2026 19:40
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.
What
taskbecomescrmTask. planninq's project task is the largest of the three claimants and keeps the bare slug; dossiq's becomescaseTask.Why all three namespace
taskwas claimed by planninq (30 fields), this app (18) and dossiq (14). They sharedescription,priorityandstatus— what any task-shaped record carries, and nothing that identifies the record.This one is the CRM task, raised from a lead, a ticket or the KCC werkplek.
The decoys here are a vocabulary, not stray words
That makes them easier to misjudge than
contract's GDPR enum, because they look like type names:ActivityTimelineServicemaps a source type to an activity type:'emailLink' => 'email','task' => 'task'. The siblings give it away —interactionis not a schema either, it queries tickets byticketType. The whole source-type vocabulary stays.NotificationServicebranches on$entityType === 'task'to picktask_assigned, and passesobjectType: 'task'to Nextcloud's notification API. That is routing, not a schema lookup.Both left alone. What moved: four register lists, the descriptor,
TASK_SCHEMA_SLUG,SchemaMapService's entity type, the exportable schema list, and the werkplek dialog's save.Verification
Full unit suite: 2,822 tests, 11,095 assertions, exit 0. phpcs, phpstan, psalm exit 0.
Config key stays
task_schema. The repair map now carries ten renames and its test asserts all ten write, so a dropped entry fails on the count.