-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathfield.json
More file actions
280 lines (280 loc) · 12.3 KB
/
Copy pathfield.json
File metadata and controls
280 lines (280 loc) · 12.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
{
"type": "field",
"_note": "FieldSchema (flat — all field-type configs are top-level optional props). Seeded from docs/audits/2026-06-fieldschema-property-liveness.md. ~half dead. Nested config objects (currencyConfig/vectorConfig/fileAttachmentConfig/encryptionConfig/maskingRule/cached/dataQuality) are wholly dead → classified at top level. Naming-drift props are server-live but client-snake. Framework evidence cited with paths; objectui-renderer evidence as prose.",
"props": {
"name": {
"status": "live",
"evidence": "packages/objectql/src/engine.ts"
},
"label": {
"status": "live",
"note": "renderers."
},
"type": {
"status": "live",
"evidence": "packages/objectql/src/engine.ts",
"proof": "packages/dogfood/test/field-zoo-roundtrip.dogfood.test.ts#field-type-roundtrip",
"note": "ADR-0054 high-risk class (field types): the proof writes one record of (almost) every field type over the real HTTP API and asserts each reads back with type fidelity (rating/slider→number, toggle→boolean) — guarding the persistence + read-coercion integration that #2025 fixed."
},
"description": {
"status": "live",
"note": "display."
},
"format": {
"status": "live",
"evidence": "packages/objectql/src/engine.ts"
},
"required": {
"status": "live",
"evidence": "packages/objectql/src/validation/record-validator.ts"
},
"multiple": {
"status": "live",
"evidence": "packages/objectql/src/engine.ts"
},
"defaultValue": {
"status": "live",
"evidence": "packages/objectql/src/engine.ts"
},
"min": {
"status": "live",
"evidence": "packages/objectql/src/validation/record-validator.ts"
},
"max": {
"status": "live",
"evidence": "packages/objectql/src/validation/record-validator.ts"
},
"options": {
"status": "live",
"note": "select options {label,value,color,default} — renderers + validation."
},
"deleteBehavior": {
"status": "live",
"evidence": "packages/objectql/src/engine.ts",
"note": "reference cascade/restrict."
},
"expression": {
"status": "live",
"evidence": "packages/objectql/src/engine.ts",
"note": "formula."
},
"summaryOperations": {
"status": "live",
"evidence": "packages/objectql/src/engine.ts",
"note": "rollup {object,field,function,relationshipField}."
},
"requiredWhen": {
"status": "live",
"evidence": "packages/objectql/src/validation/record-validator.ts",
"note": "CEL."
},
"readonlyWhen": {
"status": "live",
"note": "renderer CEL."
},
"visibleWhen": {
"status": "live",
"note": "renderer CEL."
},
"conditionalRequired": {
"status": "live",
"note": "deprecated alias of requiredWhen — plan removal."
},
"readonly": {
"status": "live",
"note": "renderer."
},
"hidden": {
"status": "live",
"note": "renderer."
},
"system": {
"status": "live",
"evidence": "packages/objectql/src/engine.ts"
},
"sortable": {
"status": "live",
"note": "grid."
},
"inlineEdit": {
"status": "live",
"note": "grid inline editing."
},
"language": {
"status": "live",
"note": "code field — CodeField.tsx:13 (only language is live; theme/lineNumbers dead)."
},
"step": {
"status": "live",
"note": "slider — SliderField.tsx (min/max/step live)."
},
"group": {
"status": "live",
"note": "field group/layout (renderer)."
},
"inlineHelpText": {
"status": "live",
"note": "display help (renderer)."
},
"unique": {
"status": "live",
"evidence": "packages/plugins/driver-sql/src/sql-driver.ts:1853",
"note": "CAVEAT — DDL-only; NOT validated on the write path (violations surface as raw driver errors)."
},
"precision": {
"status": "live",
"note": "CAVEAT — UI display formatting only; DDL never sizes (maps to float). (NumberField.tsx:16)."
},
"scale": {
"status": "live",
"note": "CAVEAT — grid formatting only; DDL never sizes."
},
"reference": {
"status": "live",
"evidence": "packages/objectql/src/engine.ts:1672",
"note": "CAVEAT — $expand/cascade/seed live; FK DDL reads reference_to (unmapped from reference)."
},
"autonumberFormat": {
"status": "live",
"evidence": "packages/objectql/src/engine.ts:765",
"note": "CAVEAT — runtime sequence formatting live; UI AutoNumberField ignores it."
},
"maxLength": {
"status": "live",
"evidence": "packages/objectql/src/validation/record-validator.ts:127",
"note": "CAVEAT — server validation honors camelCase, but the client form reads snake_case max_length."
},
"minLength": {
"status": "live",
"evidence": "packages/objectql/src/validation/record-validator.ts:130",
"note": "CAVEAT — server camel; client form reads min_length."
},
"referenceFilters": {
"status": "dead",
"evidence": "lookup dialog reads lookup_filters/lookupFilters (LookupField.tsx) — the string[] referenceFilters form is not read (naming drift)",
"authorWarn": true,
"authorHint": "The picker reads the structured `lookupFilters` ({field,operator,value}), not the string[] `referenceFilters` — as authored this filters nothing. Use `lookupFilters`, or remove this to avoid implying a constrained lookup."
},
"displayField": {
"status": "live",
"note": "objectui LookupField/RecordPickerDialog — candidate label field in the record picker (reads displayField || display_field)."
},
"descriptionField": {
"status": "live",
"note": "objectui LookupField — secondary line under each option in the quick-select popover (reads descriptionField || description_field)."
},
"lookupColumns": {
"status": "live",
"note": "objectui RecordPickerDialog — record-picker table columns; renderer auto-derives from the referenced object when omitted (reads lookupColumns || lookup_columns)."
},
"lookupPageSize": {
"status": "live",
"note": "objectui RecordPickerDialog — rows per page in the record-picker dialog (reads lookupPageSize || lookup_page_size)."
},
"lookupFilters": {
"status": "live",
"note": "objectui LookupField + RecordPickerDialog — base scoping filters honoured by BOTH popover and dialog; structured supported form of referenceFilters (reads lookupFilters || lookup_filters)."
},
"dependsOn": {
"status": "live",
"note": "objectui LookupField — dependent/cascading lookup; restricts candidates by another field's value (reads dependsOn || depends_on)."
},
"allowCreate": {
"status": "live",
"note": "objectui LookupField — opt-in inline quick-create (dataSource.create from typed text) (reads allowCreate || allow_create)."
},
"maxRating": {
"status": "dead",
"evidence": "RatingField reads `max` (RatingField.tsx:13) — dead + redundant with max",
"authorWarn": true,
"authorHint": "The rating renderer reads `max`, not `maxRating` — set `max` instead; `maxRating` is ignored."
},
"columnName": {
"status": "dead",
"evidence": "resolveColumnName (spec system-names.ts:182) has ZERO call sites; SQL driver hardcodes column = field key",
"note": "DANGEROUS — advertises custom physical columns the driver never honors.",
"authorWarn": true,
"authorHint": "The physical column always equals the field key — a custom `columnName` is silently ignored by the driver. Remove it; rename the field key itself if you need a different column."
},
"searchable": {
"status": "live",
"evidence": "objectui: packages/plugin-dashboard/src/WidgetConfigPanel.tsx:458",
"note": "LIVE via objectui renderer — the 2026-06 audit mis-classified as dead (renderer side not re-verified). Corrected after checking ../objectui."
},
"index": {
"status": "dead",
"evidence": "field-level — driver reads object indexes[] (sql-driver.ts:1252); field bool unused",
"authorWarn": true,
"authorHint": "A field-level `index: true` creates no index — the driver builds indexes from the object's `indexes[]` array. Declare the index there instead."
},
"externalId": {
"status": "live",
"evidence": "objectui: apps/console/src/utils/metadataConverters.ts:125 reads field.externalId",
"note": "LIVE via objectui renderer — the 2026-06 audit mis-classified as dead (renderer side not re-verified). Corrected after checking ../objectui."
},
"currencyConfig": {
"status": "live",
"evidence": "objectui: packages/fields/src/index.tsx:469 reads currencyConfig.defaultCurrency",
"note": "LIVE via objectui renderer — the 2026-06 audit mis-classified as dead (renderer side not re-verified). Corrected after checking ../objectui."
},
"dimensions": {
"status": "live",
"note": "vector field — objectui VectorField.tsx:11 reads the flat `dimensions` prop. The live authoring path (cf. dead `vectorConfig`); `Field.vector(n)` emits this."
},
"vectorConfig": {
"status": "dead",
"evidence": "nested config — renderers read flat dimensions; no consumer, no vector-index DDL",
"authorWarn": true,
"authorHint": "This nested block is not read (no vector-index DDL). Set the flat `dimensions` sibling instead."
},
"fileAttachmentConfig": {
"status": "dead",
"evidence": "nested config — renderers read flat multiple/accept/maxSize (FileField.tsx:16); no size/type/virus enforcement in write path",
"authorWarn": true,
"authorHint": "This nested block is not read — and note no size/type enforcement happens on write. Use the flat `multiple`/`accept`/`maxSize` siblings for the renderer."
},
"dependencies": {
"status": "dead",
"evidence": "no consumer"
},
"caseSensitive": {
"status": "dead",
"evidence": "no consumer"
},
"inlineTitle": {
"status": "live",
"evidence": "objectui: packages/app-shell/src/providers/MetadataProvider.tsx + plugin-form/deriveMasterDetail.ts",
"note": "LIVE via objectui renderer — the 2026-06 audit mis-classified as dead (renderer side not re-verified). Corrected after checking ../objectui."
},
"inlineColumns": {
"status": "live",
"evidence": "objectui: packages/plugin-form/src/deriveMasterDetail.ts + app-shell/MetadataProvider.tsx",
"note": "LIVE via objectui renderer — the 2026-06 audit mis-classified as dead (renderer side not re-verified). Corrected after checking ../objectui."
},
"inlineAmountField": {
"status": "live",
"evidence": "objectui: packages/app-shell/src/providers/MetadataProvider.tsx",
"note": "LIVE via objectui renderer — the 2026-06 audit mis-classified as dead (renderer side not re-verified). Corrected after checking ../objectui."
},
"relatedList": {
"status": "live",
"evidence": "objectui: packages/app-shell/src/views/RecordDetailView.tsx + utils/deriveRelatedLists.ts",
"note": "LIVE via objectui renderer — the 2026-06 audit mis-classified as dead (renderer side not re-verified). Corrected after checking ../objectui."
},
"relatedListTitle": {
"status": "live",
"evidence": "objectui: packages/app-shell/src/views/RecordDetailView.tsx + utils/deriveRelatedLists.ts",
"note": "LIVE via objectui renderer — the 2026-06 audit mis-classified as dead (renderer side not re-verified). Corrected after checking ../objectui."
},
"relatedListColumns": {
"status": "live",
"evidence": "objectui: packages/app-shell/src/utils/deriveRelatedLists.ts + views/RecordDetailView.tsx",
"note": "LIVE via objectui renderer — the 2026-06 audit mis-classified as dead (renderer side not re-verified). Corrected after checking ../objectui."
},
"trackHistory": {
"status": "live",
"evidence": "packages/plugins/plugin-audit/src/audit-writers.ts",
"note": "ADR-0052 §5b — the audit-writer renders tracked-field diffs as human-readable activity summaries (renderTrackedChangeSummary + getFieldDefs read field.trackHistory). Reintroduces the pruned auditTrail concept WITH a runtime consumer, satisfying enforce-or-remove (ADR-0049)."
}
}
}