feat(vault): collapse multi-protocol column to "primary (+N more)" - #10
Merged
damonleelcx merged 1 commit intoJul 24, 2026
Merged
Conversation
A multi-protocol team key renders one row PER protocol group, so spelling the whole comma-joined protocol list into every one of those rows both overflowed the 22% PROTOCOLS column and just re-stated the group header. The column now leads with the protocol of the group the row is rendered under and folds the remainder into a "(+N more)" hint. The full list stays reachable via the cell's title attribute and the detail drawer, so nothing is lost — only the redundancy. Leading with the ROW'S GROUP (not the key's first protocol) is the part that matters: otherwise the openai row of an anthropic+openai key labels itself "anthropic", which is the same class of bug 20260713 fixed for the row provider chip. The rule is extracted to a pure `protocolColumn()` helper so it is unit-testable without mounting the 7k-line vault page. Single-protocol and legacy (no-bindings) rows are byte-identical to before: extraCount is 0 and no hint renders. - New: pages/user/_shared/protocol-column.ts (+ 7 tests) - i18n: vault.protocolMore in en/zh Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The Vault page's
协议 / PROTOCOLScolumn rendered every protocol a key speaks, comma-joined. A multi-protocol team key renders one row per protocol group, so that list was repeated into each of those rows — overflowing the 22% column and re-stating the group header.The column now shows the protocol of the group the row is under, plus a
(+N more)hint:The full list is still reachable via the cell's
titleand the detail drawer.Why it leads with the row's group
Not the key's first protocol. Otherwise the
openairow of an anthropic+openai key labels itselfanthropic— the same class of bug20260713-multiprotocol-vk-web-displayfixed for the row provider chip. There's a regression test for exactly this.No behaviour change for single-protocol keys
extraCountis 0 and no hint renders, so single-protocol and legacy (no-bindings) rows are byte-identical to before.Notes
protocolColumn()helper so it's testable without mounting the 7k-line vault page.vault.protocolMore(en + zh).Test
['anthropic','openai']→openai (+1)case, the group-ordering regression, and the empty/legacy fallbacks.tsc --noEmitclean./user/vault), on a team key bound to two protocols across two providers (anthropic/zhipu+openai_compatible/deepseek). The key renders once per group:openai (codex)→openai (+1)anthropic (claude)→anthropic (+1)openaiwith no hint.Unrelated deployment bug found while verifying
/user/vaultis dead on any server installed byworkflow/CD/installer/server-install.sh: its generated nginx config proxies/auth,/team,/system,/local-apibut has nolocation /api, so/api/user/{vault,import}/*falls throughtry_filesto the SPA — GET returnsindex.htmlwith a 200 (looks fine, parses as empty), POST returns nginx 405. Backend implements the routes (router.go:737). Tracked separately; not part of this PR.🤖 Generated with Claude Code