Smail/docs/文件目录整理说明.md
smail f60d3b0880
Some checks are pending
Security Checks / security (push) Waiting to run
整理前后端与测试构建目录并完善配置和安全引导
统一 frontend、backend、test、test-log 和 out 目录,更新构建、部署及测试入口;纳入配置管理兼容与首次安全引导修复;排除本机配置、密钥和测试产物。
2026-09-05 19:19:52 +08:00

81 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.

# 文件目录整理说明
## 需求确认
按本次要求将独立测试代码、脚本集中到 `test/`,测试记录集中到 `test-log/`,编译输出集中到 `out/`;不改动真实配置、账号库、证书或业务逻辑。
## 整理后的结构
```text
Smail/
├── frontend/ # 前端源码与依赖
├── backend/ # 后端源码、必要的同包测试与运行配置
├── plugins/ # 插件源码与文档
├── deploy/ # 构建、开发启动及正式部署工具
├── test/ # 独立测试源码、脚本和统一测试入口
│ ├── frontend/
│ ├── manual/
│ ├── plugins/
│ └── tools/
├── test-log/ # 本地证据,不进入版本库
│ ├── archive/ # 历史日志、浏览器数据、配置备份
│ ├── fixtures/ # 历史初始化测试数据
│ ├── reports/ # 审查报告和移动、清理清单
│ ├── runtime/ # 前后端开发日志
│ └── screenshots/ # 截图及测试 Logo 图
├── out/ # 编译输出,不进入版本库
│ ├── frontend/
│ ├── backend/
│ ├── plugins/
│ ├── test-tools/
│ └── archive/ # 尚需保留的旧编译产物
└── docs/ # 项目文档
```
`out/package/` 和 `out/release/` 分别供 Makefile 打包及 CI 发布使用。开发日志由 `deploy/start-dev.ps1` 写入 `test-log/runtime/`,测试入口为 `node test/run.mjs all`。
## 必须保留的例外
1. Go 同包测试保留在 `backend/`:依赖包私有符号,直接搬离会破坏测试,统一入口负责集中执行。
2. `backend/listen/http_server/dist/` 和 Telegram 插件的 `hook/dist/` 是 Go 嵌入中间目录:Go 不允许跨模块向上嵌入,不能直接指向 `out/`。前端正式输出在 `out/`,构建后自动同步必需的嵌入文件。
3. 运行 Logo、文档图片、源代码静态资源、依赖目录、模型及训练工具不属于测试垃圾。
4. `backend/config/` 是现有服务的数据根目录,配置、SQLite、密钥及迁移备份原位保留。根目录 `ssl/` 和用途尚未确认的空数据库也保留,不凭文件名删除。
## 构建与启动
```powershell
Set-Location D:\Desktop\Smail
powershell -NoProfile -ExecutionPolicy Bypass -File deploy/build.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File deploy/start-dev.ps1 -Service backend
powershell -NoProfile -ExecutionPolicy Bypass -File deploy/start-dev.ps1 -Service frontend
```
开发后端为 `out/backend/smail-dev.exe`。脚本固定 `SMAIL_ROOT=backend/`,不在 `out/` 下创建新账号库。编译前应停止正在运行的同名二进制,停止前核对进程号和路径。正式部署仍需使用发行入口 `cmd/smail`,保留本机管理员恢复通道的权限保护。
两个新增 PowerShell 脚本使用 UTF-8 BOM,使 Windows PowerShell 5 正确解析中文;其他源文件沿用其原编码。没有用脚本替换中文文字。
## 清理与安全边界
- 历史 `artifacts/` 中的记录、浏览器资料和配置备份移入 `test-log/archive/artifacts/`,二进制另归档到 `out/archive/`。
- 历史测试资料中的配置引用不自动重写;目录变更后它们只作为证据保留,不保证能够直接重放。
- 清理候选仅限已确认的空目录和校验哈希相同的重复归档编译文件,至少保留一份。本次删除命令被执行环境策略拦截,未执行物理删除;文件已集中归档,并保存待清理清单,不绕过策略。
- `make clean` 不再直接递归删除文件,必须先审查清单。
- 构建打包不复制本机真实配置、证书或密钥,首次正式部署应使用初始化流程。
- `test-log/` 可能含浏览器 Cookie、测试凭据和配置备份,不能公开上传或提交;`out/` 和历史工具归档同样不提交。
本轮任务点和实际验证结果见本文件末尾的验收记录;未做真实发信、模型运行或跨平台部署的项目,不算验收通过。
## 本次验收记录
- [✓] 前端自动测试、独立密码检查工具、SMTP 和模型测试脚本已迁入 `test/`;178 个 Go 同包测试原位保留。
- [✓] 历史日志、截图、测试数据库及配置备份完成归档,移动记录位于 `test-log/reports/organization-moves.csv`。
- [✓] 前端及后端开发程序、管理和配置工具输出到 `out/`;Telegram 前端及 Windows 插件构建通过。
- [✓] 归档期间 `backend/config/` 下 79 个文件逐一哈希校验未改变,未清空数据库。
- [✓] `node test/run.mjs all -- -count=1 ./...` 通过,Go 测试未使用结果缓存;随后新增构建路径约束测试,最终前端及构建约束共 19 项全部通过。
- [✓] 从新目录启动前后端,443 和 15173 监听正常;后端与前端代理探活返回 200。
- [✓] 浏览器 MCP 忽略缓存刷新后仍显示收件箱,无登录框或错误提示;配置状态、基础配置、备份、审计读取均返回 200。
- [✓] 新脚本语法及 YAML 解析检查通过,`out/`、`test-log/` 和历史脚本归档均被 Git 忽略。
- [✓] Windows 正式入口程序及微信、垃圾邮件和 Telegram 插件均成功编译到 `out/`,未启动正式服务或执行插件业务操作。
- [!] 物理删除未完成:发现 2 个哈希完全相同的重复二进制候选,约 201.75 MiB;文件仍保留,见 `duplicate-binaries-retained.csv`,空目录清单见 `empty-directories-retained.csv`。
- [!] 本次未验收模型推断、真实 SMTP 发信、全平台发布或 Linux/Windows 正式安装;未重新执行清库初始化流程,避免破坏用户现有账号与配置。