# Plan: baota-dual-pack-bbc-b2c

**Author:** planner  
**Created:** 2026-08-13  
**User-approved design:** dual zip; names `ECShopX-{ver}-bbc.zip` / `ECShopX-{ver}-b2c.zip`; B2C demo `b2c_sports.sql`

## Goal

`deploy/baota/pack.sh` 默认一次产出 BBC + B2C 两个 zip；包名含 `composer.json` 版本与模式；每包独立前端、`PRODUCT_MODEL`、Demo；`install.sh` 按 `PRODUCT_MODEL` 导入 Demo。

## Mode map

| Label | PACK_PLATFORM | PRODUCT_MODEL | admin | demo | Nuxt BUSINESS_MODE |
|-------|---------------|---------------|-------|------|--------------------|
| bbc | platform | platform | build:bbc | bbc.sql | bbc |
| b2c | standard | standard | build:b2c | b2c_sports.sql | b2c |

## Acceptance

| ID | WHEN/THEN |
|----|-----------|
| D1 | WHEN 默认 pack（契约可只断言脚本逻辑）THEN 文档/脚本声明双包名 `ECShopX-{ver}-bbc.zip` 与 `-b2c.zip` |
| D2 | WHEN `PACK_PLATFORM=platform\|standard` THEN 只打对应单包且文件名含版本与 bbc/b2c |
| D3 | WHEN 打入 .env THEN `PRODUCT_MODEL` 与模式一致（sed 替换 tpl） |
| D4 | WHEN 打入 demo THEN 每包仅对应一个 SQL 文件 |
| D5 | WHEN install 且 PRODUCT_MODEL=standard THEN 导入 `b2c_sports.sql`；platform → `bbc.sql` |
| D6 | WHEN build_web THEN 含 `NUXT_PUBLIC_BUSINESS_MODE` |
| D7 | 现有 baota 契约测试仍可通过（更新 pack 相关断言） |

## TODOs

1. RED：契约测试（pack 命名/双模式钩子、install demo 分支）
2. GREEN：重构 pack.sh + install.sh + README
3. run-all 全绿
