Skip to content

feat(icons+mcp): ban hand-drawn inline SVG repo-wide, polish the MCP page onto the house language - #1205

Merged
jackwener merged 4 commits into
mainfrom
feat/svg-governance-mcp-polish
Jul 18, 2026
Merged

feat(icons+mcp): ban hand-drawn inline SVG repo-wide, polish the MCP page onto the house language#1205
jackwener merged 4 commits into
mainfrom
feat/svg-governance-mcp-polish

Conversation

@jackwener

Copy link
Copy Markdown
Member

Two user directives in one campaign: 手绘 SVG 是反模式 (replace + govern) and MCP 页面不够美观 (polish).

Inline-SVG sweep + governance

Scope finding: the 6 inline SVGs in mcp-page.tsx were BRAND LOGOS (Slack/LINE/Google-Calendar/Figma/Vercel/Supabase), not UI glyphs — the banner pictograms were already lucide. Convergence: all market tiles now use the catalog's majority treatment (text marks on brand-tinted tiles — 钉/飞/N/⌘ were already this; the 6 special-cased logos were the inconsistency). menu.tsx's two hand-drawn indicator glyphs → Check from the icons funnel (model-picker precedent).

Governance: icon-governance-contract gains a machine tree-walk ban — any <svg literal in .tsx under packages/ui/src or apps/desktop/src/renderer outside the audited brand-mark allowlist (bot-brand-logo.tsx, provider-brand-marks.tsx) fails the suite with a pointer to @maka/ui/icons. Allowlist is rot-guarded (losing the SVG fails too). Hand-drawn SVG can no longer re-enter.

MCP page polish

Drift Converged
Hand-rolled header PageHeader primitive, edged actions, 添加 MCP primary
Hand-rolled tabs shared underline TabsList + count pills, search right — skills rhythm
Banner icon strip labeled tiles: Terminal 本地 stdio / Plug 连接管理 / Globe 远程 HTTP
Hand-rolled empty states EmptyState primitive
Every install state colored exception-only: healthy = neutral; only 连接失败 raises destructive Chip

Zero behavior change (mcp-market contract pins verified verbatim). Plus: module-mcp visual-smoke fixture added and wired into the alignment auditor — the page is now under permanent visual governance.

Gates (merged tree = main tip already contained)

desktop 2699/2699 · ui 183/183 · typecheck · check-dead-css · knip ×2 = 0 · auditor all fixtures clean incl. module-mcp. CDP light+dark captures visually accepted by maintainer before merge. Implemented by an opus worktree agent.

Seeds the 扩展 → MCP module surface (sidebarSection 'mcp') with an mcp.json
holding two disabled servers, so the market grid, tab row, hero banner and
installed server list all render deterministically for the alignment auditor
and CDP capture. enabled:false keeps visual-smoke from attempting real npx /
HTTP connections, so rows settle in the neutral 已停用 state.
Converge the MCP module page onto the same bar as the 技能 page and the 每日回顾
redesign, presentation-only (same IPC/props/callbacks):

- Hero header now rides the shared PageHeader primitive (as=h2, title/subtitle
  + edged actions cluster; 添加 MCP is the primary CTA).
- Market/installed tabs move onto the shared underline TabsList/TabsTrigger
  primitive with count pills, matching the skills tab-row rhythm; the search
  field pins to the tab row's right edge.
- Empty + no-results states use the shared EmptyState primitive.
- Installed server status is exception-only (#651): a healthy/expected server
  shows no status color — its label rides plain muted text and a neutral dot;
  only a real 连接失败 raises a destructive Chip + colored dot.
- The 把 Maka 连接到你的工作环境 banner's pictogram cluster becomes labeled
  library-icon tiles (Terminal/Plug/Globe), and the per-template market marks
  drop their hand-drawn brand SVGs for the catalog text mark on the existing
  brand-tinted tile (de-inlines all 6 inline <svg> in this file — Task A).
…the funnel

Hand-drawn inline SVG is an anti-pattern — generic UI glyphs must ride the
@maka/ui/icons lucide funnel so they share one stroke, sizing seam and family.

- menu.tsx: the checkbox + radio ItemIndicator glyphs drop their inline check
  <svg> for <Check> from ../icons.js (same precedent as model-picker's
  ItemIndicator), keeping the lucide funnel intact.
- icon-governance-contract: a new pin machine-walks packages/ui/src and
  apps/desktop/src/renderer (the same tree-walk the repo-wide OverlayScrollbars
  ban uses) and fails on any <svg> literal in a .tsx outside an audited
  brand-mark allowlist (bot-brand-logo.tsx, provider-brand-marks.tsx). The
  allowlist is guarded against rot; new offenders fail with a message pointing
  at @maka/ui/icons. icons.tsx needs no exemption — it is a pure lucide
  re-export with zero <svg> literals.
The MCP module page now has a visual-smoke fixture; add it to the
audit-alignment FIXTURES so the row-alignment governance tool sweeps the
polished header, tab row, market grid and installed list too.
@jackwener
jackwener merged commit c2239d2 into main Jul 18, 2026
jackwener added a commit that referenced this pull request Jul 18, 2026
#1205 replaced the MCP market's official brand marks with generic text
marks (S / LINE / 31 / F / ▲ / S) — wrong direction. Famous brands must
show their real logos. This restores the six official marks using the
same architecture provider-brand-marks.tsx already established: vendored
.svg assets imported as URLs, rendered via <img> (color) or a currentColor
mask (monochrome), never inline hand-drawn <svg> in the component TSX.

- Recover Slack / LINE / Google Calendar / Figma / Vercel / Supabase SVGs
  byte-faithfully from the pre-#1205 inline markup (commit e48be52) into
  apps/desktop/src/renderer/assets/mcp-brands/*.svg.
- Add McpBrandMark + hasMcpBrandMark (mcp-brand-marks.tsx). Color marks
  ride <img>; monochrome ▲/LINE ride a mask so they inherit the plate
  foreground in light + dark. Brands without a faithful asset (钉钉/飞书/
  Notion/macOS/…) keep the catalog text mark — no hand-drawn approximations.
- Wire McpCatalogCard (market + installed tiles) to McpBrandMark; branded
  tiles drop the per-brand tint for a quiet neutral plate, matching how
  .providerLogo treats color marks. Drop the now-unused brand tint tokens.

Governance: the component imports .svg assets (not .tsx <svg> literals), so
it needs no icon-governance inline-SVG allowlist entry. Tile polish from
#1205 is preserved; only the logo removal is reverted.
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.

1 participant