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
Commit e747839
Browse filesBrowse the repository at this point in the historyBrowse files
docs(skills): pay the objectstack-data SKILL.md token ceiling by deleting stale text
The re-worded `nameField` row put the file 48 tokens over its ceiling. Paid
in the same file: the two re-worded rows are tightened, the incident sentence
"It used to clear both and then never match" is dropped, the parenthetical
pointing at "the determinism gate above" (which lives in references/seeds.md,
not above) is dropped, and a doubled `---` separator is removed. The file now
reads 6099 of 6123 tokens.
Claude-Session: https://claude.ai/code/session_01T1Y1g92DfSEz93iuCisju4
Co-authored-by: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: skills/objectstack-data/SKILL.md
+4-8Lines changed: 4 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -85,9 +85,9 @@ the publish door rejects it before that:
85
85
|`highlightFields`| derived | Ordered field keys used as a record's compact face: the columns a **related list** renders on the parent's detail page, and what a lookup picker shows. Declare it on the CHILD object (see [Relationships](./rules/relationships.md)) |
86
86
|`namespace`| — |**Not a schema key** — `ObjectSchema.create()` rejects unknown keys, so authoring it is a build error. Embed the prefix directly in `name` instead (e.g. `name: 'crm_account'`) |
87
87
|`datasource`|`'default'`| Target datasource ID for virtualized data |
88
-
|`nameField`| derived (e.g. `'name'`/`'title'`) |**Canonical** record-title field — the stored field used as the record's display name. Use a single text/email field; a composite title that import, sort or search must match is a stored computed field (a non-`formula` field with an `expression`, computed and stored on every write); a `returnType: 'text'` formula is legal for displayonly |
88
+
|`nameField`| derived (e.g. `'name'`/`'title'`) |**Canonical** record-title field — the stored field used as the record's display name. Use a single text/email field; a composite title to import, sort or search by is a stored computed field (a non-`formula` field with an `expression`, computed and stored on write); a text formula is display-only |
89
89
|`displayNameField`| — |**Deprecated** alias for `nameField` (still honored as a fallback) |
90
-
|`titleFormat`| — |**Deprecated, not removed (ADR-0079)** — render-only: the server can't return or query it. Use `nameField` (it wins); a composite title migrates to the stored computed field, or the display-only text formula, the `nameField` row describes|
90
+
|`titleFormat`| — |**Deprecated, not removed (ADR-0079)** — render-only: the server can't return or query it. Use `nameField` (it wins); a composite title follows the `nameField` row |
|`fieldGroups`| — | Ordered list of logical field groups for forms/detail pages (see [Field Groups](./references/examples-objects.md#field-groups-mvp)) |
93
93
|`lifecycle`|`record` semantics (permanent) | Data retention/rotation/archival contract. **Required for append-only, high-write-rate objects** — a `telemetry`/`transient`/`event`/`audit` class must declare a bounding policy or parsing fails (see [Data Lifecycle & Retention](./rules/lifecycle.md)) |
@@ -155,7 +155,7 @@ formula cannot fetch the related title in the first place. The
155
155
mistake is **refused, not silent**: a `formula` entry in any `searchableFields`
156
156
— the object's own set included — is an `os validate` error
157
157
(`searchable-field-unsearchable`), and a request naming one is `400
158
-
INVALID_FIELD`. It used to clear both and then never match.
158
+
INVALID_FIELD`.
159
159
160
160
**Mirror maintenance is the trade-off** — a mirror is denormalized data, only as
161
161
fresh as whatever writes it. Cover both write paths:
@@ -391,8 +391,6 @@ and how to build partial / gin / gist indexes at the database layer.
391
391
392
392
---
393
393
394
-
---
395
-
396
394
## Object Extension Model
397
395
398
396
To add fields/validations/indexes to an object you do not own, author
@@ -455,9 +453,7 @@ a row-level-security/sharing predicate (`done` instead of `record.done`) that
455
453
evaluates to `null` and never fires. `os lint` is a *separate*
456
454
pass that additionally checks the data model against the conventions in this
457
455
skill (relationships, master-detail, roll-ups) — run it too, but it does **not**
458
-
replace `os validate`. (Reminder: two consecutive `os build` runs with no source
459
-
change must be byte-identical — see the determinism gate above.) In a scaffolded
460
-
project the gate is `npm run validate`.
456
+
replace `os validate`. In a scaffolded project the gate is `npm run validate`.
0 commit comments