GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — feat(site): manage project access from the project details panel by jaaydenh · Pull Request #31246 · coder/coder

Conversation

@jaaydenh

@jaaydenh jaaydenh commented Oct 24, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

Lets project owners and project admins manage who can access a chat project from the project page.

  • The Details panel button reads "Manage access" when the viewer can share the project (permissions.share), otherwise "View access". The dialog title follows.
  • In manage mode the dialog gets an add row (user or group picker, a Role select offering Member and Admin that defaults to Member and resets to it after each add, and an Add button that stays disabled until a user or group is picked). The picker has no nested clear control, and its accessible name includes the current selection. Each shared user and group gets a role select and a menu with Remove. Changes apply immediately through PATCH .../acl. The owner row and the viewer's own row stay read-only, and the picker never offers the owner, the viewer, or anyone already listed.
  • While a change saves, every row control and Add are disabled. Focus returns to the row's role select after a role change, to the row's menu after a failed remove, and to the picker after an add or a successful remove.
  • Failed changes show an alert above the table. A 403 explains the viewer can no longer change access, and after any change the project and its ACL refetch, so a viewer who lost admin (including by demoting a group they're in) drops to "View access" without a reload.
  • On phones each row stacks the name above its controls so names stay readable; the column headers stay available to screen readers.
  • Adds updateChatProjectACL to the API client and a single setChatProjectRole mutation for users and groups.

Dogfood UAT passed across ten rounds on a dev deployment, covering owner, admin and member views, every add/change/remove path with request bodies checked against GET .../acl, the pending, 403 and 500 states, focus targets at local speed and with a delayed save, keyboard use, and 320 to 1440px layouts. Not covered: adding a group through the picker, which needs a license; a group row was added through the API and edited in the UI.

Follow-ups left out to stay under the PR size limit: drop the useId wrapper around the dialog (re-indents ~80 lines), move the access mutation logic into a hook, and a story for the pending add state (next PR).

Manage access (owner) Phone layout
Manage access dialog with add row, role selects and row menus Manage access dialog at 375px with stacked rows

Stack (merge bottom first):

  • feat: include the owner in the chat project ACL response #31244
  • feat: show project members in the project details panel #31245
  • 👉 this PR
  • test(site): add a pending add story for the project access dialog #31247

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
jaaydenh added 20 commits October 24, 2026 05:07
@jaaydenh
feat(site): show project members in the project details panel
a2d3bc9
@jaaydenh
fix(site/src/pages/AgentsPage/components/ProjectPage): address member…
3f729aa
…s review findings
@jaaydenh
test(site/src/pages/AgentsPage/components/ProjectPage): type the acce…
6319455
…ss fixture and clarify the empty role
@jaaydenh
fix(site/src/pages/AgentsPage/components/ProjectPage): address member…
760277a
…s UAT findings

Sort users and groups by name so the avatar row and dialog keep a stable
order, cap tooltip width on narrow screens, hide ErrorAlert debug details,
fill the row when exactly eight entries fit, give the +K tile a tooltip,
make avatar tiles keyboard focusable, and refetch access when the dialog
opens.
@jaaydenh
feat(site): manage project access from the project details panel
6c2fec3
@jaaydenh
fix(site): address manage access UAT findings
256c6d5
@jaaydenh
fix(site): fit the manage access table on phones
8e9d08a
@jaaydenh
test(site): tighten project members tests
ace00da
@jaaydenh
refactor(site): simplify manage access mutations and address review
81a74d8
@jaaydenh
Merge branch 'chat-project-access/members-summary' into chat-project-…
ee2e029
…access/manage-access
@jaaydenh
fix(site): keep focus on the changed access row
5b294b9
@jaaydenh
feat: include the owner in the chat project ACL response
bcccfbd
@jaaydenh
Merge branch 'chat-project-access/owner-in-acl' into chat-project-acc…
e74cb8d
…ess/members-summary
@jaaydenh
feat(site): show the project owner from the ACL response
d58f3bf
@jaaydenh
fix(site): address project members review and UAT findings
d0b3fbc
@jaaydenh
test(site): cover the unknown project owner label
bed59f1
@jaaydenh
Merge branch 'chat-project-access/members-summary' into chat-project-…
1efb092
…access/manage-access

# Conflicts:
#	site/src/pages/AgentsPage/components/ProjectPage/ProjectAccessDialog.tsx
#	site/src/pages/AgentsPage/components/ProjectPage/ProjectDetailsPanel.test.tsx
#	site/src/pages/AgentsPage/components/ProjectPage/ProjectDetailsPanel.tsx
@jaaydenh
fix(site): address project members CI and review findings
1d56b98
@jaaydenh
Merge branch 'chat-project-access/members-summary' into chat-project-…
923fda4
…access/manage-access
@jaaydenh
feat(site/src/api): add the chat project ACL update client
59ed106
@github-actions github-actions Bot assigned jaaydenh Oct 24, 2026
@jaaydenh

jaaydenh commented Oct 24, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 24, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-24T18:01:46.743451Z 6a69e3f Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

chatgpt-codex-connector[bot]
chatgpt-codex-connector Bot reviewed Oct 24, 2026
View reviewed changes

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 59ed106b62

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread site/src/pages/AgentsPage/components/ProjectPage/ProjectAccessDialog.tsx Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread site/src/pages/AgentsPage/components/ProjectPage/ProjectAccessDialog.tsx Resolved

Uh oh!

There was an error while loading. Please reload this page.

jaaydenh added 3 commits October 24, 2026 15:22
@jaaydenh
fix(site): address project members Codex review
a11212b
@jaaydenh
Merge branch 'chat-project-access/members-summary' into chat-project-…
eba3e97
…access/manage-access

# Conflicts:
#	site/src/pages/AgentsPage/components/ProjectPage/ProjectAccessDialog.tsx
#	site/src/pages/AgentsPage/components/ProjectPage/projectAccess.ts
@jaaydenh
fix(site): address manage access Codex review
a86e682
@jaaydenh

jaaydenh commented Oct 24, 2026

Copy link
Copy Markdown
Contributor Author

@codex review

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

chatgpt-codex-connector[bot]
chatgpt-codex-connector Bot reviewed Oct 24, 2026
View reviewed changes

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a86e682337

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread site/src/pages/AgentsPage/components/ProjectPage/ProjectAccessDialog.tsx Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread site/src/pages/AgentsPage/components/ProjectPage/ProjectAccessDialog.test.tsx Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread site/src/pages/AgentsPage/components/ProjectPage/ProjectAccessDialog.stories.tsx Resolved

Uh oh!

There was an error while loading. Please reload this page.

@jaaydenh
refactor(site): share the chat project ACL fixture
5cc30fb
This was referenced Oct 24, 2026
test(site): add a pending add story for the project access dialog #31247
Merged
feat: include the owner in the chat project ACL response #31244
Merged
@jaaydenh
jaaydenh added this pull request to stack #31252 October 25, 2026 11:37
jaaydenh added 3 commits October 26, 2026 09:17
@jaaydenh
fix(site): tighten the project members row
c719f47
@jaaydenh
Merge branch 'chat-project-access/members-summary' into chat-project-…
a03f87a
…access/manage-access

# Conflicts:
#	site/src/pages/AgentsPage/components/ProjectPage/ProjectDetailsPanelView.tsx
@jaaydenh
fix(site): default the project access add role to member
d9ecccf
@linear-code

linear-code Bot commented Oct 26, 2026

Copy link
Copy Markdown

CODAGT-1464

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@f0ssel f0ssel mentioned this pull request Oct 26, 2026
docs(docs): add Coder Agents projects page #30684
Merged
@jaaydenh
jaaydenh marked this pull request as ready for review October 27, 2026 11:44
@jaaydenh
jaaydenh requested a review from a team as a code owner October 27, 2026 11:44
f0ssel added a commit that referenced this pull request Oct 28, 2026
@f0ssel
docs(docs): add Coder Agents projects page (#30684)
a135a34
Adds `docs/ai-coder/agents/projects.md`, a short page for Coder Agents
projects, linked under Coder Agents as early access.

The page covers:
- What a project provides.
- Ownership: organization-scoped, private to the creator, 100 per user,
audited.
- Creating, editing, and deleting projects.
- Adding chats to a project: project page, composer picker, **Move to
project**, drag onto a folder, and `PATCH /api/v2/chats/{chat}`.
- Instructions, with a link to the existing Project skills section for
skills.
- Memory: tools, behavior, limits, and the API.

It also links `extending-agents.md#project-skills` to the new page.

The page documents projects as early access with no experiment flag.
Merge it only once `chat-projects` no longer gates the feature. The
memory and skill APIs it mentions still live under `/api/experimental`.

Project sharing is left out until its UI lands (#31246, #31245).

Open PRs that will make parts of this page stale:
- #30683 changes project deletion.
- #30754, #30756, and #30898 add project templates.

> Generated by Coder Agents on behalf of @f0ssel.
jaaydenh added 3 commits October 29, 2026 09:35
@jaaydenh
Merge branch 'main' into chat-project-access/owner-in-acl
9c8d82e
@jaaydenh
Merge branch 'chat-project-access/owner-in-acl' into chat-project-acc…
c68d712
…ess/members-summary
@jaaydenh
Merge branch 'chat-project-access/members-summary' into chat-project-…
0498e00
…access/manage-access
@pr-queue-manager
pr-queue-manager Bot requested a review from DanielleMaywood October 30, 2026 06:20
DanielleMaywood
DanielleMaywood reviewed Oct 30, 2026
View reviewed changes
Comment thread site/src/pages/AgentsPage/components/ProjectPage/ProjectDetailsPanel.tsx Outdated

const runMutation = (mutate: (onSettled: () => void) => void) => {
if (isMutationInFlight.current) {
const runMutation = (

@DanielleMaywood DanielleMaywood Oct 30, 2026

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we need runMutation and the in-flight refs. Can we drop them and just rely on isPending disabling the controls?

I removed the guard and ran ProjectDetailsPanel.test.tsx. Only the two double-click tests that use userEvent.setup({ delay: null }) failed. When I gave those tests a delay of 0, 1, 16 or 50ms between clicks, they sent one request every time. All the access tests passed without the guard.

So the guard only matters when both clicks fire in the same JS task. A real double click doesn't do that. Even a setTimeout(0) gap is enough for isPending to flip and disable the button.

Keeping it also brings in the guarded resets (resetAccessErrors, onResetErrors), which are only needed because resetting a pending mutation drops its onSettled. It also isn't tested for access changes. And if a double submit ever did slip through, it would just send the same request twice.

At minimum, I'd rather not make it generic for access in this PR.

Generated by Coder Agents on behalf of @DanielleMaywood.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

jaaydenh reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

@jaaydenh jaaydenh Nov 4, 2026

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed runMutation

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
DanielleMaywood
DanielleMaywood reviewed Oct 30, 2026
View reviewed changes
Comment thread site/src/pages/AgentsPage/components/ProjectPage/ProjectAccessDialog.tsx Outdated
Comment on lines +224 to +225
// Returns focus to the add row after saving a change drops it.
const focusById = (id: string) => document.getElementById(id)?.focus();

@DanielleMaywood DanielleMaywood Oct 30, 2026

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

uhhhhh.... what?

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

jaaydenh reacted with confused emoji
All reactions
  • 😕 1 reaction

@jaaydenh jaaydenh Nov 4, 2026

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fixed

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
DanielleMaywood
DanielleMaywood reviewed Oct 30, 2026
View reviewed changes
Comment thread site/src/pages/AgentsPage/components/ProjectPage/ProjectAccessDialog.tsx Outdated
Comment on lines +98 to +100
export const ProjectAccessDialog: React.FC<ProjectAccessDialogProps> = (
props,
) => <ProjectAccessDialogContent {...props} addTriggerId={useId()} />;

@DanielleMaywood DanielleMaywood Oct 30, 2026

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This wrapper only exists to call useId(), and it calls it inside JSX props, which is easy to miss. It also adds a second component and a second props type.

Can we give ProjectAccessDialog a block body and call useId() at the top instead? The PR description says this was left out to avoid re-indenting ~80 lines. I don't think that's worth the extra layer, and a re-indent is easy to review with whitespace hidden.

Generated by Coder Agents on behalf of @DanielleMaywood.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

jaaydenh reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

@jaaydenh jaaydenh Nov 4, 2026

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

simplified so addTriggerId={useId() isnt needed anymore

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
jaaydenh added a commit that referenced this pull request Nov 3, 2026
@jaaydenh
feat: include the owner in the chat project ACL response (#31244)
820689d
The chat project ACL response now includes the project's owner, so the
project page can show who owns a project to everyone who can read it.

`GET
/api/experimental/organizations/{organization}/chats/projects/{project}/acl`
returns a new `owner` field (`MinimalUser`). The owner is never in
`users`, and `GET /api/v2/users/{id}` returns 404 to regular
organization members, so project members and project admins currently
see the owner as "Unknown". The handler loads the owner with a
system-restricted context after the existing read and sharing-disabled
checks, matching how it already loads shared users and groups.

`TestChatProjectSharing/User` and `/Admin` now check the owner as seen
by the owner, a `use` sharee and an `admin` sharee, and that both
sharees still get 404 from the users endpoint. Dogfood UAT on a dev
deployment confirmed the field for all three callers, no owner data for
callers without access (404), and the unchanged 403 when chat sharing is
disabled.

Stack (merge bottom first):
- 👉 this PR
- #31245
- #31246
- #31247
Base automatically changed from chat-project-access/members-summary to main November 4, 2026 08:07
jaaydenh added a commit that referenced this pull request Nov 4, 2026
@jaaydenh
feat: show project members in the project details panel (#31245)
e26c193
Adds a members section to the chat project Details panel and a read-only
"View access" dialog.

- The Details card gets a members section at the bottom: "N members[, G
groups]" (the owner plus directly shared users; groups are counted
separately), a row of avatars with name tooltips, and a "View access"
button. The row shows as many avatars as fit the card's width (up to
eight) and ends with a "+K" tile for the rest; its tooltip lists up to
ten hidden names and "and N more". Member tooltips let clicks through,
so they never block the button.
- The dialog lists the owner first with an Owner badge, then shared
users and groups (sorted naturally by name) with their role. The `use`
role shows as "Member" and `admin` as "Admin". A footnote explains that
chats in the project start private.
- The owner's name and avatar come from the new `owner` field on the ACL
response (#31244), so project members and admins see the real owner in
the "Project owner" row too, instead of "Unknown".
- The section is hidden when chat sharing is disabled (the ACL endpoint
returns 403). Loading shows skeletons; other errors show an alert with
Retry in both the panel and the dialog.
- Adds `getChatProjectACL` to the API client and a `chatProjectACL`
query. Editing access comes in #31246.

Dogfood UAT passed on a dev deployment: owner, `use` and `admin` viewers
all see the owner and the same members list with no users requests,
counts and "+K" overflow are correct, the row fits the card from 320 to
1440px with the sidebar open or collapsed, tooltips never swallow the
button click, the section hides with `--disable-chat-sharing`, and ACL
errors recover with Retry.

| Members section (member's view) | View access dialog |
| --- | --- |
| <img alt="Details panel with the members section, as a project member"
src="https://raw.githubusercontent.com/coder/coder/assets/pr-31245-project-members/pr/members-section.png"
width="600" /> | <img alt="View access dialog listing owner, admin,
member and Everyone"
src="https://raw.githubusercontent.com/coder/coder/assets/pr-31245-project-members/pr/view-access-dialog.png"
width="600" /> |

Stack (merge bottom first):
- #31244
- 👉 this PR
- #31246
- #31247
jaaydenh added 4 commits November 4, 2026 08:54
@jaaydenh
chore: replace focusbyid
ee4769c
@jaaydenh
Merge commit 'e26c1934a5f^' into resolve-31246
afe88cb
@jaaydenh
Merge branch 'main' into chat-project-access/manage-access
2779f40
@jaaydenh
chore: remove runMutation
600d3ce
@jaaydenh
jaaydenh requested a review from DanielleMaywood November 4, 2026 09:55
DanielleMaywood
DanielleMaywood approved these changes Nov 4, 2026
View reviewed changes
@jaaydenh
jaaydenh merged commit b60c20a into main Nov 4, 2026
26 of 27 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@jaaydenh
jaaydenh deleted the chat-project-access/manage-access branch November 4, 2026 12:49
@github-actions github-actions Bot locked and limited conversation to collaborators Nov 4, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Reviewers

@chatgpt-codex-connector chatgpt-codex-connector[bot] chatgpt-codex-connector[bot] left review comments
@DanielleMaywood DanielleMaywood DanielleMaywood approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@jaaydenh jaaydenh

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

2 participants

@jaaydenh @DanielleMaywood
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.