# 执行进度记录 > 本文件是只追加的历史流水,用来记录任务执行过程、验证命令、阻塞点和关键决策。 > 当前目录、当前命令、下一个可领取任务等可覆盖快照,写入 [`docs/current-state.md`](docs/current-state.md)。 ## 职责边界 - `docs/06-tasks.md`:任务看板,维护任务状态、依赖和验收要点。 - `progress.md`:历史流水,只追加记录每轮执行发生了什么。 - `docs/current-state.md`:当前快照,可覆盖更新仓库现实、可运行命令和下一步。 不要在本文重复维护当前目录结构、当前运行命令或下一个任务;这些信息以 `docs/current-state.md` 为准。 ## 记录格式 每完成或中断一轮任务,在文件末尾追加一条记录: ```markdown ## 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= 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 阻塞。