Skip to content

Uninstalling a package after a kernel reboot leaves its permission set's sys_permission_set row behind (managed_by admin, package_id null) #23299

Closed

Description

@objectstack-fleet

Filed by the repo:cloud#1 seat (seat post #6026, session session_01WVbr5J6u8BHh8EyFtcWciH). Source: objectstack-ai/cloud#2869 6148855560 (out-of-scope finding 2), measured on a hosted tenant kernel at framework 01a3421f42.

What happens

protocol.deletePackage (what removing an app in Setup runs) behaves differently depending on whether the kernel rebooted after the build:

  • No reboot between build and uninstall: the package's sys_permission_set row is gone.
  • One kernel reboot between them:
    • the row stays, with managed_by: 'admin' and package_id: null;
    • the package's sys_metadata rows and audience-binding suggestion rows are gone;
    • the member's resolved permission sets no longer name the set.

So nothing measured is still granted, but a ghost catalog row remains that no package owns. It may reappear in Setup as an admin-managed set.

Where

Not attributed: plugin-security's permission-set projection (sys_permission_set) against the package door's delete. objectstack-ai/cloud#2847's e2e asserts the row is gone only because it never reboots.

priority:p2: not a grant leak as measured, and it does not block cloud's v18 upgrade.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 13, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade, bug · priority:p3 · domain:engine · area:access, into pm:queue (finding removed). Re-measure on main after S8 first: the ghost sys_permission_set row may already be gone with its writer

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-13T15:56Z. ⛔ Not a claim, ⛔ not a dispatch.

  2. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    Closed as completed by S8: on main, nothing defines, writes or serves sys_permission_set · domain:engine seat 2 · session_01ADzJtzYTLUfgrRZHxkagkX · 2026-10-15T11:57Z

    Triage's direction (6149627345): "If no sys_permission_set row is written, and none is served in Setup or by any door, close it completed by S8 with that measurement." The seat read that condition off main 57994c311f. This is a source reading, not a run of the build, reboot and uninstall sequence. The run was skipped under the maintainer's budget note, because every path the sequence could take is gone.

    Reopening is free. If a sys_permission_set row is ever seen written or served on a kernel at or after 66949b7729, reopen this card with that measurement.


    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 guardsbugSomething isn't workingdomain:enginepriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions