lib.fileset: Document decision for strict existence checks

Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>

Changed files
+13
lib
fileset
+13
lib/fileset/README.md
···
- (+) That can change depending on which files are included, so if it's used for `fileFilter`
it would change the `subpath`/`components` value depending on which files are included.
- (+) If necessary, this restriction can be relaxed later, the opposite wouldn't be possible
+
+
### Strict path existence checking
+
+
Coercing paths that don't exist to file sets always gives an error.
+
+
- (-) Sometimes you want to remove a file that may not always exist using `difference ./. ./does-not-exist`,
+
but this does not work because coercion of `./does-not-exist` fails,
+
even though its existence would have no influence on the result.
+
- (+) This is dangerous, because you wouldn't be protected against typos anymore.
+
E.g. when trying to prevent `./secret` from being imported, a typo like `difference ./. ./sercet` would import it regardless.
+
- (+) `difference ./. (maybeMissing ./does-not-exist)` can be used to do this more explicitly.
+
- (+) `difference ./. (difference ./foo ./foo/bar)` should report an error when `./foo/bar` does not exist ("double negation"). Unfortunately, the current internal representation does not lend itself to a behavior where both `difference x ./does-not-exists` and double negation are handled and checked correctly.
+
This could be fixed, but would require significant changes to the internal representation that are not worth the effort and the risk of introducing implicit behavior.