chore(qa): 验收台账与证据入库 + 构建/部署配置同步

- docs/acceptance/qa-tracker.md:跨周期缺陷单一真源台账(§7=第五轮)。
- 周期 1/2 + iPhone SE/axe 验收证据目录、ACCEPTANCE_REVIEW 快照入库。
- 同步 README/CONTEXT/CLAUDE/DESIGN/testing/deployment/lessons-learned 口径;
  next.config/Dockerfile/nginx/Jenkinsfile/docker-compose/sentry/prisma 对齐
  standalone 产物装配与部署形态。
This commit is contained in:
2026-09-28 10:48:09 +08:00
parent 6bb7c557ee
commit a0328a623f
128 changed files with 22455 additions and 504 deletions
+28 -3
View File
@@ -220,14 +220,18 @@ async function main() {
});
}
// 必须与真实 ContentModel 的 code 全等(hasPermission 按 modelCode 全等匹配,
// src/lib/permissions.ts:26)。防漂移门禁见 src/lib/seed-permissions.test.ts。
// 'media' 是媒体库权限码(src/app/api/admin/media/route.ts:18),无对应 ContentModel 行。
const contentModels = [
'news',
'product',
'solution',
'service',
'case-study',
'team',
'legal',
'team-page',
'contact-page',
'legal-page',
'about-page',
'hero-banner',
'stat-item',
@@ -237,6 +241,15 @@ async function main() {
'page-copy',
];
// site-config / navigation 属站点级配置,刻意仅 super_admin 可维护(hasPermission 的
// super_admin 全权短路,src/lib/permissions.ts:24),不进上表。
// 外壳权限码 content-model / content-zone 同样无 ContentModel 行,仅作门控
// (src/app/api/admin/models/route.ts:9、stats/route.ts:11、zones/route.ts:14,38,108)。
// 决策:所有非 super_admin 角色仅补 read —— 仪表盘 getStats 与编辑器加载依赖
// models/zones 的读取;zone 的 update/delete 属页面结构调整,刻意保持 super_admin 独有。
const shellReadModels = ['content-model', 'content-zone'];
// 为 super_admin 之外的角色创建权限
const permissionMatrix: Array<{ roleCode: string; actions: string[]; models?: string[] }> = [
{
@@ -259,6 +272,11 @@ async function main() {
actions: ['read'],
models: contentModels,
},
...['content_admin', 'content_editor', 'reviewer', 'readonly'].map((roleCode) => ({
roleCode,
actions: ['read'],
models: shellReadModels,
})),
];
for (const { roleCode, actions, models } of permissionMatrix) {
@@ -376,6 +394,13 @@ async function main() {
{ name: 'value', type: 'text', label: '数值' },
{ name: 'label', type: 'text', label: '标签' },
{ name: 'sub', type: 'text', label: '副文本' },
{ name: 'basis', type: 'select', label: '数据口径',
description: '留空按「目标口径」处理并自动标注;仅在有可核验实测出处时选「已验证」',
options: [
{ label: '目标口径(设计/承诺值,非既成结果)', value: 'target' },
{ label: '团队历史项目成果(非本公司交付数据)', value: 'team-history' },
{ label: '已验证(有可核验实测出处)', value: 'verified' },
]},
]},
{ name: 'certifications', type: 'array', label: '资质认证', fields: [
{ name: 'name', type: 'text', label: '名称' },
@@ -958,7 +983,7 @@ async function main() {
],
founderQuoteEyebrow: '创始团队观点',
founderQuoteText: '我们相信,数字化不是一次性项目,\n而是持续迭代的能力建设。\n每一份投入,都应当经得起衡量。',
founderQuoteName: 'Novalon 创始团队',
founderQuoteName: '睿新致远创始团队',
founderQuoteRole: '技术咨询 · 数字化转型同行者',
newsEyebrow: '新闻动态',
newsTitle: '公司要闻\n与研发动态',