* feat(work-orders): board wizard create with service notes
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(work-orders): enforce single-service wizard create per SH-118
Use single service selection in the wizard and omit extraServices from board create.
* refactor(work-orders): extract wizard controller for maintainability gate
Move duplicate-WO wiring and lookup hooks out of NewWoWizard so the
changed-file function line cap passes after merging dev.
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs(work-orders): add pending BE contract checklist for design parity gaps
* feat(work-orders): confirm dialog when duplicate wo number detected
* fix(work-orders): show duplicate wo number dialog on wizard create
* docs(work-orders): align pr description with jira and qa residuals
* style(work-orders): prettier wizard duplicate dialog files
* refactor(workorders): extract wizard state hook and list overlays
* fix(work-orders): check duplicate numbers globally
* fix(work-orders): exhaust fuzzy pages for exact WO number lookup
Prevent accepting duplicates that fall outside the first fuzzy search page.
* style(work-orders): format editable WO number cell for Prettier gate
* fix(work-orders): 0-based WO search page and stale duplicate guard
* fix(work-orders): sync draft WO# ref in effect for duplicate guard [SH-189]
* fix(work-orders): extract WO number editor under max-lines gate
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(work-orders): harden duplicate WO number checks [SH-189]
* fix(work-orders): sync wizard refs in effects and exhaust duplicate WO lookup
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(work-orders): extract hooks to satisfy max-lines governance gate
Co-authored-by: Cursor <cursoragent@cursor.com>
* style(work-orders): format wizard state hook for Prettier gate
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(work-orders): search one-character WO numbers for duplicates
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Sync with latest dev (CompDoc/completedDate from PR #45) and resolve
conflicts while preserving slide-over detail, workOrderVersion on media
mutations, and the consolidated list page hook.
Restack SH-121/SH-196 severity and uplift facets on current dev without unrelated Vendor screen changes, and cover public-interface apply plus search totalCount semantics.
Extract inline schedule cell for the maintainability gate, drop completedDate
patch coverage that is not on WorkOrderTableRow on dev, and align range create
expectations with assignWizardScheduleFields.
Restore vendors, e2e, and page-header to origin/dev so this PR stays an uplift-only vertical slice and clears the VendorFiltersDrawer maintainability gate.
* docs(work-orders): add pending BE contract checklist for design parity gaps
* feat(work-orders): add mentions in work-order comments composer
* docs(work-orders): align pr description with jira and qa residuals
* refactor(workorders): split work order view page into view components
* fix(work-orders): export comment assignment vendor input types for view hook
* fix(work-orders): drop preferredContact from vendor update payload
Align with WorkOrderVendorUpdatePayload on current dev so the mentions branch typechecks.
* fix(work-orders): remove Preferred Contact from WO vendor editor (SH-180)
EOF
* fix(work-orders): harden comment mentions and clear draft on success
* fix(work-orders): harden mention highlight boundary and submit catch [SH-217]
* fix(work-orders): keep mention cursor sync on current value [SH-217]
* fix(work-orders): keep mention menu open after typing @
Pass live text into syncCursor instead of a render-time valueRef.
Add a composer interaction regression for @ autocomplete visibility.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Alexandre Brandizzi <alex_brandizzi@hotmail.com>
* docs(work-orders): add pending BE contract checklist for design parity gaps
* feat(work-orders): add technician affordance in wo vendor dialog
* fix(work-orders): defer technician create until vendor dialog save
* docs(work-orders): align pr description with jira and qa residuals
* fix(vendors): harden draft technician optional field typing
* refactor(workorders): extract vendor dialog body footer and save hook
* fix(work-orders): coerce null company vendor for add-technician prop
* fix(work-orders): preserve draft technician staging on save [SH-193]
* fix(work-orders): select technicians by stable id [SH-193]
Keep selectedKey as explicit dialog state (SiteDialog pattern) so same-name drafts do not collide with existing vendors, and cover the regression with interaction tests.
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Alexandre Brandizzi <alex_brandizzi@hotmail.com>