Repository navigation
docs(spec): push vendor docblocks read ADR-0012 §6.1, not alternate channel plugins - #30631
Conversation
…hannel plugins The push-config and push-device docblocks and the register-device-request test header still cited ADR-0012 §6 for "domestic vendors are alternate channel plugins". The amended ADR (§6.1) makes vendor a token type the hosted relay routes on, with the domestic vendors arriving behind the relay in phase 2. Comment text only. Claude-Session: https://claude.ai/code/session_01L6bhgTqqeHSwZYJmApbDCa Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L6bhgTqqeHSwZYJmApbDCa Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check
What this run could not see
Coarse fallback — 170 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
…sh-vendor-docblocks Claude-Session: https://claude.ai/code/session_01L6bhgTqqeHSwZYJmApbDCa Co-authored-by: Claude <noreply@anthropic.com>
… token types The page still said the other Android vendors plug in as separate channel implementations, the ADR-0012 §6 reading the amendment retired. Core ships apns and fcm; the domestic vendors are planned behind the hosted relay as further vendor values, not as plugins or channels. Claude-Session: https://claude.ai/code/session_01L6bhgTqqeHSwZYJmApbDCa Co-authored-by: Claude <noreply@anthropic.com>
|
domain:spec#3 · os-sales · session_01L6bhgTqqeHSwZYJmApbDCa Contract-review-claim: session_01L6bhgTqqeHSwZYJmApbDCa · head 28f2cc1 · 2026-11-05T19:59Z Full review at Generated by Claude Code |
|
domain:spec#3 · os-sales · session_01L6bhgTqqeHSwZYJmApbDCa Contract reviewServed-tier: Inputs: card #29960 (body; comments 6611521127, 6665182964, 6666461990, 6666548945, 6667839156), PR #30631 (body, file list, net diff against merge-base Gate verdicts, read at 2026-11-05T20:09Z after every run had completed: 69 check-runs on the head, 59 ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgmentEvery new sentence in the two
Sentences the PR leaves in place, re-read for truth now: the module docblock's "it refuses the relay transport, not yet served" (held by Observation on the lane seat's Findings. No must-fix. Two should-fix, neither a falsehood:
Implemented-by: VERDICT: PASS Generated by Claude Code |
…sh-vendor-docblocks Claude-Session: https://claude.ai/code/session_01L6bhgTqqeHSwZYJmApbDCa Co-authored-by: Claude <noreply@anthropic.com>
…endor list Contract-review should-fixes: the direct transport routes on vendor today (PushService.send picks transports[message.vendor]); the hosted relay, the default, does once served. The domestic vendor list uses the ADR's separators, HMS / Honor / Xiaomi / OPPO / vivo. Claude-Session: https://claude.ai/code/session_01L6bhgTqqeHSwZYJmApbDCa Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L6bhgTqqeHSwZYJmApbDCa Co-authored-by: Claude <noreply@anthropic.com>
|
domain:spec#3 · os-sales · session_01L6bhgTqqeHSwZYJmApbDCa Contract review — deltaServed-tier: Delta since the PASS record 6668108542 on
Net diff against the new merge-base Gate verdicts, read at 2026-11-05T20:58Z after every run had completed (the last, ① ② ③ — unchanged①, ② and ③ of record 6668108542 stand: comment text only, ④ Design judgment — the new sentences
Sentences left in place were re-read; none is now false. Observations (lane seat's ACCEPT, not drivers of the verdict). Findings. None. S1 and S2 of record 6668108542 are landed as proposed; no must-fix, no should-fix. Implemented-by: VERDICT: PASS Generated by Claude Code |
|
domain:spec#3 · os-sales · session_01L6bhgTqqeHSwZYJmApbDCa 维护者速读
席位意见:契约复审两轮都 PASS。第一轮提了两处措辞,第二轮修补都改了:一是 席位核对 — ACCEPT · domain:spec#3 · head
|
domain:spec#3 · os-sales · session_01L6bhgTqqeHSwZYJmApbDCa
Requested by Sales · project thread
Fixes #29960
Clause-②: no
Metadata-protocol: none
维护者速读
PushVendorSchema仍为apns | fcm,回滚即还原本 PR 的提交。packages/spec/src/system/push-config.zod.ts(PushVendorSchema注释那段)、content/docs/kernel/runtime-services/push-service.mdx(第 86-91 行)、packages/spec/src/system/push-device.zod.ts。git grep -nE "alternate channel|separate channel" -- packages/spec/src content/docs/references content/docs/kernel预期无输出。What changes
The docblocks that read ADR-0012 §6 as "the domestic Android vendors plug in as alternate channel plugins / implementations" now carry the reading ADR-0012 §6 and §6.1 (as amended by PR #29952) decide:
vendoris the token type the sender routes on (the direct transport today, wherePushService.sendpickstransports[message.vendor]; the hosted relay, the default, once it is served), core shipsapns | fcm, and phase 2 adds HMS / Honor / Xiaomi / OPPO / vivo behind the relay, with no per-vendor plugin and no per-vendor channel.packages/spec/src/system/push-config.zod.ts: the module docblock's "Out of scope here" paragraph, and thePushVendorSchemadocblock (still "closed on purpose"; a new value is still a spec change made together with its transport, now named as the relay's routing for that vendor).packages/spec/src/system/push-device.zod.ts: theUserDeviceSchemadocblock's "Narrowed from" paragraph.packages/spec/src/api/register-device-request.test.ts: the file-header comment.content/docs/references/system/push-config.mdx: regenerated bycheck:generated --fix(the only stale artifact).content/docs/kernel/runtime-services/push-service.mdx: the hand-written push service page said the other Android vendors "plug in as separate channel implementations". It now says onlyapnsandfcmship today, and the other Android vendors (HMS / Honor / Xiaomi / OPPO / vivo) are planned for a later phase behind the hosted relay, as further values ofvendor, the token type the sender routes on (this service's transports today, the relay once it is served), not as plugins or channels of their own. The page's own "The hosted relay: not served yet" section, which the sentence points to, is unchanged..changeset/29960-push-vendor-docblocks.md:@objectstack/specpatch, because the TSDoc of asrc/**/*.zod.tsfile ships in the published declarations.Comment text only: no schema,
.describe(), export, default or test assertion moves. Citations of §6 for the device registry and its lifecycle stay as they are (push-device.zod.tsline 12,push-device.test.tsline 3,protocol.zod.ts,notification-service.ts,platform-capabilities.ts); only the alternate-channel reading moves, and where it moves it cites §6.1.Tests
pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 src/system/push-config.test.ts src/system/push-device.test.ts src/api/register-device-request.test.ts src/api/push-relay.test.ts: Test Files 4 passed (4), Tests 117 passed (117).pnpm --filter @objectstack/spec typecheck: exit 0.pnpm --filter @objectstack/spec check:generated: all 14 generated artifacts up to date (after--fixregeneratedcheck:docs).--no-inline-configon the three changed.tsfiles: exit 0.Acceptance notes
content/docs/kernel/runtime-services/push-service.mdx) carried the same retired reading. The seat widened the claim to cover it (claim amendment on spec(system): push-config / push-device docblocks still cite ADR-0012 §6 for "domestic vendors are alternate channel plugins", the reading #29817 retires #29960), and it is fixed in this PR. A re-grep ofcontent/docs,packages/spec/src,packages/services/service-push,packages/services/service-messaging/src,skillsanddocsfor "separate channel" / "alternate channel" / "plug in as" finds no other ADR-0012 §6 vendor reading outside the ADR's own quoted amendment text.push-device.zod.tsline 12, "(ADR-0012 §6, narrowed to what core ships)", cites §6 for the stored device shape (the registry), which §6 still is, so it is unchanged.86e42da79. S1: the docblocks named only the relay as what routes onvendor; onmainthe relay is not served and the direct transport routes on it today (packages/services/service-push/src/push-service.tsline 92,transports[message.vendor];packages/services/service-messaging/src/push-channel.tsline 147 filters devices by the configured vendors), so both docblocks, the docs page and the changeset now say "the token type the sender routes on", naming the direct transport today and the hosted relay (the default) once served. S2: the vendor list uses the ADR's five-way separators, HMS / Honor / Xiaomi / OPPO / vivo, everywhere it is written.Verification
All readings on head
52082426b(objectstack-ai/objectstack;origin/mainmerged in at88640a098).Derived gate families: 103 derived, 103 run, 0 NOT-MEASURED, 0 UNRUN
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack: 103 commands, every one run afterpnpm buildunder the verify lock (VERDICT command-exit 0), with its exit code captured before any pipe; all 103 exit 0 on one pass.--ranreconciliation: "103 derived, 103 run, 0 NOT-MEASURED (a DERIVED zero — all 103 recorded an exit code and none of them is 3)".check:doc-authoring,check:doc-anchors,check:docs-redirects,check:runtime-services-index: exit 0.check:type-check-debt: exit 0, "0 raw tsc error(s) total, none above its recorded number".check-changeset-no-major --base origin/main: exit 0.check:nul-bytes: exit 0.Package gates
pnpm --filter @objectstack/spec build, targeted vitest andpnpm --filter @objectstack/spec typecheck(verify lock): Test Files 4 passed (4), Tests 117 passed (117); VERDICT command-exit 0.pnpm --filter @objectstack/spec check:generated: "All 14 generated artifacts are up to date" (--fixregeneratedpush-config.mdxin52082426b).eslint --no-inline-configon the three changed.tsfiles: exit 0.CI-carried families (the required contexts) are read from this PR's check-runs.
Generated by Claude Code
🤖 Generated with Claude Code
https://claude.ai/code/session_01L6bhgTqqeHSwZYJmApbDCa