D033 - Which library each import comes from is published by the host build

Status: decided.

A module encodes an import as a NID plus a library id, and separately declares what that id means. An id with nothing declared against it resolves to nothing - the first version encoded every symbol as <nid>#A#A, four hundred imports all claiming a library that was never declared, and the loader gave up with "Unable to find library and module".

A linked ELF cannot supply the association: a .dynsym entry records that a symbol is undefined, not who is expected to define it. It exists in the census tables and the import table and nowhere else, so obscene-host --symbols prints it and the module build consumes it. That makes the host build a prerequisite of the module build, which it already was in principle (D001).

There is no default. mkmodule fails, naming every symbol it cannot place, rather than falling back to id zero. Defaulting turns a missing line into a module that loads, resolves nothing, and says nothing about why.