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
Screen flow fields: a date field is the browser's native input (mm/dd/yyyy under zh-CN), and a boolean is a bare checkbox under its label #26579
Filing class: ① user-visible defect — reach: public door, measured in a browser on the 18.1.0 Console with objectstack-ai/hotclm main, code read on objectstack main1c632311. Reader: the UI lane, ui/packages/app-shell/src/views/ScreenView.tsx (ScreenFieldInput).
Business reason
Record forms moved to the platform date picker (objectui#12622) and action dialogs, list filters and inline editors followed (objectui#12642, #12664, #12743, objectstack#25875). Flow screens did not. So the first form a new user meets in hotclm — the 发起合同 wizard — is the one that still looks unfinished.
Measured (hotclm wizard step 「合同信息」, zh-CN)
生效日期 / 到期日期 show mm/dd/yyyy with the browser's calendar icon. ScreenView.tsx:546 maps kind === 'date' to <Input type="date">.
金额为估算值 (and 立即提交 on the last step) render as the label on one line and a lone round checkbox on the next, with nothing beside it. It reads like an empty radio button. ScreenView.tsx:540 draws a bare <Checkbox> under the generic <Label>. ActionParamDialog draws the same field type as an inline checkbox row with the label beside the control.
Expected
A date / datetime screen field uses the same platform picker as the record form, in the app locale's format.
A boolean screen field uses the same inline row as ActionParamDialog (or the record form's switch), with the label beside the control.
Dedupe: objectstack issues (2,000 most recent, all states) and archived objectui issues grepped for native, mm/dd, date picker, ScreenView, boolean + screen — the date-picker series above lists record forms, action-param and bulk dialogs, inline editors and filters; none lists flow screens.
Filed from the hotclm UI/UX review (2026-10-27); maintainer: 「平台的问题应该提交issue到平台」.
p2: flow screens are the last form surface still on the browser's native date input and on a bare checkbox. ScreenFieldInput (ScreenView.tsx:546) should use the platform date picker and boolean control that record forms use (objectui#12622 and its followers). Reuse them, ⛔ no third widget.
Claim: PM loop round 1
Session: session_01QsR2jTfvjNTaR29ehLk26T
Account: zhuangjianguo
Branch: claude/project-thread-qglqcq (platform-assigned card-thread branch; a card thread can push only its assigned branch, and the name carries no issue number, so this claim is the identity record)
Worktree: objectstack-issue-26579
Domain: domain:ui
Seat: domain:ui#4
File surface: ui/packages/app-shell/src/views/ScreenView.tsx (the ScreenFieldInput date/datetime and boolean arms), its tests, one root changeset; ⛔ FlowRunner.tsx (#26578 in flight) (stop on breach; explain in the report)
Container & model: M, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate; reason: the maintainer's standing rule 「只认领不需要 fable 的卡」, 2026-10-27T10:39Z), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: ScreenFieldInput (app-shell, this lane) draws a native date input and a bare checkbox · the platform path that covers it: the record form's date picker and the ActionParamDialog boolean row, not reused here · reached by every user of a screen flow with a date or boolean field (hotclm 发起合同 wizard)
Thread-read: 6437765150
Premise: holds (action, card-reference and work-item surfaces re-read on origin/main c739de75 at 2026-10-27T10:58Z)
Serial constraints cleared: #26578 (this seat, in flight) edits FlowRunner.tsx in the same folder, disjoint; no open PR touches ScreenView.tsx (scan 2026-10-27T10:59Z)
Dispatched at 2026-10-27T11:00Z to the card thread on that branch; the order lives in the thread's opening message.
{
"issue": 26579,
"status": "done",
"branch": "claude/project-thread-qglqcq",
"pr": "https://github.com/objectstack-ai/objectstack/pull/26685",
"session": "session_01QsR2jTWL2QojsqgqvgPRkw",
"claim": "6440244472",
"head_sha": "ac55d85e562f7ddb2f8be39f55cc26f7dec61917",
"premise_still_valid": true,
"summary": "ScreenFieldInput (ui/packages/app-shell/src/views/ScreenView.tsx) now draws a date / datetime screen field with the record form's DatePickerField / DateTimePickerField and a boolean / checkbox field with ActionParamDialog's inline row (BooleanField, checkbox face, label beside the control, help under the row), all through getLazyFieldWidget as ActionParamDialog reaches them; no third widget. Values handed to the runner keep the stored shape (YYYY-MM-DD, ISO instant, '' on clear). Premise measured on origin/main c739de75: kind date mapped to a native type=date Input, boolean/checkbox to a bare Checkbox under the generic Label, and datetime (unmeasured by the PM) fell through to a plain text Input.",
"files_changed": [
".changeset/26579-flow-screen-platform-controls.md",
"ui/packages/app-shell/src/views/ScreenView.tsx",
"ui/packages/app-shell/src/views/ScreenView.platformControls-26579.test.tsx",
"ui/packages/app-shell/src/views/ScreenView.boundHelpReference-9248.test.tsx",
"ui/packages/app-shell/src/views/ScreenView.requiredMarker-10367.test.tsx",
"ui/packages/app-shell/src/views/metadata-admin/previews/ScreenPreview.test.tsx",
"ui/packages/app-shell/src/views/metadata-admin/previews/ScreenPreview.debugRunScope-10743.test.tsx",
"ui/packages/app-shell/src/views/__tests__/FlowRunner.recordLink-25872.test.tsx"
],
"line_budget": "8 files, +326 / -40 (366 changed lines, dispatch-gates reading vs the 3000 human-merge threshold: under); source: ScreenView.tsx only",
"tests": "at ac55d85e, ui vitest under os-verify-lock: 3 ScreenView files Test Files 3 passed (3), Tests 30 passed (30); every ui test file naming FlowRunner/ScreenView/ScreenPreview/ScreenFieldInput (114 files) Test Files 114 passed (114), Tests 1054 passed (1054), VERDICT command-exit 0. Ablation (scripts/ablation-replace.mjs, src via the ui alias map, no dist leg): boolean-row anchor 1->0 blob 6e3f3192eb18->554245174c0a, Tests 2 failed | 11 passed (13); date/datetime anchor 1->0 blob 6e3f3192eb18->1b5142458047, Tests 5 failed | 8 passed (13); both restored, blob == HEAD and git diff HEAD empty. Type check: turbo type-check --filter=@object-ui/app-shell (tsc --noEmit + tsc -p tsconfig.test.json) Tasks 64 successful, 64 total. eslint on touched ui files: 0 errors, ScreenView.tsx warning count 15 = main's 15.",
"gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at ac55d85e: 34 commands, each run once, exit captured before any pipe (vitest scripts/ and check:type-check-debt under os-verify-lock), all 34 exit 0; --ran: 34 derived famil(ies) accounted for, 34 run, 0 NOT-MEASURED. PR-body gates (closing-keyword-parity, changeset-no-major, adr-0087-registration) re-run against the final body via GITHUB_EVENT_PATH: exit 0; check-partof-closing-keyword with PR_BODY: exit 0. check-single-claim-paths needs a PR number: CI. CI check-runs on #26685: in_progress at report time (type-check lanes, Test UI, Lint UI, Build & E2E UI are CI's).",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"deviations": [
"File surface: three test files outside ScreenView's own tests changed, test-only: ScreenPreview.test.tsx, ScreenPreview.debugRunScope-10743.test.tsx and __tests__/FlowRunner.recordLink-25872.test.tsx clicked the boolean control in the render tick and now await it with findByRole (the control is lazy, like the lookup and file arms). FlowRunner.tsx untouched.",
"Declared narrowing: the whole packages/app-shell/ vitest run (1757 files) was stopped after ~60 min with 3 failures reported, all the synchronous clicks fixed above; the narrowed 114-file flow-screen set is the local reading, the full package is CI's Test UI.",
"Behaviour beyond the PM's measured assumption: a datetime screen field was a free text box (not measured by the PM) and now writes an ISO instant, as the card's Expected asks.",
"Boolean control is the ActionParamDialog checkbox face, not the record form's switch (the card allows either; keeps role=checkbox).",
"Shared checkout detached (git checkout --detach) so the worktree ../objectstack-issue-26579 could hold the platform branch.",
"Commit trailers are the repo's model-free pair, not the harness's model-named Co-Authored-By."
],
"mcp_calls": "0 — no MCP GitHub calls",
"api_writes": "2 — fleet-write relay pr_create (POST /repos/objectstack-ai/objectstack/pulls draft + POST /issues/26685/assignees, read back byte-identical, assignee zhuangjianguo); post-stamped os-dev-report comment (POST /issues/26579/comments). git push is not counted.",
"open_questions": [],
"out_of_scope_findings": []
}
Activity
objectstack-fleet commentedon Oct 27, 2026
Triage: first grade —
bug·priority:p2·domain:ui·area:workflow·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-27T09:00Z⛔ Not a claim, ⛔ not a dispatch.
ScreenFieldInput(ScreenView.tsx:546) should use the platform date picker and boolean control that record forms use (objectui#12622 and its followers). Reuse them, ⛔ no third widget.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Claim: PM loop round 1
Session:
session_01QsR2jTfvjNTaR29ehLk26TAccount:
zhuangjianguoBranch:
claude/project-thread-qglqcq(platform-assigned card-thread branch; a card thread can push only its assigned branch, and the name carries no issue number, so this claim is the identity record)Worktree:
objectstack-issue-26579Domain:
domain:uiSeat:
domain:ui#4File surface:
ui/packages/app-shell/src/views/ScreenView.tsx(theScreenFieldInputdate/datetime and boolean arms), its tests, one root changeset; ⛔FlowRunner.tsx(#26578 in flight) (stop on breach; explain in the report)Container & model:
M,mode:thread,model: TIER_DEFAULT(dispatch-gates --tier: no path-derived mandate; reason: the maintainer's standing rule 「只认领不需要 fable 的卡」, 2026-10-27T10:39Z),effort: highClause-②: no
Metadata-protocol: none
Responsibility:
ScreenFieldInput(app-shell, this lane) draws a native date input and a bare checkbox · the platform path that covers it: the record form's date picker and theActionParamDialogboolean row, not reused here · reached by every user of a screen flow with a date or boolean field (hotclm 发起合同 wizard)Thread-read: 6437765150
Premise: holds (action, card-reference and work-item surfaces re-read on origin/main
c739de75at 2026-10-27T10:58Z)Serial constraints cleared: #26578 (this seat, in flight) edits
FlowRunner.tsxin the same folder, disjoint; no open PR touchesScreenView.tsx(scan 2026-10-27T10:59Z)Dispatched at 2026-10-27T11:00Z to the card thread on that branch; the order lives in the thread's opening message.
Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
os-dev-report
Posted: 2026-10-27T12:46Z
{ "issue": 26579, "status": "done", "branch": "claude/project-thread-qglqcq", "pr": "https://github.com/objectstack-ai/objectstack/pull/26685", "session": "session_01QsR2jTWL2QojsqgqvgPRkw", "claim": "6440244472", "head_sha": "ac55d85e562f7ddb2f8be39f55cc26f7dec61917", "premise_still_valid": true, "summary": "ScreenFieldInput (ui/packages/app-shell/src/views/ScreenView.tsx) now draws a date / datetime screen field with the record form's DatePickerField / DateTimePickerField and a boolean / checkbox field with ActionParamDialog's inline row (BooleanField, checkbox face, label beside the control, help under the row), all through getLazyFieldWidget as ActionParamDialog reaches them; no third widget. Values handed to the runner keep the stored shape (YYYY-MM-DD, ISO instant, '' on clear). Premise measured on origin/main c739de75: kind date mapped to a native type=date Input, boolean/checkbox to a bare Checkbox under the generic Label, and datetime (unmeasured by the PM) fell through to a plain text Input.", "files_changed": [ ".changeset/26579-flow-screen-platform-controls.md", "ui/packages/app-shell/src/views/ScreenView.tsx", "ui/packages/app-shell/src/views/ScreenView.platformControls-26579.test.tsx", "ui/packages/app-shell/src/views/ScreenView.boundHelpReference-9248.test.tsx", "ui/packages/app-shell/src/views/ScreenView.requiredMarker-10367.test.tsx", "ui/packages/app-shell/src/views/metadata-admin/previews/ScreenPreview.test.tsx", "ui/packages/app-shell/src/views/metadata-admin/previews/ScreenPreview.debugRunScope-10743.test.tsx", "ui/packages/app-shell/src/views/__tests__/FlowRunner.recordLink-25872.test.tsx" ], "line_budget": "8 files, +326 / -40 (366 changed lines, dispatch-gates reading vs the 3000 human-merge threshold: under); source: ScreenView.tsx only", "tests": "at ac55d85e, ui vitest under os-verify-lock: 3 ScreenView files Test Files 3 passed (3), Tests 30 passed (30); every ui test file naming FlowRunner/ScreenView/ScreenPreview/ScreenFieldInput (114 files) Test Files 114 passed (114), Tests 1054 passed (1054), VERDICT command-exit 0. Ablation (scripts/ablation-replace.mjs, src via the ui alias map, no dist leg): boolean-row anchor 1->0 blob 6e3f3192eb18->554245174c0a, Tests 2 failed | 11 passed (13); date/datetime anchor 1->0 blob 6e3f3192eb18->1b5142458047, Tests 5 failed | 8 passed (13); both restored, blob == HEAD and git diff HEAD empty. Type check: turbo type-check --filter=@object-ui/app-shell (tsc --noEmit + tsc -p tsconfig.test.json) Tasks 64 successful, 64 total. eslint on touched ui files: 0 errors, ScreenView.tsx warning count 15 = main's 15.", "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at ac55d85e: 34 commands, each run once, exit captured before any pipe (vitest scripts/ and check:type-check-debt under os-verify-lock), all 34 exit 0; --ran: 34 derived famil(ies) accounted for, 34 run, 0 NOT-MEASURED. PR-body gates (closing-keyword-parity, changeset-no-major, adr-0087-registration) re-run against the final body via GITHUB_EVENT_PATH: exit 0; check-partof-closing-keyword with PR_BODY: exit 0. check-single-claim-paths needs a PR number: CI. CI check-runs on #26685: in_progress at report time (type-check lanes, Test UI, Lint UI, Build & E2E UI are CI's).", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "deviations": [ "File surface: three test files outside ScreenView's own tests changed, test-only: ScreenPreview.test.tsx, ScreenPreview.debugRunScope-10743.test.tsx and __tests__/FlowRunner.recordLink-25872.test.tsx clicked the boolean control in the render tick and now await it with findByRole (the control is lazy, like the lookup and file arms). FlowRunner.tsx untouched.", "Declared narrowing: the whole packages/app-shell/ vitest run (1757 files) was stopped after ~60 min with 3 failures reported, all the synchronous clicks fixed above; the narrowed 114-file flow-screen set is the local reading, the full package is CI's Test UI.", "Behaviour beyond the PM's measured assumption: a datetime screen field was a free text box (not measured by the PM) and now writes an ISO instant, as the card's Expected asks.", "Boolean control is the ActionParamDialog checkbox face, not the record form's switch (the card allows either; keeps role=checkbox).", "Shared checkout detached (git checkout --detach) so the worktree ../objectstack-issue-26579 could hold the platform branch.", "Commit trailers are the repo's model-free pair, not the harness's model-named Co-Authored-By." ], "mcp_calls": "0 — no MCP GitHub calls", "api_writes": "2 — fleet-write relay pr_create (POST /repos/objectstack-ai/objectstack/pulls draft + POST /issues/26685/assignees, read back byte-identical, assignee zhuangjianguo); post-stamped os-dev-report comment (POST /issues/26579/comments). git push is not counted.", "open_questions": [], "out_of_scope_findings": [] }Generated by Claude Code