Skip to content

CAP-CRM-ACT-010Record and maintain a piece of work

Markdown

CAP-CRM-ACT-010

Record and maintain a piece of work

Markdown
  • DocumentDraft
  • Product intentProposed
  • ImplementationInconsistent

KindCapabilityProduct areaCRMModuleActivities, Follow-ups and Task WorkRevision2

Read atservices-crm a8d1364freact-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Identifiable work with a type and datesRelated-record context that can be cleared without losing workEdits checked against the version read
Surfaces
consoleapi
Preconditions
The workspace provides a task type for selection.
Postconditions
New work starts Open and uses Normal priority unless another priority is supplied.
Intent sources
Andrew 2026-10-12 (task date), recorded at services-crm:modules/tasks/db/tasks.table.ts

Controls

21 controls apply, from the corpus control catalogue.

TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-AZ-006 TC-DAT-001 TC-DAT-002 TC-DAT-003 TC-LOG-001 TC-LOG-002 TC-LOG-003 TC-LOG-004 TC-LOG-005 TC-PI-001 TC-PI-003 TC-PI-005 TC-PRV-001 TC-PRV-002 TC-TEN-001 TC-TEN-002 TC-TEN-003

Permissions

KeyChecked atScope
crm.tasks.readapitenant
crm.tasks.createapitenant
crm.tasks.updateapitenant
crm.tasks.deleteapitenant
crm.tasks.createconsoletenant

Business Rules

13 rules, 13 to be proved before approval. A rule's product intent is derived from its origin: 1 confirmed by a product decision, the rest inheriting this capability's proposed.

IdRuleKindEnforced atProvenance
01must prove
Proposed
Tasks require a nonblank title of at most 500 characters and allow descriptions up to 20,000 characters, with field-specific refusals.
no proof recorded yet
validationapi, service, databasetest
02must prove
Proposed
A task must reference a task type belonging to its workspace.
no proof recorded yet
validationapi, databasetest
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#answers 400 for a task with no type, since every task is of some kind
03must prove
Proposed
Creation uses Open by default, permits explicitly selected open statuses and refuses either closed status.
no proof recorded yet
lifecycleserviceobserved
04must prove
Proposed
Omitted priority becomes Normal and omitted task date becomes today in the workspace; replacement preserves an omitted task date.
origin: Andrew 2026-10-12 (task date), recorded at services-crm:modules/tasks/db/tasks.table.ts
no proof recorded yet
calculationservice, databasetest
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#dates a task today, in the tenant's calendar, when the create gives no task date
05must prove
Proposed
A due day must exist in the calendar, with invalid dates rejected against the due-date field.
no proof recorded yet
validationapitest
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#answers 400 naming the field for a due date that is not a day of the calendar
06must prove
Proposed
Supplying a time with the due date succeeds, but storage retains only the calendar day.
no proof recorded yet
validationapitest
07must prove
Proposed
A task can reference one workspace contact and one workspace organization, and missing or foreign-workspace contact, organization, type and queue references are refused.
no proof recorded yet
validationservice, databasetest
08must prove
Proposed
Deleting a related contact or organization preserves the task and clears only the corresponding reference.
no proof recorded yet
lifecycledatabasetest
services-crm:modules/tasks/tests/integration/db/tasks.table.integration.spec.js#keeps the task: the work outlives the record it was about
09must prove
Proposed
External task references are unique within the workspace.
no proof recorded yet
invariantdatabase, servicetest
services-crm:modules/tasks/tests/integration/services/persistence/tasks.integration.spec.js#refuses a second task of the tenant with an external id another task holds (DEF-CRM-0719)
10must prove
Confirmed
Edits require the version read; partial edits preserve omissions, while replacement resets omitted optional values except retained task date, role offer and workflow origin.
no proof recorded yet
policyapi, serviceobserved
11must prove
Proposed
Full locks block task edits, and either supported lock blocks task deletion.
no proof recorded yet
validationservicetest
services-crm:modules/tasks/tests/e2e/tasks.e2e.spec.js#refuses deleting a task locked against deletes
12must prove
Proposed
Deleting tasks requires administrator permission and has no console action.
no proof recorded yet
permissionapi, consoletest
13must prove
Proposed
The task creation form searches workspace contacts and organizations through its related-record selectors.
no proof recorded yet
policyconsoleobserved

Scenarios

IdGivenWhenThenProvenance
01A coordinator opens Tasks.Create work with all supported details supplied.The list includes the task and its drawer returns the saved details.test

Edge Cases

IdGivenWhenThenProvenance
02Task inputs include a blank title, a 500-character title, an earlier due day and replacement without task date.Submit these variants.The blank title fails, the other valid variants succeed, and the replacement retains task date.test

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.