Selector queries have no fallback producer on the iOS Simulator, and any fallback needs producer equivalence
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 42/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 活発
- 技術スタック
- ios, typescript
調査の方向性
まず #2197 と #2273 を読んで、Simulator の snapshot 契約と、型付きクエリの失敗の区別を理解してください。次に、主要な snapshot producer、その private-AX fallback、そして selector query path を追ってください。Fallback クエリが identifier と label によるマッチングを維持し、真の負例を同じ error code で報告し、劣化の前後で一貫して応答できれば完了です。
索引モデルが issue の本文から書いたものです。
説明
Split out of #2273 at triage request, to keep that issue scoped to the typed failure contract.
What this asks for
A selector query on the iOS Simulator has no fallback producer. Where the snapshot path degrades,
snapshot switches to the private-ax producer and still returns the element, and a selector query
for that same element fails.
This issue tracks giving the selector path a fallback, and the equivalence it would have to hold.
The observation behind it
Measured on agent-device 0.20.10, iOS Simulator, in a remote EAS Simulator session. Full method
and diagnostics are in #2273.
Six screens, 30 is visible calls each. Three screens answered every call. Three answered almost
none, all with XCTEST_RECORDED_FAILURE.
The split follows one thing only, which each capture states in its own header.
| screen | nodes | capture truncated and fell back | queries |
|---|---|---|---|
| screen 1 | 189 | no | answer |
| screen 2 | 177 | no | answer |
| screen 3 | 188 | no | answer |
| screen 4 | 901 | no | answer |
| screen 5 | 178 | yes | fail |
| screen 6 | 170 | yes | fail |
| screen 7 | 149 | yes | fail |
Node count does not predict it in either direction. Screen 4 holds 901 nodes and answers. Screen 7
holds 149 and fails.
A capture taken immediately before each probe held the element every time. So the element was
present and readable while the query for it failed.
Why this is not simply "add the fallback"
Triage notes that #2197 establishes the Simulator snapshot producer and presentation contract
first, and that this work should follow it. We agree, and we want to add one requirement from a
caller's side.
Producer equivalence. A selector resolved through the fallback producer must match identifiers
and labels the same way the primary producer matches them. If the two producers expose different
identifiers, or propagate labels differently, then a query answered from the fallback could report
an element absent when it is present.
For us that would be worse than the failure we reported. A failure stops a flow and names itself. A
false negative passes a check that should have failed, or fails a check that should have passed, and
neither names the producer.
We cannot measure that equivalence ourselves. We tried. We captured one screen twice in one
run, once clean and once degraded, and the two captures turned out to be different states of the
screen rather than one state read two ways. So we have no data on how the two producers differ, and
we are not claiming any.
Acceptance tests we would find convincing
- An element that is present is never reported absent, on either producer, for identifier and label
selectors alike. - A true negative is reported identically by both producers, and with the same error code.
- A screen that forces the fallback answers the same selector query as the same screen before it
degraded.
What would unblock us sooner
Nothing here is urgent for us if #2273 lands. A typed reason that separates "the query could not
run" from "the element is absent" lets a flow retry or read the screen instead, which is enough to
work around this. The fallback is the better fix and the slower one.
- 主要言語
- TypeScript
- スター
- 4.9k
- フォーク
- 328
- 平均マージ
- 12時間 18分
- マージ済み PR(30日)
- 538
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
callstack/agent-device のほかの issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
callstack/agent-device#3353 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
callstack/agent-device#1869 ·
メンテナーはふだん 1 日以内に返信
-
難易度 3/5 1〜2日 初心者へのやさしさ 45/100
callstack/agent-device#3392 ·
メンテナーはふだん 1 日以内に返信
-
settings permission --app writes a display name as the bundle id instead of resolving it対応中かも @thymikee が今日担当しました。 オープン
難易度 3/5 1〜2日 初心者へのやさしさ 22/100
callstack/agent-device#3384 ·
メンテナーはふだん 1 日以内に返信
-
iOS: a canceled request releases the session lock while its runner command still runs on the device対応中かも @thymikee が今日担当しました。 オープン
難易度 4/5 3〜5日 初心者へのやさしさ 22/100
callstack/agent-device#3383 ·
メンテナーはふだん 1 日以内に返信
callstack/agent-device の issue をすべて見る
似ている issue
-
area: desktop area: website priority: P2 type: feature
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
appandflow/stim#3411 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
needs triage
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
rjsf-team/react-jsonschema-form#5485 ·
メンテナーはふだん 2 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 1 日以内に返信
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
難易度 1/5 1時間未満 初心者へのやさしさ 65/100
lingdojo/kana-dojo#32090 · コメント 1 件 · リアクション 5 件 ·
メンテナーはふだん 1 日以内に返信
-
friction
難易度 2/5 1〜3時間 初心者へのやさしさ 80/100
kentcdodds/kody#3265 ·
メンテナーはふだん 1 日以内に返信