Alexandre Brandizzi
0ae64f9ab9
Merge pull request #141 from Sea-Haven-Industries/feat/ab/sh-210-uplift-decisions
...
SH-210: Route uplift decisions through the work-order flow
2026-09-17 12:50:22 -03:00
Alexandre Brandizzi
679822733a
Merge branch 'dev' into feat/ab/sh-210-uplift-decisions
2026-09-17 12:44:12 -03:00
Alexandre Brandizzi
cc9a5ade21
Merge pull request #146 from Sea-Haven-Industries/feat/ab/sh-348-region-filter
...
SH-348: Work Orders board region filter
2026-09-17 12:42:12 -03:00
Alexandre Brandizzi
f4860a3dd9
Merge branch 'dev' into feat/ab/sh-348-region-filter
2026-09-17 12:36:15 -03:00
Adam Moussa
ef371b5917
Merge branch 'dev' into feat/ab/sh-210-uplift-decisions
2026-09-17 11:35:00 -04:00
Alexandre Brandizzi
3e301ac9da
Merge pull request #145 from Sea-Haven-Industries/feat/ab/sh-347-dashboard-contract
...
Validate and deploy / Validate deployable source bundle (push) Waiting to run
Validate and deploy / Deploy shoc-backend-dev through Terraform (push) Blocked by required conditions
Validate and deploy / Deploy shoc-backend-staging to Elastic Beanstalk (push) Blocked by required conditions
SH-347: Scoped dashboard metrics contract
2026-09-17 12:34:22 -03:00
Alexandre Brandizzi
1eadb82f28
Merge branch 'dev' into feat/ab/sh-210-uplift-decisions
2026-09-17 12:30:20 -03:00
Alexandre Brandizzi
564bd70301
fix(dashboard): scope Trend by picker and admit Scheduler to dispatcher picker
...
ResolveDispatcherScope now admits the Scheduler role, which owns the
viewAllDispatchersOnDashboard permission, so it can load Stats, Workload,
Performance, Regions and Trend instead of being denied.
GetTrendAsync now resolves scope via the shared ResolveDispatcherScope so a
picker DispatcherId selection scopes Trend consistently with the other
endpoints and unauthorized roles fail closed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-17 03:37:36 -03:00
Alexandre Brandizzi
146fe6fdb0
style: satisfy dotnet format whitespace gate for region board files
...
Break collection initializer entries onto one line each in
WorkOrderBoardRegions and WorkOrderBoardSearchTests so the changed-file
formatting gate (dotnet format --verify-no-changes) passes.
2026-09-17 02:26:19 -03:00
Alexandre Brandizzi
5c93e4ecec
Merge remote-tracking branch 'origin/dev' into feat/ab/sh-348-region-filter
...
# Conflicts:
# SeaHaven.Services/Helpers/DashboardRegions.cs
2026-09-17 02:20:44 -03:00
Alexandre Brandizzi
f564e1b112
Merge remote-tracking branch 'origin/dev' into feat/ab/sh-347-dashboard-contract
...
# Conflicts:
# Api.SeaHavenIndustries.Tests/DashboardServiceTests.cs
2026-09-17 02:18:22 -03:00
Alexandre Brandizzi
782165a4cf
Merge pull request #133 from Sea-Haven-Industries/feat/ab/sh-348-dashboard-region
...
Validate and deploy / Validate deployable source bundle (push) Waiting to run
Validate and deploy / Deploy shoc-backend-dev through Terraform (push) Blocked by required conditions
Validate and deploy / Deploy shoc-backend-staging to Elastic Beanstalk (push) Blocked by required conditions
SH-348: Add dashboard region metrics
2026-09-17 01:36:09 -03:00
Alexandre Brandizzi
7e06d1c51b
Merge branch 'dev' into feat/ab/sh-348-dashboard-region
2026-09-17 01:30:08 -03:00
Alexandre Brandizzi
e07f04a6af
Merge pull request #131 from Sea-Haven-Industries/feat/ab/sh-187-service-picker
...
SH-187: Connect work-order service selection to the registry
2026-09-17 01:28:09 -03:00
Alexandre Brandizzi
b10956d731
Merge branch 'dev' into feat/ab/sh-348-dashboard-region
2026-09-17 01:24:07 -03:00
Adam Moussa
7d728d9101
Merge branch 'dev' into feat/ab/sh-187-service-picker
2026-09-17 00:20:59 -04:00
Alexandre Brandizzi
da80595321
Merge pull request #125 from Sea-Haven-Industries/feat/ab/sh-303-services-registry
...
SH-303: Add the global Services registry API
2026-09-17 01:20:08 -03:00
Alexandre Brandizzi
2e983b1f6a
Merge branch 'dev' into feat/ab/sh-303-services-registry
2026-09-17 01:12:07 -03:00
Alexandre Brandizzi
e0ec8dbc73
Merge remote-tracking branch 'origin/feat/ab/sh-207-uplift-queue' into feat/ab/sh-210-uplift-decisions
2026-09-16 22:48:17 -03:00
Alexandre Brandizzi
fbae09136b
fix(uplifts): update test data service contract (SH-208)
2026-09-16 22:48:07 -03:00
Alexandre Brandizzi
1b73593189
style(uplifts): format queue contract tests (SH-208)
2026-09-16 22:43:51 -03:00
Alexandre Brandizzi
b5e8f038c1
test(uplifts): cover queue contract fields (SH-208)
...
Behavior coverage for the new queue read fields so the contract cannot
regress silently: workOrderClosed follows terminal lifecycle statuses,
decidedByName resolves from the deciding user, attachmentCount counts
active dispatch documents, and pendingExposureTotal sums granted amounts
across all pending requests independent of paging.
2026-09-16 22:38:23 -03:00
Alexandre Brandizzi
bd98ea5629
merge: carry approval queue contract fields into decisions
2026-09-16 22:32:35 -03:00
Alexandre Brandizzi
e0e45d5ed3
feat(uplifts): expose approval queue contract fields (SH-208)
2026-09-16 22:32:23 -03:00
Alexandre Brandizzi
65b04687bc
fix(work-orders): honor edited service labels
2026-09-16 22:30:32 -03:00
Alexandre Brandizzi
b3e9a2eec3
fix(services): allow admins to reactivate services
2026-09-16 22:30:32 -03:00
Alexandre Brandizzi
162bb4d80e
merge: reconcile dashboard review updates
2026-09-16 22:24:20 -03:00
Alexandre Brandizzi
e5e4cd0b58
merge: carry uplift queue corrections into decisions
...
# Conflicts:
# Api.SeaHavenIndustries.Tests/UpliftQueueReadTests.cs
# SeaHaven.DataServices/Implementation/UpliftDataService.cs
2026-09-16 22:21:21 -03:00
Alexandre Brandizzi
316d1e6a63
fix(uplifts): correct queue exposure projections (SH-210)
2026-09-16 22:19:43 -03:00
Alexandre Brandizzi
60e006e8d7
fix(uplifts): calculate granted exposure amounts (SH-207)
2026-09-16 22:17:59 -03:00
Alexandre Brandizzi
dab39e78be
Merge remote-tracking branch 'origin/dev' into feat/ab/sh-348-dashboard-region
2026-09-16 22:06:49 -03:00
Alexandre Brandizzi
6edcd2a463
Merge pull request #138 from Sea-Haven-Industries/feat/ab/sh-353-dashboard-kpis-stacked
...
Validate and deploy / Validate deployable source bundle (push) Waiting to run
Validate and deploy / Deploy shoc-backend-dev through Terraform (push) Blocked by required conditions
Validate and deploy / Deploy shoc-backend-staging to Elastic Beanstalk (push) Blocked by required conditions
SH-353: Expose dashboard KPI counts
2026-09-16 22:02:17 -03:00
Alexandre Brandizzi
8acc580c5b
Merge branch 'dev' into feat/ab/sh-353-dashboard-kpis-stacked
2026-09-16 21:56:23 -03:00
Alexandre Brandizzi
a3a4ddde2a
Merge pull request #143 from Sea-Haven-Industries/feat/ab/sh-330-sites-list
...
SH-330: support site registry queries
2026-09-16 21:54:24 -03:00
Alexandre Brandizzi
dca8d898cb
feat(dashboard): add scoped metrics contract (SH-347)
2026-09-16 21:37:17 -03:00
Alexandre Brandizzi
738c9eaf45
feat(work-orders): add region filtering (SH-348)
2026-09-16 21:27:05 -03:00
Adam Moussa
f6bd779fe0
Merge branch 'dev' into feat/ab/sh-353-dashboard-kpis-stacked
2026-09-16 20:00:32 -04:00
Alexandre Brandizzi
9bf45d65ff
Merge branch 'dev' into feat/ab/sh-330-sites-list
2026-09-16 20:58:16 -03:00
Alexandre Brandizzi
db9a94f335
Merge pull request #132 from Sea-Haven-Industries/feat/ab/sh-328-permission-overrides
...
Validate and deploy / Validate deployable source bundle (push) Waiting to run
Validate and deploy / Deploy shoc-backend-dev through Terraform (push) Blocked by required conditions
Validate and deploy / Deploy shoc-backend-staging to Elastic Beanstalk (push) Blocked by required conditions
SH-328: expose per-person permission overrides
2026-09-16 20:52:16 -03:00
Alexandre Brandizzi
660ebac628
feat(locations): support site registry queries (SH-330)
2026-09-16 20:45:15 -03:00
Alexandre Brandizzi
21b7083160
Merge branch 'dev' into feat/ab/sh-328-permission-overrides
2026-09-16 20:44:20 -03:00
Alexandre Brandizzi
1c0865ae15
Merge pull request #136 from Sea-Haven-Industries/feat/ab/sh-350-dashboard-trend
...
SH-350: Add dashboard trend metrics
2026-09-16 20:42:14 -03:00
Alexandre Brandizzi
63bda30595
Merge branch 'dev' into feat/ab/sh-328-permission-overrides
2026-09-16 20:36:19 -03:00
Alexandre Brandizzi
c605ceefae
Merge branch 'dev' into feat/ab/sh-348-dashboard-region
2026-09-16 20:36:16 -03:00
Alexandre Brandizzi
0bda64efc4
Merge branch 'dev' into feat/ab/sh-350-dashboard-trend
2026-09-16 20:36:14 -03:00
Alexandre Brandizzi
452d666547
Merge pull request #142 from Sea-Haven-Industries/fix/ab/sh-374-getworkorderbyid-binding
...
SH-374: return the work order from GetWorkorderById?id=
2026-09-16 20:34:16 -03:00
Alexandre Brandizzi
af441894d7
fix(permissions): clean up overrides on user delete and converge concurrent override writes (SH-328)
...
DeleteUserWithCascadeAsync never removed UserPermissionOverrides rows, and
the FK on UserId is Restrict. Once an override was saved for a member, the
admin hard-delete (DeleteUserAsync -> DeleteUserWithCascadeAsync) failed the
foreign key inside the transaction and the controller surfaced it as a 400,
so the user was never deleted. Add an explicit ExecuteDelete on
UserPermissionOverrides before the user is removed, matching how UserRoles is
already cleared in the same method (no schema change).
SetOverrideAsync was check-then-insert on the composite key with no
DbUpdateException handling, so two concurrent PUTs for the same
(UserId, PermissionKey) let the loser violate PK_UserPermissionOverrides and
return 500. Catch the conflict, detach the pending insert, and converge by
updating the persisted row to the caller's requested state.
2026-09-16 20:27:26 -03:00
Alexandre Brandizzi
e8feed1d1b
Merge branch 'dev' into feat/ab/sh-348-dashboard-region
2026-09-16 20:26:26 -03:00
Alexandre Brandizzi
fed45f423e
Merge branch 'dev' into feat/ab/sh-350-dashboard-trend
2026-09-16 20:26:23 -03:00
Alexandre Brandizzi
93ecbbd410
test(dashboard): guard Stats wire object for KPI counts (SH-353)
...
The added service test asserts DashboardStatsDTO, which already carried
ScheduledTomorrow, PendingUplifts and AvetaPending, so it does not guard
the regression that was actually shipped: the DashboardController Stats
anonymous response dropping those keys and leaving the tiles empty.
Add DashboardControllerTests.GetStats_SerialisesKpiCountsOnWireObject,
which drives the controller and asserts the three keys are present on the
serialised wire object, so re-dropping any of them fails a test.
Also reword the pending-uplifts comment in DashboardServiceTests: the
Pending-only-vs-ChangesRequested exclusion is the behaviour the code
ships today, an open product call, not a settled review decision.
2026-09-16 20:25:45 -03:00