Implementation source:libs/nous/agreement-search/src/nsga-ii.ts plus
shared GA primitives in ga-operators.ts.
Intended use: approximating the Pareto frontier when parties or mediators
must see genuinely different agreement families (60/40 vs 40/60, early-payout
vs long-term royalty, restorative vs restitutive). Used by the workbench
frontier view (§179.4.3.1).
Utility aggregation: none — multi-objective. One objective per party by
default (maximize each party's mean utility minus BATNA); callers may pass
{ id, direction } objectives to add fairness-metric or domain objectives.
Fairness metrics reported: caller-selected; full fairness-metrics.ts set
attaches to the run summary.
Handling of hard constraints: filtered by filterCandidates before the
candidate enters the population.
Handling of uncertainty: objectives may consume posterior mean, LCB, or
Thompson-sampled draws; the kernel is agnostic and uses whatever the caller's
evaluate returns.
Accepted candidate contract: the entire final non-dominated front F_1 plus
dominated fronts F_2, F_3, ..., each annotated with rank and crowding
distance.
Pareto-frontier diagnostics: rank histogram, per-front crowding
distribution, dominated/dominating counts. The workbench renders these as the
diversity panel (§179.4.3.1).
Uncertainty propagation: every front member carries the same posterior
detail nash-genetic emits.
Redline separation: hard constraints filtered before the population.
Pareto-coercion audit: the workbench rendering layer
(pareto-explanations.ts) cannot reorder fronts to manipulate party
perception; the rendering is from the kernel's record.