Commit 0848bea
* feat(spec)!: retire the overloaded `managedBy: 'system'` bucket → `system-data` (#3355)
ADR-0103 split `system` additively in v16: the 20 engine-owned objects moved to
the new explicit `engine-owned`, the 8 admin/user-writable ones stayed behind.
The surviving value therefore names the half that already moved out — "system"
on precisely the objects a user writes — leaving an author choosing between
`system` and `engine-owned` with nothing in the vocabulary to choose on.
v17 finishes the split: the residue is renamed `system-data`, the bare value is
retired from the load path with a prescription, and the affordance default flips
from LOCKED to WRITABLE (so the 8 objects' `userActions` re-open blocks become
redundant and are deleted). Stored metadata is converted by the ADR-0087 entry
`object-managed-by-system-to-system-data`, not reinterpreted.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012C2cd7tL8QDoZ2QKN3djJ5
* test(spec,security,messaging,approvals): pin the `system` → `system-data` equivalence and the mis-assignment refusal (#3355)
The PR body claimed "no enforcement moves". These make it evidence:
- per-object before/after pins for all 8 objects (4 packages): the v16 shape
(`system` + a `userActions` re-open block) and the v17 shape (`system-data`,
no block) must resolve the same create/edit/delete/exportCsv. The one
deliberate delta — `import` false→true, per the maintainer's adjudication —
gets its own named assertion so it cannot move silently.
- `/me/permissions` clamp: same allowEdit/Create/Delete for both declaration
shapes, plus a pin that a userActions-less `system-data` member is not clamped
(the inverted false-negative removing `system` from GUARDED_WRITE_BUCKETS
avoids).
- write guard: `ENGINE_OWNED_BUCKETS` excludes both `system` and `system-data`.
- new authoring-time refusal `assertSystemDataIsWritable`: `system-data` on an
object granting no user write is a contradiction with no honest reading, and
the writable default means the mistake now hands out generic CRUD. No guard
covers the bucket, so `create()` is the only place to catch it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012C2cd7tL8QDoZ2QKN3djJ5
* docs(spec,adr): regenerate the v17 artifacts and record the ADR-0103 close-out (#3355)
- gen:schema / gen:spec-changes / gen:upgrade-guide / gen:docs / gen:api-surface
- objects.mdx: the bucket table, the engine-owned-vs-system-data section, the
`userActions`-narrows contract and a v16 upgrade callout
- ADR-0103: a v17 addendum completing D5 (which had explicitly deferred the
removal), recording the rejected alternatives, the default flip and its one
affordance consequence, and the new mis-assignment refusal
All 11 spec gates pass (liveness, empty-state, authorable-surface, docs,
api-surface, spec-changes, upgrade-guide, skill-refs, skill-docs,
skill-examples, variant-docs).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012C2cd7tL8QDoZ2QKN3djJ5
* fix(test): reconstruct the v16 baseline via `engine-owned`, not the retired literal (#3355)
The equivalence pins built their v16 side by passing `managedBy: 'system'` to
`resolveCrudAffordances` — but v17 deletes that row from
`CRUD_AFFORDANCE_DEFAULTS`, so the lookup fell through to the `platform` default
and reconstructed a baseline with `import: true`. The pins caught it (that is
what they are for): the `expect(v16).toEqual(V16_EXPECTED)` guard failed rather
than the comparison silently passing against a wrong baseline.
ADR-0103 D5 gave `engine-owned` the byte-identical locked row `system` carried in
v16, so it is an exact stand-in, and the V16_EXPECTED assertion keeps it honest.
Also adds the NodeNext `.js` extensions the new test files needed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012C2cd7tL8QDoZ2QKN3djJ5
* chore(spec): regenerate the upgrade guide after rebasing onto main (#3355)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012C2cd7tL8QDoZ2QKN3djJ5
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 98877c9 commit 0848bea
28 files changed
Lines changed: 969 additions & 162 deletions
File tree
- .changeset
- content/docs
- data-modeling
- references/data
- docs
- adr
- packages
- objectql/src
- platform-objects/src/identity
- plugins
- plugin-approvals/src
- plugin-hono-server/src
- plugin-security/src
- objects
- services/service-messaging/src/objects
- spec
- src
- conversions
- data
- migrations
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
215 | 215 | | |
216 | 216 | | |
217 | 217 | | |
218 | | - | |
219 | | - | |
| 218 | + | |
| 219 | + | |
220 | 220 | | |
221 | 221 | | |
222 | 222 | | |
| |||
233 | 233 | | |
234 | 234 | | |
235 | 235 | | |
236 | | - | |
| 236 | + | |
237 | 237 | | |
238 | 238 | | |
239 | 239 | | |
240 | 240 | | |
241 | | - | |
242 | | - | |
| 241 | + | |
| 242 | + | |
243 | 243 | | |
244 | 244 | | |
245 | 245 | | |
246 | 246 | | |
247 | | - | |
248 | | - | |
249 | | - | |
250 | | - | |
251 | | - | |
252 | | - | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
253 | 254 | | |
254 | 255 | | |
255 | 256 | | |
256 | 257 | | |
257 | | - | |
258 | | - | |
259 | | - | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
260 | 261 | | |
261 | 262 | | |
262 | 263 | | |
263 | 264 | | |
264 | | - | |
265 | | - | |
266 | | - | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
267 | 281 | | |
268 | 282 | | |
269 | 283 | | |
270 | 284 | | |
271 | | - | |
272 | | - | |
273 | | - | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
274 | 288 | | |
275 | 289 | | |
276 | 290 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
115 | 115 | | |
116 | 116 | | |
117 | 117 | | |
118 | | - | |
| 118 | + | |
119 | 119 | | |
120 | 120 | | |
121 | 121 | | |
| |||
Lines changed: 59 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
192 | 193 | | |
193 | 194 | | |
194 | 195 | | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
0 commit comments