Phase 0 评审修复:init.sh 跨平台兼容 + production SECRET_KEY 强制校验 + 文档同步
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
# Phase 0 评审
|
||||
|
||||
> 评审日期:2026-07-06
|
||||
> 评审视角:全栈开发工程师
|
||||
> 评审范围:T-000 至 T-003 的文档、项目骨架、环境配置、启动脚本和验证基线。
|
||||
|
||||
## 结论
|
||||
|
||||
Phase 0 尚未完全达标。
|
||||
|
||||
Wagtail / Django 项目骨架、Python 3.12 venv、SQLite 数据库、依赖 pin、基础测试和 `manage.py check` / `manage.py test` 基线基本可用。但标准入口 `init.sh` 在仓库规定的 bash / WSL 环境下失败,这是阻断项。
|
||||
|
||||
在继续 Phase 1 前,建议先修复:
|
||||
|
||||
1. `init.sh` / venv 与标准 bash 环境不匹配。
|
||||
2. production settings 缺少强制 `SECRET_KEY`。
|
||||
3. 当前状态文档存在过期和自相矛盾内容。
|
||||
|
||||
## 主要问题
|
||||
|
||||
### 1. High:标准启动入口 `init.sh` 在 bash 下不可用
|
||||
|
||||
仓库规则规定标准环境是 WSL2 / Linux + bash,且 `init.sh` 是标准启动与验证入口:
|
||||
|
||||
- `AGENTS.md`:标准开发环境是 WSL2 / Linux。
|
||||
- `AGENTS.md`:`init.sh` 是标准启动与验证入口。
|
||||
|
||||
但当前 `init.sh` 调用:
|
||||
|
||||
```bash
|
||||
.venv/bin/pip install -r requirements.txt
|
||||
.venv/bin/python manage.py check
|
||||
```
|
||||
|
||||
实际 `.venv/bin/` 下只有 Windows / MSYS2 风格可执行文件:
|
||||
|
||||
```text
|
||||
pip.exe
|
||||
python.exe
|
||||
python3.12.exe
|
||||
```
|
||||
|
||||
没有:
|
||||
|
||||
```text
|
||||
.venv/bin/pip
|
||||
.venv/bin/python
|
||||
```
|
||||
|
||||
验证命令:
|
||||
|
||||
```bash
|
||||
bash -lc './init.sh'
|
||||
```
|
||||
|
||||
结果:
|
||||
|
||||
```text
|
||||
./init.sh: line 20: .venv/bin/pip: No such file or directory
|
||||
```
|
||||
|
||||
这会导致每轮开工流程中的“运行标准验证”失败,因此 T-001 / T-003 的标准入口验收不能算通过。
|
||||
|
||||
建议修复:
|
||||
|
||||
- 优先按 WSL / Linux 重新创建 `.venv`,确保 `.venv/bin/python` 和 `.venv/bin/pip` 存在。
|
||||
- 或者正式修改项目开发环境决策为 MSYS2,但这会偏离当前仓库文档,不建议。
|
||||
|
||||
### 2. High:production settings 会回退到开发 `SECRET_KEY`
|
||||
|
||||
当前 `skelet/settings/base.py` 中:
|
||||
|
||||
```python
|
||||
SECRET_KEY = os.environ.get("SECRET_KEY", "django-insecure-dev-key-change-me")
|
||||
```
|
||||
|
||||
`skelet/settings/production.py` 没有覆盖或强制校验 `SECRET_KEY`。
|
||||
|
||||
验证命令:
|
||||
|
||||
```bash
|
||||
DJANGO_SETTINGS_MODULE=skelet.settings.production .venv/bin/python manage.py check --deploy
|
||||
```
|
||||
|
||||
结果包含:
|
||||
|
||||
```text
|
||||
security.W009: Your SECRET_KEY has less than 50 characters, less than 5 unique characters, or it's prefixed with 'django-insecure-'
|
||||
```
|
||||
|
||||
进一步读取 settings,生产配置实际值仍为:
|
||||
|
||||
```text
|
||||
DEBUG False
|
||||
SECRET_KEY django-insecure-dev-key-change-me
|
||||
ALLOWED_HOSTS ['']
|
||||
```
|
||||
|
||||
这不是 Phase 0 本地开发的直接阻断项,但它是上线前安全风险。既然 T-002 已经涉及基础配置与环境样例,应尽早改成 production 缺少 `SECRET_KEY` 时 fail fast。
|
||||
|
||||
建议修复:
|
||||
|
||||
- 在 `production.py` 中强制读取 `SECRET_KEY`。
|
||||
- 缺少或仍为开发默认值时抛出 `ImproperlyConfigured`。
|
||||
- 同时清理 `ALLOWED_HOSTS=['']` 的空字符串问题。
|
||||
|
||||
### 3. Medium:当前状态文档存在过期和自相矛盾内容
|
||||
|
||||
`AGENTS.md` 仍写:
|
||||
|
||||
```text
|
||||
当前仓库处于 harness 文档初始化阶段,生产代码尚未初始化。
|
||||
下一步 ... T-001
|
||||
```
|
||||
|
||||
但任务看板中 Phase 0 已标为 DONE,实际代码也已初始化。
|
||||
|
||||
`docs/current-state.md` 中也存在矛盾:
|
||||
|
||||
```text
|
||||
当前 blocker:无;下一步执行 T-002
|
||||
```
|
||||
|
||||
同一文件后文又写:
|
||||
|
||||
```text
|
||||
已完成:T-000、T-001、T-002、T-003
|
||||
下一个可领取任务:T-101
|
||||
```
|
||||
|
||||
这会误导后续 agent 的任务领取流程。
|
||||
|
||||
建议修复:
|
||||
|
||||
- 更新 `AGENTS.md` 当前阶段和下一步任务。
|
||||
- 更新 `docs/current-state.md` 当前 blocker / 下一步,使其与 `docs/06-tasks.md` 一致。
|
||||
|
||||
### 4. Low:`.env.example` 说明容易误导
|
||||
|
||||
`.env.example` 写:
|
||||
|
||||
```text
|
||||
复制为 .env 并填入真实值
|
||||
```
|
||||
|
||||
但当前项目没有加载 `.env` 的代码,也没有 `python-dotenv` 依赖。用户只复制 `.env` 并不会自动影响 Django settings。
|
||||
|
||||
建议二选一:
|
||||
|
||||
- 接入 dotenv,并明确加载路径。
|
||||
- 或者修改说明,写明这些变量需要通过 shell / systemd / hosting environment 注入。
|
||||
|
||||
## 已通过项
|
||||
|
||||
以下内容经检查或命令验证通过:
|
||||
|
||||
```bash
|
||||
.venv/bin/python --version
|
||||
# Python 3.12.12
|
||||
|
||||
.venv/bin/python manage.py check
|
||||
# 0 errors,3 个 treebeard 兼容 warning
|
||||
|
||||
.venv/bin/python manage.py test
|
||||
# 5 tests passed
|
||||
```
|
||||
|
||||
其他通过项:
|
||||
|
||||
- Wagtail / Django 项目骨架已生成。
|
||||
- `manage.py`、`skelet/`、`home/`、`search/`、`core/` 已存在。
|
||||
- SQLite 数据库已 migrate。
|
||||
- `requirements.txt` 已精确 pin 依赖版本。
|
||||
- `home/tests.py` 有 smoke test,访问 `/` 返回 200。
|
||||
- `.gitignore` 已忽略 `.venv/`、`db.sqlite3`、`media/`、`.env`、`deploy/` 和 `*.pem`。
|
||||
- 当前 git 工作区干净。
|
||||
|
||||
## 是否允许进入 Phase 1
|
||||
|
||||
不建议直接进入 Phase 1。
|
||||
|
||||
最低修复门槛:
|
||||
|
||||
1. 修复 `init.sh`,确保在标准 bash / WSL 环境下可运行。
|
||||
2. 修复 production `SECRET_KEY` 默认值风险。
|
||||
3. 同步 `AGENTS.md` 和 `docs/current-state.md`,确保下一步任务明确为 T-101。
|
||||
|
||||
完成以上三项后,Phase 0 可以视为达标,再进入 T-101。
|
||||
|
||||
Reference in New Issue
Block a user