Repository navigation
docs(adr-0138): the guest's bind door is built implementation-first, with its shape recorded (D3 item 5, ruling C) - #23370
Merged
Conversation
…with its shape recorded (D3 item 5, ruling C) D3 item 5 no longer states the bind door as live. Neither path it named writes a binding: a save of the packaged guest position answers 403 NOT_OVERRIDABLE, and confirmAudienceBindingSuggestion refuses a guest row, which the suggestion sync never produces. The item now records the door as implementation-first (built when a named deployment needs to grant the guest on a public surface and the class-1 form doors cannot serve it), the door's shape, the refusal of the definition door, the row half, and the two items the builder re-reads. One status-line continuation records the amendment (ruling comment 6159279205). Kept consistent in the same file: the Consequences bullet that named the two paths, one Enforcement map row for what the amended item declares, and follow-up F4. No other decision is edited. Claude-Session: https://claude.ai/code/session_01BRQ9Mp1yH7R1az6MaUM18H Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Oct 14, 2026
Contributor
Author
维护者速读
Generated by Claude Code |
This was referenced Oct 14, 2026
os-zhuang
approved these changes
Oct 14, 2026
os-zhuang
approved these changes
Oct 14, 2026
This was referenced Oct 14, 2026
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 #23267
Clause-②: no
This executes the maintainer's ruling C on #23267 (comment
6159279205, the director seat's record of the maintainer's words 「23267 我们的系统 和 salesforce 类似,暂时没有 没有公开站点或门户的产品计划」, on the seat's reading6158189687). ADR-0138 D3 item 5 no longer states the guest's bind door as live. The door is built implementation-first, and the item now records the door's shape (ruling items 1 to 3), the refusal of the definition door (item 4), and the restart condition with the two items the builder re-reads (item 5). The PR has no code path. Nothing inpackages/**moves, and E1's reader stays at the declared empty state (D3 item 2, deny-all).Tier H (
docs/adr/**). This PR stays a draft until the maintainer approves it. Before that approval no seat readies it, queues it or arms auto-merge.Drafted by the
os-devagent thatdomain:specseat 2 dispatched (session_01BRQ9Mp1yH7R1az6MaUM18H), on the claim6159342669. The precedent is PR #23326, the amendment of D3 item 6 under ruling C on #23266.The change: one file, +41 / −8
docs/adr/0138-guest-model-anonymous-principal-doors-grants-and-organization.mdchanges in five places:Nothing else changes. No other decision is edited: D3 items 2 and 4, D8 and the rest read as before. The "Decided by" block and ADR-0090 are untouched. The status stays
Accepted, as in the precedent.1. D3 item 5, exact before and after
Before:
After:
Where each ruling item sits in the new text:
PUT /meta/position/guest) is refused: it reverses the seal and misses environment kernels".What the new text adds beyond the ruling's words, for review:
guest", each measured atorigin/maindc393266f(below). They name the enforcer of what the amended item declares, as the record's Decision preamble requires (ADR-0049).everyone's": the mechanism is [Decision] 装包时包里声明的「默认权限集」怎么生效:管理员整部署接受一次、装包即自动生效,还是取消这条路(安全边界) #22801 ruling A's, the one the ruling's "A1's assignment record" names.guestvalue, live with this door)": D8's row for that value reads "enforce — live once D3 lands". E1 landed, and the value is still not live. This parenthesis ties the value to the door without editing D8.SharingServiceholds the list": where the bypass list lives now, so the builder finds what L1 moves.What was measured before writing (
origin/maindc393266f)PUT /meta/position/guestanswers 403NOT_OVERRIDABLE. This is pinned onmainby E1's dogfood case "the metadata door refuses a save of the packagedguestposition" (packages/qa/dogfood/test/guest-grants-channel.dogfood.test.ts).BUILT_IN_SECURITY_CATALOG_NAMES.positionholds both audience anchors (packages/objectql/src/security-catalog-namespace.ts). The package door'srefuseSecurityCatalogNameConflictsrefuses a package that declares one.registry-security-catalog-namespace.test.tspins "a built-in no package can declare".confirmAudienceBindingSuggestionrefuses a row whose anchor is noteveryone(409SUGGESTION_STATE).collectDeclaredSuggestionshard-codes the anchor toEVERYONE_POSITION, so noguestrow is produced.registerBuiltinPositionsdeclaresguestwith nopermissionSets. Onlyeveryonehas a re-declaration seam (declareEveryoneBaseline).guestposition's catalog definition throughpositionBoundSetNames, the one position-bound read (packages/core/src/security/resolve-authz-context.ts). The A1 shape re-derives that definition, as the plugin does foreveryone.assertAudienceAnchorBindingGatereturns unless the write targetssys_position_permission_set. The [Decision] 装包时包里声明的「默认权限集」怎么生效:管理员整部署接受一次、装包即自动生效,还是取消这条路(安全边界) #22801 ruling's premise reading records that the resolver does not read that table.SharingService's constructor holdssys_record_share,sys_user,sys_organization,sys_memberandsys_user_permission_set, plus host extras.origin/main2b6f7609,SuggestedBindingsPanel.test.tsxholds "a guest row offers no Accept, says why, and keeps Dismiss".2. The amendment record
One line follows the existing
· **Amended**line (ruling C on #23266):The quotation is byte-identical to the ruling comment's first line, including its full-width comma.
3. Consistency: the Consequences bullet
The bullet named "directly or through a confirmed suggestion" as the population E1 would start granting. Neither path writes a binding, and E1's census counted none.
Before:
After:
The short second line is deliberate: the two middle lines stay byte-identical, so the diff shows only what changed. The rendered text is the same either way.
4. Consistency: one Enforcement map row
The map lists "every declared thing in this record, and what enforces it". The amended item declares that no door binds a set to
guestuntil the door is built, so it gets a row:5. Consistency: follow-up F4
The record names an unbuilt door the way F2 names D5's site binding:
The two re-read items sit in D3 item 5 itself, where the door's builder reads the shape. F4 points there and does not copy them.
Size against the precedent and the estimate
Verification (head
cc9a40576)origin/mainis stilldc393266fat the gate run, and the ADR is unchanged there since the branch point.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack, run on the final tree (1 path), derives 19 commands, the same set as the dispatch's lead list.cc9a40576. The--ranreconciliation reads: "19 derived famil(ies) accounted for — 19 run, 0 NOT-MEASURED (a DERIVED zero — all 19 recorded an exit code and none of them is 3)".check:doc-formula-expressionsneeds@objectstack/lintand its closure built. They were built first under the verify lock (turbo run build --filter=@objectstack/lint --concurrency=2: 4 tasks successful, VERDICT command-exit 0).check-adr-links: 730 relative link destination(s) under docs/adr/ resolvecheck-adr-symbol-anchors: 2335 anchors across 142 records resolve. The new cross-repo anchor is reported, not judged, without an objectui checkout. Re-run withOBJECTUI_CHECKOUT=/home/user/objectui(read-only), it also exits 0 with the same line.check-adr-anchors: OK (68 anchored file(s), every governing ADR still referenced; … 45873 citation(s) across 6019 file(s) resolve …)check-closing-keyword-parity: OK (3 parsers agree on all 9 keywords …)check-nul-bytes: OK (scanned 11352 text file(s) … no raw ASCII control bytes)docs/adr/**is on the no-publish fast path, and no package'sfiles[]ships it.skip-changesetapplies.Acceptance notes
These were read, do not conflict with the amendment, and are left as they are:
guestvalue says "enforce — live once D3 lands". D8 is a separate decision, so it is not edited. Under the amendment D3 lands in full only with item 5's door, and item 5 now says the value goes live with that door.7b926f7600says "A package may suggest aguestbinding". It is a dated measurement, and dated readings are left as written. Atdc393266fthe suggestion sync produceseveryonerows only..changeset/23224-guest-grants-channel.md) says a set starts granting "only where a deployment holds an environment definition of theguestposition that names it". That is true today as a necessary condition. Once the door is built, the grant arrives through the plugin's re-derived definition instead, so the builder's own changeset should say that.everyoneorguest; the admin confirms each individually");packages/lint/src/validate-security-posture.ts("a set an operator binds toguestat install time …");packages/spec/src/identity/position.zod.ts("Packages SUGGEST bindings to these anchors at install time").维护者速读(草稿)
guestanchor — ADR-0138 D3 item 5 has no enforcer (PUT /meta/position/guestanswers 403 NOT_OVERRIDABLE; guest suggestions are refused) #23267 上答「我们的系统和 Salesforce 类似,暂时没有公开站点或门户的产品计划」,总监席据此裁 C。原第 5 项写的两条路今天实测都走不通:保存访客岗位定义被 403 拒绝,确认访客建议被 409 拒绝,而且没有任何包能产生访客建议。按 AGENTS.md 第 13 条,改变已接受记录的决定,要改原文并留修订行。Generated by Claude Code