From 0ccf1b1e7179187517afbe84ea735fe3d90bef84 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 31 Aug 2026 06:51:20 +0000 Subject: [PATCH] =?UTF-8?q?docs(skills):=20objectstack-data=20factual=20sw?= =?UTF-8?q?eep=20(2/3)=20=E2=80=94=20SKILL.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three measured-false behavioral claims corrected against the implementation: - titleFormat is labelled 'Retired (ADR-0079)' but is DEPRECATED: still a declared ObjectSchema key, still parses, still read by objectql's registry. - tenancy.tenantField is shown with '// default: tenant_id'. It carries NO default; the platform tenant column is organization_id. - maskingRule is claimed 'pruned from FieldSchema' (twice). It is live, with a runtime enforcer in plugin-security's FieldMasker. Token ratchet: SKILL.md shrinks (13783 -> 13782). Part of #13675 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01EXxTW8mvPBhoHxmyPZ63de --- skills/objectstack-data/SKILL.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/skills/objectstack-data/SKILL.md b/skills/objectstack-data/SKILL.md index 7c70910a78..0b25befac6 100644 --- a/skills/objectstack-data/SKILL.md +++ b/skills/objectstack-data/SKILL.md @@ -78,7 +78,7 @@ database table and exposes automatic CRUD APIs. | `datasource` | `'default'` | Target datasource ID for virtualized data | | `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, or a formula field (`returnType: 'text'`) for a composite title | | `displayNameField` | — | **Deprecated** alias for `nameField` (still honored as a fallback) | -| `titleFormat` | — | **Retired (ADR-0079)** — a render-only template the server can't return or query. Use `nameField`; for a composite title, designate a `returnType: 'text'` formula field as `nameField` | +| `titleFormat` | — | **Deprecated, not removed (ADR-0079)** — render-only: the server can't return or query it. Use `nameField` (it wins); for a composite title, designate a `returnType: 'text'` formula field as `nameField` | | `enable` | — | Capability flags (trackHistory, searchable, apiEnabled, etc.) | | `fieldGroups` | — | Ordered list of logical field groups for forms/detail pages (see [Field Groups](#field-groups-mvp)) | | `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)) | @@ -740,9 +740,9 @@ A legacy SQL-style `=` / `IN (...)` predicate still compiles via a **deprecated* ### Sensitive fields — `secret` type + `requiredPermissions` -The former `encryptionConfig` and `maskingRule` field keys were **pruned from -`FieldSchema`** — they had no runtime consumer (dead surface; setting them -protected nothing). The real channels are: +The former `encryptionConfig` field key was **pruned from `FieldSchema`** — it +had no runtime consumer. `maskingRule` is **live** (plugin-security's +FieldMasker enforces it). The real channels are: **Encrypted-at-rest values — `type: 'secret'` (ADR-0100).** For reversible machine credentials (DB passwords, API keys, tokens): the engine encrypts the @@ -783,8 +783,8 @@ For SaaS, set `tenancy` on the object schema for row-level tenant isolation ```typescript tenancy: { - enabled: true, // enable row-level tenant isolation - tenantField: 'tenant_id', // default: 'tenant_id' + enabled: true, // enable row-level tenant isolation + // tenantField — NO default; omit it and the driver uses `organization_id` } ``` @@ -976,7 +976,7 @@ export const SetupApp = defineApp({ > The former `softDelete` / `versioning` object keys were **removed** from the > spec (ADR-0049 enforce-or-remove) — authoring them is now a build > error with upgrade guidance. `partitioning` / `cdc` were never schema keys, -> and the `encryptionConfig` / `maskingRule` field keys were pruned (see +> and the `encryptionConfig` field key was pruned (see > [Sensitive fields](#sensitive-fields--secret-type--requiredpermissions)). ---