编制:扣子一号 · 2026-09-16 11:5x
性质:门内预备件,非执行证据。第一幕 1.11 健康闸未绿前不落任何 2.x 实测证据,不伪造。
唯一剧本真源:docs/plans/335-drill-playbook.md v1.6.1(§2)。本预案仅做命令精确化与阻塞预判。
两项同时成立才准第二幕:
curl -s http://100.64.1.230:8102/health == 200docker ps | grep tenant_t_demo-app 容器在证据位 …/01-init/gate.txt(监督席落,非一号)。
现状:1.5-1.8(建库/基线新鲜度/拉容器/初始种子 admin JWT)执行中,R1 12:0x 已发阻塞催办;门未绿 → 2.3 读源不得跑。
| # | 动作 | 属主 | 一号是否动手 |
|---|---|---|---|
| 2.1 | 写配置种子 v1(texts.sh) | 二号 | 否(不越权) |
| 2.2 | publish(admin 凭证,双信封 {ok,data:{version}} + _sync_brand) | 二号 | 否 |
| 2.3 | C 端读源 GET /config/site | 一号 | 是(待门+admin/可达机位) |
| 2.3b | themePrimary 消费侧静态核 | 一号 | 已完成 PASS(见下) |
| 2.4 | rollback(body {"toVersion":int},非 versionId) | 二号 | 否(一号在 2.3 复读回退后值) |
| 2.5 | 字段级终判 check_332_fields.py exit 0 | 波波 | 否 |
| 2.6 | 目的地基线核对 | 小齐 | 否 |
前置:可达 100.64.1.230:8102 的机位 + 匿名即可(GET 可匿名,无需 JWT)。
# 直连 t_demo 独立容器(独立库 → 读到 t_demo 自己的 site_config)
curl -s http://100.64.1.230:8102/api/miniapp/config/site | tee site.json
# 判据
python3 - <<'PY'
import json
d=json.load(open('site.json'))['data']
assert d['brandName']=='t_demo 演练租户', d.get('brandName')
assert d.get('themePrimary'), 'themePrimary 空'
print('2.3 PASS', d['brandName'], d['themePrimary'])
PY
判据(剧本 2.3):data.brandName == 't_demo 演练租户' 且 data.themePrimary 有值(BLK-332-3 跨端带字段)。
证据位:…/02-config/site.json。
miniapp_site.py:48-86):GET 从当前连接库 SELECT … FROM site_config 读 brand,无目的地参数、不走 resolve_destination/_default_destination → 平台级全局配置。theme-consumer.txt + 第二幕2.3b消费侧一号实跑.md(已在仓)。home.ts:76 themeVars:"--theme-primary:${b.themePrimary};" → home.wxml:2 外层 style 真绑定 → home.wxml:28 var(--theme-primary,var(--color-primary)) 真消费;取值侧 utils/brand.ts:59-60 HEX6 校验 + DEFAULT_THEME_PRIMARY 兜底。utils/brand.ts + pages/dsl-preview/dsl-preview.ts。/reviews(commit afee39c1)。/reviews 列表含回复链 → 回复弹层提交 → POST /api/miniapp/reviews/{id}/reply(500 字 wxsec,replier_role=merchant)→ 列表刷新见商户回复。…/01-init/gate.txt 出现且两项 200/容器在 → 立即在可达机位跑 §2,落 site.json + findings。