ff442a0e

Skip a build directory by its whole name, not by a prefix of it

Independent of #11 and #12.

The discovery walk skipped any directory whose name started with `result`, meaning to skip a nix build output:

```haskell
|| "result" `isPrefixOf` name
```

It also skipped one called `results`, and every package under it went missing from discovery **with nothing reported**. That is what makes it worth a PR rather than a line: a walk that finds no cabal file and a walk that refused to look return the same answer to a caller.

The fixture fails on master with `Right []` where it wants `Right [PackageName "thing"]`. I checked that before keeping the fix.

## Why anything is skipped at all

Nothing here matters inside a Nix build. The source there is a store path copied from the git tree, so an ignored directory never arrives — I checked, and the flake's own source path holds no `dist-newstyle`, `node_modules`, `.git` or `result`.

It matters for a working tree, which is what the development loop and `scripts/corpus-run.sh` are pointed at. And there `dist-newstyle` earns its place, concretely: cabal unpacks a `source-repository-package` into `dist-newstyle/src`, cabal file and all. sydtest has one right now, `opt-env-conf-test-0.0.0.3`, and walking into it takes sydtest from 51 findings to 64 — the 13 extra being a file nobody in sydtest wrote. A hidden directory is the same story, `.stack-work` most of all.

## Two names are gone rather than corrected

**`result`.** It is a symlink to a build output that holds no cabal file: in this repository it points at `facts.db`, `report.json`, `report.txt`, and a nix source derivation is a tarball. So the walk follows it, finds nothing, and moves on. An earlier version of this replaced the name test with a symlink test — that was wrong in the same way as the bug, because a repository that links a package in on purpose has one to find there, and refusing the link loses it just as silently.

**`node_modules`.** Nothing puts a Haskell package there, so naming it only added something this could be wrong about.

Both are asserted as walked, so adding a name back is a decision rather than a default.

## Testable

`skippedByName :: Path Rel Dir -> Bool` is top-level and exported, where the walk had it in a `where` clause with no signature and no test. It is pure, so the prefix case is a unit test rather than a walk over a fixture.

188 tests, 10 new. Corpus findings are unchanged: nix-ci 0, sydtest 51, centjes 46, hopinion 0.

## One thing worth knowing

The fixture needed a line in `.gitignore`. Your global ignore file has `result*`, which hides a directory called `results` exactly the way this walk did — this repository's own `.gitignore` gets it right with `result` and `result-*`. Same bug one level up, silently untracking anything named that way in every repository. I have not touched it.

## Review loop

```
nix flake check
nix develop --command cabal test hopinion-test --test-options="--ai-executor"
```