diff --git a/docs/review/phase2-review.md b/docs/review/phase2-review.md index 12a8a40..6b32852 100644 --- a/docs/review/phase2-review.md +++ b/docs/review/phase2-review.md @@ -120,3 +120,51 @@ Phase 2 **暂不达标**。 .venv/bin/python3.12.exe manage.py makemigrations --check --dry-run .venv/bin/python3.12.exe manage.py test ``` + +## 2026-07-06 修复复查 + +复查对象:提交 `714d218 Phase 2 评审修复: P0 min_score+&q=500 (ORM→list 顺序) + P1 场景分页(20/page) + P2 文档同步 + 36 tests` + +复查结论:原 Phase 2 阻断问题 **已达标**,Phase 2 当前可视为通过复查。 + +### 复查结果 + +| 原问题 | 状态 | 证据 | +| --- | --- | --- | +| P0:项目列表 `min_score + q` 组合筛选会 500 | 已达标 | `ProjectIndexPage.get_context()` 先执行 `q` ORM 过滤,再做 `min_score` Python 过滤;`/projects/?min_score=18&q=Django` 复测返回 200。 | +| P1:场景页未实现分页 | 已达标 | `ScenarioPage.get_context()` 已使用 `Paginator(projects, 20)`;`scenario_page.html` 已渲染分页控件;新增 21 条项目分页测试。 | +| P2:`docs/current-state.md` 测试数量已过期 | 已达标 | 当前快照已更新为 31 个测试基线;修复后实际测试为 36 个。 | +| P2:文章列表实现偏薄 | 可接受 | 该项原本非阻断,当前未要求扩展;仍满足 T-206 最低验收。 | + +### 代码核对 + +- `core/models.py:32` 至 `core/models.py:46`:场景页项目列表已分页,非法页码和越界页码回退第一页。 +- `core/models.py:151` 至 `core/models.py:168`:项目列表筛选顺序已调整,`q` 不再在 list 上调用 `.filter()`。 +- `core/templates/core/scenario_page.html:26` 至 `core/templates/core/scenario_page.html:36`:场景页已展示分页导航。 +- `core/tests.py:78` 至 `core/tests.py:116`:新增场景页分页测试。 +- `core/tests.py:178` 至 `core/tests.py:190`:新增组合筛选与空状态测试。 + +### 复查验证命令 + +已执行: + +```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; from core.models import ScenarioPage,SkeletonProjectPage,ArticlePage; c=Client(raise_request_exception=False); scenario=ScenarioPage.objects.live().first(); paths=['/projects/?min_score=18&q=Django','/projects/?language=python&framework=django&min_score=18&q=Django','/projects/?language=go&framework=django&min_score=18', scenario.url, scenario.url+'?page=2', scenario.url+'?page=abc']; print('counts', ScenarioPage.objects.live().count(), SkeletonProjectPage.objects.live().count(), ArticlePage.objects.live().count()); [print(p, c.get(p).status_code) for p in paths]" +``` + +结果摘要: + +- `manage.py check`:0 error,9 个 treebeard/Wagtail 兼容 warning。 +- `makemigrations --check --dry-run`:No changes detected。 +- `manage.py test`:36 tests passed。 +- seed 数据:3 个 live 场景、5 个 live 项目、2 篇 live 文章。 +- URL 复测: + - `/projects/?min_score=18&q=Django`:200 + - `/projects/?language=python&framework=django&min_score=18&q=Django`:200 + - `/projects/?language=go&framework=django&min_score=18`:200 + - `/scenarios/modern-desktop-app-templates/`:200 + - `/scenarios/modern-desktop-app-templates/?page=2`:200 + - `/scenarios/modern-desktop-app-templates/?page=abc`:200