feat: 易用性圆桌评审 8 条 backlog 落地 + 2 个真机 bug 修复 - #54
Merged
Conversation
多角色评审(5 用户画像圆桌 → PM → 技术经理 → 资深研发/测试)产出 43 条
痛点、16 条 backlog;本次落地全部 8 条 implement-now 并经真机验证。
资金误操作防护链(P0):
- U-01 真下单唯一授权改为 --commit 旗标;裸 --yes 直接 exit 1 并给出
可复制迁移命令(BREAKING);确认词闸门(GO/keyword)不可被 --yes 跳过,
下单摘要 + 3 秒倒数;--probe --yes 老命令行为零变化
- U-02 入口脚本未知参数 fail-fast(--porbe 等 typo 不再静默吞掉直达真下单);
prompt_runner 关闭 argparse 前缀缩写
- U-03 运行模式判定与执行同源:config.py read_runtime_mode 四态判定,
废弃 shell grep 解析 JSONC;横幅/改写判定/实际执行三者同源
- U-04 README/quick-start 配置示例与 config.example.jsonc 单源对齐
(CONFIG_EXAMPLE 标记块,两文档逐字节相同);清除 udid/item_url 等
幽灵字段;30+ 守卫测试防漂移
正确性与健壮性(P1):
- U-05 启动期防护:占位符黑名单中文报错、废弃字段迁移警告、未知字段
拼写提示、serial 精确预检、ANDROID_HOME 软化(有 adb 即放行);
新增 scripts/lib/preflight.sh 共享预检
- U-06 配置写回:注释保留 + fcntl/msvcrt 文件锁 + .bak 备份 + 原子替换
(真机验证 29 行注释全保留)
- U-10 快速重试提交路径强制复用 verify_order_result 同源验证,禁止仅凭
点击虚报成功;未知结果 fail-closed(submit_unverified)防重复下单
- U-12 可编排性:语义化退出码(0/10/11/12/130,13 预留)、run_summary.json
原子写、--serial/--result-json 旗标、systemd/cron 集成文档
真机测试捕获并修复(设备 c6c4eb67,全程 --probe 零下单):
- fix: macOS bash 3.2 变量展开吞全角字符——$VAR 紧跟全角括号时变量值
与半个多字节字符一起消失(hexdump 确认),3 处改 ${VAR};Linux CI
无法暴露此问题
- fix: 详情页标题读空死循环——标题控件不可读时 similarity=0 被误判
mismatch,正确演出反被拉入 rejected_titles 黑名单;改为三层兜底:
延长轮询 6x0.35s → 场馆包含匹配(真机命中 venue_fallback)→ 锚定
WARNING 放行,错误页风险由下游场次/票档匹配兜底
测试:全量 1374 passed / 1 xfailed(既有),覆盖率 84.08%(闸门 80%),
较基线 +212 条;真机端到端探测 exit 0 / run_summary probe_ready。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…tate CI(Linux)六版本全红、本地(macOS)全绿的根因是一对互相掩盖的缺陷: 1) _preflight_extract_string_field 的 sed `s/...//;t;s/.*//` 分支写法在 BSD sed 上报 undefined label(分号后内容被当作 label),提取静默输出 空 → macOS 上 serial 精确预检从未真正执行,走泛化分支恰好通过; GNU sed 上提取成功 → 走 get-state 分支; 2) gate 测试的假 adb 不响应 get-state(恒输出设备清单)→ CI 上精确预检 必然失败,深路径测试全部止步于 exit 12。 修复:提取改为 `sed -E -n 's/...//p'`(仅替换成功才打印,GNU/BSD 行为 一致);假 adb 补 get-state → device 响应。真机复核:macOS 现在正确输出 「✅ 目标设备在线: c6c4eb67」(精确分支首次生效)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
背景
对项目做了一轮多角色易用性/可用性评审:5 个用户画像(抢票小白/技术资深/高频抢票党/多设备运维/风控安全敏感)圆桌发散 43 条痛点(每条落到文件级证据)→ 产品经理聚类为 7 大主题、16 条 backlog → 技术经理 triage 出 8 条 implement-now(本 PR)、7 条 plan-only(待真机验证窗口)、1 条 defer。
本 PR 落地的 8 条
🔒 资金误操作防护链(P0)
--commit旗标;裸--yes直接 exit 1 + 可复制迁移命令;确认词闸门(输入GO或 keyword 原文)不可被--yes跳过;下单摘要 + 3 秒倒数;--probe --yes老命令行为零变化--porbe等 typo 一律 exit 1,不再静默吞掉直达真下单;prompt_runner 关闭 argparse 前缀缩写config.py read_runtime_mode四态判定,废弃 shell grep 解析 JSONC;横幅/改写/执行三者同一真相源config.example.jsonc单源对齐(CONFIG_EXAMPLE标记块两文档逐字节相同);清除udid/item_url/app_package等幽灵字段(udid代码中标注 deprecated-ignored、item_url全仓库无消费方);30+ 守卫测试防漂移🛠 正确性与健壮性(P1)
scripts/lib/preflight.sh.bak备份 + 原子替换——模式切换不再剥掉配置里的全部护栏注释verify_order_result同源验证,禁止仅凭点击就记「快速重试成功」;未知结果 fail-closed(submit_unverified终止)防重复下单run_summary.json原子写、--serial/--result-json旗标、systemd/cron 集成示例📱 真机测试(设备 c6c4eb67,全程 --probe 安全模式,零真实下单)
--serial预检retries_exhausted/10 与probe_ready/0 两种 outcome 均正确真机当场捕获并修复的 2 个 bug
① macOS bash 3.2 全角字符吞变量:
$SERIAL_OVERRIDE(adb...展开时变量值与(首字节一起消失(hexdump 逐字节确认:bash 3.2 把 0xef 并入变量名)。修 3 处$VAR全角→${VAR}全角。Linux CI(bash 4/5)无法暴露,只有 macOS 真机能抓到。② 详情页标题读空死循环:该机型上标题控件持续不可读 → similarity=0 误判「标题不一致」→ 正确演出反被拉入黑名单 → 27 次尝试全灭。修为三层兜底:延长轮询 → 场馆包含匹配(真机命中
虹口足球场⊆上海市虹口足球场)→ 锚定 WARNING 放行(下游场次/票档匹配兜底)。复跑detail_title_verified match=venue_fallback→ exit 0。裸
--yes(无--probe)从「静默改写配置并真实下单」改为 exit 1 + 迁移指引。依赖旧行为的外部脚本请迁移到--commit --yes。这是本次评审 P0 的核心目标:安全探测和真实付款之间不能只差一个单词。测试
遗留(不在本 PR)
plan-only 7 条已有设计方案(验证码人工接管、排队墙状态机、时钟校准、断线自愈、PII 脱敏、风控包、CTA 蹲守实现),待集中真机验证窗口;U-13 webhook 等 U-12 事件模型定型后做。
🤖 Generated with Claude Code