Skip to content

feat: add an explorer tab rooted at the chat project directory - #3598

Closed
warren830 wants to merge 1 commit into
kirodotdev:mainfrom
warren830:feat/explorer-panel-tab
Closed

feat: add an explorer tab rooted at the chat project directory#3598
warren830 wants to merge 1 commit into
kirodotdev:mainfrom
warren830:feat/explorer-panel-tab

Conversation

@warren830

@warren830 warren830 commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Problem / Motivation

A chat's project directory can be browsed in the side panel — FolderPanel and
the folder tab kind both already exist — but there is no way to re-open that
view on demand once it is gone.

Three entry points exist today, and each has a gap:

Existing entry point Where Gap
Auto-open on first visit ChatPage.tsxtabsCtl.openFolder(_slotProject, activeSlot) Fires once per slot+path, gated behind a persisted mc-folder-panel-opened:<slot>:<path> marker. Close the tab and it never returns.
Directory chip in a message handleFolderOpentabsCtl.openFolder Requires a message that happens to name a directory. Nothing names the project root in a fresh chat.
Clicking a directory inside a panel SidePanel.tsxonFolderOpen Requires already being in a panel that lists that directory.

So the reachable state is: the tab was auto-opened once, the user closed it, no
message mentions the project root — and the project tree is now unreachable for
that chat short of clearing localStorage.

Why it matters

The auto-open marker is persisted, so this is a one-way door per chat: closing
the tab is irreversible through the UI. The panel is the surface where a user
orients themselves in the project a chat is scoped to, and the recovery today is
to know that a localStorage key governs it.

Scope note, to avoid overstating the increment: this PR adds a fourth entry
point. It does not add the folder panel, the folder tab kind, or the auto-open —
those already exist on main (auto-open landed in #1636, after the v0.2.0 tag).

What changed

One row in the chat side panel's + menu — Project tree — that opens a
folder tab rooted at the chat's own project directory.

  • MenuKind = ViewKind | 'folder', and NEW_MENU_LABEL_KEY /
    NEW_MENU_DESC_KEY / NEW_MENU_GROUPS / DEV_ONLY_VIEWS widen to it. The
    existing partition test then pins the new entry into exactly one group.
  • Placed in the workspaces group beside side and browser, with a
    FolderTree icon.
  • folder is deliberately a document-kind tab, not a ViewKind: the panel
    unmounts category views on tab switch, which would discard the cwd the user
    browsed to.
  • openMenuItem routes 'folder' to openFolder(projectDir ?? '', slot), so
    the root is read at click time. Panel tabs are already bucketed per chat slot
    (mc-panel-tabs:<slot>), so switching chats browses that chat's own tree with
    no new state-scoping logic.
  • newMenuSections gains hasProjectDir?: boolean; the row is hidden when
    the chat has no project directory, since its root is that directory and the
    panel offers no way to re-root. Defaults to true so callers with no notion
    of a project (the grouping tests) still see the full catalog.
  • i18n: menu_folder / menu_folder_desc in en.manual.json (the correct home
    for keys with no extractable source literal, matching menu_browser) plus 11
    translation locales, regenerated en-XA.json, and a translator note in
    en.context.json.

The label is Project tree, not Files or Explorer: the file-explorer app's
own app.json already ships "displayName": "Files", so those names were taken.
The description states the contrast in user-visible copy — "Browse the whole
project tree, not just files this chat touched".

Tests

website/src/test/sidePanelAddMenu.test.tsx — the render helper is
parameterized with projectDir, and three cases were added:

Test Locks in
Row absent without a project dir The gate — no dead-end row that can only open an empty listing
Row opens a tab titled by the directory basename The root is the chat's project dir, read at click time
newMenuSections drops only that row Its group and all group ids survive the filter

Two existing group-order assertions were updated to include 'folder'. 12/12
pass in that file.

Gates run locally: npm run i18n:check (all sub-gates, including key parity
across 12 locales, DNT and manifest-sync), npx tsc --noEmit clean, eslint
0 errors.

Manual verification

The empty-panel launcher grid renders from the same catalog
(menuItems = menuSections.flatMap(...)), so the row appears there too. That
surface could not be captured: auto-pinned tabs mean tabs.length is never 0 in
a real instance.

Not verified: this branch has not been launched end-to-end from a packaged build.

Screenshots

1. The menu entry — component harness, real stylesheet + provider stack, Playwright driving the real + button

The side panel + menu open, showing Summary / Issues / Subagents / Workflows / Git, a separator, then Side / Browser / Project tree

2. The destination — full application, instance built from this branch

The Kiro Crew dashboard with the right panel showing a folder tab titled agent-reach, rooted at /Users/ychchen/warren_ws/agent-reach, listing config, docs, scripts, tests, CHANGELOG.md, pyproject.toml, README.md and more

Frame 2 shows the destination, not the click that reached it — on its own it
does not distinguish this entry from the base's auto-open. Frame 1 is the
evidence for the entry itself.

Locale register

Each translation follows its own catalog's sibling menu_files_desc register:
infinitive in es/pt (Explorar / Navegar), informal in bn (করো). The 11
non-English strings are machine-generated and would benefit from a native
speaker's eye.

no linked issue: this is a small usability gap found while using the panel, not
a filed report.

@warren830
warren830 requested a review from a team August 14, 2026 13:59
@warren830
warren830 requested a review from a team as a code owner August 14, 2026 13:59
@github-actions github-actions Bot added fork Pull request from a fork (external contributor) readiness: action required A blocking check or review needs attention readiness: checking Automated validation is still running and removed readiness: action required A blocking check or review needs attention labels Aug 14, 2026
@github-actions

github-actions Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

GPT 5.6 Review (fork) — ✅ no blocking findings

Reviewed 5e4f73a11fabc3558d06f664aed9a9c58a4e03b8 via the fork AI-review pipeline; updated in place on each push.

Review details

No findings.
[GPT-REVIEWED] 5e4f73a

@github-actions

github-actions Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Design Review (Fable 5, fork) — ✅ PASS

Design-level review of 5e4f73a11fabc3558d06f664aed9a9c58a4e03b8 via the fork AI-review pipeline — updated in place on each push. A BLOCK verdict blocks PR readiness; PASS/CONCERNS are advisory.

Design-Verdict: PASS

A real recoverability gap, closed at the right layer — the existing menu catalog — reusing openFolder and per-slot tab buckets with no new state.

[DESIGN-REVIEWED] 5e4f73a

@github-actions

github-actions Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

First Principles Review (Fable 5, fork) — 🔴 BLOCK

Premise-level review of 5e4f73a11fabc3558d06f664aed9a9c58a4e03b8 via the fork AI-review pipeline — why this exists and whether the shipped surface is the smallest honest version. Updated in place on each push. A BLOCK verdict blocks PR readiness; PASS/CONCERNS are advisory.

I've finished the investigation. The decisive finding: commit 54c8ffd (PR #4072, in the trusted base) deleted the folder auto-open and its mc-folder-panel-opened marker that this PR's motivation is built on, and replaced the old touched-files list with a pinned, non-closable Files tab that renders the full project workspace tree. The review below reflects that.

First-Principles-Verdict: BLOCK

The gap this row fills was closed by #4072: the base's pinned Files tab already browses the whole project tree, and the motivating one-way-door marker no longer exists.

What this change ships

Intent: let a user re-open a browsable project tree for a chat after the auto-opened tab is closed — an ADDITION.

  1. "Project tree" row in the side panel + menu and empty-panel launcher — duplicate of the pinned Files tab
  2. Row hidden when the chat has no project directory — rides on item 1
  3. Clicking it opens a folder tab rooted at the chat's project dir — duplicate
  4. Row copy claims Files shows "just files this chat touched" — contradicted by the base
  5. hasProjectDir? option on newMenuSections, defaulting true — one consumer
  6. MenuKind exported type widening five tables — rides along
  7. Keys in 12 locales + translator note — rides along
  8. Two screenshots under temp-screenshots/ — repo convention, fine

Blockers

  • The named defect no longer exists in the base. The description's premise — "Auto-open ... gated behind a persisted mc-folder-panel-opened:<slot>:<path> marker. Close the tab and it never returns", citing tabsCtl.openFolder(_slotProject, activeSlot) in ChatPage — was deleted by feat: add pierre-backed diffs, editing and a project file tree #4072 (in this base). Grep mc-folder-panel-opened: 1 hit, a stale test constant (gitPanelAutoOpen.test.ts:10); 0 production sites. No persisted one-way door remains.
  • The capability already exists, always on screen. The base's Files tab is permanently pinned and non-closable (PINNED_VIEWS, usePanelTabs.ts:33; synced unconditionally at SidePanel.tsx:412) and renders the full workspace tree rooted at the chat's project dir (FilesHomePanel.tsxFileBrowserRailPierreWorkspaceTree, query ['project-tree', projectDir]). The zero option costs nobody anything; the new row is a second, weaker spelling (one-level FolderPanel listing) of a surface one click away.
  • The differentiating copy is false on the base. menu_folder_desc — "not just files this chat touched" — and the context note's "the sibling Files entry lists only the files this session touched" contrast with behavior feat: add pierre-backed diffs, editing and a project file tree #4072 removed; the base's own menu_files_desc, three lines above in the same diff hunk, reads "Project file browser with a built-in viewer".

Subtraction that resolves all three: drop the change.

Subtractions

  • Delete the stale FOLDER_PANEL_KEY_PREFIX describe block (gitPanelAutoOpen.test.ts:57-72) — it pins a marker no production code writes.

[FIRST-PRINCIPLES-REVIEWED] 5e4f73a

@github-actions

github-actions Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Opus 4.8 Review (fork) — ✅ no blocking findings

Reviewed 5e4f73a11fabc3558d06f664aed9a9c58a4e03b8 via the fork AI-review pipeline; updated in place on each push.

Review details

The diff is a straightforward, type-safe UI addition. Discovery found no candidates. I verified the two load-bearing integration points myself: openFolder(path, slot) at usePanelTabs.ts:566 matches the call openFolder(projectDir ?? '', slot), and folder is a handled TabKind (SidePanel.tsx:968, FolderPanel). Gating, i18n keys across all locales, and the MenuKind widening are all consistent, and the tests pin the behavior. No grounded defect in the changed lines.

No findings.

[OPUS-REVIEWED] 5e4f73a

@github-actions

github-actions Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

UX Review (Fable 5, fork) — ✅ PASS

UX-level review of 5e4f73a11fabc3558d06f664aed9a9c58a4e03b8 via the fork AI-review pipeline — updated in place on each push. A BLOCK verdict blocks PR readiness; PASS/CONCERNS are advisory.

UX-Verdict: PASS

"Project tree" names the outcome, opens exactly that, and hides itself when no project exists — the label keeps its promise.

Suggestions

  • it.json menu_folder_desc opens with infinitive "Sfogliare" while its sibling menu_files_desc uses imperative "Sfoglia" — align to "Sfoglia tutto l'albero del progetto…" (the PR's own register rule, applied correctly in es/pt/fr, misses here).

[UX-REVIEWED] 5e4f73a

@github-actions github-actions Bot added readiness: passed Eligible automated validation passed for the current revision and removed readiness: checking Automated validation is still running labels Aug 14, 2026
@warren830
warren830 force-pushed the feat/explorer-panel-tab branch from fe6217c to 7fd8718 Compare August 14, 2026 16:25
@github-actions github-actions Bot added readiness: action required A blocking check or review needs attention and removed readiness: passed Eligible automated validation passed for the current revision labels Aug 14, 2026
@warren830

Copy link
Copy Markdown
Contributor Author

Both advisory reviews found real problems. Addressed in 7fd87182.

First Principles — the premise was wrong, not just overstated. I checked
ChatPage.tsx:4710-4718 and the reviewer is correct: the base already
auto-opens a folder tab for the chat's project directory. It fires once per
slot+path behind a persisted mc-folder-panel-opened:<slot>:<path> marker, so
the honest gap is re-opening after it is closed, not first access. The
original description claimed the chat "had no way to look at its own tree at
all", which is false. Both the commit message and the PR body now state the
real gap.

First Principles — undeclared second surface. Also correct. The empty-panel
launcher grid reads the same catalog via menuItems = menuSections.flatMap(...),
so the entry appears there too. It is intended (the shared catalog is what keeps
the two surfaces from disagreeing) but it was undeclared; the PR body now has a
section for it.

UX — locale register. Verified against the siblings and fixed:

locale sibling menu_files_desc was now
es Explorar y editar archivos (infinitive) Explora el directorio… Explorar el directorio…
pt Navegar e editar arquivos (infinitive) Navegue pelo diretório… Navegar pelo diretório…
bn ফাইল ব্রাউজ ও এডিট করো (informal) …ব্রাউজ করুন (formal) …ব্রাউজ করো

npm run i18n:check stays green after the change and the pseudolocale was
regenerated.

Screenshot Evidence is the one check still red. The change has a genuine
visual delta, so the no-visual-delta exemption would be false and I am not
using it — a real capture is in progress against a worktree instance.

@github-actions github-actions Bot added readiness: checking Automated validation is still running and removed readiness: action required A blocking check or review needs attention labels Aug 14, 2026
@warren830
warren830 force-pushed the feat/explorer-panel-tab branch from 7fd8718 to b416b29 Compare August 14, 2026 16:33
@github-actions github-actions Bot added readiness: action required A blocking check or review needs attention readiness: checking Automated validation is still running and removed readiness: checking Automated validation is still running readiness: action required A blocking check or review needs attention labels Aug 14, 2026
@warren830
warren830 force-pushed the feat/explorer-panel-tab branch from b416b29 to c578d4c Compare August 14, 2026 16:39
@github-actions github-actions Bot added readiness: action required A blocking check or review needs attention readiness: checking Automated validation is still running and removed readiness: checking Automated validation is still running readiness: action required A blocking check or review needs attention labels Aug 14, 2026
@warren830
warren830 force-pushed the feat/explorer-panel-tab branch from c578d4c to 0745dc4 Compare August 14, 2026 17:00
@github-actions github-actions Bot added readiness: action required A blocking check or review needs attention merge conflict Branch has merge conflicts with its base — author must resolve before merge and removed readiness: checking Automated validation is still running labels Aug 16, 2026
@bolichen97

Copy link
Copy Markdown
Collaborator

Hi @warren830, a maintainer nudge on this one: it is carrying the readiness: action required label and has had no activity for about 5 days, so it is not moving toward merge.

Current state:

  • Base: 526 commits behind main
  • Merge state: CONFLICTING, so it cannot merge until the conflicts are resolved
  • Red signals:
    • Backend Tests (Windows) (1)
    • PR Readiness

Could you resolve the conflicts against the latest main and push a fix?

git fetch upstream           # or: git fetch origin, if this branch lives here
git rebase upstream/main
# resolve any conflicts, run the local gates below, then update the branch with
# a force-with-lease so the rebase lands without clobbering anyone else's work

The local gates to run before updating the branch:

black src/kiro_crew test && isort src/kiro_crew test
flake8 src/kiro_crew test && mypy src/kiro_crew
python -m pytest
cd website && npm run build && npm run test

A good part of this branch's redness is likely stale rather than a real defect: it predates a lot of what is now on main, and several of these gates (the Coverage Gate, the Windows shards, the AI review lanes) have changed since the last run here. A rebase alone often clears them. If something still fails afterwards and you believe it is a false positive, say so in a comment and we will take a look. If the change is no longer needed, feel free to close the PR.

@bolichen97
bolichen97 enabled auto-merge (squash) August 24, 2026 07:00
@dwu96 dwu96 added the needs-pr-triage PR scanner: awaiting automated triage label Aug 24, 2026
@chenmingwei23 chenmingwei23 added drive-to-green PR claimed by drive-to-green pipeline and removed needs-pr-triage PR scanner: awaiting automated triage labels Aug 24, 2026
@chenmingwei23

Copy link
Copy Markdown
Contributor

Kiro Crew [operator: chenmingwei23#de330d0c]: This PR has been inactive for 7+ days with failing CI. I have assessed the blockers and they appear resolvable -- I will push fixes directly to this branch as a co-author.

Assessment: All five AI review lanes are clean/advisory (GPT pass, Design pass, First Principles pass, Opus pass, UX advisory CONCERNS already addressed in 7fd8718). The only failures are (1) a merge conflict on frontend files (SidePanel.tsx + i18n locale JSON) resolvable from the PR's clear intent vs main, and (2) one Backend Tests (Windows) shard red that is a pre-existing temp-file PermissionError in crew_chat.py / test_active_turn_session_key.py -- files not in this PR's diff. Fix plan: rebase onto latest main to cut a fresh merge ref (resolving the conflict and re-running the stale Windows shard), verify frontend gates (tsc/vitest), and drive to green.

If you would prefer I do not touch this PR, add the pr-no-autofix label.

The base auto-opens a folder tab for a chat's project directory, but only
once per slot+path and behind a persisted localStorage marker, so once it
is closed there is no way to open it again. Offer it from the + menu, which
makes re-opening a deliberate affordance rather than a one-shot side effect.

The root is the chat's own project directory, read at click time, and the
tab lands in that chat's per-slot strip bucket. Those two together are what
makes switching chats browse the tree of the chat you switched to, with no
new state-scoping logic -- the same pairing Terminal already uses for its
cwd.

`folder` is a document-kind tab rather than a ViewKind because the panel
unmounts category views on tab switch, which would discard the cwd the
user browsed to. That widens the menu's key type to MenuKind, keeping the
compile-time guarantee that an entry without a label and description is a
type error.

The row is hidden for a chat with no project directory, matching the
Summary gate: with no root it could only open an empty listing the user
cannot re-root from the panel, and hiding it removes the dead end rather
than wording around it.

The empty-panel launcher grid renders the same catalog, so the entry
appears there too -- intended, and it keeps the two surfaces from
disagreeing about what the panel can open.

The entry is named "Project tree", not "Explorer": the sibling "Files"
entry lists only the files this session touched, and the file-explorer app
already displays as "Files", so a third use of that word would collide
rather than disambiguate. "tree" also matches the entry's icon, and each
locale's description now states the contrast in user-visible copy instead
of leaving it in translator context. Descriptions follow each catalog's
existing register: infinitive in es and pt, informal in bn.

Co-authored-by: Kiro Crew <noreply@kirodotdev.github.io>
@chenmingwei23
chenmingwei23 force-pushed the feat/explorer-panel-tab branch from aaeb578 to 5e4f73a Compare August 25, 2026 05:51
@chenmingwei23

Copy link
Copy Markdown
Contributor

Kiro Crew [operator: chenmingwei23]: Rebased this PR onto main (97d9c23) to clear the merge conflict, per the drive-to-green pipeline. Changes made, all as one force-pushed commit (5e4f73a) preserving warren's authorship:

Conflict resolution (main's structure + this PR's additions):

  • website/src/pages/chat/SidePanel.tsx: kept main's expanded lucide import list (MessageCircleQuestionMark, MoreHorizontal, Folders, LinkIcon, Pin) and added this PR's FolderTree; dropped the PR-side PanelBottomSolid panels import (main removed it and nothing references it). Kept both pins (main) and folder (this PR) entries in NEW_MENU_LABEL_KEY / NEW_MENU_DESC_KEY.
  • website/src/test/sidePanelAddMenu.test.tsx: merged expected menu groups -- main's session-output group (summary, pins, issues, links, subagents, workflows, git) with this PR's folder appended to the workspaces group (side, browser, folder), in all three assertions.
  • 13 locale files (bn, de, en-XA, en.manual, es, fr, hi, it, ja, ko, pt, ru, zh-CN): kept main's evolved copy (e.g. the new menu_files_desc, menu_links keys) and inserted this PR's menu_folder / menu_folder_desc keys at their alphabetical position. All files JSON-validated.

One functional fix required by the rebase:

  • Restored openFolder in SidePanel's tabsCtl destructuring. Main removed it when its last in-file consumer went away; this PR's openMenuItem folder branch needs it. Without it the panel throws ReferenceError: openFolder is not defined at render (caught by this PR's own test suite).

Commit message: retyped em dashes to -- (ASCII-only repo standard); content unchanged. Added a Co-authored-by: Kiro Crew trailer.

Local verification on the rebased head: tsc --noEmit clean; full vitest suite 1522 files / 23805 tests passed; eslint 643 warnings vs 664 ceiling; lint:i18n and i18n:check pass; pseudolocale (en-XA) and settings registry regenerated with zero drift.

The Windows temp-file PermissionError flake noted in triage is pre-existing and not in this diff; if it reds again on this head it will be re-run, not patched here.

@github-actions github-actions Bot added readiness: checking Automated validation is still running readiness: action required A blocking check or review needs attention and removed readiness: action required A blocking check or review needs attention merge conflict Branch has merge conflicts with its base — author must resolve before merge readiness: checking Automated validation is still running labels Aug 25, 2026
@chenmingwei23

Copy link
Copy Markdown
Contributor

Kiro Crew [operator: chenmingwei23]: Status after the rebase drive: all CI checks are green on 5e4f73a11 (the one red was a known WeCom decrypt flake, passed on re-run) and four review lanes (GPT, Opus, Design, UX) are clean. First Principles is a BLOCK, and I verified each of its claims independently against the current base before acting:

  • mc-folder-panel-opened has zero production references on main -- feat: add pierre-backed diffs, editing and a project file tree #4072 (merged Aug 18, after this PR was authored Aug 14) removed the auto-open marker this PR's description cites. The "close it and it never returns" defect no longer exists.
  • The pinned Files tab is permanent and non-closable (PINNED_VIEWS in usePanelTabs.ts) and renders the full workspace tree rooted at the chat's project directory (FilesHomePanel -> FileBrowserRail, query ['project-tree', projectDir]). The capability this row adds is already always on screen.
  • The row's description copy ("not just files this chat touched") is therefore no longer accurate against the base.

All three verify as true, so this is a real premise-level finding, not one to override. The base simply moved underneath this PR between authoring and now: #4072 shipped a stronger version of the same capability four days after this was opened. The rebase and conflict-resolution work above stands (the branch is conflict-free and fully green apart from this verdict), but whether to keep a second entry point to the project tree is a product decision for the maintainers and @warren830, not something the pipeline should decide.

Escalating to the maintainer with the verification evidence. One small cleanup is worth keeping regardless of the outcome: the stale FOLDER_PANEL_KEY_PREFIX describe block in gitPanelAutoOpen.test.ts pins a marker no production code writes.

@github-actions github-actions Bot added readiness: action required A blocking check or review needs attention and removed readiness: checking Automated validation is still running labels Aug 25, 2026
@chenmingwei23

Copy link
Copy Markdown
Contributor

Kiro Crew [operator: chenmingwei23]: Closing this as superseded by #4072, per maintainer decision.

@warren830 -- thank you for this contribution, and genuinely sorry about the timing. When you authored this on Aug 14 the gap was real: the auto-opened folder tab was one-shot behind a persisted marker, and closing it left no way back. Your commit message and the premise-level reasoning in it were solid -- the review bots verified your description of the base was accurate for the base you wrote against. Four days later #4072 landed a permanently pinned Files tab that renders the full project tree rooted at the chat's project directory, which removed both the defect and the need for a second entry point. The base simply moved underneath the PR; nothing here was wrong when written.

The rebase work from the drive-to-green pass (conflict resolution across SidePanel + 13 locales, all CI green, four review lanes clean) is preserved on your branch feat/explorer-panel-tab at 5e4f73a should this ever be revisited.

One small piece of your review remains actionable and will be filed separately: the stale FOLDER_PANEL_KEY_PREFIX describe block in gitPanelAutoOpen.test.ts pins the deleted marker and should be cleaned up.

Hope to see more PRs from you -- this one lost to timing, not to quality.

auto-merge was automatically disabled August 25, 2026 11:04

Pull request was closed

@github-actions github-actions Bot removed the readiness: action required A blocking check or review needs attention label Aug 25, 2026
@iamwhatever iamwhatever removed the drive-to-green PR claimed by drive-to-green pipeline label Aug 25, 2026
@warren830

Copy link
Copy Markdown
Contributor Author

Kiro Crew [operator: chenmingwei23]: Closing this as superseded by #4072, per maintainer decision.

@warren830 -- thank you for this contribution, and genuinely sorry about the timing. When you authored this on Aug 14 the gap was real: the auto-opened folder tab was one-shot behind a persisted marker, and closing it left no way back. Your commit message and the premise-level reasoning in it were solid -- the review bots verified your description of the base was accurate for the base you wrote against. Four days later #4072 landed a permanently pinned Files tab that renders the full project tree rooted at the chat's project directory, which removed both the defect and the need for a second entry point. The base simply moved underneath the PR; nothing here was wrong when written.

The rebase work from the drive-to-green pass (conflict resolution across SidePanel + 13 locales, all CI green, four review lanes clean) is preserved on your branch feat/explorer-panel-tab at 5e4f73a should this ever be revisited.

One small piece of your review remains actionable and will be filed separately: the stale FOLDER_PANEL_KEY_PREFIX describe block in gitPanelAutoOpen.test.ts pins the deleted marker and should be cleaned up.

Hope to see more PRs from you -- this one lost to timing, not to quality.

No problem, I will contribute more

@warren830
warren830 deleted the feat/explorer-panel-tab branch August 26, 2026 14:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fork Pull request from a fork (external contributor)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants