Skip to content

Commit 9923026

Browse files
committed
docs(approvals): name Set Manager and the admin endpoints as the in-product 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>
1 parent ee3ae03 commit 9923026

2 files changed

Lines changed: 19 additions & 12 deletions

File tree

‎content/docs/automation/approvals.mdx‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,18 @@ manager, close a cycle in the reporting chain, run past the chain depth cap, or
9090
who is provably outside every organization the user belongs to — each with the reason in the
9191
response. It is platform-admin gated, like every other `/api/v1/auth/admin/*` route.
9292

93+
For many users at once, the admin bulk import (`POST /api/v1/auth/admin/import-users`) reads a
94+
`manager_id` column holding the manager's email address (or phone number, where phone sign-in is
95+
enabled) — someone in the same file or an existing user. It links each row once every row in the
96+
file exists, through the same refusals as the endpoint above, and reports each outcome on the
97+
row's `manager` result: a link it cannot make never fails the user it imported.
98+
9399
The column is also written by a seed, or by any other system-context write, which bypasses the
94100
managed-update whitelist. SCIM provisioning and directory sync can populate it too, but only
95101
through a provisioning path your own deployment supplies: this platform declares the SCIM
96-
`manager` attribute without projecting it onto the column, and its admin bulk import does not
97-
write it either. Where an identity carries `source: 'idp_provisioned'` the admin operation
98-
**refuses**, so that directory stays the one surface that authors its manager.
102+
`manager` attribute without projecting it onto the column. Where an identity carries
103+
`source: 'idp_provisioned'` the admin operation **refuses**, so that directory stays the one
104+
surface that authors its manager.
99105

100106
Setting the column is still something you have to *do*. Where `manager_id` is unset the rung
101107
expands to nobody, the request opens on a slate no one can act on, and under the default

‎content/docs/capabilities/approvals.mdx‎

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,18 @@ Discounts, contracts, spend — anything that needs a human "yes" becomes an app
99

1010
## Who approves — seven resolution styles
1111

12-
A specific person · everyone holding a position (e.g. sales managers) · the submitter's direct manager (needs a provisioned reporting chain — see below) · a team · a department (optionally including sub-departments) · organization leadership · **a person named on the record itself** (e.g. the "regional director" field).
12+
A specific person · everyone holding a position (e.g. sales managers) · the submitter's direct manager (needs each user's manager set — see below) · a team · a department (optionally including sub-departments) · organization leadership · **a person named on the record itself** (e.g. the "regional director" field).
1313

1414
<Callout type="warn">
15-
**Routing to the submitter's manager needs a reporting chain you provide.** Unlike a position you
16-
staff, a team you add people to, or a field you name on the record, this style does not get its
17-
data from inside the product: it resolves `sys_user.manager_id`, and no Console field, data-API
18-
write or auth admin endpoint sets that column. Your own provisioning fills it — a seed or other
19-
system-context write, or a SCIM / directory-sync path your deployment supplies. Until it is
20-
filled, a manager-only approval step resolves to nobody and the request waits. The exact remedy,
21-
and the fallback that needs no provisioning at all, are in
22-
[Automation → Approvals](/docs/automation/approvals).
15+
**Routing to the submitter's manager needs each user's manager set.** This style resolves
16+
`sys_user.manager_id`, which is not a profile field: editing the user does not set it. A platform
17+
admin sets it one user at a time from **Setup → Users → ⋯ → Set Manager**, which calls
18+
`POST /api/v1/auth/admin/set-user-manager`. For many users at once, provisioning fills it: the
19+
admin bulk-import endpoint reads a `manager_id` column, and a seed, or a SCIM / directory-sync
20+
path your deployment supplies, can write it too. Until it is set, a manager-only approval step
21+
resolves to nobody and the node's `onEmptyApprovers` policy decides what happens — by default the
22+
request opens and waits for an administrator. The details, and the fallback that needs no manager
23+
data at all, are in [Automation → Approvals](/docs/automation/approvals).
2324
</Callout>
2425

2526
## How it passes — four decision modes

0 commit comments

Comments
 (0)