From 906759dc150ff92cadc132188f658e6749d7fe2c Mon Sep 17 00:00:00 2001 From: PJ Date: Sun, 16 Aug 2026 01:08:07 +0530 Subject: [PATCH] docs(skills): substring selector matching is native only --- skills/sanderling-setup/SKILL.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/skills/sanderling-setup/SKILL.md b/skills/sanderling-setup/SKILL.md index c8d4dfa..47d5402 100644 --- a/skills/sanderling-setup/SKILL.md +++ b/skills/sanderling-setup/SKILL.md @@ -125,11 +125,13 @@ agreement properties possible. **iOS.** `accessibilityIdentifier`, set via `.accessibilityIdentifier` in SwiftUI or UIKit. Compose Multiplatform maps `testTag` to it for you. -Two rules about the names themselves. A `testTag` selector falls through to a -substring compare, so `{testTag: "Sub"}` matches `AddAccountSubmit`: make each -hook a whole distinct name rather than a fragment of another. And give every -screen a marker of its own, because a route extractor is what lets a property -decline on the screens it has nothing to say about. +Two rules about the names themselves. On Android and iOS a `testTag` selector +falls through to a substring compare, so `{testTag: "Sub"}` matches +`AddAccountSubmit`; on web the same selector compiles to an exact CSS attribute +match and hits nothing. Make each hook a whole distinct name rather than a +fragment of another, and you are right on both. And give every screen a marker +of its own, because a route extractor is what lets a property decline on the +screens it has nothing to say about. The check that a hook exists is not that you added it. It is that you can point at a step in a real trace where a selector over it resolved to a value.