Repository navigation
docs(approvals): name Set Manager and the admin endpoints as the in-product writers of sys_user.manager_id - #22681
Merged
objectstack-fleet[bot] merged 1 commit intoOct 10, 2026
Conversation
…roduct writers of sys_user.manager_id The capabilities overview said no Console field, data-API write or auth admin endpoint sets the column; the Set Manager row action and POST /api/v1/auth/admin/set-user-manager do, and the admin bulk import reads a manager_id column. The callout now names them, keeps provisioning as the bulk path, and states the unset case the way the runtime decides it: the node's onEmptyApprovers policy, by default admin_rescue. The automation guide's manager callout said the admin bulk import does not write the column; it does, through the same refusals as the endpoint, so that clause is replaced by what the import does. Claude-Session: https://claude.ai/code/session_01Q7Fy4uVkvBWgj9CLihdATJ Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Oct 10, 2026
objectstack-fleet
Bot
deleted the
claude/issue-22662-capabilities-set-manager
branch
October 10, 2026 14:03
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #22662
Clause-②: no
Docs only. The Approvals capabilities overview told readers that no Console field, data-API write or auth admin endpoint sets
sys_user.manager_id. The product has had two in-product writers for a while: the Set Manager row action on Setup → Users (set_user_manager,packages/platform-objects/src/identity/sys-user.object.ts) andPOST /api/v1/auth/admin/set-user-manager(packages/plugins/plugin-auth/src/admin-set-user-manager.ts). The family grep that triage asked for found one more false sentence of the same kind, on the automation guide. Both are corrected here.What changed
content/docs/capabilities/approvals.mdx(the card's sentence, warn callout at:14–:24):POST /api/v1/auth/admin/set-user-manager.gateAdminat the mount inplugin-auth/src/auth-plugin.ts). The action is shown only whencurrent_user.isPlatformAdmin == trueand is hidden on anidp_provisionedidentity.manager_idcolumn. A seed, or a SCIM / directory-sync path the deployment supplies, can also write it.main. A manager-only step resolves to nobody, and the node'sonEmptyApproverspolicy decides what happens. The default,admin_rescue, opens the request and leaves it waiting for an administrator. This is the same reading asautomation/approvals.mdxafter PR docs(approvals): an entry that resolves to nobody leaves a slot per its kind, and an empty or literal-only slate goes to onEmptyApprovers #22657.content/docs/automation/approvals.mdx(themanagercallout, the second family hit, added to the surface):main. Sinced438b3a9aa(PR feat(plugin-auth): the bulk import admitsmanager_id, resolved in a second pass through the admin write surface's own refusals #18046),plugin-auth/src/admin-import-users.tsadmits amanager_idcolumn:resolveManagerKey).runImportreturns.applyUserManagerLinkderivation the endpoint runs.rows[].manager. The row's user is created either way.managerattribute is still not projected onto the column. The v17.5 release notes (content/docs/releases/v17/17-5.mdx:1318) already list the import'smanager_idcolumn.manager_id), a mechanical correction whose form is set by the code, and the same docs gate family. The claim's file surface already allows "any other hand-writtencontent/docs/**page that the family grep finds".Family grep (triage
6096320437close-out)Roots:
content/docs/**,packages/spec/src/**(describes),skills/**. Each instrument ran on the baseee3ae0360dand again on this head.Instrument 1: every mention of the column or the chain, read line by line, not filtered by claim wording.
ee3ae0360d: 61 lines in 27 files. Head: 65 lines in 27 files, the 4 new lines being this PR's own text.set-user-managerhitscontent/docs/automation/approvals.mdxonce on both trees.content/docs/capabilities/approvals.mdx:12and:17–:20(the card). Every other hit is a schema table, a scope table, a query example, an org-chart example, orcontent/docs/references/**/content/docs/releases/**(generated or release-owned, and not edited).Instrument 2: the claim phrasings, including ones that span lines or do not name the column. Each hit was kept only if "manager" appears within six lines of it.
capabilities/approvals.mdx:15–:19(the card) andautomation/approvals.mdx:94–:96(the bulk-import clause above). The other hits:references/identity/scim.mdx: generated, a schema heading.releases/v17/17-5.mdx:1321: release-owned, and correct.packages/spec/src/automation/approval.zod.ts:86: a code comment recording that the describe was already corrected.packages/spec/src/migrations/registry.ts:1045: an unrelatedglobal_navsentence.packages/spec/src/identity/scim.zod.ts: the schema itself.automation/approvals.mdx"deployment supplies" hit is the SCIM sentence, which is true.no console fieldatcapabilities/approvals.mdx:17).Hits outside this PR's file surface (named, not edited):
packages/spec/src/**: no hit of the claim.ApproverType.describe()(approval.zod.ts:98–:105) only points at the routesos lintnames and says nothing about which surfaces write the column, so it is not a hit. It does inherit theos linttext, which is stale; see the next point.skills/**: no hit.skills/objectstack-automation/references/state-machines-and-approvals.md:231is a table row ("The submitter's manager (sys_user.manager_id)") that makes no claim about writers.MANAGER_ONLY_ROUTESinpackages/lint/src/validate-approval-approvers.ts:199, theos lintremedy forapproval-approvers-may-resolve-empty. It says "its admin bulk import does not write it either".packages/lint/src/validate-approval-approvers.test.ts:313expects exactly that wording.@objectstack/lintdist, resolved frompackages/cli: a manager-only approval slate gives oneinfofinding whose hint contains that clause.os lint… carries the same remedy text" is one clause ahead of the lint string. The guide's clause is the true one.Acceptance notes
manager_idas a target column. objectui023f00d,packages/app-shell/src/views/IdentityImportPanels.tsx, offersemail,phone_number,nameandrole. Both pages therefore name the bulk-import endpoint and never the Console's Import button.content/docs/permissions/authentication.mdx§ Bulk Import Users does not document themanager_idcolumn, and its upsert sentence lists the columns an update touches without it. Noted only.value-named field holds (approval-service.ts,type === 'manager'branch). The wording predates this PR and is unchanged here. Noted only.auth-plugin.ts:2614–2618andadmin-set-user-manager.ts:20still say the bulk import does not carry the column. They describe the tree at the time each was written. They are not published text, and are noted only.Verification
All readings are on head
992302698c.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, with no paths. The change set is 2 paths against merge baseee3ae0360. The derivation gave 40 commands.pnpm exec turbo run build --filter='@objectstack/lint...' --filter='@objectstack/client-react...' --concurrency=2, run underos-verify-lock.sh. Result: 35/35 tasks,VERDICT command-exit 0.$?captured before any pipe, and all 40 exited 0. Selected verdict lines:check:doc-anchors: "480 internal #fragment link(s) across 417 source file(s) all resolve to a real heading".check:doc-authoring: "53 published skill files clean".@objectstack/spec check:docs: "225 generated files in sync with packages/spec".@objectstack/spec check:skill-examples: "262 prose examples type-check across 3 surface(s)".@objectstack/lint check:doc-security-posture: "28 ObjectSchema.create example(s) … carry an os validate-clean security posture".check:nul-bytes: "OK (scanned 10660 text file(s) …)".check:role-word: exit 0.--ranwithCOMMAND :: exit CODErecords gives "40 derived famil(ies) accounted for — 40 run, 0 NOT-MEASURED (a DERIVED zero — all 40 recorded an exit code and none of them is 3)".content/docs/**only, which publishes nothing (skip-changeset).Generated by Claude Code