Repository navigation
docs(adr): ADR-0069 amended in place — per-organization overrides live in the settings tenant rung - #31041
docs(adr): ADR-0069 amended in place — per-organization overrides live in the settings tenant rung#31041objectstack-fleet[bot] wants to merge 3 commits into
Conversation
…e in the settings tenant rung TL;DR 6, D3, D5 and D7 named sys_organization.* columns as the per-organization store. Per the maintainer's ruling (ruling record 6692407743), the store is the tenant-scoped access_policy settings namespace, one sys_setting row per organization (ADR-0007 / ADR-0131 tenant rung). The tighten-only rule is unchanged; no other decision changes. Claude-Session: https://claude.ai/code/session_01Q4EjjRhUZjdy8VXs6Kkur2 Co-authored-by: Claude <noreply@anthropic.com>
… and per organization D3's mfa_required changes from a global toggle to the levels off / administrators / everyone (administrators: ADR-0090 D12's tenant-level, organization-level and delegated administrators), on the maintainer's ruling (record 6684194038). The per-organization row takes the same levels under the tighten-only rule, a stronger level only. The dated status-line note gains one clause for the levels. Claude-Session: https://claude.ai/code/session_01Q4EjjRhUZjdy8VXs6Kkur2 Co-authored-by: Claude <noreply@anthropic.com>
|
repo:cloud#3 · hotlong · session_01Q4EjjRhUZjdy8VXs6Kkur2 Contract-review-claim: session_01Q4EjjRhUZjdy8VXs6Kkur2 · head 27e0710 · 2026-11-06T20:01Z Face: governed path |
|
repo:cloud#3 · hotlong · session_01Q4EjjRhUZjdy8VXs6Kkur2 Contract reviewServed-tier: Rendered 2026-11-06T20:07Z. Tier and face: Check-runs on the head, read once at 2026-11-06T20:04Z: 20 success, 19 skipped, 0 failure, 4 in_progress. Green: Governed Surface Queue Guard, Lint & Repo Gates and all seven Lint lanes (ESLint, docs & code guards, repo & tooling gates, CI/release/engine gates, PM dispatch-gates, scoped lanes), Type Check · source gates, Check Documentation Links, Check PR Size, PR-body guards, Dogfood Regression Gate, Test UI, Plan Test Core shards, Auto Label, filter. NOT MEASURED (in_progress, not polled): Type Check · workspace, Type Check · debt ledger, Type Check · consumer gates, Test Core (1/8). Check Changeset: skipped ( ① Derived judgments
② Semver levelDocs only: one file under ③ Boundary flags
④ Design judgmentAn ADR amendment judged against its first consumer (#31013's code, read above) and the rulings it records: the store sentence, the why, the floor rule and the level set all hold against the code; the amendment adds no decision of its own. Two wrinkles, neither a must-fix:
Observation, not a finding:
Findings. No must-fix. S1 and S2 as above (should-fix, wording only). Implemented-by: VERDICT: PASS |
…aker; ADR-0131's citation named The D3 per-organization row read "at least as strong as the deployment's, a stronger level only", two clauses that disagree on an equal level; it now reads "never a weaker one". The D7 note's ADR-0131 citation now says what it is cited for: the organization ownership of the settings row. Claude-Session: https://claude.ai/code/session_01Q4EjjRhUZjdy8VXs6Kkur2 Co-authored-by: Claude <noreply@anthropic.com>
|
repo:cloud#3 · hotlong · session_01Q4EjjRhUZjdy8VXs6Kkur2 Contract reviewServed-tier: Delta record rendered 2026-11-06T20:22Z, on the prior record 6694338252 (PASS on Check-runs on ① Derived judgments
② Semver levelUnchanged from the prior record: docs only, no package, no changeset, ③ Boundary flagsUnchanged: Tier H draft from the base repo, the maintainer merges by hand; nothing here lifts, flips, queues or arms. The amendment still lands independently of #31013 (ruling 6692407743), which is at FAIL on its own record. ④ Design judgmentThe two wording changes make the D3 per-organization rule read as the code enforces it and name what ADR-0131 is cited for. No decision moved and no new claim was added beyond ADR-0131's own. Observation O1 of the prior record (D5's seam cell is pre-#31013 and is owed a line once #31013 settles) stands and is still not this PR's. Findings. None. S1 and S2 of record 6694338252 are closed by Implemented-by: VERDICT: PASS |
|
repo:cloud#3 · hotlong · session_01Q4EjjRhUZjdy8VXs6Kkur2 维护者速读
席位意见: 建议合并。完整复核 PASS 6694338252,两处措辞改进并入后,增量复核 PASS 6694635563(head 席位核对 · ACCEPT(Tier H,等维护者合并)· 2026-11-06T20:27ZHead-sha:
|
Refs #30922
Clause-②: no
Metadata-protocol: none
维护者速读
access_policy命名空间,每个组织一行sys_setting),而不是sys_organization.*字段;涉及 TL;DR 6、D3、D5、D7 四处,并在 D7 末尾加一段说明;另外 D3 的双重验证要求从「开关」改为三档off/administrators/everyone(不强制 / 管理员必须开 / 全员必须开,管理员即 ADR-0090 D12 的租户级、组织级和委派管理员),部署级是默认值和下限,组织级同样三档、不得弱于部署级(可相同或更强)。docs/adr/0069-enterprise-authentication-hardening.md的 D7 末尾新增说明段(风险最高:它写了存放位置和理由);其次 D3、D5 两张表里改名的那一行,以及状态行末尾。git diff origin/main -- docs/adr/0069-*应只见状态行末尾、TL;DR 6、D3 两行(存放位置与三档)、D5 一行、D7 一行的改写,加 D7 末尾 1 段新增说明;pnpm check:adr-index应报告docs/adr/README.md为最新。What changes
ADR-0069 is amended in place on the maintainer's ruling recorded on #30922 (ruling record
6692407743, maintainer, verbatim: 「修订 ADR 写明存放位置(推荐)」). Per-organization access-policy overrides live in the settings tenant rung of ADR-0007 / ADR-0131: the tenant-scopedaccess_policynamespace, onesys_settingrow per organization, as PR #31013 implements. TL;DR 6, D3, D5 and D7 namedsys_organization.*columns. D3'smfa_requiredalso changes from a global toggle to the three levelsoff/administrators/everyone, at the deployment and per organization, on the maintainer's ruling G2 on objectstack-ai/cloud#3668 (verbatim 「可以,按三档做(推荐)」). The tighten-only rule is unchanged in meaning, and no other decision changes.The diff touches only
docs/adr/0069-enterprise-authentication-hardening.md.pnpm adr:indexran and leftdocs/adr/README.mdunchanged (the index shows a truncated status prefix, which this note does not reach), so the README is not in the diff. The status line stays on line 3, inside the index's 40-line header window.6692407743on #30922, maintainer, verbatim 「修订 ADR 写明存放位置(推荐)」; implemented by PR #31013): per-organization overrides live in the settings tenant rung (the tenant-scopedaccess_policynamespace, onesys_settingrow per organization), not insys_organization.*columns, and D3'smfa_requiredis three levels,off/administrators/everyone, at the deployment (the default and the floor) and per organization (ruling G2 on objectstack-ai/cloud#3668, record6684194038, verbatim 「可以,按三档做(推荐)」); the tighten-only rule is unchanged and no other decision changes (TL;DR 6, D3, D5, D7); see the note under D7."sys_organization.*) are explicit and additive (an org can only tighten, never loosen, the global floor)"access_policynamespace, onesys_settingrow per organization", with a store-amended markermfa_required(global toggle)"; "Whenmfa_required, a session for a user ..."mfa_required(deployment level:off/administrators/everyone)" with a levels-amended marker; "When the level covers the user (everyone: every user;administrators: the tenant-level, organization-level and delegated administrators of ADR-0090 D12), a session for a user ...". Defaultoff, seam unchanged.sys_organization.require_mfa(per-org)access_policy.mfa_required(per-org, settings tenant rung), with a marker that the column is retired. Seam cell unchanged. The mechanism cell gains "on the same three levels:off(nothing beyond the deployment's) or a level at least as strong as the deployment's, never a weaker one (off, thenadministrators, theneveryone)".sys_organization.allowed_ip_ranges(CIDR[])access_policy.allowed_ip_ranges(CIDR[], per-org, settings tenant rung), with a marker. Seam and mechanism cells are unchanged.sys_organization:require_mfa,allowed_ip_ranges"sys_organizationfield; they live in theaccess_policysettings namespace", with a markerauthvalues are the default and the floor. Restates the tighten-only rule. Gives the reason: only a settings write predicate receives the saving request's transport, which the per-organization self-lock-out save guard needs, and the settings rung is the store organization administrators already write. Records thatsys_organization.require_mfais retired (readonly, migrated) and that nosys_organization.allowed_ip_rangesfield is added.Acceptance notes
sys_organization.*. The new note says so.6684194038, verbatim 「可以,按三档做(推荐)」). The status-line note gains one clause for them. The per-organization row allows a level at least as strong as the deployment's, never a weaker one.Verification
All readings were taken at head
f3ce9c02b3, where the gates were re-run after the wording commit (review 6694338252 S1/S2). dispatch-gates warned that the tree is 6 or more commits behind origin/main and thatscripts/regen-artifacts.mjs(not in this diff) changed across that range. The derived list was identical to the first run's. main was not merged into the open PR (AGENTS.md section 10); CI runs on the merge ref.Derived gate families (dispatch-gates --commands, 21) — 20 exit 0, 1 NOT MEASURED
node scripts/check-adr-links.mjs(and--self-test): exit 0 / exit 0node scripts/check-closing-keyword-parity.mjs(and--self-test): exit 0 / exit 0node scripts/check-comment-mask-corpus.mjs: exit 0node scripts/ci/plan-test-core-shards.mjs --self-test: exit 0pnpm check:adr-anchors,check:adr-index,check:adr-symbol-anchors,check:ci-filter-parity,check:closed-ceremony-text,check:cross-package-test-inputs,check:doc-authoring,check:driver-memory-census,check:gitlink-declared,check:nul-bytes,check:pm-governed-merges,check:pm-prior-rulings,check:refd-timer-probe,check:watch-hint-literal: exit 0 eachpnpm --filter @objectstack/lint run check:doc-formula-expressions: exit 3, PREREQUISITE NOT MET (@objectstack/formula/@objectstack/lintnot built). NOT MEASURED locally, a declared narrowing. Two 9-minute queue attempts for the prerequisite build on the shared verify lock timed out (exit 99) behind another run. CI'sLint & Repo Gatesruns this family.dispatch-gates --ranreconciliation: "21 derived famil(ies) accounted for — 20 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)", exit 0.ADR index
node scripts/adr-index.mjs: exit 0, "adr-index: unchanged docs/adr/README.md (237 lines)."Docs only, under the
docs/adr/**fast path: nothing publishes, so no changeset is added and this PR carriesskip-changeset.Generated by Claude Code