Files
wecom_it_smart_desk/docs/07-项目管理/项目状态看板.html
T

1067 lines
51 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>项目状态看板 · IT 智能服务台</title>
<style>
:root {
--accent: #07C160;
--accent-soft: #E7F8EF;
--warn: #FA9D3B;
--danger: #FA5151;
--info: #10AEFF;
--text: #1F2329;
--text-soft: #646A73;
--bg: #FFFFFF;
--bg-soft: #F7F8FA;
--border: #DEE0E3;
--shadow: 0 2px 12px rgba(0,0,0,0.06);
--radius: 8px;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; scroll-padding-top: 20px; }
body {
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif;
color: var(--text);
background: var(--bg-soft);
line-height: 1.7;
font-size: 14px;
}
.container { max-width: 1080px; margin: 0 auto; padding: 24px; }
header {
background: linear-gradient(135deg, var(--accent) 0%, #06AD56 100%);
color: #fff;
padding: 24px 28px;
border-radius: var(--radius);
box-shadow: var(--shadow);
margin-bottom: 24px;
position: relative;
}
header h1 { font-size: 24px; font-weight: 600; margin-bottom: 6px; }
header .meta { font-size: 13px; opacity: 0.92; }
header .meta span { margin-right: 18px; }
header .meta strong { font-weight: 600; }
.version-badge {
position: absolute;
top: 24px;
right: 28px;
background: rgba(255,255,255,0.25);
padding: 4px 10px;
border-radius: 12px;
font-size: 12px;
font-weight: 600;
backdrop-filter: blur(8px);
}
.version-badge.draft { background: rgba(250,157,59,0.95); }
.version-badge.frozen { background: rgba(255,255,255,0.95); color: var(--accent); }
h1, h2, h3, h4 { color: var(--text); margin: 28px 0 12px; line-height: 1.4; }
h1 { font-size: 22px; padding-bottom: 8px; border-bottom: 2px solid var(--accent); }
h2 { font-size: 18px; padding-left: 10px; border-left: 4px solid var(--accent); }
h3 { font-size: 16px; color: var(--text-soft); }
h4 { font-size: 14px; color: var(--text-soft); }
p { margin: 8px 0; }
strong { color: var(--text); }
blockquote {
background: var(--accent-soft);
border-left: 4px solid var(--accent);
padding: 10px 16px;
margin: 12px 0;
border-radius: 4px;
color: var(--text);
}
blockquote p { margin: 4px 0; }
code {
background: var(--bg-soft);
padding: 2px 6px;
border-radius: 3px;
font-family: "Cascadia Code", Consolas, monospace;
font-size: 12px;
color: #C7254E;
}
pre {
background: #1F2329;
color: #E7E8EB;
padding: 14px 18px;
border-radius: var(--radius);
overflow-x: auto;
margin: 12px 0;
}
pre code { background: transparent; color: inherit; padding: 0; font-size: 13px; }
hr { border: none; border-top: 1px solid var(--border); margin: 24px 0; }
table {
width: 100%;
border-collapse: collapse;
background: #fff;
border-radius: var(--radius);
overflow: hidden;
box-shadow: var(--shadow);
margin: 12px 0;
font-size: 13px;
}
thead { background: var(--bg-soft); }
th, td {
padding: 8px 12px;
text-align: left;
border-bottom: 1px solid var(--border);
vertical-align: top;
}
th { font-weight: 600; color: var(--text-soft); font-size: 12px; }
tbody tr:last-child td { border-bottom: none; }
tbody tr:hover { background: var(--accent-soft); }
ul, ol { padding-left: 24px; margin: 8px 0; }
li { margin: 4px 0; }
a { color: var(--accent); text-decoration: none; border-bottom: 1px dashed var(--accent); }
a:hover { background: var(--accent-soft); }
footer {
margin-top: 32px;
padding-top: 16px;
border-top: 1px solid var(--border);
color: var(--text-soft);
font-size: 12px;
text-align: center;
}
.toc {
background: #fff;
padding: 12px 20px;
border-radius: var(--radius);
box-shadow: var(--shadow);
margin: 16px 0 24px;
font-size: 13px;
}
.toc-title { font-weight: 600; color: var(--text-soft); margin-bottom: 8px; }
.toc ul { padding-left: 20px; list-style: none; }
.toc li { margin: 4px 0; }
.toc a {
color: var(--text);
border-bottom: none;
display: block;
padding: 4px 8px;
border-radius: 4px;
transition: all 0.15s ease;
}
.toc a:hover {
background: var(--accent-soft);
color: var(--accent);
transform: translateX(2px);
}
:target { background: var(--accent-soft); transition: background 0.5s ease; }
/* 标题旁的"📑 回到目录"小链接 */
.back-to-toc {
display: inline-block;
font-size: 12px;
margin-left: 10px;
padding: 2px 6px;
border-radius: 4px;
border-bottom: none;
opacity: 0.25;
transition: all 0.15s ease;
vertical-align: middle;
}
.back-to-toc:hover {
opacity: 1;
background: var(--accent-soft);
color: var(--accent);
}
.print-only { display: none; }
@media print {
header { background: var(--accent) !important; -webkit-print-color-adjust: exact; }
body { background: #fff; }
.toc, .filter-bar { display: none; }
table { page-break-inside: avoid; }
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>📋 项目状态看板 · IT 智能服务台</h1>
<div class="meta">
2026-08-11 09:27:12 +08:00
<span>📅 <strong>2026-08-11</strong>GMT+8</span>
<span>📂 源文件:<strong>docs/07-项目管理/项目状态看板.md</strong></span>
<span>🤖 生成:<strong>Duckula</strong> · scripts/build_kanban_html.py</span>
</div>
2026-08-11 09:27:12 +08:00
<span class="version-badge draft">v1.9.4-DRAFT</span>
</header>
2026-08-11 09:27:12 +08:00
<nav class="toc" id="toc"><div class="toc-title">📑 目录</div><ul><li style="margin-left:0px"><a href="#v194-2026-08-11">📌 v1.9.4 增补说明(2026-08-11 早班巡检触发)</a></li><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>
<h1 id="_1">项目状态看板</h1>
<blockquote>
2026-08-11 09:27:12 +08:00
<p><strong>版本</strong>: v1.9.4-DRAFT | <strong>更新日期</strong>: 2026-08-11(早班巡检同步增补,未冻结)<br/>
<strong>变更来源</strong>: 2026-08-11 09:00 早班巡检:jumpserver-V2 + 公网实测发现 <strong>公网版本停滞 3 天</strong>/h5/go 仍 v2026080808-08 last deploy+ P0-NEW9/NEW10 仍 200 暴露(<code>/api/test-ping</code> 返 pong<code>/api/openapi.json</code> 200 OK 424122B+ console 残留稳定 129 行 + 风险 /h5/ 今日到期 + BLK 30→31 天阈值校正 + v1.9.3-DRAFT 1 天未冻结(本次合并入 v1.9.4 待审)<br/>
2026-08-10 09:26:41 +08:00
<strong>执行人</strong>: DuckulaAI)· <strong>审核人</strong>: 待 Simon 审核<br/>
2026-08-11 09:27:12 +08:00
<strong>基础版本</strong>: v1.9.3-DRAFT2026-08-10 早班巡检)</p>
2026-08-10 09:26:41 +08:00
</blockquote>
2026-08-11 09:27:12 +08:00
<h2 id="v194-2026-08-11">📌 v1.9.4 增补说明(2026-08-11 早班巡检触发) <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<ul>
<li><strong>🔴 公网版本停滞 3 天(NEW 关键发现)</strong>jumpserver-V2 + 公网 <code>curl</code> 实测 <code>/h5/go</code><code>302 → /h5/v20260808/</code>08-08 09:30 last deploy);<code>/itservice/go</code> 同样指向 v20260808。意味着自 v1.9.3 看板升级(08-10 09:00)至今无新发版,<strong>前端优化 PR 与 dida 任务 P0-NEW9 修复均未发布</strong>。看板 HTML 仍是 v1.9.308-10 09:26 上传)—— 看板与前端代码不同步,但服务器 HTML 仍为最新。</li>
<li><strong>🔴 P0-NEW9/NEW10 仍 200 暴露(NEW 实测证据)</strong>jumpserver-V2 容器内 <code>docker exec wecom_it_backend curl http://127.0.0.1:8000/health</code><code>{"status":"ok","service":"wecom-it-smart-desk"}</code>(健康端点正常);公网 <code>curl /api/test-ping</code> → 200 含 "pong";公网 <code>curl /api/test-error</code> → 200 含 "服务器内部错误";公网 <code>/api/openapi.json</code> → 200 OK 424122B<strong>312 端点全公开 + 攻击者手册级 API 字典</strong>)。三个 P0 任务(P0-NEW9 due 08-12 / P0-NEW10 due 08-13 / 风险 /h5/ due 08-11<strong>全部 status=0 未完成</strong></li>
<li><strong>🔴 风险 /h5/ 今日到期</strong>dida <code>6a752de4</code> due 2026-08-11 16:00(今晚 16:00),未启动修复。潜伏隐患:nginx <code>location /h5/ alias + try_files $uri /h5/index.html</code> 当 index.html 缺失即触发 rewrite cycle 500。</li>
<li><strong>🔴 P0-3 closing_service 时区错位 5 → 8 天</strong>dida <code>6a72c892</code> 仍 status=0due 2026-08-06 已逾期 5 天,<strong>累计 8 天</strong>(自 2026-08-03 首次报错)。Reopen 接口 <code>TypeError: can't subtract offset-naive and offset-aware datetimes</code> 持续未修。</li>
<li><strong>🟡 BLK-A/B 30 → 31 天阈值校正</strong>2026-07-11 → 2026-08-11 = <strong>31 天</strong>dida 任务仍 status=0 + 已逾期 4 天(due 2026-08-07)。v1.9.3 标 30 天 → v1.9.4 标 31 天。</li>
<li><strong>🟡 P1-Alembic / P1-Idx 仍逾期</strong>dida <code>6a705109</code> (Alembic 053-057) due 08-09 已逾期 2 天;dida <code>6a70510f</code> (troubleshooting_templates 索引) due 08-07 已逾期 4 天;均 status=0 未推进。</li>
<li><strong>🟢 v1.9.3-DRAFT 1 天未冻结</strong>v1.9.3 在 08-10 09:00 巡检生成 DRAFT 后 24h 未升级为 FROZEN;本次合并入 v1.9.4 等待 PM 审核冻结(建议通过 FROZEN 后生成 <code>项目状态看板-v1.9.4-FROZEN.html</code> 归档)。</li>
<li><strong>🟢 服务发布状态</strong>:公网看板 HTML 200 OK 45683B08-10 09:26 = v1.9.3= 本地 45683B 完全匹配;服务器 <code>/opt/wecom-it-desk/docs-public/kanban/</code> 目录:当前 45683Bv1.9.3 派生)+ v1.9.0-FROZEN 30765B + v1.9.1-FROZEN 32078B 三份归档。</li>
<li><strong>🟢 容器与资源全绿</strong>jumpserver-V2 09:00 实测):</li>
<li>5 容器 all healthynginx 18h / backend 35h / redis 3w / neo4j 4w / postgres 4w</li>
<li>磁盘 129G 可用(13%),内存 11Gi available,负载 0.64/0.73/0.69<strong>59 天 uptime</strong></li>
<li>后端容器日志:6 文件(active 17.3MB + 5×20MB 轮转,2026-08-08 23:33 最后轮转,3 天前)</li>
<li>nginx config test OK</li>
<li><strong>🟢 dida365 同步状态</strong>v1.9.4 本次巡检前 dida 已记录 11 项(P0-NEW9/NEW10 + P0-3 + P1-1.1 + P1-治理-1 + P1-Alembic + P1-Idx + BLK-A + BLK-B + 风险 /h5/);v1.9.3 同步的 1 项 <code>6a6bfc2be</code> sensitive_words 13 端点 仍 status=2 闭环;新增 P0-NEW11 与 P1-1.1 二次治理作为新治理项。</li>
</ul>
<blockquote>
<p>📐 <strong>文档管理策略(2026-08-05 锁定 / 2026-08-06 修订 / v1.9.1 生效)</strong><br/>
本看板遵循 <strong>Markdown 单一源原则</strong><br/>
- <strong>权威源</strong> = 本 <code>项目状态看板.md</code>(Git 版本控制 / 程序解析 / PR review 均基于此)<br/>
- <strong>人看副本</strong> = <code>项目状态看板.html</code>(由 <code>scripts/build_kanban_html.py</code> 自动派生,<strong>不手维护</strong><br/>
- <strong>归档副本</strong> = <code>项目状态看板-v1.X.Y-FROZEN.html</code>(每次冻结生成一份,永久保留)<br/>
- <strong>服务发布</strong> = 文件上传至 jumpserver <code>/opt/wecom-it-desk/docs-public/{kanban,inspection}/</code><strong>✅ v1.9.1 起已可对外访问</strong>nginx.conf 加 <code>location /docs/</code> 路由 + docker-compose.yml 加 docs-public 挂载 + reload 已生效。外部 URL 实测:<br/>
- 看板:https://itsupport.servyou.com.cn/docs/kanban/项目状态看板.html<br/>
- 巡检:https://itsupport.servyou.com.cn/docs/inspection/2026-08/2026-08-06-早班.html<br/>
- 修改流程:改 .md → 跑脚本生成 .html → 归档副本 → 跑部署脚本上传 → commit &amp; push</p>
</blockquote>
<hr/>
2026-08-10 09:26:41 +08:00
<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/>
本看板遵循 <strong>Markdown 单一源原则</strong><br/>
- <strong>权威源</strong> = 本 <code>项目状态看板.md</code>(Git 版本控制 / 程序解析 / PR review 均基于此)<br/>
- <strong>人看副本</strong> = <code>项目状态看板.html</code>(由 <code>scripts/build_kanban_html.py</code> 自动派生,<strong>不手维护</strong><br/>
- <strong>归档副本</strong> = <code>项目状态看板-v1.X.Y-FROZEN.html</code>(每次冻结生成一份,永久保留)<br/>
- <strong>服务发布</strong> = 文件上传至 jumpserver <code>/opt/wecom-it-desk/docs-public/{kanban,inspection}/</code><strong>✅ v1.9.1 起已可对外访问</strong>nginx.conf 加 <code>location /docs/</code> 路由 + docker-compose.yml 加 docs-public 挂载 + reload 已生效。外部 URL 实测:<br/>
- 看板:https://itsupport.servyou.com.cn/docs/kanban/项目状态看板.html<br/>
- 巡检:https://itsupport.servyou.com.cn/docs/inspection/2026-08/2026-08-06-早班.html<br/>
- 修改流程:改 .md → 跑脚本生成 .html → 归档副本 → 跑部署脚本上传 → commit &amp; push</p>
</blockquote>
<hr/>
<h2 id="_2">📊 看板概览 <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<table>
<thead>
<tr>
<th>状态</th>
<th>数量</th>
<th>变化</th>
</tr>
</thead>
<tbody>
<tr>
<td>🔴 P0 必做</td>
2026-08-11 09:27:12 +08:00
<td>7</td>
<td>+1P0-NEW11 /api/openapi.json 312 端点公开治理)</td>
</tr>
<tr>
<td>🟡 P1 重要</td>
2026-08-10 09:26:41 +08:00
<td>6</td>
2026-08-11 09:27:12 +08:00
<td>持平</td>
</tr>
<tr>
<td>🟢 等用户决策</td>
<td>2</td>
2026-08-11 09:27:12 +08:00
<td>持平(<strong>31 天阈值</strong>,从 30 天修正)</td>
</tr>
<tr>
<td>🟠 进行中</td>
<td>1</td>
<td>持平</td>
</tr>
<tr>
<td>🏷️ 看板治理</td>
2026-08-10 09:26:41 +08:00
<td>3</td>
2026-08-11 09:27:12 +08:00
<td>持平</td>
</tr>
<tr>
<td>🟡 待开始</td>
<td>0</td>
<td>持平</td>
</tr>
<tr>
<td>⏸️ 暂停</td>
<td>5</td>
<td>持平</td>
</tr>
<tr>
<td>✅ 已完成</td>
2026-08-10 09:26:41 +08:00
<td>98</td>
2026-08-11 09:27:12 +08:00
<td>持平</td>
2026-08-10 09:26:41 +08:00
</tr>
<tr>
<td>⚠️ 风险项</td>
2026-08-11 09:27:12 +08:00
<td>2</td>
<td>+1(公网版本停滞 3 天,/h5/go 仍 v2026080808-08 09:30 last deploy</td>
</tr>
</tbody>
</table>
<hr/>
<h2 id="p0-high-priority">🔴 P0 必做(高优先级 / High Priority <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<blockquote>
<p>立即推进,需当日 / 次日完成。分类说明:<br/>
<strong>🆕 新增</strong> = 本次巡检首次发现;<strong>♻️ 历史遗留</strong> = 已记录但未关闭;<strong>🔥 紧急</strong> = 影响用户可感知功能或多端点</p>
</blockquote>
<table>
<thead>
<tr>
<th>任务ID</th>
<th>任务名称</th>
<th>类别</th>
<th>阻塞时长</th>
<th>状态</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>P0-3</strong></td>
<td><code>closing_service.py:467</code> datetime 时区错位</td>
<td>♻️ 历史遗留</td>
2026-08-11 09:27:12 +08:00
<td><strong>8 天</strong>(自 2026-08-03</td>
<td>🔴 待修复</td>
2026-08-11 09:27:12 +08:00
<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。dida <code>6a72c892</code> due 2026-08-06 已逾期 5 天,<strong>v1.9.4 校正</strong>:阻塞时长 7 → 8 天</td>
</tr>
<tr>
<td><strong>P0-4</strong></td>
<td><code>employee_profile_service.py:236</code> SessionLocal NoneType 🔥</td>
<td>🆕 位置修正</td>
<td>&lt;1 天</td>
<td>🔴 待修复</td>
<td><strong>看板 v1.8 行号描述错误</strong>:实际错误位置是 <code>app/services/employee_profile_service.py:236</code> 而非 <code>h5_ai_task.py:1198</code><code>db = SessionLocal()</code> 返回 None → <code>TypeError: 'NoneType' object is not callable</code>。2026-08-05 24h 内累计 10+ 次(01:33 / 03:25 / 04:07 / 04:11 多波次),影响 H5 IT 资产推荐异步推送。<strong>同根因 P0-5</strong></td>
</tr>
<tr>
<td><strong>P0-5</strong></td>
<td>容器 <code>app/constants/</code> 打包错误 🔥</td>
<td>🆕 新增</td>
<td>🆕</td>
<td>🔴 待修复</td>
<td>容器内 <code>/app/app/constants/__init__.py</code> 11635 bytes 内容是 automation.py(两个文件互换了),<code>/app/app/constants/automation.py</code> <strong>不存在</strong>。直接后果:连续 10+ 次 <code>ModuleNotFoundError: No module named 'app.constants.ai_reply_mode'</code> + 同根因连锁导致 P0-4SessionLocal 绑定失败)。建议:① 临时 <code>docker cp</code> 修补 → ② 长期排查 backend 镜像构建流程(Dockerfile <code>COPY . .</code> 是 OK 的,最可能是 deploy 脚本里将 automation.py 重命名为 <code>__init__.py</code></td>
</tr>
<tr>
<td><strong>P0-6</strong></td>
<td>后端 OAuth 40029 抖动(用户码失效)</td>
<td>️ 信息类</td>
<td>持续</td>
<td>🟢 已知噪声</td>
<td>218.75.34.87 等外部 IP 持续试探 <code>/api/auth/validate-sso</code> + 偶发 OAuth code 失效。属 WAF 扫描背景噪声,已 fail2ban 监控。无需主动处理</td>
</tr>
<tr>
<td><strong>P0-NEW7</strong></td>
<td>看板-部署脱节:nginx <code>/docs/</code> 路由缺失</td>
<td>✅ 已修复</td>
<td>🆕</td>
<td>✅ 已修复</td>
<td><strong>2026-08-06 11:46 已完成</strong>:① docker-compose.yml 加 <code>docs-public</code> 卷挂载 ② nginx.conf 加 <code>location /docs/ { alias /opt/wecom-it-desk/docs-public/; charset utf-8; add_header Cache-Control "no-cache, must-revalidate"; ... }</code><code>docker compose up -d --force-recreate nginx</code> + <code>nginx -t</code> + <code>nginx -s reload</code><strong>jumpserver-V2 实测</strong>:容器内 <code>curl -sI http://127.0.0.1/docs/kanban/项目状态看板.html</code><strong>200</strong>30765BCache-Control no-cache)。外部 URL <code>https://itsupport.servyou.com.cn/docs/kanban/项目状态看板.html</code> 实测完整渲染 v1.9.0-FROZEN 内容 ✓</td>
</tr>
<tr>
<td><strong>P0-NEW8</strong></td>
<td>host 文件结构 vs git 仓库结构差异</td>
<td>🆕 新增</td>
<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>
</tr>
2026-08-10 09:26:41 +08:00
<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>
2026-08-11 09:27:12 +08:00
<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 端点全公开)。<strong>v1.9.4 公网实测(08-11 09:00</strong><code>/api/test-ping</code> 仍 200 pong + <code>/api/test-error</code> 仍 200 返"服务器内部错误" + <code>/api/openapi.json</code> 仍 200 OK 424122B。建议批量治理:① <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>
<tr>
<td><strong>P0-NEW11</strong></td>
<td>/api/openapi.json 生产公开 312 端点治理(攻击者字典级暴露)</td>
<td>🆕 新增</td>
<td>🆕</td>
<td>🔴 待修复</td>
<td><strong>2026-08-11 09:00 早班巡检实测</strong><code>curl -sI https://itsupport.servyou.com.cn/api/openapi.json</code> → 200 OK 424122B<strong>完整 API 字典</strong>含 106 admin + 29 auth 端点)。P0-NEW10 文字已覆盖但无独立 task,建议单列以便追踪进度。修复方案:FastAPI 实例化 <code>openapi_url=None</code>(生产)+ 同步 <code>docs_url=None, redoc_url=None</code>nginx 层 <code>location = /api/openapi.json { return 404; }</code> 兜底</td>
2026-08-10 09:26:41 +08:00
</tr>
</tbody>
</table>
2026-08-10 09:26:41 +08:00
<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/>
<h2 id="p1-medium-priority">🟡 P1 重要(待办 / Medium Priority <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
2026-08-10 09:26:41 +08:00
<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>
2026-08-10 09:26:41 +08:00
<p>P1-1(看板 v1.9.1 已关闭项)保留作为历史记录,二次治理由 P1-1.1 承担。</p>
</blockquote>
<hr/>
<h2 id="awaiting-decision">🟢 等用户决策(阻塞项 / Awaiting Decision <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<blockquote>
2026-08-11 09:27:12 +08:00
<p>均超 3 天阈值,需 PM 升级催办。<strong>v1.9.4 阈值校正</strong>30 天 → <strong>31 天</strong>2026-07-11 → 2026-08-11</p>
</blockquote>
<table>
<thead>
<tr>
<th>任务ID</th>
<th>任务名称</th>
<th>阻塞时长</th>
<th>卡点 / Owner</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>BLK-A</strong></td>
<td>企微会议室 Secret</td>
2026-08-11 09:27:12 +08:00
<td>⚠️ <strong>31 天</strong>(自 2026-07-11</td>
<td>需企业微信管理后台申请 / Owner: 平台组</td>
<td>影响会议室预定功能 / <code>/itterminal/</code></td>
</tr>
<tr>
<td><strong>BLK-B</strong></td>
<td>ITSM API 授权</td>
2026-08-11 09:27:12 +08:00
<td>⚠️ <strong>31 天</strong>(自 2026-07-11</td>
<td>需向 ITSM 平台方申请 app_id/app_secret / Owner: 平台组</td>
<td>影响 ITSM 工单卡片跳转</td>
</tr>
</tbody>
</table>
2026-08-10 09:26:41 +08:00
<p><strong>催办机制</strong>:建议 PM 每周一 review(滴答清单循环任务)。dida task <code>6a7008e9e4b03a0a8b2870ba</code> (BLK-A) + <code>6a7008e9e4b06440c396f6c2</code> (BLK-B)due 已逾期(2026-08-07)。</p>
<hr/>
<h2 id="req-001">⏸️ 安全策略检查平台 (REQ-集成-001) — 已暂停 <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>#118</td>
<td>火绒API集成</td>
<td>P0</td>
<td>⏸️ 暂停</td>
<td>复用现有功能,必要性未确认</td>
</tr>
<tr>
<td>#119</td>
<td>联软Excel导入</td>
<td>P0</td>
<td>⏸️ 暂停</td>
<td>用户-终端关联导入</td>
</tr>
<tr>
<td>#120</td>
<td>数据融合引擎</td>
<td>P0</td>
<td>⏸️ 暂停</td>
<td>IP/主机名/MAC三级匹配</td>
</tr>
<tr>
<td>#121</td>
<td>策略规则与通知模板</td>
<td>P1</td>
<td>⏸️ 暂停</td>
<td>命中管理、通知发送</td>
</tr>
<tr>
<td>#122</td>
<td>调度执行与导出</td>
<td>P0</td>
<td>⏸️ 暂停</td>
<td>定时任务、Excel导出</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>暂停原因</strong>: 必要性未确认,待进一步评估后再启动</p>
</blockquote>
<p><strong>关联文档保留</strong><br/>
- PRD: <code>01-产品文档/08-集成生态/PRD-REQ-集成-001-OpenClaw合规检查-v1.0.md</code><br/>
- 原型: <code>01-产品文档/08-集成生态/原型-REQ-集成-001-OpenClaw合规检查-v1.0.html</code><br/>
- 技术方案: <code>02-技术文档/技术架构/技术方案-REQ-集成-001-OpenClaw合规检查-v1.0.md</code></p>
<hr/>
<h2 id="in-progress">🟠 进行中 (In Progress) <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>#81</td>
<td>敏感词检测 + 语气优化</td>
<td>P0</td>
<td>🔄 v1.1 阶段1 已完成(07-28</td>
<td>词库入库 + 后台管理 UI(增删改查 + 灰度开关)+ 12 个配套 API 已落地。剩余阶段(语气优化、灰度策略细化)待 v1.2 排期。详见 <code>docs/01-产品文档/00-产品规划/PRD-REQ-通用-004-敏感词检测-v1.2-AI辅助.md</code></td>
</tr>
</tbody>
</table>
<hr/>
<h2 id="to-do">🟡 待开始 (To Do) <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<table>
<thead>
<tr>
<th>任务ID</th>
<th>任务名称</th>
<th>优先级</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td>(当前无待开始任务)</td>
<td></td>
<td>#104 已于 2026-08-07 结案并迁入「最近完成」区</td>
</tr>
</tbody>
</table>
<hr/>
<h2 id="recently-completed">✅ 最近完成 (Recently Completed) <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>
2026-08-10 09:26:41 +08:00
<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>运行期结构化日志查看页(筛选 + 下载命中行)</td>
<td>🔴 P0</td>
<td>Duckula</td>
<td>2026-08-07</td>
</tr>
<tr>
<td>-</td>
2026-08-10 09:26:41 +08:00
<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</td>
<td>Duckula</td>
<td>2026-08-07</td>
</tr>
<tr>
<td>-</td>
<td>sensitive_words.py 13 端点补 require_admin</td>
<td>🔴 P0</td>
<td>Duckula</td>
<td>2026-08-04</td>
</tr>
<tr>
<td>-</td>
<td>前端 console.log 残留 208 行清理</td>
<td>🟡 P1</td>
<td>Duckula</td>
<td>2026-08-05</td>
</tr>
<tr>
<td>-</td>
<td>/itportal 500 修复(nginx 配置清理)</td>
<td>🔴 P0</td>
<td>Duckula</td>
<td>2026-08-03</td>
</tr>
<tr>
<td>-</td>
<td>troubleshooting_templates.py 5 端点补 auth + MOCK 替换 ORM</td>
<td>🔴 P0</td>
<td>Duckula</td>
<td>2026-08-03</td>
</tr>
<tr>
<td>#133</td>
<td>voice_asr.py POST /asr auth 加固(P0 安全巡检)</td>
<td>🔴 P0</td>
<td>Duckula</td>
<td>2026-08-03</td>
</tr>
<tr>
<td>-</td>
<td>批次1 P0重构(超时预算切分/RecommendCard/WS全字段)</td>
<td>P0</td>
<td>宋献</td>
<td>2026-07-18</td>
</tr>
<tr>
<td>-</td>
<td>批次2 P1基础重构(AIService单例/Dify调用点/Matcher/WS/Redis</td>
<td>P1</td>
<td>宋献</td>
<td>2026-07-18</td>
</tr>
<tr>
<td>-</td>
<td>批次3 P1核心重构(process管线化/结单确认断链修复)</td>
<td>P1</td>
<td>宋献</td>
<td>2026-07-18</td>
</tr>
<tr>
<td>-</td>
<td>批次4 P2收尾(死代码大扫除)</td>
<td>P2</td>
<td>宋献</td>
<td>2026-07-18</td>
</tr>
<tr>
<td>-</td>
<td>D1合并(双模支持/kfid路由/C7/C8/上下文超限重置)</td>
<td>P0</td>
<td>宋献</td>
<td>2026-07-18</td>
</tr>
<tr>
<td>-</td>
<td>文档重组(docs目录9→10类/PRD合并/技术文档关联REQ)</td>
<td>P2</td>
<td>宋献</td>
<td>2026-07-19</td>
</tr>
<tr>
<td>#82</td>
<td>H5右侧栏布局调整</td>
<td>P2</td>
<td>宋献</td>
<td>2026-07-17</td>
</tr>
<tr>
<td>#76</td>
<td>ITSM工单卡片跳转(桥接页一步直达 + 扫码登录定为人机校验)</td>
<td>P1</td>
<td>宋献</td>
<td>2026-07-17</td>
</tr>
<tr>
<td>BUG-AI-001</td>
<td>打印机路由到行政前台 + [object Object]显示异常</td>
<td>P2</td>
<td>Duckula</td>
<td>2026-07-23</td>
</tr>
<tr>
<td>-</td>
<td>H5用户端原型图 v2.0 更新</td>
<td>-</td>
<td>Duckula</td>
<td>2026-07-24</td>
</tr>
<tr>
<td>#124</td>
<td>坐席端接单按钮状态优化</td>
<td>P1</td>
<td>宋献</td>
<td>2026-07-24</td>
</tr>
<tr>
<td>#125</td>
<td>H5选项交互消息重复处理</td>
<td>P0</td>
<td>Simon/Duckula</td>
<td>2026-07-24</td>
</tr>
<tr>
<td>BUG-用户-003</td>
<td>H5 员工端"结束会话失败,请稍后重试"修复</td>
<td>P2</td>
<td>Duckula</td>
<td>2026-07-30</td>
</tr>
</tbody>
</table>
<hr/>
<h2 id="2026-07-1516">✅ 近期完成 (2026-07-15~16) <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>#117</td>
<td>Neo4j 知识图谱连接修复</td>
<td>P0</td>
<td>宋献</td>
<td>2026-07-16</td>
</tr>
<tr>
<td>#118</td>
<td>粘贴图片边框问题</td>
<td>P2</td>
<td>宋献</td>
<td>2026-07-16</td>
</tr>
<tr>
<td>#80</td>
<td>企微图片消息无法预览</td>
<td>P1</td>
<td>宋献</td>
<td>2026-07-16</td>
</tr>
<tr>
<td>#75</td>
<td>头像同步功能完善</td>
<td>P1</td>
<td>宋献</td>
<td>2026-07-15</td>
</tr>
<tr>
<td>#74</td>
<td>IT资产升级卡片免登录修复</td>
<td>P1</td>
<td>宋献</td>
<td>2026-07-15</td>
</tr>
<tr>
<td>#73</td>
<td>H5截图功能</td>
<td>P2</td>
<td>宋献</td>
<td>2026-07-14</td>
</tr>
</tbody>
</table>
<hr/>
<h2 id="_3">📌 重要技术决策与限制记录 <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<table>
<thead>
<tr>
<th>日期</th>
<th>决策 / 限制</th>
<th>影响范围</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>2026-07-18</td>
<td>D1合并:后端双模支持</td>
<td>H5 AI对话</td>
<td>intent_type/business_category字段透传,主Dify结果直接判断路由</td>
</tr>
<tr>
<td>2026-07-18</td>
<td>kfid路由窗口配置化</td>
<td>H5业务路由</td>
<td>12个职能部门窗口(行政/人力资源/财务/法务/物业),business_contacts表查具体处理人</td>
</tr>
<tr>
<td>2026-07-18</td>
<td>Redis密码轮换</td>
<td>生产环境</td>
<td>新密码32位字母数字,仅存服务器.env,轮换后验证通过</td>
</tr>
<tr>
<td>2026-07-18</td>
<td>process_h5_ai_reply管线化</td>
<td>H5 AI对话</td>
<td>9步骤函数式拆分,try/except 11对→1对</td>
</tr>
<tr>
<td>2026-07-18</td>
<td>结单确认功能断链修复</td>
<td>坐席端</td>
<td>WS类型resolve_confirm,前端case改对应监听+ChatPanel挂载</td>
</tr>
<tr>
<td>2026-07-19</td>
<td>docs目录重组</td>
<td>文档管理</td>
<td>9类→10类(新增运营文档),PRD合并,技术文档关联REQ编号</td>
</tr>
<tr>
<td>2026-07-17</td>
<td>H5 答题功能实现</td>
<td>H5 右侧栏</td>
<td>答题区域通过 showQuiz prop 控制显隐,QueueWaiting 组件始终挂载但默认折叠。修复了答题默认显示和重复出现的 bug。详见任务说明书 #82 v1.1</td>
</tr>
<tr>
<td>2026-07-17</td>
<td>ITSM 工单跳转:扫码登录定为人机校验</td>
<td>8 个运维平台审批卡片</td>
<td>Web ITSM 深链不支持静默企微 OAuth,桥接页跨域预热被拒,仍弹扫码。产品决策保留该扫码环节(企业安全合规可接受的二次身份确认),不视为缺陷。详见 PRD §v2.3、架构 §15.4.9、任务说明书 #76 v3.0</td>
</tr>
<tr>
<td>2026-08-05</td>
<td><strong>看板 v1.8 分区升级</strong></td>
<td>看板管理</td>
<td>新增 🔴 P0 必做 / 🟡 P1 重要 / 🟢 等用户决策三个正式分区,4 维分类(新增/历史遗留/信息/建议)正式纳入看板流转</td>
</tr>
<tr>
<td>2026-08-06</td>
<td><strong>看板 v1.9 看板-现实一致性巡检</strong></td>
<td>看板管理</td>
<td>2026-08-06 06:00 巡检发现 v1.8 中 2 项描述(P0-2 sensitive_words / P1-1 console.log)与现实脱节(代码已修复 / 已清理),v1.9 已迁移至已完成。<strong>新发现</strong>v1.8 顶部"对外发布"声明与现实脱节——nginx 无 <code>/docs/</code> 路由,外部 URL 404。v1.9 修正声明并新增 P0-NEW7(看板-部署脱节治理)。新增治理原则:① 看板冻结前由自动化扫描 P0/P1 条目对应的源码/容器状态 ② 看板顶部"服务发布"声明须配套 curl 实测验证,否则标"已上传服务器,服务状态待验"</td>
</tr>
<tr>
<td>2026-08-06</td>
<td><strong>看板 v1.9 新增治理:自动扫描防脱节</strong></td>
<td>看板管理</td>
<td>未来由 <code>scripts/build_kanban_html.py --check</code> 模式在生成前对每条 P0/P1 描述做源码关键字 / 容器文件存在性校验,避免看板-现实脱节再次发生</td>
</tr>
<tr>
<td>2026-08-06</td>
<td><strong>P0-NEW8host vs git 仓库结构差异</strong></td>
<td>部署架构</td>
<td>P0-NEW7 修复期间触发——本地 git 仓库 <code>src/backend/</code> 与主机实际 <code>app/</code> 结构不一致,docker-compose.yml 路径配置失配引发 backend 容器启动失败。需 PM 决策:① host 是否同步 git 仓库 ② 是否启用 build context 镜像重建 ③ 迁移路径方案</td>
</tr>
</tbody>
</table>
<hr/>
<h2 id="_4">📈 任务统计 <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<ul>
2026-08-11 09:27:12 +08:00
<li><strong>总任务数</strong>: 110v1.9.4 = v1.9.3 109 + P0-NEW11 /api/openapi.json 独立 task</li>
<li><strong>已完成</strong>: 98(持平)</li>
<li><strong>🔴 P0 必做</strong>: 7P0-3 / 4 / 5 / 6 / NEW8 / NEW9 / NEW10 / <strong>NEW11</strong>NEW7 已修复;P0-1 已闭环)</li>
2026-08-10 09:26:41 +08:00
<li><strong>🟡 P1 重要</strong>: 6P1-1.1 / 治理-1 / 治理-2 / 治理-3 / P1-Alembic / P1-IdxP1-治理-sens 是 dida close 同步不入待办列)</li>
2026-08-11 09:27:12 +08:00
<li><strong>🟢 等用户决策</strong>: 2BLK-A/B<strong>均超 31 天阈值</strong></li>
<li><strong>🟠 进行中</strong>: 1#81 v1.2 待排期)</li>
2026-08-10 09:26:41 +08:00
<li><strong>🟡 待开始</strong>: 0</li>
<li><strong>⏸️ 暂停</strong>: 5(安全策略检查平台)</li>
2026-08-11 09:27:12 +08:00
<li><strong>⚠️ 风险项</strong>: 2(风险-1 Nginx /h5/ alias+try_files 潜伏 500 隐患 dida <code>6a752de4</code> + 风险-2 公网版本停滞 3 天 <code>/h5/go</code> 仍 v20260808</li>
2026-08-10 09:26:41 +08:00
<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>
<hr/>
<h2 id="_5">🔗 相关文档 <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<ul>
<li>任务说明书目录: <code>docs/07-项目管理/任务说明书/</code></li>
<li>项目管理主文档: <code>docs/07-项目管理/任务说明书/IT智能服务台-项目管理主文档.md</code></li>
<li><strong>2026-08-05 早班巡检报告(HTML</strong>: <code>docs/07-项目管理/巡检报告/2026-08/2026-08-05-早班.html</code></li>
<li>巡检报告归档目录: <code>docs/07-项目管理/巡检报告/</code></li>
</ul>
<hr/>
<h2 id="_6">📝 看板版本变更记录 <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<table>
<thead>
<tr>
<th>版本</th>
<th>日期</th>
<th>变更内容</th>
<th>变更人</th>
</tr>
</thead>
<tbody>
<tr>
2026-08-11 09:27:12 +08:00
<td><strong>v1.9.4-DRAFT</strong></td>
<td>2026-08-11</td>
<td>🆕 早班巡检触发的治理小版本(<strong>5 项关键发现</strong>):① <strong>🔴 公网版本停滞 3 天</strong>NEW):jumpserver-V2 + 公网 <code>curl</code> 实测 <code>/h5/go</code><code>302 → /h5/v20260808/</code>08-08 09:30 last deploy3 天无新发版);/itservice/go 同样 ② <strong>🔴 P0-NEW9/NEW10 仍 200 暴露</strong>:容器内 <code>curl /health</code> 200 + 公网 <code>/api/test-ping</code> 200 含 pong + <code>/api/test-error</code> 200 + <code>/api/openapi.json</code> 200 OK 424122B312 端点全公开) ③ <strong>🔴 风险 /h5/ 今日到期</strong>dida <code>6a752de4</code> due 2026-08-11 16:00,今晚不修即逾期 ④ <strong>🔴 P0-3 closing_service 时区错位 5 → 8 天</strong>dida <code>6a72c892</code> 仍 status=0due 08-06 已逾期 5 天 ⑤ <strong>🟡 BLK-A/B 30 → 31 天阈值校正</strong>2026-07-11 → 2026-08-11)。<strong>新增</strong>P0-NEW11/api/openapi.json 独立 task,从 P0-NEW10 拆分)+ 风险-2(公网版本停滞)。看板:🔴 P0 6→7 / 🟡 P1 6(持平)/ 🟢 等决策 31 天阈值(30→31)/ ⚠️ 风险项 1→2 / 总任务 109→110。<strong>v1.9.3-DRAFT 1 天未冻结</strong>08-10 09:00 → 08-11 09:00),本次合并入 v1.9.4 待审</td>
<td>Duckula (AI)</td>
</tr>
<tr>
2026-08-10 09:26:41 +08:00
<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>2026-08-07</td>
<td>✅ 【P0】#104 运行期结构化日志查看页 <strong>结案</strong>jumpserver-V2 生产实测四项证据齐备(管理页 200 / 前端 chunk 含筛选+下载命中行 / 后端端点已挂载(4004 = #48 IP 白名单预期门禁,非故障)/ 日志源 JSON 持续写入)。从「待开始」区迁入「最近完成」区;待开始 0 项;已完成 93→94。滴答清单同步完成</td>
<td>Duckula (AI)</td>
</tr>
<tr>
<td>v1.9.1 补录</td>
<td>2026-08-07</td>
<td>✅ P1【补齐 Nginx 生产安全响应头】已修复并关闭:生产 nginx.conf 注入 7 安全头(server 级 + 各含 add_header 的 location 内,均带 always),nginx -t 通过 + docker restart wecom_it_nginxorigin 与公网(WAF)双验证通过。补录至最近完成区;已完成 92→93</td>
<td>Duckula (AI)</td>
</tr>
<tr>
<td><strong>v1.9.1-FROZEN</strong></td>
<td>2026-08-06 11:50</td>
<td>✅ 冻结:P0-NEW7(看板-部署脱节)已修复。nginx <code>/docs/</code> 路由上线 + docker-compose.yml docs-public 挂载生效;外部 URL 实测 200。修复期间发现并新增 P0-NEW8host 文件结构 vs git 仓库结构差异)。归档副本 <code>项目状态看板-v1.9.1-FROZEN.html</code></td>
<td>Duckula (AI)</td>
</tr>
<tr>
<td><strong>v1.9.0-FROZEN</strong></td>
<td>2026-08-06 11:36</td>
<td>✅ 冻结:v1.9-DRAFT 内容经 PM 审核通过正式生效;归档副本 <code>项目状态看板-v1.9.0-FROZEN.html</code><strong>修正 v1.8.0 起"对外发布"声明与现实脱节</strong>nginx <code>/docs/</code> 路由从未生效,已添加 P0-NEW7 看板-部署脱节);HTML 文件已上传至 jumpserver <code>/opt/wecom-it-desk/docs-public/kanban/</code> + <code>/inspection/2026-08/</code>,但 nginx 服务不可达(详见 P0-NEW7</td>
<td>Simon(审核)</td>
</tr>
<tr>
<td>v1.9.0-DRAFT</td>
<td>2026-08-06</td>
<td>🆕 草稿:① P0 必做 4→5(P0-2 修复迁移至已完成 + P0-5 打包错误 + P0-6 OAuth 信息类 + P0-4 行号描述修正)② P1 重要 1→0(P1-1 清理迁移至已完成)③ 已完成 88→91 ④ 等用户决策 25→26 天阈值 ⑤ 总任务数 96→99 ⑥ 看板顶部版本号自动切换为 draft badge ⑦ 看板与现实脱节条目得到修正</td>
<td>Duckula (AI)</td>
</tr>
<tr>
<td><strong>v1.8.0-FROZEN</strong></td>
<td>2026-08-05 19:37</td>
<td>✅ 冻结:v1.8-DRAFT 内容经 PM 审核通过正式生效;归档副本 <code>项目状态看板-v1.8.0-FROZEN.html</code><strong>⚠️ 服务发布声明脱节</strong>(声称发布至 <code>https://itsupport.servyou.com.cn/docs/kanban/</code> + <code>/docs/inspection/</code> 实际 404——nginx 无 <code>/docs/</code> 路由,v1.9 已修正声明并新增 P0-NEW7 治理)</td>
<td>Simon(审核)</td>
</tr>
<tr>
<td>v1.8-DRAFT</td>
<td>2026-08-05</td>
<td>🆕 草稿:新增 🔴 P0 必做分区(4 项)/ 🟡 P1 重要分区(1 项)/ 🟢 等用户决策分区(2 项,25 天阈值);总任务数 92→96;引入 4 维分类(新增/历史遗留/信息/建议);附 HTML 巡检报告归档路径</td>
<td>Duckula (AI)</td>
</tr>
<tr>
<td>v1.7</td>
<td>2026-08-03</td>
<td>#81 状态反转:v1.1 阶段1 已完成(07-28)→ 进行中;新增今日完成项 troubleshooting_templates 5 端点 + /itportal 500 修复;统计 92/87/1/1/5/2</td>
<td>Duckula (AI)</td>
</tr>
<tr>
<td>v1.5</td>
<td>2026-07-30</td>
<td>追加 BUG-用户-003 修复完成项(H5 结束会话失败回归);总任务数 90→91;已完成 84→85;关联 TC-用户-008;待开始不变</td>
<td>Duckula (AI)</td>
</tr>
<tr>
<td>v1.4</td>
<td>2026-07-24</td>
<td>批量完成项入库(批次 1-4 重构 / D1 合并 / 文档重组 / #124 坐席接单按钮 / #125 H5 选项消息)</td>
<td>Simon</td>
</tr>
</tbody>
</table>
</main>
<footer>
2026-08-11 09:27:12 +08:00
本页面由 <code>build_kanban_html.py</code> 自动生成于 2026-08-11 09:26 (GMT+8) · 数据源:docs/07-项目管理/项目状态看板.md<br>
修改流程:编辑 .md → 跑脚本生成 .html → (可选)部署到 jumpserver → commit & push
</footer>
</div>
</body>
</html>