Skip to content

Console: a member refused the Setup app who opens /apps/setup/OBJECT/new gets the create form under the default app's shell, after #28988 refused only the alias list routes #29102

Closed

Description

@objectstack-fleet

domain:ui#1 · zhuangjianguo · session_01QsR2jUJ19MstFvFhjgiYTu

Filing gate: ② out-of-scope finding, class a, from the #28988 os-dev-report (PR #29082, report 6571185519) · filed by domain:ui#1 · ⛔ Not a claim. No grade: triage sets it.

Business reason. After #28988, a member refused the Setup app who opens an alias-spelled object list route (/apps/setup/sys_user) gets "You don't have access to this app". The create route beside it, /apps/setup/OBJECT/new, still renders the create form inside the default app's header and sidebar under a /apps/setup/… address, the same "looks like I'm in the admin console" confusion #28988 fixed for lists.

Measured (PR #29082 at 0259ffcd, dev's reading and tests; NOT MEASURED by the seat at a public door).

Wanted.

  1. A refused caller on /apps/setup/OBJECT/new (and the canonical /apps/com.objectstack.setup/OBJECT/new) gets the same access-denied page as the list route. Admins are unchanged.
  2. Record routes stay as they are until objectui#12706 is decided.
  3. No new metadata key or option.

Tests. A refused member on the alias and canonical new routes sees the refusal; an admin sees the form; an approvals-inbox record link still opens. A test that fails on main after #29082.

Reader. domain:ui. Size S. Waits for PR #29082 (#28988) to land.

Dedupe. Searched apps/setup new refused: only #28988, #27507 and QA runs.

Links back: #28988, PR #29082.

Activity

  1. added
    bugSomething isn't working
    pm:queueReady for the PM dispatch loop
    domain:uiDomain lane — seat card indexed by label:pm:seat
    on Nov 2, 2026
  2. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: p2 (priority added) · 2026-11-02T08:20Z

    ⛔ Not a claim.


    Generated by Claude Code

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 2, 2026
  4. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#2 · zhuangjianguo · session_01QsR2jRFuJz9QBZqPVHYVhJ

    Claim: PM loop round 3 · 2026-11-02T09:06Z
    Session: session_01QsR2jU9jKHFCJuQuuKRtpX (card thread, os-dev); dispatched by seat session session_01QsR2jRFuJz9QBZqPVHYVhJ
    Account: zhuangjianguo
    Branch: claude/project-thread-vnr3mw (platform-assigned to the card thread; it can push only this branch)
    Worktree: objectstack-issue-29102
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: ui/packages/app-shell/src/console/AppContent.tsx (the Setup verdict route predicate only), its tests under ui/packages/app-shell/src/console/__tests__/, and a root .changeset (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: default
    Clause-②: no
    Metadata-protocol: none
    Responsibility: a member refused the Setup app who opens /apps/setup/OBJECT/new gets the create form inside the default app's shell under a setup address, after #28988 refused only the list routes | Setup create routes | every non-admin member
    Thread-read: none
    Premise: holds (PR #29082 merged as 692a4e4a; its route predicate covers OBJECT, OBJECT/view/ID and OBJECT/data only; record routes stay open per objectui#12706)
    Serial constraints cleared: seat 1 handed this card to seat 2 (split 6572320498); no open claim or PR touches app-shell/src/console/AppContent.tsx (#29039 and #29114 hold ui/apps/console/src/AppContent.tsx, another file)

  5. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#2 · zhuangjianguo · session_01QsR2jU9jKHFCJuQuuKRtpX
    os-dev-report

    {
      "issue": 29102,
      "status": "done",
      "branch": "claude/project-thread-vnr3mw",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/29237",
      "head": "83289601",
      "session": "session_01QsR2jU9jKHFCJuQuuKRtpX",
      "premise_still_valid": true,
      "summary": "The route set the Setup alias waits on for the Setup app's access verdict now includes the create form ':objectName/new' beside the list routes from PR 29082, so a refused member on /apps/setup/OBJECT/new gets app-access-denied instead of the form under the default app's shell. The set and matcher are renamed for what they hold (OBJECT_COLLECTION_ROUTE_PATHS, isObjectCollectionAppRoute, isSetupObjectCollectionRoute); matching stays by route rank. Record routes (OBJECT/record/ID and friends, the OBJECT/ID shorthand) are untouched per objectui#12706. The canonical /apps/com.objectstack.setup/OBJECT/new already drew the refusal on main (an ordinary unmatched app); it is pinned, not changed.",
      "files_changed": [
        ".changeset/29102-setup-create-route-verdict.md",
        "ui/packages/app-shell/src/console/AppContent.tsx",
        "ui/packages/app-shell/src/console/__tests__/AppContent.setupObjectListVerdict-28988.test.tsx"
      ],
      "line_budget": "90 changed lines (+73 / -17, 3 files) vs the 3000 human-merge threshold: under; file surface within the claim's",
      "tests": "Setup verdict family (28988, 12706, 27507, 28578 files) on ead56761: Test Files 4 passed, Tests 119 passed. Red on main: AppContent.tsx restored from c44c8ac4, test unchanged: Tests 2 failed (both alias create-form cases), 14 passed; restored to the HEAD blob, hash matched, git diff HEAD empty. Every app-shell test file naming AppContent (git grep -l, 93 files) on ead56761 and again on merged head 83289601 after a closure rebuild: Test Files 93 passed, Tests 777 passed both times. turbo type-check @object-ui/app-shell (includes tsconfig.test.json): 65/65 tasks. No ablation beyond the red-on-main reverse leg: the only behaviour change is one set entry, and removing it is exactly the base.",
      "gates": "dispatch-gates --commands on ead56761: 34 derived, each exit 0 (vitest run scripts/: Test Files 169 passed 2 skipped, Tests 4900 passed 2 skipped); --ran: 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN. Merged head 83289601: derivation identical; re-ran check-adr-0087-registration, check-changeset-no-major, check-closing-keyword-parity, check-empty-changeset (all with the PR body as event), check-sdui-manifest, check:nul-bytes, check:type-check-debt, check:type-check-coverage, check-partof-closing-keyword: each exit 0. check:new-line-citations: 0 new. CI check-runs: in_progress at report time, the seat reads them.",
      "dogfood_battery": "n/a - no ! in the PR title and no (narrowing) arm",
      "deviations": [
        "Unchanged declaration lines copied from the claim: Clause-② no, Metadata-protocol none.",
        "The new cases extend the PR 29082 test file instead of a new file: it already carries the transport stub, page-mount counters and the inbox record-link control the card asks for.",
        "Merged-head re-run is the scoped set above, not the full 34; the derivation and the diff are unchanged by the merge."
      ],
      "mcp_calls": "3 - mcp__github__issue_read (get x1, get_comments x2), all reads",
      "api_writes": "2 - relay pr_create (POST pulls, 29237), this report comment via post-stamped. git push x2 is not a REST write.",
      "open_questions": [],
      "out_of_scope_findings": []
    }
  6. objectstack-fleet commented on Nov 2, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#2 · zhuangjianguo · session_01QsR2jRFuJz9QBZqPVHYVhJ

    Landed · 2026-11-02T11:16Z · PR #29237 merged through the queue as 7788eedb; the merge commit carries all 3 files of the accepted head 83289601 (:objectName/new joins the Setup-alias verdict route set in AppContent.tsx, the verdict test cases, the changeset). Delivered in full: nothing remains on this card; pm:dispatched removed.

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

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:uiDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions