# 2026-09-23 ## 合并 main(V 0.1.1)到 develop-chezhiqi - `git fetch`:**origin/main 从 e9854eb 前进到 `bcb3feb`「V 0.1.1」**(其祖先已包含 a77cd7b / 07e1b0a,即 develop-chezhiqi 的全部提交)。 - `develop-chezhiqi` 是 `origin/main` 的**祖先** → 直接 **fast-forward 合并**:`git merge origin/main`。分支现指向 `bcb3feb`,**领先 origin/develop-chezhiqi 1 个提交(未 push)**。 - 合并前已备份数据库:`data/board.db.bak-before-merge-main-`。 - **main 带来的新内容**:登录与权限 —— `app/security.py`、`app/routers/auth.py`、`app/routers/rbac.py`;`users` / `roles` / `user_sessions` 表;`app/config.py`(新增 `ADMIN_PASSWORD`);`app/main.py`(启动时 `security.ensure_seed`);models/schemas 扩展(+83 行等);`web/**`(登录页、按角色显示菜单);`run.sh`、`README.md`、`data/board.db`。 - **我之前的改动全部保留**:`web/app.js` 里 项目总览 / 推动验收计划 / 进行中 / 华智下单 / 年度任务 / 新增项目 / data-sort 均在;DB 迁移也在 —— origin:华智下单 84 / 存量项目 27 / 汇智直签 10 / 提前交付 2;status:进行中 10(原交付中);`update_date` 空 111 / 有值 12;共 **123** 条。 - **无需新依赖**:`security.py` 仅用 hashlib / hmac / json / secrets 等标准库。 - 已启动服务:uvicorn(PID 30036),`/health` ok。 - **现在需要登录**(重要):未登录访问 `/api/custom/*` 返回 **401**。默认管理员 **admin / admin123**(`app/config.py` 里 `ADMIN_PASSWORD` 默认值,可用 `.env` 覆盖),实测登录成功(角色「管理员」,menus 全 rw);另有 `user`(部门成员,部分菜单只读)。 - 未提交:`.workbuddy/memory/2026-09-20.md`(本地日志改动)。未跟踪:`data/board.db.bak-*`(本地备份)。 - 注意:**本地 `main` 分支仍是旧的 e9854eb**(我未改动它);本次合并用的是 `origin/main`。 ## 修复定开 3 个问题 1. **统计不随项目状态变更**(排查结论): - 不是刷新/缓存问题 —— 实测 PATCH 改状态后 GET 立刻反映;前端 `afterWrite() → refresh() → renderCustom()` 会重新取数,`/api/custom/projects` 也没有缓存头。 - 真因是**统计口径**:验收只认「验收时间」`accept_date`,改「项目状态」不会移动任何数字。 - **改口径**:验收**先按「项目状态 = 已验收」过滤**(状态一改统计立即同步),**季度归属再按「验收时间」**`accept_date`,**验收时间为空时算「本季度」**。工作看板里同口径的「本季度/本年验收」(`web/app.js` 约 1186 行)也同步改了。 - 影响数字:本年验收 65 → **68**、本季度验收 22 → **25**、本季金额 → 101.54 万(多出的 3 条是「状态=已验收但没有验收时间」的项目)。实测:把某项目改成已验收 → 本季 25→26、本年 68→69。 2. **「本周」= 9月第4周、默认展示本周**:`periods` 表原来只到「9月第3周」,`/api/periods` 的 `today_id` 为 `null`,前端只能退回最后一个周期(第3周)。 3. **周次按时间自动创建**:`app/routers/board.py` 的 `list_periods` 里加了一句 —— `_week_period(db, *constants.week_of_date(date.today()))`(复用 `focus._week_period`),每次取周期列表时自动补上「今天所在的这一周」。实测首次请求即生成 **9月第4周(id 53,2026-09-21 ~ 09-27)**,`today_id = 53`,无需手动新建。 - 重启 uvicorn(PID 26184);`node --check` / `ast.parse` / `/health` 均通过。 ## 推送 develop-chezhiqi - 提交 **cd37ea4**「定开:统计口径按项目状态同步 + 周次按时间自动创建(合并 main V 0.1.1)」(6 files changed, 53 insertions, 7 deletions)。 - 已 push:`07e1b0a..cd37ea4 develop-chezhiqi -> develop-chezhiqi`(此次同时把 fast-forward 的 `bcb3feb V 0.1.1` 一起带上远端);`git status -sb` 复核本地与远端一致。 - 仍未提交:`data/board.db.bak-*` 本地备份(8 个,保持 untracked)。 ## 验收口径回退为「严格按验收时间」(用户确认) - 用户在我提出「严格按验收时间 vs 状态联动」后回复「确认」→ 按**严格口径**改回: - `web/app.js` 定开 `renderCustomList`:`accRows = allRows.filter(p => qOf(p.accept_date))`(有验收时间才计入);本季度 = `accept_date == 当前季度`;本年 = 有验收时间。 - 工作看板同口径(`customAll`)一起改回。 - 去掉了上一版的「项目状态=已验收」门槛与「验收时间为空算本季度」的兜底。 - 数字:改成严格口径后 **本年验收 68 / 本季度验收(Q3) 25 / 本季金额 101.54 万** —— 与改之前一致(因为用户已把 3 条缺验收时间的项目补上了验收时间,两种口径现在结果相同)。 - 副作用:**改「项目状态」不会影响验收统计**(验收只看验收时间)——已在回复中说明。 ## 全部推送(含数据库备份) - 用户要求「本地代码全部推送」;当时 `develop-chezhiqi` 已与远端一致(无待推提交),只剩 8 个未跟踪的 `data/board.db.bak-*`。 - 询问后用户选择「一并提交推送」→ 提交 **839babb**「chore(data): 归档本地数据库备份 data/board.db.bak-*」(8 个文件,约 3.25MB),push `0cf172f..839babb`。 - 结果:`git status` **完全干净**(无未跟踪文件),`develop-chezhiqi` 与 `origin/develop-chezhiqi` 一致。 - 提示:本地 `main` 分支仍停在旧的 e9854eb(落后 origin/main 3 个提交),未动。