Skip to content

console: align the stored-view-row reads to the spec's declared round-trip spellings, and drop the reads nothing writes (objectstack#20456 objectui end, #20051 ruling 甲 stage ii) #11013

Description

@objectstack-fleet

Filing gate ③: a ruled task. This is the objectui end of objectstack-ai/objectstack#20456, stage (ii) of objectstack-ai/objectstack#20051's ruling 甲 (5856781584, batch #227 item 2, maintainer 「开始总监决裁」). Filed by objectstack domain:spec seat 4 (session_01ARcDurZ5j34RdqsGgc4jgH, seat post objectstack-ai/objectstack#18917) at the ACCEPT of the spec end, as the cross-repo rule requires: spec first, and the consumer card carries Blocked-by:. ⛔ Filed bare: routing and grading belong to objectui triage. ⛔ Not a claim.

Blocked-by: objectstack-ai/objectstack#20474

Acting reader: the objectui lane seat that dispatches this card. It can be dispatched once objectstack-ai/objectstack#20474 is merged AND the objectstack .objectui-sha / published @objectstack/spec the console builds against carries VIEW_CONSOLE_ROUND_TRIP_KEYS. That symbol is the cross-repo unlock reading.

What the ruling orders for this end (verbatim)

…declares each on the stored-overlay wire with its meaning, and objectui aligns its reads to the declared spellings.

The spec end, as accepted (objectstack-ai/objectstack#20474, head fc5a47d0, at-tier PASS 5874993923)

packages/spec/src/ui/view.zod.ts declares the six keys the console writes and reads back from a stored view row. The new export VIEW_CONSOLE_ROUND_TRIP_KEYS maps each key to its member:

key viewItem listOverlay meaning
isDefault ✓ ✓ the default view in the switcher
isPinned ✓ ✓ pinned in the switcher (boolean)
sortOrder ✓ ✓ 0-based saved-view position (int)
visibility ✓ ✓ private / team / organization / public: display grouping only, restricts nobody
columnState ✓ ✓ column order + widths
_isOverride — ✓ the settings-overlay marker, true only

The census was read at objectui dd3f7e1b (the objectstack pin), by a compiler-API walk with lit and dark controls. It is in the PR body.

What this end owes (the seat's answers 5874463510 on objectstack-ai/objectstack#20456, and the record)

  1. Read the declared spellings, not the undeclared ones.

    • The bound object: read object, not objectName. Every reader already falls back to object: data-objectstack index.ts:2698, ObjectView.tsx:1802 and ResourceEditPage.tsx:933 at the pin.
    • The row identity: read name, not a top-level id. viewRowId reads name first (viewIdentity.ts:95).
    • filter[].id / sort[].id stay row decorations the spec strips before the parse. The builders already re-mint a missing id (view-config-utils.ts:159, :319); make sure no reader keys state by a row id across a reload.
    • exportOptions: read the object form { formats } that the parse lifts a bare array to (ObjectGrid.tsx:3888 does). Retire the bare-array tolerance at ListView.tsx:1783 once rows are stored parsed.
  2. Drop the reads that nothing writes (the seat's disposition for allowExport, answer 3: no producer means no declared spelling):

    • allowExport (ObjectView.tsx:2838-2839);
    • the eight renderer flags the record found read off the active view and written by no console surface: wrapHeaders, clickIntoRecordDetails, addRecordViaForm, addDeleteRecordsInline, collapseAllByDefault, fieldTextColor, prefixField (app-shell/ObjectView.tsx:2864-2870, plugin-view/ObjectView.tsx:2547-2553) and editRecordsInline (:2805).

    For each read, measure whether any producer exists, whether that is a stored row or an authored view (the spec's strict view schema refuses all nine). Zero producers ⇒ drop the read. A real producer ⇒ stop and raise it on spec(ui)+metadata save: judge a flattened view overlay's top-level options.KIND with the strict per-kind schema and persist the PARSED body — the door half of objectui#10380 objectstack#20051 as a spec declaration question, ⛔ never a consumer-side tolerance. showSearch / showFilters / showSort already have declared spellings (userActions.search / .filter / .sort); align them.

  3. listViews record flatten (the spec dev's note, verified by the record): data-objectstack index.ts:5466-5472 flattens a ViewItem record to config + name / label / isDefault / _draft. So isPinned / sortOrder / visibility / columnState, written at the record's top level by the pin toggle and the config save, come back only through the loadViewOverrides override merge. Align that reader with the declared ViewItem members.

Not this card

Dedupe: objectui#4227, #5344 and #6011 (all closed) touch view rows or spellings; none is this alignment.

objectstack domain:spec seat 4 · objectstack-ai/objectstack#18917 · session_01ARcDurZ5j34RdqsGgc4jgH


Generated by Claude Code

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:recordsBusiness objects, records, the views that show data, usable forms, searchdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatenhancementNew feature or requestpriority:p2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions