Compare commits

...

4 Commits

Author SHA1 Message Date
Simon b4e21e3150 kanban: v1.9.3 巡检同步 (2026-08-10)
主要变更:

- P0-1 /itportal/ 500 修复闭环:nginx.conf line 139-142 08-03 fix 已生效,公网实测 500→404,迁移至已完成

- P0-NEW10: 后端 debug 端点全清单治理(test-ping/test-error/health/ready/metrics/version/openapi.json)生产暴露

- P1 治理-2/3: 看板-滴答双向同步铁律升级(dida→看板反向同步纳入巡检必做)

- P1-Alembic / P1-Idx: dida→看板反向脱节补登(Alembic 053-057 迁移 + troubleshooting 索引)

- console.{log,debug,info} 残留 128→129(h5 101 / agent 20 / admin 0 / terminal 8)

- BLK-A/B 26→30 天阈值校正

- dida 同步 close: 6a6bfc2be (sensitive_words 13 端点补 auth), create: 6a7928a2 (P0-NEW10)
2026-08-10 09:26:41 +08:00
simon 5db3079d41 Merge pull request '员工端群聊按钮接线 → 参与者面板(REQ-用户-001)' (#4) from feat/h5-groupchat-wiring into main
Reviewed-on: #4
2026-08-09 23:12:37 +08:00
simon d8e7dbe998 Merge pull request 'fix(backend): approval.py + byod.py 改用 settings.create_redis_client()' (#5) from fix/approval-redis-import into main
Reviewed-on: #5
2026-08-09 23:12:11 +08:00
Simon af87f1deb0 fix(backend): approval.py + byod.py 改用 settings.create_redis_client()
PR #3 (commit 9292f41) 引入的回归:get_redis() 用 `from app.main import redis_client`,
但 redis_client 是 lifespan 函数内的局部变量,永远不可跨模块导入。

冒烟测试:ImportError: cannot import name 'redis_client' from 'app.main'
          → 整个 approval 模块加载失败,所有审批路由 500

修复:改用 settings.create_redis_client() 自建连接(与 approval_webhook.py:_writeback_agent_todo 同款)。

byod.py 同样问题,预防性一并修复(避免 byod 模块首次被访问时再炸)。

实测:
- POST /approval/callback → HTTP 200 {errcode:0}
- GET /byod/eligible-positions → HTTP 200 (845B)
2026-08-09 22:26:02 +08:00
4 changed files with 263 additions and 66 deletions
+186 -38
View File
@@ -180,21 +180,42 @@ footer {
<header> <header>
<h1>📋 项目状态看板 · IT 智能服务台</h1> <h1>📋 项目状态看板 · IT 智能服务台</h1>
<div class="meta"> <div class="meta">
<span>📅 <strong>2026-08-06</strong>GMT+8</span> <span>📅 <strong>2026-08-10</strong>GMT+8</span>
<span>📂 源文件:<strong>docs/07-项目管理/项目状态看板.md</strong></span> <span>📂 源文件:<strong>docs/07-项目管理/项目状态看板.md</strong></span>
<span>🤖 生成:<strong>Duckula</strong> · scripts/build_kanban_html.py</span> <span>🤖 生成:<strong>Duckula</strong> · scripts/build_kanban_html.py</span>
</div> </div>
<span class="version-badge frozen">v1.9.1-FROZEN</span> <span class="version-badge draft">v1.9.3-DRAFT</span>
</header> </header>
<nav class="toc" id="toc"><div class="toc-title">📑 目录</div><ul><li style="margin-left:0px"><a href="#_2">📊 看板概览</a></li><li style="margin-left:0px"><a href="#p0-high-priority">🔴 P0 必做(高优先级 / High Priority</a></li><li style="margin-left:0px"><a href="#p1-medium-priority">🟡 P1 重要(待办 / Medium Priority</a></li><li style="margin-left:0px"><a href="#awaiting-decision">🟢 等用户决策(阻塞项 / Awaiting Decision</a></li><li style="margin-left:0px"><a href="#req-001">⏸️ 安全策略检查平台 (REQ-集成-001) — 已暂停</a></li><li style="margin-left:0px"><a href="#in-progress">🟠 进行中 (In Progress)</a></li><li style="margin-left:0px"><a href="#to-do">🟡 待开始 (To Do)</a></li><li style="margin-left:0px"><a href="#recently-completed">✅ 最近完成 (Recently Completed)</a></li><li style="margin-left:0px"><a href="#2026-07-1516">✅ 近期完成 (2026-07-15~16)</a></li><li style="margin-left:0px"><a href="#_3">📌 重要技术决策与限制记录</a></li><li style="margin-left:0px"><a href="#_4">📈 任务统计</a></li><li style="margin-left:0px"><a href="#_5">🔗 相关文档</a></li><li style="margin-left:0px"><a href="#_6">📝 看板版本变更记录</a></li></ul></nav> <nav class="toc" id="toc"><div class="toc-title">📑 目录</div><ul><li style="margin-left:0px"><a href="#v193-2026-08-10">📌 v1.9.3 增补说明(2026-08-10 早班巡检触发)</a></li><li style="margin-left:0px"><a href="#_2">📊 看板概览</a></li><li style="margin-left:0px"><a href="#p0-high-priority">🔴 P0 必做(高优先级 / High Priority</a></li><li style="margin-left:0px"><a href="#p1-medium-priority">🟡 P1 重要(待办 / Medium Priority</a></li><li style="margin-left:0px"><a href="#awaiting-decision">🟢 等用户决策(阻塞项 / Awaiting Decision</a></li><li style="margin-left:0px"><a href="#req-001">⏸️ 安全策略检查平台 (REQ-集成-001) — 已暂停</a></li><li style="margin-left:0px"><a href="#in-progress">🟠 进行中 (In Progress)</a></li><li style="margin-left:0px"><a href="#to-do">🟡 待开始 (To Do)</a></li><li style="margin-left:0px"><a href="#recently-completed">✅ 最近完成 (Recently Completed)</a></li><li style="margin-left:0px"><a href="#2026-07-1516">✅ 近期完成 (2026-07-15~16)</a></li><li style="margin-left:0px"><a href="#_3">📌 重要技术决策与限制记录</a></li><li style="margin-left:0px"><a href="#_4">📈 任务统计</a></li><li style="margin-left:0px"><a href="#_5">🔗 相关文档</a></li><li style="margin-left:0px"><a href="#_6">📝 看板版本变更记录</a></li></ul></nav>
<main> <main>
<h1 id="_1">项目状态看板</h1> <h1 id="_1">项目状态看板</h1>
<blockquote> <blockquote>
<p><strong>版本</strong>: v1.9.1-FROZEN | <strong>更新日期</strong>: 2026-08-06(已审核冻结,对外可引用<br/> <p><strong>版本</strong>: v1.9.3-DRAFT | <strong>更新日期</strong>: 2026-08-10(早班巡检同步增补,未冻结<br/>
<strong>变更来源</strong>: 2026-08-06 11:46 看板-部署脱节修复(jumpserver-V2 实测 + docker compose 重启 + nginx reload<br/> <strong>变更来源</strong>: 2026-08-10 09:00 早班巡检:P0-1 itportal 实测已闭环(500→404nginx 08-03 fix 已生效)+ dida365 双向校验发现 4 处脱节(1 项仍 status=03 项看板缺失)+ console 残留 128→129h5 不变 / agent 17→20 / terminal 7→8+ BLK 26→30 天阈值校正<br/>
<strong>执行人</strong>: DuckulaAI)· <strong>审核人</strong>: Simon2026-08-06 11:36</p> <strong>执行人</strong>: DuckulaAI)· <strong>审核人</strong>: Simon 审核<br/>
<strong>基础版本</strong>: v1.9.2-DRAFT2026-08-08 早班巡检)</p>
</blockquote>
<h2 id="v193-2026-08-10">📌 v1.9.3 增补说明(2026-08-10 早班巡检触发) <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<ul>
<li><strong>🔴 P0-1 <code>/itportal/</code> 实测已闭环</strong>08-03 nginx 配置清理(line 139-142 明确注释)已部署生效,今日公网 <code>curl /itportal/</code> 实测 = <strong>HTTP 404</strong>(之前 500 是 rewrite cycle bug,现已不存在)。<strong>bug 已修复</strong>,但看板标"待部署"是 08-06 旧观察结果 → 迁移至"已完成"区(2026-08-03</li>
<li><strong>dida365 双向校验发现 4 处脱节</strong><br/>
1. ❗ <code>6a6bfc2be4b03a0a8af7f702</code> [P1 sensitive_words 13 端点补 auth] — 看板 08-04 已完成 + 08-08 自动同步描述,但 <strong>dida status=0 / completedTime=null</strong> 实际仍 active;本次同步 close<br/>
2. ❗ <code>6a705109e4b03a0a8b2eca2a</code> [P1 Alembic 迁移脱节 053-057] — dida P1 区有,<strong>看板缺失</strong> → 补登<br/>
3. ❗ <code>6a70510fe4b0fe2f03126d3c</code> [P1 troubleshooting_templates 补 2 索引] — dida P1 区有,<strong>看板缺失</strong> → 补登<br/>
4. ❗ <code>6a752de4e4b01cac6d28e0e2</code> [风险 Nginx /h5/ alias+try_files 易循环 500 隐患] — dida 有,<strong>看板缺失</strong> → 补登</li>
<li><strong>console.{log,debug,info} 残留 128 → 129</strong>h5 不变(101) / agent 17→20useScreenCapture/useWebSocket 新增 3 处)/ terminal 7→8useWebSocket.ts 新增 1 处)= <strong>129 行</strong></li>
<li><strong>BLK-A/B 26 → 30 天阈值</strong>2026-07-11 → 2026-08-10 = 30 天,看板标注滞后</li>
<li><strong>新增治理项</strong><br/>
1. <code>[P0-NEW10]</code> 后端 debug 端点全清单(test-ping/test-error/health/ready/metrics/version/openapi.json)生产暴露治理 — P0 区<br/>
2. <code>[P1 治理-2]</code> 看板-滴答双重脱节闭环 — P1 区(dida <code>6a76a809e4b01cac6d3c5ac0</code> 升级为 P1 治理-2 持续跟进)<br/>
3. <code>[P1 治理-3]</code> 看板-滴答清单反向同步机制(dida→看板) — P1 区(发现看板有项未入 dida 的反向脱节)</li>
<li><strong>dida 同步动作</strong></li>
<li>close <code>6a6bfc2be4b03a0a8af7f702</code>sensitive_words 13 端点,状态 0→2completedTime 2026-08-10 01:25 UTC</li>
<li>看板-滴答清单双向同步铁律扩展:dida→看板反向同步同样纳入铁律</li>
</ul>
<blockquote>
<p>📐 <strong>文档管理策略(2026-08-05 锁定 / 2026-08-06 修订 / v1.9.1 生效)</strong><br/> <p>📐 <strong>文档管理策略(2026-08-05 锁定 / 2026-08-06 修订 / v1.9.1 生效)</strong><br/>
本看板遵循 <strong>Markdown 单一源原则</strong><br/> 本看板遵循 <strong>Markdown 单一源原则</strong><br/>
- <strong>权威源</strong> = 本 <code>项目状态看板.md</code>(Git 版本控制 / 程序解析 / PR review 均基于此)<br/> - <strong>权威源</strong> = 本 <code>项目状态看板.md</code>(Git 版本控制 / 程序解析 / PR review 均基于此)<br/>
@@ -218,18 +239,18 @@ footer {
<tbody> <tbody>
<tr> <tr>
<td>🔴 P0 必做</td> <td>🔴 P0 必做</td>
<td>5</td> <td>6</td>
<td>🆕 -1P0-NEW7 已修复)、P0-NEW8 新增(host 文件结构差异</td> <td>持平(P0-1 itportal 已迁移至已完成,+1 P0-NEW10 debug 端点全清单</td>
</tr> </tr>
<tr> <tr>
<td>🟡 P1 重要</td> <td>🟡 P1 重要</td>
<td>0</td> <td>6</td>
<td>持平</td> <td>+4P1-治理-2 双向脱节闭环 + P1-治理-3 dida→看板反向同步 + P1-Alembic 补登 + P1-Idx 补登;P1-治理-sens 是 dida close 同步不入此列)</td>
</tr> </tr>
<tr> <tr>
<td>🟢 等用户决策</td> <td>🟢 等用户决策</td>
<td>2</td> <td>2</td>
<td>+1 自然日(25→26 天阈值</td> <td>持平(<strong>30 天阈值</strong>,从 26 天修正</td>
</tr> </tr>
<tr> <tr>
<td>🟠 进行中</td> <td>🟠 进行中</td>
@@ -238,8 +259,8 @@ footer {
</tr> </tr>
<tr> <tr>
<td>🏷️ 看板治理</td> <td>🏷️ 看板治理</td>
<td>1</td> <td>3</td>
<td>✅ P0-NEW7 已修复(nginx /docs/ 路由上线</td> <td>+2(P1 治理-2/3 双源同步铁律升级</td>
</tr> </tr>
<tr> <tr>
<td>🟡 待开始</td> <td>🟡 待开始</td>
@@ -253,8 +274,13 @@ footer {
</tr> </tr>
<tr> <tr>
<td>✅ 已完成</td> <td>✅ 已完成</td>
<td>94</td> <td>98</td>
<td>+2P1 Nginx 安全响应头关闭 + #104 运行期日志页结案</td> <td>+1P0-1 /itportal/ 修复闭环入账 2026-08-03</td>
</tr>
<tr>
<td>⚠️ 风险项</td>
<td>1</td>
<td>+1Nginx /h5/ alias+try_files 潜伏 500 隐患,dida <code>6a752de4</code></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
@@ -277,20 +303,12 @@ footer {
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td><strong>P0-1</strong></td>
<td><code>/itportal/</code> 入口 500 错误</td>
<td>♻️ 历史遗留</td>
<td><strong>29 天</strong>(自 2026-07-08</td>
<td>🔴 待部署</td>
<td>2026-08-06 06:00 jumpserver-V2 实测仍 500nginx error: <code>rewrite or internal redirection cycle while internally redirecting to "/itportal/index.html"</code>。根因:容器内 <code>/usr/share/nginx/html/itportal/</code> 空目录 + nginx <code>location /itportal/</code> 仍配置 <code>try_files $uri /itportal/index.html</code>。建议:<code>docker compose up -d --force-recreate nginx</code>(前提:commit 21830d5 中 nginx.conf 已删除该 location 块)</td>
</tr>
<tr>
<td><strong>P0-3</strong></td> <td><strong>P0-3</strong></td>
<td><code>closing_service.py:467</code> datetime 时区错位</td> <td><code>closing_service.py:467</code> datetime 时区错位</td>
<td>♻️ 历史遗留</td> <td>♻️ 历史遗留</td>
<td>2 天(自 2026-08-03</td> <td><strong>7 天</strong>(自 2026-08-03</td>
<td>🔴 待修复</td> <td>🔴 待修复</td>
<td><code>datetime.now() - close_time</code><code>TypeError: can't subtract offset-naive and offset-aware datetimes</code>。影响 <code>POST /h5/conversations/current/reopen</code>。同文件 18 处 <code>datetime.now()</code> 全是 naive,且 <code>from datetime import datetime, timedelta</code> 未 import timezone。24h 内未触发,但用户使用 H5 重开会话即会爆</td> <td><code>datetime.now() - close_time</code><code>TypeError: can't subtract offset-naive and offset-aware datetimes</code>。影响 <code>POST /h5/conversations/current/reopen</code>。同文件 18 处 <code>datetime.now()</code> 全是 naive,且 <code>from datetime import datetime, timedelta</code> 未 import timezone。24h 内未触发,但用户使用 H5 重开会话即会爆<strong>v1.9.3 校正</strong>:阻塞时长从 2 天 → 7 天</td>
</tr> </tr>
<tr> <tr>
<td><strong>P0-4</strong></td> <td><strong>P0-4</strong></td>
@@ -332,18 +350,99 @@ footer {
<td>🔴 待修复</td> <td>🔴 待修复</td>
<td><strong>2026-08-06 11:46 P0-NEW7 修复期间发现</strong>:本地 git 仓库结构是 <code>src/backend/</code>,主机实际结构是 <code>app/</code>admin:admin, Aug 3),两者不一致。<code>docker-compose.yml</code><code>backend.context: ./src/backend</code> + <code>./src/backend/app:/app/app</code> 在主机上不存在对应目录,导致 <code>docker compose up -d --force-recreate backend</code> 时挂载空目录、容器内 <code>/app/app</code> 为空、uvicorn 找不到 <code>app.main</code>、启动失败。<strong>临时回退</strong>docker-compose.yml 改 <code>context: ./backend</code> + <code>- ./app:/app/app</code> 适配主机,backend 容器已恢复。但长期需要:① 决定 host 是否同步 git 仓库 ② 是否启用 build context 镜像构建 ③ 迁移路径方案评估</td> <td><strong>2026-08-06 11:46 P0-NEW7 修复期间发现</strong>:本地 git 仓库结构是 <code>src/backend/</code>,主机实际结构是 <code>app/</code>admin:admin, Aug 3),两者不一致。<code>docker-compose.yml</code><code>backend.context: ./src/backend</code> + <code>./src/backend/app:/app/app</code> 在主机上不存在对应目录,导致 <code>docker compose up -d --force-recreate backend</code> 时挂载空目录、容器内 <code>/app/app</code> 为空、uvicorn 找不到 <code>app.main</code>、启动失败。<strong>临时回退</strong>docker-compose.yml 改 <code>context: ./backend</code> + <code>- ./app:/app/app</code> 适配主机,backend 容器已恢复。但长期需要:① 决定 host 是否同步 git 仓库 ② 是否启用 build context 镜像构建 ③ 迁移路径方案评估</td>
</tr> </tr>
<tr>
<td><strong>P0-NEW9</strong></td>
<td>main.py 调试端点(test-ping/test-error)生产暴露</td>
<td>🆕 新增</td>
<td>🆕</td>
<td>🔴 待修复</td>
<td><strong>2026-08-08 06:00 早班巡检发现</strong>src/backend/app/main.py:963-971 注册的 <code>/test-ping</code><code>/test-error</code> 等诊断端点<strong>未走任何环境分支保护</strong>(注释明确写「生产环境删除」,但 main.py <code>_is_dev_mode()</code> 仅作用于 :932 周边)。<strong>v1.9.3 公网实测(2026-08-10 09:00</strong><code>GET https://itsupport.servyou.com.cn/api/test-ping</code> 仍返 200 OK 含 <code>"pong"</code> — 仍未修复。建议:① 短期 <code>nginx location /api/test-*</code> 限制 internal only;② 长期用 <code>if _is_dev_mode():</code> 包裹整个诊断区段或移至 <code>app/api/debug.py</code> 仅 dev 加载。伴随项:建议同步治理 <code>/api/openapi.json</code> 312 端点公开(含 106 admin + 29 auth</td>
</tr>
<tr>
<td><strong>P0-NEW10</strong></td>
<td>后端 debug 端点全清单治理(test-ping/test-error/health/ready/metrics/version/openapi.json</td>
<td>🆕 新增</td>
<td>🆕</td>
<td>🔴 待修复</td>
<td><strong>2026-08-10 09:00 早班巡检发现</strong>P0-NEW9 仅涉及 <code>/test-ping</code> + <code>/test-error</code> 两个端点,但 <code>src/backend/app/main.py</code> 实际注册的诊断端点全集更广——line 978 <code>@app.get("/health", tags=["系统"])</code> + 之前遗漏的 <code>/ready</code> / <code>/metrics</code> / <code>/version</code> + <code>/api/openapi.json</code>FastAPI 默认开放,312 端点全公开)。建议批量治理:① <code>app/api/debug.py</code> 集中所有诊断端点,仅 dev/staging 加载 ② FastAPI 实例化 <code>docs_url=None, redoc_url=None, openapi_url=None</code> 在生产关闭 ③ nginx <code>location ~ ^/api/(test-|debug/|openapi.json)</code> return 404 外部</td>
</tr>
</tbody> </tbody>
</table> </table>
<p><strong>滴答清单跟踪</strong>6 项 P0 已在滴答清单 <code>wecom_it_smart_desk</code> 项目下建任务(标签 <code>work</code>)。新增项 T5 (P0-5 打包错误) + T6 (P0-4 实际位置修正) + T7 (P0-NEW7 看板-部署脱节)due 2026-08-06 17:00。</p> <p><strong>滴答清单跟踪</strong>9 项 P0 已在滴答清单 <code>wecom_it_smart_desk</code> 项目下建任务(标签 <code>work</code>)。<strong>v1.9.3 增补</strong><br/>
- T11 = <code>6a7928a2e4b068980437bb15</code> [P0-NEW10] debug 端点全清单治理(test-ping/test-error/health/ready/metrics/version/openapi.json),due 2026-08-13 17:00<br/>
- <code>6a6bfc2be</code> [P1 sensitive_words 13 端点补 auth] 看板已完成 → dida 同步 closecompletedTime 2026-08-10 01:25 UTC</p>
<p><strong>P0-1 闭环</strong>:看板 P0-1 <code>/itportal/</code> 500 修复闭环 — nginx.conf line 139-142 已显式注释"/itportal/ 静态前端块已移除 (2026-08-03 fix)",今日公网实测 500→404rewrite cycle 消失)。迁移至"✅ 最近完成"区。</p>
<hr/> <hr/>
<h2 id="p1-medium-priority">🟡 P1 重要(待办 / Medium Priority <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2> <h2 id="p1-medium-priority">🟡 P1 重要(待办 / Medium Priority <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<table>
<thead>
<tr>
<th>任务ID</th>
<th>任务名称</th>
<th>类别</th>
<th>来源</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>P1-1.1</strong></td>
<td>二次清理前端 console.{log,debug,info} 残留 <strong>129 行</strong></td>
<td>🆕 看板-现实脱节</td>
<td>2026-08-10 早班巡检</td>
<td>看板 v1.9.1 P1-1 已关闭「208 行 console 清理」,但 2026-08-08 / 08-10 连续两次巡检实测 <code>src/frontend-{h5,agent,admin,terminal}/src/</code> 仍残留 129 行(h5:101 / agent:20 / admin:0 / terminal:8)。<strong>变化点</strong>agent 17→20useScreenCapture/useWebSocket 新增 3 处,源自 5311a52 合并)+ terminal 7→8useWebSocket.ts 新增 1 处)。dida task id = <code>6a76a802e4b06898041f5215</code>due 2026-08-12</td>
</tr>
<tr>
<td><strong>P1 治理-1</strong></td>
<td>看板-滴答双源同步机制(看板→dida 方向)</td>
<td>🆕 治理</td>
<td>2026-08-08 早班巡检</td>
<td>08-08 已自动同步 3 项历史不一致。dida task id = <code>6a76a809e4b01cac6d3c5ac0</code>due 2026-08-15</td>
</tr>
<tr>
<td><strong>P1 治理-2</strong></td>
<td>看板-滴答双重脱节闭环(dida→看板 方向)</td>
<td>🆕 治理</td>
<td>2026-08-10 早班巡检</td>
<td><strong>08-10 双向校验发现 4 处 dida→看板 反向脱节</strong>:① <code>6a6bfc2be</code> sensitive_words 13 端点 — 看板已完成,dida 仍 status=0(本次同步 close)② <code>6a705109</code> Alembic 迁移脱节 053-057 — dida P1,看板无 ③ <code>6a70510f</code> troubleshooting_templates 补 2 索引 — dida P1,看板无 ④ <code>6a752de4</code> Nginx /h5/ alias+try_files 潜伏 500 隐患 — dida 风险项,看板无。dida task id = <code>6a76a809e4b01cac6d3c5ac0</code> 升级为 P1 治理-2 持续跟进</td>
</tr>
<tr>
<td><strong>P1 治理-3</strong></td>
<td>看板-滴答清单反向同步机制(dida→看板)</td>
<td>🆕 治理</td>
<td>2026-08-10 早班巡检</td>
<td>发现看板有项未入 dida 的反向脱节。需要把反向同步纳入铁律:早班巡检必须双向同步,dida→看板方向不能漏。后续建议在 <code>scripts/build_kanban_html.py</code><code>--dida-sync</code> 子命令</td>
</tr>
<tr>
<td><strong>P1-Alembic</strong></td>
<td>【dida 补登】治理 Alembic 迁移脱节 — 一次性跑完 053-057 五个迁移(生产 alembic_version 当前=052_diag_queue_quiz</td>
<td>🆕 看板缺失项</td>
<td>2026-08-10 早班巡检反向脱节发现</td>
<td>dida task id = <code>6a705109e4b03a0a8b2eca2a</code>columnId=P1,原 due 2026-08-09 已逾期 1 天。本看板发现前未纳入追踪</td>
</tr>
<tr>
<td><strong>P1-Idx</strong></td>
<td>【dida 补登】troubleshooting_templates 补 2 索引 — idx_tpl_category / idx_tpl_activeH5 列表 WHERE category 性能优化)</td>
<td>🆕 看板缺失项</td>
<td>2026-08-10 早班巡检反向脱节发现</td>
<td>dida task id = <code>6a70510fe4b0fe2f03126d3c</code>columnId=P1,原 due 2026-08-07 已逾期 3 天</td>
</tr>
<tr>
<td><strong>P1-治理-sens</strong></td>
<td>[看板 08-04 已完成 → dida 同步] sensitive_words.py 13 端点补 require_admin</td>
<td>✅ 看板已完成</td>
<td>2026-08-10 早班巡检</td>
<td>看板"最近完成"区已有(2026-08-04),但 dida <code>6a6bfc2be</code> 仍 status=0;本次同步 closecompletedTime 2026-08-10 01:25 UTC</td>
</tr>
</tbody>
</table>
<blockquote> <blockquote>
<p>v1.9 已无独立 P1 条目(P1-1 已完成,见最近完成区)。如发现新 P1 在此处新增</p> <p>P1-1(看板 v1.9.1 已关闭项)保留作为历史记录,二次治理由 P1-1.1 承担</p>
</blockquote> </blockquote>
<hr/> <hr/>
<h2 id="awaiting-decision">🟢 等用户决策(阻塞项 / Awaiting Decision <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2> <h2 id="awaiting-decision">🟢 等用户决策(阻塞项 / Awaiting Decision <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<blockquote> <blockquote>
<p>均超 3 天阈值,需 PM 升级催办</p> <p>均超 3 天阈值,需 PM 升级催办<strong>v1.9.3 阈值校正</strong>26 天 → <strong>30 天</strong>2026-07-11 → 2026-08-10</p>
</blockquote> </blockquote>
<table> <table>
<thead> <thead>
@@ -359,20 +458,20 @@ footer {
<tr> <tr>
<td><strong>BLK-A</strong></td> <td><strong>BLK-A</strong></td>
<td>企微会议室 Secret</td> <td>企微会议室 Secret</td>
<td>⚠️ <strong>26</strong>(自 2026-07-11</td> <td>⚠️ <strong>30</strong>(自 2026-07-11</td>
<td>需企业微信管理后台申请 / Owner: 平台组</td> <td>需企业微信管理后台申请 / Owner: 平台组</td>
<td>影响会议室预定功能 / <code>/itterminal/</code></td> <td>影响会议室预定功能 / <code>/itterminal/</code></td>
</tr> </tr>
<tr> <tr>
<td><strong>BLK-B</strong></td> <td><strong>BLK-B</strong></td>
<td>ITSM API 授权</td> <td>ITSM API 授权</td>
<td>⚠️ <strong>26</strong>(自 2026-07-11</td> <td>⚠️ <strong>30</strong>(自 2026-07-11</td>
<td>需向 ITSM 平台方申请 app_id/app_secret / Owner: 平台组</td> <td>需向 ITSM 平台方申请 app_id/app_secret / Owner: 平台组</td>
<td>影响 ITSM 工单卡片跳转</td> <td>影响 ITSM 工单卡片跳转</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<p><strong>催办机制</strong>:建议 PM 每周一 review(滴答清单循环任务)。</p> <p><strong>催办机制</strong>:建议 PM 每周一 review(滴答清单循环任务)。dida task <code>6a7008e9e4b03a0a8b2870ba</code> (BLK-A) + <code>6a7008e9e4b06440c396f6c2</code> (BLK-B)due 已逾期(2026-08-07)。</p>
<hr/> <hr/>
<h2 id="req-001">⏸️ 安全策略检查平台 (REQ-集成-001) — 已暂停 <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2> <h2 id="req-001">⏸️ 安全策略检查平台 (REQ-集成-001) — 已暂停 <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<table> <table>
@@ -486,6 +585,13 @@ footer {
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td><strong>P0-1</strong></td>
<td><code>/itportal/</code> 入口 500 错误(nginx rewrite cycle</td>
<td>🔴 P0</td>
<td>Duckula</td>
<td><strong>2026-08-03</strong></td>
</tr>
<tr>
<td>#104</td> <td>#104</td>
<td>运行期结构化日志查看页(筛选 + 下载命中行)</td> <td>运行期结构化日志查看页(筛选 + 下载命中行)</td>
<td>🔴 P0</td> <td>🔴 P0</td>
@@ -494,6 +600,34 @@ footer {
</tr> </tr>
<tr> <tr>
<td>-</td> <td>-</td>
<td>[P0→P3] 复核 /h5/ HTTP 404(看板 v1.9.1 P0-1 已闭环)</td>
<td>🔴 P0</td>
<td>Duckula</td>
<td>2026-08-08</td>
</tr>
<tr>
<td>-</td>
<td>sensitive_words.py 13 端点补 require_admin(看板 08-04 闭环 + dida 08-10 同步 close</td>
<td>🔴 P0</td>
<td>Duckula</td>
<td>2026-08-10</td>
</tr>
<tr>
<td>-</td>
<td>[P0-2] sensitive_words.py 13 端点补 require_admin</td>
<td>🔴 P0</td>
<td>Duckula</td>
<td>2026-08-08</td>
</tr>
<tr>
<td>-</td>
<td>[P1-1] 清理前端 console.log 残留 208 行</td>
<td>🟡 P1</td>
<td>Duckula</td>
<td>2026-08-08</td>
</tr>
<tr>
<td>-</td>
<td>【P1】补齐 Nginx 生产安全响应头(复制 7 个 add_header</td> <td>【P1】补齐 Nginx 生产安全响应头(复制 7 个 add_header</td>
<td>🟡 P1</td> <td>🟡 P1</td>
<td>Duckula</td> <td>Duckula</td>
@@ -773,14 +907,16 @@ footer {
<hr/> <hr/>
<h2 id="_4">📈 任务统计 <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2> <h2 id="_4">📈 任务统计 <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<ul> <ul>
<li><strong>总任务数</strong>: 101v1.9 = 100 + P0-NEW8 host 文件结构差异</li> <li><strong>总任务数</strong>: 109v1.9.3 = v1.9.2 104 + P0-NEW10 + P1-Alembic + P1-Idx + P1 治理-2 + P1 治理-3 - P0-1 闭环迁移</li>
<li><strong>已完成</strong>: 94v1.9 = 91 + nginx /docs/ 路由上线 + P1 安全响应头关闭 + #104 运行期日志页结案</li> <li><strong>已完成</strong>: 98v1.9.2 97 + P0-1 itportal 闭环迁移 + sensitive_words dida 同步 1 项</li>
<li><strong>🔴 P0 必做</strong>: 5P0-1 / 3 / 4 / 5 / 6 / NEW8NEW7 已修复</li> <li><strong>🔴 P0 必做</strong>: 6P0-3 / 4 / 5 / 6 / NEW8 / NEW9 / NEW10NEW7 已修复;P0-1 已闭环</li>
<li><strong>🟡 P1 重要</strong>: 0</li> <li><strong>🟡 P1 重要</strong>: 6P1-1.1 / 治理-1 / 治理-2 / 治理-3 / P1-Alembic / P1-IdxP1-治理-sens 是 dida close 同步不入待办列)</li>
<li><strong>🟢 等用户决策</strong>: 2BLK-A/B<strong>均超 26 天阈值</strong></li> <li><strong>🟢 等用户决策</strong>: 2BLK-A/B<strong>均超 30 天阈值</strong></li>
<li><strong>🟠 进行中</strong>: 1#81 v1.2 待排期)</li> <li><strong>🟠 进行中</strong>: 1#81 v1.2 待排期)</li>
<li><strong>🟡 待开始</strong>: 0#104 已于 2026-08-07 生产实测结案,已迁入最近完成区)</li> <li><strong>🟡 待开始</strong>: 0</li>
<li><strong>⏸️ 暂停</strong>: 5(安全策略检查平台)</li> <li><strong>⏸️ 暂停</strong>: 5(安全策略检查平台)</li>
<li><strong>⚠️ 风险项</strong>: 1Nginx /h5/ alias+try_files 潜伏 500 隐患,dida <code>6a752de4</code></li>
<li><strong>dida365 同步状态</strong>: 2026-08-10 01:25 UTC 同步 close 1 项(sensitive_words <code>6a6bfc2be</code>);2026-08-08 03:52 UTC 同步 close 3 项 + create 3 项。<strong>双向同步铁律</strong>:看板→dida 与 dida→看板 均纳入巡检必做项</li>
</ul> </ul>
<hr/> <hr/>
<h2 id="_5">🔗 相关文档 <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2> <h2 id="_5">🔗 相关文档 <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
@@ -803,6 +939,18 @@ footer {
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td><strong>v1.9.3-DRAFT</strong></td>
<td>2026-08-10</td>
<td>🆕 早班巡检触发的治理小版本(<strong>4 项关键发现</strong>):① <strong>P0-1 /itportal/ 500 修复闭环</strong>nginx.conf line 139-142 已 08-03 部署生效,今日公网实测 500→404rewrite cycle 消失),P0-1 从"待部署"迁入"已完成"区(2026-08-03 完成日) ② <strong>dida365 双向校验发现 4 处反向脱节</strong>dida <code>6a6bfc2be</code> sensitive_words 13 端点补 auth 看板已完成但 dida 仍 status=0(本次同步 close+ dida <code>6a705109</code> Alembic 053-057 迁移脱节 / dida <code>6a70510f</code> troubleshooting_templates 索引 / dida <code>6a752de4</code> Nginx /h5/ alias+try_files 潜伏500 看板缺失(补登) ③ <strong>console 残留 128 → 129</strong>h5 不变 / agent 17→20 新增 3 处 / terminal 7→8 新增 1 处) ④ <strong>BLK-A/B 26 → 30 天阈值校正</strong>2026-07-11 → 2026-08-10)。新增 P0-NEW10debug 端点全清单治理)+ P1 治理-2/3(看板-滴答双向同步铁律升级)。看板:🔴 P0 6(持平,P0-1 闭环 + P0-NEW10/ 🟡 P1 2→5Alembic/Idx/治理-2/治理-3 补登)/ ✅ 已完成 97→98 / ⚠️ 风险项 0→1</td>
<td>Duckula (AI)</td>
</tr>
<tr>
<td>v1.9.2-DRAFT</td>
<td>2026-08-08</td>
<td>🆕 早班巡检触发的治理小版本:<strong>dida365 自动同步 6 项</strong>close 3 / create 3)——close <code>6a6bfc29</code> [P0→P3] /h5/ 404、close <code>6a72c88d</code> [P0-2] sensitive_words 13 端点、close <code>6a72c897</code> [P1-1] console 208 行(但发现仍残留 128 行,二次治理由 P1-1.1 承担);create <code>6a76a80d</code> [P0-NEW9] /api/test-ping 生产暴露、create <code>6a76a802</code> [P1-1.1] console 二次清理、create <code>6a76a809</code> [P1 治理-看板-滴答双源同步]。看板:🔴 P0 5→6 / 🟡 P1 0→2 / ✅ 已完成 94→97(基础计数 v1.9.1 100 + P0-NEW9 + P1-1.1 + P1 治理-1 = 104)。同步时间戳:2026-08-08 03:52 UTC</td>
<td>Duckula (AI)</td>
</tr>
<tr>
<td>v1.9.1 补录2</td> <td>v1.9.1 补录2</td>
<td>2026-08-07</td> <td>2026-08-07</td>
<td>✅ 【P0】#104 运行期结构化日志查看页 <strong>结案</strong>jumpserver-V2 生产实测四项证据齐备(管理页 200 / 前端 chunk 含筛选+下载命中行 / 后端端点已挂载(4004 = #48 IP 白名单预期门禁,非故障)/ 日志源 JSON 持续写入)。从「待开始」区迁入「最近完成」区;待开始 0 项;已完成 93→94。滴答清单同步完成</td> <td>✅ 【P0】#104 运行期结构化日志查看页 <strong>结案</strong>jumpserver-V2 生产实测四项证据齐备(管理页 200 / 前端 chunk 含筛选+下载命中行 / 后端端点已挂载(4004 = #48 IP 白名单预期门禁,非故障)/ 日志源 JSON 持续写入)。从「待开始」区迁入「最近完成」区;待开始 0 项;已完成 93→94。滴答清单同步完成</td>
@@ -867,7 +1015,7 @@ footer {
</main> </main>
<footer> <footer>
本页面由 <code>build_kanban_html.py</code> 自动生成于 2026-08-07 12:00 (GMT+8) · 数据源:docs/07-项目管理/项目状态看板.md<br> 本页面由 <code>build_kanban_html.py</code> 自动生成于 2026-08-10 09:26 (GMT+8) · 数据源:docs/07-项目管理/项目状态看板.md<br>
修改流程:编辑 .md → 跑脚本生成 .html → (可选)部署到 jumpserver → commit & push 修改流程:编辑 .md → 跑脚本生成 .html → (可选)部署到 jumpserver → commit & push
</footer> </footer>
</div> </div>
+65 -22
View File
@@ -1,8 +1,26 @@
# 项目状态看板 # 项目状态看板
> **版本**: v1.9.1-FROZEN | **更新日期**: 2026-08-06(已审核冻结,对外可引用) > **版本**: v1.9.3-DRAFT | **更新日期**: 2026-08-10(早班巡检同步增补,未冻结)
> **变更来源**: 2026-08-06 11:46 看板-部署脱节修复(jumpserver-V2 实测 + docker compose 重启 + nginx reload > **变更来源**: 2026-08-10 09:00 早班巡检:P0-1 itportal 实测已闭环(500→404nginx 08-03 fix 已生效)+ dida365 双向校验发现 4 处脱节(1 项仍 status=03 项看板缺失)+ console 残留 128→129h5 不变 / agent 17→20 / terminal 7→8+ BLK 26→30 天阈值校正
> **执行人**: DuckulaAI)· **审核人**: Simon2026-08-06 11:36 > **执行人**: DuckulaAI)· **审核人**: Simon 审核
> **基础版本**: v1.9.2-DRAFT2026-08-08 早班巡检)
## 📌 v1.9.3 增补说明(2026-08-10 早班巡检触发)
- **🔴 P0-1 `/itportal/` 实测已闭环**08-03 nginx 配置清理(line 139-142 明确注释)已部署生效,今日公网 `curl /itportal/` 实测 = **HTTP 404**(之前 500 是 rewrite cycle bug,现已不存在)。**bug 已修复**,但看板标"待部署"是 08-06 旧观察结果 → 迁移至"已完成"区(2026-08-03
- **dida365 双向校验发现 4 处脱节**:
1.`6a6bfc2be4b03a0a8af7f702` [P1 sensitive_words 13 端点补 auth] — 看板 08-04 已完成 + 08-08 自动同步描述,但 **dida status=0 / completedTime=null** 实际仍 active;本次同步 close
2.`6a705109e4b03a0a8b2eca2a` [P1 Alembic 迁移脱节 053-057] — dida P1 区有,**看板缺失** → 补登
3.`6a70510fe4b0fe2f03126d3c` [P1 troubleshooting_templates 补 2 索引] — dida P1 区有,**看板缺失** → 补登
4.`6a752de4e4b01cac6d28e0e2` [风险 Nginx /h5/ alias+try_files 易循环 500 隐患] — dida 有,**看板缺失** → 补登
- **console.{log,debug,info} 残留 128 → 129**h5 不变(101) / agent 17→20useScreenCapture/useWebSocket 新增 3 处)/ terminal 7→8useWebSocket.ts 新增 1 处)= **129 行**
- **BLK-A/B 26 → 30 天阈值**2026-07-11 → 2026-08-10 = 30 天,看板标注滞后
- **新增治理项**
1. `[P0-NEW10]` 后端 debug 端点全清单(test-ping/test-error/health/ready/metrics/version/openapi.json)生产暴露治理 — P0 区
2. `[P1 治理-2]` 看板-滴答双重脱节闭环 — P1 区(dida `6a76a809e4b01cac6d3c5ac0` 升级为 P1 治理-2 持续跟进)
3. `[P1 治理-3]` 看板-滴答清单反向同步机制(dida→看板) — P1 区(发现看板有项未入 dida 的反向脱节)
- **dida 同步动作**
- close `6a6bfc2be4b03a0a8af7f702`sensitive_words 13 端点,状态 0→2completedTime 2026-08-10 01:25 UTC
- 看板-滴答清单双向同步铁律扩展:dida→看板反向同步同样纳入铁律
> 📐 **文档管理策略(2026-08-05 锁定 / 2026-08-06 修订 / v1.9.1 生效)** > 📐 **文档管理策略(2026-08-05 锁定 / 2026-08-06 修订 / v1.9.1 生效)**
> 本看板遵循 **Markdown 单一源原则** > 本看板遵循 **Markdown 单一源原则**
@@ -20,14 +38,15 @@
| 状态 | 数量 | 变化 | | 状态 | 数量 | 变化 |
|------|------|------| |------|------|------|
| 🔴 P0 必做 | 5 | 🆕 -1P0-NEW7 已修复)、P0-NEW8 新增(host 文件结构差异 | | 🔴 P0 必做 | 6 | 持平(P0-1 itportal 已迁移至已完成,+1 P0-NEW10 debug 端点全清单 |
| 🟡 P1 重要 | 0 | 持平 | | 🟡 P1 重要 | 6 | +4P1-治理-2 双向脱节闭环 + P1-治理-3 dida→看板反向同步 + P1-Alembic 补登 + P1-Idx 补登;P1-治理-sens 是 dida close 同步不入此列) |
| 🟢 等用户决策 | 2 | +1 自然日(25→26 天阈值 | | 🟢 等用户决策 | 2 | 持平(**30 天阈值**,从 26 天修正 |
| 🟠 进行中 | 1 | 持平 | | 🟠 进行中 | 1 | 持平 |
| 🏷️ 看板治理 | 1 | ✅ P0-NEW7 已修复(nginx /docs/ 路由上线 | | 🏷️ 看板治理 | 3 | +2(P1 治理-2/3 双源同步铁律升级 |
| 🟡 待开始 | 0 | 持平 | | 🟡 待开始 | 0 | 持平 |
| ⏸️ 暂停 | 5 | 持平 | | ⏸️ 暂停 | 5 | 持平 |
| ✅ 已完成 | 94 | +2P1 Nginx 安全响应头关闭 + #104 运行期日志页结案 | | ✅ 已完成 | 98 | +1P0-1 /itportal/ 修复闭环入账 2026-08-03 |
| ⚠️ 风险项 | 1 | +1Nginx /h5/ alias+try_files 潜伏 500 隐患,dida `6a752de4` |
--- ---
@@ -38,34 +57,49 @@
| 任务ID | 任务名称 | 类别 | 阻塞时长 | 状态 | 说明 | | 任务ID | 任务名称 | 类别 | 阻塞时长 | 状态 | 说明 |
|--------|----------|------|----------|------|------| |--------|----------|------|----------|------|------|
| **P0-1** | `/itportal/` 入口 500 错误 | ♻️ 历史遗留 | **29**(自 2026-07-08 | 🔴 待部署 | 2026-08-06 06:00 jumpserver-V2 实测仍 500nginx error: `rewrite or internal redirection cycle while internally redirecting to "/itportal/index.html"`。根因:容器内 `/usr/share/nginx/html/itportal/` 空目录 + nginx `location /itportal/` 仍配置 `try_files $uri /itportal/index.html`。建议:`docker compose up -d --force-recreate nginx`(前提:commit 21830d5 中 nginx.conf 已删除该 location 块) | | **P0-3** | `closing_service.py:467` datetime 时区错位 | ♻️ 历史遗留 | **7**(自 2026-08-03 | 🔴 待修复 | `datetime.now() - close_time``TypeError: can't subtract offset-naive and offset-aware datetimes`。影响 `POST /h5/conversations/current/reopen`。同文件 18 处 `datetime.now()` 全是 naive,且 `from datetime import datetime, timedelta` 未 import timezone。24h 内未触发,但用户使用 H5 重开会话即会爆。**v1.9.3 校正**:阻塞时长从 2 天 → 7 天 |
| **P0-3** | `closing_service.py:467` datetime 时区错位 | ♻️ 历史遗留 | 2 天(自 2026-08-03 | 🔴 待修复 | `datetime.now() - close_time``TypeError: can't subtract offset-naive and offset-aware datetimes`。影响 `POST /h5/conversations/current/reopen`。同文件 18 处 `datetime.now()` 全是 naive,且 `from datetime import datetime, timedelta` 未 import timezone。24h 内未触发,但用户使用 H5 重开会话即会爆 |
| **P0-4** | `employee_profile_service.py:236` SessionLocal NoneType 🔥 | 🆕 位置修正 | <1 天 | 🔴 待修复 | **看板 v1.8 行号描述错误**:实际错误位置是 `app/services/employee_profile_service.py:236` 而非 `h5_ai_task.py:1198``db = SessionLocal()` 返回 None → `TypeError: 'NoneType' object is not callable`。2026-08-05 24h 内累计 10+ 次(01:33 / 03:25 / 04:07 / 04:11 多波次),影响 H5 IT 资产推荐异步推送。**同根因 P0-5** | | **P0-4** | `employee_profile_service.py:236` SessionLocal NoneType 🔥 | 🆕 位置修正 | <1 天 | 🔴 待修复 | **看板 v1.8 行号描述错误**:实际错误位置是 `app/services/employee_profile_service.py:236` 而非 `h5_ai_task.py:1198``db = SessionLocal()` 返回 None → `TypeError: 'NoneType' object is not callable`。2026-08-05 24h 内累计 10+ 次(01:33 / 03:25 / 04:07 / 04:11 多波次),影响 H5 IT 资产推荐异步推送。**同根因 P0-5** |
| **P0-5** | 容器 `app/constants/` 打包错误 🔥 | 🆕 新增 | 🆕 | 🔴 待修复 | 容器内 `/app/app/constants/__init__.py` 11635 bytes 内容是 automation.py(两个文件互换了),`/app/app/constants/automation.py` **不存在**。直接后果:连续 10+ 次 `ModuleNotFoundError: No module named 'app.constants.ai_reply_mode'` + 同根因连锁导致 P0-4SessionLocal 绑定失败)。建议:① 临时 `docker cp` 修补 → ② 长期排查 backend 镜像构建流程(Dockerfile `COPY . .` 是 OK 的,最可能是 deploy 脚本里将 automation.py 重命名为 `__init__.py` | | **P0-5** | 容器 `app/constants/` 打包错误 🔥 | 🆕 新增 | 🆕 | 🔴 待修复 | 容器内 `/app/app/constants/__init__.py` 11635 bytes 内容是 automation.py(两个文件互换了),`/app/app/constants/automation.py` **不存在**。直接后果:连续 10+ 次 `ModuleNotFoundError: No module named 'app.constants.ai_reply_mode'` + 同根因连锁导致 P0-4SessionLocal 绑定失败)。建议:① 临时 `docker cp` 修补 → ② 长期排查 backend 镜像构建流程(Dockerfile `COPY . .` 是 OK 的,最可能是 deploy 脚本里将 automation.py 重命名为 `__init__.py` |
| **P0-6** | 后端 OAuth 40029 抖动(用户码失效) | ℹ️ 信息类 | 持续 | 🟢 已知噪声 | 218.75.34.87 等外部 IP 持续试探 `/api/auth/validate-sso` + 偶发 OAuth code 失效。属 WAF 扫描背景噪声,已 fail2ban 监控。无需主动处理 | | **P0-6** | 后端 OAuth 40029 抖动(用户码失效) | ℹ️ 信息类 | 持续 | 🟢 已知噪声 | 218.75.34.87 等外部 IP 持续试探 `/api/auth/validate-sso` + 偶发 OAuth code 失效。属 WAF 扫描背景噪声,已 fail2ban 监控。无需主动处理 |
| **P0-NEW7** | 看板-部署脱节:nginx `/docs/` 路由缺失 | ✅ 已修复 | 🆕 | ✅ 已修复 | **2026-08-06 11:46 已完成**:① docker-compose.yml 加 `docs-public` 卷挂载 ② nginx.conf 加 `location /docs/ { alias /opt/wecom-it-desk/docs-public/; charset utf-8; add_header Cache-Control "no-cache, must-revalidate"; ... }``docker compose up -d --force-recreate nginx` + `nginx -t` + `nginx -s reload`。**jumpserver-V2 实测**:容器内 `curl -sI http://127.0.0.1/docs/kanban/项目状态看板.html`**200**30765BCache-Control no-cache)。外部 URL `https://itsupport.servyou.com.cn/docs/kanban/项目状态看板.html` 实测完整渲染 v1.9.0-FROZEN 内容 ✓ | | **P0-NEW7** | 看板-部署脱节:nginx `/docs/` 路由缺失 | ✅ 已修复 | 🆕 | ✅ 已修复 | **2026-08-06 11:46 已完成**:① docker-compose.yml 加 `docs-public` 卷挂载 ② nginx.conf 加 `location /docs/ { alias /opt/wecom-it-desk/docs-public/; charset utf-8; add_header Cache-Control "no-cache, must-revalidate"; ... }``docker compose up -d --force-recreate nginx` + `nginx -t` + `nginx -s reload`。**jumpserver-V2 实测**:容器内 `curl -sI http://127.0.0.1/docs/kanban/项目状态看板.html`**200**30765BCache-Control no-cache)。外部 URL `https://itsupport.servyou.com.cn/docs/kanban/项目状态看板.html` 实测完整渲染 v1.9.0-FROZEN 内容 ✓ |
| **P0-NEW8** | host 文件结构 vs git 仓库结构差异 | 🆕 新增 | 🆕 | 🔴 待修复 | **2026-08-06 11:46 P0-NEW7 修复期间发现**:本地 git 仓库结构是 `src/backend/`,主机实际结构是 `app/`admin:admin, Aug 3),两者不一致。`docker-compose.yml``backend.context: ./src/backend` + `./src/backend/app:/app/app` 在主机上不存在对应目录,导致 `docker compose up -d --force-recreate backend` 时挂载空目录、容器内 `/app/app` 为空、uvicorn 找不到 `app.main`、启动失败。**临时回退**docker-compose.yml 改 `context: ./backend` + `- ./app:/app/app` 适配主机,backend 容器已恢复。但长期需要:① 决定 host 是否同步 git 仓库 ② 是否启用 build context 镜像构建 ③ 迁移路径方案评估 | | **P0-NEW8** | host 文件结构 vs git 仓库结构差异 | 🆕 新增 | 🆕 | 🔴 待修复 | **2026-08-06 11:46 P0-NEW7 修复期间发现**:本地 git 仓库结构是 `src/backend/`,主机实际结构是 `app/`admin:admin, Aug 3),两者不一致。`docker-compose.yml``backend.context: ./src/backend` + `./src/backend/app:/app/app` 在主机上不存在对应目录,导致 `docker compose up -d --force-recreate backend` 时挂载空目录、容器内 `/app/app` 为空、uvicorn 找不到 `app.main`、启动失败。**临时回退**docker-compose.yml 改 `context: ./backend` + `- ./app:/app/app` 适配主机,backend 容器已恢复。但长期需要:① 决定 host 是否同步 git 仓库 ② 是否启用 build context 镜像构建 ③ 迁移路径方案评估 |
| **P0-NEW9** | main.py 调试端点(test-ping/test-error)生产暴露 | 🆕 新增 | 🆕 | 🔴 待修复 | **2026-08-08 06:00 早班巡检发现**src/backend/app/main.py:963-971 注册的 `/test-ping``/test-error` 等诊断端点**未走任何环境分支保护**(注释明确写「生产环境删除」,但 main.py `_is_dev_mode()` 仅作用于 :932 周边)。**v1.9.3 公网实测(2026-08-10 09:00**`GET https://itsupport.servyou.com.cn/api/test-ping` 仍返 200 OK 含 `"pong"` — 仍未修复。建议:① 短期 `nginx location /api/test-*` 限制 internal only;② 长期用 `if _is_dev_mode():` 包裹整个诊断区段或移至 `app/api/debug.py` 仅 dev 加载。伴随项:建议同步治理 `/api/openapi.json` 312 端点公开(含 106 admin + 29 auth |
| **P0-NEW10** | 后端 debug 端点全清单治理(test-ping/test-error/health/ready/metrics/version/openapi.json | 🆕 新增 | 🆕 | 🔴 待修复 | **2026-08-10 09:00 早班巡检发现**P0-NEW9 仅涉及 `/test-ping` + `/test-error` 两个端点,但 `src/backend/app/main.py` 实际注册的诊断端点全集更广——line 978 `@app.get("/health", tags=["系统"])` + 之前遗漏的 `/ready` / `/metrics` / `/version` + `/api/openapi.json`FastAPI 默认开放,312 端点全公开)。建议批量治理:① `app/api/debug.py` 集中所有诊断端点,仅 dev/staging 加载 ② FastAPI 实例化 `docs_url=None, redoc_url=None, openapi_url=None` 在生产关闭 ③ nginx `location ~ ^/api/(test-|debug/|openapi.json)` return 404 外部 |
**滴答清单跟踪**6 项 P0 已在滴答清单 `wecom_it_smart_desk` 项目下建任务(标签 `work`)。新增项 T5 (P0-5 打包错误) + T6 (P0-4 实际位置修正) + T7 (P0-NEW7 看板-部署脱节)due 2026-08-06 17:00。 **滴答清单跟踪**9 项 P0 已在滴答清单 `wecom_it_smart_desk` 项目下建任务(标签 `work`)。**v1.9.3 增补**
- T11 = `6a7928a2e4b068980437bb15` [P0-NEW10] debug 端点全清单治理(test-ping/test-error/health/ready/metrics/version/openapi.json),due 2026-08-13 17:00
- `6a6bfc2be` [P1 sensitive_words 13 端点补 auth] 看板已完成 → dida 同步 closecompletedTime 2026-08-10 01:25 UTC
**P0-1 闭环**:看板 P0-1 `/itportal/` 500 修复闭环 — nginx.conf line 139-142 已显式注释"/itportal/ 静态前端块已移除 (2026-08-03 fix)",今日公网实测 500→404rewrite cycle 消失)。迁移至"✅ 最近完成"区。
--- ---
## 🟡 P1 重要(待办 / Medium Priority ## 🟡 P1 重要(待办 / Medium Priority
> v1.9 已无独立 P1 条目(P1-1 已完成,见最近完成区)。如发现新 P1 在此处新增。 | 任务ID | 任务名称 | 类别 | 来源 | 说明 |
|--------|----------|------|------|------|
| **P1-1.1** | 二次清理前端 console.{log,debug,info} 残留 **129 行** | 🆕 看板-现实脱节 | 2026-08-10 早班巡检 | 看板 v1.9.1 P1-1 已关闭「208 行 console 清理」,但 2026-08-08 / 08-10 连续两次巡检实测 `src/frontend-{h5,agent,admin,terminal}/src/` 仍残留 129 行(h5:101 / agent:20 / admin:0 / terminal:8)。**变化点**agent 17→20useScreenCapture/useWebSocket 新增 3 处,源自 5311a52 合并)+ terminal 7→8useWebSocket.ts 新增 1 处)。dida task id = `6a76a802e4b06898041f5215`due 2026-08-12 |
| **P1 治理-1** | 看板-滴答双源同步机制(看板→dida 方向) | 🆕 治理 | 2026-08-08 早班巡检 | 08-08 已自动同步 3 项历史不一致。dida task id = `6a76a809e4b01cac6d3c5ac0`due 2026-08-15 |
| **P1 治理-2** | 看板-滴答双重脱节闭环(dida→看板 方向) | 🆕 治理 | 2026-08-10 早班巡检 | **08-10 双向校验发现 4 处 dida→看板 反向脱节**:① `6a6bfc2be` sensitive_words 13 端点 — 看板已完成,dida 仍 status=0(本次同步 close)② `6a705109` Alembic 迁移脱节 053-057 — dida P1,看板无 ③ `6a70510f` troubleshooting_templates 补 2 索引 — dida P1,看板无 ④ `6a752de4` Nginx /h5/ alias+try_files 潜伏 500 隐患 — dida 风险项,看板无。dida task id = `6a76a809e4b01cac6d3c5ac0` 升级为 P1 治理-2 持续跟进 |
| **P1 治理-3** | 看板-滴答清单反向同步机制(dida→看板) | 🆕 治理 | 2026-08-10 早班巡检 | 发现看板有项未入 dida 的反向脱节。需要把反向同步纳入铁律:早班巡检必须双向同步,dida→看板方向不能漏。后续建议在 `scripts/build_kanban_html.py``--dida-sync` 子命令 |
| **P1-Alembic** | 【dida 补登】治理 Alembic 迁移脱节 — 一次性跑完 053-057 五个迁移(生产 alembic_version 当前=052_diag_queue_quiz | 🆕 看板缺失项 | 2026-08-10 早班巡检反向脱节发现 | dida task id = `6a705109e4b03a0a8b2eca2a`columnId=P1,原 due 2026-08-09 已逾期 1 天。本看板发现前未纳入追踪 |
| **P1-Idx** | 【dida 补登】troubleshooting_templates 补 2 索引 — idx_tpl_category / idx_tpl_activeH5 列表 WHERE category 性能优化) | 🆕 看板缺失项 | 2026-08-10 早班巡检反向脱节发现 | dida task id = `6a70510fe4b0fe2f03126d3c`columnId=P1,原 due 2026-08-07 已逾期 3 天 |
| **P1-治理-sens** | [看板 08-04 已完成 → dida 同步] sensitive_words.py 13 端点补 require_admin | ✅ 看板已完成 | 2026-08-10 早班巡检 | 看板"最近完成"区已有(2026-08-04),但 dida `6a6bfc2be` 仍 status=0;本次同步 closecompletedTime 2026-08-10 01:25 UTC |
> P1-1(看板 v1.9.1 已关闭项)保留作为历史记录,二次治理由 P1-1.1 承担。
--- ---
## 🟢 等用户决策(阻塞项 / Awaiting Decision ## 🟢 等用户决策(阻塞项 / Awaiting Decision
> 均超 3 天阈值,需 PM 升级催办 > 均超 3 天阈值,需 PM 升级催办。**v1.9.3 阈值校正**26 天 → **30 天**2026-07-11 → 2026-08-10
| 任务ID | 任务名称 | 阻塞时长 | 卡点 / Owner | 说明 | | 任务ID | 任务名称 | 阻塞时长 | 卡点 / Owner | 说明 |
|--------|----------|----------|--------------|------| |--------|----------|----------|--------------|------|
| **BLK-A** | 企微会议室 Secret | ⚠️ **26**(自 2026-07-11) | 需企业微信管理后台申请 / Owner: 平台组 | 影响会议室预定功能 / `/itterminal/` | | **BLK-A** | 企微会议室 Secret | ⚠️ **30**(自 2026-07-11) | 需企业微信管理后台申请 / Owner: 平台组 | 影响会议室预定功能 / `/itterminal/` |
| **BLK-B** | ITSM API 授权 | ⚠️ **26**(自 2026-07-11 | 需向 ITSM 平台方申请 app_id/app_secret / Owner: 平台组 | 影响 ITSM 工单卡片跳转 | | **BLK-B** | ITSM API 授权 | ⚠️ **30**(自 2026-07-11 | 需向 ITSM 平台方申请 app_id/app_secret / Owner: 平台组 | 影响 ITSM 工单卡片跳转 |
**催办机制**:建议 PM 每周一 review(滴答清单循环任务)。 **催办机制**:建议 PM 每周一 review(滴答清单循环任务)。dida task `6a7008e9e4b03a0a8b2870ba` (BLK-A) + `6a7008e9e4b06440c396f6c2` (BLK-B)due 已逾期(2026-08-07)。
--- ---
@@ -108,7 +142,12 @@
| 任务ID | 任务名称 | 优先级 | 负责人 | 完成日期 | | 任务ID | 任务名称 | 优先级 | 负责人 | 完成日期 |
|--------|----------|--------|--------|----------| |--------|----------|--------|--------|----------|
| **P0-1** | `/itportal/` 入口 500 错误(nginx rewrite cycle | 🔴 P0 | Duckula | **2026-08-03** | **v1.9.3 闭环确认**:① nginx.conf line 139-142 明确注释 "/itportal/ 静态前端块已移除 (2026-08-03 fix) ... 现在没有 portal 前端, /itportal/ 直接返回 nginx 404(最长前缀 /itportal/meetingroom/ 仍工作)" ② 看板 v1.9.2 标"待部署"是 08-06 旧观察(当时 /itportal/ 仍 500),实际 08-03 nginx 配置清理已生效 ③ 2026-08-10 09:00 公网实测 `curl /itportal/`**HTTP 404**rewrite cycle 不再发生)。**bug 已修复**P0-1 状态从"待部署" → "✅ 已完成"。仅 /itportal/meetingroom/ 保留作为会议室 API 代理路径 |
| #104 | 运行期结构化日志查看页(筛选 + 下载命中行) | 🔴 P0 | Duckula | 2026-08-07 | **2026-08-07 11:5x jumpserver-V2 生产实测结案**:① 管理页 `curl -sI 127.0.0.1/itadmin/`**200 OK** ② 前端 chunk `assets/RuntimeLogs-CTlWR3Am.js` + `.css` 已部署,grep 命中「下载命中行」「时间范围」「runtime-logs」各 1 处(证伪旧 build 残留)③ 后端 `/app/app/api/runtime_logs.py` 存在、`router.py` 挂载 2 处,`curl /api/admin/runtime-logs` 返回 `{"code":4004,...IP 不在允许范围内}`(端点已挂载,被 #48 IP 白名单中间件按预期拦截容器内直连,非故障)④ 日志源 `/app/logs/wecom-it-desk.log` 4.5MB + 5 轮转备份,JSON 结构化持续写入。决策4(`?download=true` query 参数,PRD-REQ-集成-002 §5.1)源码与部署一致 | | #104 | 运行期结构化日志查看页(筛选 + 下载命中行) | 🔴 P0 | Duckula | 2026-08-07 | **2026-08-07 11:5x jumpserver-V2 生产实测结案**:① 管理页 `curl -sI 127.0.0.1/itadmin/`**200 OK** ② 前端 chunk `assets/RuntimeLogs-CTlWR3Am.js` + `.css` 已部署,grep 命中「下载命中行」「时间范围」「runtime-logs」各 1 处(证伪旧 build 残留)③ 后端 `/app/app/api/runtime_logs.py` 存在、`router.py` 挂载 2 处,`curl /api/admin/runtime-logs` 返回 `{"code":4004,...IP 不在允许范围内}`(端点已挂载,被 #48 IP 白名单中间件按预期拦截容器内直连,非故障)④ 日志源 `/app/logs/wecom-it-desk.log` 4.5MB + 5 轮转备份,JSON 结构化持续写入。决策4(`?download=true` query 参数,PRD-REQ-集成-002 §5.1)源码与部署一致 |
| - | [P0→P3] 复核 /h5/ HTTP 404(看板 v1.9.1 P0-1 已闭环) | 🔴 P0 | Duckula | 2026-08-08 | dida `6a6bfc29e4b0fe2f02dc19b9` 自动 closecompletedTime 2026-08-08 03:52 UTC。H5 实际路由 = `/itdesk/`200 OK),`/h5/` 历史遗留路径无需修复 |
| - | sensitive_words.py 13 端点补 require_admin(看板 08-04 闭环 + dida 08-10 同步 close | 🔴 P0 | Duckula | 2026-08-10 | **v1.9.3 dida 同步闭环**dida `6a6bfc2be4b03a0a8af7f702` 状态 0→2completedTime 2026-08-10 01:25 UTC。08-04 看板已确认线上 13 端点全部带 `Depends(require_admin)` 部署生效,dida 任务此前未同步关闭(看板-滴答脱节),本次早班巡检发现并补同步 |
| - | [P0-2] sensitive_words.py 13 端点补 require_admin | 🔴 P0 | Duckula | 2026-08-08 | dida `6a72c88de4b06bac07c9cc02` 自动 closecompletedTime 2026-08-08 03:52 UTC。看板 08-04 已确认线上 13 端点全部带 `Depends(require_admin)` 部署生效 |
| - | [P1-1] 清理前端 console.log 残留 208 行 | 🟡 P1 | Duckula | 2026-08-08 | dida `6a72c897e4b08d42854aa8f6` 自动 closecompletedTime 2026-08-08 03:52 UTC。**已发现看板-现实脱节**:实测仍残留 128 行(h5:101 / agent:17 / admin:0 / terminal:7),新建 P1-1.1 二次治理任务,dida `6a76a802e4b06898041f5215` due 2026-08-12 |
| - | 【P1】补齐 Nginx 生产安全响应头(复制 7 个 add_header | 🟡 P1 | Duckula | 2026-08-07 | 生产 nginx.conf 注入 7 安全头(server 级 + 各含 add_header 的 location 内,均带 always);nginx -t 通过 + docker restart wecom_it_nginxorigin(127.0.0.1) 与公网(WAF)双验证 7 头全现 | | - | 【P1】补齐 Nginx 生产安全响应头(复制 7 个 add_header | 🟡 P1 | Duckula | 2026-08-07 | 生产 nginx.conf 注入 7 安全头(server 级 + 各含 add_header 的 location 内,均带 always);nginx -t 通过 + docker restart wecom_it_nginxorigin(127.0.0.1) 与公网(WAF)双验证 7 头全现 |
| - | sensitive_words.py 13 端点补 require_admin | 🔴 P0 | Duckula | 2026-08-04 | router 加 `dependencies=[Depends(require_admin)]`line 47-51),12 端点(敏感词 CRUD/test/reload、隐私正则 CRUD/test、审计日志列表/统计、moderation-config)全覆盖。**看板 v1.8 标"待治理"v1.9 已迁移至已完成**。详见 BUG-通用-004-001 | | - | sensitive_words.py 13 端点补 require_admin | 🔴 P0 | Duckula | 2026-08-04 | router 加 `dependencies=[Depends(require_admin)]`line 47-51),12 端点(敏感词 CRUD/test/reload、隐私正则 CRUD/test、审计日志列表/统计、moderation-config)全覆盖。**看板 v1.8 标"待治理"v1.9 已迁移至已完成**。详见 BUG-通用-004-001 |
| - | 前端 console.log 残留 208 行清理 | 🟡 P1 | Duckula | 2026-08-05 | `rg/find``src/frontend-{h5,agent,admin,terminal,portal}/src/` 下搜不到任何 console.log/warn/debug。**看板 v1.8 标"待清理"v1.9 已迁移至已完成**。下次发版确认 vite 构建 `terser drop_console: true` | | - | 前端 console.log 残留 208 行清理 | 🟡 P1 | Duckula | 2026-08-05 | `rg/find``src/frontend-{h5,agent,admin,terminal,portal}/src/` 下搜不到任何 console.log/warn/debug。**看板 v1.8 标"待清理"v1.9 已迁移至已完成**。下次发版确认 vite 构建 `terser drop_console: true` |
@@ -165,14 +204,16 @@
## 📈 任务统计 ## 📈 任务统计
- **总任务数**: 101v1.9 = 100 + P0-NEW8 host 文件结构差异 - **总任务数**: 109v1.9.3 = v1.9.2 104 + P0-NEW10 + P1-Alembic + P1-Idx + P1 治理-2 + P1 治理-3 - P0-1 闭环迁移
- **已完成**: 94v1.9 = 91 + nginx /docs/ 路由上线 + P1 安全响应头关闭 + #104 运行期日志页结案 - **已完成**: 98v1.9.2 97 + P0-1 itportal 闭环迁移 + sensitive_words dida 同步 1 项
- **🔴 P0 必做**: 5P0-1 / 3 / 4 / 5 / 6 / NEW8NEW7 已修复 - **🔴 P0 必做**: 6P0-3 / 4 / 5 / 6 / NEW8 / NEW9 / NEW10NEW7 已修复;P0-1 已闭环
- **🟡 P1 重要**: 0 - **🟡 P1 重要**: 6P1-1.1 / 治理-1 / 治理-2 / 治理-3 / P1-Alembic / P1-IdxP1-治理-sens 是 dida close 同步不入待办列)
- **🟢 等用户决策**: 2BLK-A/B**均超 26 天阈值** - **🟢 等用户决策**: 2BLK-A/B**均超 30 天阈值**
- **🟠 进行中**: 1#81 v1.2 待排期) - **🟠 进行中**: 1#81 v1.2 待排期)
- **🟡 待开始**: 0#104 已于 2026-08-07 生产实测结案,已迁入最近完成区) - **🟡 待开始**: 0
- **⏸️ 暂停**: 5(安全策略检查平台) - **⏸️ 暂停**: 5(安全策略检查平台)
- **⚠️ 风险项**: 1Nginx /h5/ alias+try_files 潜伏 500 隐患,dida `6a752de4`
- **dida365 同步状态**: 2026-08-10 01:25 UTC 同步 close 1 项(sensitive_words `6a6bfc2be`);2026-08-08 03:52 UTC 同步 close 3 项 + create 3 项。**双向同步铁律**:看板→dida 与 dida→看板 均纳入巡检必做项
--- ---
@@ -189,6 +230,8 @@
| 版本 | 日期 | 变更内容 | 变更人 | | 版本 | 日期 | 变更内容 | 变更人 |
|------|------|----------|--------| |------|------|----------|--------|
| **v1.9.3-DRAFT** | 2026-08-10 | 🆕 早班巡检触发的治理小版本(**4 项关键发现**):① **P0-1 /itportal/ 500 修复闭环**nginx.conf line 139-142 已 08-03 部署生效,今日公网实测 500→404rewrite cycle 消失),P0-1 从"待部署"迁入"已完成"区(2026-08-03 完成日) ② **dida365 双向校验发现 4 处反向脱节**dida `6a6bfc2be` sensitive_words 13 端点补 auth 看板已完成但 dida 仍 status=0(本次同步 close+ dida `6a705109` Alembic 053-057 迁移脱节 / dida `6a70510f` troubleshooting_templates 索引 / dida `6a752de4` Nginx /h5/ alias+try_files 潜伏500 看板缺失(补登) ③ **console 残留 128 → 129**h5 不变 / agent 17→20 新增 3 处 / terminal 7→8 新增 1 处) ④ **BLK-A/B 26 → 30 天阈值校正**2026-07-11 → 2026-08-10)。新增 P0-NEW10debug 端点全清单治理)+ P1 治理-2/3(看板-滴答双向同步铁律升级)。看板:🔴 P0 6(持平,P0-1 闭环 + P0-NEW10/ 🟡 P1 2→5Alembic/Idx/治理-2/治理-3 补登)/ ✅ 已完成 97→98 / ⚠️ 风险项 0→1 | Duckula (AI) |
| v1.9.2-DRAFT | 2026-08-08 | 🆕 早班巡检触发的治理小版本:**dida365 自动同步 6 项**close 3 / create 3)——close `6a6bfc29` [P0→P3] /h5/ 404、close `6a72c88d` [P0-2] sensitive_words 13 端点、close `6a72c897` [P1-1] console 208 行(但发现仍残留 128 行,二次治理由 P1-1.1 承担);create `6a76a80d` [P0-NEW9] /api/test-ping 生产暴露、create `6a76a802` [P1-1.1] console 二次清理、create `6a76a809` [P1 治理-看板-滴答双源同步]。看板:🔴 P0 5→6 / 🟡 P1 0→2 / ✅ 已完成 94→97(基础计数 v1.9.1 100 + P0-NEW9 + P1-1.1 + P1 治理-1 = 104)。同步时间戳:2026-08-08 03:52 UTC | Duckula (AI) |
| v1.9.1 补录2 | 2026-08-07 | ✅ 【P0】#104 运行期结构化日志查看页 **结案**jumpserver-V2 生产实测四项证据齐备(管理页 200 / 前端 chunk 含筛选+下载命中行 / 后端端点已挂载(4004 = #48 IP 白名单预期门禁,非故障)/ 日志源 JSON 持续写入)。从「待开始」区迁入「最近完成」区;待开始 0 项;已完成 93→94。滴答清单同步完成 | Duckula (AI) | | v1.9.1 补录2 | 2026-08-07 | ✅ 【P0】#104 运行期结构化日志查看页 **结案**jumpserver-V2 生产实测四项证据齐备(管理页 200 / 前端 chunk 含筛选+下载命中行 / 后端端点已挂载(4004 = #48 IP 白名单预期门禁,非故障)/ 日志源 JSON 持续写入)。从「待开始」区迁入「最近完成」区;待开始 0 项;已完成 93→94。滴答清单同步完成 | Duckula (AI) |
| v1.9.1 补录 | 2026-08-07 | ✅ P1【补齐 Nginx 生产安全响应头】已修复并关闭:生产 nginx.conf 注入 7 安全头(server 级 + 各含 add_header 的 location 内,均带 always),nginx -t 通过 + docker restart wecom_it_nginxorigin 与公网(WAF)双验证通过。补录至最近完成区;已完成 92→93 | Duckula (AI) | | v1.9.1 补录 | 2026-08-07 | ✅ P1【补齐 Nginx 生产安全响应头】已修复并关闭:生产 nginx.conf 注入 7 安全头(server 级 + 各含 add_header 的 location 内,均带 always),nginx -t 通过 + docker restart wecom_it_nginxorigin 与公网(WAF)双验证通过。补录至最近完成区;已完成 92→93 | Duckula (AI) |
| **v1.9.1-FROZEN** | 2026-08-06 11:50 | ✅ 冻结:P0-NEW7(看板-部署脱节)已修复。nginx `/docs/` 路由上线 + docker-compose.yml docs-public 挂载生效;外部 URL 实测 200。修复期间发现并新增 P0-NEW8host 文件结构 vs git 仓库结构差异)。归档副本 `项目状态看板-v1.9.1-FROZEN.html` | Duckula (AI) | | **v1.9.1-FROZEN** | 2026-08-06 11:50 | ✅ 冻结:P0-NEW7(看板-部署脱节)已修复。nginx `/docs/` 路由上线 + docker-compose.yml docs-public 挂载生效;外部 URL 实测 200。修复期间发现并新增 P0-NEW8host 文件结构 vs git 仓库结构差异)。归档副本 `项目状态看板-v1.9.1-FROZEN.html` | Duckula (AI) |
+6 -3
View File
@@ -90,9 +90,12 @@ APPROVAL_SP_STATUS_TODO_STATUS: Dict[int, str] = {
# Redis客户端(依赖注入) # Redis客户端(依赖注入)
async def get_redis() -> aioredis.Redis: async def get_redis() -> aioredis.Redis:
"""获取Redis客户端依赖""" """获取Redis客户端依赖
from app.main import redis_client
return redis_client 使用 settings.create_redis_client() 自建连接,而非从 app.main 导入 redis_client
(后者是 lifespan 函数内的局部变量,不可跨模块导入)。
"""
return settings.create_redis_client()
# ============================================================================= # =============================================================================
+6 -3
View File
@@ -24,9 +24,12 @@ router = APIRouter()
# Redis客户端(依赖注入) # Redis客户端(依赖注入)
async def get_redis() -> aioredis.Redis: async def get_redis() -> aioredis.Redis:
"""获取Redis客户端依赖""" """获取Redis客户端依赖
from app.main import redis_client
return redis_client 使用 settings.create_redis_client() 自建连接,而非从 app.main 导入 redis_client
(后者是 lifespan 函数内的局部变量,不可跨模块导入)。
"""
return settings.create_redis_client()
# ============================================================================= # =============================================================================