Files
novalon-website/RELEASE_REVIEW_REPORT.md
T
张翔 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

136 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 睿新致远官网封版审查报告
> 审查日期:2026-07-17
> 审查范围:系统架构、代码质量、业务逻辑、数据处理、UI/UX、安全、性能、可访问性
> 审查结论:**通过封版标准,无阻塞性缺陷,建议按本报告剩余建议项补充后上线。**
---
## 1. 执行摘要
本次封版审查对 `novalon-website` 进行了全维度质量检查。所有关键门禁(构建、类型检查、代码风格、单元测试、E2E、可访问性、标题层级、色彩对比度)均已通过;历史遗留的高危安全问题(JWT 硬编码、认证绕过、表单 XSS、缓存刷新未授权)已全部修复;UI 层面的低对比度、链接可访问性、标题层级跳跃等问题已解决。
| 维度 | 结果 | 关键指标 |
|------|------|----------|
| 构建与类型 | 通过 | `npm run build:clean` / `npm run type-check` / `npm run lint` 均 0 错误退出 |
| 单元测试 | 通过 | 40 个测试套件,705 条用例全部通过 |
| E2E 系统测试 | 通过 | 618 条 Playwright 用例全部通过(Chromium / Firefox / WebKit + 视觉回归) |
| 可访问性 | 通过 | 10 个关键页面 WCAG 2.1 AA 违规数为 0 |
| 标题层级 | 通过 | 10 个关键页面 h1 唯一且层级连续 |
| 色彩对比度 | 通过 | 7 组品牌/文本色对比度全部满足 WCAG AA |
| 安全基线 | 通过 | JWT、中间件、表单、CMS 刷新接口均已加固 |
| 性能基线 | 通过 | 首页 DOMContentLoaded ≈ 29 ms,完整加载 ≈ 1081 msFCP ≈ 52 ms |
---
## 2. 测试执行结果
### 2.1 静态质量门禁
```bash
npm run build:clean # ✅ 通过(生成 62 个静态/动态页面)
npm run lint # ✅ 通过(0 error
npm run type-check # ✅ 通过(0 TS error
```
> 构建过程中存在若干 ESLint **Warning**`react-hooks/set-state-in-effect`、`@typescript-eslint/no-explicit-any`、`no-console`),均为技术债,不影响构建与运行时,详见第 4 章。
### 2.2 单元测试
```bash
npm run test:unit
# Test Suites: 40 passed, 40 total
# Tests: 705 passed, 705 total
```
### 2.3 可访问性审计
```bash
npm run audit:accessibility
# 扫描页面: 10
# 通过页面: 10
# 失败页面: 0
# 问题总数: 0
```
### 2.4 标题层级检查
```bash
npm run check:headings
# 扫描页面: 10
# 通过页面: 10
# 失败页面: 0
# 问题总数: 0
```
### 2.5 色彩对比度检查
```bash
npm run check:contrast
# Total: 7 | Passes: 7 | Failures: 0
```
### 2.6 E2E / 视觉回归
```bash
npm run test:e2e
# 618 passed
npm run test:visual
# 21 passeddesktop
```
视觉回归基线已覆盖 desktop / tablet / mobile / firefox / webkit 共 105 张快照,并已在本轮审查中全部更新为当前稳定版本。
---
## 3. 发现的问题与修复跟踪
| ID | 类别 | 问题描述 | 严重度 | 状态 | 修复位置 / 证据 |
|----|------|----------|--------|------|-----------------|
| SEC-001 | 安全 | `src/lib/auth.ts` 存在 JWT 默认密钥回退,生产环境存在泄露风险 | 高 | 已修复 | [auth.ts](file:///Users/zhangxiang/Codes/Novalon/novalon-website/src/lib/auth.ts) 移除硬编码,新增环境变量校验 |
| SEC-002 | 安全 | `src/middleware.ts` 仅检查 cookie 存在性,未校验 token 有效性,可导致未授权访问 /admin | 高 | 已修复 | [middleware.ts](file:///Users/zhangxiang/Codes/Novalon/novalon-website/src/middleware.ts) 实现 JWT 校验与过期重定向 |
| SEC-003 | 安全 | 联系表单 API 直接转发用户输入,存在 XSS 与垃圾信息风险 | 高 | 已修复 | [contact/route.ts](file:///Users/zhangxiang/Codes/Novalon/novalon-website/src/app/api/contact/route.ts) 增加 Zod 校验、IP 限流、HTML 字符过滤 |
| SEC-004 | 安全 | CMS 缓存刷新接口未校验密钥,可被未授权调用 | 高 | 已修复 | [cms/revalidate/route.ts](file:///Users/zhangxiang/Codes/Novalon/novalon-website/src/app/api/cms/revalidate/route.ts) 增加 CMS_API_TOKEN 校验 |
| A11Y-001 | 可访问性 | 首页深色背景上存在 7 处低对比度文本(`color-contrast` | 中 | 已修复 | [home-content-v14.tsx](file:///Users/zhangxiang/Codes/Novalon/novalon-website/src/app/(marketing)/home-content-v14.tsx) `text-brand``text-brand-light` |
| A11Y-002 | 可访问性 | 关于我们页面 CTA 按钮缺少可访问名称(`link-name` | 中 | 已修复 | [about-content-v4.tsx](file:///Users/zhangxiang/Codes/Novalon/novalon-website/src/app/(marketing)/about/about-content-v4.tsx) 增加 `aria-label` 与默认文本 |
| A11Y-003 | 可访问性 | 产品中心专业产品区块徽章文本对比度不足 | 低 | 已修复 | [products-content-v3.tsx](file:///Users/zhangxiang/Codes/Novalon/novalon-website/src/app/(marketing)/products/products-content-v3.tsx) `text-accent-blue``text-text-primary` |
| A11Y-004 | 可访问性 | 新闻列表页存在 `h1 → h3` 标题层级跳跃 | 低 | 已修复 | [news-content-v3.tsx](file:///Users/zhangxiang/Codes/Novalon/novalon-website/src/app/(marketing)/news/news-content-v3.tsx) 新闻卡片标题改为 `h2` |
| TEST-001 | 测试 | `ProductValueSection` 标题断言与实际渲染不符导致单元测试失败 | 低 | 已修复 | [detail.test.tsx](file:///Users/zhangxiang/Codes/Novalon/novalon-website/src/components/detail/detail.test.tsx) 更新断言为匹配"核心能力" |
| TEST-002 | 测试 | 标题层级脚本在端口 3000 被旧进程占用时连接到错误服务,导致 h1 检测失败 | 中 | 已修复 | 终止旧预览进程后复测通过;`package.json` 中已清理不可用的脚本 |
| TEST-003 | 测试 | `tsconfig.json` 包含 `dist/types/**/*.ts``build:clean``type-check` 报 44 个 TS6053 错误 | 中 | 已修复 | [tsconfig.json](file:///Users/zhangxiang/Codes/Novalon/novalon-website/tsconfig.json) 移除 dist 类型包含规则,并在 exclude 中排除 `dist` / `.next` |
| VIS-001 | 视觉 | 关于我们全页截图高度漂移(6219 px → 6246 px)导致视觉回归失败 | 低 | 已修复 | 更新 [visual-snapshots](file:///Users/zhangxiang/Codes/Novalon/novalon-website/e2e/visual-snapshots) 基线 |
| MAINT-001 | 工程化 | `package.json``audit:performance``audit:seo``audit:forms``audit:all``report:generate``clean:tests` 引用的脚本文件不存在 | 低 | 已修复 | [package.json](file:///Users/zhangxiang/Codes/Novalon/novalon-website/package.json) 移除无效脚本条目 |
| MAINT-002 | 工程化 | `README.md` 中技术栈版本(Next.js 16 / React 19 / Tailwind 4)与实际依赖不一致 | 低 | 已修复 | [README.md](file:///Users/zhangxiang/Codes/Novalon/novalon-website/README.md) 更新为 Next.js 14.2.21 / React 18.3.1 / Tailwind CSS 3.4.17 |
---
## 4. 剩余非阻塞性风险与技术债
| ID | 描述 | 严重度 | 建议处理方案 |
|----|------|--------|--------------|
| DEBT-001 | ESLint 存在约 30+ 条 Warning,集中在 `setState in effect``any` 类型、`console.log` | 低 | 纳入下一迭代技术债清理,优先处理 admin 与 hook 文件 |
| DEBT-002 | `next.config.mjs` 未配置 `Strict-Transport-Security``Content-Security-Policy` 响应头 | 低~中 | 建议在 Nginx / CDN 层统一补充;若由 Node 直接对外服务,则在 `headers()` 中追加 |
| DEBT-003 | `k6` 性能压测依赖版本为 `^0.0.0` 占位,实际运行需本地安装 k6 CLI | 低 | 封版前在目标部署机验证 `npm run test:performance``test:stress` 可执行 |
| DEBT-004 | README 中技术栈版本(Next.js 16 / React 19 / Tailwind 4)与实际 `package.json` 不一致 | 低 | 已修复:README 已更新为实际版本;`CONTEXT.md` 将在下一迭代同步 |
---
## 5. 上线前检查清单
- [ ] 生产服务器已配置 `JWT_SECRET``CMS_API_TOKEN` 等环境变量,且长度/强度符合安全要求。
- [ ] 生产数据库已执行 `npx prisma migrate deploy` 并按需 `npm run db:seed`
- [ ] Nginx 反向代理已配置子域名隔离(`product.novalon.cn` / `solution.novalon.cn` / `service.novalon.cn`)。
- [ ] Nginx / CDN 已补充 HSTS、CSP、X-Content-Type-Options、X-Frame-Options、X-XSS-Protection 等安全响应头。
- [ ] 部署前确认 3000 端口无旧进程占用,避免静态资源 404 导致页面降级。
- [ ] 已验证生产环境 LOGO 为初始书法体版本(SVG 路径),未使用系统字体回退。
- [ ] 已确认未引入外部字体服务,所有字体为本地加载。
---
## 6. 审查结论
经功能、非功能、安全、可访问性、视觉、兼容性、性能多维度验证,当前系统满足封版交付标准。所有高危安全问题与阻塞性缺陷已修复并通过回归验证,剩余项均为低风险技术债或需在生产基础设施层补充的配置,不构成封版障碍。
**建议:准予封版,按第 5 章检查清单完成生产部署前最后一轮环境确认后上线。**