Skip to content

Commit e747839

Browse files
os-billclaude
andcommitted
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>
1 parent a7e789d commit e747839

1 file changed

Lines changed: 4 additions & 8 deletions

File tree

‎skills/objectstack-data/SKILL.md‎

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ the publish door rejects it before that:
8585
| `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)) |
8686
| `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'`) |
8787
| `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 display only |
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 |
8989
| `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 |
9191
| `enable` | — | Capability flags (trackHistory, searchable, apiEnabled, etc.) |
9292
| `fieldGroups` | — | Ordered list of logical field groups for forms/detail pages (see [Field Groups](./references/examples-objects.md#field-groups-mvp)) |
9393
| `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
155155
mistake is **refused, not silent**: a `formula` entry in any `searchableFields`
156156
— the object's own set included — is an `os validate` error
157157
(`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`.
159159

160160
**Mirror maintenance is the trade-off** — a mirror is denormalized data, only as
161161
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.
391391

392392
---
393393

394-
---
395-
396394
## Object Extension Model
397395

398396
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
455453
evaluates to `null` and never fires. `os lint` is a *separate*
456454
pass that additionally checks the data model against the conventions in this
457455
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`.
461457

462458
---
463459

0 commit comments

Comments
 (0)