Repository navigation
Implement soft-cap logarithmic scoring for aesthetic penalties - #21
Merged
REX-codebase merged 1 commit intoJul 14, 2026
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Previously, the design simulator capped aesthetic penalties at a hard limit of 80 points. While this prevented scores from flatlining to zero, it introduced a major issue: layouts with many minor violations (exceeding 80 points) looked identical to search evaluations. The search algorithm had no way of distinguishing between a moderately flawed layout and a massive visual failure, leading to suboptimal generation.
Simply removing the cap was not an option either, as doing so flatlined scores to zero, causing the guided search heuristics to collapse into a random walk.
To solve this, we are replacing the hard 80-point penalty limit with a soft logarithmic decay function. This preserves relative score differences among lower-quality layouts (providing gradient signals for optimization) while guaranteeing that scores do not flatline to zero solely due to styling violations.
What
Math.min(80, tasteScoreDeduction)clamp.(implemented in code as
80 + 2.5 * Math.log(tasteScoreDeduction - 80 + 1))runTasteAuditspipeline. This prevents any regression or breaking changes to existing CLI parsers, runner scripts, or subprocesses.Key Rationale & Design Choices
Verification & Test Results