mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-18 00:56:30 +03:00
Weight staging draws by rating, with catalog validation for composition grades
Stagings now honour approval ratings exactly as world challengers do, a 3-star earning a second ticket and a 1-star marginal keep leaving the pool, which matters more here because per-surface staging pools are small enough that an unweighted shuffle repeats a weak staging often. Each ticket carries its index into the deterministic ranking so the id-dedupe cannot silently collapse the doubled odds into a no-op, and an all-marginal pool still deals rather than starving. The composition catalog validates the new grades: 1-3, approved entries only. Tests cover the weighting, the dedupe subtlety, and the fallback. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
cb8144dd12
commit
a68b74e787
@@ -149,6 +149,15 @@ export function validateCompositionCatalog(catalog, reviewData, { minimumTotal }
|
||||
errors.push(`composition review ${id} is stale: content changed since review`);
|
||||
}
|
||||
}
|
||||
// Mirrors the concept catalog: an optional 1-3 grade on approved entries
|
||||
// only, read as a calibration signal and used to weight challenger draws.
|
||||
if (review?.rating !== undefined) {
|
||||
if (![1, 2, 3].includes(review.rating)) {
|
||||
errors.push(`review ${id} rating must be 1, 2, or 3`);
|
||||
} else if (review.status !== 'approved') {
|
||||
errors.push(`review ${id} rating only applies to approved compositions`);
|
||||
}
|
||||
}
|
||||
if (review?.note !== undefined && (typeof review.note !== 'string' || !review.note.trim() || review.note.length > 500)) {
|
||||
errors.push(`composition review ${id} note must be a non-empty string of 500 characters or fewer`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user