ID

R694

Status

Backlog

Bucket

architecture

Priority

3

Theme

service

Created

2026-08-17

Updated

2026-08-17

Key the @service input-bean helper dedup on binding shape, the member-axis twin of R437

The create<Bean> / create<Bean>List instantiation helpers emitted on a <Type>Fetchers class are deduplicated by bean ClassName alone: InputBeanInstantiationEmitter.collectTransitively and TypeFetcherGenerator.registerBeanHelper both putIfAbsent(beanClass, ...), and the javadoc on the former states the assumption outright, that "two top-level InputBean`s carrying the same bean class are assumed structurally equal (the resolver maps the same Java class to the same SDL input-object type, by construction)". Nothing enforces that. One consumer-authored bean class can back two different SDL input types at two `@service fields on one type, and if those input types bind their fields differently (divergent @field(name:) values, or a field present in one and absent in the other) the second field’s call site routes to the first-seen helper and reads the wrong Map keys, populating members as null with nothing in the build saying so.

This is the member-axis twin of the R437 correctness bug, which was a real production defect on the jOOQ-record axis (fs-plattform silently wrote DATO_FRA as 1900-01-01) and was fixed there by re-keying dedup, naming, and call-site routing on the full binding shape through a JooqRecordHelperNames resolver. The member axis never got the same treatment. FetchersHelperNames already layers cross-class stem disambiguation under the jOOQ arm’s within-class shape contention, so the composition point for a member-axis shape arm exists; the likely shape of the fix is a sibling resolver keyed on InputBean’s own structural `equals, with the uncontended case keeping today’s bare create<Bean> name so no emitted output churns.

Filed out of R693’s spec pass, which touches this neighbourhood: flattening a nested grouping input onto a bean adds access paths to the set of things two same-class beans can disagree about. R693 neither fixes nor worsens the failure class and is independent of this item in both directions.