`ContextMenuExt::context_menu()` wraps the host element and keys its element
state by a hardcoded "context-menu" id. The wrapper's id enters the
GlobalElementId stack *before* the wrapped row's own `("sidebar-tab", ix)`,
so every sidebar tab row resolved to the same state — the same
`Rc<RefCell<ContextMenuSharedState>>`. Opening one menu set `open = true` for
all rows, and each row then re-rendered the same PopupMenu entity at the same
anchor. The panel is opaque so the stack was invisible, but the popover shadow
is not: its alpha composited once per tab. That is the whole of "the more tabs,
the thicker the right-click shadow" — no packaging or config involvement.
The tab menu now uses the same carrier as the file tree: rows only record the
anchor and index, and a single `deferred(anchored(PopupMenu))` is drawn from
the workspace root, so the component's own popover shadow stays single-layer.
The menu is dropped when the TABS section folds, and skipped when its captured
index no longer exists.
Alongside it:
- CHANGELOG: 1.1.0 gains this fix and issue #38 (two notify wrappers wrapping
each other until Codex's config.toml reached 130MB); release date moves to
2026-08-18.
- docs/release-notes/v1.1.0.md: release notes in the 1.0.0 format, with PR
credits, reporter credits, and a pointer to the issue templates.
- README / THIRD-PARTY-NOTICES: GPUI and gpui-component are credited and
declared — both Apache-2.0, compiled as lightly patched forks.
- .gitignore: ignore the whole `.probe-*/` family instead of one name at a time.