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.
canGenerateCompDoc now ignores the completion-document closability gap so PM/Overdue drafts can enter generation.
Co-authored-by: Cursor <cursoragent@cursor.com>
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>
Restore vendors and page-header to origin/dev so this PR stays the WO
slide-over/media slice only. Remove stale godfile baseline entries now
under the 500-line cap.
* feat(work-orders): align Due Date and Past Due with SH-132 FE contract [SH-132]
* fix(work-orders): highlight Schedule On for unscheduled rows
Restore forceScheduleHighlight for Unscheduled section rows while keeping Due Date highlight for past-due and attempt feedback.
Co-authored-by: Cursor <cursoragent@cursor.com>
* test(work-orders): cover unscheduled Schedule On highlight [SH-132]
Add row-level public-interface regression proving Unscheduled rows force-highlight Schedule On, not Due Date (SH-165).
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Alexandre Brandizzi <alex_brandizzi@hotmail.com>
detailToClosabilityInput now uses WorkOrderDetail.problem as pm and source as WO type so Done is not permanently blocked by a false Service gap.
Co-authored-by: Cursor <cursoragent@cursor.com>
Clear additional contacts on site change, omit additionalContacts from site-only patches unless dirty or known from GET, and dirty-guard Query refetch while editing.
mapUpliftSummary no longer treats row status as uplift primaryStatus, getUpliftCellLabel hides pills without hasUplift, and vendor submit filters blank new technicians.
Omit empty new technician rows on save and route Active to Inactive through VendorDeactivationDialog, blocking sparse isActive:false updates.
Co-authored-by: Cursor <cursoragent@cursor.com>