Repository navigation
fix(platform-objects): enabling two-factor and copying an invitation link are human-only identity actions - #28386
Conversation
… human-only identity actions Both enable_two_factor actions drop their ADR-0011 ai block (E to H), and copy_invitation_link is assessed H with no ai block. ADR-0011's identity addendum records the amended lists (H 23 / C 17 / E 19, 36 ai blocks) and notes sys_approval_request's 9 actions as unassessed and human-only. Claude-Session: https://claude.ai/code/session_01QUs3BrhuPB4AGHyXk3rvfh Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QUs3BrhuPB4AGHyXk3rvfh Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 1 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 2 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
|
domain:server#4 · os-zhuang · session_01QUs3BtyH9zgxKzYrJiH18J Contract-review-claim: session_01QUs3BtyH9zgxKzYrJiH18J · head cbd2319 · 2026-10-31T09:29Z |
|
domain:server#4 · os-zhuang · session_01QUs3BtyH9zgxKzYrJiH18J Contract-review-handoff: triage — CONTRACT_REVIEW_TIER unavailable (HTTP 429 rate_limit, request req_011Cga5gPg2uE7VRPve6wDjK, 2026-10-31T09:31Z) · head cbd2319
|
|
domain:server#4 · os-tesla · session_01L9qibw58ehQ2gRHP2h2Puz Contract-review-claim: |
|
domain:server#4 · os-tesla · session_01L9qibw58ehQ2gRHP2h2Puz Contract reviewServed-tier: Inputs: card #28368 (the three items of ruling ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Verdict reasoning. The three items of ruling 6540309323 are applied exactly, the ADR's amended lists and counts are arithmetically and textually consistent with the tree, the correction of the pending #27900 changeset is accurate in every sentence it touches, the levels and declarations are right, and the one red check is the designed deliberate-correction door that only the Tier H approver clears at landing. Implemented-by: VERDICT: PASS |
|
domain:server#4 · os-tesla · session_01L9qibw58ehQ2gRHP2h2Puz Contract reviewServed-tier: Inputs: card #28368 (the three items of ruling ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Verdict reasoning. The three items of ruling 6540309323 are applied exactly, the ADR's amended lists and counts are arithmetically and textually consistent with the tree, the correction of the pending #27900 changeset is accurate in every sentence it touches, the levels and declarations are right, and the one red check is the designed deliberate-correction door that only the Tier H approver clears at landing. Implemented-by: VERDICT: PASS |
|
domain:server#4 · os-zhuang · session_01QUs3BtyH9zgxKzYrJiH18J ACCEPT · PR #28386 · Head-sha 维护者速读
席位意见:三条裁决逐字落实,ADR 计数与代码树一致,#27900 changeset 的更正逐句核过;唯一的红是有意设计的"更正他人待发 changeset"门,可带红入队。 席位核对
|
Requested by Sam · project thread
Fixes #28368
Clause-②: no
Metadata-protocol: none
domain:server#4 · os-zhuang · os-dev for claim 6541181717 · Ruling-ref: 6540309323 (#27900, 「其他同意」)
Tier: H (
docs/adr/0011-actions-as-ai-tools.md): a contract review, then an authorised approval by a GOVERNED_APPROVER, before the queue.维护者速读
enable_two_factor动作(sys_user与sys_two_factor)删掉ai块,从 E 档移到 H 档;sys_invitation.copy_invitation_link评为 H 档,保持不写ai块。ADR-0011 附记更新三档名单(H23 / C17 / E19,共 36 个ai块、59 个动作),并加一行:sys_approval_request的 9 个动作未评估,评估前一律仅限人工。docs/adr/0011-actions-as-ai-tools.md的修订注记与名单;packages/platform-objects/src/identity/sys-user.object.ts的enable_two_factor。grep -c "ai: {" packages/platform-objects/src/identity/*.object.ts合计应为 36,且enable_two_factor下不再有ai:。What changes
sys_user.enable_two_factor,sys_two_factor.enable_two_factor(E → H). Each drops itsai: { exposed: true, description }block; a one-line comment names bucket H in its place. Over MCP neither is listed any more, andrun_actionrefuses both by name (the existing per-action opt-in,systemObjectActionExposureError). A signed-in person runs both exactly as before.sys_invitation.copy_invitation_link(assessed H). Noaiblock, as before; a one-line comment names bucket H and why (the accept link is a bearer credential). No behaviour change.aiblocks, the "Not assessed" paragraph now recordssys_approval_request's 9 actions as unassessed and human-only, and the two "38 / 37" counts in the MCP paragraphs read 36 / 35.28368-identity-two-factor-invite-link-human-only.md(@objectstack/platform-objectspatch). The unreleased27900-identity-actions-ai-exposure.mdis corrected to the final lists (19 / 17 / 23, 59 assessed, 36 declared) so the release does not ship a sentence saying two-factor enabling is exposed.Reading of the card's item 1
The card says
copy_invitation_link"gets anaiblock, tier H". The ruling of record (6540309323) says "→ H (human-only)", the ADR's H row says "noaiblock", and the ruled total, 36aiblocks = C17 + E19, leaves no room for a 37th. So H here means noaiblock; the action keeps today's declaration, and the change is its entry in the H list plus the code comment.Tests
pnpm --filter @objectstack/platform-objects test: 104 files, 1474 / 1474 passed.pnpm --filter @objectstack/platform-objects typecheck: exit 0.pnpm --filter '@objectstack/platform-objects...' build): exit 0.git grepofenable_two_factorandcopy_invitation_linkacrosspackages/runtime,packages/qa,packages/servicesandcontent/docsfound no test or doc pinning either action as agent-exposed. feat(platform-objects): the identity actions an agent may reach declare it — additive acts exposed, destructive lifecycle acts behind confirmation, credential and ownership acts human-only #28270 added no per-tier name-list pin (the maintainer struck the automatic check), so no pin moves.Acceptance notes
Metadata-protocol: none. The claim first readnarrowed; the seat amended it tonone, since the kind is defined by what a metadata author can write and these are values on an existing key of platform-owned metadata (the same kind feat(platform-objects): the identity actions an agent may reach declare it — additive acts exposed, destructive lifecycle acts behind confirmation, credential and ownership acts human-only #28270 declared). So the changeset ispatchand carries no ADR-0087 marker.check-empty-changesetis red on purpose. This PR corrects the still-unreleased.changeset/27900-identity-actions-ai-exposure.md(feat(platform-objects): the identity actions an agent may reach declare it — additive acts exposed, destructive lifecycle acts behind confirmation, credential and ownership acts human-only #28270's note) to the final lists: exposed 19 (enabling two-factor removed), human-only 23 (enabling two-factor and copying an invitation link added), 59 assessed / 36 declared. Without it, the release would ship a sentence saying enabling two-factor is agent-exposed. The gate puts this DELIBERATE CORRECTION in front of a person by staying red; please confirm it at landing.sys_approval_request; its 9 actions (plugin-approvals) were measured to declare noaiblock, so the note matches the code.Verification
Head
cbd23194, merge basefc5d5093(origin/main).Local gates: 61 derived, 61 run, 60 exit 0, 1 red by design
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack: 61 commands from 6 paths (69 changed lines).cbd23194after a fullpnpm build(116/116, exit 0). 60 exit 0.node scripts/check-empty-changeset.mjs --base origin/main: exit 1, the DELIBERATE CORRECTION of.changeset/27900-identity-actions-ai-exposure.mddescribed under Acceptance notes. It stays red until a person confirms.dispatch-gates --ranwith exit codes recorded: 61 derived, 61 run, 0 NOT-MEASURED (a derived zero), exit 0.pnpm lint: exit 0.check:dual-build-cjs-loads,check:i18n,check:lean-entry-closureandcheck-plugin-teardown-shape.mjs --self-test(shallow clone). All four exit 0 on the final pass.Not measured locally
dispatch-gatesnames outside its derived total (artifact rosters, wide-population families, the Build Core and Type Check lanes) are left to this PR's check-runs.!in the title and no(narrowing)arm.Generated by Claude Code