feat(S6-P21): 组件族参数化(13族/44成员/导航族15文件同源/79→48概念组件)

【本次核心 · S6-P21】
- 族层数据:families.json + 44 份契约注入 family/familyRole/familyParams;
  data.json / data.js / site/details 同步。13 族 / 44 成员 / 35 独立 → 概念组件 79→48。
- 79 个 slug 全保留、集合逐一不变(铁律 5 对外承诺未破);frameworks 仍 395 文件、薄壳仍 79。
- 归族判据为契约中可核对字段(semanticTypeCandidates 重叠 / anatomy 为同一骨架子集 /
  变体维度同构 / doNotInvent 显式从属声明),每族 mergeBasis 写明依据,不按名字猜。
- 实现层合并(导航族端到端切片):tools/gen-family-impl.mjs 从 5 端模板生成
  TopMenu / SideMenu / MixedNavigation 共 15 文件,参数 direction=top|side|mixed;
  三份 CSS md5 完全相同 = 一份样式表服务三个组件。
- 新增 tools/gen-families.mjs、tools/gen-family-impl.mjs、tools/verify-families.mjs、
  tools/lib/family-model.mjs、tools/lib/family-impl/nav-menu/*.tpl。

【同时清掉此前已完成但未提交的批次】
生成物(data.json / data.js / site/sources / site/components 薄壳 / sitemap.xml / tests 报告)
跨阶段交织,无法拆成互相自洽的多个提交,故按既有批量风格合并提交:
- Package:三端可 import(S5-P18)+ 发布到私有 npm 源
- Docs site:导航语言改下拉(S5-P19)、详情页代码块默认展开、中英切换完整性
- Security:生产部署链审计修复(2026-09-19)+ 线上部署
- Theme modes 日间/夜间/自动;S1-P4 data.js 瘦身;S2-P5 暗色;S2-P6 跨端一致性;
  S2-P7 行为断言;S2-P9 FAQ;S3-P8 RTL;S3-P9 契约缺口解释层;S4-P12 发布流程
- 补入 tools/pack-deploy.mjs、run-site-smoke.mjs、verify-*.mjs,.dockerignore、
  安全审计修复与待决策项.md

【验收】
- node tools/verify-families.mjs → OK: 族层端到端一致(13 族 / 44 成员 / 79 组件不变 / 395 文件不变)
- node tools/verify-cross-platform.mjs → 79/79 identical(HEAD 基线 high 44)
- node tools/run-regression.mjs → 100%(79/79 页,1017/1017 断言,N/A 34),连跑 8 次一致,0 超时
- 逐页实测:topmenu / sidemenu / mixednavigation 各 13/13,帧内 direction 参数正确,0 JS 错误
- 零运行时依赖 OK;build-site.ps1 ASCII-only OK

【未纳入】site/components/<slug>/ 平台薄壳 316 个 —— 历史从未跟踪且属构建产物,保持现状。
This commit is contained in:
aurora-admin
2026-09-20 03:32:31 +08:00
parent 7e3d442dab
commit eb25feedaf
372 changed files with 16928 additions and 12810 deletions
+50 -1
View File
@@ -211,12 +211,16 @@ node site/dev-server.js & # 起服务(端口 3311)
| 改令牌组件不变 | 改的是没被加载的文件 | 改内嵌 `<style>`(铁律 4) |
| `$themes` / `$schema` 在 PS 里 | 被当变量展开成 null,报"Null 键" | 用引号包裹键名 `'$themes'` |
| `Write-Output "...{}..." -f $n` | `{}` 被当格式占位符 | 改写措辞或转义 |
| `.dockerignore` 的 `*.md` / `*.png` 等 glob | **只匹配构建上下文根目录**,嵌套路径照样进镜像(实测:`sub/nested.md` 仍被 COPY) | 嵌套一律写 `**/*.md`;排除目录写完整相对路径 |
| 手工拷贝部署目录 | 修复被下一次拷贝覆盖(`absolute_redirect off` 就是这样丢的),且 .dockerignore 不随行导致规范原文入镜像 | 走 §九 的 `tools/pack-deploy.mjs`,不要手工拷贝 |
| 部署后浏览器仍跑旧 JS | 静态资源无 `Cache-Control` 时浏览器会启发式缓存(实测:页面内 `fetch` 能取到新 `app.js`,`<script src>` 却用缓存) | nginx 已加 `Cache-Control: no-cache`(带 ETag 复验 304);**升级前遗留的旧缓存需强刷一次** |
| `AA_PORT` 默认 13311 与文档里的隧道端口撞车 | `tools/verify-dev-server.mjs` 报 `EADDRINUSE` 并失败 | 隧道开着时用 `AA_PORT=13511 node tools/verify-dev-server.mjs` |
---
## 八 · 当前状态
**版本**:v1.4.1 | **回归**:100%(961 断言 / 0 失败 / N/A 36)| **下一阶段**:ROADMAP 的 S1 可交付
**版本**:v1.4.1 | **回归**:100%(1017 通过 / 0 失败 / N/A 34,共 1051 条断言,2026-09-19 连跑 10 次一致)| **下一阶段**:ROADMAP 的 S1 可交付
**已完成的里程碑**:
- v1.3.0 验收链路修复(测试页从空 DOM 误报改为 iframe 真实渲染)
@@ -228,3 +232,48 @@ node site/dev-server.js & # 起服务(端口 3311)
**当前缺口(详见 ROADMAP 的 G1-G8)**:
无 LICENSE(已补)、无分发机制、CI 无测试、暗色模式是假的、跨端一致性无验证、`data.js` 1MB、RTL 未支持、断言偏结构。
---
## 九 · 部署(192.168.5.7)
**当前形态**:Compose 项目 `aurora-admin`,容器 `aurora-admin-showcase`,端口 `127.0.0.1:3311 -> 80`。
**只监听回环**——局域网直连 `192.168.5.7:3311` 会超时,这是有意的;服务器上**没有任何 frp / 反代 / 域名指向它**,所以除了 SSH 隧道没有别的访问路径。不要靠改绑定或挂反代来解决"打不开"。
**本机访问(Windows,已实测可用)**:
```bash
ssh -o ExitOnForwardFailure=yes -N -L 13311:127.0.0.1:3311 root@192.168.5.7
# 然后浏览器打开 http://127.0.0.1:13311/site/
```
本地用 13311 而不是 3311,是为了不和 `node site/dev-server.js`(本地也占 3311)抢端口。
**想要局域网/其它设备直接访问**:那是一次显式的暴露变更(改 compose 绑定为 `0.0.0.0:3311`),并且 Docker 发布端口会绕过 ufw 规则 —— 需要明确许可后再做。
**部署目录**:`/opt/aurora-admin`(= docker build 上下文,必须含 `Dockerfile` / `nginx.conf` / `.dockerignore` / `docker-compose.yml` / `sitemap.xml` + 4 个内容目录)。
**标准流程**(不要在服务器上手工拼文件):
```bash
# 1) 本地打包(.dockerignore 是排除规则的唯一真源,含硬断言)
node tools/pack-deploy.mjs --tar # -> dist-deploy/aurora-admin-deploy.tar.gz
# 2) 上传 + 备份现状
# scp 到 /tmp/aurora-admin-deploy.tar.gz
# ssh: tar czf /root/aurora-admin-backup-$(date +%Y%m%d-%H%M).tgz -C /opt aurora-admin
# 3) 解到暂存目录、核对、替换、重建
cd /opt && mkdir -p aurora-admin.staged \
&& tar xzf /tmp/aurora-admin-deploy.tar.gz -C aurora-admin.staged --strip-components=1
ls -a aurora-admin.staged # 必须无 specs/ agent-reports/ preview/ ui_kits/
mv aurora-admin aurora-admin.pre-<日期> && mv aurora-admin.staged aurora-admin
cd /opt/aurora-admin && docker compose build && docker compose up -d
# 4) 验收(四条必须全中)
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:3311/.design_library/aurora-admin/specs/组件1.txt # 404
curl -sI http://127.0.0.1:3311/ | grep -i '^Location' # /site/
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:3311/sitemap.xml # 200
curl -sI http://127.0.0.1:3311/healthz | grep -ci '^content-type' # 1
```
**铁律**:任何"只改服务器、不回写仓库"的修复都会在下次部署时丢失——`nginx.conf` 的 `absolute_redirect off` 已经因此丢过一次。先改仓库,再走打包流程。