Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .changeset/29951-skills-placed-actions-drawn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
'@objectstack/skills': patch
---

docs(skills): `objectstack-ui` no longer says `page:header`'s `placedActions: true` is not drawn, and an eval exercises it (#29951)

Clause-②: no
Metadata-protocol: none

- `rules/pages.md`: the component catalogue's `page:header` row says `placedActions: true` draws every placed action, read live. The console's header renderer reads the key since #29951's ui half, so the "not drawn yet" qualifier #30018 wrote is dropped.
- `evals/record-page.json`: a third case asks for a custom full record page whose header shows every action packages place on the object; the expected answer keeps the page and its tab strip and sets `placedActions: true` on the `page:header` node, with no `actions` id list beside it.
5 changes: 3 additions & 2 deletions skills/objectstack-ui/evals/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@ view / page / dashboard / report metadata.
must escalate to a stored field or app code, and when an ad-hoc
in-page `<ObjectChart>` needs no dataset at all.
- `record-page.json` — the record page as the object declares it: a child
table placed first by `relatedList: 'primary'` (no page file), and
table placed first by `relatedList: 'primary'` (no page file),
`navigation: { mode: 'page' }` on the list view with the reader's own
open choice left out of metadata.
open choice left out of metadata, and `placedActions: true` on a full
page's `page:header` so packaged header actions draw without an id list.
- `report-period-export.json` — a non-`joined` report's `dateRange` (one
`type: 'date'` dataset dimension) and `exportOptions` (csv / xlsx under the
base object's `allowExport` permission).
Expand Down
16 changes: 16 additions & 0 deletions skills/objectstack-ui/evals/record-page.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,22 @@
"definePage"
]
}
},
{
"id": 3,
"prompt": "Our account record page is a custom `kind: 'full'` page with its own tab strip. Installed packages keep adding header actions to `account` (an 'Open in billing' link, for one), and none of them ever shows in the page header. Make the header show every action placed on the account's header, including ones a package adds later, without us listing ids.",
"expected_output": "Keep the `kind: 'full'` page and its tab strip, and set `placedActions: true` on its `page:header` node: `{ type: 'page:header', properties: { placedActions: true } }`. The header then draws every action of `account` whose `locations` include `record_header` or `record_more`, read live, so a package's action appears without a page edit. No `actions` id list beside it: an authored list is the whole set, and `placedActions: true` beside one is refused. Not a return to a `slotted` page and never a `slots.tabs`.",
"files": [],
"assertions": {
"must_contain": [
"placedActions: true",
"page:header"
],
"must_not_contain": [
"slots.tabs",
"actions: ['"
]
}
}
]
}
2 changes: 1 addition & 1 deletion skills/objectstack-ui/rules/pages.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ A `slotted` record page has no `tabs` slot — see [Record Page](./record-page.m

| `type` | Use |
|:---------------------|:----|
| `page:header` | `title` / `subtitle` templates + `actions` (ids of the bound object's actions, never action nodes) or `placedActions: true` (all placed; not drawn yet) |
| `page:header` | `title` / `subtitle` templates + `actions` (ids of the bound object's actions, never action nodes) or `placedActions: true` (all placed, read live) |
| `page:card` | Bordered/un-bordered card with `children: Component[]` (plus an optional `footer: Component[]` slot) |
| `flex` | Generic styleable box (`properties.children`) — the workhorse for custom layout; style via `responsiveStyles` (see Styling below) |
| `element:text` | Text node — `properties.content`; style via `responsiveStyles` |
Expand Down
Loading