news 2026/9/10 1:37:28

get-shit-done 的 /gsd:ui-review:用「六支柱对抗式视觉审计」给已实现前端代码打分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
get-shit-done 的 /gsd:ui-review:用「六支柱对抗式视觉审计」给已实现前端代码打分

get-shit-done 的 /gsd:ui-review:用「六支柱对抗式视觉审计」给已实现前端代码打分

【免费下载链接】get-shit-doneA light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code by TÂCHES.项目地址: https://gitcode.com/GitHub_Trending/getshi/get-shit-done

这篇技术指南介绍 get-shit-done(GSD)内置的/gsd:ui-review命令——一种面向已实现前端代码的「追溯式(Retroactive)六支柱视觉审计」流程。无论你的项目是否由 GSD 的 phase 体系管理,只要代码已落地,就能用它生成一份带 1–4 分分级评分、可执行的UI-REVIEW.md审计报告。读完本文,你将掌握该命令的参数形态、底层编排流程、gsd-ui-auditor子代理的对抗式审计立场、六支柱打分模型,以及 Playwright-MCP / CLI 截图与 Registry 安全审计等自动化验证手段。

命令定位:为什么需要「追溯式」审计

GSD(get-shit-done)是以 spec-driven 开发与 phase 编排为核心的轻量级上下文工程系统。它的前端流程中,/gsd:ui-phase负责在动手写代码前产出UI-SPEC.md设计契约;而/gsd:ui-review正好与之互补,它解决的是另一个问题:

代码写完之后,怎么知道它是否真的符合当初的设计契约?

从 get-shit-done/workflows/ui-review.md 的定义看,这个工作流是:

Retroactive 6-pillar visual audit of implemented frontend code. Standalone command that works on any project — GSD-managed or not.

三个关键词:

  • Retroactive(追溯式)——审计发生在执行完成之后,而不是设计阶段;
  • 6-pillar(六支柱)——围绕文案、视觉、色彩、排版、间距、体验设计六个维度分别打分;
  • Standalone(独立可用)——不要求目标工程必须是 GSD 托管项目,普通仓库也能跑。

命令的产出物固定为一个文件:{phase_num}-UI-REVIEW.md,由 commands/gsd/ui-review.md 中的 objective 明确写出。它把「前端做完了没」这种模糊问题,转成一张 6 行、满分 24 的评分表。

与周边命令的分工

命令时机产出定位
/gsd:ui-phase写代码前UI-SPEC.md生成设计契约(Design System、间距刻度、排版、色彩 60/30/10、文案约定)
/gsd:ui-review执行之后{N}-UI-REVIEW.md追溯式审计已实现代码,对照契约打分
/gsd:verify-work审计之后UAT 验证用户验收测试

其中 UI-SPEC 是审计的「基线(baseline)」,这一点在 agents/gsd-ui-auditor.md 的<upstream_input>节有明确表格:UI-SPEC 中的 Design System、Spacing Scale、Typography、Color、Copywriting Contract 五个 Section 分别对应审计时「该拿什么去核对」。若目标 phase 没有 UI-SPEC,审计则退化为对照抽象的六支柱标准。

命令形态与参数

在 docs/COMMANDS.md 的命令索引中(见/gsd-ui-review一节,约 L304–L318),命令定义如下:

参数必填说明
N(phase 编号)默认审计「最后一个已执行的 phase」

实际调用方式:

/gsd-ui-review # 审计最近完成的 phase /gsd-ui-review 3 # 指定审计 phase 3

前置条件:项目里存在已实现的前端代码;不要求该项目是 GSD 项目。产出物包括:{phase}-UI-REVIEW.md,以及在启动截图流程后存放于.planning/ui-reviews/的截图文件。

在命令文件 commands/gsd/ui-review.md 的 frontmatter 中,还能看到它声明的工具面:

  • allowed-tools:Read / Write / Bash / Glob / Grep / Agent / AskUserQuestion
  • requires: [phase]——必须有 phase 作为输入,但该值可选(默认取最后完成的 phase);
  • description 中明确其工作方式是6-pillar 打分(每项 1–4)+ 产出可执行发现

提示:GSD 命令支持gsd:与历史无前缀形式两种斜杠命名(同一命令常同时登记为/gsd:ui-review/gsd-ui-review),实际以你安装版本呈现为准。

编排流程拆解

命令本体只是入口,真正的执行由 get-shit-done/workflows/ui-review.md 这份工作流驱动。它要求先阅读 get-shit-done/references/ui-brand.md(GSD 面向用户的视觉规范),并指明可用的子代理类型必须精确为gsd-ui-auditor,不得降级为通用代理。

完整流程共 6 个阶段:

Step 0:初始化与 banner

通过 SDK 查询获取 phase 操作上下文与模型解析:

INIT=$(gsd-sdk query init.phase-op "${PHASE_ARG}") if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi AGENT_SKILLS_UI_REVIEWER=$(gsd-sdk query agent-skills gsd-ui-auditor)

需要解析出的字段包括:phase_dirphase_numberphase_namephase_slugpadded_phasecommit_docs;随后解析审计代理应使用的模型:

UI_AUDITOR_MODEL=$(gsd-sdk query resolve-model gsd-ui-auditor --raw)

最后按 ui-brand.md 的 Stage Banner 规范输出阶段横幅(横幅统一使用分隔线 +GSD ►前缀,宽度与样式不可混搭):

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ GSD ► UI AUDIT — PHASE {N}: {name} ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Step 1:探测输入状态

SUMMARY_FILES=$(ls "${PHASE_DIR}"/*-SUMMARY.md 2>/dev/null) UI_SPEC_FILE=$(ls "${PHASE_DIR}"/*-UI-SPEC.md 2>/dev/null | head -1) UI_REVIEW_FILE=$(ls "${PHASE_DIR}"/*-UI-REVIEW.md 2>/dev/null | head -1)

两个关键分支:

  • 若 SUMMARY 文件为空:直接退出并提示「Phase {N} 尚未执行,请先运行/gsd:execute-phase {N}」。这条 gate 保证了审计对象确实执行过、有真实的实现产物可查。
  • 若已存在 UI-REVIEW.md:通过AskUserQuestion询问用户是「Re-audit(重新跑一遍全新审计)」还是「View(展示现有报告后退出)」。

此外工作流保留了text mode兼容逻辑:当配置中workflow.text_mode: true或参数含--text时,所有AskUserQuestion会被替换为纯文本编号列表。这是为 OpenAI Codex、Gemini CLI 等没有AskUserQuestion的非 Claude 运行时准备的通道。

Step 2–3:收集上下文并拉起审计子代理

工作流为该 phase 目录构建文件清单并全部交给子代理阅读:

  • 所有SUMMARY.md——各计划实际构建了什么;
  • 所有PLAN.md——本来打算构建什么;
  • UI-SPEC.md(若存在)——审计基线;
  • CONTEXT.md(若存在)——被锁定的用户决策。

随后拼装审计 prompt 并以subagent_type="gsd-ui-auditor"精确拉起:

Agent( prompt=ui_audit_prompt, subagent_type="gsd-ui-auditor", model="{UI_AUDITOR_MODEL}", description="UI Audit Phase {N}" )

工作流对 Codex 运行时还有一条ORCHESTRATOR RULE:一旦调用Agent(),编排者必须立即停止读取文件、编辑代码或运行测试,等待子代理返回结果,以避免重复劳动与上下文浪费。

Step 4:处理返回并展示成绩单

若子代理返回## UI REVIEW COMPLETE,编排者向用户呈现压缩版成绩单(总分 /24 + 六支柱分表 + Top 3 修复项 + 完整报告路径),末尾附带明确的 Next 指引——/clear之后通常二选一:

  • /gsd:verify-work {N}——进入 UAT 测试;
  • /gsd:plan-phase {N+1}——规划下一 phase。

Step 5:按配置提交

gsd-sdk query commit "docs(${padded_phase}): UI audit review" --files "${PHASE_DIR}/${PADDED_PHASE}-UI-REVIEW.md"

仅当commit_docs配置开启时才执行提交。

gsd-ui-auditor:一个被设计成「不手软」的子代理

审计的真正执行者是 agents/gsd-ui-auditor.md 定义的gsd-ui-auditor子代理。它的角色声明非常直白:以对抗性姿态审查已实现前端,对已构建内容按设计契约或六支柱标准打分,且不得为缓和结论而把分数平均上抬。

FORCE 立场与常见「发软」模式

子代理内置的默认假设是:在截图或代码分析证明之前,每个支柱都视为存在缺陷;起始假设是 UI 偏离了设计契约,凡是偏差都必须暴露。它甚至显式列出审计员最常见的五种自我放水路径,要求审计时绕开:

  1. 把各支柱分数向上取平均,避免某一项分数看起来太难看;
  2. 把「组件存在」当作「UI 正确」的证据,而不去核对间距、色彩、交互;
  3. 不按 UI-SPEC.md 的断点与间距刻度检验,仅凭肉眼判断布局;
  4. 只验证品牌主色合规,就为 Color 支柱打满分,却不检查 60/30/10 分布;
  5. 找出 3 个优先修复项就停手,明明存在 6 个以上问题。

发现项两级分类

审计产出的每条发现必须有明确分类:

  • BLOCKER:支柱得 1 分,或某个具体缺陷直接阻断用户完成任务——发布前必修;
  • WARNING:支柱得 2–3 分,或某缺陷降低质量但不阻断流程——建议修复。

同时有一条硬性约束:每个被评分的支柱,都必须至少有一条具体发现来支撑该分数,杜绝无依据打分。

六支柱打分模型(1–4 × 6)

评分定义如下:

分值含义
4Excellent——未发现问题,超出契约
3Good——有轻微问题,契约基本达成
2Needs work——存在明显缺口,契约部分达成
1Poor——问题严重,契约未达成

总分Σ = 0–24。六个支柱及其审计方法与目标在 agents/gsd-ui-auditor.md 的<audit_pillars>节有详细定义,每项都给出可复制的 grep 检查命令,本质是把「视觉质量」翻译成可静态扫描的证据:

Pillar 1:Copywriting(文案)

用 grep 扫描字符串字面量,查找泛化标签、空态与报错文案:

# 查找泛化标签 grep -rn "Submit\|Click Here\|OK\|Cancel\|Save" src --include="*.tsx" --include="*.jsx" 2>/dev/null # 查找空态模式 grep -rn "No data\|No results\|Nothing\|Empty" src --include="*.tsx" --include="*.jsx" 2>/dev/null # 查找报错模式 grep -rn "went wrong\|try again\|error occurred" src --include="*.tsx" --include="*.jsx" 2>/dev/null

有 UI-SPEC 时逐条比对契约声明的 CTA / 空态 / 报错文案与实际字符串;无契约时对照 UX 最佳实践标记泛化文案。

Pillar 2:Visuals(视觉)

不依赖 grep,检查组件结构与视觉层级信号:主屏是否有清晰视觉焦点?纯图标按钮是否配 aria-label 或 tooltip?是否通过尺寸、字重或颜色制造视觉层级?

Pillar 3:Color(色彩)

# 统计强调色用量 grep -rn "text-primary\|bg-primary\|border-primary" src --include="*.tsx" --include="*.jsx" 2>/dev/null | wc -l # 查找硬编码颜色 grep -rn "#[0-9a-fA-F]\{3,8\}\|rgb(" src --include="*.tsx" --include="*.jsx" 2>/dev/null

有 UI-SPEC 时验证强调色只出现在契约声明过的元素上;无契约时标记强调色滥用(>10 个元素)与硬编码颜色。

Pillar 4:Typography(排版)

# 统计正在使用的字号种数 grep -rohn "text-\(xs\|sm\|base\|lg\|xl\|2xl\|3xl\|4xl\|5xl\)" src --include="*.tsx" --include="*.jsx" 2>/dev/null | sort -u # 统计字重种数 grep -rohn "font-\(thin\|light\|normal\|medium\|semibold\|bold\|extrabold\)" src --include="*.tsx" --include="*.jsx" 2>/dev/null | sort -u

有契约时只允许契约声明的字号与字重;无契约时若出现 >4 种字号或 >2 种字重即标记。

Pillar 5:Spacing(间距)

# 间距类使用分布 grep -rohn "p-\|px-\|py-\|m-\|mx-\|my-\|gap-\|space-" src --include="*.tsx" --include="*.jsx" 2>/dev/null | sort | uniq -c | sort -rn | head -20 # 查找任意值(arbitrary value) grep -rn "\[.*px\]\|\[.*rem\]" src --include="*.tsx" --include="*.jsx" 2>/dev/null

有契约时核对间距是否符合声明的刻度;无契约时标记任意间距值与不一致模式([13px]这类 Tailwind arbitrary value 通常是间距体系失控的信号)。

Pillar 6:Experience Design(体验设计)

# 加载态 grep -rn "loading\|isLoading\|pending\|skeleton\|Spinner" src --include="*.tsx" --include="*.jsx" 2>/dev/null # 错误态 grep -rn "error\|isError\|ErrorBoundary\|catch" src --include="*.tsx" --include="*.jsx" 2>/dev/null # 空态 grep -rn "empty\|isEmpty\|no.*found\|length === 0" src --include="*.tsx" --include="*.jsx" 2>/dev/null

打分依据:加载态是否齐全、是否使用错误边界、空态是否被处理、动作是否有禁用态、破坏性操作是否有二次确认。

截图取证:从「纯代码审计」升级到「真实渲染审计」

单纯的类名 grep 无法证明视觉正确性。因此审计器内置了两级截图取证机制,并且在此之前先跑一道gitignore gate

gitignore gate(截图入库安全闸)

为了防止二进制截图被误提交进 git 历史,每次审计在截图之前无条件执行:

mkdir -p .planning/ui-reviews # 若不存在则写入 .gitignore,忽略 *.png/*.webp/*.jpg 等

即使审计完成后用户执行git add .,截图也不会进入提交。

路线一:Playwright-MCP(优先)

会话中存在mcp__playwright__*工具时直接走自动化验证,跳过 CLI 方案:

mcp__playwright__navigate(url="http://localhost:3000") mcp__playwright__screenshot(name="desktop", width=1440, height=900) mcp__playwright__screenshot(name="mobile", width=375, height=812)

随后针对 UI-SPEC 中列出的每个组件逐一路由访问并截屏比对,例如「组件 X 宽度是否真的为 70vw」「强调色是否只出现在声明过的元素」「间距是否符合声明的刻度」。量化的偏差(尺寸、颜色、布局)自动作为对应支柱下的补充发现写入报告;而品牌感、内容语气这类需要主观判断的项目则标记needs_human_review: true,在自动轮次结束后单独呈现给用户。

路线二:CLI 截屏(降级路径)

无 MCP 时按 agents/gsd-ui-auditor.md 的<screenshot_approach>检测本地 dev server(依次尝试端口 3000 → 5173 Vite 默认 → 8080),命中后以npx playwright screenshot截取桌面/移动/平板三档:

DEV_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3000 2>/dev/null || echo "000") if [ "$DEV_STATUS" = "200" ]; then SCREENSHOT_DIR=".planning/ui-reviews/${PADDED_PHASE}-$(date +%Y%m%d-%H%M%S)" mkdir -p "$SCREENSHOT_DIR" npx playwright screenshot http://localhost:3000 \ "$SCREENSHOT_DIR/desktop.png" --viewport-size=1440,900 2>/dev/null npx playwright screenshot http://localhost:3000 \ "$SCREENSHOT_DIR/mobile.png" --viewport-size=375,812 2>/dev/null npx playwright screenshot http://localhost:3000 \ "$SCREENSHOT_DIR/tablet.png" --viewport-size=768,1024 2>/dev/null else echo "No dev server at localhost:3000 — code-only audit" fi

若 dev server 未运行,审计自动降级为纯代码审计(Tailwind 类审计、泛化文案字符串审计、状态处理检查),并在报告中注明未捕获视觉截图。这一可用性设计(运行时可探测、无需任何配置改动)在 get-shit-done/workflows/ui-review.md 的「Automated UI Verification」一节也有镜像说明。

Registry 安全审计:供应链维度的加分项

六支柱打分完成后、写报告之前,若项目满足两个条件——存在components.json(即初始化过 shadcn)UI-SPEC.md 列出了第三方 registry——则执行一道组件安全审计:

test -f components.json || echo "NO_SHADCN" # 拉取实际安装的 block 源码 npx shadcn view {block} --registry {registry_url} 2>/dev/null > /tmp/shadcn-view-{block}.txt # 检查可疑模式 grep -nE "fetch\(|XMLHttpRequest|navigator\.sendBeacon|process\.env|eval\(|Function\(|new Function|import\(.*https?:" /tmp/shadcn-view-{block}.txt 2>/dev/null # 与本地版本 diff,暴露安装后被改动的部分 npx shadcn diff {block} 2>/dev/null

可疑模式的判定规则相当明确:

标志模式风险类别
fetch(/XMLHttpRequest/navigator.sendBeaconUI 组件发起的网络访问
process.env环境变量外泄向量
eval(/Function(/new Function动态代码执行
import(http:/https:外部动态导入
非压缩源码中的单字符变量名混淆指示

命中任一标志时:在UI-REVIEW.md中「Files Audited」之前插入Registry Safety章节,逐个列出 registry URL、带行号的可疑代码与风险类别;每个被标记的 block 使 Experience Design 支柱扣 1 分(下限 1);若shadcn diff显示本地存在改动则仅作信息记录,不视为标志。全绿时写入Registry audit: {N} third-party blocks checked, no flags

产物标准:UI-REVIEW.md 的固定结构

无论走哪条取证路线,审计器都必须用Write 工具(而非cat << EOFheredoc)向$PHASE_DIR/$PADDED_PHASE-UI-REVIEW.md写入报告,模板包含:

  1. 头部:Phase 编号、审计日期、基线类型(UI-SPEC.md / 抽象标准)、截图状态(captured / not captured);
  2. Pillar Scores 表:六支柱各自的 1–4 分 + 一行关键发现,末尾Overall: {total}/24
  3. Top 3 Priority Fixes:每条 = 具体问题 + 用户影响 + 具体修法;
  4. Detailed Findings:按支柱分节,低分支柱给更多细节,全部发现须带file:line引用;
  5. Files Audited:实际检查过的文件清单(find src -name "*.tsx" -o ...得到)。

报告完成后,审计器向编排者返回结构化结果(## UI REVIEW COMPLETE),其中包含总分、支柱摘要、Top 3、创建的文件路径,以及「Priority fixes / Minor recommendations」的计数。

质量门槛:什么才算一次合格的审计

工作流与子代理各自定义了 success criteria,合并起来即一次合格审计的验收清单:

  • Phase 已校验,SUMMARY.md 存在(确认执行已完成);
  • 已处理的既有审查(Re-audit / View 分支);
  • 以正确的上下文拉起gsd-ui-auditor
  • 截图前执行过 .gitignore gate;
  • 尝试过 dev server 探测,截图已捕获(或注明不可用);
  • 六支柱全部带证据打分,Top 3 优先修复项给出具体解决方案;
  • Registry 安全审计已执行(若满足前置条件);
  • UI-REVIEW.md写入正确路径,并向编排者返回结构化结果。

四条质量指示器尤其值得在复用这套方法时借鉴:证据化(每个分数都引用具体文件、行或类模式);可执行修复(应写「把装饰边框上的text-primary改为text-muted」,而不是「修一下颜色」);公平打分(4/4 是可达到的,1/4 意味着真问题,而非完美主义);比例感(低分支柱详写,通过的支柱从简)。

小结

/gsd:ui-review把「前端视觉验收」从人工点检升级为可复现、可打分、可执行的自动化审计管线:它用 UI-SPEC 设计契约或抽象标准作为基线,由gsd-ui-auditor以对抗姿态逐支柱取证打分,用 Playwright-MCP / CLI 截图提供真实渲染证据,用 Registry 安全审计补上第三方组件的供应链视角,最终沉淀为结构化的UI-REVIEW.md。对任何采用 phase + 计划执行模式、又希望前端质量可度量的团队来说,这套六支柱模型本身也是一份可以直接借鉴的验收清单。

想继续深入,可以按需阅读以下仓库文件:

  • 命令入口与工具面声明:commands/gsd/ui-review.md
  • 完整编排工作流:get-shit-done/workflows/ui-review.md
  • 审计执行主体与六支柱 grep 方法:agents/gsd-ui-auditor.md
  • 上游设计契约生成命令:commands/gsd/ui-phase.md
  • GSD 自身的品牌输出规范:get-shit-done/references/ui-brand.md
  • 命令行用法与参数索引:docs/COMMANDS.md

【免费下载链接】get-shit-doneA light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code by TÂCHES.项目地址: https://gitcode.com/GitHub_Trending/getshi/get-shit-done

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 1:35:22

浙大食品851考研专业课备考资料体系:从初试到复试全攻略

考研这条路&#xff0c;真正拉开差距的往往不是公共课&#xff0c;而是专业课。尤其像浙大食品科学与工程这种专业&#xff0c;851专业课的复习深度和资料质量&#xff0c;直接决定了你是在复试线边缘挣扎&#xff0c;还是稳稳站在录取名单的前排。我见过太多人公共课考得不错&…

作者头像 李华
网站建设 2026/9/10 1:33:43

MATLAB实现计及碳交易与需求响应的微网虚拟电厂日前优化调度

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 1:33:13

用开源组件搭建微信用户画像系统:从数据采集到画像看板

上周有个做私域运营的朋友问我&#xff1a;"微信上几百个客户&#xff0c;聊天记录、朋友圈、小程序订单都散在各个地方&#xff0c;到底怎么整理出一份能用的用户画像&#xff1f;"这不是他一个人的问题。我见过太多人把"用户画像"理解成"把微信通讯…

作者头像 李华