Modern software systems are expected to be secure and contain all the latest features, even when new versions of software are released multiple times an hour. Each system may include many interacting packages.

The problem of installing multiple dependent packages has been extensively studied in the past, yielding some promising solutions that work well in practice. However, these assume that the developers declare
all the dependencies and conflicts between the packages. Often, the entire repository structure may not be known upfront, for example when packages are developed by different vendors.
In this talk, I will present algorithms for learning dependencies, conflicts and defective packages from installation attempts. Our algorithms use combinatorial data structures to generate queries that test installations and discover the
entire dependency structure. A query that the algorithms make corresponds to trying to install a subset of packages and getting a Boolean feedback on whether all constraints were satisfied.

The goal is to minimize the query complexity of the algorithms. We prove lower and upper bounds on the number of queries that these algorithms require for various settings of the problem.