Alexandre Brandizzi
0f34e8c7c6
Merge branch 'dev' into fix/ab/sh-371-pm-extra-media-gallery
2026-09-16 18:38:14 -03:00
Alexandre Brandizzi
e2a81e3ff8
Merge pull request #195 from Sea-Haven-Industries/fix/ab/sh-357-sh-358-status-transitions
...
SH-357, SH-358: offer only valid manual status transitions inline
2026-09-16 18:34:26 -03:00
Alexandre Brandizzi
ac2642d5b9
Merge branch 'dev' into fix/ab/sh-320-inline-sh-prefix-wo-number
2026-09-16 18:28:25 -03:00
Alexandre Brandizzi
c135605c87
Merge branch 'dev' into fix/ab/sh-369-completion-doc-service-gate
2026-09-16 18:28:22 -03:00
Alexandre Brandizzi
754912c643
Merge branch 'dev' into fix/ab/sh-371-pm-extra-media-gallery
2026-09-16 18:28:19 -03:00
Codex Review Integration
3a902bfebe
feat(work-orders): use services registry picker
2026-09-16 18:26:55 -03:00
Alexandre Brandizzi
daaf588793
Merge branch 'dev' into feat/ab/sh-278-vendor-service-area
2026-09-16 18:26:26 -03:00
Alexandre Brandizzi
f2df213965
Merge branch 'dev' into feat/ab/sh-235-severity-badge
2026-09-16 18:26:23 -03:00
Alexandre Brandizzi
49fd0b039c
Merge branch 'dev' into fix/ab/sh-356-due-date-after-schedule
2026-09-16 18:26:20 -03:00
Alexandre Brandizzi
99f57b9c89
Merge branch 'dev' into fix/ab/sh-341-generate-completes-work-order
2026-09-16 18:24:22 -03:00
Alexandre Brandizzi
baf16501cc
Merge branch 'dev' into feat/ab/sh-197-inline-create-fields
2026-09-16 18:24:20 -03:00
Alexandre Brandizzi
ae6ba6978f
Merge branch 'dev' into feat/ab/sh-195-date-header-tooltips
2026-09-16 18:24:17 -03:00
Alexandre Brandizzi
632d01f373
Merge branch 'dev' into fix/ab/sh-357-sh-358-status-transitions
2026-09-16 18:22:16 -03:00
Alexandre Brandizzi
785e112f63
Merge pull request #196 from Sea-Haven-Industries/fix/ab/sh-361-sh-363-audit-log-entries
...
SH-361, SH-363: full audit timestamps and previous type values
2026-09-16 18:20:19 -03:00
Alexandre Brandizzi
92fa61ad57
Merge branch 'dev' into feat/ab/sh-195-date-header-tooltips
2026-09-16 18:20:16 -03:00
Alexandre Brandizzi
46f90abf8a
Merge branch 'dev' into feat/ab/sh-197-inline-create-fields
2026-09-16 18:18:14 -03:00
Alexandre Brandizzi
d872e08a2b
Merge branch 'dev' into fix/ab/sh-341-generate-completes-work-order
2026-09-16 18:16:14 -03:00
Alexandre Brandizzi
71432ac586
Merge branch 'dev' into fix/ab/sh-357-sh-358-status-transitions
2026-09-16 18:08:14 -03:00
Alexandre Brandizzi
ad1fd7ebf9
Merge branch 'dev' into fix/ab/sh-361-sh-363-audit-log-entries
2026-09-16 18:08:11 -03:00
Codex Review Integration
a9d8416f0f
fix(work-orders): prefer stored media over a zero detail media count
...
The detail endpoint's info inherits MediaCount from the board row DTO but
the service never sets it, so it serializes as 0. The previous guard trusted
any numeric value and returned that 0, leaving the slide-over completion gate
reporting "At least 1 photo" even after an upload. Take the larger of the
reported count and the stored (non-legacy) attachments so a positive API
count still wins while a spurious or omitted 0 no longer masks present media.
Dropping the unused mapped-row argument also removes a flat-payload path that
would have counted legacy items.
2026-09-16 18:05:50 -03:00
Adam Moussa
e95a720630
Merge branch 'dev' into feat/ab/sh-222-create-error-copy
2026-09-16 16:46:27 -04:00
Adam Moussa
74765427bc
Merge branch 'dev' into fix/ab/sh-339-wizard-complete-image
2026-09-16 16:36:39 -04:00
Codex Review Integration
e65049691c
chore(work-orders): remove ticket keys from lifecycle docs
2026-09-16 17:01:58 -03:00
Codex Review Integration
196ec8a836
fix(work-orders): make date help controls accessible
2026-09-16 16:56:26 -03:00
Codex Review Integration
4e54aa7cfe
chore(work-orders): remove ticket keys from completion docs
2026-09-16 16:56:26 -03:00
Codex Review Integration
c75f8b6239
chore(work-orders): remove ticket keys from audit docs
2026-09-16 16:56:26 -03:00
Codex Review Integration
a75543342d
chore(work-orders): remove ticket key from mapper docs
2026-09-16 16:56:26 -03:00
Codex Review Integration
712d8e0dc6
fix(work-orders): clear stale technician drafts on selection changes
2026-09-16 16:50:26 -03:00
Codex Review Integration
38ea40d6ca
Merge origin/dev into feat/ab/sh-278-vendor-service-area
2026-09-16 16:08:12 -03:00
Codex Review Integration
2b2b24f2e3
fix(work-orders): clarify search scope with advanced filters
2026-09-16 15:42:01 -03:00
Codex Review Integration
8774b2e0a6
fix(work-orders): render PM extra media in the gallery (SH-371)
...
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:23:24 -03:00
Codex Review Integration
9225f2345c
fix(work-orders): gate completion document button on service selection (SH-369)
...
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:23:17 -03:00
Codex Review Integration
cd5d4ad1d8
fix(work-orders): keep wizard vendor notes bound to the selected company
...
Late roster data no longer overwrites notes typed for the current selection.
The notes baseline is keyed by vendor, so a save never patches a previous
company. Changing the primary service clears leftover notes, and a save
with a missing baseline reads the current roster first. Also drops ticket
keys from shipped comments.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:18:06 -03:00
Codex Review Integration
4eb929e1c8
test(work-orders): remove query devtools overlay after navigation
...
Also drops ticket keys from shipped comments and test names.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:15:52 -03:00
Codex Review Integration
59a5bc9252
test(work-orders): clear query devtools overlay in mobile upload journey
...
Also drops ticket keys from shipped comments and test names.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:15:03 -03:00
Alexandre Brandizzi
2d8a35a08a
Merge branch 'dev' into fix/ab/sh-359-wo-board-column-order
2026-09-16 15:08:07 -03:00
Codex Review Integration
62825d2c70
chore(workorders): remove ticket keys from column comments
2026-09-16 15:05:25 -03:00
Alexandre Brandizzi
1f405bbcaf
Merge branch 'dev' into fix/ab/sh-356-due-date-after-schedule
2026-09-16 15:03:34 -03:00
Alexandre Brandizzi
07734d8361
SH-138: manage ordered site contacts ( #191 )
...
Frontend checks / Build and test (push) Waiting to run
Frontend checks / governance (push) Waiting to run
Frontend checks / Visual regression (push) Waiting to run
Deploy dev content / Deploy shoc-frontend-new-dev through Terraform (push) Waiting to run
* feat(locations): derive site areas from state
* chore(locations): keep ticket keys out of source comments
* feat(locations): manage ordered site contacts
---------
Co-authored-by: Codex Review Integration <codex-review@local.invalid>
2026-09-16 14:53:58 -03:00
Alexandre Brandizzi
30c43a4d86
SH-281: group vendor directory rows by company ( #188 )
...
* fix(vendors): add accessible trade overflow tooltip
* fix(vendors): add accessible trade overflow tooltip
* refactor(vendors): satisfy row maintainability gate
* feat(vendors): group directory rows by company
* chore(vendors): trigger SH-281 review checks
* test(vendors): align company directory visuals
* test(vendors): complete company visual baselines
* fix(vendors): keep empty states in viewport
* test(vendors): align centered empty baseline
* fix(vendors): use grouped directory endpoint
* test(vendors): follow grouped directory endpoint
* test(vendors): refresh combined visual snapshots
---------
Co-authored-by: Codex Review Integration <codex-review@local.invalid>
2026-09-16 14:40:24 -03:00
Codex Review Integration
96a066e98f
fix(workorders): satisfy SH-356 maintainability gate
2026-09-16 14:30:39 -03:00
Codex Review Integration
49be7ffbc6
test(work-orders): avoid unsupported array at helper
2026-09-16 13:59:22 -03:00
Codex Review Integration
5d53b8e810
fix(api): send multipart uploads with their Content-Type (SH-368)
...
The shared ky instance declared Content-Type: application/json for every
request. Ky bakes instance headers into the Request it builds, so a FormData
body left with that header, and the beforeRequest hook that deleted it ran
after the boundary had already been dropped: the multipart body went out
with no Content-Type at all. ASP.NET then cannot bind [FromForm] fields, so
the completion-doc upload (dialog and slide-over "Upload signed PDF")
returned 400 "The file field is required.", media category updates arrived
without category or workOrderVersion, and the legacy edit form post lost its
fields.
Drop the instance-wide Content-Type. Ky still sets application/json for
json bodies, and the runtime sets multipart/form-data with the boundary.
The old unit test tolerated a missing header, and ran under jsdom whose
FormData the Node Request cannot serialize. It now runs in the node
environment and requires a multipart Content-Type whose boundary matches the
body. A Pixel 7 viewport e2e covers the signed PDF upload and JPG/MP4/MOV
media upload plus categorize.
2026-09-16 13:39:20 -03:00
Codex Review Integration
fdc275ab9a
test(work-orders): cover the Due Date floor in the wizard
2026-09-16 13:35:12 -03:00
Codex Review Integration
b4d2d69abe
fix(work-orders): keep Due Date on or after Schedule On
2026-09-16 13:32:44 -03:00
Codex Review Integration
4649fd00da
fix(work-orders): place Completed Date before Comp Doc on the board
2026-09-16 13:21:48 -03:00
Codex Review Integration
7c090571c5
test(work-orders): cover wizard vendor company notes journey
2026-09-16 13:20:32 -03:00
Codex Review Integration
31982f9baa
fix(work-orders): save wizard vendor notes to the vendor company
2026-09-16 13:17:02 -03:00
Codex Review Integration
ee95847354
fix(work-orders): register inline technicians through the additive vendor roster
2026-09-16 13:16:44 -03:00
Codex Review Integration
050e3f5134
test(work-orders): cover SH placeholder WO numbers on the board
2026-09-16 13:13:35 -03:00