Files
dsh_ai1net_server/归档/交接单-20260924-归档/接续包_注册页验证_20260919.md
T
admin 7bd1151c67 chore(工作区): 归档交接单 27 件 + 新增 CODEBUDDY §9 工作区卫生
交接单按归属约定(正文落文档库、工作区只放指针)归档至
归档/交接单-20260924-归档/,含逐件判定 README:
- 16 件已被文档库正式版取代(T09–T21 + 覆盖网络-24/25/26)
- 4 件主题已被覆盖网络线入口汇总
- 7 件历史接续包/规划件

CODEBUDDY §9:收口清本棒 tmp、tmp 保留期 7 天、禁「待清理」中间态、
工作区入库只放文档与文件、不保留脚本副本、>60 KB 单文件须逐个判。
2026-09-24 07:58:57 +08:00

70 lines
5.8 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.
# 接续包 —— 注册页验证 + 品牌标识(档案 134/137)收官后
> **状态:✅ 全部完成,无在途任务。** 本会话三条线都已上线、入仓(`971ccc3`)、双推、文档镜像对齐。
> 生成时间:2026-09-19 09:2x|会话:`提交到仓库-品牌标识+注册验证`
> 📌 **本文件内不写自身 md5**(写进去就变、自指无效)—— 指纹见下方「指纹登记」与今日日志。
## 指纹登记
接续包路径:`E:\ProgramData\AI技能\aliyun-dsh-server\接续包_注册页验证_20260919.md`
开工前请重算:`md5sum "E:/ProgramData/AI技能/aliyun-dsh-server/接续包_注册页验证_20260919.md"`
⇒ 不符即**停手报告**「口径已更新,需重新接续」,⛔ 不要按旧口径开工。
---
## 1. 目标(本会话已完成,供下一棒判断"是否还需动手")
注册账号页增加 **Cloudflare 人机验证** + **邮箱验证码**(含防爆破);并把平台自有页面上所有
**DeepSeek 品牌标识**换成平台标识(中文「能力枢纽」/其他语言「CapabilityNet」)。
## 2. 已完成(**均已上线 + 入仓 + 双推 + 镜像对齐,无需重做**)
| # | 项 | 证据 |
|---|---|---|
| 1 | 档案 **134** 注册页人机验证 + 邮箱验证码 | DB 迁移 v10;4 个新模块;防爆破(三层配额 + 递增冷却 60→60→180→300→900→1800s + 试错 5 次作废 + 码只存哈希 + 单次使用);Turnstile 校 `success`+`action`+`hostname` **三项** |
| 2 | Turnstile **已启用** | 密钥写入 47 `/etc/systemd/system/dshs.service.d/register-verify.conf`(600);线上无 token / 假 token 提交均 **403** |
| 3 | 邮件通道 | Brevo,发件域名 `ai1net.com` 已认证(CF 4 条记录 + SPF),发件人 `[email protected]`;实测 `delivered` |
| 4 | 档案 **137** 品牌标识改造 | 四页(login/register/admin/portal)+ 新建 `web/favicon.svg`;**图标已获用户定稿** |
| 5 | 测试 | `test/register-guard.test.mjs`(19) + `test/i18n-brand.test.mjs`(2);全量 **221 pass / 0 fail / 1 skipped** |
| 6 | 静态校验加固 | `verify-static.mjs` 新增 SVG 段(XML 注释不得含 ASCII 双连字符——否则整份 SVG 解析失败、图标静默不显示;已做反向自证) |
| 7 | 归档与同步 | 档案 134/135/136/137 + INDEX + manifest;提交 **`971ccc3`**;双推原仓与 CNB **三方 sha 一致**;文档镜像 **一致 238 / 不一致 0 / 仅本地 0** |
## 3. 在途 / 未完成
**⏹ 无。本会话没有任何未完成的技术任务。**
## 4. 下一步(**均为"待用户决定",不是待执行**)
1. 🟡 **`users.email` 未进管理端** —— 目前只落 DB,管理员用户列表看不到邮箱。属功能增量,未开工。
2. 🟡 **`index.html` / `wake.html` 没有 favicon link** —— 这两页标签图标为浏览器默认。加一行即可统一。
3. ⚪ **47 上 5 个孤儿用户目录**(`3ec95f69…`/`4eaeb26b…`/`74e8804a…`/`7ba268be…`/`ca3f36e0…`,09-15 产生、DB 无对应行)+ 仓库根三个历史临时目录(`_tmp_seq24/`、`_tmp_seq40/`、`_中间产物_待清理/`)—— 均**未动**,清理需用户点头(不可逆)。
4. ✅ **已按用户拍板办完**:文档镜像已同步(47 文件)|图标定稿采用|三个零引用 DeepSeek 资产(`logo.svg`/`deepseek-text.svg`/`deepseek.webp`)**保留不删**。
## 5. 关键决定(⛔ 不要重开讨论)
- **邮件用 Brevo**,驱动**可插拔**(`brevo`/`http`/`log`)⇒ 换供应商只改 env、零代码。
- **限流计数落 DB**(`email_codes` 事件表),⛔ 不落进程内(本部署天天重启,进程内计数清零 = 关掉限流)。
- **三条顺序不变式**:先人机验证再花配额 / 被拒绝也落库 / 上游成功才记 `sent`。
- **配置默认全空** ⇒「不配任何 env = 与改造前逐字一致」;功能启用 = 策略要求 ∧ 通道配齐。
- **Turnstile 必须校 `hostname`**(sitekey 公开 ⇒ 只校 `success` 时"拿我们的 sitekey 在自己站点替真人取合法 token 再打我们接口"这条路是通的)。
- **品牌名走 i18n 词条**(`brand.name`),只写 `en` 一条即覆盖所有其他语言的回退。
- 🔴 **会话页面(实例内官方 dsh 界面)的标识不动** —— 用户明示「先不替换」,且它属官方 client bundle、受 **R2** 约束。
## 6. 回滚点
| 对象 | 方式 |
|---|---|
| 静态页 / 图标 | `/opt/dsh/backups/rebrand-20260919-084220/pre.tar`(第一批)+ `/opt/dsh/backups/rebrand2-20260919-090205/pre.tar`(本批)→ 覆盖 `/opt/dshs/`,**tar 即生效、无需重启** |
| 后端产物(`lib/**`) | `/opt/dsh/backups/register-verify-20260919_070418/{pre.tar,pre2.tar,pre3-turnstile.tar}` → 覆盖 + `restart dshs` |
| env(含密钥) | `/etc/systemd/system/dshs.service.d/register-verify.conf.bak-turnstile-20260919-083853`(= 只有邮件通道、无 Turnstile 的上一版) |
| 文档镜像 | `/opt/dsh/backups/docs-sync-20260919-091840/pre.tar`(本次 47 文件)|**根本回滚依据 = 本机 git 仓库**(已全量提交 `971ccc3`) |
| 只停功能(首选) | `mv register-verify.conf{,.off} && systemctl daemon-reload && systemctl restart dshs` ⇒ 注册恢复成"用户名+密码" |
## 7. 若开新会话:开机四步
1. 跑 `E:/ProgramData/AI技能/aliyun-dsh-server/state.py`(**第 0 步**,先看锁 / git / 在途单)。
2. 读本文件(先 `md5sum` 校验上方指纹,不符即停)。
3. 读档案 `D:/github/dsh_shenxian/dsh-server-docs/04-调整方案/134-……md` 与 `137-……md`(**细节的唯一来源**)。
4. 抢全局执行锁:`bash "D:/github/dsh_shenxian/dsh-server-docs/scripts/handoff-guard.sh" --claim-exec "<会话名>"`。
⛔ 本任务**无待执行项** ⇒ 新会话开工前请先判断"是否真有事要做",无事则直接报告并释放锁。