Closed
docs: auth status --json 的 token_valid 描述与 omitempty 实际行为不一致 #624
aflyingtoAdd on  18 days agoClosed at  14 days ago
aflyingtoCollaborators
18 days ago Create

背景

  • PR !593 期间发现(git blame 证实由 2026-07-08 的 03f05c8 引入,非 PR !593 造成):docs/COMMANDS.md auth status 节称 --json 模式下 JSON 含 token_valid:false,但 AuthStatus.TokenValid 带 omitempty(pkg/cmd/auth/status/status.go:36),false 时字段整体省略——实际输出永远不会出现 token_valid:false(已实测确认)
  • logged_in:false 半句属实(LoggedIn 无 omitempty)
  • 这是对 AI 代理契约的描述失实:代理按文档预期读取 token_valid 字段会落空

任务

  • 裁定修正方向:改文档(承认 omitempty 现状)或改代码(token_valid 去掉 omitempty,显式输出 false,使文档成立)
  • 按裁定实施并同步 docs/AUTH.md 如有相关描述

验收标准

  • 文档描述与 --json 实际输出逐字段一致,有测试或实测证据
  • 若改代码:--json 契约测试同步更新,评估对既有消费方的兼容影响

影响范围

pkg/cmd/auth/status/(如走代码侧)、docs/COMMANDS.md、docs/AUTH.md

来源: PR !593 处理过程中发现的既有问题

likedislike
AaflyingtoCollaborators
18 days ago Added label: scope/docs, status/triage,type/docs
AaflyingtoCollaborators
18 days ago Close issue
AaflyingtoCollaborators
17 days ago Reopen issue
aflyingtoCollaborators
17 days ago Comments:

误关恢复:本 issue 是 PR !593 评审产生的跟进项,尚未交付。!593 merge 时其 body「后续跟踪 Issues」清单中的裸 issue 编号触发了 GitCode 自动关闭(pr-workflow §5 已记载该行为),与 issue 实际状态无关,现重新打开继续跟踪。后续 PR body 将改用文字描述引用,不再裸写编号。

likedislike
aflyingtoCollaborators
17 days ago Comments:

验证记录

  • 当前版本或分支: main @ 2b2ce1d
  • 验证时间: 2026-10-20
  • 复现命令: GC_TOKEN=stub-invalid ./gc auth status --json;env -u GC_TOKEN -u GITCODE_TOKEN GC_CONFIG_DIR=$(mktemp -d) ./gc auth status --json;grep -n "token_valid" pkg/cmd/auth/status/status.go docs/COMMANDS.md
  • 实际结果: 失败路径输出 {"hostname","logged_in":true,"token_source":"GC_TOKEN"}——无 token_valid 字段(TokenValid 带 omitempty,false 时整体省略);未登录路径仅 {"hostname","logged_in":false};而 docs/COMMANDS.md:301 声称 --json 下会出现 token_valid:false——文档失实确认(logged_in:false 半句属实,LoggedIn 无 omitempty)
  • 预期结果: 文档描述与 --json 实际输出逐字段一致
  • 时间线检查: 本 issue 为 PR !593 处理中发现的既有问题(git blame 证实文档该句由 2026-07-08 的 03f05c8 引入),status_test.go 中 TestStatusRunInvalidTokenJSONReturnsAuthError 的注释已显式标注该缺陷指向"separate follow-up issue"即本 issue;无重复 issue、无先行 PR
  • 结论: 继续修复,裁定走代码侧(去 omitempty 使文档契约成立),理由:①文档描述的是面向 AI 代理的本意契约(状态布尔字段的 false 是有效信息而非缺失,omitempty 属经典 JSON 契约缺陷,缺席与假值不可区分损害机器可消费性);②加字段为纯增量、向后兼容(agent-friendly-cli §2.3 新增 JSON 输出视为增强能力);③改文档侧将把有损契约固化(消费方需自行处理"缺席=假"的歧义)。文档零改动——docs/COMMANDS.md:301 声称的契约即修复后的目标契约,改码后逐字成立
likedislike
AaflyingtoCollaborators
17 days ago Added label: status/verified; Removed label: status/triage
AaflyingtoCollaborators
17 days ago Added label: status/in-progress
AaflyingtoCollaborators
17 days ago Associated pull request
AaflyingtoCollaborators
17 days ago Added label: type/bug; Removed label: type/docs
AaflyingtoCollaborators
17 days ago Added label: status/ready-for-review
aflyingtoCollaborators
17 days ago Comments:

开发进度

  • 当前状态: ready-for-review(PR !597 已完成自检、四角色独立评审两轮全部 approved、双端 CI 全绿,等待人工最终确认与合并)
  • 根因: TokenValid 的 omitempty 使 false 时字段整体省略,docs/COMMANDS.md:301 长期承诺的 token_valid:false 失实——文档为契约、代码偏离(CLAUDE.md 权威边界),裁定代码侧修复(详见验证记录)
  • 主要修改: status.go 一行 tag(状态布尔恒序列化,注释承载裁定三要素)+ 三处测试期望更新 + 成功态三覆盖闭环用例 + COMMANDS.md "恒输出"契约表述收紧
  • 影响范围: 仅 auth status --json 失败/未登录场景新增一个字段;文本路径、退出码、stderr、其他字段不变;纯增量向后兼容
  • 单元测试: go test ./... 163 包全部通过;红绿证明经测试评审 -overlay 独立复现;三态覆盖闭环(not-logged-in/invalid/success),status 覆盖率 90.1%→91.4%
  • 构建: go build 通过
  • 实际命令验证: 失败/未登录两路径 token_valid:false + 退出码 4 实测;docs/COMMANDS.md 声明逐字成立;regression exit 0;系统测试通过
  • 安全影响: 凭证路径与值字段零触碰(安全评审源码级核实);无敏感信息披露
  • 文档同步: COMMANDS.md 评审轮收紧为"恒输出"表述(三态实测背书);AUTH.md 无字段级表述无需跟随(文档评审判定)
  • 风险或未覆盖项: risk/high(auth 域),合并前需人工最终确认;外部整串精确匹配消费方知会已入 PR 正文(仓内零此类消费方)
  • 关联 PR: !597
likedislike
AaflyingtoCollaborators
14 days ago Close issue
AaflyingtoCollaborators
14 days ago Added label: status/merged