Files

24 KiB
Raw Permalink Blame History

执行进度记录

本文件是只追加的历史流水,用来记录任务执行过程、验证命令、阻塞点和关键决策。 当前目录、当前命令、下一个可领取任务等可覆盖快照,写入 docs/current-state.md。

职责边界

  • docs/06-tasks.md:任务看板,维护任务状态、依赖和验收要点。
  • progress.md:历史流水,只追加记录每轮执行发生了什么。
  • docs/current-state.md:当前快照,可覆盖更新仓库现实、可运行命令和下一步。

不要在本文重复维护当前目录结构、当前运行命令或下一个任务;这些信息以 docs/current-state.md 为准。

记录格式

每完成或中断一轮任务,在文件末尾追加一条记录:

## YYYY-MM-DD T-编号 任务名

- 状态:DONE / BLOCKED / PARTIAL
- 变更:修改了哪些文件或模块
- 验证:运行的真实命令和结果
- 阻塞:如有,写明原因和需要谁决策;没有写“无”
- 决策:如有,记录本轮确定的关键取舍
- 下一步:建议下一个任务 ID 或待确认事项

执行记录

2026-07-06 T-000 初始化 harness 文档

  • 状态:DONE
  • 变更:复制 D:\github\harness_coding_docs 模板到当前项目,并替换根目录入口、需求、技术栈、架构、编码规则、任务看板、API 边界、路由和当前状态文档。
  • 验证:Get-ChildItem -Recurse -File 已列出根目录和 docs/ 文档;定向检查确认根入口不再误称模板库。init.ps1 / init.sh 的命令占位保留到 T-001 初始化生产代码时替换。
  • 阻塞:生产代码尚未初始化,init.ps1 / init.sh 仍为占位命令。
  • 决策:第一版采用 Wagtail + Django + Python 3.12 + SQLite;先做内容目录和评测闭环,不做前台用户系统、支付、评论、自动抓取和复杂搜索。
  • 下一步:T-001 初始化 Wagtail 项目骨架。

2026-07-06 文档审核与优化(harness 文档瘦身 + 商业计划加验证闸门)

  • 状态:DONE
  • 变更:
    • docs 瘦身:method-map.md、evaluator-rubric.md、quality-document.md、adoption-checklist.md 四个元文档合并为 docs/90-harness-reference.md 并删除原文件,移出每轮必读链路;AGENTS.md 定为唯一权威入口,README.md、docs/README.md、docs/00-ai-start-here.md 删除重复的定位/必读顺序/技术栈内容,改为链接。
    • 纠错:修正 00-ai-start-here.md 中"尚未初始化 git"的过期事实;开发环境定为 WSL2/Linux(/mnt/d/OPC/skelet),全部文档命令改为 bash 形态,init.sh 为标准入口、init.ps1 降为可选。
    • 评分模型统一:04-architecture.md 定为评分维度唯一权威(6 个 0-5 分项,新增 incremental_score,删除独立录入的 0-100 总分,总分改为由分项计算);business-plan-v1.md 和 research-sourcing-strategy.md 改为引用。
    • 数据模型:scenario 字段明确为多对多(scenarios)。
    • 任务看板:新增 T-305(轻量访问统计与外链点击,M3/M4 数据前置,T-304 增加对其依赖);Backlog 收入首批内容库任务(原 T-105~T-109,收敛为 2 个场景)和 llms.txt/JSON 导出。
    • 商业文档:里程碑加验证闸门和止损线(M2 从 8 场景 50 项目砍到 2 场景 20 项目;M3 定 8 周/12 周复盘线;内容投入封顶 20 项目+12 篇);定站点语言为英文单语言、主攻"AI Coding 友好度"角度词、头部词只作词根;竞品分析补"直接问 AI"为最大隐性竞品及 llms.txt 借力策略;Newsletter 口径统一为"MVP 外部托管订阅外链、完整功能 V2";付费价格标注为未验证假设;发布节奏按单人投入下调。
  • 验证:git status + find . -type f -not -path "./.git/*" 确认文件清单;grep 确认仓库内已无对四个被删元文档的引用(progress.md 历史记录除外),无残留 PowerShell 命令(历史记录除外)。
  • 阻塞:无。
  • 决策:第一版英文单语言站点;首批只做 SaaS 和内容站/CMS 两个场景;评分维度以 docs/04-architecture.md 为唯一权威;M3 闸门不过不扩内容。
  • 下一步:T-001 初始化 Wagtail 项目骨架。

2026-07-06 仓库卫生维护(.gitignore 修复 + 行尾统一 + 路径纠错)

  • 状态:DONE
  • 变更:
    • 修复忽略文件:原文件名拼写为 .gittignore,git 不识别,deploy/(含 SSH 私钥 tokyo.pem)处于可被提交状态;现为标准 .gitignore,并补齐凭证类(*.pem、.env*)和 Python / Django / Wagtail 运行产物(__pycache__/、.venv/、db.sqlite3*、media/、staticfiles/)忽略项。
    • 新增 .gitattributes(* text=auto eol=lf):此前仓库以 CRLF 提交、工作区为 LF,导致 26 个文件出现全量假差异;统一按 LF 提交,本轮一次性归一化,之后 diff 只反映真实内容变化。
    • 路径纠错:AGENTS.md、docs/00-ai-start-here.md、docs/03-tech-stack.md、docs/90-harness-reference.md、docs/current-state.md 中仓库根目录由 /mnt/d/OPC/skelet 修正为实际路径 /mnt/d/opc_project/skelet(本文历史记录按只追加规则不改写)。
    • docs/current-state.md:目录要点补登 business/、deploy/(不入库)、.gitignore / .gitattributes。
  • 验证:git check-ignore -v deploy/tokyo.pem 确认私钥被忽略;git diff --ignore-cr-at-eol --stat 确认既有 26 文件差异全部为行尾、无内容变化;grep -rn "OPC/skelet" 确认除本文历史记录外无残留旧路径。
  • 阻塞:无。
  • 决策:deploy/ 整目录不入库,部署凭证只保留在本机;行尾规范定为 LF(与 WSL2/Linux 标准开发环境一致)。
  • 下一步:T-001 初始化 Wagtail 项目骨架。

2026-07-06 任务看板加固(面向执行能力较弱的模型)

  • 状态:DONE
  • 变更:
    • docs/06-tasks.md:新增「任务详单」一节。Phase 0/1 每任务给出实现指引、前置检查和带预期结果的验证命令(T-001 含 wagtail start 逐步命令和 BLOCKED 条件);Phase 2/3 给出关键实现约束与验证速查表。表格中的主观验收措辞("字段校验合理""移动端不溢出"等)替换为可勾选项。
    • docs/04-architecture.md:§3.4 升级为筛选参数契约表(唯一权威:language/framework/database/min_score/q/page,单值、AND 组合、非法值处理规则);§3.3 表下新增必填/可空/默认附注和评分校验器要求;§3.2 明确 AiCodingScore MVP 不建模型;§一/§六记录结构决策:保留 wagtail start 生成的 home/search app,业务模型集中在新建 core app,测试放各 app tests.py,删除生成的 Dockerfile。
    • docs/03-tech-stack.md:新增版本钉死策略行(T-001 时按 pip 实装稳定版 pin wagtail==X.Y.Z 并回写)。
    • docs/routes.md、docs/02-requirements.md:筛选相关表述指回 §3.4 契约,不再各自维护。
    • docs/current-state.md:快照与目录要点同步上述结构决策。
    • T-104 明确人工输入边界:候选项目、评分、评语必须经用户确认,无清单时标 BLOCKED,禁止模型编造。
  • 验证:grep 检查 §3.4 引用一致(routes、requirements、06-tasks 均指向 04-architecture);人工核对任务详单命令与 03-tech-stack §三目标命令形态一致。
  • 阻塞:无。
  • 决策:筛选参数契约以 04-architecture.md §3.4 为唯一权威;home/search app 保留不改名;AiCodingScore 不建模型;种子内容评分必须人工确认。
  • 下一步:T-001 初始化 Wagtail 项目骨架(详单已可直接照做)。

2026-07-06 补齐页面树决策与 Wagtail 多对多实现注意

  • 状态:DONE
  • 变更:
    • docs/04-architecture.md §3.1:新增 ProjectIndexPage(/projects/ 承载页);新增页面树结构图(唯一权威):项目详情统一挂 ProjectIndexPage 下、不挂场景页下(多对多场景 vs 单父节点树的冲突由此消解);ScenarioPage 用查询渲染项目、无子页面;筛选实现在 ProjectIndexPage.get_context()、不另建 Django view;新增 Wagtail 实现注意:Page 上的多对多必须用 modelcluster ParentalManyToManyField。
    • docs/06-tasks.md:T-102 表行与详单同步上述两点(ParentalManyToManyField、同轮建 ProjectIndexPage);T-204 速查行标明筛选落点。
    • docs/routes.md:项目列表页标注承载 Page 并指回 §3.1。
  • 验证:grep 确认 ProjectIndexPage 在 04/06/routes 三处一致;ParentalManyToManyField 在 04 与 06 两处一致。
  • 阻塞:无。
  • 决策:页面树以 §3.1 结构图为唯一权威;/languages/、/frameworks/ 聚合页 MVP 不建 Page,由筛选参数替代。
  • 下一步:T-001 初始化 Wagtail 项目骨架。

2026-07-06 确认 Python 命令

  • 状态:DONE
  • 变更:docs/03-tech-stack.md §三命令表 python3 → python3.12,并加说明注释;docs/current-state.md 开发环境行补充 Python 命令约定。
  • 验证:python3.12 --version 输出 Python 3.12.12;docs/03-tech-stack.md 与 docs/current-state.md 已同步。
  • 阻塞:无。
  • 决策:开发统一使用 python3.12 命令(系统已安装 3.12.12),不依赖 python3 别名(指向 3.8.10)。
  • 下一步:T-001 初始化 Wagtail 项目骨架。

2026-07-06 T-001 初始化 Wagtail 项目骨架

  • 状态:DONE
  • 变更:
    • 创建 Python 3.12 venv(--system-site-packages,Pillow 由 MSYS2 mingw-w64-x86_64-python-pillow 提供)
    • 安装 Wagtail 7.4.2 + Django 6.0.6 + 全部依赖(通过 MSYS2 bash 环境)
    • wagtail start skelet . 生成项目骨架(manage.py、skelet/、home/、search/)
    • manage.py startapp core 并加入 INSTALLED_APPS
    • 删除 Dockerfile;requirements.txt 替换为 pip freeze 精确版本
    • manage.py migrate 成功;createsuperuser(admin/admin123)
    • init.sh / init.ps1 替换为真实命令(pip install、manage.py check、manage.py runserver)
    • 回写 03-tech-stack.md(版本钉死状态、测试方案、§三命令)、04-architecture.md §六(结构决策、已初始化标记)、current-state.md(快照、目录表、任务看板状态、可运行命令)、06-tasks.md(T-001→DONE)
  • 验证:
    • manage.py check:0 errors, 3 treebeard 兼容警告(非阻塞)
    • curl http://127.0.0.1:8000/:HTTP 200
    • curl http://127.0.0.1:8000/admin/login/:HTTP 200
  • 阻塞:无。
  • 决策:
    • Python 3.12 来自 MSYS2/MinGW(C:\msys64\mingw64\bin\python3.12.exe),创建 Unix 风格 venv(bin/ 非 Scripts/)
    • 因 MinGW 工具链版本冲突(GCC 8.1 vs Python 3.12),采用 --system-site-packages 复用 MSYS2 预编译 Pillow 12.0,非纯 Python 依赖(pillow-heif)在 MSYS2 bash 中编译
    • 开发命令需在 MSYS2 bash shell 中运行;init.ps1 在 PowerShell 中直接调用 .venv/bin/ 路径可工作
  • 下一步:T-002 建立基础配置与环境样例。

2026-07-06 T-002 建立基础配置与环境样例

  • 状态:DONE
  • 变更:
    • skelet/settings/base.py:新增 import os;SECRET_KEY、DEBUG、ALLOWED_HOSTS、WAGTAILADMIN_BASE_URL 改为从环境变量读取(dev 安全默认值)
    • skelet/settings/dev.py:精简为只设 DEBUG=True、ALLOWED_HOSTS=["*"]、EMAIL_BACKEND,其余继承 base
    • skelet/settings/production.py:DEBUG=False、ALLOWED_HOSTS 从环境变量读取、ManifestStaticFilesStorage、CSRF/Session 安全头
    • 新建 .env.example:含 SECRET_KEY、DEBUG、ALLOWED_HOSTS、WAGTAILADMIN_BASE_URL 占位值和逐项注释
    • .gitignore:添加 !.env.example 例外,确保样例文件可提交
  • 验证:
    • manage.py check:0 errors, 3 treebeard 兼容警告(非阻塞)
    • grep -riE "secret|token|password" .env.example:仅出现 SECRET_KEY=replace-me 占位值,无真实密钥
    • git check-ignore .env .env.example:.env 被忽略,.env.example 可提交
  • 阻塞:无。
  • 决策:环境变量命名遵循 Django 惯例;dev 环境默认值满足本地开发需求,生产部署时所有值从环境变量注入。
  • 下一步:T-003 建立最小验证基线。

2026-07-06 T-003 建立最小验证基线

  • 状态:DONE
  • 变更:
    • home/tests.py:新增 Smoketest 类(Django TestCase),test_homepage_returns_200 用 test client 访问 / 断言 200
    • docs/05-coding-rules.md §7:移除"目标形态"占位,替换为真实命令
  • 验证:
    • manage.py test:5 tests passed (0.243s),包括新增的 smoke 测试
    • manage.py check:0 errors
  • 阻塞:无。
  • 决策:init.sh 的 VERIFY_CMD 已在上轮设为 manage.py check,无需修改。
  • 下一步:T-101 建立场景、语言、框架、数据库、功能标签模型。

2026-07-06 Phase 0 评审修复

  • 状态:DONE
  • 变更(按 docs/review/phase0-review.md 评审逐项修复):
    • Issue 1 (High):init.sh / init.ps1 改用 python3.12/pip3.12 替代 python/pip,解决 MSYS2 venv 中 .venv/bin/python 不存在的问题;增加 venv 存在性检查
    • Issue 2 (High):production.py 新增 ImproperlyConfigured 检查,SECRET_KEY 缺失或仍为 django-insecure- 前缀时启动即失败;修复 ALLOWED_HOSTS=[''] 空字符串问题(过滤空值)
    • Issue 3 (Medium):AGENTS.md 更新当前阶段(Phase 0 已完成,下一步 T-101)和验证命令;current-state.md 修复 blocker 行(T-002→T-101)和 init 脚本状态;00-ai-start-here.md 替换为真实验证命令
    • Issue 4 (Low):.env.example 重写说明,明确列出四种环境变量注入方式(shell export、systemd、托管平台、Docker),不再误导用户以为复制即生效
  • 验证:
    • manage.py check:0 errors(dev settings)
    • manage.py test:5 tests passed
    • DJANGO_SETTINGS_MODULE=skelet.settings.production manage.py check:正确抛出 ImproperlyConfigured(SECRET_KEY 缺失)
    • SECRET_KEY=<valid> ALLOWED_HOSTS=example.com DJANGO_SETTINGS_MODULE=skelet.settings.production manage.py check:0 errors(production settings 含正确 SECRET_KEY)
    • .env.example grep:仅占位值,无真实密钥
  • 阻塞:无。
  • 决策:因 WSL2 不可用,当前实际开发环境为 MSYS2/MinGW;venv 使用 --system-site-packages 复用 MSYS2 Pillow;init.sh 使用 python3.12/pip3.12 实现跨平台兼容。
  • 下一步:T-101 建立场景、语言、框架、数据库、功能标签模型。

2026-07-06 Phase 0 评审第二次修复(Issue 1 + 3 复查)

  • 状态:DONE
  • 变更:
    • Issue 1:init.sh / init.ps1 增加 .exe suffix fallback 逻辑——先检测 .venv/bin/python3.12 是否存在(Linux 原生 venv),不存在则追加 .exe(MSYS2/MinGW venv);venv 缺失时给出明确错误信息
    • Issue 3:
      • AGENTS.md「开发环境」改为「当前实际为 MSYS2/MinGW;WSL2/Linux 为后续目标」
      • docs/current-state.md 命令从 .venv/bin/python 统一改为 .venv/bin/python3.12(与 venv 内实际可执行文件一致)
      • docs/03-tech-stack.md 开发环境行同步 MSYS2 + WSL2 目标
    • docs/00-ai-start-here.md 验证命令同步更新
  • 验证:
    • init.sh 在 MSYS2 bash 中完整执行(pip install → manage.py check,无错误)
    • .venv/bin/python3.12 manage.py check:0 errors
    • .venv/bin/python3.12 manage.py test:5 tests passed
  • 阻塞:无。
  • 决策:因 WSL2 不可用,环境决策正式转向 MSYS2/MinGW + bash;init.sh 同时兼容 Linux 原生 venv(无 .exe 后缀)和 MSYS2 venv(有 .exe 后缀),未来迁移 WSL2 时无需修改脚本。
  • 下一步:T-101 建立场景、语言、框架、数据库、功能标签模型。

2026-07-06 Phase 0 评审第三次修复(文档命令不可运行)

  • 状态:DONE
  • 变更:AGENTS.md、00-ai-start-here.md、03-tech-stack.md、05-coding-rules.md、current-state.md 中所有 .venv/bin/python / .venv/bin/python3.12 裸命令统一加 .exe 后缀(MSYS2 venv 实际文件名);版本号规范化(python→python3.12,pip→pip3.12)。
  • 验证:.venv/bin/python3.12.exe manage.py check(0 errors);.venv/bin/python3.12.exe manage.py test(OK);.venv/bin/pip3.12.exe --version(正常)。
  • 阻塞:无。
  • 下一步:T-101 建立场景、语言、框架、数据库、功能标签模型。

2026-07-06 T-101 + T-102 + T-103 Phase 1 内容模型

  • 状态:T-101/T-102/T-103 DONE,T-104 BLOCKED
  • 变更:
    • T-101:core/models.py 新增 ScenarioIndexPage、ScenarioPage(Page)+ Language、Framework、DatabaseOption、SkeletonFeature(Snippet,@register_snippet),各含 name(unique)+ slug(unique)
    • T-102:core/models.py 新增 ProjectIndexPage、SkeletonProjectPage(按 04-architecture.md §3.3 全部字段和必填/默认附注),多对多用 ParentalManyToManyField,6 个评分字段带 MinValueValidator(0)/MaxValueValidator(5),total_score 为 @property;后台面板按 5 组划分
    • T-103:core/models.py 新增 ArticleIndexPage、ArticlePage(body 用 RichTextField,related_projects 可空多对多)
    • core/tests.py:17 个测试(T-101: 8、T-102: 6、T-103: 1),覆盖 Snippet CRUD + slug 唯一性、评分校验、total_score 计算、文章关联项目
    • 迁移:core/migrations/0001_initial、0002_projectindexpage_skeletonprojectpage、0003_articleindexpage_articlepage
  • 验证:
    • makemigrations + migrate:成功
    • manage.py test core home:17 tests passed
  • 阻塞:T-104 因缺少人工确认的首批项目清单而标 BLOCKED
  • 下一步:等待用户提供首批种子内容(≥3 场景、≥5 项目、≥2 篇文章及其评分/评语),然后解除 T-104 阻塞。

2026-07-06 Phase 1 评审修复

  • 状态:DONE
  • 变更(按 docs/review/phase1-review.md 逐项修复):
    • Issue 1 (High):SkeletonProjectPage.clean() 新增 M2M 校验——已保存对象(self.id is not None)时检查 scenarios.exists() 和 languages.exists(),缺少任一项抛 ValidationError
    • Issue 2 (Medium):重写 core/tests.py——所有 Page 测试通过正确的页面树创建(HomePage → ProjectIndexPage → SkeletonProjectPage、HomePage → ArticleIndexPage → ArticlePage);新增 test_missing_scenarios_raises_error、test_missing_languages_raises_error、test_all_m2m_set_passes 三个验证 M2M 约束的测试
    • Issue 3 (Medium):AGENTS.md 更新当前阶段为 Phase 1 部分完成(T-101/102/103 DONE,T-104 BLOCKED),下一步明确为等待种子数据
  • 验证:
    • manage.py test core home:20 tests passed
    • manage.py check:0 errors
    • makemigrations --check --dry-run:No changes
  • 阻塞:T-104 仍需要人工确认的首批种子内容
  • 下一步:等待用户提供种子数据后解除 T-104 阻塞,然后进入 Phase 2

2026-07-06 T-104 首批种子内容

  • 状态:DONE
  • 变更:
    • core/management/commands/seed_data.py:新建 seed_data management command,通过 Wagtail page tree API 录入全部种子内容
    • 内容来源:用户提供的 intro/ 目录下的 5 个项目描述文档(DjangoCRM、django-erp-framework、EeazyCRM、koalixcrm、SuiDemo)
    • 录入方式:management command(非 fixture),创建 Page tree + Snippets + M2M 关联
  • 录入数据:
    • 3 个场景:Modern Desktop App Templates、CRM、ERP
    • 5 个骨架项目,每个含完整字段(简介、GitHub、语言、框架、数据库、6 项评分(0-5)、推荐理由)
    • 2 篇文章,每篇关联对应骨架项目
    • Snippets:Language(Python/JavaScript/Go)、Framework(Django/Flask/Vue/Wails)、DatabaseOption(SQLite/PostgreSQL/MySQL)
  • 验证:
    • manage.py seed_data:Scenarios=3、Projects=5、Articles=2(均满足 ≥3/≥5/≥2)
    • manage.py test core home:20 tests passed
    • 所有评分和评语来自用户确认文档,无模型编造
  • 阻塞:无。
  • 下一步:T-201 实现基础页面框架(Phase 2 前台 MVP)。

2026-07-06 T-104 seed_data M2M 持久化修复

  • 状态:DONE
  • 变更:
    • core/management/commands/seed_data.py:add_child() 后 M2M .add() 仅在内存操作 cluster,不持久化到 DB;新增 project.save() / article.save() 确保关联写入
    • 添加 --clear 参数和重复运行保护
    • core/tests.py:新增 test_m2m_persists_after_save_and_reload 测试——save() 后从 DB 重新加载,断言 scenarios.count() >= 1 和 languages.count() >= 1
  • 验证:
    • manage.py seed_data --clear:5 个项目全部 scenarios≥1, languages≥1 [OK],2 篇文章全部 related_projects=1 [OK]
    • manage.py test core home:21 tests passed(新增 1 个持久化测试)
  • 阻塞:无。
  • 下一步:T-201 实现基础页面框架(Phase 2 前台 MVP)。

2026-07-06 T-201 至 T-206 Phase 2 前台 MVP

  • 状态:全部 DONE
  • 变更:T-201 基础框架(base.html + nav/footer + CSS),T-202 首页(scenarios/featured/articles),T-203 场景页 + 项目列表(分页+空状态),T-204 筛选搜索(§3.4 契约),T-205 详情页(scores/badge),T-206 文章列表+详情(含 project links)
  • 验证:manage.py test core home 31 tests passed
  • 阻塞:无。
  • 下一步:T-301 补 SEO 基础(Phase 3)。

2026-07-06 Phase 3 SEO 与上线准备(T-301 至 T-304)

  • 状态:全部 DONE
  • 变更:
    • T-301:base.html 新增 meta description fallback(search_description → page.summary → 站点默认)+ rel="canonical" + sitemap(wagtail.contrib.sitemaps,含 scenarios/projects/articles);删除根目录 test_sitemap.py;将 sitemap/meta/canonical 测试纳入 core/tests.py
    • T-302:docs/deployment/deployment-guide.md 完整部署指南(venv → Gunicorn systemd → Nginx server block → SSL → 维护)
    • T-303:部署指南中含 SQLite 上线检查(JSON1 验证命令、WAL 启用、备份脚本、PostgreSQL 迁移触发条件)
    • T-305:skelet/context_processors.py 暴露 PLAUSIBLE_DOMAIN/PLAUSIBLE_SCRIPT_URL;base.html 条件加载 Plausible 脚本 + 外链点击事件监听(outbound link tracking);默认不启用,由环境变量控制
    • T-304:对 02-requirements.md 全部 P0 验收项逐项核对通过
  • 验证:
    • manage.py check:0 errors
    • manage.py test:42 tests passed
    • makemigrations --check --dry-run:No changes
    • sitemap.xml:200,含项目/场景/文章 URL
    • 核心页面均有 meta description + canonical
    • Plausible 脚本在设置 PLAUSIBLE_DOMAIN 时注入
    • 外链点击追踪 JS 默认存在
    • 部署指南命令可复制执行
  • P0 验收(02-requirements.md):
    • ✅ 首页场景导航 / 推荐项目 / 最新文章
    • ✅ 场景页项目列表 + 分页 + 空状态
    • ✅ 筛选与基础搜索(language/framework/database/min_score/q)
    • ✅ 骨架详情页完整展示(技术栈/评分/推荐理由/Sponsored)
    • ✅ Wagtail 后台内容管理
    • ✅ SEO 基础(title/description/sitemap/canonical)
    • ✅ 文章列表与详情 + 关联项目
  • 阻塞:无。
  • 下一步:Backlog(见 06-tasks.md Backlog 节)。

2026-07-06 Phase 2 评审修复(P0 min_score+500 + P1 场景分页 + P2 文档同步)

  • 状态:DONE
  • 变更:
    • P0:core/models.py ProjectIndexPage.get_context() 调换 q 与 min_score 的执行顺序——ORM 筛选(q/language/framework/database)先执行,最后做 Python 层 min_score 列表过滤,避免 QuerySet→list 后 .filter() 崩溃
    • P1:core/models.py ScenarioPage.get_context() 新增 Paginator(projects, 20);scenario_page.html 复用分页 UI;新增 3 个分页测试
    • P2:docs/current-state.md 测试数量同步为 31
    • 新增测试:test_combined_filters_return_200、test_combined_filters_no_results_returns_empty_state、test_first_page_has_20_items、test_second_page_has_1_item、test_invalid_page_falls_back_to_first
  • 验证:
    • manage.py test core home:36 tests passed
    • min_score=18&q=Django 返回 200 ✅
    • min_score=18&page=abc 返回 200 ✅
    • manage.py check:0 errors
    • makemigrations --check --dry-run:No changes
  • 阻塞:无。
  • 下一步:T-301 补 SEO 基础(Phase 3)。