L2 E2E:N/A —— 本 PR 未执行npm run test / test:e2e:fast。原因:e2e/cms-workflow.spec.ts(@critical)会对开发库做真实 draft→review→publish 写入,属 DB 写入动作,须单独授权。已作为「未验证项」列于文末,不以「理论上没问题」代替。
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
变更摘要
营销站全站 UI/UE/UX 治理(impeccable 双轴评审驱动),29 commits / 344 files(+12,086 / −38,394,删除体量主要来自
.agents/skills/impeccable/内置检测器脚本精简,非业务代码)。data-theme驱动 Tailwindvariant);品牌色令牌语义拆分;营销页裸bg-white/gray-*→ 语义 token(bg-bg-*/text-ink/text-text-*/border-border-*)。ease-ink[0.22, 1, 0.36, 1]、stagger 步进 ≤ 60ms;移除循环动画与死令牌(--ease-spring)、死代码。href="#"死链、CMS 空态死胡同、?success=true刷新重放成功态、404 无上下文出口、「敬请期待」态、services 空态出口。CTA_LABELS常量 + 白名单机械守卫(cta-labels.test.ts),/contact-bound归一。basis(target | team-history | verified),缺失/非法一律降级为最弱口径并自动附角注「目标口径」;组聚合取最弱口径(weakestBasis);删除详情页「源自真实客户案例」「实战验证」等未证实佐证文案。main收敛、/casesradiogroup 语义、微字号守卫、footer 补全服务/关于/方法论列。scripts/check-pr-checklist.sh+.gitea/PULL_REQUEST_TEMPLATE.md),并在移植中修掉上游--pr-dir参数解析缺陷(for循环内shift不跳参)。设计口径说明:Bain 深红大字号为有意演进(见
CONTEXT.md/DESIGN.md),非色彩漂移;本轮不做「回归旧浅红」处理。关联 Issue
关闭:N/A —— 无 Gitea Issue。来源为 impeccable 评审快照与复评报告(
UI_UX_UE_AUDIT_2026-09-01.md及会话内 P0→P3 分级清单)。提交前检查
bash scripts/check-pr-checklist.sh <本文件>通过(三节完整、无未勾选子项)type-check/lint/ 单测在 pre-commit(husky + lint-staged)下逐次通过全链路检查
npm run type-check通过(0 error)npm run lint通过:0 error / 128 warning;warning 数与改动前基线逐条比对为 0 新增(基线由 stash 改动前工作树同命令测得)href="#"死链兜底已清除(P1/P2 批次),新增链接目标(/contact、产品/方案/服务详情、404 出口)经 SSR HTML 与浏览器 DOM 确认真实存在src/lib/cms/content-types.ts将metricBasisField展开进 8 个指标数组字段定义(trustSignals无指标数字故跳过),seed 与类型同步。是否需要重跑npm run db:seed:需要 —— 本仓ContentModel.fields以 JSON 存于 DB,新字段只有在 seed 后才在 admin 表单出现。本 PR 未执行 seed(DB 写入须单独授权)。渲染端不依赖 seed:缺失basis时按最弱口径渲染并附角注,故未 seed 的库也能正确显示。next dev -p 3001与next start -p 3002(生产构建)上复核;未把 :3000 上那台next start旧生产预览当作现状(该实例属用户,未关闭、未复用为基准)bg-white/text-white/gray-*(由scripts/audit/hardcoded-color-audit.mjs与check:contrast双守卫)ease-ink、stagger ≤ 60ms(motion-duration-audit.mjs+font-floor.test.ts同类机械守卫)#C41E3A:每页 ≥ 3 处触达点、面积 ≤ 10%(brand-usage-scan.mjs)metrics-basis.test.ts(用例 3 → 16)+FORBIDDEN_PROOF_PHRASES扫描守卫;seed 中 55 处结果型数字显式标注basis: 'target';生产构建实测角注数/=5、/products=7、/products/erp=1、/products/crm=1、/services=4、/solutions=6、/about=1,禁用语命中LIE=noneconsole.log/TODO/FIXME/.only()测试分层检查(L0–L3)
metrics-basis(口径归并/降级/角注文案/正控制)、cta-labels、font-floor等新守卫均补 jest 用例;npm run test:coverage= 132 suites / 1594 tests 全通过detail.test.tsx、home-content-v15.test.tsx覆盖角注渲染与空态/兜底分支npm run test/test:e2e:fast。原因:e2e/cms-workflow.spec.ts(@critical)会对开发库做真实 draft→review→publish 写入,属 DB 写入动作,须单独授权。已作为「未验证项」列于文末,不以「理论上没问题」代替。e2e/playwright.config.ts的webServer.command = 'npm run dev'+reuseExistingServer: true+url: :3000,即历史上test:visual:update会静默打在 :3000 那台旧生产预览上,导致跨浏览器基线整体陈旧(同一/页:firefox 基线高 6400px vs chromium 10936px)。据配置意图以**规范模式(dev)**在新起 :3001(未复用 :3000)上重生成 86 张 + 补齐此前缺失的methodology-fullpage-visual-firefox-desktop.png,并二次全量复跑确认:115 passed(5 projects × 23 subjects,commitf543e47)。核对方式:逐张比对新旧像素高度,全部为本分支自身的收敛型缩减(最大 −15%,无归零/空白帧)。.only()/ 跳过态残留质量门禁
npm run test:unit全部通过npm run test:coverage通过jest.config.js的coverageThreshold,未下调阈值npm run test(Playwright E2E)N/A:未执行,理由同 L2(真实 DB 写入需授权);不作为绿灯主张npm run check:contrast7/7 与npm run check:headings0 failure 通过(WCAG 2.1 AA)npm run lighthouseN/A:未执行(需 Chrome + lhci 跑完整构建,本会话未起该管线);列为未验证项,不主张性能预算未回退npm run test:security:headers与本分支改动无交集(N/A:未触碰响应头/CSP/部署配置)。但执行时打到线上https://novalon.cn得 1 FAIL / 2 WARN:X-Content-Type-Options: nosniff, nosniff、X-Frame-Options: DENY, SAMEORIGIN及 CSP/Referrer-Policy/Permissions-Policy/X-XSS-Protection 均重复下发(nginx 与next.config.mjs双重设置)。这是与本 PR 无关的既有线上缺陷,另单处理。README.md/CONTEXT.md/CLAUDE.md/DESIGN.md/PRODUCT.md/docs/development/quality-gates.md(新增「提交与 PR 流程(PR-First)」节)/docs/architecture.md/docs/components.md/docs/ga4-error-tracking-integration.md;关键决策注释给出佐证来源db:seed、未写 DB、未部署;分支历史重写用--force-with-lease且已事先单独取得授权(摘出14aa93f凭据提交至chore/cicd-gitea-jenkins)假绿灯纪律
skip/todo、下调阈值让门禁变绿;未把误报当问题「修掉」——Bain 深红大字号判定为有意演进(依据CONTEXT.md记录的设计决策),保留并在此说明origin/*与实测为准:分支基线用origin/dev(7df2dde) 比对,明确指出本地devref 落后 34 个 commit,未据其推断历史;git log a8eae96..origin/dev为空亦经查证系因该提交不在origin/dev祖先链上其他说明
本会话工具限制导致的复核替代:浏览器工具的整页截图通道不可用、页面内注入 overlay 被站点 CSP 拦截,故 UI 复核以「DOM/
evaluate断言 + SSR HTMLcurl比对」替代人工看图;视觉回归另由 Playwright 基线兜住。未验证项清单(评审者请重点关注)
npm run test(含@critical/@journeyE2E)与npm run lighthouse未执行 —— 前者需真实 DB 写入授权,后者需 Chrome + lhci 管线。npm run db:seed未执行 → admin 表单尚不出现basis下拉;渲染端已向后兼容,但内容团队若要按真实口径(team-history/verified)标注数字,需在获得授权后重跑 seed 并由 admin 录入数据(本 PR 只交付机制与角注,不含数据来源)。test:visual切到生产构建(next build && next start),跨浏览器基线需再刷一轮——建议顺手把reuseExistingServer/:3000的静默复用改掉,否则任何人本地残留预览都会再次污染基线(本 PR 未改该配置,避免与功能变更混批)。origin/dev的独立 worktree 里npm run build报TurbopackInternalError而起服务失败,故「本分支之前的视觉套件是否已红」无法用该路径直接对照;已知的替代证据是:同一/页各浏览器基线高度彼此矛盾(6400 vs 10936),说明基线集在本次改动前就已不一致。该项标注为未确证。须与本 PR 一并留意:
.gitea/PULL_REQUEST_TEMPLATE.md与scripts/check-pr-checklist.sh(commit43d1a7a)在本分支内,故本 PR 的模板校验脚本自身即随该 PR 入库;先合chore/cicd-gitea-jenkins或本 PR 均可,两者路径无交集。- 新增 src/lib/theme.ts:三态偏好单一真源 (system/light/dark,无存储值默认跟随系统) - ThemeToggle 改三态循环(Monitor→Sun→Moon): 实时监听 prefers-color-scheme(仅 system 档生效) + storage 跨标签页同步;尺寸位置不变 - layout.tsx FOUC 内联脚本支持 system 档, 首帧前解析避免闪烁 - e2e 视觉回归 L2 改用 test.use({ colorScheme }) 驱动 (事后 setAttribute 存在被挂载效果覆盖的竞态) - header.test.tsx lucide 白名单补 Monitor - CLAUDE.md 同步三态语义与 variant 踩坑 - 新增 scripts/audit/theme-system-verify.mjs (55 断言:首帧无闪烁/循环/实时跟随/旧值兼容/ 污染回退/6 路由冒烟) 验证:单测 131 套件 1662 通过 0 失败; tsc 0 错;eslint 0 错;next build 通过; 运行时 55/55 PASS(dogfood-output/theme-system-verify/)本 PR 的 30 个提交已以 rebase 方式全部落入 dev,但 Gitea 的 PR 状态位未能翻成 merged,故在此留证并关闭。
040951c(即本 PR 最后一个提交test(visual): 以规范模式重生成全站视觉基线并补齐 firefox 缺口的 rebase 副本)git diff --name-only origin/dev origin/refactor/optimize-ui -- . ':(exclude)infra/cicd' ':(exclude)docs/deployment/cicd' | wc -l→ 0(本 PR 全部内容已在 dev)infra/cicd+docs/deployment/cicd路径,属 #27 的内容POST /pulls/28/merge {do:"rebase"}返回 HTTP 200 而状态位仍为 open —— 因为本地git rebase origin/dev模拟结果为精确空操作(全部提交被识别为 previously applied 而跳过,tip 恰好等于 040951c、新增 0 个提交、0 文件差异),Gitea 无新提交可写故不改标记。GET /compare/f543e47...040951c的changed_files=0作为「零差异」证据是误读——该响应根本没有files字段,取默认空列表得到假零。上面的本地 git 命令才是有效证据。功能分支
refactor/optimize-ui暂未删除,等待指示。Pull request closed