Skip to content

bundle: config_binding names a field that the fields table does not list, for 73 percent of its rows #890

Description

@swapnilpaliwal-sd

config_binding carries the field a configuration key binds to. fields is documented as
holding "all client fields and enum constants from the IR, plus every LIBRARY field some
field_access edge reaches". A library field that no field_access reaches is therefore
absent, and config_binding references it anyway, so the join loses the row silently.

Measured on 8 Spring Boot services solved with one shared starter as --library:

config_binding field ids count
present in fields 42
absent, a LIBRARY field 104
absent, in neither IR 8
total 154

So 112 of 154, 73 percent, do not resolve. A consumer joining config_binding to
fields to answer "which field does this key bind to" gets an answer for roughly a quarter
of the rows and no indication that the rest were dropped.

The 8 in neither IR are a separate, smaller question: those ids are in no all-fields.csv
on either side, so they are not explained by the library rule at all.

Why this shape rather than another

The library half is arguably working as documented: fields is deliberately not the whole
library, and a @Value field on a library type that nothing reads has no edge to justify
listing it. But config_binding is precisely the relation that says the field matters, and
it is exported. Two consistent options:

  • have a config_binding row count as a reason to list the field, the same way a
    field_access edge does. That is one clause and makes the join total.
  • or state on config_binding that its field column is not a foreign key into fields,
    and give the key's binding site some other resolvable identity.

The first seems better: the whole point of the relation is that something binds to that
field, so the bundle already knows it is interesting.

Activity

  1. swapnilpaliwal-sd commented on Sep 18, 2026

    @swapnilpaliwal-sd
    ContributorAuthor

    Leaving this OPEN deliberately. Its fix, #902, is on hold at the repository owner's
    direction, so closing the issue would retire the record of a measured defect while the
    defect is still present on main.

    Re-confirmed at a411ecd7: config_binding still names field ids that fields does not
    list, so a consumer joining the two silently loses those rows.

    When #902 is taken off hold, this closes with it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingjavaJava

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions