The red score that left me empty-handed
I watched Equora measure a 0.694 worst-group disparate-impact ratio on a fixed, 9,000-record synthetic tenant-screening cohort, and the result felt incomplete before the red badge had finished rendering. My first pass at the workflow stopped there. I had a defensible measurement and no defensible next step for the operational question I would expect counsel or a model-risk team to ask: what could we change, and what would that change cost?
I had built the baseline to make that gap visible. ScreenScore v3 produced an AUC of 0.7823 and an overall approval rate of 0.6238 on the synthetic fixture. Black applicants had a 0.4781 approval rate, compared with 0.6889 for the White reference group. The resulting DIR was 0.6940. A Black voucher-holder intersection measured 0.7008.
I treat 0.80 as the demo's configured four-fifths policy gate. It is not an automatic Fair Housing Act finding, and it is not a legal conclusion. The number decides what this engineering workflow does next: block release and start a reproducible search.

The audit establishes the baseline on the fixed synthetic cohort and holds release at the configured policy gate.
That distinction matters in the real policy environment. In November 2024, Louis et al. v. SafeRent Solutions ended in a $2.275 million settlement with no admission of wrongdoing. The allegations and settlement are not proof about this demo's synthetic fixture. They are a reminder that screening-model evidence needs to survive review outside the model team.
The search space I had to make visible
I resisted the temptation to ask a model for a plausible recommendation. Before I let the engine evaluate a candidate, I wrote down the dimensions it was allowed to vary and the constraints every result had to face. That became a bounded set of facially neutral configurations that another reviewer could inspect and replay. Every candidate is evaluated at equal selectivity, so the comparison cannot hide behind a looser approval threshold.
I kept the space narrow enough to audit and broad enough to test a meaningful change. The engine varies subsets of four optional high-risk features, credit-score caps of no cap, 720, 680, or 640, whether guaranteed voucher income is credited, and six L2 values from 0.1 through 30.0. Debt-to-income ratio, months employed, and reported income remain included. That produces 480 configurations, each retrained and measured by the same code.
I wanted the search to expose its constraints, including the possibility of failure. A candidate has to clear the configured DIR gate and remain within a 0.03 AUC budget. If none qualifies, the engine returns no safe alternative. It does not manufacture a favorable answer because the workflow expects one.
The result that changed my design
I watched the evaluation counter reach 480, then compared the red baseline point with the green candidate on the Pareto frontier. Of the 480 configurations, 240 cleared the configured gate within the accuracy budget. The selected candidate was the qualifying option with the smallest measured AUC loss in this search.
I could see exactly what changed. The configuration retained the seven baseline features, capped credit-score influence at 640, credited guaranteed income, and used L2 regularization of 10.0. Worst-group DIR moved from 0.694 to 0.875. AUC moved from 0.7823 to 0.7788, a measured difference of 0.0036 that the interface reports as 0.36%. The Black voucher-holder intersection moved from 0.701 to 1.029.

The selected point makes the measured tradeoff inspectable: higher minimum DIR with a small, nonzero AUC movement.
I do not read that result as a universal optimum, a fairness certification, or proof about a real housing population. It is the lowest-measured-AUC-cost qualifying candidate in one bounded search over one synthetic fixture. Its value comes from the record: the alternatives tested, the constraints applied, the tradeoff accepted, and the rule that selected it.
The evidence I would want handed to counsel
I finished the workflow by keeping metric computation, candidate selection, and release decisions outside generated prose. A language model can help draft an explanation when enabled, but it does not choose the threshold or the alternative. The demo also checks that a denial notice cites the top three negative feature contributions; a generic reason code that cites no specific feature routes to human review.

The release gate compares cited reasons with exact attribution and holds the unsupported generic code for human review.
I kept those controls beside the search because remediation has to survive the handoff. A fairness team may find an alternative, but legal, model-risk, product, and engineering reviewers still need the same artifact. They need to replay the evaluation and see why this candidate was selected over the others.
I built the full Equora breakdown to show that chain in one place: synthetic input, measured disparity, bounded search, Pareto tradeoff, exact decision drivers, and a release gate. It is an engineering demonstration, not legal advice or a production decisioning system.
I started with a red score and ended with a reviewable decision record. The durable work begins after the audit, when the organization must show what it tested, what it changed, what it gave up, and why that choice can be defended.