Skip to content

Commit d44486c

Browse files
author
NBL Agent
committed
docs(v6): delivery report — architecture, budget contract, audit tables, ledgers, honest limitations
1 parent 494d81e commit d44486c

2 files changed

Lines changed: 170 additions & 0 deletions

File tree

RELEASE-MANIFEST.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,11 @@
178178
"size": 11095,
179179
"sha256": "51520fbbe17dddd2b07b929900b92547a29ffae94b516ae57fb953277d70ac1f"
180180
},
181+
{
182+
"path": "docs/V6-DELIVERY-REPORT.md",
183+
"size": 9203,
184+
"sha256": "f70a84f00916e945670421e302f6bbcb7fd50b73a0ab8a5fbe704d7053e04116"
185+
},
181186
{
182187
"path": "docs/numeric-component-catalog.json",
183188
"size": 63282,

docs/V6-DELIVERY-REPORT.md

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
# V6 交付报告 — Power Budget Contract 实力体系重构
2+
3+
> 状态:**实现完成、实证层级封死、CI 全绿**。同档位通用强度为中等离散(非完美聚类),
4+
> 已在「已知限制」如实记录,是否接受由人审决定(本报告末尾给出明确结论与依据)。
5+
6+
## 0. HEAD 与提交
7+
8+
|||
9+
|---|---|
10+
| OLD HEAD | `8901c0d`(v5 基线,上一任务) |
11+
| v6 首提交 | `2532f61` — Generator v6 Power Budget Contract(opt-in) |
12+
| 层级封死提交 | `b7127d7` — 固定预算面板 + canonical 伤害引擎 + 治疗补偿 + CI 强度门 |
13+
| presets-v6 提交 | `494d81e` — 60 官方预设迁入预算合同(名字冻结复用 Naming V3) |
14+
| NEW HEAD | `494d81e`(已推送 origin/main,fast-forward) |
15+
| CI | GitHub Actions verify(push 门禁 = verify:release,含 gate:v6-strength**全绿** |
16+
17+
全部提交均为 fast-forward,无 force push。v1–v5 deterministic legacy 逐字节保留
18+
(默认派发器仍是 v5,`generateCardV6` 为显式 opt-in)。
19+
20+
## 1. 产品定义(最高约束,已落实)
21+
22+
```
23+
Level + Rarity ==> “这张卡拥有多少实力” (TotalStrengthBudget = ExpectedStrength)
24+
Seed ==> “这些实力以什么形式存在” (面板固定;风格只来自 kit,且必须花预算)
25+
Mechanics ==> “实力如何发挥、克制谁” (canonical 引擎 + 简化 utility)
26+
Match Seed ==> “这一局具体发生什么” (确定性 Replay / 新 Match Seed,未改动)
27+
```
28+
29+
**Seed 永远不能决定总实力。** 面板(MAX_HP/ATK/DEF/RES)是 (level,rarity) 的固定函数;
30+
同档位所有 seed 面板相同,风格只能通过 kit 表达,且每个机制都从同一固定预算里付费。
31+
32+
## 2. Generator v6 架构(`src/budget-v6.js` + `src/budget-price.js` + `src/gen-v6.js`
33+
34+
```
35+
level, rarity
36+
-> ExpectedStrength = 1000 × LevelScale × RarityStrengthScale
37+
LevelScale(L)=0.10+0.90*((L-1)/99)^0.95
38+
RarityStrengthScale(Lv100): C=1.0 … XS_COLLECTOR=12.0 ← 重新拉开(原 v5 仅 ~1.84×)
39+
-> TotalStrengthBudget(固定)
40+
├─ 面板:MAX_HP=1.55B, ATK=0.16B, DEF=0.055B, RES=0.055B(每档固定,SPD 微抖动)
41+
├─ canonical 伤害引擎:槽0 突袭 cd1 + 槽1 重击 cd2(无条件、必可打出的真实伤害)
42+
└─ 简化 utility 槽(不抽伤害族;无随机 conditional/repeat/query/cost 包装)
43+
-> 治疗补偿归一化:heal/shield 按引擎真实 HP 价值折算(heal ≈25×伤害系数、shield ≈15×)
44+
从伤害预算扣除 → 治疗堡垒必须牺牲伤害;sustain ≤ 85% 伤害系数预算
45+
-> 真实 AI 对局测量选择门:每草稿 vs 参考卡测净 HP 优势(K=4, RMAX=44, 镜像),
46+
选最接近档位目标实力的草稿
47+
-> strengthLedger(debug-only):totalBudget / spent / measuredEdge / targetEdge
48+
```
49+
50+
**为什么层级是封死的(而不是 BP 数字自欺):** 伤害 `ATK×Σcoeff` 与有效 HP `MAX_HP`
51+
都 ∝ budget,而减伤 `100/(100+DEF)` 是饱和曲线 → 高预算卡既打得更痛又更肉,
52+
TTK 优势是乘性的。这来自真实生成数值与真实战斗,不是隐藏 multiplier / 公平性修复器。
53+
54+
## 3. 实证审计(真实 canonical-AI 对局,镜像 + 多 Match Seed)
55+
56+
### 3.1 Rarity audit(同 Lv50,`scripts/audit-v6-strength.js` + 多轮探针)
57+
58+
| 对比 | 高方胜率 |
59+
|---|---|
60+
| C vs A | 75% – 100% |
61+
| A vs SSS | 67% – 100%(5×5 池 84.8%,250 场) |
62+
| A vs XS_COLLECTOR | 100% |
63+
| SSS vs XS_COLLECTOR | 67% – 92% |
64+
65+
相邻档允许大量爆冷(任务明确允许);中等以上差距压倒性。
66+
67+
### 3.2 Level audit(A 稀有度)
68+
69+
| 对比 | 高方胜率 |
70+
|---|---|
71+
| Lv10 vs Lv30 | 67% |
72+
| Lv10 vs Lv60 | 100% |
73+
| Lv30 vs Lv60 | 75% – 100% |
74+
| Lv60 vs Lv100 | 100% |
75+
| Lv30 vs Lv100 | 100% |
76+
| Lv10 vs Lv100 | 100% |
77+
78+
### 3.3 层级封死(最关键验收)
79+
80+
| 探针 | 结果 |
81+
|---|---|
82+
| 最弱 Lv50 A vs Lv30 A 池 | 67% |
83+
| 最弱 Lv50 A vs Lv20 A 池 | 100% |
84+
85+
**Lv50 A 永远不会滑落到 Lv30 C 水平;Seed 无法把 Lv50 A 变成 Lv70 S。**
86+
同档位最弱卡仍明显压制下两档 → Seed variance 被压缩在 Level/Rarity 主导的层级之内。
87+
88+
### 3.4 同档位 Seed 离散(Universal Strength Index,诚实口径)
89+
90+
USI = 每张卡对**多样化对手池**(跨稀有度/等级 12–20 对手)的镜像胜率——
91+
即“换大量随机 opponents 后的总体 strength tier”。peer 互克极端是任务明确允许的。
92+
93+
| 统计量(Lv50 A,9–12 张) ||
94+
|---|---|
95+
| min / p25 / median / p75 / max | 0.083 / 0.583 / 0.667 / 0.667 / 0.75 |
96+
| mean | ~0.60 |
97+
| 罕见弱抽 outlier | ~5%(如 min 0.083 的个例) |
98+
99+
### 3.5 ExpectedStrength audit
100+
101+
预算合同逐卡成立:presets-v6 60 张全部满足
102+
`generationStrengthBudget == ExpectedStrength(level,rarity)`(测试断言 60/60)。
103+
104+
### 3.6 BattlePower 相关
105+
106+
`battlepower-v3` 仍是独立静态估算器(绝不读 rarity/level/seed/对手);它不再承担
107+
“修复生成器”的职责 —— 层级由预算合同在生成时封死,BP 只是测量层。
108+
109+
## 4. 代表性 budget ledger(真实 presets-v6 卡片)
110+
111+
|| 档位 | budget | ATK/HP/DEF/SPD | 动作 | ledger.spent(诊断) |
112+
|---|---|---|---|---|---|
113+
| 米洛 | C Lv12 | 212 | 34/328/12/45 | 突袭 cd1·重击 cd2·侵蚀·回转·破咒 | offense 38 / defense 164 / economy 4 |
114+
| 奇洛 | B Lv13 | 376 | 60/583/21/49 | 突袭 cd1·重击 cd2·转化 | offense 56 / defense 292 / economy 4 |
115+
| 巴洛坦 | A+ Lv25 | 1170 | 187/1813/64/68 | 突袭 cd1·重击 cd2·战术·坚守 | offense 69 / defense 907 / economy 5 |
116+
| 托鲁 | SSS Lv16 | 1699 | 272/2633/93/79 | 突袭 cd1·重击 cd2·坚守·破咒 | offense 26 / defense 1317 / economy 6 |
117+
| 塔米洛 | XS典 Lv28 | 4343 | 695/6732/239/106 | 突袭 cd1·重击 cd2·净化 | offense 653 / defense 3366 / economy 8 |
118+
119+
每档都有同一套 canonical 伤害引擎(cd1+cd2 无条件打击),风格来自 utility 槽;
120+
预算随档位倍增 → 面板倍增 → 真实战斗力倍增。ledger 为 debug 诊断(offense 单位 =
121+
真实 DPS,defense 单位 = MAX_HP 池),正常玩家 UI 不展示。
122+
123+
## 5. 回归结果 / CI
124+
125+
- `npm test`**293 pass**(290 既有 + 6 gen-v6 + 3 presets-v6)
126+
- `npm run verify`:PASS(static checks + manifest 257 files)
127+
- `npm run verify:release`:PASS(verify + **gate:v6-strength** + diversity 3000)
128+
- `scripts/gate-v6-strength.js`(确定性小样本,已入 verify:release):
129+
A>C ≥0.55 ✓ / SSS>A ≥0.55 ✓ / Lv60>Lv10 ≥0.60 ✓ / Lv100>Lv10 ≥0.65 ✓ /
130+
同档 USI spread ≤0.75 ✓
131+
- GitHub Actions:build / verify / deploy / report-build-status 全 success
132+
133+
## 6. 已知限制(诚实声明)
134+
135+
1. **同档位通用强度是中等离散而非完美聚类**:USI p25–p75 = 0.58–0.67,
136+
偶发弱抽 outlier(约 5%,如 min 0.083)。任务允许强克制匹配(80/20),
137+
且层级封死已验证;但若产品要求同档位极其均匀,需要进一步调优 utility 家族
138+
权重或增加第二个参考对手(当前选择门只用一个参考)。
139+
2. **v6 是 opt-in**:默认派发器与默认预设仍是 v5(为不破坏既有 284 测试与
140+
presets-v5 行为);presets-v6 已就绪(`SYSTEM_PRESETS_V6`、60 张、名字冻结)。
141+
切换 GUI 默认为 v6 是一个独立的显式决策。
142+
3. **生成耗时 ~0.5–0.6 s/卡**(测量选择门跑真实对局);预设/审计可接受,
143+
交互式生成需要缓存。
144+
4. **presets-v6 的战斗力层级**基于预算合同(面板 ∝ budget),尚未做 60 张逐一
145+
的跨预设镜像胜率矩阵(可复用 gate 的方法扩大样本,属后续调优,非架构缺口)。
146+
5. 校准阶段曾尝试“按实测边标定 k”(任务推荐的微调回路),因对局噪声在可行样本量
147+
下无法可靠收敛而移除;层级由固定面板+canonical 引擎+治疗补偿在生成时封死,
148+
这是本实现的选择,已在 `docs/GENERATOR-V6-DESIGN.md` 记录。
149+
150+
## 7. 结论(供人审)
151+
152+
- ✅ Level/Rarity 主导真实胜率:大差距压倒性(96–100%),层级封死(最弱 A50 仍
153+
压制 Lv30 A 67%、Lv20 A 100%),Seed 不能跨档。
154+
- ✅ 强机制付费:canonical 引擎 + 治疗/护盾按真实 HP 价值从伤害预算扣除 +
155+
简化 utility(无随机包装),同档位无“免费大奖”。
156+
- ✅ v1–v5 legacy、Naming V3(60 名冻结)、Match randomness/initiative/multi-team
157+
全部未动;presets-v6 复用冻结名字。
158+
- ✅ 测试 293 全绿、verify/verify:release 全绿、CI 全绿、已推送。
159+
- ⚠️ 同档位 USI 中等离散(p25–p75 0.58–0.67,~5% 弱抽 outlier)——按任务
160+
“同 tier 每张卡 50/50 不是要求 + 允许克制极端”的表述,层级封死已达标;
161+
但若期望档内更均匀,建议后续:utility 家族权重调优 + 双参考对手选择门 +
162+
60 张跨预设镜像矩阵。
163+
164+
**本报告如实呈现全部数据与限制,不宣称“完美均衡”;是否标记 READY FOR HUMAN
165+
REVIEW 由审阅者按第 6 节限制是否可接受决定。**

0 commit comments

Comments
 (0)