You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
notifications: store the push device's origin on sys_user_device and copy it into push data (ruling B on #29642, server half) #29768
Filing gate: ② a maintainer ruling's server half. Ruling B on #29642 (record 6593872191, maintainer 「同意」 2026-11-03T02:26Z): "the Console sends the origin it was loaded from in RegisterDeviceRequest. The server stores it on the UserDevice row, and the push channel copies it into PushDeliveryDataSchema." The spec half is PR #29767 (#29642), which declares origin on all three schemas with the device-side members marked [PLANNED — not yet stored]. ⛔ Not a claim. Suggested-grade: p2 (inherits #29642; without it the declared origin is never stored or sent, so the mobile shell still opens a tap on the wrong server).
Business reason. A user with two saved servers in the mobile shell (objectstack-ai/mobile#173) taps a push from server B and lands on server A. The fix only works once the server stores the origin at registration and sends it back on every push. Reader: the domain:server seat, after PR #29767 merges.
What to build (measured by the #29642 dev, os-dev-report 6595041258)
packages/services/service-messaging/src/objects/user-device.object.ts: sys_user_device gains an origin field beside app_id / locale.
packages/services/service-messaging/src/device-registry.ts: the row write stores request.origin ?? null (beside app_id: request.appId ?? null, locale: request.locale ?? null), and the row read sets device.origin when present (beside if (row.locale) device.locale = …).
packages/runtime/src/domains/notifications.ts: no edit needed; POST /devices already passes parsed.data to registerDevice, so origin reaches the registry once the spec merges.
Remove the two [PLANNED — not yet stored] markers in packages/spec and flip the marker pin in push-server-origin.test.ts in the same PR (a spec-text edit inside the server PR, the declaration's own retirement).
Carried here from the contract review of PR #29767 (record 6595157663, PASS, three should-fix items on packages/spec/src/system/push-server-origin.ts), since this card edits that module when the [PLANNED …] markers come off:
Labels follow DNS-hostname grammar: http://my_svc:3000 and a trailing-dot FQDN are refused although window.location.origin can answer them. Allow _ in a label, or name the limit in the docblock.
The port arm accepts non-canonical ports (:443 on https, :80 on http, leading zeros, out of range) and the IPv6 arm accepts [:::]; tighten, or note that the Console is the one producer.
The docblock should say an IPv4 host is accepted too.
Also for the Console producer (#29042): send origin only when window.location.protocol is http: or https:; an opaque "null" origin is refused and fails the whole registration with a 400.
Activity
objectstack-fleet commentedon Nov 3, 2026
domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K
Carried here from the contract review of PR #29767 (record 6595157663, PASS, three should-fix items on
packages/spec/src/system/push-server-origin.ts), since this card edits that module when the[PLANNED …]markers come off:http://my_svc:3000and a trailing-dot FQDN are refused althoughwindow.location.origincan answer them. Allow_in a label, or name the limit in the docblock.:443on https,:80on http, leading zeros, out of range) and the IPv6 arm accepts[:::]; tighten, or note that the Console is the one producer.Also for the Console producer (#29042): send
originonly whenwindow.location.protocolishttp:orhttps:; an opaque"null"origin is refused and fails the whole registration with a 400.objectstack-fleet commentedon Nov 3, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p2 ·
domain:server·pm:blocked· 2026-11-03T04:52Z⛔ Not a claim.
Blocked-by: #29767
sys_user_devicestores the device'sorigin, and the push channel copies it into the push data. Without it the declaredoriginis never stored, and a two-server shell still opens a tap on the wrong server. p2, inheriting [Decision] Push delivery data: name the server that sent a push, so a mobile shell with several saved servers opens a tap on the right one #29642.Generated by Claude Code