|
| 1 | +# Generator V7 Design |
| 2 | + |
| 3 | +## Why V7 exists |
| 4 | + |
| 5 | +V6 proved that a fixed Level × Rarity budget could place cards in the right |
| 6 | +*strength tier*, but its strength was enforced by a budget/price ledger — a |
| 7 | +measurement loop, not a combat identity. V7 keeps "Level first, Rarity second" |
| 8 | +and adds two things V6 could not: |
| 9 | + |
| 10 | +1. **Reality truth**: a large mirrored battle graph measured with the real |
| 11 | + canonical AI, fitted by Bradley-Terry into EmpiricalTheta, so every strength |
| 12 | + claim is verified against actual long-run combat — not a price model. |
| 13 | +2. **Content-native strength**: an iso-power solver that tunes individual |
| 14 | + numeric knobs against a content-only strength model, so the card's power |
| 15 | + comes from what it actually does in battle. |
| 16 | + |
| 17 | +## World geometry |
| 18 | + |
| 19 | +`TargetTheta = LevelScore + RarityScore - (LevelScore(50) + RarityScore(A))` |
| 20 | + |
| 21 | +- `LevelScore(level) = 16 * ((level - 1) / 99) ^ 1.70` — convex, back-loaded. |
| 22 | +- Rarity scores `C=0 … XS_COLLECTOR=7.60` — strictly convex increments. |
| 23 | +- Anchor `LevelScore(50) + RarityScore(A)` → Lv50 A is theta 0. |
| 24 | +- Invariants (asserted): full level span >= 2 × full rarity span; |
| 25 | + (Lv40→100 level gap) − full rarity span >= 4.5 (Lv100 C ≫ Lv40 XS Collector); |
| 26 | + full rarity span >= Lv70→100 level gap (extreme rarity can make a real |
| 27 | + suspense window at 70 vs 100). |
| 28 | +- Geometry is generation/QA metadata only. The engine never reads it. |
| 29 | + |
| 30 | +## Seed owns form, never tier |
| 31 | + |
| 32 | +`styleGenomeV7(seed)` produces 8 soft preference axes. `mechanicSkeletonV7(seed)` |
| 33 | +fixes action families, victory path, damage type, resource, status policy and |
| 34 | +trigger event — deterministically, from the seed alone, with retries that depend |
| 35 | +only on the seed. Therefore `mechanicFingerprint` is invariant across level and |
| 36 | +rarity for a given seed: level/rarity scale magnitudes; they never change the |
| 37 | +kit. Same-tier seed dispersion (p95−p5 of EmpiricalTheta at fixed level/rarity) |
| 38 | +must stay within 1.0 theta (1.2 only with documented noise evidence), while |
| 39 | +matchup diversity keeps genuine 80/20 same-tier counters: General Strength |
| 40 | +convergence is not pairwise 50/50. |
| 41 | + |
| 42 | +## StrengthModelV7 (content-only) |
| 43 | + |
| 44 | +A reference world (`calibration/reference-world-v7.json`) defines the opponent |
| 45 | +population. The model evaluates each action's interacting throughput — accuracy, |
| 46 | +crit, penetration, mitigation, cooldown/RECOVERY readiness, resource |
| 47 | +affordability, POTENCY on periodic/trigger output, BARRIER_POWER on shields, |
| 48 | +CONTROL_POWER contest vs TENACITY — then aggregates with the One Action Rule |
| 49 | +(best action full, others discounted) and adds trigger frequency. A shape |
| 50 | +vector feeds a ridge correction fitted on train seed families; the committed |
| 51 | +coefficients are selected on validation and only evaluated on test. |
| 52 | + |
| 53 | +## SolverV7 (iso-power) |
| 54 | + |
| 55 | +Per-knob finite-difference marginal value; each iteration picks the legal knob |
| 56 | +with the best strength-error reduction (with style/degeneracy tie-breakers) and |
| 57 | +moves it in log space, clamped per-knob. Convergence: |predicted − TargetTheta| |
| 58 | +<= 0.12 absolute, median <= 0.06, p95 <= 0.12. Runtime generation never invokes |
| 59 | +battles, AI, opponents, Monte Carlo or BattlePower. |
| 60 | + |
| 61 | +## Empirical reality |
| 62 | + |
| 63 | +A connected sparse graph over 180 cards (15 seed families × 12 tiers) with |
| 64 | +same-tier, same-seed-level, near-tier, cross-tier, cross-style and extreme-gap |
| 65 | +edges; 12 paired Match Seeds per edge, mirrored sides, canonical AI, round cap |
| 66 | +100 → 37,440 battles. Regularized Bradley-Terry fit (draws = half score) gives |
| 67 | +EmpiricalTheta with standard error; a linear alignment (train families only) |
| 68 | +maps it onto the TargetTheta scale. Acceptance: Spearman(Target, Empirical) |
| 69 | +>= 0.95. |
| 70 | +
|
| 71 | +## Multi-axis policy (Phase 6) |
| 72 | + |
| 73 | +The V6 baseline sensitivity showed ATK and MAX_HP were the only meaningful |
| 74 | +axes. V7 activated neutral-100 optional axes only where they add independent |
| 75 | +value, and the final multi-axis audit requires ≥ 6 independent primary axes at |
| 76 | +≥ 45% of ATK sensitivity, ATK ≤ 2 × peer median, and no axis > 35% of |
| 77 | +normalized primary-axis sensitivity — ATK stays important but cannot be a God |
| 78 | +Stat. |
| 79 | + |
| 80 | +## BattlePower V4 |
| 81 | + |
| 82 | +Independent content-only measurement model (its own feature extraction, never |
| 83 | +`predictThetaV7`), ridge-calibrated against holdout EmpiricalTheta with |
| 84 | +seed-family isolation. DoD: holdout Spearman ≥ 0.90; pair ordering accuracy |
| 85 | +≥ 95% for |EmpiricalTheta gap| ≥ 1.5; strong inversion rate ≤ 2%. Display power |
| 86 | +is a monotone transform anchored near 1000 at Lv50 A. |
| 87 | + |
| 88 | +## Product acceptance (final product constitution) |
| 89 | + |
| 90 | +| Case | Requirement | |
| 91 | +|---|---| |
| 92 | +| Lv100 vs Lv40 (same rarity) | Lv100 ≥ 99% aggregate, Wilson lower ≥ 98% | |
| 93 | +| Lv100 C vs Lv40 XS Collector | Lv100 ≥ 98% | |
| 94 | +| Lv70 XS Collector vs Lv100 C | lower-level side in 35–70% | |
| 95 | +| Lv70 XS vs Lv100 C | lower-level side in 20–45% | |
| 96 | +| same-level C vs XS Collector | higher rarity ≥ 99% | |
| 97 | +| 5-tier rarity gap | higher rarity ≥ 95% | |
| 98 | +| fixed Lv50 A seed dispersion | p95−p5 ≤ 1.0 theta (1.2 documented only) | |
| 99 | + |
| 100 | +The full audit is release evidence; `gate:v7-product` is a deterministic CI |
| 101 | +regression; `verify:release` runs the V7 gate while `gate:v6-strength` moves to |
| 102 | +`diagnostics:legacy`. |
0 commit comments