# Scratchpad

- 2026-04-20: User approved replacing the legacy ticket workflow assignment inputs with a canonical `assignment` object.
- 2026-04-20: Chosen canonical shape:
  - `assignment.primary: { type, id } | null`
  - `assignment.additional_user_ids: string[]`
- 2026-04-20: `tickets.update_fields.patch.assignment` should be atomic replacement, not piecemeal patching.
- 2026-04-20: `tickets.assign` should support union semantics for team assignment plus explicit additional users.
- 2026-04-20: System is new, so legacy workflow assignment fields can be removed with a hard break.
- 2026-04-20: Existing workflow editor issue likely involves nullable `anyOf` schema resolution dropping `x-workflow-picker-*` metadata during field extraction.
- 2026-04-20: Existing app support for additional ticket assignees is backed by `ticket_resources.additional_user_id`.
- 2026-04-20: Existing team assignment behavior already expands members into `ticket_resources`; workflow implementation should centralize and reuse that semantic.
- 2026-04-20: Implemented canonical workflow ticket assignment model in `shared/workflow/runtime/actions/businessOperations/tickets.ts` using `assignment.primary` + `assignment.additional_user_ids`.
- 2026-04-20: Implemented workflow-editor support for array-backed user pickers via `WorkflowActionInputFixedMultiPicker` and `InputMappingEditor`.
- 2026-04-20: Implemented nullable-schema metadata preservation in `ee/server/src/components/workflow-designer/actionInputEditorState.ts` and `WorkflowDesigner.tsx`.
- 2026-04-20: Validation runbook:
  - `cd server && npx tsc -p tsconfig.json --noEmit --pretty false --incremental false`
  - `cd server && npx vitest run src/test/unit/workflowTicketAssignmentModelRuntime.test.ts --coverage.enabled false`
  - `cd server && npx vitest run --dir ../ee/server src/components/workflow-designer/__tests__/actionInputEditorState.test.ts --coverage.enabled false`
  - `cd server && npx vitest run --dir ../ee/server src/components/workflow-designer/__tests__/InputMappingEditorPickerFields.test.tsx --coverage.enabled false`
  - `cd server && npx vitest run src/test/unit/teams-v2-plan.test.ts -t "canonical ticket assignment model" --coverage.enabled false`
