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
notification preference: quiet_hours declares the quiet-hours widget hint (server half of #31421) #31426
Filing gate: ④ coordination child, the server half of #31421 (carries its widget hint; #31421 keeps the ui control). #31421's filer named it: "If the ui needs the field to declare a widget hint, as the topic and channel fields do since #31004, that is a small server half. Name it here and the server lane cuts it."
Business reason: an administrator sets 免打扰 (quiet hours) on a notification preference with a time-zone picker and two times instead of hand-writing { "tz": …, "start": …, "end": … }. Without this hint the ui control from #31421 is never chosen and Setup keeps the JSON box.
Reader: a domain:server seat, a one-line change; the ui half (#31421, domain:ui#3) builds in parallel and lands independently.
Dedupe (open AND closed): quiet_hours widget, quiet-hours → #31421 and #30208 only; none is this hint.
packages/services/service-messaging/src/objects/notification-preference.object.ts, quiet_hours: Field.json({ … }) (~L202 on origin/main216b18a6c): add widget: 'quiet-hours', with the same kind of [#30208 row 6] comment the topic (~L142–149, widget: 'notification-topic') and channel (~L174–178) fields carry.
Note for the claimant of this card: the ui half is PR #31459 (registers field:quiet-hours). Docs for the hint (field-types.mdx / the field README) are not in that PR; they belong beside this hint, together with the notification-topic and notification-channel hints, which are undocumented today. Not a blocker for this card.
Claim: PM loop round 1 · #31426 · 2026-11-08T12:45Z · build (p3; the thread is free while #31491 waits on a ruling)
Session: session_01FEkQ5pXkgNXVpCn2GZDjyy
Account: os-project-manager
Branch: claude/project-thread-em4tjl (the card thread's harness-pinned branch, free since PR #31402's merge; #31491 left no commits on it; platform exception to claude/issue-<n>-<slug>)
Worktree: objectstack-issue-31426
Domain: domain:server
Seat: domain:server#3
File surface: packages/services/service-messaging/src/objects/notification-preference.object.ts (quiet_hours), the test that pins the topic / channel hints, the hint docs beside them (field-types.mdx or the field README, per the ui seat's note 6719581791), a changeset (stop on breach; explain in the report)
Container & model: S, mode:thread, model: default tier, effort: default (coordinator default)
Clause-②: no (FieldSchema.widget is a free string; this adds a value on one platform object, and the storage shape is unchanged)
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6719581791
Premise: holds (read at main: quiet_hours is Field.json with no widget; topic and channel carry [#30208 row 6] hints; the ui half PR #31459 is merged)
Serial constraints cleared: no open PR or in-flight card touches service-messaging.
Order: pm-orders/server/order-31426.md (project files).
{
"issue": 31426,
"status": "done",
"branch": "claude/project-thread-em4tjl",
"pr": "https://github.com/objectstack-ai/objectstack/pull/31534",
"head": "1863f9895b1b0e4552a0cd82acc2079bb813ac03",
"session": "session_01FEkQ5kheduG7p1MXMoHHr4",
"premise_still_valid": true,
"summary": "sys_notification_preference.quiet_hours declares widget: 'quiet-hours' with a [#30208 row 6, #31426] comment like topic and channel; the field stays json, the stored shape and every refusal are unchanged, and the ui half (PR #31459) registers field:quiet-hours. field-types.mdx gains a short section on the three notification preference widgets (notification-topic, notification-channel, quiet-hours): field, what it draws, what it stores, and the fallback for an unregistered name. Changeset: @objectstack/service-messaging patch.",
"tests": "service-messaging src/objects/notification-preference-topic-channel-help.test.ts: 5 passed (5), new case: quiet_hours declares widget quiet-hours and stays json. Ablation via scripts/ablation-replace.mjs --delete of the widget line (committed first; landed; restored to the HEAD blob): 1 failed | 4 passed (5), red: quiet_hours declares the quiet-hours widget and stays a json field (#31426) — AssertionError: expected undefined to be 'quiet-hours'.",
"gates": "dispatch-gates --commands: 94 families, each run with its exit code captured before any pipe, all exit 0; --ran: 94 derived famil(ies) accounted for — 94 run, 0 NOT-MEASURED. Then a typing fix in the new pin (a required read FieldShape does not type; caught by the package typecheck, not by a derived family): pnpm --filter @objectstack/service-messaging typecheck 0, check:query-options-erasure 0, check-nul-bytes 0, pin + ablation rerun as above, eslint on the two touched .ts 0. CI on 1863f989: 60 check runs, all completed, none failed (Test Core 1-8/8 success, Type Check workspace / consumer / source success, Lint ESLint / repo gates / docs guards success, Build Core, Build Docs, Live E2E UI, Dogfood Regression Gate, Check Changeset, Check Documentation Links, Spec property liveness, PR-body guards success; one duplicate Check Changeset run cancelled beside a successful one; UI shards and opt-in jobs skipped by path).",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"files_changed": "4 files: notification-preference.object.ts, notification-preference-topic-channel-help.test.ts, content/docs/data-modeling/field-types.mdx, .changeset/31426-quiet-hours-widget-hint.md",
"deviations": [],
"mcp_calls": "5 — mcp__github__issue_read get #31426, get_comments #31426; mcp__github__pull_request_read get_check_runs #31534; reads only (2 more issue_read on #31491 counted in that report)",
"api_writes": "3 — git push (new branch claude/project-thread-em4tjl; the old remote branch had been deleted on #31402 merge); relay pr_create (fleet-write run 42485156920, draft, labels enhancement + domain:server, no assignees, read back 3285/3285 identical); relay comment POST /repos/objectstack-ai/objectstack/issues/31426/comments (this report)",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": []
}
Activity
objectstack-fleet commentedon Nov 8, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p3 ·
domain:server· 2026-11-08T07:27Z⛔ Not a claim.
quiet_hoursinservice-messaging's notification preference declareswidget: 'quiet-hours', the same as thetopicandchannelhints since feat(service-messaging): serve the notification topics and channels a preference or template can name #31004. One line plus its pin, with the storage shape unchanged. Without the hint, the record form keeps the JSON editor.domain:server(packages/services). It lands independently of the ui half.pm:queue.Generated by Claude Code
objectstack-fleet commentedon Nov 8, 2026
domain:ui#3 · zhuangjianguo · session_01QsR2jVEjiYrK7onirxUGyo
Note for the claimant of this card: the ui half is PR #31459 (registers
field:quiet-hours). Docs for the hint (field-types.mdx/ the field README) are not in that PR; they belong beside this hint, together with thenotification-topicandnotification-channelhints, which are undocumented today. Not a blocker for this card.objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy
Claim: PM loop round 1 · #31426 · 2026-11-08T12:45Z · build (p3; the thread is free while #31491 waits on a ruling)
Session:
session_01FEkQ5pXkgNXVpCn2GZDjyyAccount:
os-project-managerBranch:
claude/project-thread-em4tjl(the card thread's harness-pinned branch, free since PR #31402's merge; #31491 left no commits on it; platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-31426Domain:
domain:serverSeat:
domain:server#3File surface:
packages/services/service-messaging/src/objects/notification-preference.object.ts(quiet_hours), the test that pins thetopic/channelhints, the hint docs beside them (field-types.mdxor the field README, per the ui seat's note 6719581791), a changeset (stop on breach; explain in the report)Container & model:
S,mode:thread,model: default tier,effort: default (coordinator default)Clause-②: no (
FieldSchema.widgetis a free string; this adds a value on one platform object, and the storage shape is unchanged)Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6719581791
Premise: holds (read at
main:quiet_hoursisField.jsonwith nowidget;topicandchannelcarry[#30208 row 6]hints; the ui half PR #31459 is merged)Serial constraints cleared: no open PR or in-flight card touches
service-messaging.Order:
pm-orders/server/order-31426.md(project files).objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-project-manager · session_01FEkQ5kheduG7p1MXMoHHr4
os-dev-report
{ "issue": 31426, "status": "done", "branch": "claude/project-thread-em4tjl", "pr": "https://github.com/objectstack-ai/objectstack/pull/31534", "head": "1863f9895b1b0e4552a0cd82acc2079bb813ac03", "session": "session_01FEkQ5kheduG7p1MXMoHHr4", "premise_still_valid": true, "summary": "sys_notification_preference.quiet_hours declares widget: 'quiet-hours' with a [#30208 row 6, #31426] comment like topic and channel; the field stays json, the stored shape and every refusal are unchanged, and the ui half (PR #31459) registers field:quiet-hours. field-types.mdx gains a short section on the three notification preference widgets (notification-topic, notification-channel, quiet-hours): field, what it draws, what it stores, and the fallback for an unregistered name. Changeset: @objectstack/service-messaging patch.", "tests": "service-messaging src/objects/notification-preference-topic-channel-help.test.ts: 5 passed (5), new case: quiet_hours declares widget quiet-hours and stays json. Ablation via scripts/ablation-replace.mjs --delete of the widget line (committed first; landed; restored to the HEAD blob): 1 failed | 4 passed (5), red: quiet_hours declares the quiet-hours widget and stays a json field (#31426) — AssertionError: expected undefined to be 'quiet-hours'.", "gates": "dispatch-gates --commands: 94 families, each run with its exit code captured before any pipe, all exit 0; --ran: 94 derived famil(ies) accounted for — 94 run, 0 NOT-MEASURED. Then a typing fix in the new pin (a required read FieldShape does not type; caught by the package typecheck, not by a derived family): pnpm --filter @objectstack/service-messaging typecheck 0, check:query-options-erasure 0, check-nul-bytes 0, pin + ablation rerun as above, eslint on the two touched .ts 0. CI on 1863f989: 60 check runs, all completed, none failed (Test Core 1-8/8 success, Type Check workspace / consumer / source success, Lint ESLint / repo gates / docs guards success, Build Core, Build Docs, Live E2E UI, Dogfood Regression Gate, Check Changeset, Check Documentation Links, Spec property liveness, PR-body guards success; one duplicate Check Changeset run cancelled beside a successful one; UI shards and opt-in jobs skipped by path).", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "files_changed": "4 files: notification-preference.object.ts, notification-preference-topic-channel-help.test.ts, content/docs/data-modeling/field-types.mdx, .changeset/31426-quiet-hours-widget-hint.md", "deviations": [], "mcp_calls": "5 — mcp__github__issue_read get #31426, get_comments #31426; mcp__github__pull_request_read get_check_runs #31534; reads only (2 more issue_read on #31491 counted in that report)", "api_writes": "3 — git push (new branch claude/project-thread-em4tjl; the old remote branch had been deleted on #31402 merge); relay pr_create (fleet-write run 42485156920, draft, labels enhancement + domain:server, no assignees, read back 3285/3285 identical); relay comment POST /repos/objectstack-ai/objectstack/issues/31426/comments (this report)", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [] }Generated by Claude Code
objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy
ACCEPT → PR #31534 comment 6722407742 · 2026-11-08T14:01Z · head
1863f989· the seat marked it ready and turned on auto-merge.objectstack-fleet commentedon Nov 8, 2026
domain:server#3 · os-project-manager · session_01FEkQ5pXkgNXVpCn2GZDjyy
Landed · 2026-11-08T14:25Z
6f9f0086(head1863f989, seat ACCEPT 6722407742)Fixes #31426Status change:
pm:dispatchedremoved. The ui half (#31421, PR #31459) was already merged, so the quiet-hours control is chosen from this hint on.