Task Summary
isSink matches with operator.operatorType.toLocaleLowerCase().includes("sink") (workflow-graph.ts:81). toLocaleLowerCase() folds case using the runtime's current locale, which in the frontend is whatever language the browser is set to, so the same operator type can fold two ways for two users. Turkish is the case that bites: an uppercase I maps to the dotless ı, so a type spelled SINK folds to sınk and stops matching.
Nothing is broken today. The only operator type containing "sink" is SimpleSink, and its i is already lowercase, so no locale touches it. An operator type is a machine identifier though, and folding one should not depend on where the browser runs. toLowerCase() is the locale-independent form and is what this comparison wants.
Four call sites read it: the setViewOperatorResult and markReuseResult guards (workflow-graph.ts:465, :518), the result panel's sink list (result-panel.component.ts:189), and the cache-toggle filter (operator-menu.service.ts:175). A type that folded differently would drop out of the result panel and become eligible for the two toggles it is meant to be excluded from.
Required Test
workflow-graph.spec.ts already asserts that SINK is a sink. That is the case that would flip, so it serves as the regression test.
Related
Surfaced while reviewing #8603, which added the first coverage for this helper.
Task Type
Task Summary
isSinkmatches withoperator.operatorType.toLocaleLowerCase().includes("sink")(workflow-graph.ts:81).toLocaleLowerCase()folds case using the runtime's current locale, which in the frontend is whatever language the browser is set to, so the same operator type can fold two ways for two users. Turkish is the case that bites: an uppercaseImaps to the dotlessı, so a type spelledSINKfolds tosınkand stops matching.Nothing is broken today. The only operator type containing "sink" is
SimpleSink, and itsiis already lowercase, so no locale touches it. An operator type is a machine identifier though, and folding one should not depend on where the browser runs.toLowerCase()is the locale-independent form and is what this comparison wants.Four call sites read it: the
setViewOperatorResultandmarkReuseResultguards (workflow-graph.ts:465,:518), the result panel's sink list (result-panel.component.ts:189), and the cache-toggle filter (operator-menu.service.ts:175). A type that folded differently would drop out of the result panel and become eligible for the two toggles it is meant to be excluded from.Required Test
workflow-graph.spec.tsalready asserts thatSINKis a sink. That is the case that would flip, so it serves as the regression test.Related
Surfaced while reviewing #8603, which added the first coverage for this helper.
Task Type