feat(tasks): select repositories per space task - #76581
Conversation
|
Hey @k11kirky! 👋 It looks like your git author email on this PR isn't your
You can fix it for this repo with: git config user.email "you@posthog.com"Or set it globally with |
|
😎 Merged successfully - details. |
🤖 CI report
|
| Root | Eager (shipped) | Δ vs base | Budget |
|---|---|---|---|
entry (logged-out pages, app bootstrap)src/index.tsx |
1.25 MiB · 22 files | no change | ███░░░░░░░ 27.7% of 4.51 MiB |
authenticated shell (every logged-in page)src/scenes/AuthenticatedShell.tsx |
8.14 MiB · 3,035 files | 🟢 -14 B (-0.0%) | ████████░░ 83.8% of 9.71 MiB |
🟢 node_modules/monaco-editor/ stays out of src/index.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 [object Object] stays out of src/index.tsx
🟢 node_modules/monaco-editor/ stays out of src/scenes/AuthenticatedShell.tsx
🟢 src/lib/components/ActivityLog/describers stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
🟢 [object Object] stays out of src/scenes/AuthenticatedShell.tsx
Largest files eagerly shipped from src/index.tsx
| 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 |
|---|---|
| 285.5 KiB | ../node_modules/.pnpm/posthog-js@1.410.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 |
| 235.5 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 231.5 KiB | ../node_modules/.pnpm/posthog-js@1.410.1/node_modules/posthog-js/dist/module.js |
| 154.3 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 |
| 105.3 KiB | src/lib/api.ts |
| 94.7 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.19 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.19 MiB · 17 files | no change | ████░░░░░░ 38.3% of 5.72 MiB |
| Deferred (lazy) | 2.08 MiB · 33 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 |
|---|---|
| 718.3 KiB | dist/toolbar/toolbar-app-FT4UJ3IP.css |
| 551.4 KiB | dist/toolbar/chunk-chunk-TKZ3SULZ.js |
| 484.6 KiB | dist/toolbar/chunk-chunk-T44C2V5C.js |
| 133.6 KiB | dist/toolbar/chunk-chunk-PETGQ2AR.js |
| 131.8 KiB | dist/toolbar/chunk-chunk-T5KY5WYR.js |
| 71.0 KiB | dist/toolbar/toolbar-app-HOL6RSL7.js |
| 69.0 KiB | dist/toolbar/chunk-chunk-27JL52RE.js |
| 35.6 KiB | dist/toolbar/chunk-chunk-T3UPWJAA.js |
| 20.9 KiB | dist/toolbar/chunk-chunk-YJS276P3.js |
| 12.2 KiB | dist/toolbar/chunk-chunk-PIK3PADE.js |
Posted automatically by check-toolbar-size · sizes are toolbar output bytes (shipped, post-tree-shake) from the esbuild metafile
✅ Dist folder size — 🟢 -158 B (-0.0%)
Total size of the built frontend/dist folder (all assets), compared against the base branch.
Total: 1383.89 MiB · 🟢 -158 B (-0.0%)
🦔 Hogbox preview · ✅ ready▶ Open the preview
commit |
👀 Auto-assigned reviewersThese soft owners were skipped because they only have minor changes here. Nothing blocks merge, so self-assign if you'd like a look:
Soft owners come from each directory's |
afa6334 to
f56420c
Compare
|
Reviews (1): Last reviewed commit: afa6334 | Re-trigger Greptile |
2046075 to
f8db05e
Compare
|
React Doctor found 12 issues in 3 files · 12 warnings. 12 warnings
Reviewed by React Doctor for commit |
| useEffect(() => { | ||
| setTaskRepositories( | ||
| channelRepositoriesKey ? channelRepositoriesKey.split("\n") : [], | ||
| ); | ||
| setTaskGithubIntegration(channelGithubIntegration); | ||
| }, [channelRepositoriesKey, channelGithubIntegration]); |
There was a problem hiding this comment.
Data transformation bug: The split logic incorrectly handles edge cases. When channelRepositories is [""] (array with empty string), join("\n") produces "", which is falsy, causing the ternary to return [] instead of [""]. This loses data.
// Fix: Check array length instead of string truthiness
const channelRepositoriesKey = channelRepositories.join("\n");
useEffect(() => {
setTaskRepositories(channelRepositories);
setTaskGithubIntegration(channelGithubIntegration);
}, [channelRepositoriesKey, channelGithubIntegration]);The join/split pattern is unnecessary since arrays can be dependencies directly when used with a stable key for comparison.
| useEffect(() => { | |
| setTaskRepositories( | |
| channelRepositoriesKey ? channelRepositoriesKey.split("\n") : [], | |
| ); | |
| setTaskGithubIntegration(channelGithubIntegration); | |
| }, [channelRepositoriesKey, channelGithubIntegration]); | |
| const channelRepositoriesKey = channelRepositories.join("\n"); | |
| useEffect(() => { | |
| setTaskRepositories(channelRepositories); | |
| setTaskGithubIntegration(channelGithubIntegration); | |
| }, [channelRepositoriesKey, channelGithubIntegration]); | |
Spotted by Graphite
Is this helpful? React 👍 or 👎 to let us know.
There was a problem hiding this comment.
The [""] case isn't producible here — repositories are non-empty org/repo strings coming from the repository picker or the backend channel row, so join/split round-trips losslessly for all real inputs (the ternary exists to map [] correctly). The suggested version also reads channelRepositories inside the effect while depending only on the joined key, which Biome's useExhaustiveDependencies rejects — that lint constraint is why the string-key pattern is used. Leaving as is.
Generated-By: PostHog Code Task-Id: 7d648577-8338-47ee-a9c4-5a168289074d
Generated-By: PostHog Code Task-Id: 7d648577-8338-47ee-a9c4-5a168289074d
Generated-By: PostHog Code Task-Id: e301f85c-0c79-4e9a-a42c-9d2c32da40d8
10fca90 to
c7eff25
Compare
Each composer held the repository/folder pick in local component state, so a selection made on the new-task screen vanished when navigating to the space home. The draft now lives in a per-space zustand store shared by both surfaces, and a failed save-to-space surfaces a toast instead of rolling back silently. Generated-By: PostHog Code Task-Id: 11cdce8b-166b-4996-8b91-674ab1e9d675
The shared draft outlived the task it was picked for, silently overriding the space defaults for every later task. Clear it on successful creation, mirroring the prompt draft's lifecycle; the dialog's "save to space" checkbox remains the durable path. Generated-By: PostHog Code Task-Id: 11cdce8b-166b-4996-8b91-674ab1e9d675
|
/trunk merge |
Deploy status
|
Problem
Space-level repositories are useful defaults, but individual tasks sometimes need a different repository set. Local tasks need the equivalent folder selection.
Changes
repositoriesselection; without one it falls back to the space defaults.Rebased onto the composer chrome redesign (#77565). The space repository mutation and
TaskChannelfields now come from #77252; this PR only consumes them.How did you test this code?
pnpm --filter @posthog/core exec vitest run src/task-detail/taskInput.test.ts src/task-detail/taskCreationSaga.test.tspnpm --filter @posthog/ui exec vitest run src/features/canvas/components/WebsiteNewTask.test.tsx src/features/canvas/hooks/useTaskChannels.test.tsxpnpm --filter @posthog/core typecheck,pnpm --filter @posthog/ui typecheckThe taskInput tests cover preserving task-specific cloud repositories and retaining an explicit local folder on repo-optional tasks. I did not manually drive the Electron UI.
Automatic notifications
Docs update
No docs change. This extends an in-product task creation control.
🤖 Agent context
Autonomy: Human-driven (agent-assisted)
Codex implemented the original change; Claude (PostHog Code) rebased it onto current master and aligned it with the composer redesign. Decisions during the rebase: dropped the PR's duplicate
updateTaskChannelclient method,useUpdateTaskChannelRepositorieshook, andTaskChannelfields in favor of the identical implementations #77252 landed on master; moved the repository trigger from the removedattachmentsPrefixslot into the selector row as a chip button styled likeWorkspaceModeSelect, renamingTaskRepositoryAttachmenttoTaskRepositoryChip. Skills invoked: /writing-pr-descriptions.Created with PostHog Code