Skip to content

PermissionMatrixEditor artifact tier over-locks on single-kernel hosts (environmentId undefined) — accepted residue of #4518 #4526

Description

@yinlianghui

Observation-class residue recorded from #4518 / PR #4525, for triage. Not a defect in the landed card — a documented consequence of its own ruling.

What was landed: PR #4525 gives PermissionMatrixEditor the server's second write tier: at the environment door (no packageId), a code-declared (artifact-backed) permission set renders read-only unless allowOrgOverride, mirroring the server's NOT_OVERRIDABLE gate at protocol.ts:8888 and ResourceEditPage:1332's predicate.

The residue: the server's artifact gate only engages when the kernel has an environmentId (if (this.environmentId !== undefined)). On a single-kernel host that property is undefined, the server disengages the artifact tier entirely, and an env-scope edit of a code-declared set is accepted with 200 — while the editor now renders it read-only. Direction is conservative (an honest lock instead of a Save that would work), and nothing #4519 opened that was previously reachable regresses. But it is a real client/server divergence on that host class.

Why it could not be closed in #4518: the client cannot see the kernel's environment topology. useMetadataClient() takes no argument at all 30 app-shell call sites; MetadataClient bakes the scope into a private base with no getter; the only surface reporting the resolved environmentId is GET /discovery — a new server probe, which the card's ruling forbade.

Paths if triage wants it closed exactly (design decision, pick one):

  1. Plumb the resolved environmentId through MetadataClient / discovery into the editor, and disengage the client tier when it is undefined.
  2. Accept the conservative lock as permanent documented behavior for single-kernel hosts.

Refs: #4518, PR #4525, #4519, #4446. Filed unassigned for triage.


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions