5.0 KiB
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 前,建议先修复:
init.sh/ venv 与标准 bash 环境不匹配。- production settings 缺少强制
SECRET_KEY。 - 当前状态文档存在过期和自相矛盾内容。
主要问题
1. High:标准启动入口 init.sh 在 bash 下不可用
仓库规则规定标准环境是 WSL2 / Linux + bash,且 init.sh 是标准启动与验证入口:
AGENTS.md:标准开发环境是 WSL2 / Linux。AGENTS.md:init.sh是标准启动与验证入口。
但当前 init.sh 调用:
.venv/bin/pip install -r requirements.txt
.venv/bin/python manage.py check
实际 .venv/bin/ 下只有 Windows / MSYS2 风格可执行文件:
pip.exe
python.exe
python3.12.exe
没有:
.venv/bin/pip
.venv/bin/python
验证命令:
bash -lc './init.sh'
结果:
./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 中:
SECRET_KEY = os.environ.get("SECRET_KEY", "django-insecure-dev-key-change-me")
skelet/settings/production.py 没有覆盖或强制校验 SECRET_KEY。
验证命令:
DJANGO_SETTINGS_MODULE=skelet.settings.production .venv/bin/python manage.py check --deploy
结果包含:
security.W009: Your SECRET_KEY has less than 50 characters, less than 5 unique characters, or it's prefixed with 'django-insecure-'
进一步读取 settings,生产配置实际值仍为:
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 仍写:
当前仓库处于 harness 文档初始化阶段,生产代码尚未初始化。
下一步 ... T-001
但任务看板中 Phase 0 已标为 DONE,实际代码也已初始化。
docs/current-state.md 中也存在矛盾:
当前 blocker:无;下一步执行 T-002
同一文件后文又写:
已完成: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 写:
复制为 .env 并填入真实值
但当前项目没有加载 .env 的代码,也没有 python-dotenv 依赖。用户只复制 .env 并不会自动影响 Django settings。
建议二选一:
- 接入 dotenv,并明确加载路径。
- 或者修改说明,写明这些变量需要通过 shell / systemd / hosting environment 注入。
已通过项
以下内容经检查或命令验证通过:
.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。
最低修复门槛:
- 修复
init.sh,确保在标准 bash / WSL 环境下可运行。 - 修复 production
SECRET_KEY默认值风险。 - 同步
AGENTS.md和docs/current-state.md,确保下一步任务明确为 T-101。
完成以上三项后,Phase 0 可以视为达标,再进入 T-101。