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
Mirrors the framework's engine-owned enum split in the UI type + runtime + badge.
- @object-ui/types: `ManagedByBucket` union + `MANAGED_BY_BUCKETS` gain
`'engine-owned'` (closed union → missed consumers are compile errors).
- @object-ui/core: `resolveCrudAffordances` DEFAULTS gains the engine-owned
all-locked row (same matrix as system/append-only), so isObjectInlineEditable
and the grid/form gates treat it read-only automatically.
- @object-ui/app-shell: ManagedByBadge renders engine-owned with the same
read-only "System-managed" copy as a locked `system` object — reuses the
existing `managedByBadge.system` i18n key (zero translation churn; the
distinction is at the schema level). resolveManagedByEmptyState reuses the
`system` engine-owned empty state.
Behaviour-preserving — engine-owned resolves to the same locked affordances a
locked `system` object did, so rendering is unchanged; the value just makes the
schema self-documenting. New unit coverage across resolveCrudAffordances /
isObjectInlineEditable / MANAGED_BY_BUCKETS / the empty-state helper.
Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
**Add the explicit `engine-owned` lifecycle bucket (tracks framework ADR-0103 addendum / #3343).** The framework split the overloaded `managedBy: 'system'` bucket by promoting the engine-owned case to its own enum value; this mirrors it in the UI type + runtime + badge.
8
+
9
+
-**`@object-ui/types`** — `ManagedByBucket` union and `MANAGED_BY_BUCKETS` gain `'engine-owned'` (canonical order: `platform, config, system, engine-owned, append-only, better-auth`). The union stays closed, so every consumer that missed the new value is a compile error.
10
+
-**`@object-ui/core`** — `resolveCrudAffordances` gains the `engine-owned` default row (identical all-locked matrix as `system`/`append-only`), so `isObjectInlineEditable` / the grid + form gates treat it as read-only automatically.
11
+
-**`@object-ui/app-shell`** — the `ManagedByBadge` renders `engine-owned` with the same read-only "System-managed" copy as a locked `system` object (reuses the existing `managedByBadge.system` i18n key — zero translation churn; the distinction is at the schema level, not the user-facing string), and `resolveManagedByEmptyState` reuses the `system` engine-owned empty state.
12
+
13
+
Behaviour-preserving: `engine-owned` resolves to the same locked affordances `system` did by default, so nothing about how a locked object renders changes — the value just makes the schema self-documenting. New unit coverage for the bucket in `resolveCrudAffordances` / `isObjectInlineEditable` / `MANAGED_BY_BUCKETS` / the empty-state helper.
'Rows here are created automatically when actions run on the source record. The list below is a read-only monitoring surface — row-level actions (Approve, Recall, Resend, …) live on each row.',
// ADR-0103 — the explicit engine-owned bucket: rows a platform service owns end
112
+
// to end (jobs, automation runs, approval runtime rows, the metadata store, …).
113
+
// To a user this reads identically to a locked `system` object ("the platform
114
+
// manages this, read-only"), so it deliberately REUSES the `system` copy/i18n key
115
+
// — zero translation churn, consistent UX; the self-documentation is at the
116
+
// schema level. (Same object shape as `system`; the distinct bucket value is the
117
+
// point, not distinct user-facing copy.)
118
+
'engine-owned': {
119
+
icon: Lock,
120
+
i18nKey: 'system',
121
+
short: 'System-managed',
122
+
title: 'Managed by the platform',
123
+
body: ()=>
124
+
'Rows here are created automatically when actions run on the source record. The list below is a read-only monitoring surface — row-level actions (Approve, Recall, Resend, …) live on each row.',
0 commit comments