Related #846 and #962. Checker.typeParameterName in packages/ts_checker/src/check.zig currently tests only flags.is_type_parameter and then indexes type_parameter_payloads with pool.payloadOf(t). Union and intersection flags OR constituent flags, so a union containing a type parameter can enter this path even though its payload indexes the union pool. Interner.typeParameterName already has the correct direct-parameter guard, and interner.zig has a regression proving that an aggregate union flag is not a type-parameter payload.\n\nObserved during #962: replacing the checker helper with Interner.typeParameterName made the full checker run report 4705 pass / 1 fail: checker: contextual generic conditional returns reuse alpha substitutions expected zero TS2322 but found one. Reordering union traversal in extendSubstitutionsByMatchingTypeParamNamesInner did not resolve that failure. Restoring the old helper and retaining the targeted firstFreeTypeParameter traversal fix yielded a clean 4706/4706 checker run and passing CLI stream suite. The broader helper is therefore not yet safely hardened; the failed trial was not committed.\n\nAcceptance: audit checker call sites that pass aggregate types to typeParameterName, make union/intersection traversal explicit where needed, use direct type-parameter identity for payload reads, preserve contextual generic conditional returns and the #962 flatMap regression, and run the full checker and relevant CLI suites. Do not rely on accidental payload-index coincidence or suppress diagnostics.