From bc8a4ce319c73377120f6b2f6a71d35fb37d2be2 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 24 Oct 2026 22:49:29 +0000 Subject: [PATCH 1/2] docs(skills): object-level composite/repeater are untyped JSON; a typed list is a child object Claude-Session: https://claude.ai/code/session_01T2U7eGg8aRTpJ8kKXxDiog Co-authored-by: Claude --- skills/objectstack-data/rules/field-types.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skills/objectstack-data/rules/field-types.md b/skills/objectstack-data/rules/field-types.md index 09290cbb0e9..4f929d6c349 100644 --- a/skills/objectstack-data/rules/field-types.md +++ b/skills/objectstack-data/rules/field-types.md @@ -113,8 +113,8 @@ Stored as JSON on the parent row — no separate table / FK: | Type | When to Use | |:-----|:------------| -| `composite` | Single embedded sub-object with declared sub-fields | -| `repeater` | Repeating embedded sub-object **array** | +| `composite` | Single embedded JSON object, **untyped** — a field declares no sub-fields (`fields` / `subFields` are refused) | +| `repeater` | Embedded JSON **array**, **untyped** — no sub-fields or `columns`; a typed list is a child object (`master_detail`, `inlineEdit: 'grid'`) | | `record` | Name-keyed **map** of embedded sub-objects (insertion order = display order; ADR-0007) | ## Calculated From 14a58a3ab0b46d83f54f5c14616950996c12eb14 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 25 Oct 2026 03:27:37 +0000 Subject: [PATCH 2/2] chore(changeset): skills patch for the composite/repeater rows Claude-Session: https://claude.ai/code/session_01T2U7eGg8aRTpJ8kKXxDiog Co-authored-by: Claude --- .changeset/25681-skills-repeater-untyped.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .changeset/25681-skills-repeater-untyped.md diff --git a/.changeset/25681-skills-repeater-untyped.md b/.changeset/25681-skills-repeater-untyped.md new file mode 100644 index 00000000000..dda4366e972 --- /dev/null +++ b/.changeset/25681-skills-repeater-untyped.md @@ -0,0 +1,12 @@ +--- +'@objectstack/skills': patch +--- + +docs(skills): object-level `composite` / `repeater` are untyped JSON — a typed list is a child object + +Clause-②: no +Metadata-protocol: none + +The `objectstack-data` field-types table said a `composite` carries "declared sub-fields". An object field has no member that declares them: `fields`, `subFields` and `columns` are refused on the field. The two rows now say the types are untyped JSON and that a list needing typed columns is a child object with a `master_detail` field (`inlineEdit: 'grid'` edits it inline on the parent's form). + +What to do: nothing. No key, value or behaviour changes.