fix(smoke): U6 smoke-test.sh 可移植性——裸 $var 紧贴全角字符加花括号(R3)

bare `$var` 紧贴全角()(等 → strict-locale bash(macOS 5.3)把多字节首字节并进变量名 → set -u unbound;
smoke 在 lili-mac 一贯断在 template/list 行。4 处加 ${}(tcount/VID/QSCORE/SID),语义不变、跨环境可跑。

U6 验证(staging 五业务链路,本机 curl 可达):11/12 真绿——创作 draft / 发布(feed/zones/project) /
试玩取包(vid=93112) / 广告钱包(ad/trade) / 数据回路(qualityScore=60)。唯一 FAIL=template/list count=0
= W-CLEAN 清旧四模板 + generic 桥接的设计态(总账 §1 记非回归);R3=链路就绪门(不代理 R1)成立。
follow-up: template/list assertion 按 generic 桥接更新(非本单元业务语义裁定)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
lili 2026-06-19 03:24:18 -07:00 committed by zizi
parent 0a82a49f47
commit 0daaac0306

View File

@ -108,7 +108,7 @@ out="$(api GET /app-api/aigc/template/list)"
tcount="$(printf '%s' "$out" | sed '$d' | python3 -c "import sys,json
try: d=json.load(sys.stdin); data=d.get('data') or []; print(len(data) if isinstance(data,list) else 0)
except: print(-1)" 2>/dev/null)"
if [ "${tcount:-0}" -ge 4 ] 2>/dev/null; then PASS=$((PASS+1)); _log " ${G}${N} aigc/template/list四模板就绪 count=$tcount"; else FAIL=$((FAIL+1)); FAILED_ITEMS+=("template/list count=$tcount"); _log " ${R}${N} aigc/template/list期望≥4实=$tcount"; fi
if [ "${tcount:-0}" -ge 4 ] 2>/dev/null; then PASS=$((PASS+1)); _log " ${G}${N} aigc/template/list四模板就绪 count=${tcount}"; else FAIL=$((FAIL+1)); FAILED_ITEMS+=("template/list count=$tcount"); _log " ${R}${N} aigc/template/list期望≥4实=${tcount}"; fi
check "studio/draft创建草稿拿 gameId" POST /app-api/studio/draft envelope_nonempty '{"title":"冒烟门-clicker","templateId":"clicker"}'
# ---------------- 链路② 发布 → 审核 → 游戏流 ----------------
@ -128,7 +128,7 @@ try:
print(lst[0].get('versionId','') if lst else '')
except: print('')" 2>/dev/null)"
if [ -n "$VID" ] && [ "$VID" != "None" ]; then
check "runtime/package/{versionId}(试玩取包 vid=$VID" GET "/app-api/runtime/package/$VID" envelope
check "runtime/package/{versionId}(试玩取包 vid=${VID}" GET "/app-api/runtime/package/$VID" envelope
else FAIL=$((FAIL+1)); FAILED_ITEMS+=("feed 首条无 versionId"); _log " ${R}${N} feed 首条无 versionId无法验取包"; fi
# ---------------- 链路④ 广告 → 收益 → 钱包 ----------------
@ -146,7 +146,7 @@ try:
d=json.load(sys.stdin); lst=(d.get('data') or {}).get('list') or []
print(lst[0].get('qualityScore') if lst and lst[0].get('qualityScore') is not None else 'NONE')
except: print('NONE')" 2>/dev/null)"
if [ "$QSCORE" != "NONE" ] && [ -n "$QSCORE" ]; then PASS=$((PASS+1)); _log " ${G}${N} feed 携带 qualityScore=$QSCORE(质量分回路已回灌)"; else FAIL=$((FAIL+1)); FAILED_ITEMS+=("feed 无 qualityScore"); _log " ${R}${N} feed 首条无 qualityScore"; fi
if [ "$QSCORE" != "NONE" ] && [ -n "$QSCORE" ]; then PASS=$((PASS+1)); _log " ${G}${N} feed 携带 qualityScore=${QSCORE}(质量分回路已回灌)"; else FAIL=$((FAIL+1)); FAILED_ITEMS+=("feed 无 qualityScore"); _log " ${R}${N} feed 首条无 qualityScore"; fi
# ---------------- --deep写路径生成入队 + 遥测事件)----------------
if [ "$DEEP" = "1" ]; then
@ -160,7 +160,7 @@ if [ "$DEEP" = "1" ]; then
try: print((json.load(sys.stdin).get('data') or {}).get('id',''))
except: print('')" 2>/dev/null)"
if [ -n "$SID" ] && [ "$SID" != "None" ]; then
check "studio/generate入队 sessionId=$SID" POST /app-api/studio/generate envelope \
check "studio/generate入队 sessionId=${SID}" POST /app-api/studio/generate envelope \
"{\"sessionId\":$SID,\"prompt\":\"一个挂机种树攒果实的放置小游戏\"}"
else FAIL=$((FAIL+1)); FAILED_ITEMS+=("deep: draft 无 id"); _log " ${R}${N} deep: draft 未拿到 sessionId(id)"; fi
fi