zhangxiang
8f4a860180
refactor(motion): 收敛末批 P1 入场时长与变量递增 stagger 步进
...
动效合规专项(Task #16)收尾。
改动:
- page-transition.tsx:入场 duration 0.4/0.5 → 0.3(末处真 P1,由 client-layout 消费)
- 17 文件 21 处子元素 stagger 步进 80/100ms → 60ms
(CONTEXT.md 原则4「子元素 stagger 30-60ms」;属已批准决策 04e91e3 的漏网,
因当时审计脚本看不见 delay: i * N 的乘法写法)
- 审计脚本补盲区:新增变量递增 stagger 识别 + 明细表(此前漏掉全站 33 处)
- 审计脚本新增 NON_ENTRANCE 排除:flip-clock 机械翻转、design-system 死代码令牌
- delay 判据自我纠正:硬禁令约束的是 duration(动效时长),
delay 属调度而非动效本身,一律判 P2(偏离指引),不得判 P0
门禁(全绿):
- tsc 0 error
- eslint 0 error(50 warnings 均为既有)
- jest 130/130 套件,1573 通过 / 2 跳过 / 0 失败
- 运行时冒烟 16/16 PASS(8 路由 × 浅深双版,0 控制台报错)
- 审计:P0=0 · P1=0 · stagger 步进 P2=0
2026-09-04 08:39:00 +08:00
zhangxiang and 阿睿
04e91e3dbf
refactor(animations): converge P2 stagger delays to ≤60ms target
...
Task #16 P2: converge 25 stagger/delay delays to ≤60ms target.
scope: 12 files, 25 staggerDelay/delayChildren props
before: 0.07/0.08/0.1/0.12s -> after: 0.05s (50ms, aligns ScrollReveal default)
verified:
- tsc --noEmit: clean (TSC_EXIT=0)
- eslint (12 files): 0 errors, 22 pre-existing warnings only
- jest: 130/130 suites, 1573 passed, 2 skipped, 0 failed (JEST_EXIT=0)
- motion audit: P0=0, P1=5 preserved, P2=0, OK=425
note: P1 residual 5 preserved (flip-clock 2 + page-transition 2 by
semantics; design-system.ts 1 dead-code deferred). visual regression
waived: stagger is entrance delay, reducedMotion yields same pixels.
Co-Authored-By: 阿睿 <workbuddy@local>
2026-09-03 22:41:10 +08:00
zhangxiang and 阿睿
495f6d4eca
refactor(animations): converge P1 motion durations to ≤300ms target
...
- 151 scripted + 1 manual duration fixes across 46 files
- framer entrance 0.5/0.6s -> 0.3s
- Tailwind hover -> duration-150, entrance -> duration-300
- preserve flip-clock/page-transition per semantic decision
- design-system.ts dead-code deferred
- P1 violations 156 -> 5; P0 remains 0; OK class 249 -> 400
- verified: tsc clean, eslint 0 errors
- verified: 130/130 jest suites, 1573 passed
- verified: visual regression 46/46 zero-pixel diff
Co-Authored-By: 阿睿 <workbuddy@tencent.com >
2026-09-03 21:34:52 +08:00
zhangxiang
7e19661a99
perf(motion): 清理末批 P0 —— 移除循环动画 + 删除死代码
...
按用户决策收尾 Task #16,P0 硬违规 13 → 0:
- 移除 3 处循环动画(均违反 CONTEXT.md「禁循环动画」)
detail-hero 徽章 Sparkles 旋转 4s、滚动箭头浮动 2s、brand-visuals 半径脉冲 4s
→ motion.* 改静态元素,保留视觉语义但不再循环
- 删除死代码 src/lib/animations.tsx(923 行,全站零引用,含 10 处 P0 + spring variants)
同步删除 src/lib/animations.test.tsx
- 级联修复:brand-visuals 因删 guard 冗余的 shouldReduceMotion 声明一并移除
验证:
- 审计 P0 13 → 0,P1 163→156,P2 28→25(死代码移除导致分母下降)
- tsc --noEmit 0 error;eslint 0 error
- 视觉基线不变:时长/循环改动在 reducedMotion+animations disabled 下不改变最终像素
2026-09-03 19:28:18 +08:00
zhangxiang
ceeb88aca3
perf(motion): 第三批入场动效时长收敛至 300ms(9 文件 20 处)
...
承接前两批,继续清理 Task #16 的 P0 硬违规:
- brand-content (1) / methodology-content (3) / products-content-v3 (4) /
solution-detail-content-v3 (4) / team-content-v3 (1) / detail-product-value (2) /
service-value (1) / solution-value (3) / brand-visuals 入场处 (1)
- 审计:P0 33 → 13,P1 163 / P2 28 持平
- 只改 duration,保留原 delay(与首批先例一致)
验证:
- tsc --noEmit 0 error;eslint 9 文件 0 error(仅 methodology 既有 `any` 警告,非本次引入)
- 视觉基线不变:前两批已证明时长改动在 reducedMotion+animations disabled 下不改变最终像素
剩余 13 处 P0 均为决策点,未在本批处理:
- 3 处循环动画(detail-hero ×2、brand-visuals ×1,repeat:Infinity,违反「禁循环动画」)
- 10 处死代码(src/lib/animations.tsx,全站零引用)
2026-09-03 19:12:38 +08:00
zhangxiang
8117dba865
perf(motion): 第二批入场动效时长收敛至 300ms(4 文件 21 处)
...
承接 8fb5aae,继续清理 Task #16 的 P0 硬违规(>700ms 明确禁止):
- contact-content-v3 (7) / case-detail-page (6) / product-detail-content-v3 (5) /
detail-hero (3 处入场)
- 审计:P0 54 → 33,P1 163 持平,P2 28 持平
- 只改 duration,保留原 delay(与首批先例一致);改动行已逐行核验为纯动效行
验证:
- tsc --noEmit 0 error;eslint 4 个改动文件 0 error
- 单测 131 套件 / 1662 通过 / 2 跳过 / EXIT=0(与基线一致)
- 视觉基线零变动:reducedMotion+animations disabled 下终态一致,
时长改动不改变最终像素;不带 -u 复跑 92 用例 EXIT=0
2026-09-03 18:54:16 +08:00
zhangxiang
10160fb7f2
refactor(detail): 合并 L3 客户案例/资质认证区块为共享组件
...
- 新建 CaseStudiesSection / CertificationsSection 共享组件(src/components/detail),
合并 solution/product 逐字重复的本地实现与 service 的异类实现(卡片 motion.a
链 /cases/<slug> 依赖尚不存在数据 → 404,违反零编造)
- bg-white → bg-bg-primary token 化(浅色零视觉差异,深色模式正确反色,对齐暗黑 Phase 2)
- 数据闸门保留:caseStudies/certifications 空时 return null,由 L3EmptyFallback 接管
- grid/flex 类直接挂 StaggerReveal,修复合并前的单列布局 bug
- 动效 0.8s → 0.7s(detail-cta-section + service CTASection),对齐 ≤700ms 约束
- 附 scripts/audit/l3-b2-verify.mjs 运行时冒烟(product 页浅深双版,0 报错,hydration 通过)
验证:type-check 0 错 / lint 0 错(127 既有 warnings) / 单测 129 套件 1628 通过
2026-09-02 12:51:03 +08:00
zhangxiang
3091035c56
feat(detail): Layer 3 信任层空数据兜底骨架(L3SignalsSlot + L3EmptyFallback + EarlyAccessNotice)
...
- 新增 L3SignalsSlot:4 类可验证替代信号卡(方法论/团队/历程/服务承诺),
服务承诺卡 disabled 占位待业务确认;零编造约束下替代真实案例/认证
- 新增 EarlyAccessNotice:首批客户共创状态条(单一真源 company.ts EARLY_ACCESS)
- 新增 L3EmptyFallback:caseStudies/certifications/dataProofs 三者全空时渲染兜底,
任一非空 return null 保留本地真实 section 视觉
- 接入 5 处详情页:solution v3 / service v4 / product v3 / erp-upgrade-v3 / standalone/[id]
- 修复 StaggerReveal 网格布局:grid 类须挂在 StaggerReveal 自身(否则卡片堆单列)
- 更新 solution 测试至新行为(空数据→兜底渲染)+ 补 lucide 图标 mock
- 修复 header.test.tsx 双 logo 断言(2593599 遗留)
- 新增 scripts/audit/l3-fallback-verify.mjs 运行时验证(浅/深双版 PASS)
注:必须用 localhost 而非 127.0.0.1 —— Next dev allowedDevOrigins 默认白名单
不含 127.0.0.1,chunk 请求带该 Origin 被 403 → hydration 不发生 → 动画全冻结
验证:type-check 0 错 · lint 0 错(127 既有 warnings) · 单测 129 套件/1628 通过 ·
L3 兜底浅深双版渲染截图 PASS
2026-09-02 12:26:07 +08:00
zhangxiang
152eef9da0
fix(a11y,ui): resolve 29 P1 issues found by dogfood UI/UX/UE audit
...
Dogfood 审计(31 路由 × 多视口,Playwright 9 维探针)发现的阻断级问题全部闭环:
P1 29 → 0,对比度违规页 29 → 0。
对比度
- footer: text-gray-500 硬编码 → text-text-hint 令牌(#6B7280 在 #0A0E14 上仅
4:1,需 4.5:1),1 行改动全站 29 页生效
- brand-content / team-content 副文案 text-text-secondary/70 → /80
(4.35:1 → 5.74:1,视觉几乎无变化)
- brand-content 里程碑标签在 bg-tertiary 上 text-text-muted → text-text-secondary
(4.34:1 → 9.45:1)
装饰元素豁免
- 大号服务编号(about 01-03、team 01-05 等)加 aria-hidden="true",WCAG 1.4.3
对装饰内容不适用,无需强行提亮
- 同时补修 product-detail / solution-detail 的客户名首字占位(同类
text-text-muted/10,因容器为渐变背景属探针盲区、从未报出)
- 副文案与里程碑标签属真实语义内容,走提对比度而非 aria-hidden —— 隐藏它们
等于把公司简介与成立年份从屏幕阅读器中删除
移动端布局
- MobileTabBar 为 fixed bottom-0 高 64px,给 main / [role="main"] / footer
补 calc(64px + env(safe-area-inset-bottom)) 安全区,解决正文与页脚被遮挡
- 注意 marketing layout 使用 div[role="main"] 而非真 <main> 元素,选择器须
同时匹配两者
触控与令牌
- ERP 专题链接加 py-0.5(23px → 27px,达 WCAG 2.2 AA 2.5.8 的 24px)
- solution-service-card: shadow-blue-500/20 → shadow-brand(纳入 --shadow-* 令牌)
Refs: UI_UX_UE_AUDIT_2026-09-01.md
2026-09-01 16:12:45 +08:00
zhangxiang
dcc2073e1e
feat(theme): 暗黑模式 Phase 2 批次 3 — product-detail/standalone/detail-hero token 化
...
- product-detail-content-v3.tsx: 9 处 bg-white → bg-bg-primary
(Hero / features / benefits / process / cases / certifications / CTA)
- standalone/[id]/client.tsx: 5 处 bg-white → bg-bg-primary
- detail-hero.tsx: 浅色 variant bg-white → bg-bg-primary(共享组件)
- detail.test.tsx: 新增常驻断言——light variant 必须用主题 token,禁止硬编码 bg-white
验证(evidence-first):
- type-check 0 / lint 0 errors
- jest 128 suites / 1624 passed(含新增断言)
- 视觉回归 22 passed(浅色基线零 diff)
- computed-style 一次性验证 4 passed: /products/erp + /products/crm 的 dark 反色
(html/body/header → #0A0E14、section 层次自动反色)+ light 零深色残留;脚本已删
Phase 2 剩余批次: 批次 4 admin 全量(user 决策: admin 也参与)
2026-08-31 18:53:47 +08:00
zhangxiang
80e3c48c5d
feat(theme): 暗黑模式 Phase 2 批次 2 — services/service-detail/solution-value token 化
...
将 services-content-v3(7 处)、service-detail-content-v4(7 处)、
solution-value(1 处)的浅色 bg-white 全部迁移到 bg-bg-primary。
浅色下值完全等价(#FFFFFF)→ 浅色视觉零差异;dark 下随 token 自动
反色为 #0A0E14,section 间 bg-bg-secondary 层次交替保留。
【变更】
- services-content-v3.tsx(7 处):Hero + section + 卡片×3 + main wrapper
(含卡片条件 className 中两个 bg-white 分支)
- service-detail-content-v4.tsx(7 处):Hero + FeaturesSection + 卡片×3 +
CasesSection + main wrapper
- solution-value.tsx(1 处):共享 section 组件
【验证】
- type-check 0 / lint 0 errors(127 warnings 既有)
- jest 128 suites / 1623 passed
- 视觉回归 22 passed(含 /services 与 /services/software 浅色快照零 diff)
- computed-style 一次性脚本验证(已删除):
dark: /services 与 /services/software 的 html/body/header → #0A0E14
section 层次 [primary, secondary, primary, secondary] 自动反色正确
light: 零深色残留
【Phase 2 剩余批次】
- 批次 3:product-detail-content-v3 + products/standalone + detail-hero 共享组件
- 批次 4:admin 全量(user决策:参与暗黑)
2026-08-31 18:31:08 +08:00
zhangxiang
08a020105f
refactor(link): 营销页站内链接统一 StaticLink(静态托管适配)+ 删除 0 引用死代码组件 + QA 页 client/server 拆分
2026-08-31 12:03:12 +08:00
zhangxiang
f3fc969bef
test(mobile): add mobile E2E test suite (53 tests) and fix layout issues
...
Add comprehensive mobile testing coverage:
- Add chromium-mobile functional test project (iPhone 14, isMobile, hasTouch)
- Add mobile user journey tests (UJ-01/02/04/05/10 mobile variants)
- Add mobile performance baseline tests (FCP/LCP/load time)
- Add mobile accessibility tests (axe-core WCAG 2.1 AA, touch targets,
form labels, alt text, contrast)
- Update README with progress and new npm scripts
Fix pre-existing issues:
- Fix footer component layout and test assertions
- Fix admin content page sidebar navigation and breadcrumb
- Fix standalone products page metadata and layout
- Fix product detail/service value sections
- Fix contact form layout on mobile
- Fix navigation constants and products data
- Fix layout.tsx CMS config and theme handling
- Fix erp-upgrade content layout
2026-08-03 18:32:29 +08:00
zhangxiang
f4d8f0a8e9
fix(breadcrumb): add aria-label to news detail breadcrumb for alignment
...
Also accumulates other pre-existing changes:
- refactor(icons): replace deprecated BarChart3 with TrendingUp
- refactor(services): replace emoji icons with LucideIcon components
- refactor(footer): use logo-white for dark background
- cleanup(archive): remove unused archive components
- cleanup(constants): remove unused types and exports
2026-08-03 14:47:20 +08:00
zhangxiang
602ed6a671
test(hooks): finalize mutation test improvements and release acceptance
...
- Raise use-swipe-gesture mutation score to 66.13% (target 65%+)
- Maintain use-reduced-motion mutation score at 76.32% (target 50%+)
- Fix use-reduced-motion.ts ESLint set-state-in-effect warning
- Add UJ-10 deep searcher journey (category browse → article read → content discovery)
- Add 40 new test files (analytics, detail, sections, ui, lib components)
- Update test-strategy-plan.md to v2.0 (sync test count to 1591)
- Sync README.md with final release metrics
Quality gates: TS 0 errors, ESLint 0 errors, 121 suites / 1591 tests passed
2026-08-02 19:39:27 +08:00
张翔
10404dbb36
chore: sync marketing pages, CMS extensions, tests and project docs
...
同步工作区剩余变更,主要包括:
- 营销页面组件与布局持续优化(about/news/services/solutions/team 等)
- 详情页四层叙事组件、布局组件、UI 组件调整
- CMS 数据模型、API 路由、权限、工作流、站内通知、媒体管理扩展
- 新增/补充单元测试与 E2E 测试(cms-workflow.spec.ts 等)
- ESLint 9 迁移、jest/tsconfig 配置更新、依赖调整
- 新增 ADR、CMS 评估文档、Release Review / Acceptance 报告
- 移除水墨装饰组件与大体积未使用字体文件
2026-07-25 08:04:01 +08:00
张翔
a6ea2cc72c
test(e2e,unit): add navigation edge cases and component coverage
...
- Add missing-paths E2E spec for desktop/mobile navigation and contrast
- Add local Playwright config for dev server testing
- Expand unit tests for CMS data server, products, contact and UI components
- Adjust jest config for new test patterns
2026-07-08 14:47:07 +08:00
张翔
7f36211342
feat(content): deepen Bain differentiation across product, solution and service pages
...
- Replace decorative numbering and side-stripe borders with structured copy
- Add scenario positioning, capability metrics and verifiable dimensions
- Refine service timelines, deliverables and case-study narratives
- Update content constants to support CMS seeding
2026-07-08 14:46:51 +08:00
张翔
38be4a19ef
test(core): 补充单元测试,修复 useCountUp 精度问题,新增项目文档
...
- 新增 hooks/components/lib 共 9 个测试文件,覆盖边界条件与异常路径
- 补充 animations.test.tsx 用例(RotatingBorder、CounterWithEffect 等)
- 修复 useCountUp 结束时 toFixed 精度问题
- 调整 jest 覆盖率配置为渐进式阈值,收缩收集范围
- 新增 docs/lessons-learned.md(经验教训汇总)与 docs/troubleshooting.md(问题排查索引)
- 更新 README.md 文档索引
2026-07-07 19:42:50 +08:00
张翔
8def296301
chore(cleanup): 清理废弃组件与旧版本归档
...
- 删除 detail-v2 旧版叙事组件
- 删除 narrative 旧版区块组件
- 删除 theme-toggle 主题切换与 theme-context 上下文
- 删除 detail-data-proof/service-value/solution-value 旧版组件
- 删除 home-content-v2/v3 旧版首页
- 归档旧版营销页面内容至 _archive 目录
2026-07-07 06:54:10 +08:00
张翔
829d83522c
feat(marketing): 重构营销页面与四层叙事组件体系
...
- 重构 About、Contact、Team 等静态营销页面
- 重构 News 新闻列表与详情页
- 重构 Products 产品目录、详情与独立产品页面
- 重构 Services 与 Solutions 服务/解决方案页面
- 重构 Detail 四层叙事组件 (Hero → Value → Trust → CTA)
- 重构 Sections 页面区块组件 (Hero, CTA, SocialProof, WhyUs 等)
- 新增 SectionHeader、ServiceCard、CaseCard 等可复用组件
2026-07-07 06:53:40 +08:00
张翔
724a00f582
feat: V2/V3组件体系与水墨雅致视觉改造
...
- 新增detail-v2组件库(HeroV2/V3, TrustSectionV2, CTASectionV2等)
- Hero组件水墨雅致改造:浅色宣纸底/深色墨色文字/墨韵纹理
- 方案卡片添加推荐组合徽标(Package图标)
- 独立产品页从V1组件迁移到V2/V3
- 修复why-us-section未使用导入和ESLint引号转义错误
2026-06-07 16:19:44 +08:00