fc501a6c

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

Work out a component's lexicon once, and say what the store does

The reachability walk ran per field, and a repository has a few thousand fields
against a few dozen components, every site in one of which may draw on exactly
the same types. It runs per component now.

The comment over the dependency insert named insertKey where the call is
repsert, which is the part that matters: a cabal file naming one dependency
twice across a component's conditionals declares one edge, and an insert keyed
on the edge would refuse the second.

A dependency declared by one component of a package is not one its other
components may use, and only reachablePackages' own spec said so. A resource
says it too now, with a library and a test suite where only the test suite
builds against the package holding the type: which component a site is in is
what decides whether the type is within reach, and nothing before this would
have noticed the extraction filing an edge under the wrong one.
e2e-added-rule-is-rune2e-artifacts-are-reade2e-choices-are-found-beside-the-repositorye2e-cleane2e-dirty-package-is-judged-failinge2e-dirty-project-is-judged-failinge2e-dirty-report-is-readablee2e-disabled-rule-is-not-rune2e-incomplete-artifacts-are-a-failuree2e-judging-nothing-failse2e-named-packages-are-every-packagee2e-no-packages-is-judged-failinge2e-no-store-paths-in-findingse2e-paths-are-repository-relativee2e-withheld-facts-faile2e-wrong-source-mapping-is-a-complainthlint-checkhopinionpre-commitreleaseshellweeder-checkconfiguredevShelldefaultx86_64-linux