Repository navigation
docs(adr): ADR-0011 identity-actions addendum records the two SCIM credential actions - #31209
Conversation
…edential actions mint_scim_credential joins bucket H and revoke_scim_credential bucket C, with the counts re-measured on the tree: 61 assessed actions and 37 ai blocks (H 24 / C 18 / E 19). sys_user.list_platform_admins, which postdates the assessment, is named as unassessed. Claude-Session: https://claude.ai/code/session_01FEkQ5od974EsY8paGtPt7R Co-authored-by: Claude <noreply@anthropic.com>
|
domain:server#5 · os-project-manager · session_01FEkQ5o8PE7ZtVjcor51wBZ Contract-review-claim: session_01FEkQ5o8PE7ZtVjcor51wBZ · head c53003a · 2026-11-07T17:41Z |
|
domain:server#5 · os-project-manager · session_01FEkQ5o8PE7ZtVjcor51wBZ Contract reviewServed-tier: ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Implemented-by: VERDICT: PASS |
… bucket on boundedness The analogy to sys_api_key.revoke_api_key attaches only to switching one bearer off (that key is restorable); the reason for C is that the act is bounded to one connection and hands out or widens nothing, and the no-restore reading is stated as measured on the doors. Claude-Session: https://claude.ai/code/session_01FEkQ5od974EsY8paGtPt7R Co-authored-by: Claude <noreply@anthropic.com>
|
domain:server#5 · os-project-manager · session_01FEkQ5o8PE7ZtVjcor51wBZ Contract reviewServed-tier: ① Derived judgments
② Semver levelUnchanged from 6710882534: ③ Boundary flags
④ Design judgment
Implemented-by: VERDICT: PASS |
|
domain:server#5 · os-project-manager · session_01FEkQ5o8PE7ZtVjcor51wBZ 维护者速读
席位意见:建议批准。表与代码一致,第一轮复审指出的类比错误(拿可恢复的 API key 吊销作比)已改为按「有界、不可恢复」立论,增量复审确认没有入口能恢复已吊销的 SCIM 凭据。 席位核对 — ACCEPT ·
|
Requested by Leehom · project thread
domain:server#5 · os-project-manager · session_01FEkQ5od974EsY8paGtPt7R
Fixes #31124
Clause-②: no
Metadata-protocol: none
维护者速读
sys_scim_connection_credential.mint_scim_credential进 H 档(仅人工,无ai块),revoke_scim_credential进 C 档(暴露给 AI,但必须人工确认)。计数按当前main的代码树实测重写:已评估动作 61 个、ai块 37 个(H 24 / C 18 / E 19)。另记一笔:sys_user.list_platform_admins(PR feat(plugin-auth): serve the platform-admin roster from Setup → Users (#28793) #29427,2026-11-02 并入)晚于评估、不在任何档内,按「未评估即仅人工」记入「Not assessed」段。packages/platform-objects/src/identity/**的人判断「哪些平台身份动作 AI 能跑」的唯一记录(维护者已否决自动检查)。feat(platform-objects): mint and revoke SCIM connection credentials from the console #31119 合入后表少记了一个已暴露的动作。skip-changeset)。回滚即 revert。docs/adr/0011-actions-as-ai-tools.md一个文件:① 新增的 2026-11-07 amendment 引文块;② H / C 两个列表末尾各加一个名字与计数;③ 「Not assessed」段新增list_platform_admins一句。packages/platform-objects/src/identity/sys-scim-connection-credential.object.ts:mint_scim_credential无ai块,revoke_scim_credential的ai块是exposed: true, requiresConfirmation: true;pnpm check:adr-index && pnpm check:adr-symbol-anchors应为 exit 0。docs/adr/**):席位按 CONTRACT_REVIEW_TIER 复核通过后,由你合并。What changes
One file,
docs/adr/0011-actions-as-ai-tools.md, inside the 2026-10-30 addendum "the platform identity actions an agent may reach". No rule text moves; the lists and the counts do.sys_scim_connection_credential.mint_scim_credentialis assessed H (it mints a SCIM bearer credential and answers it once; triage on SCIM connection credentials: add a Setup action for mint and revoke #31032, comment6692886264: "Classify mint as not exposed to AI tools") andsys_scim_connection_credential.revoke_scim_credentialis assessed C (the same triage: "Revoke may be classified on its own merits"; it switches one bearer off, assys_api_key.revoke_api_keydoes, bounded to that one connection, and hands out no credential and widens no access; no door restores a revoked SCIM credential, so provisioning resumes only by minting a new one — headf557345434, from contract review 6710882534). Both shipped in PR feat(platform-objects): mint and revoke SCIM connection credentials from the console #31119,a794e32c9bonmain.aiblocks (H 23 / C 17 / E 19)" → "61 assessed actions and 37aiblocks (H 24 / C 18 / E 19); the tree holds one more identity action, unassessed (below)". The two sentences that count the declaring actions move 36 → 37 and 35 → 36 (revoke forwards to/api/v1/auth/admin/scim/revoke-credential, under/api/v1/auth/like the other 35). The historical reading of the 2026-10-30 assessment ("58 actions in 38 blocks") is untouched; the provenance sentence gains "the twosys_scim_connection_credentialactions came with the 2026-11-07 amendment".sys_user.list_platform_admins(PR feat(plugin-auth): serve the platform-admin roster from Setup → Users (#28793) #29427, 2026-11-02) postdates the assessment, declares noaiblock (its own source comment says so), and is unassessed and human-only until a ruling assesses it. It is placed in no bucket: the H test names minting, ownership, sign-in and destruction, and classifying it is a ruling, not a dev's reading.Why
The addendum is the only record of which platform
sys_*identity actions an AI agent may reach: the maintainer struck the automatic check (「自动检查 有必要吗?每一个元数据应用都有类似的问题,后续都要检查吗」), so a reviewer ofidentity/**reads this table and nothing else. After PR #31119 it omitted one live AI-exposed action (revoke, C) and one human-only action (mint, H). The card asked for exactly that addendum entry, blocked on #31119 landing; #31119 merged 2026-11-07T14:04Z.Tests
None added, by the card's ruling: the maintainer struck the automatic check for this table, so this PR adds no gate, test or script. The per-action pins on the two actions'
aiblocks landed with #31119 (sys-scim-connection-credential-actions.test.ts) and are not touched.Acceptance notes
aiblocks. The tree atorigin/main658d84f575holds 62 actions on the 13 identity objects that declare any, 37 with anaiblock, 25 without. The 62nd issys_user.list_platform_admins(PR feat(plugin-auth): serve the platform-admin roster from Setup → Users (#28793) #29427, merged 2026-11-02, after the 2026-10-31 amendment); its source comment reads "Noaiblock: this action postdates the ADR-0011 identity-actions assessment, and an unassessed action stays human-only." The record therefore says 61 assessed (the card's number) and names the unassessed one besidesys_approval_request's 9, rather than silently folding it into H. Whether it should be assessed H (or E, as a read-only roster answer) is a maintainer ruling; named in the report'sopen_questions.aiblock; C:exposed: true, requiresConfirmation: true; E:exposed: true, no confirmation), and no action with anaiblock is unexposed. Measured by a throwaway script importingpackages/platform-objects/src/identity/index.tsand reading eachsys_*object'sactions[].ai; the script is not committed.**Status**:line carries no pointer for the 2026-10-31 amendment either; this addendum's own convention is the dated blockquote, and the card scoped the edit to the lists and counts./api/v1/auth/admin/scim/are plugin-auth's own platform-admin doors (feat(plugin-auth): a platform administrator can mint and revoke SCIM connection credentials #30991), not better-auth's; the existing sentence "N to the better-auth routes under/api/v1/auth/" already counts plugin-auth'sadmin/sso/*andadmin/oauth2/*doors the same way, so only its number moved. plugin-auth'sscim-connection-admin.tsheader records that an anonymous caller is answered 401 there, which is the behaviour the paragraph describes. Not measured live.docs/adr/README.mdis generated (pnpm check:adr-index); nothing in it changes, as no ADR title, status or link moved.Verification
All readings at the final head
c53003ae19: the ADR commit2096b75721onorigin/main658d84f575, then one merge oforigin/mainatde3996bd55(two commits, #31177 and #31185, touching neither the ADR noridentity/**). The 21-gate sweep was run on both heads with the same result; the exit codes below are the final head's.node scripts/pm/dispatch-gates.mjs --tier --repo objectstack-ai/objectstack docs/adr/0011-actions-as-ai-tools.md: "Model tier — MANDATORY: claude-fable-5-1 …docs/adr/**… effort floor at xhigh". The claim (6710561423) records the thread's effort ashigh, a declared deviation with the seat's at-tier contract review as the compensating control.node scripts/pm/check-governed-merges.mjs --test docs/adr/0011-actions-as-ai-tools.md: exit 3, "governed-surface predicate: 1 of 1 path(s) hit the register … ⛔ GOVERNED — a human merge is the review record for this PR".dispatch-gates --commandsderived 21 families from the diff; all 21 run, exit codes captured before any pipe;--ranreconciliation below.Derived gate sweep at `c53003ae19` (21 families, exit codes captured before any pipe; `dispatch-gates --ran`: 21 derived, 21 run, 0 NOT-MEASURED, 0 UNRUN)
pnpm exec eslint --no-inline-config docs/adr/0011-actions-as-ai-tools.md: exit 0, "File ignored because no matching configuration was supplied" (eslint has no markdown config; the doc gates above are the style authority).git diff --shortstat origin/main...HEAD), under the 3000 human-merge threshold.check:doc-formula-expressionsneeded@objectstack/formulaand@objectstack/lintbuilt, which was done).Human Minimum
packages/specholds no runtime logic. (Not touched.)pnpm lintpasses (eslint ignores.md; the derived doc gates pass).main, one pull request.docs/adr/**only),skip-changeset; both declaration lines are filled in above.packages/spectouched: not touched.content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_01FEkQ5od974EsY8paGtPt7R