fix(access-control): load roles page access controls after team loads - #91346
fix(access-control): load roles page access controls after team loads#91346posthog[bot] wants to merge 1 commit into
Conversation
The roles settings page fired its project-scoped resource_access_controls request in afterMount, before the team was loaded. currentProjectId then fell back to "@current", the request 404'd, and a "Load resource access controls failed. Not found." toast appeared with no access control content. Gate the load on a real project id: subscribe to currentTeam and fire the loader once the team is loaded, and guard the loader so it never sends "@current". Mirrors the pattern in pathCleaningSuggestionsLogic. Generated-By: PostHog Desktop Task-Id: c97d4903-0b6b-4852-974f-e3255cc46bbc
|
Merging to
After your PR is submitted to the merge queue, this comment will be automatically updated with its status. If the PR fails, failure details will also be posted here |
🦔 PostHog Review is reviewing this pull requestStep 4/6 · Merging overlapping findings · 4/4 Specialist review skills read the changed code in parallel each from their own perspective, a blind-spot sweep catches what they missed, and only validated findings are published back to this pull request. This comment updates as the review progresses. |
🤖 CI report✅ Trunk lane — non-backend laneThis PR is assigned to the non-backend lane. It does not run backend Python tests and may merge in parallel with PRs in other lanes. ✅ Bundle size — no changeUncompressed size of every built Total: 68.17 MiB · no change No file changed by more than 1000 B. Posted automatically by build-bundle-size-report · uncompressed bytes from dist-report ✅ Eager graph — within budgetHow much code each root ships on the eager path — downloaded and parsed before the surface is interactive. Measured from the esbuild output chunks (post-tree-shake, static imports only); lazy
🟢 Largest files eagerly shipped from
|
| Size | File |
|---|---|
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 24.6 KiB | ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js |
| 6.3 KiB | ../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js |
| 4.5 KiB | ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js |
| 3.9 KiB | ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js |
| 1.4 KiB | ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js |
| 1.3 KiB | src/RootErrorBoundary.tsx |
| 912 B | ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js |
| 789 B | src/scenes/ChunkLoadErrorBoundary.tsx |
| 762 B | src/index.tsx |
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
| Size | File |
|---|---|
| 307.0 KiB | ../node_modules/.pnpm/posthog-js@1.422.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/rrweb.js |
| 267.7 KiB | ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js |
| 263.5 KiB | ../node_modules/.pnpm/posthog-js@1.422.5_@types+react@18.3.27_react@18.3.1/node_modules/posthog-js/dist/module.js |
| 252.5 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 154.2 KiB | ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 104.7 KiB | src/lib/api.ts |
| 95.2 KiB | ../packages/quill/packages/quill/dist/index.js |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js |
| 90.6 KiB | ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js |
Posted automatically by check-eager-graph · sizes are eager output bytes (shipped, post-tree-shake) from the esbuild metafile · part of #32479
✅ Toolbar bundle — eager 2.26 MiB within budget
What the toolbar ships to customer pages, measured from the esbuild output (minified, post-tree-shake). The eager set is the entry plus everything statically imported from it — fetched before any feature runs; deferred chunks load lazily. The eager guardrail is 5.72 MiB. Each output file must also stay below 10 MB, where CloudFront stops compressing it. The module boundary is enforced separately by check-toolbar-graph.
| Metric | Size | Δ vs base | Budget |
|---|---|---|---|
| Eager (shipped) entry + static imports |
2.26 MiB · 18 files | no change | ████░░░░░░ 39.5% of 5.72 MiB |
| Deferred (lazy) | 2.11 MiB · 45 files | no change | n/a — loads on demand |
Loader dist/toolbar.js |
1.1 KiB | no change | █░░░░░░░░░ 5.8% of 19.5 KiB |
Largest eagerly-shipped chunks
| Size | File |
|---|---|
| 749.4 KiB | dist/toolbar/toolbar-app-MMYGYX5P.css |
| 588.2 KiB | dist/toolbar/chunk-chunk-KLLX3OJI.js |
| 484.7 KiB | dist/toolbar/chunk-chunk-OX4ECFTJ.js |
| 133.8 KiB | dist/toolbar/chunk-chunk-KDK7WOUW.js |
| 131.8 KiB | dist/toolbar/chunk-chunk-FDH2IBXT.js |
| 71.3 KiB | dist/toolbar/toolbar-app-DXVMY4J4.js |
| 69.0 KiB | dist/toolbar/chunk-chunk-TSAL54PB.js |
| 35.6 KiB | dist/toolbar/chunk-chunk-KKFNQPQW.js |
| 21.0 KiB | dist/toolbar/chunk-chunk-TKJC34GA.js |
| 6.8 KiB | dist/toolbar/chunk-chunk-DV7IWQNF.js |
Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile
✅ Dist folder size — 🔺 +2.3 KiB (+0.0%)
Total size of the built frontend/dist folder (all assets), compared against the base branch.
Total: 1435.50 MiB · 🔺 +2.3 KiB (+0.0%)
There was a problem hiding this comment.
Contained single-file frontend fix that defers an existing API call until team data loads, fixing a race-condition 404 toast; no auth, data-model, or dependency changes.
Gate mechanics and policy version
| Gate | Result | |
|---|---|---|
| prerequisites | ✓ | all clear |
| deny-list | ✓ | no deny categories matched |
| size | ✓ | 29L, 1F substantive — within ceiling |
| tier | ✓ | T1-agent / T1b-small (29L, 1F, single-area, fix) |
| stamphog 2.0.0b4 | .stamphog/policy.yml @ 5382759 · reviewed head 5382759 |
|
👋 Visual changes detected for this PR. Review and approve in PostHog Visual Review If these changes are unexpected, they may be caused by a flaky test or a broken snapshot on master. Don't approve — rerun the job or wait for a fix. |
Problem
roleAccessControlLogicloaded the project-scopedresource_access_controlsendpoint inafterMount, before the team was loaded. On an org-level settings page no project sits in the URL, socurrentProjectIdfell back to the literal@current, the request hitapi/projects/@current/resource_access_controls, 404'd, and kea-loaders raised the failure toast.Changes
currentTeamsubscription fires the loader once a real project id exists.@current(mechanical guard).loadResourceAccessControls()call fromafterMount(mechanical).pathCleaningSuggestionsLogic, which already gates project-scoped loads on the team through acurrentTeamsubscription.How did you test this code?
kea-typegenfor the logic,tsgo --noEmit, oxlint/oxfmt, andhogli ci:preflight— all clean.afterMountloading.Automatic notifications
Docs update
None — no user-facing docs describe this behavior.
🤖 Agent context
Autonomy: Fully autonomous
/writing-tests,/writing-simplified-technical-english, and/writing-pr-descriptionsskills.warm_insight_cache_taskraisingValueError: user does not have organization membership(fromproducts/access_control/backend/property_access_control.py) for insights whose creator left the org. That is a separate subsystem in an isolated product, and the warming task already handles the relatedTableAccessDeniedErrorcase. It is left out of this branch, which is scoped to the visible roles-page symptom, to keep the change reviewable.Created with PostHog Desktop from this inbox report.