Skip to content

Commit 34883f0

Browse files
hotlongclaude
andcommitted
docs(design): Records + Fields are two views of one field designer
Correct the Data pillar: Records = grid/list-style field designer (preview data, add columns, select column → configure field), Fields = form-style field designer (drag-reorder, section grouping, field-property config). Both design the same fields and share the right-hand field editor. Drop the earlier claim that grouping lives only in Interface — the object's default field layout (order + grouping) is authored in the Fields form designer. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent a6b0f56 commit 34883f0

1 file changed

Lines changed: 31 additions & 12 deletions

File tree

docs/design/builder-ui.md

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ composes them into one coherent builder, optimized for operation experience.
5252
tab is `Records` (the grid) — you always land on the data; tabs make the other
5353
facets one click away without burying the grid.
5454
4. **Small config → inspector; big designer → main.** A field / rule / node /
55-
component configures in the right inspector. A full designer (form designer,
55+
component configures in the right inspector. A full designer (the field designer,
5656
flow canvas) *is* the main zone.
5757
5. **Two doors, one metadata.** An object-scoped surface that lives in another
5858
pillar (an object's Actions, Hooks, Views, Permissions) is reachable from the
@@ -71,8 +71,9 @@ composes them into one coherent builder, optimized for operation experience.
7171
## 3. Data pillar
7272

7373
Data is the **object-model workbench**: define objects, their fields, relationships,
74-
validations, and work with records. Data owns the *data layer*; presentation (saved
75-
views, kanban, calendar, forms, dashboards) belongs to Interface.
74+
and validations, and work with records. Data owns the *data layer and the field
75+
designer*; runtime presentation surfaces (saved grid views, kanban, calendar, pages,
76+
dashboards) belong to Interface.
7677

7778
### Layout
7879

@@ -103,18 +104,36 @@ Note: `Actions` / `Hooks` / `Validations` are the three authoring surfaces for l
103104
on an object, routed by intent per [ADR-0077](../adr/0077-authoring-surface-boundary-hook-flow-validation.md):
104105
declarative validation · user-triggered action · write-path hook.
105106

107+
### Records and Fields — two views of one field designer
108+
Both tabs design the *same* thing (the object's fields); they differ in presentation,
109+
and both configure a selected field through the *same* right-hand **field editor**.
110+
111+
- **`Records` — grid / list style (data-forward).** The functional grid: columns =
112+
fields, rows = real records. Preview and inline-edit data, `+` add a column
113+
(= add a field), select a column header to configure that field's properties in
114+
the inspector, `+ New record`. Ephemeral filter / sort / hide / group for looking
115+
at the data (not saved — saved views are Interface).
116+
- **`Fields` — form style (layout-forward).** The field designer as a form canvas:
117+
drag to reorder fields, group them into sections, and configure field properties.
118+
No data rows — this is where the object's default field layout (order + grouping)
119+
is authored. (This is the existing form-style field designer, reused here.)
120+
121+
The choice between them is a working preference: reach for `Records` when you want to
122+
see data while shaping fields, `Fields` when you want to arrange and group them.
123+
106124
### Main zone (content of the active tab)
107125
| Tab | Main-zone content |
108126
|---|---|
109-
| **Records** | the functional **grid**columns = fields, rows = records, inline edit, `+` add field (column header menu configures it), `+ New record`, ephemeral filter/sort/hide/group (not saved — saved views are Interface). |
110-
| **Fields** | the **field manager**a searchable vertical list (add without horizontal scroll, drag-reorder, type icons). Grouping into sections is *not* here — that is the form designer (layout is Interface). |
127+
| **Records** | grid-style field designerpreview data, add columns, select a column → configure the field (see above). |
128+
| **Fields** | form-style field designer — drag-reorder, section grouping, field-property config (see above). |
111129
| **Validations** | the **rules list** (declarative). See below. |
112130
| **Relationships** | lookup / master-detail fields + reverse relationships (list / graph). Relationships are created by adding a `lookup` field type. |
113131
| **Actions / Hooks / Views / Forms / Permissions** | the object's scoped instances, opened in-context. |
114132

115133
### Right inspector (per-item config — the existing panels)
116134
Selecting an item in the main zone opens its existing config panel in the inspector,
117-
non-blocking:
135+
non-blocking. The field editor is shared by both Records (selected column) and Fields
136+
(selected field):
118137
- a column / field → the **field editor** (type, options, required/unique, field-level validation)
119138
- a validation rule → the **rule editor** (condition builder + message + severity + events)
120139
- a record → record detail
@@ -135,10 +154,10 @@ union of six declarative rule types (`packages/spec/src/data/validation.zod.ts`)
135154
CEL as the primary path. Validation stays **declarative** (not a hook); Data-owned.
136155

137156
### v1 scope
138-
- **Ship**: owned objects · `Records` grid · `Fields` manager · field editor (incl.
139-
field-level validation) · `Validations` (condition builder) · object `Settings`
140-
(label / icon / name field / compact / search). Relationships via the `lookup`
141-
field type.
157+
- **Ship**: owned objects · `Records` grid (data + add/configure columns) · `Fields`
158+
form-style designer (reorder + grouping + field editor, incl. field-level
159+
validation) · `Validations` (condition builder) · object `Settings` (label / icon /
160+
name field / compact / search). Relationships via the `lookup` field type.
142161
- **Defer**: Extended objects (objectExtensions) · External objects (datasources) ·
143162
the ERD / model view · formal `Lifecycle` (v1 status = a select field) · `Indexes` ·
144163
seed-data UI · saved views / kanban / calendar (presentation → Interface).
@@ -162,5 +181,5 @@ union of six declarative rule types (`packages/spec/src/data/validation.zod.ts`)
162181

163182
## Mockups
164183
Interactive layout mockups were produced during the design session (grid + inspector,
165-
field manager, validation rule builder, object facet tabs). The ASCII sketches above
166-
capture their structure.
184+
form-style field designer, validation rule builder, object facet tabs). The ASCII
185+
sketches above capture their structure.

0 commit comments

Comments
 (0)