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/src): add the chat project page by f0ssel · Pull Request #30379 · coder/coder

Conversation

@f0ssel

@f0ssel f0ssel commented Oct 5, 2026 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown
Member
  • Experiment (chat-projects). Third of four stacked PRs split out of feat: add chat project folders to the sidebar #29583.
  • Adds /agents/projects/:projectId: the new-chat page framed by the project, with the form locked to the project's organization and created chats joining the project. An "Edit project" button opens the project dialog.
  • The page remounts per project, so the create error, the pending state, and the edit dialog reset. A create still in flight opens its chat when it finishes, as it does from /agents. Drafts are scoped to the project.
  • New chat clears the plain /agents draft only when clicked on /agents itself. Clicking it from any other route (a project, a chat, settings, automations, board) keeps that draft; settings, automations, and board previously cleared it.
  • A project that isn't in the user's list shows "Project not found" once the list has refetched. A failed lookup shows a retryable error; a failed background refetch keeps the loaded project usable.
  • Stories for the loading, error, not-found, and loaded states live in AgentsPageLayout.stories.tsx.

Stack: #30377 → #30378 → this PR → #29583


Generated with Coder Agents on behalf of @f0ssel.

Sorry, something went wrong.

Uh oh!

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

All reactions
f0ssel added 3 commits October 5, 2026 18:23
@f0ssel
feat(site/src/pages/AgentsPage): add the chat project page
2bc038d
@f0ssel
feat(site/src): add the chat projects data layer and project dialog
b8bb0bc
@f0ssel
feat(site/src/pages/AgentsPage): lock the new-chat form to a project'…
f9b5713
…s organization
This was referenced Oct 5, 2026
feat(site/src): add the chat projects data layer and project dialog #30377
Merged
feat: lock the new-chat form to a project's organization #30378
Merged
@github-actions github-actions Bot assigned f0ssel Oct 5, 2026
@f0ssel f0ssel mentioned this pull request Oct 5, 2026
feat: add chat project folders to the sidebar #29583
Merged
@f0ssel

f0ssel commented Oct 5, 2026

Copy link
Copy Markdown
Member Author

/coder-agents-review

coder-agents-review[bot] reacted with rocket emoji
All reactions
  • 🚀 1 reaction

Sorry, something went wrong.

Uh oh!

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

@coder-agents-review

coder-agents-review Bot commented Oct 5, 2026 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown
Contributor

Chat: Review posted | View chat
Requested: 2026-10-05 21:54 UTC by @f0ssel

Review history
  • R1 (2026-10-05): 9 reviewers, 4 Nit, 1 P2, 10 P3, 12 P4, COMMENT. Review
  • R2 (2026-10-05), 4 Nit, 1 P2, 10 P3, 12 P4, COMMENT. Review
  • R3 (2026-10-05): 9 reviewers, 6 Nit, 1 P1, 1 P2, 11 P3, 18 P4, REQUEST_CHANGES. Review
  • R4 (2026-10-05): 9 reviewers, 7 Nit, 1 P1, 1 P2, 11 P3, 25 P4, COMMENT. Review
  • R5 (2026-10-05): 9 reviewers, 8 Nit, 1 P1, 1 P2, 12 P3, 27 P4, COMMENT. Review
  • R6 (2026-10-05): 7 reviewers, 9 Nit, 1 P1, 1 P2, 12 P3, 31 P4, COMMENT. Review
  • R7 (2026-10-05): 8 reviewers, 9 Nit, 1 P1, 1 P2, 13 P3, 32 P4, COMMENT. Review
  • R8 (2026-10-05): 6 reviewers, 9 Nit, 1 P1, 1 P2, 13 P3, 34 P4, COMMENT. Review
  • R9 (2026-10-05): 5 reviewers, 9 Nit, 1 P1, 1 P2, 13 P3, 34 P4, APPROVE. Review

deep-review v0.13.0 | Round 9 | eb8a483..1277fc4

Last posted: Round 9, 58 findings (1 P1, 1 P2, 13 P3, 34 P4, 9 Nit), APPROVE. Review

Finding inventory

Finding inventory: PR #30379

Findings

# Sev Status Location Summary Round Reviewer Posted
CRF-1 P2 Author fixed (30fd661) router.tsx:899 PR title scope does not contain site/src/router.tsx; title check fails R1 Netero Yes
CRF-2 P3 Author fixed (30fd661) AgentCreatePage.tsx:123 No test for project-scoped create error R1 Netero Yes
CRF-3 P3 Author fixed (b684e19) AgentCreatePage.tsx:112 No test for cached project surviving failed refetch R1 Netero Yes
CRF-4 P3 Author fixed (b684e19) AgentCreatePage.tsx:446 isCreating reads unscoped createMutation.isPending R1 Netero, Mafuuu R3 Yes
CRF-5 P3 Author fixed (b684e19) AgentCreatePage.tsx:402 New page states have no Storybook story R1 Netero Yes
CRF-6 P4 Author fixed (30fd661) AgentCreatePage.tsx:480 No test for updateProjectMutation.reset() on dialog open R1 Netero Yes
CRF-7 P4 Author fixed (30fd661) AgentCreatePage.test.tsx:179 Wrapper and file-level mocks duplicate renderWithAuth and leak into old tests R1 Netero Yes
CRF-8 Nit Author fixed (30fd661) AgentCreatePage.test.tsx:65 Deleted comment explaining AgentPageHeader mock R1 Netero Yes
CRF-9 Note Note (body) router.tsx:899 New route has no in-tree links until #29583 R1 Netero No
CRF-10 P3 Author fixed (30fd661) AgentCreatePage.tsx:108 Stale cached project list redirects an existing project to /agents R1 Nami, Mafuuu, Knov Yes
CRF-11 P3 Author fixed (30fd661) AgentCreatePage.tsx:247 Missing project redirects to /agents with no message R1 Leorio P3, Nami P4 Yes
CRF-12 P4 Author fixed (30fd661) AgentCreatePage.tsx:419 Loading project loader lacks flex-1, layout jumps R1 Nami Yes
CRF-13 P3 Author fixed (30fd661) AgentCreatePage.tsx:120 Per-value project scoping instead of remounting page per projectId R1 Pariston Yes
CRF-14 P3 Author fixed (30fd661) AgentCreatePage.test.tsx:584 No test asserts project header, saved edit, or dialog close R1 Bisky Yes
CRF-15 P4 Author fixed (30fd661) AgentCreatePage.test.tsx:332 Flag-disabled test passes regardless of the flag R1 Bisky Yes
CRF-16 P4 Author fixed (30fd661) AgentCreatePage.test.tsx:326 organization_id assertion only checks the stub R1 Bisky Yes
CRF-17 P4 Author fixed (30fd661) AgentCreatePage.test.tsx:488 History navigation test timed out once in 7 runs R1 Bisky Yes
CRF-18 P3 Author fixed (30fd661) AgentCreatePage.tsx:403 Lookup error alert title does not say the project failed to load R1 Leorio Yes
CRF-19 P4 Author fixed (30fd661) AgentCreatePage.test.tsx:425 Hand-rolled deferred promise instead of Promise.withResolvers R1 Ging-TS Yes
CRF-20 P3 Author fixed (30fd661) AgentCreatePage.test.tsx:83 AgentCreateForm mock comment out of date R1 Gon P2 Yes
CRF-21 P4 Author fixed (4d5db6e) AgentCreatePage.test.tsx:316 Test comment duplicates production comment R1 Gon P2 Yes
CRF-22 P4 Author fixed (30fd661) AgentCreatePage.tsx:106 isProjectMissing comment repeats chatProject doc R1 Gon P2 Yes
CRF-23 P4 Author fixed (30fd661) AgentCreatePage.tsx:109 projectLookupError comment restates condition R1 Gon P2 Yes
CRF-24 P4 Author fixed (30fd661) AgentCreatePage.tsx:118 createError comment restates ternary R1 Gon P2 Yes
CRF-25 P4 Author fixed (b684e19) AgentCreatePage.tsx:417 Loader comment states what before why R1 Gon P2 Yes
CRF-26 Nit Author fixed (30fd661) AgentCreatePage.test.tsx:69 realForm comment uses vague "composer" R1 Gon P2 Yes
CRF-27 Nit Author fixed (30fd661) AgentCreatePage.test.tsx:68 mountedLockedOrganizationIds records renders, not mounts R1 Gon Yes
CRF-28 Nit Author fixed (30fd661) AgentCreatePage.tsx:470 isEditing and closeDialog name one state two ways R1 Gon Yes
CRF-29 Note Author fixed (30fd661) AgentCreatePage.tsx:402 Form key="draft" carries draft text across projects R1 Nami No
CRF-30 P4 Author fixed (b684e19) AgentCreatePage.tsx:413 Stale list plus failed refetch shows Project not found instead of retryable error R3 Netero Yes
CRF-31 P4 Author fixed (4188f73, b684e19) AgentCreatePage.tsx:459 No test covers the page passing draftScope R3 Netero Yes
CRF-32 P1 Author fixed (b684e19) AgentCreatePage.tsx:125 isProjectMissing true on /agents when project list is cached; composer replaced by Project not found R3 Pariston Yes
CRF-33 P4 Author fixed (b684e19) AgentCreatePage.test.tsx:359 Prefill hold test never has the project pending R3 Bisky Yes
CRF-34 P3 Author fixed (b684e19) AgentCreatePage.tsx:94 Remount comment omits that the key re-locks the form's organization R3 Gon Yes
CRF-35 P4 Author fixed (b684e19) ProjectComposerFooter.tsx:13 Doc comment restates the component name R3 Gon P2 Yes
CRF-36 P4 Author fixed (b684e19) AgentCreatePage.test.tsx:68 Mock comment first clause restates the ternary R3 Gon P2 Yes
CRF-37 Nit Author fixed (b684e19) AgentCreatePage.tsx:122 selectedProject names a project nothing selects R3 Gon Yes
CRF-38 Nit Author fixed (b684e19) AgentCreatePage.test.tsx:141 renderProjectPage also renders the plain page R3 Gon Yes
CRF-39 Note Note (body) commit 4d5db6e Commit subject stops mid-phrase; disappears at squash merge R3 Leorio No
CRF-40 P4 Author fixed (b684e19) AgentCreatePage.tsx:98 Remount key "default" collides with /agents/projects/default R3 Knov Yes
CRF-41 OOS Out of scope (body) AgentCreateForm.tsx:602 lint:compiler fails on base branch file R3 Ging-React No
CRF-42 OOS Out of scope (body) coderd/chat_projects.go:148 No single-project lookup by ID alone; frontend infers missing from list R3 Pariston No
CRF-43 OOS Out of scope (body) AgentCreatePage.tsx:376 Plain /agents create in flight navigates after leaving; predates PR R3 Mafuuu No
CRF-44 P4 Author fixed (b9f3f88) AgentsPageLayout.stories.tsx:1110 New project page stories assert nothing; loaded project page has no story R4 Netero Yes
CRF-45 Note Note (body) ProjectComposerFooter.stories.tsx:17 EditDialogOpen clicks but asserts nothing about the dialog R4 Netero No
CRF-46 P4 Author fixed (8fa8a8b) AgentCreatePage.tsx:95 Create on A failing after switching to B drops the error and the draft; comment covers only success R4 Mafuuu Yes
CRF-47 P4 Author fixed (8fa8a8b) AgentCreatePage.tsx:94 Remount comment credits outer key with resetting the dialog, which the form's own key does R4 Gon P2 Yes
CRF-48 Nit Author fixed (8fa8a8b) AgentCreatePage.test.tsx:64 MockAgentCreateFormProps is the real form's props type R4 Gon Yes
CRF-49 P4 Author fixed (PR description edit) AgentCreatePage.tsx:94 PR description says no mutation state carries over, contradicting kept in-flight navigation R4 Leorio Yes
CRF-50 P4 Author fixed (8fa8a8b) ProjectComposerFooter.tsx:38 onOpenChange wrapper and closeDialog repeat a guard the dialog already applies R4 Zoro Yes
CRF-51 P4 Author fixed (8fa8a8b) AgentCreatePage.tsx:256 Flag-off redirect runs after all content hooks instead of in the wrapper R4 Zoro Yes
CRF-52 P4 Author fixed (8fa8a8b) AgentCreatePage.test.tsx:125 enableChatProjects duplicates enableExperiment R4 Zoro Yes
CRF-53 OOS Out of scope (body) AgentCreateForm.tsx:711 submitDraft deletes the stored draft before the create resolves R4 Mafuuu No
CRF-54 OOS Out of scope (body) ChatProjectDialog.tsx:58 onOpenChange typed boolean but only ever called with false R4 Zoro No
CRF-55 Note Dropped by orchestrator (subsumed by CRF-52, which renames enableExperiment) AgentCreatePage.test.tsx:155 enableExperiment name does not say which experiment R4 Gon No
CRF-56 Note Note (body) commit b684e19 Commit subject is 85 characters; disappears at squash merge R4 Leorio No
CRF-57 P3 Author fixed (b9f3f88) AgentCreatePage.test.tsx:95 Stub computes projectId itself, so no test checks the real form sends the project ID R5 Bisky Yes
CRF-58 P4 Author fixed (b9f3f88) AgentCreatePage.tsx:429 Retry gives no feedback on the stale-list error path R5 Chopper Yes
CRF-59 Note Note (body) AgentCreatePage.tsx:296 Create 404 for a deleted project leaves the page framed by it R5 Chopper No
CRF-60 P4 Author fixed (b9f3f88) AgentCreatePage.tsx:100 "its message" does not say the typed message is lost R5 Gon Yes
CRF-61 Nit Author fixed (b9f3f88) AgentCreatePage.tsx:268 chatProjectId alias adds a second name for the project ID R5 Gon Yes
CRF-62 Note Note (body) commit 8fa8a8b Two more commit subjects over 72 characters; disappear at squash merge R5 Leorio No
CRF-63 P4 Author fixed (b9f3f88..6e06900) AgentCreatePage.test.tsx:249 Plain-route test cannot fail since the stub no longer sets projectId R6 Netero Yes
CRF-64 P4 Author fixed (b9f3f88..6e06900) AgentCreatePage.test.tsx:393 Retry test does not assert the spinner R6 Bisky Yes
CRF-65 P4 Author fixed (b9f3f88..6e06900) AgentCreatePage.test.tsx:55 realForm comment lists users and is out of date again R6 Gon Yes
CRF-66 Nit Author fixed (b9f3f88..6e06900) AgentsPageLayout.stories.tsx:1110 "screenshot" is a second name for the Chromatic snapshot R6 Gon Yes
CRF-67 P4 Author fixed (6e06900) AgentCreatePage.tsx:129 !isFetching is false when the mount refetch is paused offline; existing project shows Project not found R6 Meruem Yes
CRF-68 P4 Author fixed (aae451f) AgentCreatePage.tsx:129 No test covers isFetchedAfterMount; reverting to !isFetching passes R7 Netero Yes
CRF-69 P3 Author fixed (aae451f) AgentsPageLayout.tsx:539 New chat draft-clear check excludes route params instead of matching /agents; still clears draft on automations and board R7 Meruem P3, Hisoka P4, Kite P4 Yes
CRF-70 Note Note (body) AgentCreatePage.tsx:129 isFetchedAfterMount relies on chatProjects() refetching on mount; a staleTime would leave the loader up R7 Hisoka, Kite No
CRF-71 P4 Author fixed (1277fc4) AgentsPageLayout.test.tsx:53 No test covers New chat from a conversation route keeping the draft R8 Netero Yes
CRF-72 P4 Author fixed (1277fc4) AgentsPageLayout.tsx:540 Hand-written trailing-slash regex untested; useMatch("/agents") does the match R8 Bisky, Zoro Yes
CRF-73 Note Note (body) AgentsPageLayout.tsx:540 New chat from settings now keeps the draft; PR description does not mention it R8 Kite No

Downgrade gate notes (R1):

  • CRF-20: keep-argument for P2: an inaccurate comment sends future test authors to the stub without explanation. Downgraded to P3 because the consequence is confusion while writing a test, not wrong product behavior.
  • CRF-21 to CRF-25: keep-argument for P2: duplicated or restating comments drift from the code. Leorio rated the same comments as accurate and useful. Downgraded to P4: no behavior or reader is misled today; the cost is maintenance drift.
  • CRF-26: keep-argument for P2: "composer" is ambiguous between stub and real form. Downgraded to Nit: wording only.

Downgrade gate notes (R3):

  • CRF-25, CRF-35, CRF-36: keep-argument for P2: vague or restating comments mislead readers. Kept at P4 to match the R1 decision for the same class: no behavior or reader is misled into a bug.
  • CRF-34: kept at P3. Keep-argument: the outer key is the only thing re-locking the form organization on project-to-project navigation (cache returns B at once), and the comment invites replacing it with a mutation reset. Leorio called the comment accurate; accuracy and completeness differ, higher wins.
  • CRF-32: kept at P1. Pariston reproduced it; orchestrator confirmed chatProject(undefined) shares the list key and selects null, and isProjectMissing has no projectId guard. Consequence: the default new-chat page is unusable while the list is cached with the experiment on.

Downgrade gate notes (R4):

  • CRF-47: keep-argument for P2: the comment misstates what the outer key protects, so a reader may keep or remove it for the wrong reason. Downgraded to P4: orchestrator confirmed the footer renders inside AgentCreateFormContent keyed by project, so removing the dialog clause loses nothing and keeping it misleads no behavior; same class as R1 and R3 comment findings.
  • CRF-55: keep-argument: the generic name hides the experiment it turns on. Dropped as a separate item because CRF-52's fix replaces both helpers with one enableExperiments(...).

Downgrade gate notes (R5):

  • CRF-60: Leorio judged the comment accurate (message is the CreateChatOptions field). Keep-argument: a reader can read "its message" as the error message and miss that the typed text is lost. Kept at P4 (higher of the two).
  • CRF-59: kept as Note. Keep-argument for a finding: every resend fails with 404 until the user leaves. Note because the error text is accurate and leaving recovers; Chopper asked for no required change.

Downgrade gate notes (R7):

  • CRF-69: Hisoka and Kite rated P4, Kite also listed the unchanged routes as out of scope. Kept at P3 (higher wins): Meruem reproduced draft loss on two routes, the fix is on the line this PR changes and removes the class (structural alternative), and the PR adds one more exclusion to the list instead.

Contested and acknowledged

Round log

Round 1

Full panel (round 1). Netero first pass: 1 P2, 4 P3, 2 P4, 1 Nit, 1 Note; no P0, panel proceeded. Law not run (effective additions 596). Panel: ging-ts, ging-react, nami, pariston, mafuuu, bisky, gon, leorio, wildcard knov. Gon's agent lost the workspace connection while writing; resumed the same agent to write the file. Totals: 1 P2, 10 P3, 12 P4, 4 Nit, 2 Note. Reviewed against f9b5713..2bc038d.

Round 2 update

BLOCKED. CRF-21 silent (comment still duplicated at AgentCreatePage.test.tsx:241-242, thread resolved without reply). 26 findings claimed fixed in 30fd661, unverified by panel. No review panel. Reviewed against b2e7ea8..30fd661.

Round 3

Churn guard PROCEED (CRF-21 fixed in 4d5db6e). Restructure round (new ProjectComposerFooter.stories.tsx; page rewritten into a keyed wrapper), full panel: ging-ts, ging-react, nami, pariston, mafuuu, bisky, gon, leorio, wildcard knov. Netero advisory: re-raised CRF-3, CRF-5; new CRF-30, CRF-31. Panel: re-raised CRF-4 (Mafuuu), CRF-25 (Gon); new 1 P1, 1 P3, 4 P4, 2 Nit, 1 Note, 3 OOS. Netero verified CRF-2, 6, 10, 13 by mutation; Bisky verified CRF-14 to CRF-17. Reviewed against b2e7ea8..4d5db6e.

Round 4

Churn guard PROCEED (14 addressed in 4188f73, b684e19). Restructure round (ProjectComposerFooter.tsx and AgentsPageLayout.stories.tsx newly in the PR diff; form props changed to project), full panel: ging-ts, ging-react, nami, pariston, mafuuu, bisky, gon, leorio, wildcard zoro. Netero verified CRF-3, 4, 10, 30, 31, 32, 40 by mutation; Pariston verified CRF-32. New: 7 P4, 1 Nit, 2 Note, 2 OOS, 1 dropped. Reviewed against e140387..b684e19.

Round 5

Churn guard PROCEED (8 addressed in 8fa8a8b and a PR description edit; CRF-44 partly fixed, re-raised). Fix round (no files added, no exported signature changed since R4). Panel: zoro, gon, mafuuu, leorio (raised R4 findings touched), ging-ts, ging-react, nami, bisky (changed-file specialists), wildcard chopper. Netero re-raised CRF-44. New: 1 P3, 2 P4, 1 Nit, 2 Note. Ging-React observed lint:compiler now passes (CRF-41 no longer reproduces). Reviewed against 59355bb..8fa8a8b.

Round 6

Churn guard PROCEED (5 addressed in b9f3f88). Fix round. Panel: bisky, chopper, gon (raised R5 findings touched), ging-ts, ging-react, nami, wildcard meruem. Netero: CRF-63; verified CRF-44, 57, 58 by mutation. New: 4 P4, 1 Nit (plus CRF-63). Reviewed against 8da1221..b9f3f88.

Round 7

Churn guard PROCEED (5 addressed). Fix round; AgentsPageLayout.tsx and its test newly in the diff (6dfc393), so added nami, ging-react, hisoka for that file. Panel: bisky, gon, meruem, nami, ging-ts, ging-react, hisoka, wildcard kite. Netero: CRF-68. New: 1 P3 (convergent), 1 P4 (Netero), 1 Note. Reviewed against eb8a483..6e06900.

Round 8

Churn guard PROCEED (CRF-68, CRF-69 addressed in aae451f). Fix round. Panel: meruem, hisoka, kite (raised CRF-69), bisky, nami, wildcard zoro. Netero: CRF-71; verified CRF-68 and CRF-69 by mutation (Meruem, Hisoka, Kite, Zoro reproduced). New: 2 P4 (one convergent), 1 Note. Reviewed against eb8a483..aae451f.

Round 9

Churn guard PROCEED (CRF-71, CRF-72 addressed in 1277fc4). Fix round. Panel: bisky, zoro (raised CRF-72), nami, ging-react, wildcard knov. Netero: no findings; verified both fixes by mutation (Bisky, Nami also). No new findings. No open in-scope findings remain. Reviewed against eb8a483..1277fc4.

About deep-review

CRF = Coder Review Finding (P0-P4, Nit, Note)

Reviewer Focus
Bisky tests
Chopper ops/errors
Churn-guard change verification
Ging language modernization
Gon naming
Hisoka edge cases
Killua perf
Kite change integrity
Knov contracts
Knuckle SQL
Komugi flake/determinism
Kurapika security
Law decomposition
Leorio docs
Luffy product
Mafu-san process
Mafuuu contracts
Melody dispatch/pairing
Meruem structural
Nami frontend
Netero mechanical checks
Pariston premise testing
Pen-botter product gaps
Razor verification
Robin duplication
Ryosuke Go arch
Takumi concurrency
Zoro shape

🤖 Managed by Coder Agents.

All reactions

Sorry, something went wrong.

Uh oh!

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

@f0ssel
refactor(site/src/pages/AgentsPage): move ProjectComposerFooter into …
74bd4be
…its own file

Keeps it next to ProjectComposerHeader instead of inside AgentCreatePage.
@f0ssel f0ssel mentioned this pull request Oct 5, 2026
feat(site): redesign the project page header #30293
Merged
coder-agents-review[bot]
coder-agents-review Bot reviewed Oct 5, 2026
View reviewed changes

@coder-agents-review coder-agents-review Bot left a comment

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 PR adds the /agents/projects/:projectId page, which locks the new-chat form to the project's organization and sends project_id on create. Findings: 1 P2, 10 P3, 12 P4, 4 Nit.

Six of the seven comments the PR adds or edits restate the code next to them or repeat a fact documented elsewhere, and one is out of date; the inline comments give rewrites.

Notes:

  • site/src/router.tsx:899: nothing in the tree links to the new route yet (buildAgentProjectPath has no callers), so it is reachable only by typed URL until #29583.
  • site/src/pages/AgentsPage/AgentCreatePage.tsx:402: AgentCreateForm keeps key="draft" on /agents and on every project page, so draft text typed under one project carries over to another project and to the plain new-chat page.

🤖 This review was automatically generated with Coder Agents.

Sorry, something went wrong.

Uh oh!

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

All reactions
Comment thread site/src/router.tsx Resolved

Uh oh!

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

Comment thread site/src/pages/AgentsPage/AgentCreatePage.tsx Resolved

Uh oh!

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

Comment thread site/src/pages/AgentsPage/AgentCreatePage.tsx Resolved

Uh oh!

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

Comment thread site/src/pages/AgentsPage/AgentCreatePage.tsx Resolved

Uh oh!

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

Comment thread site/src/pages/AgentsPage/AgentCreatePage.tsx Resolved

Uh oh!

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

Comment thread site/src/pages/AgentsPage/AgentCreatePage.tsx Resolved

Uh oh!

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

Comment thread site/src/pages/AgentsPage/AgentCreatePage.tsx Resolved

Uh oh!

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

Comment thread site/src/pages/AgentsPage/AgentCreatePage.test.tsx Resolved

Uh oh!

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

Comment thread site/src/pages/AgentsPage/AgentCreatePage.test.tsx Resolved

Uh oh!

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

Comment thread site/src/pages/AgentsPage/AgentCreatePage.tsx Resolved

Uh oh!

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

f0ssel added 7 commits October 5, 2026 19:00
@f0ssel
fix(site/src): address review of the chat projects data layer
c69403e
Count project field limits in code points like the server, show save
errors with ErrorAlert and server field validations, disable Save for
an unchanged edit, fall back to the folder glyph when a project icon
fails to load, invalidate chat entities and searches when a project is
deleted, and add tests and stories for the dialog and icon.
@f0ssel
Merge branch 'f0ssel/chat-projects-ui-data' into f0ssel/chat-projects…
9d6abe4
…-ui-form
@f0ssel
fix(site/src/pages/AgentsPage): address review of the project compose…
d33057d
…r lock

Scope text and attachment drafts per destination instead of per
organization, keep the lock fixed per mount, and never save choices made
while locked as the user's defaults.
@f0ssel
fix(site/src): address second review of the chat projects data layer
eb24d35
@f0ssel
Merge branch 'f0ssel/chat-projects-ui-data' into f0ssel/chat-projects…
b2e7ea8
…-ui-form
@f0ssel
Merge branch 'f0ssel/chat-projects-ui-form' into f0ssel/chat-projects…
e432821
…-ui-page
@f0ssel
fix(site/src): address review of the project new-chat page
30fd661
Remount the page per project, show a not-found message instead of
redirecting, and move the page tests onto renderWithAuth.
@f0ssel f0ssel changed the title feat(site/src/pages/AgentsPage): add the chat project page feat(site/src): add the chat project page Oct 5, 2026
@f0ssel

f0ssel commented Oct 5, 2026

Copy link
Copy Markdown
Member Author

/coder-agents-review

coder-agents-review[bot] reacted with rocket emoji
All reactions
  • 🚀 1 reaction

Sorry, something went wrong.

Uh oh!

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

coder-agents-review[bot]
coder-agents-review Bot reviewed Oct 5, 2026
View reviewed changes

@coder-agents-review coder-agents-review Bot left a comment

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.

Commit 30fd661 addresses 26 of the 27 findings from the first review. A review panel has not checked those fixes yet, because one finding has no fix and no reply: the test comment at AgentCreatePage.test.tsx:241-242 still repeats the production comment above the "Loading project" loader, and its thread was resolved without a reply. Delete the test comment, or reply on the thread explaining why it should stay. The full review resumes after that.

🤖 This review was automatically generated with Coder Agents.

Sorry, something went wrong.

Uh oh!

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

All reactions
@f0ssel
test(site/src/pages/AgentsPage): drop a comment that repeats the page's
4d5db6e
@f0ssel

f0ssel commented Oct 5, 2026

Copy link
Copy Markdown
Member Author

/coder-agents-review

coder-agents-review[bot] reacted with rocket emoji
All reactions
  • 🚀 1 reaction

Sorry, something went wrong.

Uh oh!

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

f0ssel added 6 commits October 5, 2026 19:45
@f0ssel
fix(site/src): count project field lengths through getFormHelpers
b5292db
@f0ssel
Merge branch 'f0ssel/chat-projects-ui-data' into f0ssel/chat-projects…
fdfeb9b
…-ui-form
@f0ssel
Merge branch 'f0ssel/chat-projects-ui-form' into f0ssel/chat-projects…
13ae0d1
…-ui-page
@f0ssel
fix(site/src/pages/AgentsPage): take the composer's project as one prop
e140387
Key the form on the project so its lock and drafts are fixed per mount,
derive the denial kind once, and keep MCP and reasoning choices made in
a project out of the user's defaults.
@f0ssel
Merge branch 'f0ssel/chat-projects-ui-form' into f0ssel/chat-projects…
e9e05ab
…-ui-page
@f0ssel
refactor(site/src/pages/AgentsPage): pass the project to the composer
4188f73
jaaydenh added 4 commits October 6, 2026 08:28
@jaaydenh
fix(site/src/pages/AgentsPage): submit the project dialog once per save
5b2b6e5
Save was disabled only by the caller's isSubmitting, which turns on after
Formik's async validation, so a double-click sent two saves (and would
create two projects). The dialog now also waits on its own pending submit,
and awaits a promise returned by onSubmit.
@jaaydenh
Merge branch 'f0ssel/chat-projects-ui-data' into f0ssel/chat-projects…
95b22b6
…-ui-form
@jaaydenh
Merge branch 'f0ssel/chat-projects-ui-form' into f0ssel/chat-projects…
ef2bf08
…-ui-page
@jaaydenh
Merge remote-tracking branch 'origin/f0ssel/chat-projects-ui-data' in…
3234831
…to tmp-ui-form

# Conflicts:
#	site/src/pages/AgentsPage/components/ChatsSidebar/dialogs/ChatProjectDialog.tsx
@jaaydenh

jaaydenh commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

@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 6, 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-06T08:35:26.239936Z 1277fc4 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 6, 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: 1277fc425b

ℹ️ 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/AgentCreatePage.test.tsx Resolved

Uh oh!

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

jaaydenh added 7 commits October 6, 2026 08:39
@jaaydenh
fix(site/src/pages/AgentsPage): hand the project edit's save promise …
59ead19
…to the dialog

The dialog keeps Save disabled until the returned promise settles, so the
edit can't be sent twice.
@jaaydenh
test(site/src/pages/AgentsPage): assert outcomes instead of rendered …
afa0d7d
…DOM in the project page tests

The project page tests asserted presence, absence, and attributes of
rendered elements, which FE1 leaves to the story screenshots. They now
check requests, navigation, and the props the page hands to the form. The
reopened-after-failed-save state moves to a ProjectComposerFooter story.
@jaaydenh
Merge remote-tracking branch 'origin/f0ssel/chat-projects-ui-data' in…
ee19de5
…to f0ssel/chat-projects-ui-data
@jaaydenh
Merge branch 'f0ssel/chat-projects-ui-data' into f0ssel/chat-projects…
21a2831
…-ui-form
@jaaydenh
Merge branch 'f0ssel/chat-projects-ui-form' into f0ssel/chat-projects…
8419966
…-ui-page
@jaaydenh
test(site/src/pages/AgentsPage/components): drop DOM-presence asserti…
9f967c2
…on for the organization selector

The ProjectComposer story covers the hidden selector visually; the test
keeps asserting the persisted organization and workspace values.
@jaaydenh
test(site/src/pages/AgentsPage): assert form props instead of rendere…
f17cac8
…d text in project page tests

The prefill tests read the stub form's rendered text, and the history test
read the edit dialog's input value. They now check the prefill prop handed
to the form and the name sent in the PATCH request.
@jaaydenh
jaaydenh marked this pull request as ready for review October 6, 2026 08:49
@jaaydenh
jaaydenh requested a review from a team as a code owner October 6, 2026 08:49
jaaydenh
jaaydenh approved these changes Oct 6, 2026
View reviewed changes
jaaydenh added 3 commits October 6, 2026 09:06
@jaaydenh
fix(site/src/pages/AgentsPage/components): keep the saved organizatio…
915fe2b
…n while the form is locked

A project page cleared the user's saved organization when that
organization had been revoked. Gate the persistence effect on
isUserOrgSelectionActive so a lock neither writes nor removes it.
@jaaydenh
test(site/src/pages/AgentsPage/components): assert project drafts thr…
d6fc9b0
…ough the submit payload

Replace DOM-absence checks in the per-project draft test with the
onCreateChat message and file IDs, and query the Attach workspace
trigger by role instead of a non-null closest() lookup.
@jaaydenh
test(site/src/pages/AgentsPage/components): cover project denials in …
5c35c0a
…stories, assert submits in tests

Move the project denial copy checks from Vitest into Pixel stories
(unlisted organization, product-wide, no permitted organization) and
drop the assertion-only play function. Assert the project draft, MCP,
and loading tests through the onCreateChat payload instead of
rendered output.
jaaydenh added a commit that referenced this pull request Oct 6, 2026
@f0ssel @jaaydenh
feat(site/src): add the chat projects data layer and project dialog (#…
10986ad
…30377)

- Experiment (`chat-projects`). First of four stacked PRs split out of
#29583, which is now the sidebar on top of this stack.
- API client and React Query factories for chat projects
(`chatProjects.ts`, keys colocated), `MockChatProject`,
`ChatProjectIcon`, the create/edit `ChatProjectDialog` (Formik; the
caller owns the mutation), and `buildAgentProjectPath`.
- `getDefaultOrganizationId` now returns `undefined` instead of `""`
when there is no default organization, so the sidebar in #29583 can tell
"no default organization" apart and fall back to another one. Its two
existing callers already fall back either way and behave the same.
- `getFormHelpers` accepts an optional `measureLength`, so the length
counter can count something other than UTF-16 units. Existing callers
keep the default `value.length`.
- Field limits count code points after trimming, matching the server,
with a live counter near the limit. Save stays disabled for an edit that
changes nothing once trimmed. The caller resets its mutation before
opening the dialog so an old save error doesn't reappear.

Stack: **this PR** → #30378 → #30379 → #29583

---
Generated with Coder Agents on behalf of @f0ssel.

---------

Co-authored-by: Jaayden Halko <[email protected]>
@jaaydenh
Merge remote-tracking branch 'origin/main' into tmp-ui-form-fix
b184f52
# Conflicts:
#	site/src/pages/AgentsPage/components/ChatsSidebar/dialogs/ChatProjectDialog.stories.tsx
#	site/src/pages/AgentsPage/components/ChatsSidebar/dialogs/ChatProjectDialog.test.tsx
#	site/src/pages/AgentsPage/components/ChatsSidebar/dialogs/ChatProjectDialog.tsx
jaaydenh added a commit that referenced this pull request Oct 6, 2026
@f0ssel @jaaydenh
feat: lock the new-chat form to a project's organization (#30378)
145bf77
- Experiment (`chat-projects`). Second of four stacked PRs split out of
#29583.
- `AgentCreateForm` takes a `project` (its ID and organization) and
`header`/`footer` slots. The form remounts when the project changes.
- The organization is pinned to the project's and its selector is
hidden. The organization, workspace, and MCP servers chosen in a project
are never saved as the user's defaults. Submits carry `projectId` so the
caller can't forget it.
- Text and attachment drafts are kept per project, so a project's draft
never shows up in another project's composer or the plain one.
`useFileAttachments` takes an optional `storageKey` for this.
- When the project's organization isn't permitted, the form names it in
a project-specific denial, but only when chats are otherwise allowed;
otherwise the product-wide denial stays.
- `ProjectComposerHeader` shows the project's name and description above
the composer (stories: `ProjectComposer`,
`ProjectComposerOrganizationDenied`).

Stack: #30377 → **this PR** → #30379 → #29583

---
Generated with Coder Agents on behalf of @f0ssel.

---------

Co-authored-by: Jaayden Halko <[email protected]>
Base automatically changed from f0ssel/chat-projects-ui-form to main October 6, 2026 09:44
jaaydenh added 3 commits October 6, 2026 09:45
@jaaydenh
Merge commit 'b184f52e3a' into resolve-ui-page
fa9d811
@jaaydenh
Merge remote-tracking branch 'origin/main' into resolve-ui-page
46fff11
@jaaydenh
Merge branch 'main' into f0ssel/chat-projects-ui-page
f51614c
@jaaydenh
jaaydenh merged commit 036e080 into main Oct 6, 2026
27 checks passed

Uh oh!

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

@jaaydenh
jaaydenh deleted the f0ssel/chat-projects-ui-page branch October 6, 2026 10:57
@github-actions github-actions Bot locked and limited conversation to collaborators Oct 6, 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
@jaaydenh jaaydenh jaaydenh approved these changes
+1 more reviewer
@coder-agents-review coder-agents-review[bot] coder-agents-review[bot] approved these changes
Reviewers whose approvals may not affect merge requirements

Uh oh!

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

Assignees

@f0ssel f0ssel

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

@f0ssel @jaaydenh
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.