Phase 3 review fix: remove private repo URL, fix WAL PRAGMA syntax
This commit is contained in:
@@ -19,7 +19,7 @@ sudo apt install python3.12 python3.12-venv python3.12-dev
|
||||
|
||||
```bash
|
||||
# 1. 克隆仓库
|
||||
git clone http://ilaer.eicp.net:8418/opc/skelet.git /var/www/skelet
|
||||
git clone https://github.com/your-org/skelet.git /var/www/skelet
|
||||
cd /var/www/skelet
|
||||
|
||||
# 2. 创建虚拟环境
|
||||
@@ -131,7 +131,7 @@ python -c "import sqlite3; c=sqlite3.connect(':memory:'); c.execute('SELECT json
|
||||
|
||||
```bash
|
||||
python manage.py dbshell
|
||||
.journal_mode WAL;
|
||||
PRAGMA journal_mode=WAL;
|
||||
.quit
|
||||
```
|
||||
|
||||
|
||||
@@ -153,3 +153,114 @@ rg -n "analytics|plausible|umami|data-analytics|onclick|click" . -g '!db.sqlite3
|
||||
4. T-303 在部署文档中补 JSON1、WAL、备份和 PostgreSQL 迁移条件,并记录验证命令。
|
||||
5. T-305 明确采用 Plausible、Umami 或等价方案,页面响应中应能看到统计脚本,外链应能被点击统计识别。
|
||||
6. 最后执行 T-304,对 `docs/02-requirements.md` P0 逐项验收并把证据写入 `progress.md`。
|
||||
|
||||
## 2026-07-07 修复复查
|
||||
|
||||
复查对象:提交 `dcc6265 Phase 3: T-301~T-304 SEO/部署/SQLite/统计/MVP验收完成(42 tests)`。
|
||||
|
||||
复查结论:Phase 3 **仍未完全达标**。
|
||||
原评审中的主要功能缺口已经大部分修复:任务看板已全部标 `DONE`,SEO meta/canonical 已输出,根目录 `test_sitemap.py` 已删除,sitemap 测试已纳入 `core/tests.py`,Plausible 条件脚本和外链点击监听已实现。但部署指南仍包含不可执行的 WAL 命令,并写入了具体私有仓库地址,不能算 T-302/T-303 完整达标。
|
||||
|
||||
### 已达标项
|
||||
|
||||
| 原问题 | 状态 | 证据 |
|
||||
| --- | --- | --- |
|
||||
| Phase 3 任务未完成 | 已达标 | `docs/06-tasks.md:53` 至 `docs/06-tasks.md:57` 已全部为 `DONE`;`progress.md` 已追加 Phase 3 完成记录。 |
|
||||
| T-301 只完成 sitemap,缺少 description/canonical | 已达标 | `skelet/templates/base.html:16` 至 `skelet/templates/base.html:30` 已输出 description fallback 和 canonical;页面复测均为 200 且含 description/canonical。 |
|
||||
| 根目录 `test_sitemap.py` 非规范测试 | 已达标 | 根目录已无 `test_sitemap.py`;`core/tests.py:485` 至 `core/tests.py:487` 已包含 sitemap 测试。 |
|
||||
| T-305 访问统计与外链点击未接入 | 已达标 | `skelet/context_processors.py` 暴露 Plausible 配置;`base.html:51` 至 `base.html:63` 条件加载 Plausible 并监听外链点击;设置 `PLAUSIBLE_DOMAIN` 后页面输出统计脚本。 |
|
||||
| T-304 MVP 完整验收记录缺失 | 已达标 | `progress.md` 已记录 `02-requirements.md` P0 验收项。 |
|
||||
|
||||
### 未达标项
|
||||
|
||||
#### P1:部署指南中的 WAL 启用命令不可执行
|
||||
|
||||
- 影响任务:T-303
|
||||
- 位置:`docs/deployment/deployment-guide.md:130` 至 `docs/deployment/deployment-guide.md:142`
|
||||
- 现象:文档要求在 `python manage.py dbshell` 中执行 `.journal_mode WAL;`,但 SQLite CLI 不支持该命令。
|
||||
- 复现:
|
||||
|
||||
```bash
|
||||
printf ".journal_mode WAL\n.quit\n" | .venv/bin/python3.12.exe manage.py dbshell
|
||||
```
|
||||
|
||||
实际结果:
|
||||
|
||||
```text
|
||||
Error: unknown command or invalid arguments: "journal_mode". Enter ".help" for help
|
||||
CommandError: "sqlite3 ... db.sqlite3" returned non-zero exit status 1.
|
||||
```
|
||||
|
||||
正确方向应使用 SQL:
|
||||
|
||||
```sql
|
||||
PRAGMA journal_mode=WAL;
|
||||
PRAGMA journal_mode;
|
||||
```
|
||||
|
||||
或给出可复制的非交互命令,并确认输出为 `wal`。当前 T-303 的“WAL 启用”步骤仍未达标。
|
||||
|
||||
#### P1:部署指南写入了具体私有仓库地址
|
||||
|
||||
- 影响任务:T-302 / 仓库规则
|
||||
- 位置:`docs/deployment/deployment-guide.md:21` 至 `docs/deployment/deployment-guide.md:23`
|
||||
- 现象:文档写入 `git clone http://ilaer.eicp.net:8418/opc/skelet.git /var/www/skelet`。
|
||||
- 问题:`AGENTS.md:47` 明确要求“不写真实密钥、账号、token、私有服务地址”。该地址应改成占位符或公开仓库占位,例如:
|
||||
|
||||
```bash
|
||||
git clone <YOUR_REPOSITORY_URL> /var/www/skelet
|
||||
```
|
||||
|
||||
### 复查验证命令
|
||||
|
||||
已执行:
|
||||
|
||||
```bash
|
||||
.venv/bin/python3.12.exe manage.py check
|
||||
.venv/bin/python3.12.exe manage.py makemigrations --check --dry-run
|
||||
.venv/bin/python3.12.exe manage.py test
|
||||
.venv/bin/python3.12.exe manage.py shell -c "from django.test import Client; c=Client(); paths=['/','/projects/','/scenarios/crm/','/projects/djangocrm/','/articles/','/sitemap.xml']; [print(p, c.get(p).status_code, 'desc', '<meta name=\"description\"' in c.get(p).content.decode('utf-8','ignore'), 'canonical', 'rel=\"canonical\"' in c.get(p).content.decode('utf-8','ignore'), 'djangocrm', 'djangocrm' in c.get(p).content.decode('utf-8','ignore')) for p in paths]"
|
||||
PLAUSIBLE_DOMAIN=skelet.example.com .venv/bin/python3.12.exe manage.py shell -c "from django.conf import settings; from django.test import Client; c=Client(); body=c.get('/projects/djangocrm/').content.decode('utf-8','ignore'); print('plausible', 'data-domain=\"skelet.example.com\"' in body, 'https://plausible.io/js/script.js' in body, 'Outbound Link' in body)"
|
||||
.venv/bin/python3.12.exe manage.py shell -c "import sqlite3; c=sqlite3.connect(':memory:'); c.execute('SELECT json(' + repr('{\"a\":1}') + ')'); print('JSON1 supported')"
|
||||
printf ".journal_mode WAL\n.quit\n" | .venv/bin/python3.12.exe manage.py dbshell
|
||||
.venv/bin/python3.12.exe manage.py dbshell -- -cmd "PRAGMA journal_mode=WAL;"
|
||||
.venv/bin/python3.12.exe manage.py dbshell -- -cmd "PRAGMA journal_mode;"
|
||||
```
|
||||
|
||||
结果摘要:
|
||||
|
||||
- `manage.py check`:0 error,9 个 treebeard/Wagtail 兼容 warning。
|
||||
- `makemigrations --check --dry-run`:No changes detected。
|
||||
- `manage.py test`:42 tests passed。
|
||||
- 页面复测:
|
||||
- `/`:200,含 description/canonical。
|
||||
- `/projects/`:200,含 description/canonical。
|
||||
- `/scenarios/crm/`:200,含 description/canonical。
|
||||
- `/projects/djangocrm/`:200,含 description/canonical。
|
||||
- `/articles/`:200,含 description/canonical。
|
||||
- `/sitemap.xml`:200,含 `djangocrm`。
|
||||
- 设置 `PLAUSIBLE_DOMAIN=skelet.example.com` 后,页面含 Plausible 脚本和 `Outbound Link` 监听代码。
|
||||
- JSON1 本地验证通过。
|
||||
- 文档中的 `.journal_mode WAL` 命令失败;使用 `PRAGMA journal_mode=WAL;` 可成功输出 `wal`。
|
||||
|
||||
### 复查后的逐任务状态
|
||||
|
||||
| 任务 | 复查结论 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| T-301 补 SEO 基础 | 已达标 | description/canonical/sitemap 均可用,测试纳入正式测试。 |
|
||||
| T-302 补部署文档 | 未达标 | 文档主体已补齐,但包含具体私有仓库地址,违反仓库规则。 |
|
||||
| T-303 SQLite 上线检查 | 未达标 | JSON1、备份、迁移触发条件已记录;WAL 启用命令不可执行。 |
|
||||
| T-305 接入轻量访问统计与外链点击记录 | 已达标 | Plausible 环境变量控制脚本注入,外链点击监听存在。 |
|
||||
| T-304 MVP 完整验收 | 部分达标 | P0 功能验收记录已补;但依赖的 T-302/T-303 仍有未达标项。 |
|
||||
|
||||
### 修复建议
|
||||
|
||||
1. 将 `docs/deployment/deployment-guide.md` 中的私有仓库地址替换为占位符。
|
||||
2. 将 WAL 启用步骤改为可执行命令,例如:
|
||||
|
||||
```bash
|
||||
python manage.py dbshell -- -cmd "PRAGMA journal_mode=WAL;"
|
||||
python manage.py dbshell -- -cmd "PRAGMA journal_mode;"
|
||||
```
|
||||
|
||||
并在文档里明确预期输出为 `wal`。
|
||||
|
||||
Reference in New Issue
Block a user