Add TestId, TestIdTrie, and per-test filtering (prerequisite for mutatie) ## Summary - Adds \`Test.Syd.TestId\` with an opaque \`TestId\` type (description path + per-description sibling index), \`TestIdTrie\` for efficient subset filtering, and \`renderTestId\` / \`testIdFilterArg\` / \`parseTestIdFilterArg\` for human-readable output and \`--filter-id\` round-tripping. - Adds \`flattenTestForestWithIds\` to enumerate all \`TestId\`s from a \`TestForest\`, assigning stable per-description sibling indices so duplicate descriptions are uniquely identified. - Adds \`filterTestForestByTrie\` to filter a \`TestForest\` to exactly the tests in a \`TestIdTrie\`; wrapper nodes (\`beforeAll\`, \`aroundAll\`, etc.) are kept when any child matches and dropped when all children are pruned. - Adds \`execTestDefM'\` to evaluate a \`Spec\` once and return both the \`TestForest\` and a full-coverage \`TestIdTrie\`, so the spec need not be re-evaluated in a mutation loop. - Adds \`getTestIds\` and \`runFilteredForest\` as the public API for enumerating test IDs and running a pre-built forest filtered to a given trie. - Adds \`--filter-id\` CLI flag and \`settingFilterIds\` field to \`Settings\` for exact single-test selection by \`TestId\`, composing with the existing \`--filter\`. All existing tests pass. Golden files updated for the new \`settingFilterIds\` field in \`defaultSettings\` and the new \`--filter-id\` flag in the CLI documentation. ## Test plan - [ ] \`nix flake check\` passes (verified locally) - [ ] \`stack test sydtest-test\` passes (133 passed, 0 failed) - [ ] Pre-commit hooks all pass (ormolu, hlint, hpack, cabal2nix)