The transparent Deck Quality Score: a versioned config + a pure composite scorer.
Scope
scoring.json default config (dimension weights + thresholds), versioned + snapshot-guarded like tuning.json (extends the /admin/tuning pattern).
analysis/score.ts: scoreDeck(health, config) → { score (0–100), breakdown[], configVersion }, where score = Σ(weightᵢ × dimensionScoreᵢ) + archetypeCoherence − vulnerabilityPenalty.
- Every score returns a per-dimension breakdown (contribution + reason) — explainability is a hard requirement.
Tests: deterministic given config, version stamp present, breakdown contributions sum to the score.
Part of #450 · Deck Builder & Engine Score milestone.
The transparent Deck Quality Score: a versioned config + a pure composite scorer.
Scope
scoring.jsondefault config (dimension weights + thresholds), versioned + snapshot-guarded liketuning.json(extends the/admin/tuningpattern).analysis/score.ts:scoreDeck(health, config) → { score (0–100), breakdown[], configVersion }, wherescore = Σ(weightᵢ × dimensionScoreᵢ) + archetypeCoherence − vulnerabilityPenalty.Tests: deterministic given config, version stamp present, breakdown contributions sum to the score.
Part of #450 · Deck Builder & Engine Score milestone.