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
Studio list-view inspector: edit a non-grid view's own settings (calendar start date and title, gallery, timeline, gantt, map, chart, tree) #27895
Filing gate: ③ triage-directed. #27836's order said: "if the inspector cannot edit a non-grid view once it exists, editing other types is a separate card". PR #27870's report (6513772908, out_of_scope_findings) measured that it cannot.
Reach: Studio › Interfaces › list-view inspector, after "Add view" (PR #27870) creates a calendar, gallery, timeline, gantt, map, chart or tree view; also any such view seeded by a package.
Reader who acts: domain:ui (Studio).
Duplicate search: search_issues "studio list view inspector calendar settings view type section non-grid" → no open card covering it (#27386 is the console runtime's fixed calendar start date, not the Studio editor).
Observed
The list-view inspector has a section for the kanban card only. A calendar's startDateField / titleField, and the gallery, timeline, gantt, map, chart and tree blocks of the view body, cannot be edited in Studio once the view exists. "Add view" asks for the type's required fields at creation, but nothing afterwards.
Wanted
A section per view type in the inspector, built from the spec list-view schema for that type (fields picked by label), as the kanban section is. ⛔ No hand-kept per-type field list. Landing: ui/packages/app-shell/src/views/studio-design/ObjectListViewInspector.tsx.
Claim: PM loop round 1
Session: session_01Utp6CaJoinvGQSbHeDaWBe
Account: os-bill
Branch: claude/project-thread-g8zljv (the card thread's designated push branch, the recorded platform exception to claude/issue-<n>-<slug>)
Worktree: objectstack-issue-27895
Domain: domain:ui
Seat: domain:ui#3
File surface: Studio list-view inspector and its sections (ui/packages/app-shell/src/views/studio-design/**), studio i18n (add keys), tests beside, root changeset (stop on breach; explain in the report)
Container & model: M/L, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier on 178b5238: no path-derived mandate), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: ui code produces the defect | no platform path covers it | every Studio / console author reaches it today
Thread-read: none
Premise: holds
Serial constraints cleared: none (#27896 touches the same panel and is held until this card lands)
Dispatched 2026-10-30T03:29Z to a card thread of the seat's project; the order lives in the project. ⛔ The thread posts no claim and writes no assignee.
{
"issue": 27895,
"status": "done",
"branch": "claude/project-thread-g8zljv",
"pr": "https://github.com/objectstack-ai/objectstack/pull/27931",
"session": "session_01Utp6CYotPfA6zhPC8hhqkF",
"premise_still_valid": true,
"summary": "The Studio list-view panel gains a section for a non-grid view's own block (calendar, gallery, timeline, gantt, map, tree): the block's JSONSchema from the spec (getListVariantSchema().properties[type]) rendered by the generic SchemaForm with the panel's field catalog, so every *Field / *Fields setting is picked by label and no per-type field list exists. Grid and kanban are unchanged; chart is left out by name (its block binds an ADR-0021 dataset, not object fields) and reported below. Head e8ddf333.",
"tests": "head e8ddf333. New file ObjectListViewInspector.typeSettings-27895.test.tsx: Tests 9 passed (9), VERDICT command-exit 0. Neighbours: every ObjectListViewInspector.*, InterfacesPillar.*, StudioDesignSurface.listViewInspector-11823 / kanbanCardSelection-12725 / leafColumnSelection-12725 test plus packages/i18n/: Test Files 116 passed (116), Tests 1537 passed, 13 skipped, VERDICT command-exit 0. type-check @object-ui/app-shell + @object-ui/i18n: VERDICT command-exit 0. Ablation (scripts/ablation-replace.mjs, src-resolved suite, no dist): ObjectListViewInspector.tsx anchor 'const typeBlockSchema = listViewTypeBlockSchema(body.type);' 1 to 0, blob dbd6ee1d to b3327689, Tests 6 failed, 3 passed (the 3 controls); restored blob == HEAD dbd6ee1d, git diff HEAD empty.",
"gates": {
"head": "e8ddf333",
"derived_local": [
"node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0",
"node scripts/check-adr-0087-registration.mjs --self-test :: exit 0",
"node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0",
"node scripts/check-closing-keyword-parity.mjs :: exit 0",
"node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0",
"node scripts/check-comment-mask-corpus.mjs :: exit 0",
"node scripts/check-empty-changeset.mjs --base origin/main :: exit 0",
"node scripts/check-empty-changeset.mjs --self-test :: exit 0",
"node scripts/check-sdui-manifest.mjs :: exit 0",
"node scripts/check-sdui-manifest.mjs --self-test :: exit 0",
"node scripts/pm/release-rehearsal-clone.mjs --self-test :: exit 0",
"node scripts/release-pending-publish.mjs --self-test :: exit 0",
"pnpm --dir ui exec vitest run scripts/ :: exit 0",
"pnpm --filter @objectstack/spec run check:duration-unit-keys :: exit 0",
"pnpm check:changeset-gate-self-tests :: exit 0",
"pnpm check:closed-ceremony-text :: exit 0",
"pnpm check:cross-package-test-inputs :: exit 0",
"pnpm check:dispatcher-error-vocabulary :: exit 0",
"pnpm check:driver-memory-census :: exit 0",
"pnpm check:engine-double-contract :: exit 0",
"pnpm check:gitlink-declared :: exit 0",
"pnpm check:nul-bytes :: exit 0",
"pnpm check:pm-changeset-deadline-census :: exit 0",
"pnpm check:published-files :: exit 0",
"pnpm check:query-options-erasure :: exit 0",
"pnpm check:refd-timer-probe :: exit 0",
"pnpm check:skill-identifier-liveness :: exit 0",
"pnpm check:test-source-alias :: exit 0",
"pnpm check:tier-file-adoption :: exit 0",
"pnpm check:type-check-coverage :: exit 0",
"pnpm check:type-check-debt :: exit 0",
"pnpm check:undeclared-dep-imports :: exit 0",
"pnpm check:watch-hint-literal :: exit 0",
"pnpm check:where-matcher :: exit 0"
],
"reconcile": "dispatch-gates --ran: 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN, exit 0",
"extra_local": [
"node ui/scripts/check-i18n-call-site-keys.mjs :: exit 0",
"node ui/scripts/check-i18n-dead-keys.mjs :: exit 0",
"node ui/scripts/check-i18n-en-drift.mjs :: exit 0",
"pnpm --dir ui check:new-line-citations :: exit 0",
"pnpm --filter @object-ui/app-shell --filter @object-ui/i18n run type-check :: exit 0"
],
"ci": "in_progress — PR check-runs not read at report time"
},
"line_budget": {
"files": 6,
"insertions": 478,
"deletions": 4,
"src": "ListViewTypeSection.tsx +143, ObjectListViewInspector.tsx +25/-4",
"tests": "+289",
"i18n": "+8",
"changeset": "+13"
},
"files_changed": [
".changeset/27895-studio-list-view-type-settings.md",
"ui/packages/app-shell/src/views/studio-design/ListViewTypeSection.tsx",
"ui/packages/app-shell/src/views/studio-design/ObjectListViewInspector.tsx",
"ui/packages/app-shell/src/views/studio-design/ObjectListViewInspector.typeSettings-27895.test.tsx",
"ui/packages/i18n/src/namespaces/studio/en.ts",
"ui/packages/i18n/src/namespaces/studio/zh.ts"
],
"deviations": [
"Order-vs-os-dev conflict named: the order puts the signature on line 1, os-dev puts the plain os-dev-report marker on line 1; this comment carries the signature on line 1 and the marker on line 2.",
"Skipped the harness's after-PR assign/review step and PR activity subscription, per the order (no assignees, no review request).",
"Studio i18n keys landed in ui/packages/i18n/src/namespaces/studio/{en,zh}.ts (the 'studio i18n en/zh' the order names); one of the three is the missing view-type name engine.inspector.view.type.tree."
],
"dogfood_battery": "n/a — no ! in the PR title and Clause-②: no without a (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2 — POST /repos/objectstack-ai/objectstack/dispatches (relay pr_create, created #27931); POST /repos/objectstack-ai/objectstack/issues/27895/comments (this report, via post-stamped). git push is not a REST write.",
"open_questions": [],
"out_of_scope_findings": [
"class: none (scope cut the order anticipated) · reach: Studio › Interfaces › list-view panel of a chart view, after Add view makes one · evidence: ListChartConfigSchema is { chartType, dataset, values, dimensions } (ADR-0021 dataset + measure/dimension names); the generic form would draw dataset/values as free text, so ListViewTypeSection leaves chart out by name · ready-to-file title: 'Studio list-view panel: edit a chart view's dataset binding (dataset, measures, dimensions)' · body: the list-view panel edits every non-grid type's block since #27895 except chart; give chart a section that reuses the Create View dialog's useDatasetCatalog (datasets whose base object is this object) and useDatasetSemantics (that dataset's measures and dimensions), writing config.chart; landing ui/packages/app-shell/src/views/studio-design/ · dedupe words: studio list view chart dataset measure binding inspector",
"carrier: none · noted, not filed — setting labels in the type section are the form's rendering of the spec key ('Start Date Field') and its English .describe() help in every locale, as in the Console view inspector (ViewVariantInspector) which renders the same blocks",
"carrier: none · noted, not filed — the field picker offers None on a required setting (calendar.startDateField); clearing it makes the next save a loud 422 refusal shown in the panel, not a held edit"
]
}
Activity
objectstack-fleet commentedon Oct 30, 2026
domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe
Claim: PM loop round 1
Session:
session_01Utp6CaJoinvGQSbHeDaWBeAccount:
os-billBranch:
claude/project-thread-g8zljv(the card thread's designated push branch, the recorded platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-27895Domain:
domain:uiSeat:
domain:ui#3File surface: Studio list-view inspector and its sections (ui/packages/app-shell/src/views/studio-design/**), studio i18n (add keys), tests beside, root changeset (stop on breach; explain in the report)
Container & model:
M/L,mode:thread,model: TIER_DEFAULT(dispatch-gates --tieron178b5238: no path-derived mandate),effort: highClause-②: no
Metadata-protocol: none
Responsibility: ui code produces the defect | no platform path covers it | every Studio / console author reaches it today
Thread-read: none
Premise: holds
Serial constraints cleared: none (#27896 touches the same panel and is held until this card lands)
Dispatched 2026-10-30T03:29Z to a card thread of the seat's project; the order lives in the project. ⛔ The thread posts no claim and writes no assignee.
Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:ui#3 · os-bill · session_01Utp6CYotPfA6zhPC8hhqkF
os-dev-report
{ "issue": 27895, "status": "done", "branch": "claude/project-thread-g8zljv", "pr": "https://github.com/objectstack-ai/objectstack/pull/27931", "session": "session_01Utp6CYotPfA6zhPC8hhqkF", "premise_still_valid": true, "summary": "The Studio list-view panel gains a section for a non-grid view's own block (calendar, gallery, timeline, gantt, map, tree): the block's JSONSchema from the spec (getListVariantSchema().properties[type]) rendered by the generic SchemaForm with the panel's field catalog, so every *Field / *Fields setting is picked by label and no per-type field list exists. Grid and kanban are unchanged; chart is left out by name (its block binds an ADR-0021 dataset, not object fields) and reported below. Head e8ddf333.", "tests": "head e8ddf333. New file ObjectListViewInspector.typeSettings-27895.test.tsx: Tests 9 passed (9), VERDICT command-exit 0. Neighbours: every ObjectListViewInspector.*, InterfacesPillar.*, StudioDesignSurface.listViewInspector-11823 / kanbanCardSelection-12725 / leafColumnSelection-12725 test plus packages/i18n/: Test Files 116 passed (116), Tests 1537 passed, 13 skipped, VERDICT command-exit 0. type-check @object-ui/app-shell + @object-ui/i18n: VERDICT command-exit 0. Ablation (scripts/ablation-replace.mjs, src-resolved suite, no dist): ObjectListViewInspector.tsx anchor 'const typeBlockSchema = listViewTypeBlockSchema(body.type);' 1 to 0, blob dbd6ee1d to b3327689, Tests 6 failed, 3 passed (the 3 controls); restored blob == HEAD dbd6ee1d, git diff HEAD empty.", "gates": { "head": "e8ddf333", "derived_local": [ "node scripts/check-adr-0087-registration.mjs --base origin/main :: exit 0", "node scripts/check-adr-0087-registration.mjs --self-test :: exit 0", "node scripts/check-changeset-no-major.mjs --base origin/main :: exit 0", "node scripts/check-closing-keyword-parity.mjs :: exit 0", "node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0", "node scripts/check-comment-mask-corpus.mjs :: exit 0", "node scripts/check-empty-changeset.mjs --base origin/main :: exit 0", "node scripts/check-empty-changeset.mjs --self-test :: exit 0", "node scripts/check-sdui-manifest.mjs :: exit 0", "node scripts/check-sdui-manifest.mjs --self-test :: exit 0", "node scripts/pm/release-rehearsal-clone.mjs --self-test :: exit 0", "node scripts/release-pending-publish.mjs --self-test :: exit 0", "pnpm --dir ui exec vitest run scripts/ :: exit 0", "pnpm --filter @objectstack/spec run check:duration-unit-keys :: exit 0", "pnpm check:changeset-gate-self-tests :: exit 0", "pnpm check:closed-ceremony-text :: exit 0", "pnpm check:cross-package-test-inputs :: exit 0", "pnpm check:dispatcher-error-vocabulary :: exit 0", "pnpm check:driver-memory-census :: exit 0", "pnpm check:engine-double-contract :: exit 0", "pnpm check:gitlink-declared :: exit 0", "pnpm check:nul-bytes :: exit 0", "pnpm check:pm-changeset-deadline-census :: exit 0", "pnpm check:published-files :: exit 0", "pnpm check:query-options-erasure :: exit 0", "pnpm check:refd-timer-probe :: exit 0", "pnpm check:skill-identifier-liveness :: exit 0", "pnpm check:test-source-alias :: exit 0", "pnpm check:tier-file-adoption :: exit 0", "pnpm check:type-check-coverage :: exit 0", "pnpm check:type-check-debt :: exit 0", "pnpm check:undeclared-dep-imports :: exit 0", "pnpm check:watch-hint-literal :: exit 0", "pnpm check:where-matcher :: exit 0" ], "reconcile": "dispatch-gates --ran: 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN, exit 0", "extra_local": [ "node ui/scripts/check-i18n-call-site-keys.mjs :: exit 0", "node ui/scripts/check-i18n-dead-keys.mjs :: exit 0", "node ui/scripts/check-i18n-en-drift.mjs :: exit 0", "pnpm --dir ui check:new-line-citations :: exit 0", "pnpm --filter @object-ui/app-shell --filter @object-ui/i18n run type-check :: exit 0" ], "ci": "in_progress — PR check-runs not read at report time" }, "line_budget": { "files": 6, "insertions": 478, "deletions": 4, "src": "ListViewTypeSection.tsx +143, ObjectListViewInspector.tsx +25/-4", "tests": "+289", "i18n": "+8", "changeset": "+13" }, "files_changed": [ ".changeset/27895-studio-list-view-type-settings.md", "ui/packages/app-shell/src/views/studio-design/ListViewTypeSection.tsx", "ui/packages/app-shell/src/views/studio-design/ObjectListViewInspector.tsx", "ui/packages/app-shell/src/views/studio-design/ObjectListViewInspector.typeSettings-27895.test.tsx", "ui/packages/i18n/src/namespaces/studio/en.ts", "ui/packages/i18n/src/namespaces/studio/zh.ts" ], "deviations": [ "Order-vs-os-dev conflict named: the order puts the signature on line 1, os-dev puts the plain os-dev-report marker on line 1; this comment carries the signature on line 1 and the marker on line 2.", "Skipped the harness's after-PR assign/review step and PR activity subscription, per the order (no assignees, no review request).", "Studio i18n keys landed in ui/packages/i18n/src/namespaces/studio/{en,zh}.ts (the 'studio i18n en/zh' the order names); one of the three is the missing view-type name engine.inspector.view.type.tree." ], "dogfood_battery": "n/a — no ! in the PR title and Clause-②: no without a (narrowing) arm", "mcp_calls": "0", "api_writes": "2 — POST /repos/objectstack-ai/objectstack/dispatches (relay pr_create, created #27931); POST /repos/objectstack-ai/objectstack/issues/27895/comments (this report, via post-stamped). git push is not a REST write.", "open_questions": [], "out_of_scope_findings": [ "class: none (scope cut the order anticipated) · reach: Studio › Interfaces › list-view panel of a chart view, after Add view makes one · evidence: ListChartConfigSchema is { chartType, dataset, values, dimensions } (ADR-0021 dataset + measure/dimension names); the generic form would draw dataset/values as free text, so ListViewTypeSection leaves chart out by name · ready-to-file title: 'Studio list-view panel: edit a chart view's dataset binding (dataset, measures, dimensions)' · body: the list-view panel edits every non-grid type's block since #27895 except chart; give chart a section that reuses the Create View dialog's useDatasetCatalog (datasets whose base object is this object) and useDatasetSemantics (that dataset's measures and dimensions), writing config.chart; landing ui/packages/app-shell/src/views/studio-design/ · dedupe words: studio list view chart dataset measure binding inspector", "carrier: none · noted, not filed — setting labels in the type section are the form's rendering of the spec key ('Start Date Field') and its English .describe() help in every locale, as in the Console view inspector (ViewVariantInspector) which renders the same blocks", "carrier: none · noted, not filed — the field picker offers None on a required setting (calendar.startDateField); clearing it makes the next save a loud 422 refusal shown in the panel, not a held edit" ] }objectstack-fleet commentedon Oct 30, 2026
domain:ui#3 · os-bill · session_01Utp6CaJoinvGQSbHeDaWBe
ACCEPT → PR #27931 comment 6515347536 · 2026-10-30T04:58Z
Generated by Claude Code