13 KiB
Tasks: User Tasks
Reconciled 2026-08-27 alongside
specs/013-rbac-authorization-model/tasks.md. Open items were re-verified against the code; one had landed and is now ticked, and one (T041) is recorded as partially done. Of those still open, three are Studio-side and live in theelsa-studiorepository, so they cannot be closed from this repo. Tasks use[ID] [P?] [Story] Description with file path.[P]tasks may run in parallel when their file ownership does not overlap.
Phase 1: Durable specification
- T001 Create the authoritative PRD in
specs/013-user-tasks/spec.md. - T002 [P] Capture official-source decisions in
specs/013-user-tasks/research.md. - T003 [P] Define the runtime data model in
specs/013-user-tasks/data-model.md. - T004 [P] Define REST, runtime, identity, forms, invitations, persistence, and Studio contracts in
specs/013-user-tasks/contracts/. - T005 Add requirements, security, and accessibility gates in
specs/013-user-tasks/checklists/. - T006 Record architecture, sequence, risks, and verification in
specs/013-user-tasks/plan.md. - T007 Reconcile dossier terminology and run cross-artifact analysis across
specs/013-user-tasks/. - T008 Add canonical User Tasks terminology to
CONTEXT.mdand update the active Spec Kit pointer inAGENTS.md.
Phase 2: Core domain and workflow slice
- T009 [US1] Scaffold
src/modules/Elsa.UserTasks/Elsa.UserTasks.csprojand feature/shell registration. - T010 [P] [US1] Add enums and value models for participants, lifecycle, health, actions, form pins, results, operations, and invitations under
src/modules/Elsa.UserTasks/Models/. - T011 [P] [US3] Add replaceable identity, access policy, directory, forms, invitations, manager, repository, clock, and scheduling contracts under
src/modules/Elsa.UserTasks/Contracts/. - T012 [US1] Implement the guarded state machine and aggregate invariants in
src/modules/Elsa.UserTasks/Services/DefaultUserTaskManager.cs. - T013 [P] [US1] Implement the in-memory repository with tenant-safe authorized cursor queries in
src/modules/Elsa.UserTasks/Repositories/. - T014 [P] [US3] Implement default claims resolver and default-deny access policy in
src/modules/Elsa.UserTasks/Services/. - T015 [US1] Implement the blocking
UserTaskactivity, materialized bookmark payload, stimulus, and typed output undersrc/modules/Elsa.UserTasks/Activities/. - T016 [US1] Project committed bookmarks and finalize removed bookmarks in
src/modules/Elsa.UserTasks/HostedServices/and notification handlers. - T017 [US5] Add the bounded startup/recurring reconciler for missing projections, stale operations, and orphan records. Still open (verified 2026-08-27) — the reconciler itself exists (
Services/DefaultUserTaskReconciler.cs,HostedServices/UserTaskWorkers.cs), but no test exercises its repair logic, so it stays unchecked under this list's stated bar. See the verification-status note below. - T018 [P] [US5] Add cluster-safe due scanning, idempotent overdue notification, and optional timeout operation.
- T019 [P] Add append-only safe audit and mediator lifecycle notification models/dispatch.
- T020 [P] Add domain, race, disclosure, identity, projection, reconciliation, and due tests in
test/unit/Elsa.UserTasks.UnitTests/.
Phase 3: REST and realtime slice
- T021 [US2] Add permissions, API DTOs, safe/protected mapping, and canonical API error mapping under
src/modules/Elsa.UserTasks/. - T022 [P] [US2] Implement authorized cursor search, detail, events, and capability endpoints under
Endpoints/UserTasks/. - T023 [P] [US2] Implement claim, release, assignment, and priority/due update endpoints.
- T024 [P] [US1] Implement asynchronous complete, cancel, and resolution-retry endpoints with operation idempotency.
- T025 [P] [US3] Implement optional participant lookup without Elsa Identity coupling.
- T026 [US2] Add metadata-free SignalR invalidation and polling-compatible lifecycle notifications. Still open (verified 2026-08-27) — no SignalR/Hub type exists under
src/modules/Elsa.UserTasks. - T027 [P] Add endpoint authorization, concealment, validation, cursor, idempotency, and conflict tests. Still open (verified 2026-08-27) — partial — endpoint authorization is covered (
Authorization/EndpointPermissionTests.cs,EndpointCoverageTests.cs,ActorPermissionMatchingTests.cs, added with #7999); concealment, validation, cursor, idempotency and conflict tests not found.
Phase 4: Guest invitations
- T028 [US4] Implement invitation issuance, token hashing, expiry, sibling revocation, and manager APIs.
- T029 [US4] Implement Data Protection-backed transient delivery outbox and dispatcher retries.
- T030 [US4] Implement generic rate-limited challenge and verification endpoints.
- T031 [US4] Implement atomic guest claim and revocable task-scoped session issuance/validation.
- T032 [P] Add invitation secrecy, expiry, replay, race, guest capability, and recovery tests.
Phase 5: Persistence providers
- T033 [US5] Scaffold
Elsa.UserTasks.Persistence.EFCorewith module DbContext, entity configurations, repository, and feature. - T034 [P] [US5] Add normalized indexes and bounded JSON mappings for tasks, participants, audit, operations, invitations, guest sessions, and delivery outbox.
- T035 [P] [US5] Add SQLite provider configuration, migration, design-time factory, and shell feature.
- T036 [P] [US5] Add SQL Server provider configuration, migration, design-time factory, and shell feature.
- T037 [P] [US5] Add PostgreSQL provider configuration, migration, design-time factory, and shell feature.
- T038 [P] [US5] Add MySQL provider configuration, migration, design-time factory, and shell feature.
- T039 [P] [US5] Add Oracle provider configuration, migration, design-time factory, and shell feature.
- T040 [P] [US5] Add VNext document-store repository and feature.
- T041 [US5] Add shared persistence conformance and SQLite restart/index/tenant/cursor tests. Partially done (verified 2026-08-27) — the shared conformance half has landed, the SQLite half has not. See the verification-status note below for exactly what exists.
Phase 6: Elsa Studio
- T042 [US2] Scaffold
Elsa.Studio.UserTasksmodule, remote feature, service registration, and Workflows menu item. - T043 [P] [US2] Add Refit client and safe/protected/capability/command models.
- T044 [US2] Implement URL-backed Assigned to me, Available, History, All, and Needs Attention queue views.
- T045 [US2] Implement desktop split detail and mobile detail route with workflow deep link, protected disclosure, timeline, health, and capability actions.
- T046 [P] [US2] Implement claim/release/assign/update/complete/cancel/retry interactions with asynchronous and conflict refresh states.
- T047 [P] [US1] Add User Task activity editor support and optional replaceable participant lookup picker with raw/expression fallback. Still open (verified 2026-08-27) — Studio work — lives in the
elsa-studiorepository, not verifiable here. - T048 [US2] Add metadata-free SignalR requery coordinator and polling fallback without disrupting focus or form input. Still open (verified 2026-08-27) — Studio work — lives in the
elsa-studiorepository, not verifiable here. - T049 [US4] Add replaceable anonymous guest verification and task completion page.
- T050 [P] Add Studio client/component tests for tabs, URL filters, disclosure, actions, responsive routing, realtime fallback, and accessibility. Still open (verified 2026-08-27) — Studio work — lives in the
elsa-studiorepository, not verifiable here.
Phase 7: Documentation and local gates
- T051 Add module configuration, identity integration, forms, invitations, hosting, persistence, and upgrade documentation under
doc/. - T052 Add runnable sample workflows and host adapter examples referenced by
specs/013-user-tasks/quickstart.md. Still open (verified 2026-08-27) — no sample workflows or host adapter examples found alongsidequickstart.md. - T053 Run affected Core unit/integration tests and all User Tasks persistence conformance tests. Verified done 2026-08-27 — run 2026-08-27 for #7999 — UnitTests 103/103, Persistence.ConformanceTests 123 passed, Persistence.EFCore.UnitTests 4/4, Hosts.SmokeTests 6/6 (net10.0).
- T054 Run affected Studio tests and builds.
- T055 Build both repositories broadly across configured target frameworks without GitHub-dependent gates. Still open (verified 2026-08-27) — cross-repository build not recorded.
- T056 Re-run requirement-to-task-to-test traceability analysis and resolve every critical/high finding. Still open (verified 2026-08-27) — traceability analysis not recorded.
- T057 Run up to five local self-review passes for correctness, security, API compatibility, accessibility, and maintainability. Still open (verified 2026-08-27) — self-review passes not recorded.
- T058 Confirm no unrelated files were changed and record local verification evidence. Still open (verified 2026-08-27) — not recorded.
Dependencies
T001–T008 precede implementation. Domain T009–T015 precede runtime T016–T019 and REST commands. Auth contracts T011/T014 precede all public queries. Core REST T021–T027 precedes Studio T042–T050. Invitations depend on the core state machine and REST security. EF/VNext depend on repository contracts but can proceed alongside Studio after the Core slice stabilizes. Documentation and final gates follow all slices.
Requirement traceability
| Requirements | Delivery tasks | Primary verification |
|---|---|---|
| FR-001–FR-007, FR-033 | T009–T020 | Activity/runtime, transition-race, projection, bookmark, and reconciliation tests |
| FR-008–FR-014 | T011, T014, T020–T027 | Identity replacement, authorized query, exclusion, disclosure, and tenant-isolation tests |
| FR-015–FR-018 | T012, T015, T018, T020, T024 | Form pin/validation, no-form completion, overdue/timeout, and cancellation tests |
| FR-019–FR-022 | T021–T032 | REST contract, idempotency, invitation secrecy/rate-limit, and guest-session tests |
| FR-023–FR-026 | T033–T041 | Provider compile/migration review and shared persistence conformance suite |
| FR-027–FR-031 | T042–T050 | Studio client/component, responsive, disclosure, guest, and accessibility tests |
| FR-032, FR-034 | T013, T019, T022, T026, T027 | Cursor stability, search safety, notification, and invalidation tests |
Verification status
Checked items were built and exercised by an automated test or a successful multi-target build in this worktree. The following remain open and are deliberately left unchecked:
- T017 — the reconciler's periodic worker is registered, but its repair logic has no test covering interrupted projection or stale-operation recovery.
- T026, T048 — Core has no SignalR invalidation hub yet. Studio ships the client and a visibility-aware polling fallback, so the feature degrades correctly, but the realtime path is not end to end.
- T027 — authorization, concealment, idempotency, and conflict behavior are covered at the service layer. There are no HTTP-level endpoint tests asserting the status-code mapping.
- T041 — partially closed 2026-08-27. The shared conformance half has landed: the suite runs
across in-memory, EF Core (SQLite, SQL Server, PostgreSQL, Oracle) and VNext, declared in
ProviderConformanceSuites.cs, withConformanceCoverageTestsfailing the run when a provider silently skips. Tenant and cursor behaviour are covered. Still missing are the SQLite restart and index tests this task also names — there is no restart/reopen test anywhere in the persistence suites, and no index-specific assertion. MySQL is additionally uncovered: it is pinned to net8.0/net9.0 because Pomelo tops out at EF Core 9 — seedoc/migrations/secrets-tenancy.md. - T047 — the Studio activity editor contribution and participant-picker integration for the designer are not implemented.
- T050 — Studio tests cover the wire contract, URL state, and error mapping. Component-level tests for tabs, disclosure, responsive routing, realtime fallback, and accessibility are not written.
- T052 — no runnable sample workflows or host adapter examples yet.
- T055 — targeted Core and Studio test suites and the affected module, provider, and host builds pass, and T053's suites were run on 2026-08-27 (see its task entry). A full solution-wide build across every configured target framework has not been run.
- T056–T058 — final traceability, self-review, and evidence passes are outstanding.
Local-only gate note
GitHub issue/project/branch/PR/review automation is intentionally omitted because the user reported GitHub downtime. This does not waive specification analysis, automated tests, builds, traceability, or self-review.