Skip to content

对外文档/契约 4 条口径待裁决:owner 取值域 / AGENTS 下沉 / phase 缺失 / Mobile 口径 #2258

Description

@DeliciousBuding

来源:round-66 lane F(只读探索,对外文档技术化/可读化 + 架构叙述自洽性)。9 条发现里主机已逐条抽验 5 条并在当轮修掉,剩 4 条需要裁决或需要跨文件搬动规则,因此单独留档,不混进那个 PR。

完整证据(每条含原文锚点、判据、复现命令、修法写集、门禁影响、自评脆度)已落盘本机:/root/agenthub-dev/lane-artifacts/round-66/lane-f-REPORT.md(329 行)+ lane-f-PROGRESS.md + lane-f-BLOCKED.md。lane F 全程只读,交卷时 git status --short 为空、HEAD 仍 4ca8203e

主机复核状态一览

编号 主张 主机是否独立复核 本轮处置
P1-1 docs/governance/known-flaky.md:46 的 Go 车道 job ID 过期(go-edge/go-hub#2251 起不再跑 go test),违反本文件 :24 自己的字段合同,并与 AGENTS.md L0 行的正确映射分岔 ✅ 已核(sed 原文 + checks.yml job 全集比对) 已修
P1-2 api/openapi.yamlhubHealth 正文让读者 "Use /health/live",但该端点无 path 条目、无 schema,且被 verify-openapi-contract.py 的 ALLOWLIST 刻意排除 ✅ 已核(grep -n "^ /health" api/openapi.yaml 只有 /health;ALLOWLIST 原文含 GET /health/live 已修(改为明说 liveness/readiness 子路由是有意不入契约的 ops 探针)
P2-3 「产品术语」4 个概念在 AGENTS.md §3 / docs/architecture.md 产品模型 / api/README.md 三处整表复制且已分岔(Execution Target 取值域逐处退化:四类具名 target → 小写泛称 → 完全消失),而 api/README.md 一边声明 SSOT 在 AGENTS 一边改写含义列 ✅ 已核(三处原文逐字比对) 已修(两处副本压成指针 + 只留各自增量:架构侧 3 个新概念、API 侧示例字段列)
P2-5 docs/architecture/11-protocol-capability-mapping.md:19 声称端点级取值 contract 存在 ✅ 已核(grep -o "x-agenthub-status: [a-z-]*" api/openapi.yaml | sort | uniq -c = implemented 212 / planned 75 / contract-draft 1,且那 1 处在 schema 级 AgentHubAgentSpec,端点级零出现) 已修
P3-7 zh/en README 对同一能力给出不同强度主张:README.md「本地执行不依赖 Hub」vs README_EN.md "local execution works offline"(docs/architecture/08-outbound-http.mdmodel_provider 出站证伪 offline) ✅ 已核(两行原文 + i18n 规则「zh/en 语义一致」) 已修(EN 改为 does not require the Hub)
P2-4 x-agenthub-owner 取值域全仓无文档定义 + 4 个 workspace 端点标已废弃组件 Runner ⚠️ lane 报告,主机未逐字复核 本 issue 留档,需裁决
P2-6 AGENTS.md 284/300 行的具体下沉方案 ⚠️ lane 报告,主机未逐字复核 本 issue 留档,需裁决
P3-8 x-agenthub-phase 在 284 个 operation 里缺 166 个(58%),而 api/README.md §阶段标记 未声明适用范围 ⚠️ lane 报告,主机未逐字复核 本 issue 留档
P3-9 Mobile 对外口径分岔:README 双语「三端原生 / Mobile 装配中」vs docs/architecture.md「fixture/边界验证 lane,非 release candidate」 ⚠️ lane 报告,主机未逐字复核 本 issue 留档,需裁决

P2-4 x-agenthub-owner 取值域无 SSOT,4 个 workspace 端点标已废弃的 Runner

主张:结构化声明字段的取值域只存在于验证脚本的隐式行为里(verify-openapi-contract.py 只认 owner == "Hub" and status == "implemented" 才拉进 router 比对),文档面唯一提及是 api/conventions.md 的一行示例。实况取值分布 {Hub, Edge, Runner},其中 Runner 命中 4 个 /v1/workspaces/**planned operation;而 AGENTS.md 明写「早期独立 runner 目录已废弃」、workspace 的实现全在 hub-server(handler/service/repository/model + router 以 /web/projects* 暴露)、edge-server/internal/runners/ 只有 registry.goapi/README.md 的模块边界表又把 Workspace 归 Edge。四方矛盾。

代价:照 owner 找归属的实现者会去 edge-server/internal/runners/(无 workspace 逻辑),大概率在 Edge 新起第二套 workspace 文件读取——正是「禁止在客户端再分叉 REST 实现」要防的分叉。

复现(lane F 原文,主机未跑):

python3 - <<'PY'
import yaml,collections
d=yaml.safe_load(open("api/openapi.yaml",encoding="utf-8"));M={"get","post","put","patch","delete"}
c=collections.Counter();run=[]
for p,it in d["paths"].items():
  for m,op in it.items():
    if m in M and isinstance(op,dict):
      c[op.get("x-agenthub-owner")]+=1
      if op.get("x-agenthub-owner")=="Runner": run.append((p,m,op.get("x-agenthub-status")))
print(dict(c));[print(x) for x in run]
PY
grep -rn "x-agenthub-owner" --include=*.md api/ docs/ AGENTS.md README.md
ls edge-server/internal/runners/; find hub-server -ipath '*workspace*' -name '*.go' -not -name '*_test.go'

为什么需要裁决而不是直接改:Workspace 的归属是产品决策——「元数据归 Hub、文件内容归 Edge」还是「整体归 Hub」,两种裁决会导出不同的 planned 端点实现位置。裁决前改 owner 只是把矛盾换个方向。

裁决后的写集(lane F 估算):api/openapi.yaml 4 行 owner + api/README.mdapi/conventions.md 增 3-5 行取值域定义(x-agenthub-owner ∈ {Hub, Edge}、端点级 x-agenthub-status ∈ {implemented, planned}、schema 级另允许 contract-draft)。注意:若裁决为 Hub,必须保持 status: planned,否则会被拉进 router 比对而 FAIL(router 无 /v1/workspaces/*)。

P2-6 根 AGENTS.md 284/300 行:可下沉的具体行与门禁影响

主张:行数预算只剩 16 行,下一轮任何规则新增都会撞顶。lane F 给出逐行下沉方案:测试速查段(8 行)→ developer-quickstart、发布 tag SOP(3 行)→ 对应 governance/发布文档、一段治理细则(7 行)→ governance,净回收约 14-15 行;并逐条列出搬动会触发的 5 项 doc-ssot 检查(行数预算、路径存在性、禁止对 AGENTS 做带编号章节引用、4 个锚点句、仓外链接规则)。

为什么需要裁决:搬动的是规则正文的归属位置,属于治理面决策;且必须与 P2-3 同类问题一起看(先定「谁是 SSOT」,再定「副本长什么样」),否则只是把巨石文档切成几块互相复制的小文档。

P3-8 x-agenthub-phase 缺 166/284,且适用范围未声明

主张:缺失的 166 个恰好覆盖全部 /client·/web·/edge 现实面端点,而 api/README.md §阶段标记 没有声明「phase 只标 /v1/** 设计面」这一适用范围。反证条件(lane F 自评最脆的一条):若「phase 只用于设计面」本就是既有共识且 api/README.md 别处已暗示,则本条降级为「适用范围未写明」的文档缺口,而不是覆盖率缺陷。

处置建议:先裁决 phase 的适用范围,再决定是「补 166 个标记」还是「在 api/README.md 明写范围」。不要在没有裁决前批量补标记。

P3-9 Mobile 对外口径分岔

主张:README 双语都说「三端原生 / Mobile 装配中」,docs/architecture.md 说 Mobile 是「fixture/边界验证 lane,非 release candidate」。两者对外的强度不同。lane F 主动标注:关键佐证 RELEASE_MOBILE_ENABLED 的默认值未核实,因此本条在核实该默认值之前不足以定性谁对谁错。

处置建议:先核实 RELEASE_MOBILE_ENABLED 默认值与 mobile 车道的实际门禁地位,再统一对外口径(这属于「演示诚实」规则面,不允许 README 说得比实况强)。

验收(针对本 issue 剩余 4 条)

  1. 每条动手前必须先在本机复现 lane F 的判据(主机尚未逐字复核这 4 条,只有前 5 条是主机验过的);复现不成立就在本 issue 写「不成立 + 反证原文」并销案,不许照着报告直接改。
  2. P2-4 / P2-6 / P3-9 属于需要裁决的条目:没有管理员明确裁决前不得改动 owner 取值、不得搬动 AGENTS.md 规则正文、不得改 Mobile 对外口径
  3. 任何文档改动必须过 verify-doc-ssot.py;触碰 api/openapi.yaml 还必须过 verify-openapi-contract.py(当前基线 153 / 156 / 3 / 0)。

负向约束

  • 不许把「已修 5 条」当成本 issue 已关闭:本 issue 只为剩余 4 条存在。
  • 不许为了凑条数把 lane F 报告里「此路不通」的 11 条(诚实墓碑、外迁台账、已自注条目、0 坏链结论)重新提出来当缺陷。
  • 不许在文档里新增对 AGENTS.md 的带编号章节/行号引用(doc-ssot 有对应检查)。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions