6.9 KiB
ADR-0404:可选本机 MCP Run 日志摘录产品入口与私有文件边界
- 状态:Accepted
- 日期:2026-08-14
- 关联 RFC:QL-RFC-0001 D-312、Phase 2
- 关联 ADR:ADR-0347、ADR-0351、ADR-0364、ADR-0366、ADR-0377、ADR-0401、ADR-0403
问题
ADR-0403 已交付 qinglong.run.log.excerpt@1.0.0 的 profile-neutral Trusted Tool kernel,
但没有产品入口。失败日志解释要成为可用的本机 AI 能力,显式启用 ql3-mcp 的 Edge 与
Standalone 用户需要经过现有身份、Policy、审计和 credential fence 读取同一份 Local Run
Attempt 私有日志;默认未启用 MCP 的路由设备则不能承担额外依赖、常驻内存或攻击面。
最直接的组合方式是让 Local MCP 依赖 @qinglong/local-execution/artifact-read。产物审计证明该
方案会把 local-process、scheduler 与 croner 一起拉入只读 sidecar:Edge MCP 达到
7,469,105 bytes、816 files、228 modules,Standalone MCP 达到 7,469,249 bytes、816 files、
228 modules。MCP 并不拥有启动、停止或调度进程的 authority,这个依赖方向既扩大低配成本,也
让只读产品边界对执行实现产生错误耦合。
同时,单独为一个 reader 新建第十九个 workspace package,或把 reader 放回 package src 根目录,
都会重现已经由 ADR-0364/0366 关闭的单文件微包与根层平铺问题。
决策
- 把
qinglong.run.log.excerpt@1.0.0注册到显式可选的edge-mcp|standalone-mcpstdio product surface。默认 Edge/Standalone application 不安装、不导入也不启动该入口;不增加网络 listener、daemon、timer、watcher、cache、migration、表或索引。 - 每次调用固定执行 credential authentication → exact
tool.call:qinglong.run.log.excerpt与artifact.readPolicy → durable Security Audit → credential/Pepper fence confirm → 有界日志读取。审计 reason 固定为tool_qinglong_run_log_excerpt,失败统一收敛为run_log_excerpt_unavailable;日志正文、 Artifact ID、路径和 credential 不写入审计。 - MCP 配置升级到
qinglong/local-mcp-server@v2,新增必填、规范化且位于deploymentRoot下的artifactRoot。它必须与 Local application 的 Run Attempt Artifact 根 完全一致,并与 database、keyring、credential path 两两不同。旧@v1失败关闭;MCP 不从 database path、当前目录或约定默认值猜测日志根。 - SQLite MCP read authority 只增加 Project-scoped
findAttemptById与 retentioninspect, 复用同一 connection 和既有 repository;不取得 Run/Attempt mutation、目录扫描或 retention 删除 authority。生产组合复用 Runtime CoreRunAttemptLogReadService和 ADR-0403 的固定 Edge 4 KiB/Standalone 8 KiB 双读取安全投影。 LocalRunAttemptLogRangeReader的唯一实现归入既有@qinglong/local-command-file/artifact-read。该 package 的职责收敛为“本机私有、有界文件 authority”,根层仍只有公开转发入口,command JSON 与 Run log reader 分别位于protocol/、artifact-read/;它只允许导入 Runtime Core 的run-attempt-log-read纯契约。@qinglong/local-execution/artifact-read保留兼容 re-export,使现有 application 与测试无需 改写调用面;依赖方向变为 execution → private-file,而不是 MCP → execution。workspace 保持 18 个 package,不创建单文件 package,也不把实现平铺回src根层。- 交互式 MCP 调用只持久化安全 admission,不冒充内部 Trusted Tool 的 StepRun、Trace、 encrypted completion 或模型调用。日志继续无条件标记为不可信数据且无行动权;Cluster Copilot、最终 Prompt builder 与模型 egress policy 仍走独立 Gate。
低配与集群影响
- 默认 Edge/Standalone 仍为 2,589,812/2,589,890 bytes、315 files、56 modules;未启用 MCP 的 路由设备没有新增常驻组件或制品成本。
- Edge/Standalone MCP 为 7,315,930/7,316,038 bytes、801 files、226 modules,RSS 增量为
38,420,480/39,567,360 bytes,均低于 16 MiB/1,536 files/48 MiB 门;闭包不含
local-execution、local-process或croner。 - Cluster 不复用本机 SQLite/file composition。后续 Cluster 产品入口应组合现有 PostgreSQL/S3 authority,并独立证明认证、Policy、durable audit、credential fence 和 Trusted Tool completion; 本 ADR 不让 Cluster Control 或 Worker 导入本机私有文件 package。
被否决方案
- MCP 直接依赖
local-execution:实测污染只读制品并引入进程/scheduler 实现,违反 authority 与部署闭包最小化。 - 新建
local-artifact-readerworkspace package:只有一个实现文件,增加 importer、lockfile、 SBOM 和维护面,不能证明新的独立生命周期。 - 把 reader 平铺到 MCP 或 package 根层:复制 Local Artifact 真源,或逆转已完成的 package 内部领域布局治理。
- 继续使用 v1 并推导 Artifact 根:部署路径可能变化,猜测会读错实例或越过显式 authority。
- 让客户端传 Artifact ID/path/range:恢复任意读取和循环分页能力,破坏 ADR-0403 的固定预算。
- 在 audit 中保存日志片段:扩大 credential/业务秘密的持久泄露面,且不属于 admission 证据。
当前验证
-
Local MCP 48/48:覆盖 Tool 发现、真实安全顺序、双 range read、脱敏、taint、无行动权、无 Artifact/cursor 泄露,以及真实 SQLite + 私有 Artifact stdio E2E。
-
Local Execution 41/41,证明兼容 re-export 与既有 application 日志读取不变;私有文件 package 3/3,依赖防火墙定向 54/54。
-
package boundary 与 dependency audit 零 finding;workspace 仍为 18 package,
local-command-file为 3 source、1 root/2 nested,singleSourcePackages=[]、shallowSourcePackages=[]。 -
默认 Edge/Standalone 与两档 MCP 的四个关键产物画像均通过,精确数据见“低配与集群影响”。
-
最终 18-package clean build/test 退出 0;backend 1,209 项为 1,207 pass、2 条平台条件 skip、0 fail。package/dependency/Edge import/Cluster deployment 审计全部零 finding。
-
14 个 Local Profile artifact 全部通过;除两档 MCP 的显式增量外,默认与既有组合均保持门内。
-
PostgreSQL 18.4 arm64 HA 125/125 Gate 通过,timeline
1→2,报告 SHA-256 为29cd77d80737a3b1ab686c998d05a78c52deffd8add3b31d8035756d5dfcc433;独立证据审计 零 finding,专用容器、网络与卷零残留。
后续
- 为结构化 Copilot Prompt 增加不可混淆 delimiter、residual sensitivity egress policy 与模型 completion 证据;
- 产品化 Cluster S3 日志摘录,但不得借机让 Worker 获得模型投影或数据库控制面 authority;
- 在固定物理 Edge 设备记录单次日志读取延迟与 active RSS,仓库内画像不替代实机支持结论。