* Let types narrow to literals of identity-bearing object values
A type whose values carry identity implements HasValueIdentity: two of
its values are the same exactly when their identity keys are equal.
IdentityLiteralType is a singleton of such a type, and its shape relates
like a scalar literal: it fits wherever its base fits, two literals with
equal keys are one shape, and unequal literals share no values.
An equality rule declared through Operator::infix() (=, ==, ===, and the
negations != and !==) whose two slots are one identity-bearing type now
reports a dead operation when its operand types share no value, with
core Equality's messages. Comparing a union of bands to a band outside
it can never hold. Rules over other types, and non-equality rules, keep
checking admissibility only.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Give the test job room for mutation testing
The suite and mutation run already took 3.5 to 4.8 minutes on 0.x, so
any change that adds mutants crossed the 5-minute job limit and was
cancelled mid-run.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>