…olders
objectstack's shipped organization_admin (and organization_admin_no_bypass)
now creates and removes rows on sys_user_position and sys_user_permission_set
and never edits them, bounded server-side by the delegated-administration
gate. The README's "Setup half of an item", both holders sections' comments
and the setupHoldersGrant fixture said it was read-only and cited a retired
objectstack pin. They now say what ships and cite the successor pin; the
fixture case asserts Add and Remove both show, and a control keeps the old
read-only shape offering neither. No behaviour change.
Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XVp19E1MYUTFM3dnkwz8gB
Fixes #13119
Clause-②: no
What
objectstack's shipped
organization_admin(andorganization_admin_no_bypass) now creates and removes rows onsys_user_positionandsys_user_permission_setand never edits them (allowCreate: true,allowDelete: true,allowEdit: false), bounded server-side by the delegated-administration gate (its own organization, its own members, in-boundary sets only). objectstack-ai/objectstack#24732 landed it atb27f8ded5c, and objectui's.objectstack-sha(06cab4849a) carries it.Four places here still said that administrator is read-only on both assignment objects and cited a retired objectstack pin. They now say what ships and cite the successor pin,
organization_admin creates and removes assignment rows, never edits them — both variants(packages/plugins/plugin-security/src/objects/rbac-objects.test.ts, read at06cab4849a):packages/app-shell/README.md, "The Setup half of an item" (published in@object-ui/app-shell'sfiles[], so it gets apatchchangeset);canAdd/canRemoveinAssignedUsersSection.tsxandPositionHoldersSection.tsx;setupHoldersGrant-12082.test.tsx: the header, and theORG_ADMINfixture, which is now the shipped shape (create and delete true, edit false, beside the super-user wildcard).No behaviour change. Add still reads
relatedNew(the create grant) and Remove still readsrelatedRowDelete(the delete grant); neither readsallowEdit. Section logic is untouched.Pins
read-only/create-only/delete-only/fullmatrix and the no-provider control are unchanged.Verification (at
ae98638bcf)pnpm exec vitest run --maxWorkers=1 packages/app-shell/src/views/metadata-admin/setupHoldersGrant-12082.test.tsxfrom the repo root, under the shared lock:Test Files 1 passed (1),Tests 20 passed (20).turbo run build --filter="@object-ui/app-shell^..." --concurrency=2(28/28 tasks) then@object-ui/app-shelltype-check(tsc --noEmit && tsc -p tsconfig.test.json): exit 0.--listFilesOnlyontsconfig.test.jsonlists all three edited.tsxfiles.eslint --format jsonon the three edited.tsxfiles: 3 files, 0 errors. Type-aware linting is off ineslint.config.js(noparserOptions.project), so this diff cannot change any verdict on an untouched file.check:phantom-deps,self-import,unreferenced-sources,doc-example-readers,handler-key-reads,side-effects-array,element-data-source-declaration,spec-symbols,action-forward-parity,designer-field-key-parity,icon-record-names,i18n-keys,i18n-drift,i18n-designer-parity,control-bytes),check-hand-rolled-comment-mask.mjsandcheck-changeset-fixed.mjs: all exit 0.packages/app-shell/test directory. Locally only the edited test file ran.Generated by Claude Code