Files
wecom_it_smart_desk/docs/07-项目管理/项目状态看板-v1.9.0-FROZEN.html
T
Simon facc04aa65 chore: docs 结构整改 + compose 双目录对齐(合并重建提交)
本提交为 .git 对象库损坏后的重建提交,内容等价于原先三个本地提交
(5e2fd4c2 / 57a53c98 / 5d7e1873)的累积结果,未做任何额外改动。

一、docs 结构整改(整改 #14)
根因:重构时新结构为 untracked 文件,执行 git stash(未带 -u)未纳入,
随后 git reset 拉回 HEAD 旧 tracked 树,导致旧树复活、新旧两棵目录
树并存于 docs/,共 791 文件、双分类体系冲突。

修复动作:
- b2 同名异主题文件改名迁移保全 9 个
- C 类 39 个孤立文件按主题正确归类
- A/B1 类 222 个重复文件删除(新结构已有内容副本)
- 9 个旧独有空目录删除
- 270 处内部引用按 verified 映射改写
- 整改记录 #14 登记于 04-运维文档/部署运维

结果:docs 791 → 569 文件,顶层仅规范 8 类 + 治理文件,单树恢复。
残留:约 20 处指向从未存在文件的陈旧死链,归入独立文档卫生任务。

二、compose 双目录对齐(消除踩坑 A)
- docker-compose.yml:nginx 前端挂载全部由根目录 frontend-*/dist
  改为 src/frontend-*/dist(h5 / agent / admin / terminal)
- docker-compose.dev.yml:dev 服务 build context 与卷同步改 src/
- 效果:本地 docker compose up 不再把根目录 stale dist 挂回,
  与线上一致,分叉隐患消除(已 docker compose config 校验通过)

防复发铁律:
- 重构须提交;仓库修复须 git stash -u 或先 commit
- 新结构须 git add 并提交,避免再次 untracked 复活
- H5 改动只动 src/frontend-h5/,禁改根目录遗留 frontend-*/
2026-08-07 22:31:32 +08:00

828 lines
29 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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">
<span>📅 <strong>2026-08-06</strong>GMT+8</span>
<span>📂 源文件:<strong>docs/07-项目管理/项目状态看板.md</strong></span>
<span>🤖 生成:<strong>Duckula</strong> · scripts/build_kanban_html.py</span>
</div>
<span class="version-badge frozen">v1.9.0-FROZEN</span>
</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>
<main>
<h1 id="_1">项目状态看板</h1>
<blockquote>
<p><strong>版本</strong>: v1.9.0-FROZEN | <strong>更新日期</strong>: 2026-08-06(已审核冻结,对外可引用)<br/>
<strong>变更来源</strong>: 2026-08-06 06:00 早班巡检(jumpserver-V2 实测 + 代码扫描 + 容器内文件核对)<br/>
<strong>执行人</strong>: DuckulaAI)· <strong>审核人</strong>: Simon2026-08-06 11:36</p>
<p>📐 <strong>文档管理策略(2026-08-05 锁定 / 2026-08-06 修订)</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.0-FROZEN.html</code>(每次冻结生成一份,永久保留)<br/>
- <strong>服务发布</strong> = 文件上传至 jumpserver <code>/opt/wecom-it-desk/docs-public/{kanban,inspection}/</code><strong>⚠️ v1.8.0 起的发布声明修正</strong>:此前声称"经 <code>scripts/deploy_kanban_to_jumpserver.sh</code> 上传至 <code>https://itsupport.servyou.com.cn/docs/kanban/</code> + <code>/docs/inspection/</code>"未实际生效——nginx 容器未挂载 docs-public 目录且配置中无 <code>/docs/</code> 路由,外部 URL 实测 404。v1.9 起声明改为"已上传服务器,nginx 路由配置待 P0-NEW1 + 看板 v1.10 修复"。详情见 <a href="#">P0-NEW7 看板-部署脱节治理</a><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>
<td>6</td>
<td>🆕 +3P0-5/6/NEW7 新增)、P0-2 迁移至已完成、P0-4 位置描述修正</td>
</tr>
<tr>
<td>🟡 P1 重要</td>
<td>0</td>
<td>♻️ -1(P1-1 已清理,迁移至已完成)</td>
</tr>
<tr>
<td>🟢 等用户决策</td>
<td>2</td>
<td>+1 自然日(25→26 天阈值)</td>
</tr>
<tr>
<td>🟠 进行中</td>
<td>1</td>
<td>持平</td>
</tr>
<tr>
<td>🏷️ 看板治理</td>
<td>1</td>
<td>🆕 P0-NEW7(看板-部署脱节)</td>
</tr>
<tr>
<td>🟡 待开始</td>
<td>0</td>
<td>持平</td>
</tr>
<tr>
<td>⏸️ 暂停</td>
<td>5</td>
<td>持平</td>
</tr>
<tr>
<td>✅ 已完成</td>
<td>91</td>
<td>+3sensitive_words 13 端点 auth、console.log 清理、#104 待开始清理)</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-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><code>closing_service.py:467</code> datetime 时区错位</td>
<td>♻️ 历史遗留</td>
<td>2 天(自 2026-08-03</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>
</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 06:00 巡检发现</strong>v1.8.0-FROZEN 看板声称"对外发布至 <code>https://itsupport.servyou.com.cn/docs/kanban/</code> + <code>/docs/inspection/</code>"实际从未生效。jumpserver-V2 实测:① nginx 主配置 + conf.d/default.conf 均无 <code>/docs/</code> 路由;② nginx 容器未挂载 <code>/opt/wecom-it-desk/docs-public/</code>;③ <code>curl https://itsupport.servyou.com.cn/docs/kanban/项目状态看板.html</code><strong>404</strong>。今日 11:32 已将 HTML 文件传到服务器 <code>/opt/wecom-it-desk/docs-public/{kanban,inspection}/</code> 但仍 404,需补:① docker-compose.yml 加挂载 <code>./docs-public:/opt/wecom-it-desk/docs-public:ro</code> ② nginx.conf 加 <code>location /docs/ { alias /opt/wecom-it-desk/docs-public/; charset utf-8; add_header Cache-Control "no-cache, must-revalidate"; try_files $uri $uri/ $uri.html =404; }</code><code>docker exec wecom_it_nginx nginx -t &amp;&amp; nginx -s reload</code></td>
</tr>
</tbody>
</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>
<hr/>
<h2 id="p1-medium-priority">🟡 P1 重要(待办 / Medium Priority <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<blockquote>
<p>v1.9 已无独立 P1 条目(P1-1 已完成,见最近完成区)。如发现新 P1 在此处新增。</p>
</blockquote>
<hr/>
<h2 id="awaiting-decision">🟢 等用户决策(阻塞项 / Awaiting Decision <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<blockquote>
<p>均超 3 天阈值,需 PM 升级催办</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>
<td>⚠️ <strong>26 天</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>
<td>⚠️ <strong>26 天</strong>(自 2026-07-11</td>
<td>需向 ITSM 平台方申请 app_id/app_secret / Owner: 平台组</td>
<td>影响 ITSM 工单卡片跳转</td>
</tr>
</tbody>
</table>
<p><strong>催办机制</strong>:建议 PM 每周一 review(滴答清单循环任务)。</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>#104</td>
<td>运行期结构化日志查看页</td>
<td>P0</td>
<td><strong>已上线</strong> — 4 项筛选 + 下载命中行(前后端+部署均已落地,2026-08-04 文档收口)</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>
<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>
</tbody>
</table>
<hr/>
<h2 id="_4">📈 任务统计 <a class="back-to-toc" href="#toc" title="回到目录">📑</a></h2>
<ul>
<li><strong>总任务数</strong>: 100v1.8 = 96 + 本次新增 4 项:P0-4 行号修正 + P0-5 打包错误 + P0-6 OAuth 信息类 + P0-NEW7 看板-部署脱节)</li>
<li><strong>已完成</strong>: 91v1.8 = 88 + sensitive_words auth / console.log 清理 / #104 待开始清理)</li>
<li><strong>🔴 P0 必做</strong>: 6P0-1 / 3 / 4 / 5 / 6 / NEW7</li>
<li><strong>🟡 P1 重要</strong>: 0</li>
<li><strong>🟢 等用户决策</strong>: 2BLK-A/B<strong>均超 26 天阈值</strong></li>
<li><strong>🟠 进行中</strong>: 1#81 v1.2 待排期)</li>
<li><strong>🟡 待开始</strong>: 0(#104 已上线,迁移至已完成区,下次发版清理)</li>
<li><strong>⏸️ 暂停</strong>: 5(安全策略检查平台)</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>
<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>
本页面由 <code>build_kanban_html.py</code> 自动生成于 2026-08-06 11:35 (GMT+8) · 数据源:docs/07-项目管理/项目状态看板.md<br>
修改流程:编辑 .md → 跑脚本生成 .html → (可选)部署到 jumpserver → commit & push
</footer>
</div>
</body>
</html>