elsa-core/specs/013-user-tasks/tasks.md
2026-08-28 22:32:50 +02:00

135 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 the `elsa-studio` repository, 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
- [x] T001 Create the authoritative PRD in `specs/013-user-tasks/spec.md`.
- [x] T002 [P] Capture official-source decisions in `specs/013-user-tasks/research.md`.
- [x] T003 [P] Define the runtime data model in `specs/013-user-tasks/data-model.md`.
- [x] T004 [P] Define REST, runtime, identity, forms, invitations, persistence, and Studio contracts in `specs/013-user-tasks/contracts/`.
- [x] T005 Add requirements, security, and accessibility gates in `specs/013-user-tasks/checklists/`.
- [x] T006 Record architecture, sequence, risks, and verification in `specs/013-user-tasks/plan.md`.
- [x] T007 Reconcile dossier terminology and run cross-artifact analysis across `specs/013-user-tasks/`.
- [x] T008 Add canonical User Tasks terminology to `CONTEXT.md` and update the active Spec Kit pointer in `AGENTS.md`.
## Phase 2: Core domain and workflow slice
- [x] T009 [US1] Scaffold `src/modules/Elsa.UserTasks/Elsa.UserTasks.csproj` and feature/shell registration.
- [x] 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/`.
- [x] T011 [P] [US3] Add replaceable identity, access policy, directory, forms, invitations, manager, repository, clock, and scheduling contracts under `src/modules/Elsa.UserTasks/Contracts/`.
- [x] T012 [US1] Implement the guarded state machine and aggregate invariants in `src/modules/Elsa.UserTasks/Services/DefaultUserTaskManager.cs`.
- [x] T013 [P] [US1] Implement the in-memory repository with tenant-safe authorized cursor queries in `src/modules/Elsa.UserTasks/Repositories/`.
- [x] T014 [P] [US3] Implement default claims resolver and default-deny access policy in `src/modules/Elsa.UserTasks/Services/`.
- [x] T015 [US1] Implement the blocking `UserTask` activity, materialized bookmark payload, stimulus, and typed output under `src/modules/Elsa.UserTasks/Activities/`.
- [x] 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.
- [x] T018 [P] [US5] Add cluster-safe due scanning, idempotent overdue notification, and optional timeout operation.
- [x] T019 [P] Add append-only safe audit and mediator lifecycle notification models/dispatch.
- [x] T020 [P] Add domain, race, disclosure, identity, projection, reconciliation, and due tests in `test/unit/Elsa.UserTasks.UnitTests/`.
## Phase 3: REST and realtime slice
- [x] T021 [US2] Add permissions, API DTOs, safe/protected mapping, and canonical API error mapping under `src/modules/Elsa.UserTasks/`.
- [x] T022 [P] [US2] Implement authorized cursor search, detail, events, and capability endpoints under `Endpoints/UserTasks/`.
- [x] T023 [P] [US2] Implement claim, release, assignment, and priority/due update endpoints.
- [x] T024 [P] [US1] Implement asynchronous complete, cancel, and resolution-retry endpoints with operation idempotency.
- [x] 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
- [x] T028 [US4] Implement invitation issuance, token hashing, expiry, sibling revocation, and manager APIs.
- [x] T029 [US4] Implement Data Protection-backed transient delivery outbox and dispatcher retries.
- [x] T030 [US4] Implement generic rate-limited challenge and verification endpoints.
- [x] T031 [US4] Implement atomic guest claim and revocable task-scoped session issuance/validation.
- [x] T032 [P] Add invitation secrecy, expiry, replay, race, guest capability, and recovery tests.
## Phase 5: Persistence providers
- [x] T033 [US5] Scaffold `Elsa.UserTasks.Persistence.EFCore` with module DbContext, entity configurations, repository, and feature.
- [x] T034 [P] [US5] Add normalized indexes and bounded JSON mappings for tasks, participants, audit, operations, invitations, guest sessions, and delivery outbox.
- [x] T035 [P] [US5] Add SQLite provider configuration, migration, design-time factory, and shell feature.
- [x] T036 [P] [US5] Add SQL Server provider configuration, migration, design-time factory, and shell feature.
- [x] T037 [P] [US5] Add PostgreSQL provider configuration, migration, design-time factory, and shell feature.
- [x] T038 [P] [US5] Add MySQL provider configuration, migration, design-time factory, and shell feature.
- [x] T039 [P] [US5] Add Oracle provider configuration, migration, design-time factory, and shell feature.
- [x] 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
- [x] T042 [US2] Scaffold `Elsa.Studio.UserTasks` module, remote feature, service registration, and Workflows menu item.
- [x] T043 [P] [US2] Add Refit client and safe/protected/capability/command models.
- [x] T044 [US2] Implement URL-backed Assigned to me, Available, History, All, and Needs Attention queue views.
- [x] T045 [US2] Implement desktop split detail and mobile detail route with workflow deep link, protected disclosure, timeline, health, and capability actions.
- [x] 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-studio` repository, 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-studio` repository, not verifiable here.
- [x] 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-studio` repository, not verifiable here.
## Phase 7: Documentation and local gates
- [x] 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 alongside `quickstart.md`.
- [x] 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).
- [x] 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`, with `ConformanceCoverageTests` failing 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 — see `doc/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.