Skip to content

Commit 4d4c1c3

Browse files
author
NBL Agent
committed
test(v7): causal variance decomposition of the same-tier spread (C0-C4) + solver utilization audit
Answers the round-3 decision gate question with a controlled experiment on the official 96 unsolved Lv50 A dataset (shared graph: 768 edges, 8 opponents/card, same 3 paired Match Seeds per variant, 4,608 mirrored battles each, all BT converged): C0 baseline spread 6.642 C1 scheduling->medians 7.356 (-5.3% variance) C2 magnitudes->medians 6.150 (+15.7%) C3 both 6.214 (+21.3%, spread reduction 6.4%) C4 scalar-bundle permutation 6.386 (Spearman vs C0 0.801, vs DONOR 0.229) Decision gate: C3 spread reduction 6.4% <= 40% -> the 'action scalar numbers are the dominant cause' hypothesis is NOT supported; ~79% of the variance is mechanic topology. C4's donor correlation of 0.229 is the strongest causal signal that strength stays with the skeleton, not the drawn numbers. No action-numeric solver prototype is justified; the Mechanism-Aware StrengthModel remains the path. Also: solver knob utilization audit over 1000 cards (solver telemetry added in src/solver-v7.js): MAX_HP first-selected 62% with the largest marginal (it feeds both endurance and sustain), but 6 of 11 knobs (DEF/RES/SPD/EVA/CRIT/ENERGY_REGEN) are never selected - a model sensitivity imbalance that any future numeric extension must fix first. Official 96-card mechanism ranking under the seed-family split: predictTheta -0.226, predictReality -0.248, BPv4 -0.059 - all far below the 0.85 gate, so the Solver/Full-Reality stage stays closed. Artifacts: qa/v7-attribution-C{0..4}.json, qa/v7-scheduling-magnitude-attribution.json, qa/v7-mechanism-ranking-96.json, qa/v7-solver-utilization.json; docs: docs/V7-MECHANISM-ATTRIBUTION.md, delivery report round 3.
1 parent ef22b68 commit 4d4c1c3

18 files changed

Lines changed: 37840 additions & 14 deletions

RELEASE-MANIFEST.json

Lines changed: 70 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,13 @@
235235
},
236236
{
237237
"path": "docs/V7-DELIVERY-REPORT.md",
238-
"size": 15807,
239-
"sha256": "7608a45e5b03afa50745f6a7da15ba1a969572ea1ee1cfdc29d2f268aa1d2721"
238+
"size": 21203,
239+
"sha256": "0c48bfc8ee99755c183f706d957224d873cf4eb0fde4f5ed847c8cbffc798765"
240+
},
241+
{
242+
"path": "docs/V7-MECHANISM-ATTRIBUTION.md",
243+
"size": 7151,
244+
"sha256": "1bf2e3d00c5d0971dce9d22a6c4278612d0e5672336a1ea49d253508d578954c"
240245
},
241246
{
242247
"path": "docs/numeric-component-catalog.json",
@@ -300,8 +305,8 @@
300305
},
301306
{
302307
"path": "package.json",
303-
"size": 3621,
304-
"sha256": "ddab4d80377443beb3b202ae8fe30a91282e62475e9f36c0e94195cec930c81f"
308+
"size": 3940,
309+
"sha256": "dc8732095b1b1f690b5718edefa99554fd190466106d45c657627e83d36674f7"
305310
},
306311
{
307312
"path": "qa/adjacent-rarity-matrix.json",
@@ -843,6 +848,31 @@
843848
"size": 21988,
844849
"sha256": "263ab25c4e22940f1d2e1f4c53b1739126dfc1b7ee837b46c137f06b500fcfda"
845850
},
851+
{
852+
"path": "qa/v7-attribution-C0.json",
853+
"size": 134808,
854+
"sha256": "1e3798197a2d3316df431f461c7e79359b32350e967b26a787c567eda74596a6"
855+
},
856+
{
857+
"path": "qa/v7-attribution-C1.json",
858+
"size": 134818,
859+
"sha256": "a586832fa0d5ae75c8117b0e527911183cbe9185f3a43005a2bc5aab4666a698"
860+
},
861+
{
862+
"path": "qa/v7-attribution-C2.json",
863+
"size": 134819,
864+
"sha256": "f96c0e03e1ebb6774584968a508694e5ea05263efb107163fe8a63ff0eb2e3a7"
865+
},
866+
{
867+
"path": "qa/v7-attribution-C3.json",
868+
"size": 134792,
869+
"sha256": "2b41b110124cc11d6fb4572717d630318d411e18c454d4f5375230bbb092d875"
870+
},
871+
{
872+
"path": "qa/v7-attribution-C4.json",
873+
"size": 134801,
874+
"sha256": "25bdb094352cfe79374b3be9783e2d320eb29cdefc2638dd8bacde2850a00a51"
875+
},
846876
{
847877
"path": "qa/v7-axis-sensitivity.json",
848878
"size": 737,
@@ -873,6 +903,11 @@
873903
"size": 96844,
874904
"sha256": "7135d739603b89c2f17da8f7ec5d82438943bab919c0d9678b8bfb22441da4ab"
875905
},
906+
{
907+
"path": "qa/v7-mechanism-ranking-96.json",
908+
"size": 3845,
909+
"sha256": "487451c9ce848d9e7e5cc8f18a0cd2a25e7403fd25505ea292c53933671a4996"
910+
},
876911
{
877912
"path": "qa/v7-mechanism-ranking.json",
878913
"size": 32269,
@@ -898,6 +933,11 @@
898933
"size": 1588,
899934
"sha256": "54b484922ff31c7275b9c243c7cf411e5e5a04a521bb0d912c92044a22d0c5ea"
900935
},
936+
{
937+
"path": "qa/v7-scheduling-magnitude-attribution.json",
938+
"size": 14984,
939+
"sha256": "5fd35f293ebeff55081fb440509fcfa4c9fc7c97defa409c490dcb7df10ccea0"
940+
},
901941
{
902942
"path": "qa/v7-seed-dispersion.json",
903943
"size": 17809,
@@ -908,6 +948,11 @@
908948
"size": 2968,
909949
"sha256": "3448d259453b839b49587804fedce200a80d7a8f0dd4c578fb0dab0e826e08cf"
910950
},
951+
{
952+
"path": "qa/v7-solver-utilization.json",
953+
"size": 6649,
954+
"sha256": "f0ef1cbf1383779413bc8d092acfe29374b8f0790db17865473800cc0f288d90"
955+
},
911956
{
912957
"path": "qa/v7-stat-sensitivity.json",
913958
"size": 92515,
@@ -1033,6 +1078,11 @@
10331078
"size": 4054,
10341079
"sha256": "5a24505e42ffdf1ebcca748276cbedfb209f3fb989bb4a51182e4c2c2e4904c2"
10351080
},
1081+
{
1082+
"path": "scripts/audit-v7-solver-utilization.js",
1083+
"size": 5029,
1084+
"sha256": "c8f1805cfdb057919fef2088d11dbcb294519927edb8c3884633803007ef353d"
1085+
},
10361086
{
10371087
"path": "scripts/benchmark-gen-v7.js",
10381088
"size": 2284,
@@ -1073,6 +1123,16 @@
10731123
"size": 3491,
10741124
"sha256": "3516a02e09cdeab2daaaf1290ac07d1e10f5ebb83eda412038660dff7178ec2b"
10751125
},
1126+
{
1127+
"path": "scripts/evaluate-v7-mechanism-ranking-96.js",
1128+
"size": 6370,
1129+
"sha256": "97e0ceb1d67e929d09ee1e675844e4790800b59e8e4337436f083b84c1c7da7a"
1130+
},
1131+
{
1132+
"path": "scripts/experiment-v7-attribution.js",
1133+
"size": 17844,
1134+
"sha256": "48ec468a9fd9aff1e717b9e250819f9f79705f7b2eadf3c7e6a52694bb940811"
1135+
},
10761136
{
10771137
"path": "scripts/explore-v7-mechanism-features-v2.js",
10781138
"size": 13129,
@@ -1170,8 +1230,8 @@
11701230
},
11711231
{
11721232
"path": "scripts/static-check.js",
1173-
"size": 9424,
1174-
"sha256": "b3871c40ed86120157f1771e4a9a4dc267d9555b7894cb46c620c97e46f55e31"
1233+
"size": 9803,
1234+
"sha256": "4706d73efee46082fc6508ab55b98109603ae73008771838602b38ab7ba53822"
11751235
},
11761236
{
11771237
"path": "scripts/stress-check.js",
@@ -1325,8 +1385,8 @@
13251385
},
13261386
{
13271387
"path": "src/gen-v7.js",
1328-
"size": 9357,
1329-
"sha256": "e8e1a0197042924ae6658a2de37b8f0922be9387ab3d94731b5bf045a742b5d0"
1388+
"size": 9384,
1389+
"sha256": "90798da935b11ec10e85a972018e621a9279fd83e3721c5afae4c1bee9fa7977"
13301390
},
13311391
{
13321392
"path": "src/generator.js",
@@ -1385,8 +1445,8 @@
13851445
},
13861446
{
13871447
"path": "src/solver-v7.js",
1388-
"size": 3269,
1389-
"sha256": "a60e823f8fc4ed23915ec427f876cffe8d7f005ff627b3152c3fceb3b15045ca"
1448+
"size": 4331,
1449+
"sha256": "9e47df1f5b2cf542b28ccfe5a2a032c26b1dd2bba51b8d4652ade3235d64a0ba"
13901450
},
13911451
{
13921452
"path": "src/status-runtime.js",

docs/V7-DELIVERY-REPORT.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,102 @@
99
> Every number below comes from an actual run of the committed scripts against
1010
> the committed artifacts. Nothing is estimated or invented.
1111
12+
## Convergence round 3 — causal variance decomposition (user decision gate)
13+
14+
**The question this round had to answer: is the ~6.6 theta same-tier spread
15+
"real mechanism value" or "seed randomly drawing strong/weak action numbers"?**
16+
A deterministic counterfactual experiment on the official 96 unsolved Lv50 A
17+
dataset (shared graph, 768 edges, 8 opponents/card, same 3 paired Match Seeds per
18+
variant, 4,608 mirrored battles each, all BT-converged) gives the answer:
19+
20+
| variant | what changed | p95−p5 | variance reduction | Spearman(C0, Ck) |
21+
|---|---|---|---|---|
22+
| C0 | baseline | **6.642** |||
23+
| C1 | cost/cooldown/priority → per-slot medians | **7.356** | −5.3% | 0.920 |
24+
| C2 | damage/heal/barrier coeffs, accuracy, chance, drainRatio, gain → medians | **6.150** | +15.7% | 0.962 |
25+
| C3 | C1 + C2 | **6.214** | +21.3% | 0.899 |
26+
| C4 | scalar bundles deterministically permuted (i ← donor i+1) | **6.386** | +13.4% | 0.801 (donor: **0.229**) |
27+
28+
**Decision gate verdict: C3 spread reduction = 6.4% ≤ 40% → hypothesis not
29+
supported → continue Mechanism-Aware StrengthModel; no action-numeric solver
30+
prototype.** Readings:
31+
32+
* Normalising both scheduling and magnitudes leaves ~6.2 theta of 6.64 (≈79% of
33+
the variance): the spread is dominated by mechanic topology, not by drawn
34+
numbers.
35+
* C1 (scheduling) *raised* the spread — random scheduling partially equalised
36+
classes; it is neither the driver nor a promising knob.
37+
* C4 is the strongest causal signal: after swapping the scalar bundles, ranking
38+
correlates 0.801 with the original cards but only 0.229 with the donor cards —
39+
strength stays with the skeleton, not the numbers.
40+
* Q4: pure mechanic topology still produces **≈6.2 theta** — large, so the
41+
StrengthModel must genuinely learn mechanism value.
42+
43+
### Q1 — official 96-card mechanism ranking (three splits)
44+
45+
`qa/v7-mechanism-ranking-96.json`; real spread p95−p5 = 6.642.
46+
47+
| model | overall | seed-family test (official) | random test (reference) | mechanism-family holdout (stress) |
48+
|---|---|---|---|---|
49+
| predictTheta | −0.222 | **−0.226** | −0.727 | −0.453 |
50+
| predictReality (committed ridge) | −0.144 | **−0.248** | +0.064 | −0.262 |
51+
| BattlePower V4 | −0.183 | **−0.059** | −0.673 | −0.197 |
52+
53+
Spread ratios (predicted/real on test): predictTheta 0.11 (crushed), predictReality
54+
0.91, BPv4 0.55. **All three models fail the ≥0.85 gate and mostly rank at ~0 or
55+
negatively on the official seed-family test.** The gate is untouched and the
56+
Solver/Full-Reality stage stays closed.
57+
58+
### Q5 — why the solver mostly adjusts HP (utilization audit)
59+
60+
`qa/v7-solver-utilization.json`, 1000 cards, 5,525 adjustments (5.5/card):
61+
62+
| knob | adjusted% | first-selected% | adjustments | theta share | marginal median | kept-initial% |
63+
|---|---|---|---|---|---|---|
64+
| MAX_HP | 76.3 | **62.1** | 2,005 | **0.379** | 3.20 | 24 |
65+
| ATK | 65.9 | 0.0 | 1,645 | 0.312 | 3.17 | 34 |
66+
| ACC | 89.0 | 37.1 | 1,580 | 0.289 | 3.14 | 11 |
67+
| HEAL_POWER | 23.5 | 0.0 | 247 | 0.018 | 1.23 | 77 |
68+
| PEN | 4.8 | 0.0 | 48 | 0.002 | 0.64 | 95 |
69+
| DEF / RES / SPD / EVA / CRIT / ENERGY_REGEN | **0.0** | 0.0 | **0** | 0.000 || 100 |
70+
71+
Diagnosis: it is **not** a pure greedy-degeneracy story — MAX_HP's marginal is
72+
genuinely the largest (it feeds both endurance and sustain, since heal/barrier
73+
formulas scale with MAX_HP), so picking it first (62%) is rational. But the model
74+
has a **sensitivity imbalance: 6 of 11 knobs are dead** (DEF/RES/SPD/EVA/CRIT/
75+
ENERGY_REGEN never selected because their marginals are ~100× smaller than the
76+
top three and can never win the greedy score), so the iso-power surface is
77+
effectively driven by three knobs. Any future action-numeric extension must fix
78+
this imbalance first, otherwise it would just add more dead knobs.
79+
80+
### Q6 — parameter classification
81+
82+
Full table in `docs/V7-MECHANISM-ATTRIBUTION.md`. Summary: damage/heal/barrier
83+
coefficients, periodic magnitude, drainRatio, effect chance and accuracy are
84+
continuous, monotonic, strength-only → safe continuous marginal-value knobs; cost
85+
and cooldown are discrete but monotonic → borderline; **priority is discrete,
86+
non-monotonic and identity/behavior-affecting (it changes AI action choice and
87+
initiative order) → NOT a strength knob**; shield/ward kind, control status
88+
flavour, stacks and all structural fields (family set, effects topology,
89+
statuses, triggers, targets, damage type, resource) are Frozen Identity.
90+
91+
### Q7 — seed identity invariants (proposal, not approved)
92+
93+
Frozen Identity (never touched): action family set/count, victory path, targets,
94+
trigger topology, status identity, conditionals, periodic topology, resource
95+
mechanic, damage type, signature action, shield-vs-ward kind, control flavour.
96+
Shape-Preserving Numeric Freedom: per-mechanism relative shape kept, only
97+
family/global scaling allowed. Free Strength Scalars: absolute magnitudes that
98+
change no relative shape or identity.
99+
100+
### Q8 — recommendation
101+
102+
**A — mainly fix the StrengthModel** (with D-style support: then evaluate a
103+
bounded, shape-preserving numeric freedom, not free per-action knobs). The C0-C4
104+
evidence rules out B: scalar numbers explain ≤21% of the variance and the C4
105+
donor test (0.229) shows strength does not follow the numbers; ~6.2 theta of
106+
topology-driven spread remains, which only a mechanism-aware model can capture.
107+
12108
## Convergence round 2 — root causes, fixes, and what still blocks
13109

14110
### Root Cause Before (measured on the inherited code)

docs/V7-MECHANISM-ATTRIBUTION.md

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# V7 Mechanism Attribution — Analysis Framework
2+
3+
Status: analysis document (round 3, user decision gate). Experimental numbers are
4+
filled in from `qa/v7-scheduling-magnitude-attribution.json` when the C0-C4 runs
5+
complete. This page records the parts that are derivable from source alone.
6+
7+
## 0. Causal variance decomposition — RESULT (96 unsolved Lv50 A cards)
8+
9+
Same shared graph (768 edges, 8 opponents/card) and same paired Match Seeds
10+
(3/card) across all variants; each variant = 4,608 mirrored canonical-AI battles,
11+
Bradley-Terry fitted, all converged. Card scalars are normalized to per-slot
12+
medians; skeleton/effects/statuses/triggers/targets are never changed.
13+
14+
| variant | what changed | p95−p5 | variance reduction | spread reduction | Spearman(C0θ, Ckθ) |
15+
|---|---|---|---|---|---|
16+
| C0 | baseline | **6.642** ||||
17+
| C1 | cost/cooldown/priority → medians | **7.356** | **−5.3%** | −10.8% | 0.920 |
18+
| C2 | damage/heal/barrier coeffs, accuracy, chance, drainRatio, gain → medians | **6.150** | **+15.7%** | +7.4% | 0.962 |
19+
| C3 | C1 + C2 | **6.214** | **+21.3%** | **+6.4%** | 0.899 |
20+
| C4 | deterministic permutation of scalar bundles across cards (card i ← donor i+1) | **6.386** | +13.4% | +3.9% | 0.801 (vs donor C0θ: **0.229**) |
21+
22+
**Decision gate (user §4): C3 spread reduction = 6.4% ≤ 40% → "hypothesis not
23+
supported; continue Mechanism-Aware StrengthModel."** An action-numeric solver
24+
prototype is therefore NOT justified by this evidence.
25+
26+
Readings:
27+
28+
* Normalizing BOTH random scheduling and scalar magnitudes leaves ~6.2 theta of
29+
the original 6.64 — roughly **79% of the variance** survives as
30+
topology/interactions. The same-tier spread is dominated by the mechanic
31+
skeleton (family, effects, statuses, triggers, targets, sustain-vs-damage
32+
races), not by the drawn numbers.
33+
* C1 *increased* the spread (−5.3% variance): the random scheduling partially
34+
equalised mechanism classes; removing it made cards more different. Scheduling
35+
randomness is not the driver and is not a promising solver knob.
36+
* C2 (magnitude scalars) is the largest single contributor (+15.7%) but still
37+
modest.
38+
* C4 is the strongest causal signal: after permuting the scalar bundles, the new
39+
ranking correlates 0.801 with the ORIGINAL cards' ranking but only **0.229**
40+
with the DONOR cards' ranking — i.e. strength stays with the skeleton and does
41+
NOT follow the numbers.
42+
* Q4 answer: pure mechanic topology after normalization still produces **≈6.2
43+
theta** of spread — large. Mechanisms genuinely differ hugely in long-grind
44+
value; the StrengthModel must learn to value them (it currently ranks them at
45+
≈0 or worse, see `qa/v7-mechanism-ranking-96.json`).
46+
47+
## 1. What the V7 skeleton draws randomly vs structurally (from `src/gen-v7.js`)
48+
49+
Every non-backbone action is constructed with
50+
`cost=1+random(5), cooldown=1+random(4), priority=random(5)-2` from ONE shared
51+
PRNG stream, and each family case may override some fields:
52+
53+
| action (family) | cost | cooldown | priority | other drawn scalars |
54+
|---|---|---|---|---|
55+
| 基础攻势 backbone | 0 fixed | 1 fixed | 10 fixed | status chance `0.55+0.3·triggers` (genome) |
56+
| 精确打击 direct | random 1-5 | random 1-4 | random -2..2 | dmg `24+24·pressure` (genome) |
57+
| 裂变突袭 burst | random | 3 fixed | random | dmg `16+16·pressure` ×2 hits (genome) |
58+
| 蚀印扩散 dot | random | random | random | stacks `1+random(2)` (RANDOM), chance `0.65+0.3·reliability` |
59+
| 汲取 drain | random | random | random | dmg `20+20·pressure`, drainRatio `0.08+0.22·sustain` |
60+
| 压制 control | 0 fixed | 2 fixed | random | dmg `14+14·pressure`, status pick (RANDOM), chance `0.6+0.3·control` |
61+
| 屏障 barrier | 0 fixed | 2 fixed | random | type pick shield/ward (RANDOM), coeff `0.58+0.24·endurance` |
62+
| 再生 sustain | 0 fixed | 2 fixed | random | heal coeff `0.62+0.24·sustain` |
63+
| 蓄能轰击 resource | random | random | random | gain `2+random(3)` (RANDOM), dmg `18+20·pressure` |
64+
| 先制 tempo | random | 1 fixed | `2+3·tempo` fixed | dmg `18+20·pressure` |
65+
| 反射架势 reflect | random | random | random | (status only) |
66+
67+
`accuracy = 0.72+0.24·reliability` for every non-backbone action (genome). The
68+
anchor `55·(ATK+1)·(0.02+ACC/100)·(0.70+PEN/100)` is prepended to every action
69+
(structural). Resource type, damage type, trigger event, victory path, action
70+
family set, statuses and durations all come from the seed-driven skeleton and are
71+
structural.
72+
73+
## 2. Parameter classification (Q6)
74+
75+
| parameter | continuous/discrete | monotonic in strength | strength-only / identity-affecting | safe as solver knob? |
76+
|---|---|---|---|---|
77+
| damage coefficient (`ATK * X`) | continuous | monotonic ↑ | strength-only | YES (continuous marginal-value knob) |
78+
| heal coefficient (`MAX_HP * X`) | continuous | monotonic ↑ | strength/sustain | YES |
79+
| barrier coefficient | continuous | monotonic ↑ | strength/durability | YES |
80+
| periodic magnitude (`ATK * X`) | continuous | monotonic ↑ | strength (dot) | YES |
81+
| drainRatio | continuous | monotonic ↑ | strength/sustain | YES |
82+
| effect chance | continuous | monotonic ↑ | strength/delivery | YES (bounded 0..1) |
83+
| action accuracy | continuous | monotonic ↑ | strength/delivery | YES |
84+
| energy cost | discrete int | monotonic ↓ | strength/availability | borderline — discrete, but monotonic |
85+
| cooldown | discrete int | monotonic ↓ | strength/availability | borderline — discrete, but monotonic |
86+
| priority | discrete int | NON-monotonic (order, not magnitude) | **identity/behavior** (changes AI action choice and initiative order) | NO as plain strength knob |
87+
| shield-vs-ward type | categorical || identity | NO |
88+
| stun/slow/silence pick | categorical || identity (control flavour) | NO |
89+
| dot stacks | discrete int | monotonic ↑ | strength (dot magnitude) | borderline |
90+
| action family / target / effect topology / statuses / triggers / damage type / resource | structural || **Frozen Identity** | NEVER |
91+
92+
## 3. Seed Identity Invariants (Q7)
93+
94+
Proposed split for any future action-numeric prototype:
95+
96+
* **Frozen Identity** (solver never touches): action family set and count,
97+
victory path, target types, trigger topology, status/debuff identity,
98+
conditional structure, periodic topology, resource mechanic, damage type,
99+
signature action identity, shield-vs-ward kind, control status flavour.
100+
* **Shape-Preserving Numeric Freedom**: per-mechanism relative shape (e.g. the
101+
ratios between a kit's own action magnitudes, its cooldown/resource tendency,
102+
its sustain tendency) stays as the seed drew it; the solver may only apply
103+
FAMILY/GLOBAL scaling factors so General Strength reaches TargetTheta.
104+
* **Free Strength Scalars**: absolute magnitudes that do not change any relative
105+
shape or identity (global coefficients, global availability level), free for
106+
iso-power convergence.
107+
108+
The three-way split is a candidate architecture, not yet approved; this round
109+
only produces the causal evidence (C0-C4) and the solver-utilization audit that
110+
inform whether an action-numeric prototype is justified at all.

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
"audit:v7-solver-saturation": "node scripts/audit-v7-solver-saturation.js 1000",
1313
"diagnose:v7-mechanism": "node scripts/diagnose-v7-mechanism-ranking.js 48 10 3",
1414
"explore:v7-mechanism": "node scripts/explore-v7-mechanism-features-v2.js",
15+
"experiment:v7-attribution": "node scripts/experiment-v7-attribution.js run C3 96 8 3 && node scripts/experiment-v7-attribution.js aggregate",
16+
"audit:v7-solver-utilization": "node scripts/audit-v7-solver-utilization.js 1000",
17+
"evaluate:v7-mechanism-96": "node scripts/evaluate-v7-mechanism-ranking-96.js",
1518
"gate:v6-strength": "node scripts/gate-v6-strength.js",
1619
"reality:v7": "node scripts/build-v7-battle-graph.js 15 12 100 && node scripts/fit-v7-empirical-strength.js && node scripts/calibrate-strength-model-v7.js && node scripts/audit-v7-seed-dispersion.js && node scripts/audit-v7-product-strength.js 40 8 && node scripts/audit-stat-sensitivity-v7.js 7 8 8 3 && node scripts/audit-battlepower-v4.js",
1720
"build:v7-graph": "node scripts/build-v7-battle-graph.js 15 12 100",
@@ -49,3 +52,4 @@
4952
}
5053
}
5154

55+

0 commit comments

Comments
 (0)