已开启
refactor: extract shared y/N confirmation #605
aflyingto创建于 8 天前
refactor: extract shared y/N confirmation #605
已开启
合并受阻
aflyingto
7 天前 评论:
7 天前 评论:
评审结论
- 评审主体类型: 多个独立 Codex 子 Agent
- 评审主体标识: 8 个独立 Codex 子 Agent(第一轮 4 个基础角色 + 第二轮 4 个深度角色)
- 评审范围:
origin/main...refactor/issue-622@3182a37c2c9b1080a58b705c622f4392e54e0a8d - 发现: 第一轮测试评审和第二轮架构/契约/体验评审发现问题;全部已在
3182a37修复并复审通过 - blocker: 无
- 安全检查: 通过;未读取或输出 token,测试与文档无真实凭证
- 测试与证据检查: 通过;本地全量测试、构建、pre-commit、核心回归、系统测试和真实命令验证均完成
- 远端 CI: run
e05035113d264aceb9d0dcc9e59bb61d对应 head3182a37c2c9b1080a58b705c622f4392e54e0a8d,五个 job 全部完成 - 文档同步检查: 通过;
docs/AUTH.md、docs/COMMANDS.md、README.md、AGENTS.md与帮助文本已同步 - 结论: 可以批准
多角色独立执行主体评审汇总
- 风险分级:
risk/high
第一轮评审结论
| 评审角色 | 初审结论 | 主要发现与处置 |
|---|---|---|
| 代码审查 | approved | 未发现问题;建议补充无换行输入与 Reader 契约测试 |
| 安全审查 | approved | P2:自定义主机登出不应提示通用环境 token;已在 3182a37 收窄为默认主机 |
| 测试审查 | needs-improvement | P1:缺少 auth logout 真实命令验证;P2:缺少 --with-token 共享 reader 测试;均已补齐并复验 |
| 文档审查 | approved | P2:认证优先级表述过宽;已改为默认主机环境变量优先、非默认主机本地认证 |
第二轮评审结论
| 评审角色 | 初审结论 | 主要发现与处置 |
|---|---|---|
| 架构一致性 | needs-improvement | P1:Windows 输出不可执行的 unset;已下沉到 envtoken.ShortWarning/sessionClearCommand |
| API 契约 | needs-improvement | P1:hostname 未校验归一化;已在确认前校验并返回 ExitUsage;P2:入口文档已同步 |
| 边界条件 | approved | P2:补无换行 EOF、nil Reader、默认自定义主机测试;已全部补齐并复审通过 |
| 用户体验 | needs-improvement | P1:短提示误导“彻底登出”;已明确仅当前终端并提示持久定义;P2:帮助文本已同步 |
发现问题及修复情况
| 问题 | 修复提交 | 验证 |
|---|---|---|
| Windows 登出环境变量提示不可执行 | 3182a37 |
单元测试 + Windows 真实命令验证 |
| 自定义主机登出误报环境 token | 3182a37 |
单元测试 + 自定义主机真实命令验证 |
auth logout --hostname 未校验归一化 |
3182a37 |
单元测试 + 退出码真实命令验证 |
--with-token 连续输入可能丢失缓冲 |
3182a37 |
TestLoginWithTokenSharesConfirmationReader |
| 无换行确认输入可能被误改语义 | 3182a37 |
TestConfirmYesNoNonEmptyEOFWithoutNewlineFailsClosed |
| 文档与帮助未同步 host/平台语义 | 3182a37 |
文档审查 + auth logout --help 复核 |
后续跟踪
- auth/config/git 错误分类的历史一致性继续由既有错误处理专项跟踪,PR body 使用
Refs #336仅引用不关闭。
总体评审结论
- approved
- 评审执行主体: 8 个独立 Codex 子 Agent
- 评审角色: 代码、安全、测试、文档、架构、契约、边界、用户体验
- 第二轮复审后未发现 P0/P1/P2 遗留问题


作者自检
ConfirmYesNo组件;login 复用该组件并保留共享 reader;logout 复用envtoken.SetEnvVars/ShortWarning,把默认主机环境变量提示迁移到 stderr,并按平台输出当前终端清理命令pkg/cmdutil、pkg/cmd/auth/login、pkg/cmd/auth/logout、相关测试与认证文档go test ./pkg/cmdutil ./pkg/cmd/auth/login ./pkg/cmd/auth/logout通过;go test ./...通过go build -o ./gc.exe ./cmd/gc通过./scripts/regression-core.sh通过;go test -tags=system ./tests/system通过;隔离GC_CONFIG_DIR后真实执行auth logout --yes,覆盖无环境变量、仅GC_TOKEN、双变量、自定义主机、大小写归一化和无效 hostname 退出码docs/AUTH.md与docs/COMMANDS.mdrisk/high,涉及认证确认逻辑与输出通道e05035113d264aceb9d0dcc9e59bb61d对应 head3182a37c2c9b1080a58b705c622f4392e54e0a8d,lint/security/test/build/package 全部完成变更内容
pkg/cmdutil新增共享ConfirmYesNo组件,统一 y/N 确认的读取、大小写归一和默认拒绝语义auth login的环境变量覆盖保存门迁移到共享组件,同时保留同一条 stdin 缓冲流,避免一次性粘贴 token + 确认答案时丢输入auth logout的默认主机环境变量提示写入 stderr,基于envtoken.SetEnvVars只列出实际设置且非空的变量,并通过envtoken.ShortWarning输出 Unix/Windows 可执行的当前终端清理命令auth logout现在会归一化并校验 hostname,无效值返回ExitUsage,不会 no-op 后误报成功cmdutil、auth logout、envtoken的单元测试,覆盖 y/N 输入、共享 reader、错误传播、非交互拒绝、无换行 EOF、提示通道、变量列表、平台命令、hostname 校验与归一化docs/AUTH.md、docs/COMMANDS.md、README.md、AGENTS.md与auth logout帮助文本关联
Refs #336
Closes #622