From the #131/#132 reviews (the reminder in the #132 review; first surfaced against the shared-base-spread path).
Problem
report(ir) walks each component prop's IR node via imperfection(), but a typeRef to a REGISTERED shared record is opaque to that walk β imperfections live inside the registry entry's fields, not on the ref node. Similarly irHasImperfection(ref) in the shared-base-spread gate (#82) inspects only the ref node. Consequences:
Suggested fix
Give imperfection()/report() (and the #82 gate) registry access so a typeRef resolves to its entry and the walk descends into record fields / unboxed members / opaque views β with a visited-set for cycles. Component buckets then reflect the TRUE worst imperfection reachable from their props. Alternatively (cheaper): registry entries cache their own worst-imperfection at registration time and refs carry it.
Per #107's contract framing: nothing may degrade unflagged β the inline field comments are correct today; it's the REPORT aggregation that under-reports.
From the #131/#132 reviews (the reminder in the #132 review; first surfaced against the shared-base-spread path).
Problem
report(ir)walks each component prop's IR node viaimperfection(), but atypeRefto a REGISTERED shared record is opaque to that walk β imperfections live inside the registry entry's fields, not on the ref node. SimilarlyirHasImperfection(ref)in the shared-base-spread gate (#82) inspects only the ref node. Consequences:anyβ the field itself is correctly flagged inline since Props dropped through nested Omit + index signature; deep records silently degrade to all-string; typeof-module & tuple-union fallbacks (via @juspay/blend-design-system)Β #98/Error-any from unresolvable imports silently becomes 'a / string β must flag (ThemeProvider.foundationTokens)Β #107) does NOT surface in the owning component's report bucket: the component reads β usable while shipping a broken field;_REPORT.mdheadline counts undercount broken surface;FlatChart'sDict.t<'a>β broken-string demotion is likewise invisible at the component level.Suggested fix
Give
imperfection()/report()(and the #82 gate) registry access so atypeRefresolves to its entry and the walk descends into record fields / unboxed members / opaque views β with a visited-set for cycles. Component buckets then reflect the TRUE worst imperfection reachable from their props. Alternatively (cheaper): registry entries cache their own worst-imperfection at registration time and refs carry it.Per #107's contract framing: nothing may degrade unflagged β the inline field comments are correct today; it's the REPORT aggregation that under-reports.