- NullableWireObjectDetector skips HOOKED (computed) properties: a get-hook is
not a hydration slot, so 'T | Optional' cannot apply — 'T | null' is the honest
computed wire shape (closes #394, closes #395).
- ContainerReachDetector's Container heuristic now sees SUBCLASS instantiation:
an abstract base new'ed only via hand-built subclasses is not container-resolved
(closes #392).
- MatchDefaultReturnsNullDetector no longer flags a match over an OPEN subject
whose handled arms already call ?T-declared heuristics — null is the match's
own answer vocabulary, not a swallowed case; an enum subject still flags
(closes #393).
- ManufacturedFakeFillDetector no longer treats '?? []' as a fake: an empty
collection is the type's identity, a real domain answer (closes #398).
New engine tools: AstNode::isEmptyArrayLiteral / isHookedProperty,
NodeMatch::matchHandledArmsAdmitNull, Codebase::methodReturnsNullable.