Skip to content

decision: ADR-0131 C5 — 17.x honours a public form's withdrawal saved at the organization layer. When that layer retires, are those withdrawals carried to the environment layer, dropped, or kept as a special read? #22008

Closed

Description

@objectstack-fleet

Ruled: 6020151485 · letter A · 2026-10-06T16:04Z

Filing gate: ② a decision only the maintainer can make. Filed by the triage seat (objectstack-wide, seat post #6015, session_01AavokzJ5DndAwitDXvKy4U) at the maintainer's instruction 「需要我决裁的问题,立决策卡」. ⛔ Not a claim. The ruling is recorded on this card and on the parent, then this card closes.

Parent: #15206 (ADR-0131 C5, target:v18). Security-adjacent: anonymous intake. Classes, positions and functions only.

维护者速读

17.x 里,管理员在组织层把某张公开表单"撤下"后,匿名提交入口会拒收(17.7 的安全修复)。v18 取消组织层之后,这些已经撤下的表单怎么办?

  • A:升级时把每条组织层的撤回转成环境层的撤回。表单继续是关的,只会关得更宽,不会重新打开。
  • B:组织层的撤回直接作废。升级后这些表单会重新对外开放,除非管理员重新撤回。
  • C:只为"撤回"这一件事保留读组织层的特殊路径。

推荐 A。回一个字母:A / B / C。

四棱(os-decision-facets)

  • ① 项目长远合理性:A 撤回只剩环境层和包层两种来源,不留组织层特例;C 保留特例;B 无特例但会出错。
  • ② 实际业务拉动:凡是在组织层撤回过公开表单的部署都涉及(17.7 才刚发布这项修复)。
  • ③ 防 AI 犯错:B 的失败是无声的,表单在升级当天重新开放,没人察觉;A 只会关得更多,不会开得更多。
  • ④ 创业阶段不扩散:A 是一次迁移,不新增键;C 要长期维护一条特殊读取路径。

Prior rulings read: anonymous form intake, withdrawal, organization layer → #21835 (ruled; the maintainer accepted one known limit, 6005722623), #21934, #21967, #21980; ADR-0131 D6, D10; thread: #15206.

一句话问题

组织层被取消后,那些在组织层撤下的公开表单,升级后还关着吗?

选项 × 代价

选项 做什么 后果
A 迁移仪式把每条组织层撤回转为环境层撤回;多组织时,按"任一组织撤回即撤回"处理 表单保持关闭;多组织部署里可能多关一些(安全方向)
B 丢弃组织层撤回 升级当天这些表单重新开放(安全回退)
C 保留"撤回"一项的组织层读取 组织层退役不彻底,长期维护两条路径

推荐 + 回退 + 置信缺口

  • 推荐 A。 两年后,表单的开放与撤回只在环境和包两层判断,升级永远不会重新打开一张已撤下的表单。这和 Salesforce 站点或 Experience Cloud 的公开访问在站点级配置一致。
  • 回退 C。 ⛔ B 不推荐。
  • 置信缺口: 多组织部署里"多关"的那部分表单数量看不到,迁移计划会列出。
  • 只看①选 A;②③④ 是否翻转:否。

裁后执行


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 6, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling: batch #282 item 3 · letter A · maintainer 「同意」 2026-10-06T15:55Z

    Director seat, summon #35, session_01VYToj6PQehTEKNrjGM9akg (GitHub os-zhuang; written as objectstack-fleet[bot] via the relay). Batch #282 was presented in chat with this card's options A / B / C; the maintainer answered 「同意」, which takes the recommendation. Freshness gate: the body (no comments), #15206, ADR-0131 D6 / D10 / D13 and the #21835 ruling 6005722623 were re-read before this record. Thread-read: none on this card.

    The ruling

    A. At the v18 upgrade the migration ceremony (C7, #15211) carries every organization-layer withdrawal of a public form to the environment layer. Conflict rule, fail-closed: on a deployment with more than one organization, a form any organization withdrew is withdrawn at the environment layer. A withdrawal is customer-written state, not a mirror, so D10 sanctions no deletion of it; and the organization layer retires whole (D13), so no special read survives for it. Withdrawals are view-type organization-scoped overlay rows, so this is the fail-closed sub-case of batch #282 item 4 (#22011) inside the same promotion.

    Pin owed with C7: a public form withdrawn before the upgrade is refused at the anonymous intake doors after it, on both kernels.

    Not taken: B (the organization-layer withdrawals lapse and the forms reopen on upgrade day, silently; a security regression); C (a kept organization-layer read for withdrawals alone, which leaves the retirement incomplete).

    Execution


    Generated by Claude Code

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:accessPermissions that actually hold — RLS/FLS, sharing model, write-path guardsdomain:enginepriority:p1High: required for production / M2securitytarget:v18

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions