Files
qinglong/docs/adr/ADR-0532-native-console-log-window-navigation.md

36 lines
4.0 KiB
Markdown
Raw Permalink 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.
# ADR-0532:原生 Console 的日志窗口导航
- 状态:AcceptedD-430 exact Console 双架构阶段实物已交付)
- 日期:2026-09-04
- 关联:QL-RFC-0001 D-430、ADR-0515、ADR-0531
## 问题
原生 3.0 Console 已能创建任务、配置定时与加密凭据,但日志超过首个 32 KiB 后仍要求部署者离开页面自行调用 API。旧面板兼容不是长期产品目标,本切片在原生页面补齐日志观察的用户操作闭环。
## 决策
- 在既有 Attempt log API 上增加“下一片段”“回到开头”“刷新当前片段”。每次用户动作只读取一个 32 KiB 窗口并替换 `<pre>`,不累计历史窗口、不自动翻页、不新增轮询或全文下载。
- 翻页固定选择时的 Project、Run 与 Attempt;刷新当前片段不会悄然切换到另一个 Attempt。重新选择 Run 才重新读取 latest Attempt、Run/Event/Step 事实。
- 验证响应 schema、Project/Run/Attempt 身份、字节范围、解码字节数与前进 cursor。异常或停滞 cursor 不生成下一页操作;pending、retired、masked absence 和 unavailable 保持显式状态。
- 选择请求使用不含凭据的内存代次标记;旧请求在切换 Run、离开运行页、断开连接或同一 Run 重选后不能覆盖当前详情。翻页按钮请求中禁用且合并重复点击,未连接到当前文档的旧节点不能启动新请求。
- 字节分片仍遵循既有 API,UTF-8 跨片字符可能显示替换符,页面明确说明;不伪造完整行、不保存跨窗口解码缓冲、不修改日志字节偏移。
## 部署边界与验证
不新增 package、dependency、schema、migration、后端 route、数据库连接、listener 或后台任务。默认 headless 与独立 Cluster Console 不变,Local 原生资产仍受单文件 96 KiB / 总计 192 KiB 限制。
客户端行为测试直接执行发布的 `console.js`,覆盖分页替换、范围/身份漂移、连续点击、过期响应、错误状态、空窗口和 UTF-8 字节边界。真实 Chromium 预览已验证首片段 → 下一片段 → 回到开头,DOM 始终只有一个日志窗口,中文与 `<script>` 字面文本安全展示,三个动作只产生三个日志 GET。
本地验证:客户端行为测试 6/6、完整 Local API 99/99、后端 1685 项(1683 pass / 2 环境条件 skip / 0 fail),Local image 与 package boundary audit 均 compatible。原生 JS 为 74,695 bytes,三项资产合计 106,216 bytes,均在既有硬上限内。
## 阶段实物
提交 `12ed38b7d72fe6366ad8f1ac84aebb1bb772f3b5` 的主 CI [run 33793623200](https://github.com/whyour/qinglong/actions/runs/33793623200) 为 42 success / 3 expected skip / 0 fail;独立 Kubernetes deployment [run 33793623184](https://github.com/whyour/qinglong/actions/runs/33793623184) 成功。显式 Console artifact [run 33793687627](https://github.com/whyour/qinglong/actions/runs/33793687627) 为 43 success / 2 expected skip / 0 fail。
该 run 交付 amd64/arm64/milestone artifact `9909229721`/`9909131639`/`9909265138`GitHub ZIP 大小为 `239032779`/`234432459`/`6797` bytesUTC 保留至 2026-10-03。三份实际下载产物的 `SHA256SUMS` 全部通过,两个 bundle v8 auditor 和 milestone v7 auditor 均返回 `compatible=true`,绑定相同 source revision、Console variant、workflow/run/attempt 与两个架构。
本机还将两个下载 bundle 的 manifest SHA-256 与 milestone 索引逐一比对,并直接读取 Docker archive 中 Application 最终层的 `console.js`;两者都与该提交的源码逐字节一致,均为 74,695 bytesSHA-256 为 `ad1a7d1e8f85f158268f9375b2db5e8c52fbb03ada5888a973f57020c36d4c02`。这确认日志导航确实进入镜像,而非只改了标签或文档。本机执行的是下载后离线校验,不是额外启动真实部署。
此前 ADR-0531 的 `09ef1745` artifact 不包含本切片;本次 `12ed38b7` artifact 同样不含后续 D-431 列表分页。阶段实物仍是 `alpha_candidate_not_public_release`,不声明完整 3.0、Cluster 页面或生产升级已经完成。