Files
knowledge-governance/docs/previews/monitor-b-task-inbox.html
T
zheromiku dcdc8d1ddd feat: 知识治理平台(含已验证发布/回滚契约)
全栈知识治理平台首次入库(P1-P10 + 发布链路模拟验证闭环):

- 治理核心:源目录/变更集/人工审核/发布批次/发布执行(fail-closed 闸口)
- 测试通道:WeKnora 测试 KB 上传/轮询/验收;poll 完成时写入
  parser_generation/index_generation,修复 manual/seed 路径发布闸口永久拦截
- 发布适配器 v071(本地 source=测试角色 / 云端 target=生产角色 模拟验证通过):
  * ES 导出/导入 mapping 自适应(.keyword 子字段、可选 tenant_id)
  * OSS locator 支持嵌套 scheme;chunks.seq_id 由目标序列分配
  * bundle 归档同身份重试原子替换;verifier 按 bundle chunk_type 计数
  * 回滚 job payload 支持 prior_execution_id(strict 解码)
- 三通道发布+回滚演练实测:publish 4/4 verified,检索命中,
  rollback 4/4 rolled_back,目标端 PG is_enabled=false、ES is_enabled=false
- 前端 A·Data-console 风格全站统一,120 用例通过
- 门禁:go vet / go test 全包通过,gofmt 干净
2026-09-30 10:54:06 +08:00

149 lines
9.2 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>解析监控 · 方向B 任务收件箱版 [预览稿·模拟数据]</title>
<style>
:root{--line:#e5e7eb;--ink:#111827;--sub:#6b7280;--bg:#f7f8fa;--fail:#b91c1c;--ok:#0b6e4f;--warn:#b45309;--run:#1d4ed8}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.5 "PingFang SC","Microsoft YaHei",sans-serif}
header{display:flex;align-items:center;gap:14px;padding:12px 20px;background:#fff;border-bottom:1px solid var(--line)}
header h1{font-size:17px;margin:0}
.meta{color:var(--sub);font-size:12px}
button{font:inherit;padding:5px 12px;border:1px solid var(--line);border-radius:6px;background:#fff;cursor:pointer}
button.primary{background:#111827;color:#fff;border-color:#111827}
button.danger{color:var(--fail)}
.preview-tag{margin-left:auto;background:#fef3c7;color:#92400e;border:1px solid #fcd34d;font-size:12px;padding:2px 10px;border-radius:999px}
main{max-width:1400px;margin:0 auto;padding:14px 20px;display:grid;grid-template-columns:250px 1fr;gap:14px;align-items:start}
nav.inbox{background:#fff;border:1px solid var(--line);border-radius:8px;position:sticky;top:14px}
nav.inbox h2{font-size:13px;margin:0;padding:10px 14px;border-bottom:1px solid var(--line);color:var(--sub)}
nav.inbox a{display:flex;justify-content:space-between;align-items:center;padding:9px 14px;border-bottom:1px solid #f1f3f6;text-decoration:none;color:var(--ink);font-size:13px}
nav.inbox a.active{background:#eef2ff;border-left:3px solid #111827;padding-left:11px;font-weight:600}
nav.inbox .n{font-size:12px;padding:0 8px;border-radius:999px;background:#f3f4f6;color:var(--sub)}
nav.inbox a.blocked .n{background:#fee2e2;color:var(--fail)}
nav.inbox a.okall .n{background:#dcfce7;color:var(--ok)}
.work{display:flex;flex-direction:column;gap:14px}
section{background:#fff;border:1px solid var(--line);border-radius:8px}
.shead{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--line)}
.shead h3{font-size:14px;margin:0}
.shead .spacer{flex:1}
.task{display:grid;grid-template-columns:28px 1fr auto;gap:12px;padding:12px 14px;border-bottom:1px solid #f1f3f6;align-items:start}
.task:last-child{border-bottom:none}
.task input{margin-top:4px}
.task h4{margin:0;font-size:14px}
.task .why{font-size:12px;color:var(--sub);margin-top:2px}
.task .chain{margin-top:8px;display:flex;gap:4px;align-items:center;font-size:11px;color:var(--sub)}
.step{padding:2px 8px;border-radius:4px;border:1px solid var(--line);background:#fafbfc}
.step.done{background:#f0fdf4;border-color:#bbf7d0;color:var(--ok)}
.step.bad{background:#fef2f2;border-color:#fecaca;color:var(--fail);font-weight:600}
.arrow{color:#d1d5db}
.act{display:flex;flex-direction:column;gap:6px;align-items:flex-end}
.badge{font-size:12px;padding:1px 8px;border-radius:4px;border:1px solid var(--line);white-space:nowrap}
.badge.add{color:var(--ok)}.badge.update{color:var(--run)}.badge.move_scope{color:var(--warn)}.badge.delete{color:var(--fail)}
.badge.in{background:#eef6ff;border-color:#bfdbfe}.badge.out{background:#f0fdf4;border-color:#bbf7d0}
.errline{margin-top:6px;font-size:12px;color:var(--fail)}
code{font:12px ui-monospace,Consolas,monospace;color:var(--sub)}
.tiny{font-size:12px;color:var(--sub)}
input[type=text]{font:inherit;padding:5px 8px;border:1px solid var(--line);border-radius:6px;width:110px}
footer{display:flex;overflow-x:auto;background:#fff;border:1px solid var(--line);border-radius:8px;font-size:12px}
footer div{padding:8px 16px;border-right:1px solid var(--line);white-space:nowrap}
footer div:last-child{border-right:none}
footer .bad{color:var(--fail)}footer .good{color:var(--ok)}
.empty{padding:26px;text-align:center;color:var(--sub);font-size:13px}
</style>
</head>
<body>
<header>
<h1>解析监控 · 收件箱</h1>
<span class="meta">快照 2026-09-12 08:00</span>
<span class="meta">活跃 Worker <b>2</b> · 队列 等待3/运行4/失败2</span>
<button style="margin-left:auto">刷新</button>
<span class="preview-tag">预览稿 · 模拟数据 · 方向B</span>
</header>
<main>
<nav class="inbox">
<h2>今天需要我做什么(3)</h2>
<a class="active blocked" href="#">需人工处理<span class="n">2</span></a>
<a href="#">等待我确认的差异<span class="n">1</span></a>
<a href="#">处理中<span class="n">4</span></a>
<a class="okall" href="#">今日完成<span class="n">38</span></a>
<a href="#">死信(不可自动重试)<span class="n">1</span></a>
</nav>
<div class="work">
<section>
<div class="shead"><h3>1 个任务需要你出手</h3><span class="spacer"></span><span class="tiny">操作人</span><input type="text" value="姚工"><button class="danger">批量重试所选</button></div>
<div class="task">
<input type="checkbox" checked>
<div>
<h4>CR20A.pdf <span class="badge out">对外</span> <span class="badge update">更新</span></h4>
<div class="why">为什么失败:文档解析返回 422(切片数量=0)· 错误码 <code>validation_failed</code> · 第2次尝试 · 停留164秒。同类文件今天已成功 12 个,可能是该文件本身问题。</div>
<div class="chain"><span class="step done">下载 ✓</span><span class="arrow">→</span><span class="step done">Hash ✓</span><span class="arrow">→</span><span class="step done">OSS ✓</span><span class="arrow">→</span><span class="step bad">文档解析 ✗</span><span class="arrow">→</span><span class="step">上传</span><span class="arrow">→</span><span class="step">索引</span><span class="arrow">→</span><span class="step">完成</span></div>
<div class="errline">建议:先在 WeKnora 手动解析该文件确认格式,再决定是否重试。</div>
</div>
<div class="act"><button>详情/时间线</button><button class="primary">重试</button></div>
</div>
<div class="task">
<input type="checkbox" checked>
<div>
<h4>MG400碰撞检测笔记.pdf <span class="badge in">对内</span> <span class="badge add">新增</span></h4>
<div class="why">为什么失败:索引增强被远端永久拒绝 <code>remote_permanent</code>(5/5 次尝试耗尽,已进入死信)。原因多为 MinerU 容量持续 429。</div>
<div class="chain"><span class="step done">下载 ✓</span><span class="arrow">→</span><span class="step done">上传 ✓</span><span class="arrow">→</span><span class="step done">解析 ✓</span><span class="arrow">→</span><span class="step bad">索引 ✗ 429×5</span></div>
<div class="errline">资源状态:MinerU 当前容量已满 —— 恢复接单后此任务可一键重新入队。</div>
</div>
<div class="act"><button>详情/时间线</button><button class="primary">重新入队</button></div>
</div>
</section>
<section>
<div class="shead"><h3>等待我确认的差异(1)</h3><span class="spacer"></span><span class="tiny">国内工业 09-08 → 09-12 · 共 5 项变化,3 项自动可处理</span></div>
<div class="task">
<input type="checkbox" checked>
<div>
<h4>越疆售后FAQ.xlsx <span class="badge in">对内</span>→<span class="badge out">对外</span> <span class="badge move_scope">范围变化</span></h4>
<div class="why">内容Hash未变,仅标注范围升级;确认后进入发布流程。历史审核:09-02 姚工 标记对内。</div>
</div>
<div class="act"><button>预览文件</button><button class="primary">确认</button><button>驳回</button></div>
</div>
<div class="task">
<span></span>
<div>
<h4>安装指南.pdf <span class="badge move">移动(改名/换目录)</span></h4>
<div class="why">同名同Hash证据充分 → 自动更新路径,不重解析。无需操作。</div>
</div>
<div class="act"><span class="tiny">已自动处理</span></div>
</div>
<div class="task">
<span></span>
<div>
<h4>旧手册.pdf <span class="badge delete">删除</span></h4>
<div class="why">来源侧消失;将随本批差异确认后从测试知识库移除(不删来源文件)。</div>
</div>
<div class="act"><span class="tiny">随批次确认</span></div>
</div>
</section>
<section>
<div class="shead"><h3>处理中(4)</h3><span class="spacer"></span><span class="tiny">无需操作,仅供查看</span></div>
<div class="task"><span></span><div><h4>XVision标定手册.pdf</h4><div class="chain"><span class="step done">下载 ✓</span><span class="arrow">→</span><span class="step done">上传 ✓</span><span class="arrow">→</span><span class="step bad" style="color:var(--run);border-color:#bfdbfe;background:#eff6ff">文档解析中 6分钟</span></div></div><div class="act"><button>详情</button></div></div>
<div class="empty">其余 3 个任务正常排队/处理中…</div>
</section>
<footer>
<div>10s <b class="good">100%</b></div>
<div>1小时·成功 <b class="good">88.9%</b></div>
<div>24小时·成功 <b class="good">96.4%</b></div>
<div>p50 30秒 · p95 30分钟</div>
<div>CPU 42% · 内存 18.6/32GB</div>
<div>WeKnora <b class="good">可达</b></div>
<div>MinerU <b class="bad">429 容量满</b></div>
<div>PostgreSQL <b class="good">可接单</b></div>
</footer>
</div>
</main>
</body>
</html>