Blocked-by: objectstack-ai/objectstack#11513
Filed by the triage seat executing the maintainer's 2026-08-24 ruling on objectstack#11513 (verbatim: 「同意 第一步(创业阶段,Salesforce 式)」— lock the base, clone to customize; the silent-fork save path closes server-side).
Scope (UI half)
In Studio / Setup, a permission set carrying package provenance:
- renders locked (read-only), with a visible marker saying it is package-declared and why it cannot be edited in place (upgrades keep flowing to it);
- offers Clone to customize as the primary action — producing an ordinary org-owned copy the user then edits;
- if the user somehow reaches the save path anyway, the server's refusal (the objectstack#11513 half) is surfaced as the same guidance, not a generic error toast.
Org-owned permission sets (including clones) are unaffected.
Sequencing
Blocked on the server half: the refusal shape and the provenance predicate it exposes decide what the UI keys the lock on — do not guess the predicate from the current row shape. Per the release-gating discipline, this dispatches when the framework change is installable (published spec/framework version covering it), not merely merged.
Blocked-by: objectstack-ai/objectstack#11513
Filed by the triage seat executing the maintainer's 2026-08-24 ruling on objectstack#11513 (verbatim: 「同意 第一步(创业阶段,Salesforce 式)」— lock the base, clone to customize; the silent-fork save path closes server-side).
Scope (UI half)
In Studio / Setup, a permission set carrying package provenance:
Org-owned permission sets (including clones) are unaffected.
Sequencing
Blocked on the server half: the refusal shape and the provenance predicate it exposes decide what the UI keys the lock on — do not guess the predicate from the current row shape. Per the release-gating discipline, this dispatches when the framework change is installable (published spec/framework version covering it), not merely merged.