ux-audit

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

ux-audit — Scenario Audit Loop

ux-audit — 场景审计循环

Part of super-ux — see system-map.md for the whole pipeline and the four sync rules. Start any audit by running the linter (
python3 docs/ux/lint.py
) — it catches structural drift for free before the code-tracing passes.
Verify that the code actually delivers every scenario in
docs/ux/scenarios.md
: every step reachable, every button present, every state handled, every error honest. Output: a versioned report in
docs/ux/audits/
plus updated audit statuses in the base.
Format contract: scenario-format.md (ux-contract v4) — report structure, verdicts (PASS / PARTIAL / FAIL / BLOCKED), severities.
Precondition:
docs/ux/scenarios.md
exists. If it doesn't, stop and run the
ux-scenarios
skill first — there is nothing to audit against.
Full context: when
docs/ux/foundation.md
exists, audit each scenario WITH its chain — load the traced story's acceptance criteria (Given/When/ Then) as additional checks, and note whether the implementation actually serves the job and journey stage, not just renders the elements. A flow whose buttons all exist but whose job outcome is unreachable is PARTIAL at best. When
docs/ux/flows.md
exists, also verify the code implements the flow diagram: every node reachable, every edge (including error edges) wired, screen states from the flow's table present — unimplemented nodes/edges are findings on the traced scenarios.
属于super-ux的一部分——查看system-map.md了解完整流程及四项同步规则。开始任何审计前请先运行代码检查器(
python3 docs/ux/lint.py
)——它能在代码追踪环节前自动发现结构偏差。
验证代码是否真正实现了
docs/ux/scenarios.md
中的每一个场景:确保每一步都可访问、每一个按钮都存在、每一种状态都得到处理、每一个错误都如实呈现。输出结果:一份存储在
docs/ux/audits/
目录下的带版本报告,以及场景库中更新后的审计状态。
格式约定:scenario-format.md(ux-contract v4)——包含报告结构、 verdict(PASS / PARTIAL / FAIL / BLOCKED)、严重等级定义。
前置条件:
docs/ux/scenarios.md
必须存在。如果不存在,请先停止当前操作并运行
ux-scenarios
技能——没有场景库就无法开展审计。
**完整上下文:**当
docs/ux/foundation.md
存在时,需结合场景的关联链路进行审计——加载已追踪故事的验收标准(Given/When/Then)作为额外检查项,并记录实现是否真正满足任务需求和旅程阶段,而非仅渲染元素。若某个流程的所有按钮都存在但任务目标无法达成,其verdict最高为PARTIAL。当
docs/ux/flows.md
存在时,还需验证代码是否实现了流程图:确保每个节点都可访问、每条边(包括错误路径)都已连接、流程表格中定义的屏幕状态都已呈现——未实现的节点/边将作为追踪场景中的问题记录。

Copy scope (
copy
)

文案检查范围(
copy

Single-pass, and the twin of
python3 docs/brand/lint.py
: the linter proves the mechanical half of the brand pack, this judges the half that needs a reader. Requires
docs/brand/voice.md
; without a recorded pack there is nothing to judge against except taste, so route to
/brand-init
instead.
What this scope reads: brand-contract.md for the pack's file and field names, voice-packs.md to name a failure mode in the pack's own wording, surface-registers.md for the register a surface owes, and ai-tells.md for the any-other-SaaS test.
PassQuestionEvidence
Tone driftdoes this surface sound like the recorded voice, or like whoever wrote it?the string or passage,
file:line
Any-other-SaaS testcould this sentence sit unchanged on a competitor's page?the sentence
So-whatdoes every feature reach a consequence?the unbridged claim
Proofis every claim backed near where it is made?the claim and the missing fact
Narrativedo hero, enemy and promise hold across surfaces?the two surfaces that disagree
Failure modehas the voice overshot into the degeneration its pack declared?the passage, named against the pack's own wording
Registerdoes the surface match its
channels.md
record?
the record and the copy
Verdicts as everywhere else — PASS / PARTIAL / FAIL / BLOCKED, each with
file:line
. Findings feed the same fix-plan flow. Report linter findings alongside rather than repeating them: a clean linter means checkable, not good, and saying so is the point of running both.
单次执行,与
python3 docs/brand/lint.py
相辅相成:代码检查器负责品牌规范的机械性验证,而本环节负责判断需要人工解读的部分。需要依赖
docs/brand/voice.md
;若未记录品牌规范包,则无法进行客观判断,需转向
/brand-init
流程。
本环节参考的文档:brand-contract.md(规范包的文件和字段名称)、voice-packs.md(用规范包自身的表述定义失败模式)、surface-registers.md(界面应遵循的语体)、ai-tells.md(通用SaaS测试标准)。
检查项问题证据
语气偏差该界面的表述是否符合已记录的品牌语气,还是带有编写者个人风格?字符串或段落,
文件:行号
通用SaaS测试这句话是否可以原封不动地放在竞品页面上?对应句子
价值关联每个功能是否都能关联到实际效果?无支撑的宣称内容
证据支撑每一项宣称是否在附近位置提供了依据?宣称内容及缺失的事实
叙事一致性核心角色、问题及承诺在所有界面中是否保持一致?表述不一致的两个界面
失败模式语气是否超出了规范包中定义的退化范围?对应段落,用规范包自身表述命名问题
语体匹配界面是否符合
channels.md
中记录的语体要求?
记录内容及文案
Verdict规则与其他环节一致——PASS / PARTIAL / FAIL / BLOCKED,每个结果都需标注
文件:行号
。将代码检查器的结果与本环节结果一同呈现,而非重复:代码检查器通过仅表示内容可被检查,不代表质量合格,这也是同时运行两者的意义所在。

Benchmark scope (
benchmark:<competitor>
)

竞品基准范围(
benchmark:<competitor>

Every other scope measures the product against its own chain, which cannot report that the whole flow is two steps longer than everyone else's. This one measures against a named competitor, and only on things that are observable from outside — never on guesses about their code.
Measure both sides on the same axes and say where the number came from:
AxisWhat to record
Time to first valueminutes from landing to the first real outcome, per BP-149's segment expectations
Steps to activationscreens and required fields before that outcome
Cost of entrycard required? account required? what is reachable without either
Key flow depthsteps in the one flow that matters most, ours vs theirs
First-run guidancewhat the empty state offers (BP-152), what the onboarding teaches
Mobilestore rating, top praise and top complaint in recent reviews
Store and support reviews are the cheapest honest signal here, on both sides: sort recent reviews into praise, feature requests, bugs and friction complaints. Their friction complaints are where a competitor is beatable; ours belong in the journey as pain (
ux-foundation
), sourced and dated.
Report as findings like any other pass, but keep the verdicts separate: a gap against a competitor is an opportunity, not a defect against a scenario — it becomes a story in the foundation, not a fix in this report.
其他所有范围都是将产品与自身链路进行对比,无法发现整个流程比竞品多两个步骤这类问题。本范围针对指定竞品进行对比,且仅基于外部可观察的内容——绝不猜测竞品的代码实现。
需在同一维度上衡量双方,并记录数据来源:
维度记录内容
首次价值交付时间从着陆到首次获得实际成果的时长,需符合BP-149的细分预期
激活步骤数达成该成果前所需的屏幕数和必填字段数
入门成本是否需要绑定银行卡?是否需要注册账号?无需上述操作即可访问的内容有哪些
核心流程深度最重要流程的步骤数,我方与竞品对比
首次运行引导空状态提供的内容(BP-152)、新手指南涵盖的内容
移动端表现应用商店评分、近期评论中的主要好评和差评
应用商店和支持评论是最廉价的真实信号来源,需对双方的近期评论进行分类:好评、功能请求、Bug、摩擦问题。竞品的摩擦问题是我方的可突破点;我方的摩擦问题需作为痛点记录到旅程链路中(
ux-foundation
),并标注来源和日期。
将对比结果作为问题记录,但其verdict需单独区分:与竞品的差距是机会,而非违反场景的缺陷——需将其作为故事添加到基础链路中,而非在本报告中列为修复项。

Evidence discipline (non-negotiable)

证据规范(不可协商)

Every verdict must cite
file:line
evidence. Could not find or verify something? The verdict is BLOCKED with the exact reason — never a guess, never a courtesy PASS. An audit that flatters the codebase is worthless.
每个verdict都必须引用
文件:行号
作为证据。若无法找到或验证某项内容,verdict为BLOCKED并需注明确切原因——绝不猜测,绝不随意给出PASS。粉饰代码库的审计毫无价值。

Depth levels

深度等级

DepthPasses run
quick
1. Scenario pass only
standard
(default)
1. Scenario pass + 2. Flow conformance
deep
1–2 + 3. Heuristic pass (PRN-01..24) + 4. Practice pass (selection protocol) + 5. Coverage pass
Passes:
  1. Scenario pass — the loop below: code vs every scoped scenario.
  2. Flow & screen conformance — code vs flow diagrams (every node reachable, every edge incl. error edges wired) AND code vs
    screens.md
    (every registered screen's states rendered, elements present,
    Coverage
    accurate). A screen whose code diverges from its record →
    drifted
    finding; flip its Status to
    drifted
    . When Figma is enabled, check each state has a frame link and flag empty/obviously-stale links (a link the registry marks but the design lost); with the Figma MCP connected,
    get_metadata
    confirms the frame still exists under its expected
    SCR-NN/<Screen>/<state>
    name without pulling full design context. A screen carrying a
    Web surface:
    block is checked against it too:
    the route the code actually serves vs
    Route
    , whether the answer survives with JS disabled vs
    Without JS
    , whether the emitted structured data matches
    Entity
    and the visible content, and whether the indexation directives agree with
    Indexable
    . Divergence is
    drifted
    like any other. Where
    screens.md
    declares
    Web surfaces: no
    while the code serves a public route, that is a finding against the declaration, not the screen. The live-page audit — rendering, crawl reach, competitors, the SERP — is the seo-aeo-audit companion's job; this pass checks the record against the code, and hands the rest over rather than guessing at it.
  3. Heuristic pass — implemented flows vs PRN-01..24 (ux-design-principles.md); findings
    [PRN-NN] (severity) node — issue -> fix
    .
  4. Practice pass — per practice-selection.md: profile → mandatory sets + per-artifact checklists (money flows get their rows); output a compliance table (applied / adapted / rejected / deferred / missing — applicable but absent, as suggestion findings
    [BP-NNN]
    ). Respect recorded user-owned rejections — don't re-litigate them. Four dimensions this pass verifies in code rather than by discussion, because they fail silently: the reduced-motion branch exists for every animated surface and content survives without scroll effects (BP-131, BP-132); the page-weight budget is stated somewhere and the heavy pages meet it (BP-133); the narrow viewport and 200% zoom reflow hold, with no hover-only affordance (BP-134, BP-135); roles sit only where no native element says it, with every
    aria-*
    reference resolving (BP-136). An accessibility claim backed only by a scanner is BLOCKED, not PASS — the evidence is a keyboard and screen-reader walk of the top flows (BP-137). When
    screens.md
    → Design system records a
    Style pack
    (visual-identity.md), check the built UI honors it: tokens referenced instead of raw values, the pack's bans respected, dark mode from its twin — a screen ignoring the recorded pack is
    drifted
    , not a taste debate. No pack recorded and the visual layer looks improvised → suggest the sheleg-design companion once, as an opportunity finding.
  5. Coverage pass — the chain itself: orphan stories/flows/screens/ scenarios, journey stages without scenarios, jobs without stories, unused personas, screens not used by any flow, flows referencing missing
    SCR-IDs
    , screen states without Figma frames (when Figma enabled).
深度执行的检查环节
quick
1. 仅场景检查
standard
(默认)
1. 场景检查 + 2. 流程一致性检查
deep
1–2 + 3. 启发式检查(PRN-01..24) + 4. 实践规范检查(选择协议) + 5. 覆盖范围检查
各检查环节说明:
  1. 场景检查 — 以下循环:代码与所有指定场景的对比。
  2. 流程与界面一致性检查 — 代码与流程图对比(确保每个节点可访问、每条边包括错误路径都已连接),同时代码与
    screens.md
    对比(确保每个已注册屏幕的状态都已渲染、元素都存在、
    Coverage
    字段准确)。若代码与记录的界面不一致,则标记为
    drifted
    问题;并将其状态改为
    drifted
    。当启用Figma时,检查每个状态是否有框架链接,并标记空链接或明显过时的链接(注册表中有记录但设计已丢失的链接);若连接了Figma MCP,
    get_metadata
    可确认框架是否仍以预期的
    SCR-NN/<Screen>/<state>
    名称存在,无需获取完整设计上下文。 带有
    Web surface:
    块的界面也需检查:代码实际提供的路由与
    Route
    字段对比、禁用JS后内容是否仍可用与
    Without JS
    字段对比、生成的结构化数据是否与
    Entity
    字段及可见内容匹配、索引指令是否与
    Indexable
    字段一致。任何偏差都标记为
    drifted
    。若
    screens.md
    中声明
    Web surfaces: no
    但代码提供了公共路由,则视为违反声明的问题,而非界面本身的问题。 页面的实时审计——渲染、爬取可达性、竞品对比、搜索结果页(SERP)——是
    seo-aeo-audit
    配套工具的职责;本环节仅检查记录与代码的一致性,其余工作交由配套工具处理,绝不猜测。
  3. 启发式检查 — 已实现的流程与PRN-01..24(ux-design-principles.md)对比;问题格式为
    [PRN-NN] (严重等级) 节点 — 问题 -> 修复建议
  4. 实践规范检查 — 依据practice-selection.md:配置文件 → 强制集合 + 按工件分类的检查清单(资金流需单独检查);输出合规性表格(已应用/已适配/已拒绝/已延期/缺失——适用但未实现,标记为建议问题
    [BP-NNN]
    )。需尊重用户已记录的拒绝项——无需重新讨论。 本环节需在代码中验证以下四个维度,因为它们可能会静默失效:每个带有动画的界面都有简化动效分支,且无滚动效果时内容仍可正常显示(BP-131、BP-132);页面重量预算已明确标注,且大体积页面符合预算要求(BP-133);窄视口和200%缩放时页面可正常重排,无仅悬停可见的交互元素(BP-134、BP-135);仅在无原生元素可用时使用角色属性,且所有
    aria-*
    引用都可解析(BP-136)。仅通过扫描工具得出的无障碍声明视为BLOCKED,而非PASS——需通过键盘和屏幕阅读器遍历核心流程作为证据(BP-137)。 若
    screens.md
    → Design system中记录了
    Style pack
    visual-identity.md),需检查构建后的UI是否遵循该规范:使用令牌而非原始值、遵守规范包中的禁用项、从配套包中获取暗色模式——忽略规范包的界面标记为
    drifted
    ,而非审美争议。若未记录规范包且视觉层看起来随意,则建议运行sheleg-design配套工具一次,作为机会问题记录。
  5. 覆盖范围检查 — 链路本身:孤立的故事/流程/界面/场景、无对应场景的旅程阶段、无对应故事的任务、未使用的用户角色、未被任何流程使用的界面、引用缺失
    SCR-IDs
    的流程、无Figma框架的界面状态(启用Figma时)。

The loop

审计循环

  1. Scope. Read the base (and foundation/flows, if present). Scope is
    $ARGUMENTS
    if given (
    all
    ,
    feature:<name>
    ,
    SCN-010..SCN-020
    ,
    coverage
    ,
    practices
    ,
    heuristics
    ,
    benchmark:<competitor>
    ), default
    all
    ; depth keyword (
    quick
    /
    deep
    ) selects the depth, default
    standard
    . Single-pass scopes (
    coverage
    /
    practices
    /
    heuristics
    /
    copy
    ) run just that pass. Note the git SHA of
    docs/ux
    — it goes into the report header. Skip
    retired
    scenarios.
  2. Batch. Group scoped scenarios by feature, ~5–8 per batch. List the batches before starting so progress is visible.
  3. Audit each batch. For large scopes dispatch parallel subagents — one batch per subagent, each returning per-scenario verdicts with evidence. Per scenario check, against the code:
    • entry point exists and is reachable;
    • every numbered step has a corresponding implementation path;
    • every listed UI element exists and is wired to a handler;
    • every listed state (loading / empty / error / success) has a rendering branch;
    • every listed error is surfaced to the user honestly (no silent catch, no fake success) with the described recovery;
    • the expected result observably occurs. Any gap → PARTIAL (or FAIL if the flow is missing/broken) with a finding
      [AUD-YYYY-MM-DD-NN] (severity) description -> suggested fix
      .
  4. Write the report to
    docs/ux/audits/YYYY-MM-DD[-scope].md
    per the contract, batch by batch as results arrive — a crashed run must leave the completed batches on disk.
  5. Summarize. Totals, top issues (worst user damage first), prioritized recommended actions. The summary must be readable standalone by someone who won't open the batch details.
  6. Update the base.
    Last audit
    column (
    YYYY-MM-DD VERDICT
    ) for every audited scenario; flip
    validated
    implemented
    where the audit PASSed; never touch scenario content itself during an audit.
  7. Produce the UX plan. With the user's go-ahead, turn FAIL/PARTIAL findings into
    docs/ux/plans/YYYY-MM-DD-<scope>.md
    per the contract's UX-plan format: target interface per affected screen (elements, states, behavior) + a CREATE/MODIFY/DELETE change table where every row traces to scenario/flow/finding/principle IDs, prioritized by Frequency × Severity × Solvability (worst user damage first, not the easiest diff).
  8. Offer autonomous execution (recommend, don't force). State plainly what the user now has in hand — this plan, the audit report(s), the
    docs/ux/
    chain, and the Figma frames — and that finishing is their call. Then recommend the ssheleg task-pipeline plugin to implement the plan end-to-end by best practices:
    • installed →
      /task-pipeline docs/ux/plans/<file>
      (don't auto-run — offer);
    • not installed → give the one-time install and note it's optional:
      /plugin marketplace add ssheleg/task-pipeline
      /plugin install task-pipeline@task-pipeline
      ;
    • user prefers otherwise → superpowers
      writing-plans
      → subagent execution, or by hand — all fine. The plan is written to be executable without this conversation, so any path works. Whatever they pick, remind: same-change rule holds and re-run
      /ux-audit <scope>
      after to confirm PASS.
  1. 确定范围。读取场景库(若存在基础链路/流程也需读取)。范围为给定的
    $ARGUMENTS
    all
    feature:<name>
    SCN-010..SCN-020
    coverage
    practices
    heuristics
    benchmark:<competitor>
    ),默认值为
    all
    ;深度关键字(
    quick
    /
    deep
    )选择审计深度,默认值为
    standard
    。单次执行范围(
    coverage
    /
    practices
    /
    heuristics
    /
    copy
    )仅运行对应环节。记录
    docs/ux
    的git SHA值——将其写入报告头部。跳过
    retired
    状态的场景。
  2. 批量分组。按功能将指定场景分组,每组约5–8个场景。开始前列出所有分组,以便查看进度。
  3. 审计每个分组。对于大范围审计,可调度并行子Agent——每个分组对应一个子Agent,每个子Agent返回带证据的单场景verdict。针对每个场景,需对照代码检查:
    • 入口点存在且可访问;
    • 每个编号步骤都有对应的实现路径;
    • 每个列出的UI元素都存在且已绑定处理程序;
    • 每个列出的状态(加载/空/错误/成功)都有对应的渲染分支;
    • 每个列出的错误都如实展示给用户(无静默捕获、无虚假成功提示),并提供描述的恢复方式;
    • 预期结果可被观察到。 任何缺失都标记为PARTIAL(若流程缺失/损坏则标记为FAIL),并记录问题
      [AUD-YYYY-MM-DD-NN] (严重等级) 描述 -> 修复建议
  4. 写入报告。按照约定格式将报告写入
    docs/ux/audits/YYYY-MM-DD[-scope].md
    ,分组结果一到就写入——即使运行崩溃,已完成的分组结果也需保留在磁盘上。
  5. 生成摘要。统计总数、首要问题(按用户受损程度从高到低排序)、优先级推荐操作。摘要需独立可读,无需查看分组详情。
  6. 更新场景库。为每个已审计场景更新
    Last audit
    列(格式为
    YYYY-MM-DD VERDICT
    );若审计结果为PASS,将状态从
    validated
    改为
    implemented
    ;审计过程中绝不修改场景内容本身。
  7. 生成UX计划。在用户同意后,将FAIL/PARTIAL问题转化为
    docs/ux/plans/YYYY-MM-DD-<scope>.md
    ,遵循约定的UX计划格式:受影响界面的目标设计(元素、状态、行为) + CREATE/MODIFY/DELETE变更表,每一行都关联到场景/流程/问题/原则ID,按频率×严重等级×可解决性排序(优先处理用户受损最严重的问题,而非最容易修改的内容)。
  8. 提供自主执行建议(仅推荐,不强制)。明确告知用户当前已获取的内容——该计划、审计报告、
    docs/ux/
    链路、Figma框架,完成后续工作的决定权在用户手中。然后推荐使用ssheleg的task-pipeline插件,按照最佳实践端到端实现该计划:
    • 已安装 →
      /task-pipeline docs/ux/plans/<file>
      (不自动运行——仅提供选项);
    • 未安装 →提供一次性安装步骤,并说明为可选操作:
      /plugin marketplace add ssheleg/task-pipeline
      /plugin install task-pipeline@task-pipeline
    • 用户偏好其他方式 → 使用
      writing-plans
      超能力 → 子Agent执行,或手动处理——均可。 计划的编写无需依赖本次对话即可执行,因此任何方式都可行。无论用户选择哪种方式,都需提醒:需遵循相同变更规则,完成后重新运行
      /ux-audit <scope>
      以确认结果为PASS。

Pass semantics

检查环节语义

Heuristic (
PRN-NN
) and practice (
BP-NNN
) findings are suggestions — opportunities, never blockers; they don't change scenario verdicts, unless the violation breaks a scenario (then it's a normal finding on that scenario). Practices are opportunities selected by the protocol, not a style gate.
启发式检查(
PRN-NN
)和实践规范检查(
BP-NNN
)的问题属于建议——是机会,而非障碍;它们不会改变场景的verdict,除非违规行为破坏了场景(此时视为该场景的常规问题)。实践规范是协议选定的优化机会,而非风格门槛。

Optional live pass

可选实时检查环节

If the project has a runnable dev server and browser tooling is available, replay the top scenarios live after the static pass: walk the steps as the user, screenshot or transcribe what actually renders, and attach observed evidence to the verdicts. Live evidence overrides static evidence when they disagree. Off by default; offer it when the tooling is present.
若项目有可运行的开发服务器且具备浏览器工具,可在静态检查后对核心场景进行实时重放:模拟用户操作步骤,截图或转录实际渲染内容,并将观察到的证据附加到verdict中。当实时证据与静态证据不一致时,以实时证据为准。默认关闭;当工具可用时可提供该选项。

Definition of done

完成标准

  • Every scoped scenario has a verdict with evidence or an explicit BLOCKED reason — no scenario silently skipped.
  • Scope and limits filled in — what was covered, what was left out and why, what could not be verified, what the code cannot answer. A batched audit reads a slice; a report that says nothing about the rest is read as if it covered everything.
  • Verdict stated — REFINE (fix the findings) / REDESIGN (the findings cluster on a structure that patching will not converge on; name it) / NEW (the chain does not describe what was built; start upstream). A findings list without this reads as a to-do list, and a surface that should be rebuilt gets patched forever, one true finding at a time.
  • Report on disk, summary honest, base statuses updated.
  • Findings offered to planning; nothing swallowed.
  • 每个指定场景都有带证据的verdict或明确的BLOCKED原因——无场景被静默跳过。
  • 已填写范围与限制——涵盖内容、未涵盖内容及原因、无法验证的内容、代码无法回答的问题。批量审计仅覆盖部分内容;若报告未提及未覆盖部分,会被误认为已覆盖全部内容。
  • 已明确给出最终结论——REFINE(修复问题)/ REDESIGN(问题集中在某个结构上,补丁无法解决;需明确指出)/ NEW(链路未描述已构建的内容;需从上游重新开始)。仅列出问题的报告会被视为待办清单,而本应重构的界面会被不断打补丁,每次仅修复一个问题。
  • 报告已存储到磁盘、摘要真实准确、场景库状态已更新。
  • 问题已提交至规划环节;无问题被隐瞒。