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
Calendar with no end-date field: the week/day "Resize start" handle still moves the event, and the calendar-view renderer drops endEditable #29197
Filing gate: ② out-of-scope finding, class a, from #29020 (PR #29146; report /mnt/project-files/issue-29020/os-dev-report.json) · filed by domain:ui#1 · ⛔ Not a claim. No grade: triage sets it.
Business reason. A calendar view whose object has no end-date field shows each event as a point in time. After #29020, such a view no longer offers resizing the end. Two doors are still left open:
In week and day views, the top "Resize start" handle writes a real start change and redraws the event one hour long, so dragging it reads as a move.
Measured (the #29020 dev, by reading and in tests at PR #29146 head 88ee38a1; not run live).
With no end field, the time-grid top handle stays. Dragging it changes start, and the event redraws 1 h long.
calendar-view-renderer passes no endEditable to CalendarView, so authored nodes get the default true.
Wanted.
With no end-date field, week and day views draw no resize handle at all. Moving the event stays a drag of its body.
The renderer forwards endEditable (or derives it from the node's end field) so that authored calendar nodes match ObjectCalendar.
Views with an end field are unchanged. No new metadata key.
Tests. No end field: no top handle in week and day views, and an authored node with no end field draws no end handles. With an end field, both handles stay.
Reader.domain:ui (area:records). Size S. Serialize after PR #29146 (#29020).
Dedupe. Searched calendar resize start handle, endEditable renderer: only #29020.
Claim: PM loop round 19 · 2026-11-02T10:04Z
Session: session_01QsR2jRjkd6BVRcw6N7MyTu (card thread, os-dev); dispatched by seat session session_01QsR2jUJ19MstFvFhjgiYTu
Account: zhuangjianguo
Branch: claude/project-thread-dyr5y4 (platform-assigned to the card thread; it can push only this branch)
Worktree: objectstack-issue-29197
Domain: domain:ui
Seat: domain:ui#1
File surface: ui/packages/plugin-calendar/src/CalendarView.tsx (the week/day top "Resize start" handle and the pointer-down resize zones gated on endEditable), ui/packages/plugin-calendar/src/calendar-view-renderer.tsx (forwards a boolean endEditable host hatch, as it does slotMinutes; no new metadata or types key), their tests (including flipping the two ObjectCalendar.endEditable-29020 cases that pin the top handle), one line in content/docs/frontend/plugins/plugin-calendar.mdx, and a root .changeset. Any other file is declared by a claim amendment before code (stop on breach; explain in the report)
Container & model: S, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: a calendar with no end-date field draws no resize handle in any view, the week/day top handle included, and authored calendar nodes can say so through the renderer; views with an end field are unchanged
Thread-read: 6574266722
Premise: holds (at origin/main45e9b2f1: the dev read at 45e9b2f (after 10bfd70): the time-grid top handle is not gated on endEditable, and calendar-view-renderer does not forward it; endDateField defaults to end, so the renderer forwards a host boolean instead of deriving)
Serial constraints cleared: after PR #29146 (#29020), landed as 10bfd70.
{
"issue": 29197,
"status": "done",
"branch": "claude/project-thread-dyr5y4",
"pr": "https://github.com/objectstack-ai/objectstack/pull/29292",
"session": "session_01QsR2jRjkd6BVRcw6N7MyTu",
"premise_still_valid": true,
"summary": "CalendarView endEditable={false} now also hides the week/day top 'Resize start' handle, and handleEventPointerDown ignores top/bottom zones when false, so a calendar with no stored end draws no resize handle in any view; body moves unchanged. ObjectCalendar unchanged (already passes Boolean(endDateField)). calendar-view-renderer forwards a host boolean endEditable like slotMinutes, not derived from endDateField (defaults to 'end', so every node names an end field; premise note in PR body). Docs bullet in plugin-calendar.mdx, patch changeset with Clause-② no / Metadata-protocol none copied from the claim.",
"tests": "New CalendarView.noEndNoResize-29197.test.tsx (12 cases) + updated ObjectCalendar.endEditable-29020 (2 cases flipped): 25/25 passed on d28a86c7. Red on main: CalendarView.tsx and calendar-view-renderer.tsx restored from 45e9b2f1 (tests import source, no build) -> 8 failed / 17 passed, every new-behaviour case red, every control green; restored via git checkout HEAD, git diff HEAD empty, blobs equal HEAD. Full package vitest packages/plugin-calendar/ locked: 68 files passed, 502 passed, 95 skipped. turbo type-check --filter=@object-ui/plugin-calendar: 50/50. No ablation beyond the red-on-main restore; the pointer-down guard has no reachable element to press (noted in Acceptance notes).",
"gates": "dispatch-gates --commands: 66 families, all exit 0 on d28a86c7 (65 unlocked with the PR body as event). Reruns: check:skill-examples first exit 3 PREREQUISITE NOT MET (client-react unbuilt) -> exit 0 after build; vitest run scripts/ locked 1 timeout (check-hand-rolled-comment-mask 'exits 0 as a process', 15 s tree scan) of 171 files -> that file alone 22/22. --ran: 66 derived, 66 run, 0 NOT-MEASURED. check-new-cross-file-line-citations: 0 new. eslint 4 files: 0 errors, warnings equal to base (24, 1), test files 0. Body gates (changeset-no-major, adr-0087, closing-keyword-parity, empty-changeset, partof) exit 0 before pr_create. PR check-runs: in_progress at open.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "0 GitHub MCP calls",
"api_writes": "2 — pr_create via fleet-write relay (run 41434389321) -> #29292; this report comment via post-stamped",
"open_questions": [],
"out_of_scope_findings": [
"carrier: seat 1 · noted, not filed — .changeset/29020-calendar-resize-without-end-field.md (unreleased) still says the top Resize start handle is unchanged; both ship in one release, so the changelog carries the stale line beside this correction. Outside the claim surface.",
"carrier: none · noted, not filed — ui/packages/plugin-calendar/README.md one-line summary 'Drag top/bottom edges to resize start/end times' does not mention the no-end-field case; outside the claim surface."
]
}
Landed · 2026-11-02T12:18Z · PR #29292 merged through the merge queue as 3d528bf2 at 2026-11-02T12:17Z (GitHub's clock). ACCEPT 6576030042 at head d28a86c7.
probe
before (3d528bf2~1)
now (origin/main)
resolveAuthoredEndEditable in ui/packages/plugin-calendar/src/calendar-view-renderer.tsx
0
2
onEventDrop && endEditable && entry.isStart (the top handle's gate) in ui/packages/plugin-calendar/src/CalendarView.tsx
0
1
CalendarView.noEndNoResize-29197.test.tsx exists
no
yes
Fixes #29197 closed this card. pm:dispatched comes off in the same stroke as this note. No seat card waited on this PR.
Activity
objectstack-fleet commentedon Nov 2, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: p2 (priority added) · 2026-11-02T09:59Z
⛔ Not a claim.
Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu
Claim: PM loop round 19 · 2026-11-02T10:04Z
Session:
session_01QsR2jRjkd6BVRcw6N7MyTu(card thread, os-dev); dispatched by seat sessionsession_01QsR2jUJ19MstFvFhjgiYTuAccount:
zhuangjianguoBranch:
claude/project-thread-dyr5y4(platform-assigned to the card thread; it can push only this branch)Worktree:
objectstack-issue-29197Domain:
domain:uiSeat:
domain:ui#1File surface:
ui/packages/plugin-calendar/src/CalendarView.tsx(the week/day top "Resize start" handle and the pointer-down resize zones gated onendEditable),ui/packages/plugin-calendar/src/calendar-view-renderer.tsx(forwards a booleanendEditablehost hatch, as it doesslotMinutes; no new metadata or types key), their tests (including flipping the twoObjectCalendar.endEditable-29020cases that pin the top handle), one line incontent/docs/frontend/plugins/plugin-calendar.mdx, and a root.changeset. Any other file is declared by a claim amendment before code (stop on breach; explain in the report)Container & model: S,
mode:thread,model: default tier (dispatch-gates --tier: no path-derived mandate),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: a calendar with no end-date field draws no resize handle in any view, the week/day top handle included, and authored calendar nodes can say so through the renderer; views with an end field are unchanged
Thread-read: 6574266722
Premise: holds (at
origin/main45e9b2f1: the dev read at 45e9b2f (after 10bfd70): the time-grid top handle is not gated on endEditable, and calendar-view-renderer does not forward it; endDateField defaults to end, so the renderer forwards a host boolean instead of deriving)Serial constraints cleared: after PR #29146 (#29020), landed as 10bfd70.
objectstack-fleet commentedon Nov 2, 2026
domain:ui#1 · zhuangjianguo · session_01QsR2jRjkd6BVRcw6N7MyTu
os-dev-report
{ "issue": 29197, "status": "done", "branch": "claude/project-thread-dyr5y4", "pr": "https://github.com/objectstack-ai/objectstack/pull/29292", "session": "session_01QsR2jRjkd6BVRcw6N7MyTu", "premise_still_valid": true, "summary": "CalendarView endEditable={false} now also hides the week/day top 'Resize start' handle, and handleEventPointerDown ignores top/bottom zones when false, so a calendar with no stored end draws no resize handle in any view; body moves unchanged. ObjectCalendar unchanged (already passes Boolean(endDateField)). calendar-view-renderer forwards a host boolean endEditable like slotMinutes, not derived from endDateField (defaults to 'end', so every node names an end field; premise note in PR body). Docs bullet in plugin-calendar.mdx, patch changeset with Clause-② no / Metadata-protocol none copied from the claim.", "tests": "New CalendarView.noEndNoResize-29197.test.tsx (12 cases) + updated ObjectCalendar.endEditable-29020 (2 cases flipped): 25/25 passed on d28a86c7. Red on main: CalendarView.tsx and calendar-view-renderer.tsx restored from 45e9b2f1 (tests import source, no build) -> 8 failed / 17 passed, every new-behaviour case red, every control green; restored via git checkout HEAD, git diff HEAD empty, blobs equal HEAD. Full package vitest packages/plugin-calendar/ locked: 68 files passed, 502 passed, 95 skipped. turbo type-check --filter=@object-ui/plugin-calendar: 50/50. No ablation beyond the red-on-main restore; the pointer-down guard has no reachable element to press (noted in Acceptance notes).", "gates": "dispatch-gates --commands: 66 families, all exit 0 on d28a86c7 (65 unlocked with the PR body as event). Reruns: check:skill-examples first exit 3 PREREQUISITE NOT MET (client-react unbuilt) -> exit 0 after build; vitest run scripts/ locked 1 timeout (check-hand-rolled-comment-mask 'exits 0 as a process', 15 s tree scan) of 171 files -> that file alone 22/22. --ran: 66 derived, 66 run, 0 NOT-MEASURED. check-new-cross-file-line-citations: 0 new. eslint 4 files: 0 errors, warnings equal to base (24, 1), test files 0. Body gates (changeset-no-major, adr-0087, closing-keyword-parity, empty-changeset, partof) exit 0 before pr_create. PR check-runs: in_progress at open.", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "0 GitHub MCP calls", "api_writes": "2 — pr_create via fleet-write relay (run 41434389321) -> #29292; this report comment via post-stamped", "open_questions": [], "out_of_scope_findings": [ "carrier: seat 1 · noted, not filed — .changeset/29020-calendar-resize-without-end-field.md (unreleased) still says the top Resize start handle is unchanged; both ship in one release, so the changelog carries the stale line beside this correction. Outside the claim surface.", "carrier: none · noted, not filed — ui/packages/plugin-calendar/README.md one-line summary 'Drag top/bottom edges to resize start/end times' does not mention the no-end-field case; outside the claim surface." ] }Generated by Claude Code
objectstack-fleet commentedon Nov 2, 2026
domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu
Landed · 2026-11-02T12:18Z · PR #29292 merged through the merge queue as
3d528bf2at 2026-11-02T12:17Z (GitHub's clock). ACCEPT 6576030042 at headd28a86c7.3d528bf2~1)origin/main)resolveAuthoredEndEditableinui/packages/plugin-calendar/src/calendar-view-renderer.tsxonEventDrop && endEditable && entry.isStart(the top handle's gate) inui/packages/plugin-calendar/src/CalendarView.tsxCalendarView.noEndNoResize-29197.test.tsxexistsFixes #29197closed this card.pm:dispatchedcomes off in the same stroke as this note. No seat card waited on this PR.