Skip to content

feat(console): move Share Agent into an Access tab - #2999

Merged
freeqaz merged 6 commits into
mainfrom
ux-p6
Oct 20, 2026
Merged

freeqaz merged 6 commits into
mainfrom
ux-p6

Conversation

@freeqaz

@freeqaz freeqaz commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Share Agent sat on the Agent overview, between the facts and the version tabs, on every visit. It took 136 words above the tabs and pushed Deploy down. Sharing is an occasional administration task, not the page's main job (UX plan D1, spec 3.8). The page disclosure's "Listed bindings…" sentence also showed on every tab, although it describes only the sharing list (finding 2091).

Change

Share Agent moves, unchanged in content and authorization, to a new Access tab (UX spec row P6).

  • navigation.mjs: access is a valid tab=, so a link to it survives sign-in.
  • agents/detail.mjs:
    • Access is the last tab in every version's strip (draft and versions), with an "Agent access" heading like Workspace files.
    • It is left out (hidden, not disabled) when the session probe already showed no Installation administration, as the panel was before.
    • A refused policy read (probe inconclusive) hides the tab and opens Configuration in place, matching the old "hide rather than show an error".
    • The overview no longer reads sharing policy; the tab reads it when first opened.
    • The panel is built once per page with the page's context, so a share in flight finishes across tab switches, as it did on the overview.
  • agents/access.mjs: same text, fields, grants, buttons and requests. The section is two cards (Share Agent, Direct Agent grants) and the recipients notice is an info status block labelled "What sharing grants" (spec 3.8). The region is still named "Share Agent". Share Agent stays secondary and Remove binding stays danger (finding 1967).
  • console.css: the bindings sentence in the disclosure shows only while the sharing panel shows, which is now only on the Access tab (finding 2091).
  • Old links: detail URLs without tab=access open the overview as before; tab=access for someone without the tab falls back to Configuration.
  • Docs and Storybook: the sharing guide, reference and flow now point to the Access tab; the sharing stories open tab=access.

Not built from the mockup, to keep this a move: the grants table (Person / Access / Granted columns, ghost Remove). It would change what the list shows (no "Granted" date is read today) and the Remove tone.

Verification

Acceptance (spec row P6, measured with shots.mjs / the P5 word script on Storybook, main 6c5bbd6ff vs this head):

Measure main #2999
tab=access renders Share Agent no (not a tab) yes, last tab, draft and versions
"Share Agent" heading on the overview 1 0
Words above the tabs, draft page 280 (294 before P5) 144 (−51 % vs 294, −49 % vs 280)
Words above the tabs, failed page 433 297 (−31 %)
Draft page height / deployTop, 1440x900 2575 / 1615 1864 / 903
Draft page height / deployTop, 390x844 3774 / 2468 2834 / 1527
Policy reads on an overview visit (admin) 2 0 (2 when Access opens)
"Listed bindings…" sentence in the open disclosure every tab Access tab only

P7 still owns deployTop < 900 (the next-step card).

Media (Storybook, before = main, after = this head; secret gist https://gist.github.com/freeqaz/ef9f7c6a504bfa8f7cea76417d2c9d48). Stories: Pages / Agent detail / Share an Agent (now tab=access), Agent shared, Direct Agent grant removed, Sharing administration denied, Sharing outcome uncertain, Share Agent required fields.

Before: overview with Share Agent (1440) After: overview (1440)
before-overview-1440 after-overview-1440
After: Access tab (1440) Mockup (1440)
after-access-tab-1440 mockup-access-1440
Before (390) After: overview (390) After: Access tab (390)
before-overview-390 after-overview-390 after-access-tab-390

Tests

  • Every existing sharing test now opens tab=access with its assertions unchanged: grants and removal, truncated response, email/unknown Principal, exact Roles, rejected-write reason, form disabled while loading, Refresh sharing focus, required fields, refusal status blocks, session-expiry refocus, deployment polls keeping Share Agent in place.
  • New or extended:
    • Share Agent is on the Access tab, not the overview: strip order ends with Access, no Share Agent heading and no /iam/ request on the overview, the panel inside the tab panel after a click, and a tab=access link opening there after sign-in.
    • The stat-row test checks the bindings sentence is hidden on Configuration and shown on Access (finding 2091).
    • hides sharing … to non-administrators opens tab=access with refused policy reads: no error, the tab is hidden and Configuration opens.
    • The recipient (non-administrator) test checks there is no Access tab and a tab=access link opens Configuration.
    • The keyboard tablist test walks to Access at End and on wrap; with the tab hidden, End and wrap stop at Policy denials.
    • A share in flight finishes across a tab switch: the namespace binding POST is held, the reader opens Plugins, the write is released, and back on Access the share has finished with each grant written once.
    • The disclosure test opens tab=access with refused reads: the bindings sentence stays hidden, the page ends on Configuration, and each policy read is asked once.
  • All of those fail on main's sources (this head's test files run on main 6c5bbd6ff: 0/5, then 0/3 for the review additions).
  • All 38 tests/browser/console*.test.mjs files: 789/789 on 02677e096, 790/790 after merging main (fae0cfd84, with feat(console): Settings with Sign out and session facts #2996, fix(console): say email in the failed sign-in message #2997, test(console): resolve the drawer focus target again when a render detaches it #3000), and 798/798 after merging main again (4bbfae04f, with fix(console): let members with agent:create use the create form #2998, fix(console): offer Create Namespace again after Refresh #3002, fix(console): keep the new version notice in view on Edit current #3004).
  • The 26 moved and new sharing/Access tests: 20/20 runs at 2 CPUs (520/520).
  • Reviews: internal access-path review approved with nits (all applied: focus on a refused read, two tests, stale comments). Visual review against the mockup: ship with nits (applied: card titles at --text-lg semibold, 24 px between the cards, Refresh sharing as a small secondary button). Not applied: making Share Agent full-width and re-classing its button (pre-existing, left for P12).

Risks

Low; console only, no IAM or server change. The Access tab issues the same two policy reads and writes as before, only when opened, so admins who never open it cause no sharing reads. The panel is kept per page, so returning to the tab shows the last read (as the overview panel did); Refresh sharing reads again.

Open-PR conflict map (git merge-tree of this head and of origin/main against every open PR touching these files): #2998, #2982, #2980, #2979, #2971, #2833, #2524, #2518, #2505, #2502, #2445, #2258, #2255, #2253, #1619 and #1605 have the same conflict set as against main (#2996 and #2997 have since landed and are merged in). Two gain a hunk that a move cannot avoid: #2596 (one hunk: it keeps the overview renderAgentAccess line this PR removes) and #906 (it edits the sharing panel itself; new hunks in access.mjs, detail.mjs, the sharing flow doc and one sharing test). An edit to the Storybook keyboard walk's stale last-tab line would have conflicted with #2518, which rewrites that line, so this PR leaves the file alone.

Share Agent leaves the Agent overview for an Access tab, last in every
version's strip (UX spec 3.8, plan D1). The panel shows the same text,
grants and controls; it is now two cards (Share Agent, Direct Agent
grants) with the recipients notice as an info status block.

- The tab is left out when the session probe showed no Installation
  administration, as the panel was; a refused policy read hides it and
  opens Configuration.
- tab=access is a valid sign-in destination; old links without it open
  the overview as before.
- The panel is built once per page with the page's context, so a share
  in flight finishes across tab switches.
- The listed-bindings sentence in the page disclosure shows only on the
  Access tab (finding 2091).
- Sharing tests open tab=access; the stat row test checks the bindings
  sentence per tab; a new test pins the tab, the strip order and that
  the overview reads no sharing policy.
The keyboard tablist test walks to Access at End and on wrap; the
Storybook keyboard walk names Access as the last tab.
@freeqaz
freeqaz requested a review from a team as a code owner October 20, 2026 04:00
@clawsweeper

clawsweeper Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

…denial

Review follow-ups for the Access tab:
- Card titles use the large text size and semibold weight; the two
  cards are 24 px apart, as the overview's cards are.
- Refresh sharing is a small secondary button, aligned with the card
  text.
- A refused policy read while the Access tab has focus moves focus to
  Configuration's tab instead of the page.
- Tests: the disclosure test opens tab=access with refused reads and
  checks each read is asked once; the hidden tab is skipped by the arrow
  keys; a share in flight finishes across a tab switch with each grant
  written once.
- Two stale comments no longer place Share Agent on the overview.
@clawsweeper

clawsweeper Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

ClawSweeper status: review started.

I am starting a fresh review of this pull request: feat(console): move Share Agent into an Access tab This is item 1/1 in the current shard. Shard 0/1.

This temporary status tracks the active review worker. The completed review will appear in the durable ClawSweeper review comment.

Crustacean status: shell secured, claws on keyboard, evidence pebbles being sorted.

@clawsweeper clawsweeper Bot added the clawsweeper:intake:feature Preliminary submission classification; full source review pending. label Oct 20, 2026
#2518 rewrites the same stale line; editing it here would add a
conflict hunk to that PR. The step's tab name is updated there or in a
follow-up.
@freeqaz

freeqaz commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed clawsweeper:intake:feature Preliminary submission classification; full source review pending. labels Oct 20, 2026
@clawsweeper

clawsweeper Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge.

What this changes

This PR moves Agent sharing from the overview into an administrator-only Access tab.

Example: An Installation administrator opens the Research assistant Agent.

  • Before: Share Agent appears above the version controls on every visit.
  • After: Sharing appears when Access opens, and the overview makes no sharing-policy requests.

Review scores

Measure Result What it means
Overall readiness 🦐 gold shrimp (3/6) The patch is focused and supported by useful browser coverage; inspectable screenshots provide partial UI proof.
Proof confidence 🦐 gold shrimp (3/6) Real behavior proof is not required for maintainer- or bot-authored pull requests.
Patch quality 🐚 platinum hermit (4/6) No actionable review findings were identified.

Product

Kind: Feature · Worth it: Yes · Fix scope: Complete
User problem: An occasional sharing task occupies the Agent overview and pushes deployment controls farther down the page.
Reason: The maintainer-authored direction improves the regular Agent workflow while retaining the existing sharing contract.

Merge readiness

✅ Ready for maintainer review

Keep this PR open: it delivers a focused, maintainer-directed console improvement, and review found no concrete introduced bug.

Priority: P3
Reviewed head: 4bbfae04f7f843d1544837fff8ea4a4000d54b09

Before merge

None.

Findings

None.

Tests

  • Missing end-to-end proof: Supply the required short walkthrough of opening Access and using its controls, with screenshots and video uploaded as native GitHub attachments.
Agent review details

How this fits together

The console renders Agent details and sends sharing requests to the existing Namespace IAM API; this change moves the presentation while preserving grants, removal, and server authorization.

flowchart TB
  A[Agent detail] --> B[Overview]
  A --> C[Access tab]
  C --> D[Existing sharing panel]
  D --> E[Namespace IAM API]
  E --> F[Roles and bindings]
Loading

Technical review

Best possible solution:

Land the focused Access-tab move with the existing sharing and authorization owners preserved.

Do we have a high-confidence way to reproduce the issue?

This is a navigation improvement; base source and inspected screenshots confirm that sharing currently occupies the overview.

Is this the best way to solve the issue?

Reusing the existing panel inside the existing tab lifecycle is a focused solution, with meaningful coverage for delayed reads and writes.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against 49c949700d64.

Provenance checked

  • Sharing placement and presentation changes intended behavior with a stated reason (48930e0: Expose exact Agent discovery and native-administration grants to Installation administrators.)
  • Non-administrator policy probes keeps the original intent (19473c2: Avoid audited authorization denials from mounting administrator-only sharing controls.)
  • Keyboard tab navigation keeps the original intent (4e45875: Provide tablist semantics, one Tab stop, arrow navigation, and narrow-screen visibility.)
  • Sharing disclosure visibility keeps the original intent (6c5bbd6: Show the listed-bindings caveat only while its sharing panel is present.)

Testing

Proof path: in-process harness.

Security

None.

Evidence

What I checked:

Likely related people:

  • Free Wortley: Raw commit 48930e0 adds apps/controller/src/console/agents/access.mjs:32 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 48930e064782; files: apps/controller/src/console/agents/access.mjs)
  • kevinlin-openai: Raw commit 835b1cc adds apps/controller/src/console/agents/detail.mjs:84 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: medium; commits: 835b1cc9b775; files: apps/controller/src/console/agents/detail.mjs)

Labels

Label changes:

No label changes.

Label justifications:

  • P3: This is console navigation and layout polish that preserves existing server behavior.
  • rating: 🦐 gold shrimp: Overall readiness is 🦐 gold shrimp; proof is 🦐 gold shrimp and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.

Rating scale

6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

History

Review history (1 earlier review cycle)
  • reviewed 2026-10-20T05:10:50.665Z sha 010b287 :: needs maintainer review before merge. :: none

Reviewed October 20, 2026, 1:21 AM ET / 05:21 UTC (Revision 2).

@freeqaz

freeqaz commented Oct 20, 2026

Copy link
Copy Markdown
Collaborator Author

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added clawsweeper:intake:feature Preliminary submission classification; full source review pending. and removed clawsweeper:intake:feature Preliminary submission classification; full source review pending. labels Oct 20, 2026
@freeqaz
freeqaz merged commit 0212305 into main Oct 20, 2026
54 of 57 checks passed
@freeqaz
freeqaz deleted the ux-p6 branch October 20, 2026 05:37
freeqaz added a commit that referenced this pull request Oct 20, 2026
With Share Agent on its own tab (#2999) and the details folded, the error
shows once, on the card, and the version detail can start in the lower half
of the first screen at 1440. The recovery link tests now require only that it
starts outside the upper half, which their in-view check needs.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P3 Low-risk cleanup, docs, polish, ergonomics, or speculative feature. rating: 🦐 gold shrimp Decent PR readiness signal, but merge confidence is limited. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant