Run Constraint Table Data
data class RunConstraintTableData(var runId: Int = -1, var responseName: String = "", var estimate: Double = 0.0, var violation: Double = 0.0, var ciUpperLimit: Double? = null, var feasibleAtCI: Boolean = false) : DbTableData(source)
One row per (run, response constraint): the cell best's estimate for the constrained response, by how much the constraint is violated, the one-sided upper confidence limit, and whether that constraint on its own can be declared feasible.
tblRun.responseConstraintViolation is retained alongside this and is unchanged; it is the aggregate, and an aggregate cannot say WHICH constraint bound. That question — do particular solvers fail specifically on one coupling constraint? — is what these rows answer.
ciUpperLimit is null when the estimate carried fewer than two observations, so there was no sample variance and no interval to report. A feasibleAtCI of false on such a row means "not shown feasible", not "shown infeasible".