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
A calendar view always opens on the current month #28021
Filing gate: ③ triage-directed. The order on #27386 said: take what is ui-only, card the rest. The card thread measured each row on origin/main (report 6518223407, out_of_scope_findings). Rows 2 and 4 are taken in PR #28017.
Reach: any calendar whose records fall months ahead. HotCRM's renewals calendar opens on an empty month (#27386 row 3).
Reader who acts: domain:spec first (the config key), then domain:ui (ObjectCalendar).
Duplicate search: search_issues "calendar view initial date opens current month default date" → no match.
Observed
CalendarConfigSchema declares startDateField, endDateField, titleField, colorField and allDayField, and no initial-date key. ObjectCalendar seeds its current date with new Date(). The key is still absent after #27895's Studio calendar settings.
Wanted
Spec: an initial-date key on the calendar config, for example 'today' or 'first_record'. Landing: packages/specui/view.zod.tsCalendarConfigSchema.
Console:ui/packages/plugin-calendarObjectCalendar reads it where it seeds currentDate.
Claim: PM loop round 3 · 2026-10-30T12:28Z
Session: session_017ihL2fi9zfJhUTubyJYb6V
Account: marchtian
Branch: claude/issue-28021-calendar-initial-date
Worktree: objectstack-issue-28021
Domain: domain:spec
Seat: domain:spec#4
Ruling-ref: maintainer 「可以开始派发 p3」 (2026-10-30T12:23Z), lifting the p3 hold; the card's filing gate ③ (triage-directed, order on #27386, report 6518223407)
File surface: packages/spec/src/ui/view.zod.ts (CalendarConfigSchema at L2133 gains one optional initial-date key, absent ⇒ today, so every stored calendar keeps its behaviour), its describe, tests, regenerated spec artefacts and reference docs, the authoring skill text only if it enumerates calendar keys, changeset (@objectstack/spec minor). The console half (ui/packages/plugin-calendarObjectCalendar seeding currentDate) is filed as a domain:ui follow-up card by this PR's dev, not taken here (stop on breach; explain in the report)
Container & model: S, mode:subagent, model: TIER_DEFAULT (opus) — the quota-exhaustion exemption (claude-fable-5-1 answered HTTP 429; maintainer 「你没有fable了,使用 opus开发完之后等契约复审」), effort: medium
Clause-②: yes (widening)
Metadata-protocol: added
Responsibility: a calendar view always opens on the current month, so a calendar whose records fall months ahead opens empty | an author-declared initial date on the calendar config, read by the console where it seeds the current date | every calendar view whose records are not in the current month (HotCRM's renewals calendar, #27386 row 3)
Thread-read: none
Premise: holds — on 549203d040CalendarConfigSchema (view.zod.ts:2133) declares startDateField, endDateField, titleField, colorField, allDayField and no initial-date key
Serial constraints cleared: no open PR touches view.zod.ts or plugin-calendar (open PR file lists read just before this claim). #28018 and #28020 also land in view.zod.ts; this seat does not take them beside this card
{
"issue": 28021,
"status": "done",
"branch": "claude/issue-28021-calendar-initial-date",
"pr": "https://github.com/objectstack-ai/objectstack/pull/28138",
"head": "d7c3dce62b504f9036fa7c71810d029d20190c8d",
"session": "session_017ihL2fi9zfJhUTubyJYb6V",
"premise_still_valid": true,
"summary": "CalendarConfigSchema (view.zod.ts) gains optional initialDate: z.enum(['today','first_record','next_record']), with no spec-side default; absent means today. The object-calendar calendar prop takes it by reference, and its describe now lists initialDate?. The liveness calendar row marks the key PLANNED until its reader lands. authorable-surface/ui.json, view.mdx and component.mdx were regenerated. Changeset: @objectstack/spec minor. The console half was filed as #28102 (label finding).",
"decision_for_maintainer": "key name initialDate (alternative: defaultDate, after the object-calendar defaultView precedent) and values today | first_record | next_record; a fixed ISO date is deliberately not admitted",
"tests": "pnpm --filter @objectstack/spec test (under the verify lock) at d7c3dce62b: Test Files 757 passed (757), Tests 22529 passed | 1 todo, VERDICT command-exit 0; pnpm --filter @objectstack/spec typecheck exit 0 in the same locked run; new file src/ui/calendar-config-initial-date.test.ts has 19 cases; ablation n/a (no tested behaviour changed, schema widening only)",
"gates": "dispatch-gates --commands at d7c3dce62b: 104 derived, all 104 run with exit codes captured before any pipe: 97 exit 0, 7 exit 3 PREREQUISITE NOT MET (NOT MEASURED: check:doc-formula-expressions, check:doc-security-posture, spec check:skill-examples, check:docs-transcript-drift, check:dual-build-cjs-loads, check:lean-entry-closure, check:type-check-debt — each reads built output of packages outside the diff; CI runs them); --ran: 104 accounted, 97 run, 7 NOT-MEASURED (derived from exit 3), exit 0; spec check:generated before regen: 13/14 green, check:docs stale, then gen:docs; local-only: check:skill-frame-freshness exit 0, check:dev-prereqs exit 1 (workspace not built in this container; only spec built); PR check-runs at report time: all in_progress/queued (not awaited)",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"line_budget": "+167 / -3 across 8 files (dispatch-gates count), under the 3000 human-merge threshold",
"files_changed": [
".changeset/28021-calendar-initial-date.md",
"content/docs/references/ui/component.mdx",
"content/docs/references/ui/view.mdx",
"packages/spec/authorable-surface/ui.json",
"packages/spec/liveness/view.json",
"packages/spec/src/ui/calendar-config-initial-date.test.ts",
"packages/spec/src/ui/component.zod.ts",
"packages/spec/src/ui/view.zod.ts"
],
"deviations": [
"file surface beyond the claim: packages/spec/src/ui/component.zod.ts (object-calendar calendar prop describe lists initialDate?) and packages/spec/liveness/view.json (calendar row note: initialDate at PLANNED strength) — the seat amends the claim's file surface",
"rejection status pinned via ErrorHttpStatusMap.validation === 400 plus the zodIssuesToFields wire envelope (field calendar.initialDate, code invalid_option), not through a live HTTP save door",
"7 derived gates NOT MEASURED locally (exit 3, prerequisite builds outside the diff); declared narrowing, CI runs them",
"PR body opens with the two attribution lines and then Fixes #28021, per the order; the fleet-write dispatch header describes a pr_create body whose first line is Fixes",
"no Fable or independent review run, per the order (quota); the PR waits for the seat's contract-review hand-off",
"dedupe search for the follow-up card run by the dev, per the order: 2 search_issues queries, the only hit was #28021"
],
"mcp_calls": "2 — mcp__github__search_issues x2 (read-only); no MCP write tool",
"api_writes": "3 — repository_dispatch (issue_create, created #28102), repository_dispatch (pr_create, created #28138), and this comment via post-stamped; plus git push (not REST)",
"follow_up_card": 28102,
"open_questions": [
{
"question": "Key name and values",
"options": [
"A initialDate: today | first_record | next_record (as shipped)",
"B defaultDate, matching object-calendar defaultView",
"C drop next_record (today | first_record only)"
],
"recommendation": "A: initialDate cannot be read as a fallback value, and next_record is the value the renewals reach needs (first_record would open years back on a calendar that holds past renewals)"
}
],
"out_of_scope_findings": [
"carrier: #28102 · ui-owned copies of the calendar block key list that do not drive behaviour (registry description in ui/packages/plugin-list/src/index.tsx, which feeds sdui.manifest.json and content/docs/ui/components/plugins.mdx; object-calendar registry calendar input description; ui/packages/types/src/designer.ts calendar options) · not edited here, to avoid advertising an unread key · noted, not filed",
"carrier: #28102 · sdui.manifest.json object-calendar calendar input description already reads 'startDateField, endDateField, titleField, colorField' (no allDayField) on 549203d040 · pre-existing description drift, observation only · noted, not filed"
]
}
{
"issue": 28021,
"status": "done",
"round": "rework 1 (delta on report 6524362443)",
"pr": "https://github.com/objectstack-ai/objectstack/pull/28138",
"head": "558ec1b74f843248941478fcf681f4ab61e680c8",
"commits_this_round": [
"fc292749a0",
"562fb7159f",
"558ec1b74f"
],
"session": "session_017ihL2fi9zfJhUTubyJYb6V",
"ruling": "maintainer (time on the Ruling line above): 「而存在视图里的日期会一天天过时,这个可以利用公式啊」",
"summary": "initialDate is now a record anchor (first_record, next_record) or a wrapped, known date-macro token ({today}, {next_month_start}, {3_months_from_now}, ...). The bare 'today' is dropped. The accepted set is one regex (CALENDAR_INITIAL_DATE_RE) derived at load from DATE_MACRO_TOKENS and DATE_MACRO_PARAM_RE, so it is not a second grammar, and the published JSON Schema carries it as a pattern. A refused value gets invalid_format, and the message names both forms and DATE_MACRO_TOKENS; a bare known token is told its wrapped spelling. The describe, comment, changeset, liveness note, tests and regenerated artefacts are updated, and the #28102 body is updated.",
"tests": "pnpm --filter @objectstack/spec test (verify lock) at 558ec1b74f: Test Files 757 passed (757), Tests 22574 passed | 1 todo, VERDICT command-exit 0; typecheck exit 0 in the same run; calendar-config-initial-date.test.ts now has 64 cases, including a parity battery against DATE_MACRO_WRAPPED_RE + isDateMacroToken",
"gates": "spec check:generated exit 0 (14/14) after gen:docs + gen:skill-refs; dispatch-gates --commands at 558ec1b74f: 109 derived, 109 run, 103 exit 0 (check:type-check-debt included), 6 exit 3 NOT MEASURED (lint check:doc-formula-expressions, check:doc-security-posture, spec check:skill-examples, check:docs-transcript-drift, check:dual-build-cjs-loads, check:lean-entry-closure — prerequisite builds outside the diff); --ran exit 0; check:skill-frame-freshness exit 0",
"line_budget": "+286 / -3 across 10 files",
"files_changed_added_this_round": [
"skills/objectstack-ai/references/_index.md",
"skills/objectstack-data/references/_index.md"
],
"deviations": [
"the first rework cut (superRefine) was refused by the spec build's dropped-refinements ledger (16 sites); it was replaced by a derived pattern, not baselined",
"the diff now touches skills/** (two generated transitive-dependency lines from gen:skill-refs, because view.zod.ts imports date-macros.zod.ts) — a Tier H governed row; the seat reads the landing tier",
"PR body NOT edited by the dev: os-dev.md rules that the dev writes the PR body once and the seat writes later edits; the full replacement body is at the dev's scratchpad path pr-body2.md, handed to the seat in the final report",
"the #28102 body edit acknowledged triage comment 6523386496 (--ack-through) and kept its Blocked-by line"
],
"mcp_calls": "0 this round",
"api_writes": "2 this round — issue_patch #28102 body via post-stamped, and this comment; plus git push",
"out_of_scope_findings": []
}
Landed · 2026-10-31T03:30Z · PR #28138 merged by the queue at 2026-10-31T03:29Z as 8f36f6b060; the card closed by Fixes. This seat strips pm:dispatched in the same act. os-zhuang approved it (Tier H, two generated skills/** lines). Contract review: PASS 6537839837 on the landed head. initialDate accepts first_record, next_record or a wrapped date-macro token and refuses a fixed date, per 田騏's ruling of 2026-10-30T15:08Z. It is marked [PLANNED — not yet rendered] until the console reads it: #28102, which also carries should-fix 2 (split the describe when the marker comes off).
Activity
objectstack-fleet commentedon Oct 30, 2026
domain:spec#4 · marchtian · session_017ihL2fi9zfJhUTubyJYb6V
Claim: PM loop round 3 · 2026-10-30T12:28Z
Session:
session_017ihL2fi9zfJhUTubyJYb6VAccount:
marchtianBranch:
claude/issue-28021-calendar-initial-dateWorktree:
objectstack-issue-28021Domain:
domain:specSeat:
domain:spec#4Ruling-ref: maintainer 「可以开始派发 p3」 (2026-10-30T12:23Z), lifting the p3 hold; the card's filing gate ③ (triage-directed, order on #27386, report 6518223407)
File surface:
packages/spec/src/ui/view.zod.ts(CalendarConfigSchemaat L2133 gains one optional initial-date key, absent ⇒ today, so every stored calendar keeps its behaviour), its describe, tests, regenerated spec artefacts and reference docs, the authoring skill text only if it enumerates calendar keys, changeset (@objectstack/specminor). The console half (ui/packages/plugin-calendarObjectCalendarseedingcurrentDate) is filed as adomain:uifollow-up card by this PR's dev, not taken here (stop on breach; explain in the report)Container & model:
S,mode:subagent,model: TIER_DEFAULT(opus) — the quota-exhaustion exemption (claude-fable-5-1answered HTTP 429; maintainer 「你没有fable了,使用 opus开发完之后等契约复审」),effort: mediumClause-②: yes (widening)
Metadata-protocol: added
Responsibility: a calendar view always opens on the current month, so a calendar whose records fall months ahead opens empty | an author-declared initial date on the calendar config, read by the console where it seeds the current date | every calendar view whose records are not in the current month (HotCRM's renewals calendar, #27386 row 3)
Thread-read: none
Premise: holds — on
549203d040CalendarConfigSchema(view.zod.ts:2133) declaresstartDateField,endDateField,titleField,colorField,allDayFieldand no initial-date keySerial constraints cleared: no open PR touches
view.zod.tsorplugin-calendar(open PR file lists read just before this claim). #28018 and #28020 also land inview.zod.ts; this seat does not take them beside this cardobjectstack-fleet commentedon Oct 30, 2026
domain:spec#4 · marchtian · session_017ihL2fi9zfJhUTubyJYb6V
os-dev-report
Reported: 2026-10-30T13:47Z
{ "issue": 28021, "status": "done", "branch": "claude/issue-28021-calendar-initial-date", "pr": "https://github.com/objectstack-ai/objectstack/pull/28138", "head": "d7c3dce62b504f9036fa7c71810d029d20190c8d", "session": "session_017ihL2fi9zfJhUTubyJYb6V", "premise_still_valid": true, "summary": "CalendarConfigSchema (view.zod.ts) gains optional initialDate: z.enum(['today','first_record','next_record']), with no spec-side default; absent means today. The object-calendar calendar prop takes it by reference, and its describe now lists initialDate?. The liveness calendar row marks the key PLANNED until its reader lands. authorable-surface/ui.json, view.mdx and component.mdx were regenerated. Changeset: @objectstack/spec minor. The console half was filed as #28102 (label finding).", "decision_for_maintainer": "key name initialDate (alternative: defaultDate, after the object-calendar defaultView precedent) and values today | first_record | next_record; a fixed ISO date is deliberately not admitted", "tests": "pnpm --filter @objectstack/spec test (under the verify lock) at d7c3dce62b: Test Files 757 passed (757), Tests 22529 passed | 1 todo, VERDICT command-exit 0; pnpm --filter @objectstack/spec typecheck exit 0 in the same locked run; new file src/ui/calendar-config-initial-date.test.ts has 19 cases; ablation n/a (no tested behaviour changed, schema widening only)", "gates": "dispatch-gates --commands at d7c3dce62b: 104 derived, all 104 run with exit codes captured before any pipe: 97 exit 0, 7 exit 3 PREREQUISITE NOT MET (NOT MEASURED: check:doc-formula-expressions, check:doc-security-posture, spec check:skill-examples, check:docs-transcript-drift, check:dual-build-cjs-loads, check:lean-entry-closure, check:type-check-debt — each reads built output of packages outside the diff; CI runs them); --ran: 104 accounted, 97 run, 7 NOT-MEASURED (derived from exit 3), exit 0; spec check:generated before regen: 13/14 green, check:docs stale, then gen:docs; local-only: check:skill-frame-freshness exit 0, check:dev-prereqs exit 1 (workspace not built in this container; only spec built); PR check-runs at report time: all in_progress/queued (not awaited)", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "line_budget": "+167 / -3 across 8 files (dispatch-gates count), under the 3000 human-merge threshold", "files_changed": [ ".changeset/28021-calendar-initial-date.md", "content/docs/references/ui/component.mdx", "content/docs/references/ui/view.mdx", "packages/spec/authorable-surface/ui.json", "packages/spec/liveness/view.json", "packages/spec/src/ui/calendar-config-initial-date.test.ts", "packages/spec/src/ui/component.zod.ts", "packages/spec/src/ui/view.zod.ts" ], "deviations": [ "file surface beyond the claim: packages/spec/src/ui/component.zod.ts (object-calendar calendar prop describe lists initialDate?) and packages/spec/liveness/view.json (calendar row note: initialDate at PLANNED strength) — the seat amends the claim's file surface", "rejection status pinned via ErrorHttpStatusMap.validation === 400 plus the zodIssuesToFields wire envelope (field calendar.initialDate, code invalid_option), not through a live HTTP save door", "7 derived gates NOT MEASURED locally (exit 3, prerequisite builds outside the diff); declared narrowing, CI runs them", "PR body opens with the two attribution lines and then Fixes #28021, per the order; the fleet-write dispatch header describes a pr_create body whose first line is Fixes", "no Fable or independent review run, per the order (quota); the PR waits for the seat's contract-review hand-off", "dedupe search for the follow-up card run by the dev, per the order: 2 search_issues queries, the only hit was #28021" ], "mcp_calls": "2 — mcp__github__search_issues x2 (read-only); no MCP write tool", "api_writes": "3 — repository_dispatch (issue_create, created #28102), repository_dispatch (pr_create, created #28138), and this comment via post-stamped; plus git push (not REST)", "follow_up_card": 28102, "open_questions": [ { "question": "Key name and values", "options": [ "A initialDate: today | first_record | next_record (as shipped)", "B defaultDate, matching object-calendar defaultView", "C drop next_record (today | first_record only)" ], "recommendation": "A: initialDate cannot be read as a fallback value, and next_record is the value the renewals reach needs (first_record would open years back on a calendar that holds past renewals)" } ], "out_of_scope_findings": [ "carrier: #28102 · ui-owned copies of the calendar block key list that do not drive behaviour (registry description in ui/packages/plugin-list/src/index.tsx, which feeds sdui.manifest.json and content/docs/ui/components/plugins.mdx; object-calendar registry calendar input description; ui/packages/types/src/designer.ts calendar options) · not edited here, to avoid advertising an unread key · noted, not filed", "carrier: #28102 · sdui.manifest.json object-calendar calendar input description already reads 'startDateField, endDateField, titleField, colorField' (no allDayField) on 549203d040 · pre-existing description drift, observation only · noted, not filed" ] }objectstack-fleet commentedon Oct 30, 2026
domain:spec#4 · marchtian · session_017ihL2fi9zfJhUTubyJYb6V
os-dev-report
Reported: 2026-10-30T16:14Z (rework delta)
Ruling: maintainer 田騏 2026-10-30T15:08Z
{ "issue": 28021, "status": "done", "round": "rework 1 (delta on report 6524362443)", "pr": "https://github.com/objectstack-ai/objectstack/pull/28138", "head": "558ec1b74f843248941478fcf681f4ab61e680c8", "commits_this_round": [ "fc292749a0", "562fb7159f", "558ec1b74f" ], "session": "session_017ihL2fi9zfJhUTubyJYb6V", "ruling": "maintainer (time on the Ruling line above): 「而存在视图里的日期会一天天过时,这个可以利用公式啊」", "summary": "initialDate is now a record anchor (first_record, next_record) or a wrapped, known date-macro token ({today}, {next_month_start}, {3_months_from_now}, ...). The bare 'today' is dropped. The accepted set is one regex (CALENDAR_INITIAL_DATE_RE) derived at load from DATE_MACRO_TOKENS and DATE_MACRO_PARAM_RE, so it is not a second grammar, and the published JSON Schema carries it as a pattern. A refused value gets invalid_format, and the message names both forms and DATE_MACRO_TOKENS; a bare known token is told its wrapped spelling. The describe, comment, changeset, liveness note, tests and regenerated artefacts are updated, and the #28102 body is updated.", "tests": "pnpm --filter @objectstack/spec test (verify lock) at 558ec1b74f: Test Files 757 passed (757), Tests 22574 passed | 1 todo, VERDICT command-exit 0; typecheck exit 0 in the same run; calendar-config-initial-date.test.ts now has 64 cases, including a parity battery against DATE_MACRO_WRAPPED_RE + isDateMacroToken", "gates": "spec check:generated exit 0 (14/14) after gen:docs + gen:skill-refs; dispatch-gates --commands at 558ec1b74f: 109 derived, 109 run, 103 exit 0 (check:type-check-debt included), 6 exit 3 NOT MEASURED (lint check:doc-formula-expressions, check:doc-security-posture, spec check:skill-examples, check:docs-transcript-drift, check:dual-build-cjs-loads, check:lean-entry-closure — prerequisite builds outside the diff); --ran exit 0; check:skill-frame-freshness exit 0", "line_budget": "+286 / -3 across 10 files", "files_changed_added_this_round": [ "skills/objectstack-ai/references/_index.md", "skills/objectstack-data/references/_index.md" ], "deviations": [ "the first rework cut (superRefine) was refused by the spec build's dropped-refinements ledger (16 sites); it was replaced by a derived pattern, not baselined", "the diff now touches skills/** (two generated transitive-dependency lines from gen:skill-refs, because view.zod.ts imports date-macros.zod.ts) — a Tier H governed row; the seat reads the landing tier", "PR body NOT edited by the dev: os-dev.md rules that the dev writes the PR body once and the seat writes later edits; the full replacement body is at the dev's scratchpad path pr-body2.md, handed to the seat in the final report", "the #28102 body edit acknowledged triage comment 6523386496 (--ack-through) and kept its Blocked-by line" ], "mcp_calls": "0 this round", "api_writes": "2 this round — issue_patch #28102 body via post-stamped, and this comment; plus git push", "out_of_scope_findings": [] }objectstack-fleet commentedon Oct 31, 2026
domain:spec#4 · marchtian · session_017ihL2fi9zfJhUTubyJYb6V
Landed · 2026-10-31T03:30Z · PR #28138 merged by the queue at 2026-10-31T03:29Z as
8f36f6b060; the card closed byFixes. This seat stripspm:dispatchedin the same act. os-zhuang approved it (Tier H, two generatedskills/**lines). Contract review: PASS 6537839837 on the landed head.initialDateacceptsfirst_record,next_recordor a wrapped date-macro token and refuses a fixed date, per 田騏's ruling of 2026-10-30T15:08Z. It is marked[PLANNED — not yet rendered]until the console reads it: #28102, which also carries should-fix 2 (split the describe when the marker comes off).