Skip to content

feat(navigation): drop starred sidebar item, instrument files tree - #73518

Merged
fercgomes merged 3 commits into
masterfrom
posthog-code/files-nav-instrumentation
Jul 24, 2026
Merged

feat(navigation): drop starred sidebar item, instrument files tree#73518
fercgomes merged 3 commits into
masterfrom
posthog-code/files-nav-instrumentation

Conversation

@fercgomes

@fercgomes fercgomes commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Problem

Closes GROW-217

Two asks came out of a Slack thread (linked below):

  1. The "Starred" item in the left navigation is being retired, so it should no longer show up in the sidebar.
  2. The Files feature (the project tree) had almost no product analytics, so we couldn't tell how people actually use it.

Changes

  • Removed the Shortcuts / "Starred" entry from panelTriggerItems in NavTabBrowse, so it no longer renders in the browse tab. The underlying shortcuts logic and the "Add to starred" action on recent items are untouched.
  • Added usage instrumentation to the Files tree, mostly in projectTreeLogic so it fires regardless of which UI path triggers the action, plus a couple of interaction-only events in ProjectTree. Every event carries the tree root so the Files tree (project://) can be isolated from the other trees that reuse the same component.

New events: project tree folder created, project tree item renamed, project tree item deleted, project tree items moved (bulk), project tree item moved (drag), project tree searched, project tree sort changed, project tree multi-select toggled. These sit alongside the existing project tree item clicked and project tree folder toggled.

Context: https://posthog.slack.com/archives/C0113360FFV/p1784832773192549

How did you test this code?

I (Claude) could not run the frontend toolchain in this environment (node_modules not installed, so typecheck / lint / typegen did not run). Changes are limited to adding posthog.capture calls and removing one array entry, following the existing capture patterns already in these files. No automated tests were added or run.

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

Authored by Claude (PostHog Code). I located the Files feature (the ProjectTree / file-system panel) and the "Starred" nav trigger, then added the instrumentation in the kea logic rather than the component so events fire from any entry point. Care was taken to merge captures into existing loadSearchResultsSuccess and moveCheckedItems listeners instead of declaring duplicate listener keys, which would have silently shadowed the real handlers. I was unable to read the linked Slack thread (auth-gated, no Slack tool available) and worked from the task description.

Created with PostHog Code

@fercgomes fercgomes self-assigned this Jul 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Hey @fercgomes! 👋

It looks like your git author email on this PR isn't your @posthog.com address (fernando@fokvs.com.br). Since you're on the PostHog team, it's worth pointing your local git author email at your @posthog.com address. Why it matters:

  • Consistent work identity in git history — internal tooling that attributes commits to team members keys off your @posthog.com address.
  • Keeps team contributions easy to tell apart from external community ones when scanning history.

You can fix it for this repo with:

git config user.email "you@posthog.com"

Or set it globally with git config --global user.email "you@posthog.com". No need to redo this PR — just a nudge for next time. 🙂

@fercgomes
fercgomes marked this pull request as ready for review July 24, 2026 13:27
@fercgomes
fercgomes requested review from a team, MattBro, adamleithp, pauldambra and rafaeelaudibert and removed request for a team, MattBro, adamleithp and rafaeelaudibert July 24, 2026 13:27
@github-actions

github-actions Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

🦔 Hogbox preview · ✅ ready

▶ Open the preview

🔑 Login test@posthog.com / 12345678 (demo data)
🧩 Running this PR's backend and frontend, on the PostHog :master base
🔗 Link stable across rebuilds — a re-push swaps the box underneath, the URL stays
🔒 Access tailnet only (PostHog VPN)
🛠️ Admin inspect & debug state in hogland
💤 Idle sleeps after ~30 min idle (snapshot to S3, zero node cost) and wakes on your next visit in ~30s, behind a brief "waking up" screen

commit 42e2d31 · box box-b9d0b0d77b6a · ready in 797s (push → usable) · build log · rebuilds on every push, torn down on close

@fercgomes
fercgomes requested a review from adamleithp July 24, 2026 13:27
@greptile-apps

greptile-apps Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor
Prompt To Fix All With AI
Fix the following 2 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 2
frontend/src/layout/panel-layout/ProjectTree/projectTreeLogic.tsx:1223
**Default project root becomes null**

When a Files tree instance omits `root`, the logic treats it as the project root but these captures serialize it as `null`, causing interactions from those instances to be excluded when analytics filters for `root: "project://"`.

### Issue 2 of 2
frontend/src/layout/panel-layout/ProjectTree/projectTreeLogic.tsx:1368-1373
**Bulk move count includes skipped items**

When a selected folder has selected descendants, `checkedItemCountNumeric` counts every checked entry while the following `skipInFolder` loop deliberately performs only the parent move, causing the event's `count` to overstate the number of items moved.

Reviews (1): Last reviewed commit: "feat(navigation): drop starred sidebar i..." | Re-trigger Greptile

if (searchResults.searchTerm && (!payload || !payload.offset)) {
posthog.capture('project tree searched', {
root: props.root ?? null,
has_results: searchResults.results.length > 0,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P1 Default project root becomes null

When a Files tree instance omits root, the logic treats it as the project root but these captures serialize it as null, causing interactions from those instances to be excluded when analytics filters for root: "project://".

Knowledge Base Used: Frontend app (frontend/src)

Prompt To Fix With AI
This is a comment left during a code review.
Path: frontend/src/layout/panel-layout/ProjectTree/projectTreeLogic.tsx
Line: 1223

Comment:
**Default project root becomes null**

When a Files tree instance omits `root`, the logic treats it as the project root but these captures serialize it as `null`, causing interactions from those instances to be excluded when analytics filters for `root: "project://"`.

**Knowledge Base Used:** [Frontend app (`frontend/src`)](https://app.greptile.com/posthog-org-19734/-/custom-context/knowledge-base/posthog/posthog/-/docs/frontend-app.md)

How can I resolve this? If you propose a fix, please make it concise.

Comment thread frontend/src/layout/panel-layout/ProjectTree/projectTreeLogic.tsx Outdated
@github-actions

github-actions Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

🤖 CI report

⚠️ Bundle size — 🔺 +573 B (+0.0%)

Uncompressed size of every built .js bundle, compared against the base branch.

Total: 64.42 MiB · 🔺 +573 B (+0.0%)

No file changed by more than 1000 B.

Posted automatically by build-bundle-size-report · uncompressed bytes from dist-report

Eager graph — within budget

How 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 import() / React.lazy chunks are not counted.

Root Eager (shipped) Δ vs base Budget
entry (logged-out pages, app bootstrap)
src/index.tsx
1.24 MiB · 22 files no change ███░░░░░░░ 27.6% of 4.51 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
8.07 MiB · 3,011 files 🔺 +773 B (+0.0%) ████████░░ 83.1% 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
281.5 KiB ../node_modules/.pnpm/posthog-js@1.407.2/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
236.0 KiB src/taxonomy/core-filter-definitions-by-group.json
226.1 KiB ../node_modules/.pnpm/posthog-js@1.407.2/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
106.2 KiB src/lib/api.ts
94.0 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.18 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.18 MiB · 17 files no change ████░░░░░░ 38.1% of 5.72 MiB
Deferred (lazy) 2.07 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
716.0 KiB dist/toolbar/toolbar-app-UT2TAV4U.css
545.1 KiB dist/toolbar/chunk-chunk-R67YSTOI.js
484.3 KiB dist/toolbar/chunk-chunk-PY4X2WR2.js
133.6 KiB dist/toolbar/chunk-chunk-P36RTWFE.js
131.8 KiB dist/toolbar/chunk-chunk-T5KY5WYR.js
71.0 KiB dist/toolbar/toolbar-app-KIASA47E.js
69.0 KiB dist/toolbar/chunk-chunk-27JL52RE.js
35.6 KiB dist/toolbar/chunk-chunk-NZ4IQ3HA.js
20.9 KiB dist/toolbar/chunk-chunk-DKDYNNXI.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 — 🔺 +11.4 KiB (+0.0%)

Total size of the built frontend/dist folder (all assets), compared against the base branch.

Total: 1355.61 MiB · 🔺 +11.4 KiB (+0.0%)

⚠️ Playwright — 1 flaky

🎭 Playwright report · View test results →

⚠️ 1 flaky test:

  • Preflight live mode (chromium)

These issues are not necessarily caused by your changes.
Annoyed by this section? Help fix flakies and failures and it will go green!

@posthog

posthog Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Visual changes approved by @fercgomes — baseline updated in c13894d.

View this run in PostHog

22 changed.

@adamleithp adamleithp left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🪓

@posthog-bot-comment-resolver

posthog-bot-comment-resolver Bot commented Jul 24, 2026

Copy link
Copy Markdown

🔀 Tried to auto-resolve conflicts with master but this one needs a human.

I won't retry until the branch or master moves.

fercgomes and others added 3 commits July 24, 2026 14:21
Remove the "Starred" trigger from the left nav's browse tab and add usage
instrumentation to the Files (project tree) feature.

- Drop the Shortcuts/Starred entry from panelTriggerItems in NavTabBrowse.
- Capture folder create, rename, delete, single and bulk move, search, sort
  change, and multi-select toggle in projectTreeLogic / ProjectTree, each
  tagged with the tree root so the Files tree can be isolated in analysis.

Generated-By: PostHog Code
Task-Id: 92284cb9-f964-4de0-88bd-49cb93f10f88
Address Greptile review findings on the files tree instrumentation:

- Default the capture `root` to `project://` (not null) when a tree instance
  omits the prop, since the logic treats an absent root as the project root.
  Keeps interactions from those instances included when filtering on
  root: "project://".
- Count only the moves actually issued in the bulk move, rather than the full
  checked count, so the event doesn't overstate the number of items moved when
  a selected folder has selected descendants.

Generated-By: PostHog Code
Task-Id: 92284cb9-f964-4de0-88bd-49cb93f10f88
22 updated
Run: eca6184f-2dfa-43aa-a31f-31998a9acdd6

Co-authored-by: fercgomes <28491014+fercgomes@users.noreply.github.com>
@fercgomes
fercgomes force-pushed the posthog-code/files-nav-instrumentation branch from c13894d to 42e2d31 Compare July 24, 2026 17:21
@fercgomes
fercgomes enabled auto-merge (squash) July 24, 2026 17:31
@fercgomes
fercgomes merged commit 484770e into master Jul 24, 2026
224 of 226 checks passed
@fercgomes
fercgomes deleted the posthog-code/files-nav-instrumentation branch July 24, 2026 17:44
@deployment-status-posthog

deployment-status-posthog Bot commented Jul 24, 2026

Copy link
Copy Markdown

Deploy status

Environment Status Deployed At Workflow
dev ✅ Deployed 2026-07-24 18:10 UTC Run
prod-us ✅ Deployed 2026-07-24 18:33 UTC Run
prod-eu ✅ Deployed 2026-07-24 18:32 UTC Run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants