Skip to content

release: v1.6.71 - #313

Merged
roncodes merged 17 commits into
mainfrom
release/v1.6.71
Oct 16, 2026
Merged

roncodes merged 17 commits into
mainfrom
release/v1.6.71

Conversation

@roncodes

@roncodes roncodes commented Oct 15, 2026 •

Copy link
Copy Markdown
Member

Release v1.6.71. Merging this PR into main tags v1.6.71 through the release workflow.

Included

#312, #311. These fix PRs target this branch; merge them here first.

Part of the Fleetbase Cloud sandbox (test mode) incident fix: core-api v1.6.71, fleetops v0.6.73, billing v0.1.28, internals v0.0.40 and registry-bridge v0.1.11. After all five are tagged, bump them in the fleetbase repo's api/composer.json for the Cloud deploy. No migrations are needed.

The version files and RELEASE.md already name v1.6.71. Update RELEASE.md if anything else lands on this branch.

roncodes and others added 5 commits October 15, 2026 12:21
Lifecycle events for records assigned to a driver (orders, and anything
with a driver_assigned_uuid) went only to driverAssigned.{uuid} and
driverAssigned.{public_id}. Clients that follow the {type}.{id}
convention, such as the Navigator driver app and the console scheduler,
listen on driver.{public_id} and never received them.

They now also go to driver.{public_id} and driver.{uuid}, where the
driver's location and geofence events already arrive. driverAssigned.*
is still published for existing subscribers and is marked deprecated.
broadcastOn() now returns each channel name once.
…never share entries

Sandbox requests switch models to the sandbox database without any credential,
company or path that tells them apart, so list, model and relationship cache keys
collided: test mode served cached live data and live could be served sandbox data.
Every key now carries the connection the model reads. Versions stay shared, since
a list key carries versions of tables other models write and a cross-connection
write only over-invalidates.

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
…d-orders

fix(events): publish driver-assigned records on driver.{id}
fix: isolate API model cache keys between live and sandbox
@codecov

codecov Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (7ccac14) to head (997a5eb).

Additional details and impacted files
@@             Coverage Diff              @@
##                main      #313    +/-   ##
============================================
  Coverage     100.00%   100.00%            
- Complexity      8881      8931    +50     
============================================
  Files            472       473     +1     
  Lines          27918     28057   +139     
============================================
+ Hits           27918     28057   +139     
Flag Coverage Δ
backend 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

… server

System administrators can now manage the socket server from the console
instead of only through the environment:

- system.socket.enabled / mode / token_ttl / origins / publisher_origin
  settings; a missing or cleared one falls back to the environment
  (SOCKETCLUSTER_AUTH_ENABLED, _AUTH_MODE, _TOKEN_TTL, _OPTIONS.origins,
  _ORIGIN), which is the behaviour before this change.
- SocketSettings resolves the effective values and their sources; the
  stored values are cached for 60 seconds and the cache is cleared on save.
  An unreachable settings table reads as nothing stored.
- SocketToken::enabled(), the default token TTL and the websocket
  publisher's Origin header follow the effective settings.
- GET/POST int/v1/settings/socket (AdminRequest): effective settings plus
  the socket server's signed /stats (2 s timeout, short reason on failure).
  Switching on without SOCKETCLUSTER_AUTH_KEY is refused with 422
  key_missing; saves are recorded in the activity log.
- GET int/v1/socket/config, signed with the authorize key and answered
  while the switch is off, so the socket server can apply the switch, mode
  and origins at runtime.

The auth key stays environment-only and is never stored or returned; only
key_configured is reported.
roncodes and others added 11 commits October 15, 2026 16:19
…class

Find::httpFilterForModel() cached its answer per model class for the life of
the process, ignoring the filter a controller sets on its model and whether
the request was internal. Under Octane, the first controller to list a model
decided the filter for every other: Fleet-Ops' order filter was applied to
Storefront's order lists, so a network's orders page listed every order in the
company. The cache is now keyed by the model's own filter, and a filter found
by convention is picked per request audience. httpRequestForModel() is keyed
by the model's own request class too.
feat(socket): admin socket settings (switch, mode, token TTL, origins) with signed config for the socket server
…l-filter

fix(find): key the filter and request caches by the controller's own class
A console building a category tree from a flat list (Storefront's nested
product categories) needs each category's parent without loading it. The
internal Category resource now sends parent_uuid; public responses do not.
feat(categories): include parent_uuid in internal category responses
@roncodes
roncodes merged commit 5e48813 into main Oct 16, 2026
7 checks passed
@roncodes
roncodes deleted the release/v1.6.71 branch October 16, 2026 08:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant