Files
knowledge-governance/docs/previews/refresh-2026-09-12/c-current-polish.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

133 lines
8.7 KiB
HTML

<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>方向C · 现行轻打磨(解析监控)</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Noto+Sans+SC:wght@400;500;700&display=swap">
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:Inter,"Noto Sans SC","PingFang SC",system-ui,sans-serif;background:#f4f7fa;color:#16324f;font-size:13.5px;line-height:1.55;-webkit-font-smoothing:antialiased}
.mono{font-family:"SF Mono",Menlo,monospace;font-variant-numeric:tabular-nums}
.app{display:grid;grid-template-columns:224px 1fr;min-height:100vh}
.side{background:#12365a;color:#b8cfe0;padding:20px 0;display:flex;flex-direction:column}
.side .brand{padding:0 18px 16px;border-bottom:1px solid #1e4a75;display:flex;gap:10px;align-items:center}
.side .brand .dot{width:30px;height:30px;background:#2dd4bf;color:#04211d;display:grid;place-items:center;font-weight:700;border-radius:6px}
.side .brand strong{color:#fff;font-size:14px}
.side .brand span{display:block;font-size:11px;color:#7a9ab5;margin-top:2px}
.side nav{padding:14px 10px;display:flex;flex-direction:column;gap:2px}
.side nav a{color:#a8c3d8;text-decoration:none;padding:8px 12px;font-size:13px;border-radius:6px;display:flex;justify-content:space-between;align-items:center}
.side nav a:hover{background:#1a4370;color:#e3eef5}
.side nav a.on{background:#1e4a75;color:#fff}
.side nav a em{font-style:normal;font-size:11px;background:#0f2c49;padding:1px 7px;border-radius:9px;color:#7aa3c2}
.side nav a.on em{background:#2dd4bf;color:#04211d}
.side .foot{margin-top:auto;padding:14px 18px;border-top:1px solid #1e4a75;font-size:11px;color:#7a9ab5}
.side .foot .live{color:#34d399}
.main{min-width:0}
.page{max-width:1180px;padding:26px 30px 48px}
.page h1{font-size:22px;font-weight:700;margin-bottom:5px;letter-spacing:-.01em}
.page .sub{color:#60758b;font-size:13px;margin-bottom:22px}
.tiles{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:24px}
.tile{background:#fff;border:1px solid #dde6ee;border-radius:10px;padding:14px 16px;box-shadow:0 1px 3px rgba(15,45,75,.05)}
.tile .lbl{font-size:12px;color:#60758b;margin-bottom:8px}
.tile .num{font-size:26px;font-weight:700;color:#0d2a45;font-variant-numeric:tabular-nums}
.tile.a-fail{border-top:3px solid #e75252}.tile.a-wait{border-top:3px solid #f3a712}.tile.a-run{border-top:3px solid #1677ff}.tile.a-done{border-top:3px solid #2aa876}.tile.a-dead{border-top:3px solid #94a3b8}
.panel{background:#fff;border:1px solid #dde6ee;border-radius:10px;overflow:hidden;box-shadow:0 1px 3px rgba(15,45,75,.05)}
.panel .head{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid #e8eef4}
.panel .head h2{font-size:14px;font-weight:700}
.panel .head .hint{font-size:12px;color:#8aa0b2}
.panel .head .act{margin-left:auto;display:flex;gap:8px}
.btn{border:1px solid #d3dde5;background:#fff;color:#16324f;padding:6px 13px;font-size:12.5px;border-radius:7px;cursor:pointer;font-weight:500}
.btn:hover{background:#f3f7fb}
.btn.pri{background:#1677ff;border-color:#1677ff;color:#fff;font-weight:600}
.btn.pri:hover{background:#0d63d9}
.task{padding:14px 18px;border-bottom:1px solid #eef2f6;display:grid;grid-template-columns:22px minmax(0,1fr) auto;gap:14px;align-items:start}
.task:last-child{border-bottom:0}
.task h4{font-size:13.5px;font-weight:600;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.scope{font-size:11px;padding:2px 8px;border-radius:10px;font-weight:600}
.scope.in{background:#e6efff;color:#1d4ed8}
.scope.out{background:#e2f6ee;color:#0b6e4f}
.chg{font-size:11px;padding:2px 8px;border-radius:10px;font-weight:600}
.chg.add{background:#d9f2e4;color:#0b6e4f}.chg.upd{background:#dde9fd;color:#1d4ed8}
.why{font-size:12.5px;color:#a82323;margin-top:5px}
.why code{background:#fdecec;padding:1px 7px;border-radius:5px;font-size:11.5px}
.chain{display:flex;gap:5px;margin-top:9px;flex-wrap:wrap;font-size:11.5px;color:#8aa0b2}
.chain span{padding:3px 10px;border-radius:12px;background:#f3f6f9;border:1px solid #e3eaf0}
.chain span.done{background:#e2f6ee;color:#0b6e4f;border-color:#bde3d3}
.chain span.bad{background:#fdecec;color:#b91c1c;border-color:#f3c0c0;font-weight:600}
.advice{font-size:12px;color:#60758b;margin-top:7px}
.task .ops{display:flex;flex-direction:column;gap:6px;align-items:flex-end}
.task-id{font-family:"SF Mono",Menlo,monospace;font-size:11px;color:#a4b4c2}
.strip{margin-top:24px;background:#fff;border:1px solid #dde6ee;border-radius:10px;display:flex;flex-wrap:wrap;font-size:12px;color:#60758b;overflow:hidden}
.strip div{padding:10px 18px;border-right:1px solid #eef2f6}
.strip div b{color:#0d2a45;font-weight:600}
.strip .bad{color:#b91c1c}.strip .good{color:#0b6e4f}
.strip div:last-child{border-right:0}
</style>
</head>
<body>
<div class="app">
<aside class="side">
<div class="brand"><div class="dot">治</div><div><strong>知识治理</strong><span>governance console</span></div></div>
<nav>
<a href="#">来源与目录 <em>8</em></a>
<a href="#" class="on">解析监控 <em>3</em></a>
<a href="#">发布管理 <em>2</em></a>
<a href="#">系统设置</a>
</nav>
<div class="foot"><span class="live">●</span> worker-01 心跳 4s 前<br>快照 2026-09-12 10:41</div>
</aside>
<div class="main">
<div class="page">
<h1>需人工处理</h1>
<p class="sub">失败原因、处理链定位与建议直接放在卡片上。勾选后可批量重试,死信重新入队会保留原任务与全部审计行。</p>
<div class="tiles">
<div class="tile a-fail"><div class="lbl">失败</div><div class="num">2</div></div>
<div class="tile a-wait"><div class="lbl">停滞</div><div class="num">1</div></div>
<div class="tile a-run"><div class="lbl">处理中</div><div class="num">4</div></div>
<div class="tile a-done"><div class="lbl">已完成</div><div class="num">48</div></div>
<div class="tile a-dead"><div class="lbl">死信</div><div class="num">1</div></div>
</div>
<div class="panel">
<div class="head"><h2>失败任务</h2><span class="hint">3 条 · 按失败阶段排序</span><span class="act"><input placeholder="操作人" style="border:1px solid #d3dde5;border-radius:7px;padding:5px 10px;font-size:12.5px;width:110px"><button class="btn">仅看中英对照</button><button class="btn pri">批量重试所选 (2)</button></span></div>
<div class="task">
<div style="margin-top:3px"><input type="checkbox" checked></div>
<div>
<h4>CR20A 电气规格说明书.pdf <span class="scope out">对外</span> <span class="chg upd">更新</span></h4>
<div class="why">错误码 <code>remote_parse_failed</code> · 第 2 次尝试 · 已停留 71.1小时 · 失败于 文档解析</div>
<div class="chain"><span class="done">下载 ✓</span><span class="done">Hash ✓</span><span class="done">OSS ✓</span><span class="bad">文档解析 ✗</span><span>WeKnora 上传</span><span>索引</span><span>完成</span></div>
<div class="advice">建议先在 WeKnora 手动解析该文件确认格式,再决定是否重试。 <span class="task-id">cs-1 · tp-failed</span></div>
</div>
<div class="ops"><button class="btn pri">重试</button></div>
</div>
<div class="task">
<div style="margin-top:3px"><input type="checkbox" checked></div>
<div>
<h4>伺服驱动器调试手册.docx <span class="scope in">对内</span> <span class="chg add">新增</span></h4>
<div class="why">错误码 <code>mineru_timeout</code> · 第 1 次尝试 · 已停留 45分钟 · 失败于 索引 / 增强</div>
<div class="chain"><span class="done">下载 ✓</span><span class="done">Hash ✓</span><span class="done">OSS ✓</span><span class="done">文档解析 ✓</span><span class="done">WeKnora 上传 ✓</span><span class="bad">索引 ✗</span><span>完成</span></div>
<div class="advice">多为 MinerU 容量或超时问题,确认服务恢复接单后重试。 <span class="task-id">cs-3 · tp-044</span></div>
</div>
<div class="ops"><button class="btn pri">重试</button></div>
</div>
</div>
<div class="strip" style="margin-top:22px">
<div>MinerU <b class="good">可接单</b></div>
<div>WeKnora 测试 <b class="good">可接单</b></div>
<div>PostgreSQL <b>12ms</b></div>
<div>队列 <b>3 待 / 4 跑 / 0 重试</b></div>
<div>CPU 42% · 内存 18.6/32.0GB</div>
</div>
</div>
</div>
</div>
</body>
</html>