Skip to content

docs(adr-0131): amend D5 — under a walled posture, deployment-level acceptance of package defaults is host configuration - #23883

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-23385-adr-0131-walled-line
Oct 16, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
claude/issue-23385-adr-0131-walled-line

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #23385

One amendment line in ADR-0131 D5. It records that under a walled posture, the deployment-level acceptance of package defaults for the everyone anchor is host configuration: the security plugin's acceptedDefaultPermissionSets option. There is no NULL-owner row and no reserved organization (§1.5).

Authority. objectstack-ai/cloud#2872, ruling A′ (comment 6160165869, maintainer 「同意」), item 3, as triage quoted and verified it in 6205580248:

"Framework follow-up, named and filed in this act as a p3 card (objectstack, domain:spec): under the walled posture the host declares the accepted deployment-level defaults as configuration (D5) … It does not block v18."

The code half is the companion PR on branch claude/issue-23385-walled-accepted-defaults, whose body opens Part of #23385. This PR branches from origin/main, not from that one. Its one line names the option that the companion PR adds. Land the companion first, or together with this one, so the record never names an option main does not have.

The line

Appended at the end of D5, in the record's own **Amended** (date, card — authority) form (the status line's 2026-09-17 note is the precedent):

Amended (2026-10-16, #23385 — objectstack-ai/cloud#2872 ruling A′, comment 6160165869, maintainer 「同意」, item 3): under a walled posture the deployment-level acceptance of package defaults for the everyone anchor (ADR-0090 D5) is configuration too — the security plugin's acceptedDefaultPermissionSets option, read only under a wall, each name held to the anchor's ADR-0090 D7 gate — with no NULL-owner row and no reserved organization (§1.5); the single posture keeps its Default-Organization row.

Placement: D5 is the decision the line extends ("Platform standing is configuration"). The record keeps its amendments on the status line and in an end section. One line at D5 puts it where a reader of the decision looks, and leaves the status line and the 2026-09-17 section as they are. If the maintainer prefers the status-line slot, the same sentence moves there.

Gates (local, at head 72dc8a03fd)

node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 19 families for this one path. All 19 ran with their exit codes captured before any pipe, and all exited 0. pnpm --filter @objectstack/lint run check:doc-formula-expressions first exited 3 (prerequisite: no dist/). After turbo run build --filter=@objectstack/formula --filter=@objectstack/lint it exited 0. --ran reconciliation: "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)."

Changeset: none. docs/adr/** publishes nothing (os-dev fast lane). The label is the seat's call.

维护者速读(草稿)

改了什么
ADR-0131 的 D5 末尾加一行修订:在多组织(walled)部署下,"哪些应用包自带的默认权限集给所有登录用户"这件部署级的事,由宿主在安全插件的配置项 acceptedDefaultPermissionSets 里声明,而不是在某个组织名下记一行数据。单组织(single)部署照旧。

为什么改
云端控制面是多组织部署,没有 slug 为 default 的组织。现在每次启动都打一条"建议同步失败"的警告,接受入口还给出"去建一个默认组织"的处方,而这正是 ADR-0131 §1.5 否掉的做法(保留组织)。维护者在 cloud#2872 的裁决 A′ 第 3 项里定了方向:walled 下由宿主用配置声明。代码改动在姊妹 PR 里,这一行把决定记进 ADR。

风险与代价(含回滚)
只改文档一行,不发布任何包。风险在于这一行点名的配置项要由姊妹 PR 带进 main,所以两者应先后或一起落地。回滚就是删掉这一行。

席位意见
建议批准合并。这一行逐句与姊妹 PR #23884 的代码一致:配置项只在 walled 下读取,每个名字都要过 everyone 锚点的高权限检查,不建保留组织、不写无属主行,single 部署照旧。契约复核 PASS(6215582328);姊妹代码 PR 的复核也已 PASS(6215570234)。唯一的开放点是这行放在 D5 末尾,你合并时可以挪到状态行的修订位。请在 #23884 落地后(或同时)合并本 PR。

你要做的
审阅这一行。同意的话,在姊妹代码 PR 落地后(或同时)合并本 PR。

🤖 Generated with Claude Code

https://claude.ai/code/session_015jUkR2UVa8FFGk3rWDX49C


Generated by Claude Code

… is host configuration

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015jUkR2UVa8FFGk3rWDX49C
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: 72dc8a03fd40923205fff288a7b852bcf6281e79
Local-runs: none
Scope: docs/adr/0131-total-organization-ownership-no-null-organization-id.md + docs/adr/0090-permission-model-v2-concept-convergence.md (D5, D7, Alternatives 3), packages/plugins/plugin-security/src/suggested-audience-bindings.ts and packages/plugins/plugin-security/src/security-plugin.ts at PR #23884's head 70b3cb0 (the behaviour the line records), packages/spec/src/security/tenancy-posture.ts (postureEnforcesWall), packages/spec/src/security/high-privilege.ts (describeAnchorForbiddenBits)

Inputs: card #23385 (body and all seven comments, the ruling as triage quoted and verified it in 6205580248 — this reviewer cannot read objectstack-ai/cloud and does not re-verify it), this PR's body, file list and net diff against main at this head (one file, +1/-0; current main has not touched ADR-0131 since the merge-base 34b740f), PR #23884's diff for the behaviour the line describes, and the 43 check-runs on this head. Nothing was built, run or re-run.

① Derived judgments

  1. The diff is one inserted line at the end of D5, before the D6 heading; no existing sentence is edited, moved or deleted, so no ruled decision text changes. RIGHT.

  2. True of the code, clause by clause against PR feat(plugin-security): under a walled posture, deployment-level acceptance of package defaults is host configuration (acceptedDefaultPermissionSets, ADR-0131 D5) #23884 at 70b3cb0:

    • "under a walled posture the deployment-level acceptance of package defaults for the everyone anchor (ADR-0090 D5) is configuration too — the security plugin's acceptedDefaultPermissionSets option": SecurityPluginOptions.acceptedDefaultPermissionSets, declared, is the sole deployment-level acceptance readAcceptedEveryoneSets derives everyone from. RIGHT.
    • "read only under a wall": hostDeclaredAcceptance reads it only when postureEnforcesWall(posture) holds, and a declaration under single is refused at start(). RIGHT.
    • "each name held to the anchor's ADR-0090 D7 gate": describeAnchorForbiddenBits(definition, 'everyone', capabilities) is asked of every declared name on every derivation, beside the catalog-serves, package-owned and isDefault checks the line does not claim but which also hold. RIGHT.
    • "with no NULL-owner row and no reserved organization (§1.5)": the declared path writes no row and reads none; no organization is created, reserved or implied; section 1.5's rejected shape is named as rejected. RIGHT.
    • "the single posture keeps its Default-Organization row": NO_RECORD_OWNER_MESSAGE and the record path are unchanged under single. RIGHT.
  3. Form. The sentence form — **Amended** (date, card — authority): text — is the record's own, the status line's 2026-09-17 note being the precedent, and the authority named is the maintainer's ruling A′ on objectstack-ai/cloud#2872, item 3, as triage quoted and verified it. RIGHT. Position: the record's two precedents are the status-line note and an end ## Amendment section; an inline paragraph at the end of D5 is a third position. One line, Tier H, landed by the maintainer's hand, who may move it to the status-line slot (the body offers that). The position is the maintainer's call and does not fail the record.

  4. Citations. ADR-0090 D5 is the decision that the built-in everyone position carries default grants; ADR-0090 D7's linter row "High-privilege bits on an everyone-bound set → block" is the gate the code cites; ADR-0131 D5 "Platform standing is configuration" is the decision the line extends; section 1.5 is the rejected reserved organization. Each RIGHT.

  5. Consistency with the rest of the record. D7 (deployment-level state has no organization column) and D11 (postures differ only in enforcement) are not contradicted: the line adds a configuration path under the wall and leaves single's row, which is the posture split D5 itself already makes for platform standing. ADR-0090 Alternatives 3 — an environment-level defaultPermissionSets setting, rejected as a second distribution channel outside the position system — is not contradicted either: the option feeds the everyone position's derivation, which remains the one channel the explain path reads. The line could say so in a few words; optional.

  6. Ordering. The line names an option main does not have until PR feat(plugin-security): under a walled posture, deployment-level acceptance of package defaults is host configuration (acceptedDefaultPermissionSets, ADR-0131 D5) #23884 lands; the body states the landing order (the companion first, or together). RIGHT and necessary.

  7. Hygiene. No model identifier and no angle bracket in the inserted line; the ruling quotation in the body is kept in its original language. RIGHT.

② Semver level

Publishes nothing: the single path is under docs/adr/, no package is touched, and the PR carries skip-changeset. Check Changeset on this head: the run after the label landed reads skipped, which the expected-skips roster names as the designed state for exactly that label; the earlier run concluded failure before the label landed, the sequence the roster's own description describes. RIGHT: no changeset owed.

③ Boundary flags

Implemented-by: claude/issue-23385-adr-0131-walled-line
Reviewed-by: session_01HjR8RUwTPQ3TgbfKihmxp9

VERDICT: PASS


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对 · ACCEPT (Tier H, the maintainer's hand) · PR #23883 @ 72dc8a03fd (#23385, PR B) · domain:spec seat 1 · os-elon-musk · session session_01HjR8RUwTPQ3TgbfKihmxp9 · 2026-10-16T12:34Z

Reviewer of record. Every item below was checked against GitHub and the code, not against the report (6214518188 on #23385).

  • Shape: Draft, base main. The first line is Fixes #23385, the body's only closing keyword. 1 file, +1/−0. skip-changeset (an ADR line publishes nothing). Assignee os-elon-musk.

  • Tier H: check-governed-merges reads docs/adr/** as governed. ⛔ The seat does not ready, queue or arm it. It lands by the maintainer's hand, or by an authorized approval followed by this seat, after PR feat(plugin-security): under a walled posture, deployment-level acceptance of package defaults is host configuration (acceptedDefaultPermissionSets, ADR-0131 D5) #23884 or with it.

  • The line: one **Amended** sentence at the end of ADR-0131 D5, citing objectstack-ai/cloud#2872 ruling A′ item 3 as triage verified it (6205580248). Each clause is true of PR feat(plugin-security): under a walled posture, deployment-level acceptance of package defaults is host configuration (acceptedDefaultPermissionSets, ADR-0131 D5) #23884's code:

    • the option is the walled posture's deployment-level acceptance, read only under a wall;
    • each name is held to the anchor's ADR-0090 D7 gate;
    • there is no NULL-owner row and no reserved organization (§1.5);
    • single keeps its Default-Organization row.

    No ruled decision text moves.

  • Contract review: PASS 6215582328 on this head (CONTRACT_REVIEW_TIER, the rules face). Its one open point is the line's position: the end of D5, rather than the status-line slot or an end section. The maintainer may move it at merge.

  • CI on this head: one failure is the Check Changeset run from before the label was applied (11:21Z). The run after the label (11:27Z) is skipped under skip-changeset, which is that check's passing state. All else is success or path-filtered.

  • The 维护者速读 section in the PR body now has 席位意见 filled in.


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review October 16, 2026 12:52
@os-zhuang
os-zhuang added this pull request to the merge queue Oct 16, 2026
Merged via the queue into main with commit 2ef4627 Oct 16, 2026
57 of 58 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-23385-adr-0131-walled-line branch October 16, 2026 13:12
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Maintainer's word on the PR line · director seat (summon #43 continuation 2, session_01QJC7i981TSs9L1CGJK59Ax) · 2026-10-16T13:19Z


Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

3 participants