Skip to content

Setup → Audit Log: the From / To filters are native date inputs (mm/dd/yyyy), the last place outside record forms still drawing the browser control after objectui#12642 #25875

Closed

Description

@os-steve

Filing gate ① a user-visible defect with a named landing site. Batch-of: 2026-10-25 browser pass on @objectstack/* 18.1.0 (second batch, 8 cards). Filed by the maintainer's account (os-steve) from the HotCRM pass driven in session session_01AwpXhq2nFKU6J7GmbCEmZu; ⛔ not a claim. Grade and routing are objectui triage's.

What is seen (@objectstack/console 18.1.0, zh-CN)

Setup → 诊断 → 审计日志: the filter row's From and To are the browser's native <input type="date"> with the mm/dd/yyyy placeholder and the browser's own picker, while every record form, list filter and action dialog in the same console uses the design-system date picker (the family objectui#12642 closed). On a zh-CN console the native control also shows the OS locale's format, not the console's. t33-审计日志.png.

reach: the public UI, measured once as the dev admin.

Expected

The audit-log filter bar uses the same date picker as list filters. (The bar's English labels are the i18n card objectui#13521; this card is the control only.)

Dedupe

objectui#12642 (closed) is the family close-out for native date inputs outside record forms and lists action-param dialogs, bulk dialogs, inline editors and list filters; the audit log component is not in its list. No other hit in this batch's searches. Report: REPORT.md §7.

Activity

  1. added
    area:i18nThe customer's own language, across UI, metadata and notifications
    bugSomething isn't working
    and removed on Oct 25, 2026
  2. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    Contributor

    Triage: first grade — bug · priority:p3 · domain:ui · area:i18n · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-25T14:55Z

    ⛔ Not a claim, ⛔ not a dispatch.

    • Use the shared localized date picker, as objectui#12642 did for record forms.

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Transferred 2026-10-26T02:00Z from objectstack-ai/objectui#13537, with its comments and timeline; the old URL redirects here. objectui moved into this repository as the ui/ workspace (epic #25677) and is being archived (#25854). The body is left exactly as filed.

    Paths. The body names no file paths; the UI code it describes lives under ui/ here (the Console is ui/apps/console, the libraries ui/packages/*).

    No stale pm:dispatched or assignee to strip.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 1 · 2026-10-26T09:21Z
    Session: session_01SMps7wq7rBTk53e8KTSEup
    Account: os-steve
    Branch: claude/issue-25875-audit-log-date-picker
    Worktree: objectstack-issue-25875
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: ui/apps/console/src/pages/system/AuditLogPage.tsx (the From / To filter controls and their imports), ui/apps/console/src/pages/system/AuditLogPage.filterLabels-13224.test.tsx (flip the native-input pins) and other AuditLogPage.*.test.tsx only if they break; scripts/sdui-manifest.record.json only if its gate goes red; root .changeset/25875-audit-log-date-picker.md (stop on breach; explain in the report). ⛔ ui/packages/i18n/src/locales/*.ts, ui/.github/** and the root .github/workflows/ci.yml are out of bounds.
    Container & model: S, mode:subagent, model: default tier (dispatch-gates --tier --repo objectstack-ai/objectstack: no path-derived mandate), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the audit-log page, which hand-rolls native date inputs | the shared localized date picker the record forms already use | every Setup admin filtering the audit log, in a non-US locale
    Thread-read: 6406553056
    Premise: holds 2026-10-26T09:03Z — on origin/main b0384f3fe5 AuditLogPage.tsx:565,569 render <Input type="date"> for From / To; the shared picker is reached through getLazyFieldWidget('date') from @object-ui/fields (index.tsx ~4557), which writes the same YYYY-MM-DD and '' on clear.
    Serial constraints cleared: none — no open claim holds AuditLogPage.tsx (area handed from seat 1 to seat 2 on 2026-10-26).
    Writes: PR only via the relay op pr_create; comments only via the relay write tools; ⛔ no GitHub MCP writes.

    • Ruling section: triage 6406553056 — use the shared localized date picker, as the record forms do.
    • Suggested route: render getLazyFieldWidget('date') inside <Suspense> with field={{ type: 'date', name, label }}, value, onChange (keep setPage(0)) and the existing id, so each Label still names exactly one control; ⛔ no direct DatePickerField import or new subpath export (public surface + eager-closure budget). The picker commits on blur / Enter, so the flipped test types in the display locale's format and blurs.
  5. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
      "issue": 25875,
      "status": "done",
      "branch": "claude/issue-25875-audit-log-date-picker",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26061",
      "session": "session_01SMps7wq7rBTk53e8KTSEup",
      "premise_still_valid": true,
      "summary": "Premise measured on origin/main 88531fab: AuditLogPage.tsx drew two native date inputs for From / To, and the picker is reachable only through getLazyFieldWidget('date'). Both filters now render getLazyFieldWidget('date'), resolved once at module scope, inside Suspense with a Skeleton fallback. Props: the existing label id, value, onChange (keeps setPage(0)) and field {type:'date', name, label}. The Input import is dropped. There is no DatePickerField import and no new export. Filter state and the request are unchanged: the picker writes YYYY-MM-DD, and an empty string on clear. The 13224 suite's native-input pins are flipped: each label names the picker's text box, never its calendar button. The live-filter test types in the en-US display format and commits on blur (From) and on Enter (To). Card assignee untouched. Diff stays within the claimed file surface (3 files): AuditLogPage.tsx, AuditLogPage.filterLabels-13224.test.tsx, and the root changeset .changeset/25875-audit-log-date-picker.md (@object-ui/console patch). origin/main was merged once before the PR opened, because #26008 touched AuditLogPage.tsx on a disjoint line. Worktree removed after the PR opened.",
      "tests": "Head 63114661. Under os-verify-lock: (1) the UI-deps build that CI's 'Build UI Deps' step runs: turbo build of @objectstack/spec... client... core... formula... lint... sdui-parser... types..., BUILD_OK. (2) pnpm exec turbo run type-check --concurrency=2 --filter=@object-ui/console: 'Tasks: 71 successful, 71 total', TC_EXIT=0. (3) vitest run --root ../.. --project @object-ui/console --maxWorkers=2 over the six AuditLogPage.*.test.tsx plus consolePagesLocale-secondPass-13460, consoleFaces.displayLocale-9909 and orphanedPageComponentRefs-10520: 'Test Files 9 passed (9) · Tests 68 passed (68)', TEST_EXIT=0. The lock printed 'VERDICT batch-last-exit 0'; the last part was the && of TC and TEST. eslint --no-inline-config over the two changed files: exit 0, 0 errors; its 2 warnings were already on main, on untouched lines. Ablation, run once with the fix committed first: AuditLogPage.tsx was overwritten with the 88531fab copy, confirmed on disk by grep (2 type=date, 0 DateFilterWidget). The flipped suite then went red: 2 failed | 1 passed (3), both date pins. The file was restored with git checkout HEAD under a trap. Proof: blob hash equals HEAD (38133454…), git diff HEAD has 0 lines, and grep finds 3 DateFilterWidget. The run was relative-import src under vitest aliases, so no dist was involved.",
      "gates": "Local, at the final head 63114661: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 34 commands. Each ran with its exit captured before any pipe, and all 34 exited 0. They include check-sdui-manifest, which is green, so the manifest record is untouched. Others: check:nul-bytes, check:cross-package-test-inputs, check:test-source-alias, check:type-check-coverage, check:type-check-debt, check-changeset-no-major, check-empty-changeset, check-adr-0087-registration, check-closing-keyword-parity and check:published-files. Reconciled with --ran, recording 'cmd :: exit N': 'Run reconciliation — 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN' (a DERIVED zero). Also run: node scripts/check-changeset-fixed.mjs, the roster gate under .changeset, exit 0. CI on PR #26061 at 63114661 when this report was written: 23 check-runs, 20 in_progress, 2 skipped, 1 success. Lint UI, Type Check UI, Test UI and Build & E2E UI are still in_progress; not waited on, per contract.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "2 — (1) fleet-write relay pr_create: POST /repos/objectstack-ai/objectstack/dispatches, run 40309031860 success; PR #26061 opened as a draft, body read back identical (3302/3302 bytes), assignee os-steve. (2) this os-dev-report comment via scripts/pm/post-stamped.mjs. git push is not counted (no REST).",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    ACCEPT → PR #26061 comment 6414047768 · seat 2 · 2026-10-26T10:51Z

  7. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
      "issue": 25875,
      "status": "done",
      "branch": "claude/issue-25875-audit-log-date-picker",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26061",
      "session": "session_01SMps7wq7rBTk53e8KTSEup",
      "premise_still_valid": true,
      "summary": "Patch round 1. New head 9c96dae0, one commit on top of 63114661, test-only. CI Test UI (13/16) was red because the From / To labels named no control: the lazy getLazyFieldWidget('date') chunk had not resolved within settle(), so the Suspense skeleton was still showing. AuditLogPage.filterLabels-13224.test.tsx gains a datePickersMounted() helper. It is a waitFor on queryAllByLabelText('From' / 'To', exact) having length 1, with a 5 s timeout. Both tests that query the pickers call it after settle(). No sleeps, no retries, and AuditLogPage.tsx is unchanged. No other AuditLogPage.*.test.tsx touches the pickers. consolePagesLocale-secondPass-13460 only reads the label elements, which render outside Suspense. PR mergeable=true against current main, so no merge was made; pushed without force. Worktree recreated from origin/BRANCH for the round and removed again after.",
      "tests": "Head 9c96dae0, under os-verify-lock (VERDICT command-exit 0). First the UI-deps build, BUILD_OK. Then vitest --project @object-ui/console over the six AuditLogPage.*.test.tsx plus consolePagesLocale-secondPass-13460, 3 consecutive runs at --maxWorkers=2: RUN1/RUN2/RUN3 each exit 0, 'Test Files 7 passed (7) · Tests 43 passed (43)'. Then one run at --maxWorkers=1: exit 0, 'Tests 43 passed (43)'.",
      "gates": "At 9c96dae0 the ratchet families were re-run, lock-free: check:type-check-coverage, check:type-check-debt, check:test-source-alias, check:cross-package-test-inputs and check:nul-bytes, each exit 0. The full 34-command derived union was green at 63114661 (34 run, 0 NOT-MEASURED) and was not re-run for this test-only commit. CI on 9c96dae0 was not waited on.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "1 this round — this os-dev-report comment via scripts/pm/post-stamped.mjs. git push is not counted.",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code

  8. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Landed · seat 2 · 2026-10-26T12:34Z

    probe reading
    PR #26061 MERGED 2026-10-26T12:18Z, merge commit 9753d163, head 9c96dae0 (ACCEPT 6414047768 + test-only patch round)
    origin/main at f6c61932, contains 9753d163 (git merge-base --is-ancestor exit 0)
    queue branch gh-readonly-queue/main/pr-26061-*: none left (consumed)
    card closed by Fixes #25875 on #26061

    Status: pm:dispatched removed; the card is done. Nothing remains.

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

Metadata

Metadata

Assignees

Labels

area:i18nThe customer's own language, across UI, metadata and notificationsbugSomething isn't workingdomain:uipriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions