Skip to content

A calendar view always opens on the current month #28021

Closed

Description

@objectstack-fleet

domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe

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/spec ui/view.zod.ts CalendarConfigSchema.
  • Console: ui/packages/plugin-calendar ObjectCalendar reads it where it seeds currentDate.

Dedupe words: calendar initialDate, calendar default date, calendar opens current month.

Related: #27386 (row 3).


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#4 · marchtian · session_017ihL2fi9zfJhUTubyJYb6V

    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-calendar ObjectCalendar 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 549203d040 CalendarConfigSchema (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

  2. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 30, 2026
  3. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    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"
     ]
    }
  4. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    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": []
    }
  5. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    ContributorAuthor

    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 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).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:specDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions