diff --git a/.gitattributes b/.gitattributes index 708c168a..f98c9fe9 100644 --- a/.gitattributes +++ b/.gitattributes @@ -34,3 +34,4 @@ docs/validation/recorded-tests/** -text -whitespace # Preserve WebView engine evidence bytes, including native XML CRLF. docs/validation/webview-engine/** -text -whitespace +docs/validation/native-input/** -text -whitespace diff --git a/app/src/androidTest/AndroidManifest.xml b/app/src/androidTest/AndroidManifest.xml index e48350be..c0a5b1a9 100644 --- a/app/src/androidTest/AndroidManifest.xml +++ b/app/src/androidTest/AndroidManifest.xml @@ -1,6 +1,12 @@ + + + + diff --git a/app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt b/app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt new file mode 100644 index 00000000..ba70d998 --- /dev/null +++ b/app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt @@ -0,0 +1,10 @@ +package dev.tinycast.android + +import androidx.compose.ui.semantics.SemanticsProperties +import androidx.compose.ui.semantics.getOrNull +import androidx.compose.ui.test.SemanticsMatcher + +/** Exact UTF-16 content; IME composition may add decoration to EditableText. */ +internal fun editableCharactersExactly(expected: String) = SemanticsMatcher( + "EditableText has exactly ${expected.length} UTF-16 units and matching characters" +) { node -> node.config.getOrNull(SemanticsProperties.EditableText)?.text == expected } diff --git a/app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt b/app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt new file mode 100644 index 00000000..81e360af --- /dev/null +++ b/app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt @@ -0,0 +1,507 @@ +package dev.tinycast.android + +import android.content.Context +import android.os.Build +import android.os.SystemClock +import android.view.InputDevice +import android.view.KeyCharacterMap +import android.view.KeyEvent +import android.view.Window +import android.view.inputmethod.EditorInfo +import android.view.inputmethod.ExtractedTextRequest +import android.view.inputmethod.InputConnection +import android.view.inputmethod.InputMethodManager +import androidx.compose.ui.semantics.SemanticsProperties +import androidx.compose.ui.semantics.SemanticsActions +import androidx.compose.ui.semantics.getOrNull +import androidx.compose.ui.test.* +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.TextRange +import androidx.compose.ui.text.style.TextDecoration +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.uiautomator.UiDevice +import java.io.File +import java.security.MessageDigest +import org.json.JSONArray +import org.json.JSONObject +import org.junit.* +import org.junit.Assert.* +import org.junit.Assume.assumeTrue +import org.junit.runner.RunWith + +/** Owned observations and separately labeled contracts; no production-fix credit. */ +@RunWith(AndroidJUnit4::class) +@OptIn(ExperimentalTestApi::class) +class NativeInputCompatibilityDeviceTest { + @get:Rule val compose = createAndroidComposeRule() + @get:Rule val name = org.junit.rules.TestName() + private val instrumentation get() = InstrumentationRegistry.getInstrumentation() + private val context get() = instrumentation.targetContext + private val device get() = UiDevice.getInstance(instrumentation) + private val evidence get() = File(context.filesDir, "native-input-evidence") + private val trace = JSONArray() + private val record = JSONObject().put("diagnostic_only", true) + .put("scope", "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution") + private var prepared = false + private var palette = emptyMap() + private var emoji = emptyMap() + private val hooks = mutableListOf>() + private fun digest(value: String) = MessageDigest.getInstance("SHA-256").digest(value.toByteArray()) + .joinToString("") { "%02x".format(it) } + private fun ui(block: (MainActivity) -> Unit) = compose.activityRule.scenario.onActivity { block(it) } + + @Before fun prepare() { + val args = InstrumentationRegistry.getArguments() + assumeTrue("Use the owned native-input runner", args.getString("nativeInputFixture") == "true") + val nonce = requireNotNull(args.getString("nativeInputOwner")) + assertTrue(nonce.matches(Regex("[0-9a-f]{32}"))) + val owner = JSONObject(File(context.filesDir, "native-input-lease/owner.json").readText()) + assertEquals("native-input-v1", owner.getString("kind")); assertEquals(nonce, owner.getString("nonce")) + assertEquals("native-input-$nonce", owner.getString("extension_id")) + assertEquals(Build.VERSION.SDK_INT == 26, owner.getBoolean("fresh_disposable_avd")) + assertEquals(args.getString("nativeInputMode"), owner.getString("input_mode")) + compose.waitUntil(15000) { !compose.activity.store.loading && !compose.activity.store.emoji.loading } + palette = context.getSharedPreferences("palette", Context.MODE_PRIVATE).all.toMap() + emoji = context.getSharedPreferences("emoji", Context.MODE_PRIVATE).all.toMap() + prepared = true + ui { it.store.reset(); hook(it) } + record.put("case", name.methodName).put("api", Build.VERSION.SDK_INT) + .put("font_scale", context.resources.configuration.fontScale) + .put("default_ime", android.provider.Settings.Secure.getString(context.contentResolver, android.provider.Settings.Secure.DEFAULT_INPUT_METHOD)) + } + + private fun hook(activity: MainActivity) { + if (hooks.any { it.first === activity }) return + val original = activity.window.callback + val wrapper = object : Window.Callback by original { + override fun dispatchKeyEvent(event: KeyEvent): Boolean { + val handled = original.dispatchKeyEvent(event) + trace.put(JSONObject().put("kind", "window-key").put("code", event.keyCode).put("action", event.action) + .put("flags", event.flags).put("source", event.source).put("device", event.deviceId) + .put("repeat", event.repeatCount).put("handled", handled).put("uptime_ms", SystemClock.uptimeMillis())) + return handled + } + } + hooks += Triple(activity, original, wrapper); activity.window.callback = wrapper + } + + private fun observe(stage: String, tag: String) { + compose.waitForIdle() + val node = compose.onNodeWithTag(tag).fetchSemanticsNode() + val text = node.config[SemanticsProperties.EditableText] + val range = node.config[SemanticsProperties.TextSelectionRange] + val styles = JSONArray(text.spanStyles.map { style -> JSONObject().put("start", style.start).put("end", style.end) + .put("decoration", style.item.textDecoration?.toString()).put("style", style.item.toString()) }) + val value = JSONObject().put("kind", "observation").put("stage", stage).put("tag", tag) + .put("text_length", text.length).put("text_sha256", digest(text.text)).put("text_prefix", text.text.take(128)) + .put("plain_annotated_equal", text == AnnotatedString(text.text)).put("span_styles", styles) + .put("paragraph_styles", text.paragraphStyles.toString()).put("string_annotations", text.getStringAnnotations(0, text.length).toString()) + .put("selection_start", range.start).put("selection_end", range.end) + .put("focused", node.config.getOrNull(SemanticsProperties.Focused) ?: JSONObject.NULL) + .put("no_input_connection_created_for_this_observation", true) + if (text.length <= 128) value.put("codepoints", JSONArray(text.text.codePoints().toArray().toList())) + ui { + hook(it) + val imm = it.getSystemService(InputMethodManager::class.java) + value.put("route", it.store.dialog ?: JSONObject.NULL).put("window_focus", it.hasWindowFocus()) + .put("query", it.store.query).put("emoji_query", it.store.emoji.query).put("emoji_selected", it.store.emoji.selected) + .put("ime_accepting_text", imm.isAcceptingText).put("uptime_ms", SystemClock.uptimeMillis()) + trace.put(value) + } + } + + private fun capture(phase: String) { + compose.waitForIdle(); evidence.mkdirs() + val stem = name.methodName.lowercase() + "-" + phase + testAutomation().clearCacheForTest() + device.dumpWindowHierarchy(File(evidence, "$stem.xml")) + assertTrue(device.takeScreenshot(File(evidence, "$stem.png"))) + File(evidence, "$stem-frame.json").writeText(JSONObject().put("diagnostic_only", true).put("phase", phase) + .put("synchronization", "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness") + .put("scope", record.getString("scope")).toString(2)) + } + + private fun key(code: Int, direct: Boolean, meta: Int = 0) { + val down = SystemClock.uptimeMillis() + for (action in listOf(KeyEvent.ACTION_DOWN, KeyEvent.ACTION_UP)) { + val event = KeyEvent(down, SystemClock.uptimeMillis(), action, code, 0, meta, + KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, InputDevice.SOURCE_KEYBOARD) + if (direct) ui { trace.put(JSONObject().put("kind", "direct-key").put("code", code) + .put("action", action).put("handled", it.dispatchKeyEvent(event))) } + else trace.put(JSONObject().put("kind", "injected-key").put("code", code).put("action", action) + .put("accepted", testAutomation().injectInputEvent(event, true))) + } + } + + @Test fun recordDefaultImeAndControlledCompositionNavigation() { + ui { it.execute(Command("emoji", "Emoji & Symbols", "")) } + compose.onNodeWithTag("emoji-search").performTextReplacement("face") + observe("default-ime-after-semantic-replacement", "emoji-search") + capture("default-before") + key(KeyEvent.KEYCODE_DPAD_RIGHT, false); observe("default-after-injected-right", "emoji-search") + key(KeyEvent.KEYCODE_ESCAPE, false); observe("default-after-injected-escape", "emoji-search") + key(KeyEvent.KEYCODE_ESCAPE, true) + ui { if (it.store.dialog != "emoji") it.execute(Command("emoji", "Emoji & Symbols", "")) } + compose.onNodeWithTag("emoji-search").performTextReplacement("face") + var connection: InputConnection? = null + try { + ui { + val info = EditorInfo() + connection = requireNotNull(it.window.decorView.findFocus()?.onCreateInputConnection(info)) + assertTrue(connection!!.finishComposingText()) + trace.put(JSONObject().put("kind", "controlled-input-connection-created").put("input_type", info.inputType) + .put("ime_options", info.imeOptions).put("initial_selection_start", info.initialSelStart).put("initial_selection_end", info.initialSelEnd)) + } + observe("controlled-finish-composition", "emoji-search") + key(KeyEvent.KEYCODE_DPAD_RIGHT, false); observe("controlled-after-injected-right", "emoji-search") + key(KeyEvent.KEYCODE_DPAD_DOWN, false); observe("controlled-after-injected-down", "emoji-search") + capture("committed-navigation") + ui { + assertTrue(connection!!.setSelection(0, it.store.emoji.query.length)) + assertTrue(connection!!.setComposingText("にほん", 1)) + } + observe("controlled-japanese-composition", "emoji-search") + key(KeyEvent.KEYCODE_DPAD_RIGHT, true); observe("japanese-after-direct-right", "emoji-search") + capture("japanese-composition") + ui { assertTrue(connection!!.finishComposingText()) } + } finally { ui { connection?.closeConnection() } } + record.put("diagnostic_completed", true) + } + + @Test fun recordCallerSelectionAcrossNativeRoutes() { + val query = "Owned caller 日本 012345" + ui { it.store.search(query) } + compose.onNodeWithTag("search").performTextInputSelection(TextRange(2, 8)) + observe("before-updates-route", "search") + ui { it.store.dialog = "updates" } + capture("updates-route-idle") + compose.onNodeWithTag("palette-screen").performSemanticsAction(SemanticsActions.RequestFocus) + compose.onNodeWithTag("palette-screen").assertIsFocused() + record.put("updates_root_focus_requested_before_return", true) + capture("updates-route-focused") + compose.onNodeWithTag("inline-back").performTouchInput { click(center) } + observe("after-updates-return", "search"); capture("updates-caller") + compose.onNodeWithTag("search").performTextInputSelection(TextRange(2, 8)) + observe("before-note-route", "search") + ui { it.execute(Command("new-note", "New note", "")) } + capture("note-route") + compose.onNodeWithTag("inline-back").performTouchInput { click(center) } + observe("after-note-return", "search"); capture("note-caller") + record.put("updates_scope", "Idle native Updates route, no public check/download/install requested") + .put("selection_setup", "Semantic selection action; not physical selection") + .put("diagnostic_completed", true) + } + + @Test fun recordSameTurnLauncherActivationTextAndAnnotations() { + val rows = ownedNotes() + observe("before-same-turn-navigation", "search") + ui { activity -> + val down = SystemClock.uptimeMillis() + for (code in listOf(KeyEvent.KEYCODE_DPAD_DOWN, KeyEvent.KEYCODE_ENTER)) { + for (action in listOf(KeyEvent.ACTION_DOWN, KeyEvent.ACTION_UP)) { + activity.dispatchKeyEvent(KeyEvent(down, down, action, code, 0, 0, + KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, InputDevice.SOURCE_KEYBOARD)) + } + } + record.put("expected_note_id", rows[1].id).put("actual_note_id", activity.store.editing?.id ?: JSONObject.NULL) + } + if (compose.onAllNodesWithTag("editor-title").fetchSemanticsNodes().isEmpty()) { + observe("same-turn-query-retained", "search") + record.put("destination_present", false).put("diagnostic_completed", true) + capture("same-turn-no-destination") + return + } + observe("same-turn-destination-title", "editor-title") + val title = compose.onNodeWithTag("editor-title").fetchSemanticsNode().config[SemanticsProperties.EditableText] + record.put("title_plain_exact", title.text == rows[1].title) + .put("title_annotated_exact", title == AnnotatedString(rows[1].title)) + .put("diagnostic_completed", true) + capture("same-turn-destination") + } + + @Test fun recordInjectedTypingAndCommittedQueryNavigation() { + ui { it.execute(Command("emoji", "Emoji & Symbols", "")) } + compose.onNodeWithTag("emoji-search").assertIsFocused() + observe("before-first-injected-character", "emoji-search") + for (code in listOf(KeyEvent.KEYCODE_F, KeyEvent.KEYCODE_A, KeyEvent.KEYCODE_C, KeyEvent.KEYCODE_E)) { + key(code, false); compose.waitForIdle() + } + observe("after-four-injected-characters", "emoji-search") + compose.onNodeWithTag("emoji-search").assert(editableCharactersExactly("face")) + observe("injected-typing-before-right", "emoji-search") + key(KeyEvent.KEYCODE_DPAD_RIGHT, false); observe("injected-typing-after-right", "emoji-search") + capture("injected-typing") + var connection: InputConnection? = null + try { + ui { + connection = requireNotNull(it.window.decorView.findFocus()?.onCreateInputConnection(EditorInfo())) + assertTrue(connection!!.finishComposingText()) + } + observe("typed-query-explicitly-committed", "emoji-search") + key(KeyEvent.KEYCODE_DPAD_RIGHT, false); observe("typed-committed-after-right", "emoji-search") + key(KeyEvent.KEYCODE_L, false, KeyEvent.META_CTRL_ON) + key(KeyEvent.KEYCODE_DPAD_LEFT, false); observe("typed-query-editing-left", "emoji-search") + capture("typed-query-caret") + } finally { ui { connection?.closeConnection() } } + record.put("diagnostic_completed", true) + } + + private fun contract(scope: String) { + assertEquals("Use the explicitly owned silent IME for controlled contracts", "owned", InstrumentationRegistry.getArguments().getString("nativeInputMode")) + assertEquals("dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + android.provider.Settings.Secure.getString(context.contentResolver, android.provider.Settings.Secure.DEFAULT_INPUT_METHOD)) + record.put("diagnostic_only", false).put("scope", scope) + .put("input_setup", "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit") + } + + private fun withControlledInput(tag: String, expected: String, block: (InputConnection) -> Unit) { + compose.onNodeWithTag(tag).assertIsFocused() + var connection: InputConnection? = null + var attempts = 0 + compose.waitUntil(5000) { + ui { + attempts++ + val candidate = it.window.decorView.findFocus()?.onCreateInputConnection(EditorInfo()) + val extracted = candidate?.getExtractedText(ExtractedTextRequest(), 0)?.text?.toString() + if (extracted == expected) connection = candidate else candidate?.closeConnection() + } + connection != null + } + trace.put(JSONObject().put("kind", "controlled-input-ready").put("tag", tag) + .put("expected_text_length", expected.length).put("readiness_attempts", attempts)) + try { block(requireNotNull(connection)) } finally { ui { connection?.closeConnection() } } + } + + private fun committed(tag: String, text: String, connection: InputConnection) { + ui { assertTrue(connection.finishComposingText()) } + compose.waitUntil(5000) { + compose.onNodeWithTag(tag).fetchSemanticsNode().config[SemanticsProperties.EditableText] == AnnotatedString(text) + } + observe("explicitly-committed-$tag", tag) + } + + private fun ownedNotes(): List { + val ids = mutableSetOf() + ui { + ids += it.store.save("notes", "Owned rapid Alpha", "Owned first body") + ids += it.store.save("notes", "Owned rapid Bravo", "Owned second body") + it.store.filter("Notes"); it.store.search("Owned rapid") + } + compose.onNodeWithTag("search").assertIsFocused() + return compose.activity.store.results().also { rows -> + assertEquals(2, rows.size) + assertEquals("Only this fixture's saved IDs may be observed", ids, rows.map { it.id }.toSet()) + } + } + + @Test fun exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters() { + contract("Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected") + val title = " Owned café 日本 👨‍👩‍👧‍👦 ❤️ 1️⃣ " + ui { it.execute(Command("new-note", "New note", "")); it.store.editorDraft("note").title = title } + withControlledInput("editor-title", title) { connection -> + ui { assertTrue(connection.setComposingRegion(0, title.length)) } + var checked = false + compose.waitUntil(5000) { + val node = compose.onNodeWithTag("editor-title").fetchSemanticsNode() + ui { + // Native IME callbacks cannot interleave this witness and the + // matcher evaluations. A screenshot/idle wait here would + // allow composition to finish before the assertion. + val actual = node.config[SemanticsProperties.EditableText] + if (actual.text == title && actual.spanStyles.any { span -> + span.start == 0 && span.end == title.length && span.item.textDecoration == TextDecoration.Underline + }) { + record.put("strict_annotation_equal", actual == AnnotatedString(title)) + .put("assertion_witness", JSONObject().put("single_ui_turn", true) + .put("text_length", actual.length).put("text_sha256", digest(actual.text)) + .put("composition_underline_start", 0).put("composition_underline_end", title.length)) + assertTrue("Exact character matcher must accept the composing title", editableCharactersExactly(title).matches(node)) + val wrong = linkedMapOf( + "changed-character" to title.replace("日本", "日本語"), + "same-length-substitution" to title.replace("日本", "中日"), + "trimmed-whitespace" to title.trim(), + "removed-joiner" to title.replace("\u200d", ""), + "removed-variation-selector" to title.replace("\ufe0f", ""), + "normalized-combining-sequence" to title.replace("café", "cafe\u0301") + ) + assertEquals("Keep the substitution negative the same UTF-16 length", title.length, + wrong.getValue("same-length-substitution").length) + wrong.forEach { (label, value) -> + assertNotEquals(label, title, value) + assertFalse("Reject $label", editableCharactersExactly(value).matches(node)) + } + record.put("wrong_content_rejected", JSONArray(wrong.keys.toList())) + checked = true + } + } + checked + } + observe("composed-title-after-content-assertion", "editor-title") + capture("composed-title-after-assertion") + ui { assertTrue(connection.finishComposingText()) } + } + record.put("contract_completed", true) + } + + @Test fun committedEmojiNavigationAndCaretAreExact() { + contract("Explicitly committed Emoji query supports injected grid navigation, exact caret and selected range") + ui { it.execute(Command("emoji", "Emoji & Symbols", "")) } + compose.onNodeWithTag("emoji-search").performTextReplacement("face") + withControlledInput("emoji-search", "face") { connection -> + committed("emoji-search", "face", connection) + key(KeyEvent.KEYCODE_DPAD_RIGHT, false); compose.waitForIdle() + assertEquals(1, compose.activity.store.emoji.selected) + key(KeyEvent.KEYCODE_DPAD_DOWN, false); compose.waitForIdle() + val row = compose.activity.store.emoji.selected; assertTrue(row > 1) + key(KeyEvent.KEYCODE_DPAD_LEFT, false); compose.waitForIdle() + assertEquals(row - 1, compose.activity.store.emoji.selected) + key(KeyEvent.KEYCODE_DPAD_UP, false); compose.waitForIdle() + assertEquals(0, compose.activity.store.emoji.selected) + key(KeyEvent.KEYCODE_MOVE_END, false); compose.waitForIdle() + assertEquals(compose.activity.store.emoji.results().lastIndex, compose.activity.store.emoji.selected) + key(KeyEvent.KEYCODE_MOVE_HOME, false); compose.waitForIdle() + assertEquals(0, compose.activity.store.emoji.selected) + compose.onNodeWithTag("emoji-search").assert(editableCharactersExactly("face")) + capture("committed-four-way-navigation") + key(KeyEvent.KEYCODE_L, false, KeyEvent.META_CTRL_ON) + key(KeyEvent.KEYCODE_DPAD_LEFT, false); compose.waitForIdle() + compose.onNodeWithTag("emoji-search").assert(SemanticsMatcher.expectValue(SemanticsProperties.TextSelectionRange, TextRange(3))) + assertEquals(0, compose.activity.store.emoji.selected) + compose.onNodeWithTag("emoji-search").performTextInputSelection(TextRange(0, 2)) + compose.onNodeWithTag("emoji-search").assert(SemanticsMatcher.expectValue(SemanticsProperties.TextSelectionRange, TextRange(0, 2))) + assertEquals(0, compose.activity.store.emoji.selected) + observe("committed-query-selected-range", "emoji-search"); capture("committed-query-selected-range") + } + record.put("contract_completed", true) + } + + @Test fun activeMultilingualCompositionKeepsResultSelection() { + contract("Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication") + ui { it.execute(Command("emoji", "Emoji & Symbols", "")) } + compose.onNodeWithTag("emoji-search").performTextReplacement("face") + withControlledInput("emoji-search", "face") { connection -> + committed("emoji-search", "face", connection) + ui { + assertTrue(connection.setSelection(0, 4)) + assertTrue(connection.setComposingText("にほん", 1)) + val down = SystemClock.uptimeMillis() + for (code in listOf(KeyEvent.KEYCODE_DPAD_RIGHT, KeyEvent.KEYCODE_DPAD_DOWN)) { + for (action in listOf(KeyEvent.ACTION_DOWN, KeyEvent.ACTION_UP)) + it.dispatchKeyEvent(KeyEvent(down, down, action, code, 0)) + } + assertEquals("Read current composition before redraw", 0, it.store.emoji.selected) + } + compose.waitUntil(5000) { + val actual = compose.onNodeWithTag("emoji-search").fetchSemanticsNode().config[SemanticsProperties.EditableText] + actual.text == "にほん" && actual.spanStyles.any { it.start == 0 && it.end == 3 && it.item.textDecoration == TextDecoration.Underline } + } + observe("active-japanese-composition", "emoji-search") + key(KeyEvent.KEYCODE_DPAD_RIGHT, true); compose.waitForIdle() + assertEquals(0, compose.activity.store.emoji.selected) + compose.onNodeWithTag("emoji-search").assert(editableCharactersExactly("にほん")) + observe("active-japanese-after-direct-navigation", "emoji-search"); capture("active-japanese-composition") + ui { assertTrue(connection.finishComposingText()) } + } + record.put("contract_completed", true) + } + + @Test fun committedCallerSelectionSurvivesIdleNativeRoutes() { + contract("Committed caller query/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check") + val query = "Owned caller 日本 012345" + ui { it.store.search(query) } + withControlledInput("search", query) { committed("search", query, it) } + for (route in listOf("updates", "note")) { + compose.onNodeWithTag("search").performTextInputSelection(TextRange(2, 8)) + observe("before-$route-route", "search") + ui { if (route == "updates") it.store.dialog = "updates" else it.execute(Command("new-note", "New note", "")) } + if (route == "updates") { + compose.onNodeWithTag("palette-screen").performSemanticsAction(SemanticsActions.RequestFocus) + compose.onNodeWithTag("palette-screen").assertIsFocused() + } + capture("$route-destination") + compose.onNodeWithTag("inline-back").performTouchInput { click(center) } + compose.onNodeWithTag("search").assertIsFocused().assert(editableCharactersExactly(query)) + .assert(SemanticsMatcher.expectValue(SemanticsProperties.TextSelectionRange, TextRange(2, 8))) + observe("after-$route-return", "search"); capture("$route-caller-return") + } + record.put("contract_completed", true) + } + + @Test fun committedSameTurnLauncherActivationUsesCurrentNote() { + contract("Explicitly committed owned launcher query opens the second note on Down/Enter within one main-thread turn") + val rows = ownedNotes() + val expectedBody = when (rows[1].title) { + "Owned rapid Alpha" -> "Owned first body" + "Owned rapid Bravo" -> "Owned second body" + else -> error("Unexpected owned note title") + } + withControlledInput("search", "Owned rapid") { connection -> + committed("search", "Owned rapid", connection) + ui { activity -> + val down = SystemClock.uptimeMillis() + for (code in listOf(KeyEvent.KEYCODE_DPAD_DOWN, KeyEvent.KEYCODE_ENTER)) { + for (action in listOf(KeyEvent.ACTION_DOWN, KeyEvent.ACTION_UP)) + activity.dispatchKeyEvent(KeyEvent(down, down, action, code, 0, 0, + KeyCharacterMap.VIRTUAL_KEYBOARD, 0, 0, InputDevice.SOURCE_KEYBOARD)) + } + assertEquals(rows[1].id, activity.store.editing?.id) + } + } + compose.onNodeWithTag("editor-title").assert(editableCharactersExactly(rows[1].title)) + compose.onNodeWithTag("editor-body").assert(editableCharactersExactly(expectedBody)) + observe("same-turn-exact-title", "editor-title"); capture("same-turn-current-note") + record.put("contract_completed", true) + } + + @Test fun largeDraftRestoresExactCharactersAfterRecreation() { + contract("Owned unsaved 540000-unit multilingual draft survives recreation with exact title/body characters") + val ownedTitle = "Owned large draft 日本" + val ownedBody = "Owned draft line café 日本 🌱 314159.\n".repeat(15000) + ui { it.execute(Command("new-note", "New note", "")); it.store.editorDraft("note").apply { title = ownedTitle; body = ownedBody } } + compose.waitForIdle(); compose.activityRule.scenario.recreate(); compose.waitForIdle() + compose.onNodeWithTag("editor-title").assert(editableCharactersExactly(ownedTitle)) + compose.onNodeWithTag("editor-body").assert(editableCharactersExactly(ownedBody)) + ui { + assertEquals(ownedTitle, it.store.editorDraft("note").title) + assertEquals(ownedBody, it.store.editorDraft("note").body) + assertFalse(it.store.notes.any { note -> note.title == ownedTitle }) + } + observe("exact-recreated-title", "editor-title"); observe("exact-recreated-body", "editor-body") + capture("large-draft-exact-characters") + record.put("expected_body_length", ownedBody.length).put("expected_body_sha256", digest(ownedBody)).put("contract_completed", true) + } + + @Test fun recordLargeDraftTextAndAnnotationsAfterRecreation() { + val ownedTitle = "Owned large draft 日本" + val ownedBody = "Owned draft line café 日本 🌱 314159.\n".repeat(15000) + ui { it.execute(Command("new-note", "New note", "")); it.store.editorDraft("note").apply { title = ownedTitle; body = ownedBody } } + compose.waitForIdle(); compose.activityRule.scenario.recreate(); compose.waitForIdle() + ui { hook(it) } + observe("recreated-title", "editor-title"); observe("recreated-body", "editor-body") + val actualTitle = compose.onNodeWithTag("editor-title").fetchSemanticsNode().config[SemanticsProperties.EditableText] + val actualBody = compose.onNodeWithTag("editor-body").fetchSemanticsNode().config[SemanticsProperties.EditableText] + record.put("title_plain_exact", actualTitle.text == ownedTitle).put("title_annotated_exact", actualTitle == AnnotatedString(ownedTitle)) + .put("body_plain_exact", actualBody.text == ownedBody).put("body_annotated_exact", actualBody == AnnotatedString(ownedBody)) + .put("expected_body_length", ownedBody.length).put("expected_body_sha256", digest(ownedBody)).put("diagnostic_completed", true) + capture("large-draft-recreated") + } + + @After fun restore() { + if (!prepared) return + try { + if (!record.optBoolean("diagnostic_completed") && !record.optBoolean("contract_completed")) capture("failure") + } finally { + ui { current -> + hooks.forEach { (activity, original, wrapper) -> if (activity.window.callback === wrapper) activity.window.callback = original } + current.store.reset() + } + restorePalettePreferences(context, palette) + assertEquals(palette, context.getSharedPreferences("palette", Context.MODE_PRIVATE).all) + assertEquals(emoji, context.getSharedPreferences("emoji", Context.MODE_PRIVATE).all) + record.put("palette_preferences_restored", true).put("emoji_preferences_unchanged", true).put("observations", trace) + evidence.mkdirs(); File(evidence, "case-${name.methodName.lowercase()}.json").writeText(record.toString(2)) + } + } +} diff --git a/app/src/androidTest/java/dev/tinycast/android/NativeInputTestIme.kt b/app/src/androidTest/java/dev/tinycast/android/NativeInputTestIme.kt new file mode 100644 index 00000000..6ac4e25d --- /dev/null +++ b/app/src/androidTest/java/dev/tinycast/android/NativeInputTestIme.kt @@ -0,0 +1,9 @@ +package dev.tinycast.android + +import android.inputmethodservice.InputMethodService + +/** Explicitly enabled by the owned runner; never edits, reads, or commits text. */ +class NativeInputTestIme : InputMethodService() { + override fun onEvaluateInputViewShown() = false + override fun onEvaluateFullscreenMode() = false +} diff --git a/app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt b/app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt index 35e9f5ab..f8123368 100644 --- a/app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt +++ b/app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt @@ -6,7 +6,6 @@ import android.content.Context import android.view.KeyEvent import androidx.compose.ui.test.* import androidx.compose.ui.semantics.SemanticsProperties -import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry @@ -64,7 +63,7 @@ class ReadinessRegressionDeviceTest { assertTrue(device.takeScreenshot(File(directory,"$name.png"))) } private fun editable(tag: String, value: String) { - compose.onNodeWithTag(tag).assert(SemanticsMatcher.expectValue(SemanticsProperties.EditableText, AnnotatedString(value))) + compose.onNodeWithTag(tag).assert(editableCharactersExactly(value)) } private fun checkWithCapture(name: String, assertion: () -> Unit) { try { assertion(); capture(name) } catch (failure: Throwable) { capture("$name-failed"); throw failure } diff --git a/app/src/androidTest/res/xml/native_input_test_ime.xml b/app/src/androidTest/res/xml/native_input_test_ime.xml new file mode 100644 index 00000000..865c847f --- /dev/null +++ b/app/src/androidTest/res/xml/native_input_test_ime.xml @@ -0,0 +1,2 @@ + + diff --git a/docs/NATIVE-INPUT-CONTRACTS.md b/docs/NATIVE-INPUT-CONTRACTS.md new file mode 100644 index 00000000..4313f763 --- /dev/null +++ b/docs/NATIVE-INPUT-CONTRACTS.md @@ -0,0 +1,64 @@ +# Exact native text and controlled input + +[#108](https://github.com/moikdev/droidcast/issues/108) corrects a test contract under still-open [#69](https://github.com/moikdev/droidcast/issues/69). Readiness assertions compared `EditableText` with an unstyled `AnnotatedString`. Compose 1.7.6 exposes the visually transformed text there, including the underline added for composition. Exact characters can therefore coexist with unequal annotation objects. The shared test matcher now compares every UTF-16 character, without trimming or Unicode normalization. Controlled checks reject changed characters, removed spaces, joiners, variation selectors and a different combining sequence. The pinned [Compose source](https://dl.google.com/dl/android/maven2/androidx/compose/foundation/foundation/1.7.6/foundation-1.7.6-sources.jar) and its retained hash support this distinction. + +This is a test-only correction. All native runs reuse the unchanged `fec0a4bf` production APK `ae03c859…4ec71`. Production/build sources and all eleven packaged assets, including upstream runtime and notices, remain unchanged. The test APK `91dcd927…27443` was compiled from `b55a8f6f`; the final collector is `7e177122`. The base matrix source vector differs from its APK-build vector only in the Python runner. A later supplemental harness strengthens one negative-content case; its identity and raw APK remain separate. The strict control `663557f3…0d1b3` uses the same Android test sources with the old annotation matcher substituted; only `classes3.dex` differs. Full hashes, source vectors and override text are in [the identities](validation/native-input/identities/owned-v5.json), [control identity](validation/native-input/identities/strict-control-v3.json) and [binary inspection](validation/native-input/binary-metadata/summary.json). The application manifest carries `fec0a4bf`; instrumentation has no independent test-source manifest stamp. + +The [supplemental identity](validation/native-input/identities/same-length-v6.json) binds the final current source vector and the strengthened-case APK. Its two executions cover the extra predicate on both Android versions. The base 21 executions and old-matcher controls retain their original instrumentation binaries. + +## Controlled results + +The final matrix records **23 positive executions across seven whole cohorts**, with **108 successful restoration checks**. Two matched strict-annotation controls have **zero JUnit passes / two intended failures / 29 successful restoration checks**. Their positive-only runner receipts remain failed; [calibration](validation/native-input/calibration.json) records the intended outcome separately. The [checkpoint](validation/native-input/checkpoint.json) binds 296 indexed public files plus its checkpoint, 525 retained capture hashes and twenty-one selected raw PNG/XML/frame sets. + +| Profile | Actual configuration | Controlled contracts | Restoration | +| --- | --- | --- | --- | +| Android 8 phone, 100% | API26 Google APIs revision1, WebView58, physical1080×1920/420dpi | 6/6 | 12/12 | +| Android 16 tablet, 100% | API36 revision7, WebView133, physical1920×1200/240dpi | 6/6 | 17/17 | +| Android 8 phone, 200% | Same physical legacy viewport | 3/3 | 12/12 | +| Android 16 phone, 200% | Dedicated tablet AVD overridden to1080×2340/420dpi | 3/3 | 19/19 | +| Android 16 landscape, 200% | Same AVD overridden to2340×1080/420dpi | 3/3 | 19/19 | +| Same-length supplement, normal font | One fresh strengthened case per Android version | 2/2 | 29/29 | + +The base six normal-size contracts cover the exact-content matcher, committed Emoji arrows/Home/End and caret/range, active Japanese composition, pointer Back with exact caller selection, same-turn launcher Down/Enter opening the current owned note, and unsaved540000-unit multilingual draft recreation. Enlarged profiles run the content, Japanese-composition and caller-return cases. These are functional smoke observations; comprehensive typography, accessibility and keyboard-visible layout coverage remain open. + +Controlled cases explicitly enable a test-APK `InputMethodService` that supplies no keyboard view or custom text edits. The test waits for the actual focused input connection, then establishes committed or composing state. They certify these controlled native contracts. Default Gboard observations retain their own identities and outcomes. Semantic/model replacement and selection are setup; injected virtual keys and direct native dispatch are separately recorded, without physical-typing credit. The Updates route is idle: no live check, download or install is requested. + +The Japanese query has zero matching results. Its case establishes exact text/composition retention and selection zero in that state. Sensitivity of grid-navigation vetoes with a nonempty composed result set is outside this case's evidence; the existing nonempty-query guard and its earlier tests remain unchanged. + +The composing underline, exact text and matcher predicates are examined in one UI-thread turn. This blocks IME callbacks from expiring the precondition between witness and assertion. Each strict control records unequal annotation state and fails the intended character-matcher assertion. The base positive records the same decoration witness and five rejected wrong-content predicates. Two fresh supplemental cases add a sixth same-length Unicode substitution, with an explicit equal-length guard; a length-only matcher would fail this predicate. Those supplemental APKs retain their separate build/source identity. All other Android/build/test source bytes remain equal to the base harness after reversing the three added fixture lines. XML precedes PNG after Compose idle; captures are real app smoke evidence, with accessibility geometry explicitly qualified. Screenshots follow the assertions and are separate from the coherent matcher witness. + +## Real app smoke frames + +The production binary is the same in both control and corrected frames. Acceptance/rejection is established by the JUnit and case receipts. The strict-control image is an ordinary editor screen after the test assertion failed; it contains no app error banner. + +![Android8 controlled Unicode editor after corrected content assertion](screenshots/native-input/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png) + +![Same Android8 production app after old strict-annotation assertion failed](screenshots/native-input/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png) + +![Android16 enlarged phone retains Japanese text after controlled composition/navigation](screenshots/native-input/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png) + +![Android16 enlarged landscape caller after pointer Back](screenshots/native-input/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png) + +The [frame index](validation/native-input/frames.json) lists all twenty-one selected originals, including idle Updates, its caller return, same-turn note, large draft and retained system-IME observations. Older Android8 emoji glyph shaping differs from modern Android; character retention is distinct from glyph parity. + +## Ownership and restoration + +The explicit runner accepts only the dedicated API26/API36 AVDs, ordinary adbd UID2000, allowlisted cases and non-overlapping private leases. Controlled contracts require `--input-mode owned`; default-IME diagnostics and engine cases cannot select that mode. Test setup snapshots original APKs/data and raw default, enabled methods, selected subtype and subtype-history settings. IME restoration precedes stopping the test APK and is checked again after its replacement/removal. Ownership remains held on failure. Modern receipts verify the original binaries and all573 pre-existing files/evidence. A separate [read-only final check](validation/native-input/final-preservation.json) compares both installed APKs and every original file after the full matrix, with thirteen checks across both emulators. The disposable legacy installation returns to package absence. Private originals and signing inputs are excluded from publication. + +The first two one-case silent-IME probes saved three IME settings but omitted switch history. One test-IME history entry was later removed on each device, preserving the other current entries. **The original pre-probe history identity is unverified.** Final baselines start after that cleanup and verify all four raw fields. Android8's [input-method settings source](https://android.googlesource.com/platform/frameworks/base/+/android-8.0.0_r1/core/java/com/android/internal/inputmethod/InputMethodUtils.java), also hash-bound in the dependency record, confirms the separate history field. + +One modern strict control reached the intended assertion but failed its restoration deadline. The owner remained held; all four settings later matched. A separate [sixteen-check recovery](validation/native-input/history/modern-control-recovery.json) verified original data/APKs/settings and released ownership last. The failed control receipt remains failed. Its precise timing cause is unproven. The final collector batches the settings reads, retains query timings and preserves the original equality checks; both current controls and all current positives complete restoration. + +## Retained failures and checks + +The retained totals are **84 executions / 73 passes / 11 failures** across their separate APKs, collectors and fixtures. [Cohorts](validation/native-input/cohorts.json) classify final credit explicitly. Earlier diagnostic completion earns no functional-fix credit. + +- The first five-case system-IME cohorts remain legacy3/5 and modern4/5 failed, including the first-letter readiness and composing-query destination protocols. +- The first six-contract system-IME cohort remains legacy5/6 failed at Home after End. Its modern6/6 result is separately bound and contains an insensitive composition assertion. +- Both initial old-matcher controls passed after composition expired during capture; [that calibration remains failed](validation/native-input/strict-calibration-v1.json), with zero intended-negative credit. +- The next single-turn protocol remains legacy2/5 failed and modern5/5 passed under Gboard. A controlled IME fixes the fixture boundary; no production keyboard repair is inferred. +- Compilation/opt-in failures, an invalid benchmark-task invocation, an empty failed wrapper attempt and the disk-full combined build remain separate from later successful builds. Recovery removed rebuildable caches and reclaimed duplicate archived APK blocks without changing their bytes; frozen evidence and private backups were retained. + +Recorded local checks: **343 JVM cases, no failures/errors/skips; 130 Python cases per mode; successful debug/test and benchmark/test builds; lint0 errors/56 warnings per variant.** The later Python run uses the final collector source. Benchmark device execution was not performed. Hosted exact-head Android CI, both independent sol/high audits and expected-head merge are separate gates. + +The original #69 live-network selection and old-image failures remain unresolved. Current idle-route ranges and draft observations neither establish every historical cause nor clear the original26/33 checkpoint. Android8 extension execution, physical/OEM testing, whole-Store/Raycast parity, full accessibility, #89 and production signing/migration remain open. diff --git a/docs/PARITY-TRACKER.md b/docs/PARITY-TRACKER.md index d66bbbb3..0e8c2abd 100644 --- a/docs/PARITY-TRACKER.md +++ b/docs/PARITY-TRACKER.md @@ -206,3 +206,10 @@ The active [#68](https://github.com/moikdev/droidcast/issues/68) slice now check PR #107's first independent correctness audit found a P2 in the synchronous preflight test: an unsupported operation could mask loss of its approval guard. The strengthened owned `fs.exists` case records rejection before startup and successful same-runtime/bridge/argument execution after actual API36 approval. Refreshed complete legacy7/modern5 cohorts replace the two affected originals, preserving **29 current positives / nine cohorts /133 checks**. A separate single-guard mutant demonstrates an insensitive old-test pass versus the strengthened test's intended failure; both controls restore original data/APKs with thirty checks. The mutant and the retained failed positive-only runner receipt earn no candidate credit. The candidate app/production sources remain unchanged. [The repair checkpoint](validation/webview-engine/audit-repair/checkpoint.json) preserves the immutable first checkpoint, sixteen fresh capture sets and explicit source/APK/calibration boundaries. Both fresh exact-head independent sol/high audits, hosted CI and an expected-head merge remain required. + +[PR #107](https://github.com/moikdev/droidcast/pull/107) merged as `c4ca362e7f3efccc59eacc4fdcaa7184fe0507c1` after both fresh independent sol/high audits cleared exact head `86f1af0cabdb498e18bbe625f1334a0dc734dc23`, head-bound `local/android` succeeded and actual pull-request [Android run 41962444788](https://github.com/moikdev/droidcast/actions/runs/41962444788) completed successfully. Root used an expected-head merge and independently verified both parents and tree `f77f2280ad3d5718293ea06148254da87c4ca45d`, identical to the reviewed head. Issue #68 is closed within engine detection/recovery scope. Android8 extension execution remains partial. + +The next active slice is [native input compatibility #69](https://github.com/moikdev/droidcast/issues/69). Owned probes first record passive text/annotation/selection and window key delivery without creating diagnostic input connections, then separately label controlled composition and idle native-route return observations. Diagnostic completion earns no functional-fix credit; original API26 failures remain failed until a reproduced defect or specific harness cause is established. The legacy and modern APKs, source identities and restoration receipts remain separate from the earlier readiness checkpoint. + + +The [#108 exact-text slice](NATIVE-INPUT-CONTRACTS.md) under still-open [#69](https://github.com/moikdev/droidcast/issues/69) now compares exact editable characters independently of legitimate IME decoration. The unchanged `fec0a4bf` production APK has **23 controlled positives / seven whole cohorts /108 successful cohort restoration checks**, plus **two intended old-annotation failures /zero passes /29 successful restoration checks**. The base `b55a8f6f` harness and the later same-length Unicode supplement keep their distinct APK/source identities. All thirteen read-only final-preservation checks pass, including both original APKs and all573 existing app/evidence files. The checkpoint binds 296 public files plus its index, 249 current source hashes and 21 raw screenshot sets. Recorded JVM343, Python130 per mode, both build variants and lint0 errors/56 warnings pass. System-IME failures, the insensitive initial controls, the first probes' unrecorded original subtype-history state, and the failed modern cleanup with separate sixteen-check recovery remain explicitly retained. The final collector verifies four raw IME settings and retains ownership through restoration. Exact-head hosted CI, both independent sol/high audits and expected-head merge remain gates. This test/fixture correction clears no full Android8 keyboard, physical/OEM/accessibility, whole-Store, #89 or signing/migration claim. diff --git a/docs/screenshots/native-input/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png b/docs/screenshots/native-input/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png new file mode 100644 index 00000000..abd23b64 Binary files /dev/null and b/docs/screenshots/native-input/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png differ diff --git a/docs/screenshots/native-input/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png b/docs/screenshots/native-input/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png new file mode 100644 index 00000000..201bfb52 Binary files /dev/null and b/docs/screenshots/native-input/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png differ diff --git a/docs/screenshots/native-input/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png b/docs/screenshots/native-input/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png new file mode 100644 index 00000000..9f29ce48 Binary files /dev/null and b/docs/screenshots/native-input/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png differ diff --git a/docs/screenshots/native-input/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png b/docs/screenshots/native-input/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png new file mode 100644 index 00000000..8a86fb3a Binary files /dev/null and b/docs/screenshots/native-input/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png differ diff --git a/docs/screenshots/native-input/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png b/docs/screenshots/native-input/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png new file mode 100644 index 00000000..0623cb7f Binary files /dev/null and b/docs/screenshots/native-input/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png differ diff --git a/docs/screenshots/native-input/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png b/docs/screenshots/native-input/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png new file mode 100644 index 00000000..38ada161 Binary files /dev/null and b/docs/screenshots/native-input/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png differ diff --git a/docs/screenshots/native-input/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png b/docs/screenshots/native-input/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png new file mode 100644 index 00000000..b26c60ed Binary files /dev/null and b/docs/screenshots/native-input/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png differ diff --git a/docs/screenshots/native-input/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range.png b/docs/screenshots/native-input/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range.png new file mode 100644 index 00000000..16fe6c8e Binary files /dev/null and b/docs/screenshots/native-input/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range.png differ diff --git a/docs/screenshots/native-input/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.png b/docs/screenshots/native-input/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.png new file mode 100644 index 00000000..3d896842 Binary files /dev/null and b/docs/screenshots/native-input/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.png differ diff --git a/docs/screenshots/native-input/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png b/docs/screenshots/native-input/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png new file mode 100644 index 00000000..af720c92 Binary files /dev/null and b/docs/screenshots/native-input/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png differ diff --git a/docs/screenshots/native-input/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png b/docs/screenshots/native-input/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png new file mode 100644 index 00000000..a75851ed Binary files /dev/null and b/docs/screenshots/native-input/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png differ diff --git a/docs/screenshots/native-input/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png b/docs/screenshots/native-input/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png new file mode 100644 index 00000000..462d3e5e Binary files /dev/null and b/docs/screenshots/native-input/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png differ diff --git a/docs/screenshots/native-input/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png b/docs/screenshots/native-input/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png new file mode 100644 index 00000000..91576daa Binary files /dev/null and b/docs/screenshots/native-input/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png differ diff --git a/docs/screenshots/native-input/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png b/docs/screenshots/native-input/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png new file mode 100644 index 00000000..b347861f Binary files /dev/null and b/docs/screenshots/native-input/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png differ diff --git a/docs/screenshots/native-input/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png b/docs/screenshots/native-input/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png new file mode 100644 index 00000000..c4528d00 Binary files /dev/null and b/docs/screenshots/native-input/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png differ diff --git a/docs/screenshots/native-input/system-ime-history/committedemojinavigationandcaretareexact-failure.png b/docs/screenshots/native-input/system-ime-history/committedemojinavigationandcaretareexact-failure.png new file mode 100644 index 00000000..b839554a Binary files /dev/null and b/docs/screenshots/native-input/system-ime-history/committedemojinavigationandcaretareexact-failure.png differ diff --git a/docs/screenshots/native-input/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before.png b/docs/screenshots/native-input/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before.png new file mode 100644 index 00000000..c0a59db8 Binary files /dev/null and b/docs/screenshots/native-input/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before.png differ diff --git a/docs/screenshots/native-input/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png b/docs/screenshots/native-input/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png new file mode 100644 index 00000000..4854b8f6 Binary files /dev/null and b/docs/screenshots/native-input/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png differ diff --git a/docs/screenshots/native-input/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png b/docs/screenshots/native-input/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png new file mode 100644 index 00000000..4df53019 Binary files /dev/null and b/docs/screenshots/native-input/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png differ diff --git a/docs/screenshots/native-input/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range.png b/docs/screenshots/native-input/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range.png new file mode 100644 index 00000000..f6ccc201 Binary files /dev/null and b/docs/screenshots/native-input/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range.png differ diff --git a/docs/screenshots/native-input/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png b/docs/screenshots/native-input/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png new file mode 100644 index 00000000..3f6dc82a Binary files /dev/null and b/docs/screenshots/native-input/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png differ diff --git a/docs/validation/native-input/binary-metadata/app-manifest.xml b/docs/validation/native-input/binary-metadata/app-manifest.xml new file mode 100644 index 00000000..4b16c1ad --- /dev/null +++ b/docs/validation/native-input/binary-metadata/app-manifest.xml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/binary-metadata/candidate-test-manifest.xml b/docs/validation/native-input/binary-metadata/candidate-test-manifest.xml new file mode 100644 index 00000000..ec741fb2 --- /dev/null +++ b/docs/validation/native-input/binary-metadata/candidate-test-manifest.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/binary-metadata/strict-test-manifest.xml b/docs/validation/native-input/binary-metadata/strict-test-manifest.xml new file mode 100644 index 00000000..ec741fb2 --- /dev/null +++ b/docs/validation/native-input/binary-metadata/strict-test-manifest.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/binary-metadata/summary.json b/docs/validation/native-input/binary-metadata/summary.json new file mode 100644 index 00000000..1445a91e --- /dev/null +++ b/docs/validation/native-input/binary-metadata/summary.json @@ -0,0 +1,25 @@ +{ + "app_source": "fec0a4bf1155c08c141606f92ae8fb1feab4bba0", + "apk_sha256": { + "app": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "candidate-test": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443", + "strict-test": "663557f37ad94b33e9db71fc5628a2098198e8e28b7eae12c2dbcf7cef60d1b3" + }, + "assets": { + "assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5" + }, + "production_contains_test_ime_reference": false, + "strict_control_entry_changes": [ + "classes3.dex" + ] +} diff --git a/docs/validation/native-input/bindings.json b/docs/validation/native-input/bindings.json new file mode 100644 index 00000000..8564adcb --- /dev/null +++ b/docs/validation/native-input/bindings.json @@ -0,0 +1,1262 @@ +[ + { + "original": "artifacts/native-input/legacy-before-v1/tests.log", + "original_sha256": "b688faceacd0478aea95de6ae369533713d8d0b87d392489c7d79e26752d46f8", + "public": "docs/validation/native-input/cohorts/legacy-before-v1/tests.log", + "public_sha256": "b688faceacd0478aea95de6ae369533713d8d0b87d392489c7d79e26752d46f8", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/legacy-before-v2/tests.log", + "original_sha256": "6b9181513ed7782cbb880d15780c1c6e10f46c70ba81205d4bc8cc5856090138", + "public": "docs/validation/native-input/cohorts/legacy-before-v2/tests.log", + "public_sha256": "6b9181513ed7782cbb880d15780c1c6e10f46c70ba81205d4bc8cc5856090138", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/legacy-contracts-v1/tests.log", + "original_sha256": "3764326285a29eaeeca843fe09711ff876ee4ef551b4a46e2fced25fc2c4ec46", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v1/tests.log", + "public_sha256": "3764326285a29eaeeca843fe09711ff876ee4ef551b4a46e2fced25fc2c4ec46", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/legacy-contracts-v2/tests.log", + "original_sha256": "f0a7b4b7cb6cf808cc0de2c2fccbab8c871f0e0ee5197e9e2c68466f753bc5b7", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v2/tests.log", + "public_sha256": "f0a7b4b7cb6cf808cc0de2c2fccbab8c871f0e0ee5197e9e2c68466f753bc5b7", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/legacy-owned-200-v4/tests.log", + "original_sha256": "42804fdc8d4a4b92432e673e1a534d827275d715f2a9099655b415d00825e271", + "public": "docs/validation/native-input/cohorts/legacy-owned-200-v4/tests.log", + "public_sha256": "42804fdc8d4a4b92432e673e1a534d827275d715f2a9099655b415d00825e271", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/legacy-owned-200-v5/tests.log", + "original_sha256": "b9b8e0ffe231620ff309894251c1dc96ca73f7bbafa193919f408e3e66f23cb0", + "public": "docs/validation/native-input/cohorts/legacy-owned-200-v5/tests.log", + "public_sha256": "b9b8e0ffe231620ff309894251c1dc96ca73f7bbafa193919f408e3e66f23cb0", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v4/tests.log", + "original_sha256": "64cf658174120372874e36a7515ba146dcca8be3ab6faedf3b9226d80cfcdd2b", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v4/tests.log", + "public_sha256": "64cf658174120372874e36a7515ba146dcca8be3ab6faedf3b9226d80cfcdd2b", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/tests.log", + "original_sha256": "6e4e68da21c526abd2e7c2135c08f91a4ea9d9011dbd52c8e74b196b1988405c", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v5/tests.log", + "public_sha256": "6e4e68da21c526abd2e7c2135c08f91a4ea9d9011dbd52c8e74b196b1988405c", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/legacy-owned-probe-v3/tests.log", + "original_sha256": "5aff141d72a4e108f5d962186e3512e0e78ed655337fc24504dfef3576da8636", + "public": "docs/validation/native-input/cohorts/legacy-owned-probe-v3/tests.log", + "public_sha256": "5aff141d72a4e108f5d962186e3512e0e78ed655337fc24504dfef3576da8636", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/legacy-same-length-v6/tests.log", + "original_sha256": "2be942790ebece04940714af7a2882574d8d759c4217f30193026ef90b632f87", + "public": "docs/validation/native-input/cohorts/legacy-same-length-v6/tests.log", + "public_sha256": "2be942790ebece04940714af7a2882574d8d759c4217f30193026ef90b632f87", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/legacy-strict-control-v1/tests.log", + "original_sha256": "be6e8c66ba9e440f453a1e338456c13f95985a74943d23f0c03c8056fd50882f", + "public": "docs/validation/native-input/cohorts/legacy-strict-control-v1/tests.log", + "public_sha256": "be6e8c66ba9e440f453a1e338456c13f95985a74943d23f0c03c8056fd50882f", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/legacy-strict-control-v2/tests.log", + "original_sha256": "38dd4909f81b975ac53d1e38ac78f90d0dcbf5ff31ee44ed40794be33c598eb5", + "public": "docs/validation/native-input/cohorts/legacy-strict-control-v2/tests.log", + "public_sha256": "38dd4909f81b975ac53d1e38ac78f90d0dcbf5ff31ee44ed40794be33c598eb5", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/legacy-strict-control-v3/tests.log", + "original_sha256": "0f03293a4bf0371e72f5111d4c994b7ff44403de9d381f8bde62a938d37a6cfb", + "public": "docs/validation/native-input/cohorts/legacy-strict-control-v3/tests.log", + "public_sha256": "0f03293a4bf0371e72f5111d4c994b7ff44403de9d381f8bde62a938d37a6cfb", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/modern-before-v1/tests.log", + "original_sha256": "31a8ce050aa6de91acf14aa46ef0b5fd7342d3144ceb5cd404db3a666b64836c", + "public": "docs/validation/native-input/cohorts/modern-before-v1/tests.log", + "public_sha256": "31a8ce050aa6de91acf14aa46ef0b5fd7342d3144ceb5cd404db3a666b64836c", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/modern-before-v2/tests.log", + "original_sha256": "39737ff68948c3415f35c2ef32ae773fe6dbca22176d2e7c452d917f89f7b5de", + "public": "docs/validation/native-input/cohorts/modern-before-v2/tests.log", + "public_sha256": "39737ff68948c3415f35c2ef32ae773fe6dbca22176d2e7c452d917f89f7b5de", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/modern-contracts-v1/tests.log", + "original_sha256": "3a99fa503ba07db10587e8d47d5e0f968ee8baa20dcb9fbf19f2d214ff0d2705", + "public": "docs/validation/native-input/cohorts/modern-contracts-v1/tests.log", + "public_sha256": "3a99fa503ba07db10587e8d47d5e0f968ee8baa20dcb9fbf19f2d214ff0d2705", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/modern-contracts-v2/tests.log", + "original_sha256": "7486ccdb7f9d1c808579e3579c33d0da90ec7f1745c6a18f9dd692512f0b1716", + "public": "docs/validation/native-input/cohorts/modern-contracts-v2/tests.log", + "public_sha256": "7486ccdb7f9d1c808579e3579c33d0da90ec7f1745c6a18f9dd692512f0b1716", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/modern-owned-full-v4/tests.log", + "original_sha256": "26be89c2f70d0ca3832b9d22db8a5c02d30e45902b1067c43fdd125921e04601", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v4/tests.log", + "public_sha256": "26be89c2f70d0ca3832b9d22db8a5c02d30e45902b1067c43fdd125921e04601", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/modern-owned-full-v5/tests.log", + "original_sha256": "c8767e9be2a5dffb2b2f021d6cb1adf15172fb4e3e747ac41a6dc14588f4d645", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v5/tests.log", + "public_sha256": "c8767e9be2a5dffb2b2f021d6cb1adf15172fb4e3e747ac41a6dc14588f4d645", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/modern-owned-landscape200-v5/tests.log", + "original_sha256": "304964ab65f41555c2658a3f96d1c8fbe6889c4fade4b61aa7bf1405bc2fe684", + "public": "docs/validation/native-input/cohorts/modern-owned-landscape200-v5/tests.log", + "public_sha256": "304964ab65f41555c2658a3f96d1c8fbe6889c4fade4b61aa7bf1405bc2fe684", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/modern-owned-phone200-v5/tests.log", + "original_sha256": "b9e80904fdeb7362e658fcb66002561cb747443f3ada9d00346ec5876ddfdae7", + "public": "docs/validation/native-input/cohorts/modern-owned-phone200-v5/tests.log", + "public_sha256": "b9e80904fdeb7362e658fcb66002561cb747443f3ada9d00346ec5876ddfdae7", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/modern-owned-probe-v3/tests.log", + "original_sha256": "7a2c99f91bbf227baef8a314bd1657c907cb329543fc3afd34371798ae82ea2e", + "public": "docs/validation/native-input/cohorts/modern-owned-probe-v3/tests.log", + "public_sha256": "7a2c99f91bbf227baef8a314bd1657c907cb329543fc3afd34371798ae82ea2e", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/modern-same-length-v6/tests.log", + "original_sha256": "d74693370aad53046a9471e8cb0f12c055c0930758586a0ca07304b539925453", + "public": "docs/validation/native-input/cohorts/modern-same-length-v6/tests.log", + "public_sha256": "d74693370aad53046a9471e8cb0f12c055c0930758586a0ca07304b539925453", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/modern-strict-control-v1/tests.log", + "original_sha256": "f27881c27eea7277f830f9c731d4953561d091bf953f020d210728bebd191ec5", + "public": "docs/validation/native-input/cohorts/modern-strict-control-v1/tests.log", + "public_sha256": "f27881c27eea7277f830f9c731d4953561d091bf953f020d210728bebd191ec5", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/modern-strict-control-v2/tests.log", + "original_sha256": "040570d314a2142804a7534898c5b644b54ebfb7ac8ebdeb993b5774550eb251", + "public": "docs/validation/native-input/cohorts/modern-strict-control-v2/tests.log", + "public_sha256": "040570d314a2142804a7534898c5b644b54ebfb7ac8ebdeb993b5774550eb251", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/modern-strict-control-v3/tests.log", + "original_sha256": "8420eaf4d6dee5f87e70504b9cd3682f8967b19f5d424bc406f116e6a1dfc24d", + "public": "docs/validation/native-input/cohorts/modern-strict-control-v3/tests.log", + "public_sha256": "8420eaf4d6dee5f87e70504b9cd3682f8967b19f5d424bc406f116e6a1dfc24d", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "original_sha256": "13c00f13cdb637fe5c323a0d7fedd562ae764cf104870207be02dbdc7049ba6b", + "public": "docs/screenshots/native-input/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "public_sha256": "13c00f13cdb637fe5c323a0d7fedd562ae764cf104870207be02dbdc7049ba6b", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "original_sha256": "83b997c137d5b0621276f4a216a65443863c3243737d7178351ad51474a2a024", + "public": "docs/validation/native-input/frames/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "public_sha256": "83b997c137d5b0621276f4a216a65443863c3243737d7178351ad51474a2a024", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json", + "original_sha256": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "public": "docs/validation/native-input/frames/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json", + "public_sha256": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-full-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "original_sha256": "c66c2c31c22aa162459f55fd72269a31bcf88a5de063f2ff4fa2f7db1661c2cc", + "public": "docs/screenshots/native-input/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "public_sha256": "c66c2c31c22aa162459f55fd72269a31bcf88a5de063f2ff4fa2f7db1661c2cc", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-full-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "original_sha256": "63aaab0d980517bd38d354d73e2d2f3dda8c5771f622ebf4b799f880fd62d579", + "public": "docs/validation/native-input/frames/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "public_sha256": "63aaab0d980517bd38d354d73e2d2f3dda8c5771f622ebf4b799f880fd62d579", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-full-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json", + "original_sha256": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "public": "docs/validation/native-input/frames/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json", + "public_sha256": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-strict-control-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png", + "original_sha256": "1f17202594d3a5be15fe28a71ce45f7293c8aafbf94793078359bbfbcc46ab1e", + "public": "docs/screenshots/native-input/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png", + "public_sha256": "1f17202594d3a5be15fe28a71ce45f7293c8aafbf94793078359bbfbcc46ab1e", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-strict-control-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml", + "original_sha256": "0143cdc0b3bc14aa75db7d74c034369eadcdf3c531361762a1da730d76714b8f", + "public": "docs/validation/native-input/frames/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml", + "public_sha256": "0143cdc0b3bc14aa75db7d74c034369eadcdf3c531361762a1da730d76714b8f", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-strict-control-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json", + "original_sha256": "a208dfc8c7111bf13cbbd0237f5826ae11254dbf9e5a7276a05258833885e6b5", + "public": "docs/validation/native-input/frames/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json", + "public_sha256": "a208dfc8c7111bf13cbbd0237f5826ae11254dbf9e5a7276a05258833885e6b5", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-strict-control-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png", + "original_sha256": "f22a3d05aa35a1b37086a552184d49bb9c52a8e8e8a958f54278e1865bfbe299", + "public": "docs/screenshots/native-input/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png", + "public_sha256": "f22a3d05aa35a1b37086a552184d49bb9c52a8e8e8a958f54278e1865bfbe299", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-strict-control-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml", + "original_sha256": "17a24d302a48b252bd1e76a4b23341ee106ebe3fb33a08ea97f29ced646102a2", + "public": "docs/validation/native-input/frames/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml", + "public_sha256": "17a24d302a48b252bd1e76a4b23341ee106ebe3fb33a08ea97f29ced646102a2", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-strict-control-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json", + "original_sha256": "a208dfc8c7111bf13cbbd0237f5826ae11254dbf9e5a7276a05258833885e6b5", + "public": "docs/validation/native-input/frames/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json", + "public_sha256": "a208dfc8c7111bf13cbbd0237f5826ae11254dbf9e5a7276a05258833885e6b5", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-query-selected-range.png", + "original_sha256": "0bc79b177925583aa5924c475dd5a5ba2402f9511dcea2b436a1158d51cb034c", + "public": "docs/screenshots/native-input/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range.png", + "public_sha256": "0bc79b177925583aa5924c475dd5a5ba2402f9511dcea2b436a1158d51cb034c", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-query-selected-range.xml", + "original_sha256": "617a5fb087c779f82c3e5847ad1125b501aa3893b212f494848300ee229919cc", + "public": "docs/validation/native-input/frames/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range.xml", + "public_sha256": "617a5fb087c779f82c3e5847ad1125b501aa3893b212f494848300ee229919cc", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json", + "original_sha256": "90fb582ae52bd82daa7dc747e0bd4cf17c64024807d8ef632f303464e1f2fade", + "public": "docs/validation/native-input/frames/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json", + "public_sha256": "90fb582ae52bd82daa7dc747e0bd4cf17c64024807d8ef632f303464e1f2fade", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png", + "original_sha256": "39591aef3ceeb77bc03a5cbb59f343e231f039376997b73e3bebc31e4417b61c", + "public": "docs/screenshots/native-input/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png", + "public_sha256": "39591aef3ceeb77bc03a5cbb59f343e231f039376997b73e3bebc31e4417b61c", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml", + "original_sha256": "0fca2d7f87d649bf8d4e4542a82e3d281370572dc537dcaa1a26605f13170875", + "public": "docs/validation/native-input/frames/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml", + "public_sha256": "0fca2d7f87d649bf8d4e4542a82e3d281370572dc537dcaa1a26605f13170875", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json", + "original_sha256": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "public": "docs/validation/native-input/frames/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json", + "public_sha256": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png", + "original_sha256": "13f16ed3f06029794ee66c70142c5b0867ec0615e2ac95430201815858fde715", + "public": "docs/screenshots/native-input/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png", + "public_sha256": "13f16ed3f06029794ee66c70142c5b0867ec0615e2ac95430201815858fde715", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml", + "original_sha256": "b2e1be1fb808383cd07e1f9b36aa17fb3667e48890cd8b7d8c9d67f58a58061c", + "public": "docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml", + "public_sha256": "b2e1be1fb808383cd07e1f9b36aa17fb3667e48890cd8b7d8c9d67f58a58061c", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json", + "original_sha256": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "public": "docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json", + "public_sha256": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png", + "original_sha256": "38477c43884c551e13ec03f5d0b0354b92318ba75310822ebba3449e7d11aa4a", + "public": "docs/screenshots/native-input/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png", + "public_sha256": "38477c43884c551e13ec03f5d0b0354b92318ba75310822ebba3449e7d11aa4a", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml", + "original_sha256": "1bab548c238c1c9e493ea4b9adcb780b167b87e94c794a3a055f17bbcb759860", + "public": "docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml", + "public_sha256": "1bab548c238c1c9e493ea4b9adcb780b167b87e94c794a3a055f17bbcb759860", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json", + "original_sha256": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "public": "docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json", + "public_sha256": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.png", + "original_sha256": "0ae49a4e1ab28e5fd968d92fc2ed37b1261c8d538f3f9808721e76c20e363ddc", + "public": "docs/screenshots/native-input/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.png", + "public_sha256": "0ae49a4e1ab28e5fd968d92fc2ed37b1261c8d538f3f9808721e76c20e363ddc", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.xml", + "original_sha256": "7c0fd9f341338b76e1fe52b7fa23986b93e8d1d3b25aa3dbcf1dcaa7db01ef73", + "public": "docs/validation/native-input/frames/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.xml", + "public_sha256": "7c0fd9f341338b76e1fe52b7fa23986b93e8d1d3b25aa3dbcf1dcaa7db01ef73", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note-frame.json", + "original_sha256": "a0b766aa6e15b5dd964b3597047d36abb1e5d87cc5ca8fccc4a96907f6567ee0", + "public": "docs/validation/native-input/frames/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note-frame.json", + "public_sha256": "a0b766aa6e15b5dd964b3597047d36abb1e5d87cc5ca8fccc4a96907f6567ee0", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png", + "original_sha256": "de7aa13ee001bafef456c5f6e86dcde31f93b4a9fb70d173b4fb5e5e64a0e05c", + "public": "docs/screenshots/native-input/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png", + "public_sha256": "de7aa13ee001bafef456c5f6e86dcde31f93b4a9fb70d173b4fb5e5e64a0e05c", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml", + "original_sha256": "5a6a78b367da5d656658edb4746f698e19140c8bf38b7b0d9a34b11fe9164656", + "public": "docs/validation/native-input/frames/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml", + "public_sha256": "5a6a78b367da5d656658edb4746f698e19140c8bf38b7b0d9a34b11fe9164656", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json", + "original_sha256": "e7ad5338a6a0b194e5e018a964525f0622c46f4255115f26ac95af3c5112fa2b", + "public": "docs/validation/native-input/frames/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json", + "public_sha256": "e7ad5338a6a0b194e5e018a964525f0622c46f4255115f26ac95af3c5112fa2b", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-query-selected-range.png", + "original_sha256": "18b74da7526c2b4f0932f69f71208ee95381cf6504daf217a9684e10247a978d", + "public": "docs/screenshots/native-input/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range.png", + "public_sha256": "18b74da7526c2b4f0932f69f71208ee95381cf6504daf217a9684e10247a978d", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-query-selected-range.xml", + "original_sha256": "fe675fb5eae40d15f6117e5ae7e2549ce673f0dcbd4043713495757d3ff198aa", + "public": "docs/validation/native-input/frames/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range.xml", + "public_sha256": "fe675fb5eae40d15f6117e5ae7e2549ce673f0dcbd4043713495757d3ff198aa", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json", + "original_sha256": "90fb582ae52bd82daa7dc747e0bd4cf17c64024807d8ef632f303464e1f2fade", + "public": "docs/validation/native-input/frames/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json", + "public_sha256": "90fb582ae52bd82daa7dc747e0bd4cf17c64024807d8ef632f303464e1f2fade", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "original_sha256": "8d8cb7b94e5f150822299bc5807501bca61ddfbd08abdb57956bf910c3bd5b1a", + "public": "docs/screenshots/native-input/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "public_sha256": "8d8cb7b94e5f150822299bc5807501bca61ddfbd08abdb57956bf910c3bd5b1a", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "original_sha256": "f28fc50fd6bb638aaf63c0d846d979a18c884bd249dfe006a67a096b6d41ddab", + "public": "docs/validation/native-input/frames/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "public_sha256": "f28fc50fd6bb638aaf63c0d846d979a18c884bd249dfe006a67a096b6d41ddab", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json", + "original_sha256": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "public": "docs/validation/native-input/frames/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json", + "public_sha256": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png", + "original_sha256": "88dc9bc6d6158b5b9ade91e29627c84f30c8f4df057e8f164508d309f9239c6f", + "public": "docs/screenshots/native-input/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png", + "public_sha256": "88dc9bc6d6158b5b9ade91e29627c84f30c8f4df057e8f164508d309f9239c6f", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml", + "original_sha256": "0889a87fe7145225ebdb2726134afd0757817c84540bcd15b389ef54e751bd0c", + "public": "docs/validation/native-input/frames/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml", + "public_sha256": "0889a87fe7145225ebdb2726134afd0757817c84540bcd15b389ef54e751bd0c", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json", + "original_sha256": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "public": "docs/validation/native-input/frames/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json", + "public_sha256": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-phone200-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png", + "original_sha256": "b9340b4568e07657828bc881405cf1b932630fc7111e15f883bb683b77f680d2", + "public": "docs/screenshots/native-input/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png", + "public_sha256": "b9340b4568e07657828bc881405cf1b932630fc7111e15f883bb683b77f680d2", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-phone200-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml", + "original_sha256": "86e1fee196ae2424854ec4feaa136ef220517756c0eaef47debe4f67cc71250a", + "public": "docs/validation/native-input/frames/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml", + "public_sha256": "86e1fee196ae2424854ec4feaa136ef220517756c0eaef47debe4f67cc71250a", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-phone200-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json", + "original_sha256": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "public": "docs/validation/native-input/frames/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json", + "public_sha256": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png", + "original_sha256": "a90fa38ad0d5a40637d529cf08ef0b2c5a0ecff8b672fa94d04de3810c03d1b3", + "public": "docs/screenshots/native-input/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png", + "public_sha256": "a90fa38ad0d5a40637d529cf08ef0b2c5a0ecff8b672fa94d04de3810c03d1b3", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml", + "original_sha256": "031a612dbb5f16674f87be8c03d1586055cdf7c01c195bb97e5c201030657ddc", + "public": "docs/validation/native-input/frames/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml", + "public_sha256": "031a612dbb5f16674f87be8c03d1586055cdf7c01c195bb97e5c201030657ddc", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json", + "original_sha256": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "public": "docs/validation/native-input/frames/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json", + "public_sha256": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-landscape200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "original_sha256": "4b4b104e7274510a10c3dcd69bca2655de6f18f0d255e496d51a752285268268", + "public": "docs/screenshots/native-input/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "public_sha256": "4b4b104e7274510a10c3dcd69bca2655de6f18f0d255e496d51a752285268268", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-landscape200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "original_sha256": "e66b1d175c0d523f7acd8e9fe68f0d3833a18235c1c29f975d33f5920be1800c", + "public": "docs/validation/native-input/frames/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "public_sha256": "e66b1d175c0d523f7acd8e9fe68f0d3833a18235c1c29f975d33f5920be1800c", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-landscape200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json", + "original_sha256": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "public": "docs/validation/native-input/frames/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json", + "public_sha256": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png", + "original_sha256": "2f5ba4758138369d5e81292b65880b29b8f51ad38f7af839533e41a28ba095ad", + "public": "docs/screenshots/native-input/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png", + "public_sha256": "2f5ba4758138369d5e81292b65880b29b8f51ad38f7af839533e41a28ba095ad", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml", + "original_sha256": "a450adf1ff9f7737e53b1787a75d7a3307b79691d4fdacbb0d9233ce1ba685dd", + "public": "docs/validation/native-input/frames/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml", + "public_sha256": "a450adf1ff9f7737e53b1787a75d7a3307b79691d4fdacbb0d9233ce1ba685dd", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json", + "original_sha256": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "public": "docs/validation/native-input/frames/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json", + "public_sha256": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-same-length-v6/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "original_sha256": "4ecb9d33473aaa9109b6925503383b2401f49c791ee289f8a55e5f1f46a1f104", + "public": "docs/screenshots/native-input/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "public_sha256": "4ecb9d33473aaa9109b6925503383b2401f49c791ee289f8a55e5f1f46a1f104", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-same-length-v6/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "original_sha256": "b50cc91fa7b516db04168966eea66ead5920bc0298f3f877638ec8f57002f3a0", + "public": "docs/validation/native-input/frames/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "public_sha256": "b50cc91fa7b516db04168966eea66ead5920bc0298f3f877638ec8f57002f3a0", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-same-length-v6/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json", + "original_sha256": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "public": "docs/validation/native-input/frames/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json", + "public_sha256": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-same-length-v6/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "original_sha256": "75fce55f28a1709e892e48d799a56208e3bbcd5b0e70e2e071d1787a4e7510b6", + "public": "docs/screenshots/native-input/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "public_sha256": "75fce55f28a1709e892e48d799a56208e3bbcd5b0e70e2e071d1787a4e7510b6", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-same-length-v6/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "original_sha256": "5868971622788be375d9fe942aae7e69cd1b7c98757fa2fe0d1345e866988f4b", + "public": "docs/validation/native-input/frames/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "public_sha256": "5868971622788be375d9fe942aae7e69cd1b7c98757fa2fe0d1345e866988f4b", + "transform": "identity" + }, + { + "original": "artifacts/native-input/modern-same-length-v6/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json", + "original_sha256": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "public": "docs/validation/native-input/frames/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json", + "public_sha256": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before.png", + "original_sha256": "07ed9cdf078ef674771f49c4e06e1ab448258a996306ba53c7c5fe3452bfc938", + "public": "docs/screenshots/native-input/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before.png", + "public_sha256": "07ed9cdf078ef674771f49c4e06e1ab448258a996306ba53c7c5fe3452bfc938", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before.xml", + "original_sha256": "0d397a67e069da369984ee457ace0a1795e2bbbd35a58e02e552063f302bdfe4", + "public": "docs/validation/native-input/frames/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before.xml", + "public_sha256": "0d397a67e069da369984ee457ace0a1795e2bbbd35a58e02e552063f302bdfe4", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before-frame.json", + "original_sha256": "4f68850bb0e35342dd1993bf56079ef44c6e740f6852dc17a1e44639f99cc726", + "public": "docs/validation/native-input/frames/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before-frame.json", + "public_sha256": "4f68850bb0e35342dd1993bf56079ef44c6e740f6852dc17a1e44639f99cc726", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-contracts-v1/captures/committedemojinavigationandcaretareexact-failure.png", + "original_sha256": "f471354b059d9657237344880b8b53c0bfc1942e5690cbc23de7b4785b5e983c", + "public": "docs/screenshots/native-input/system-ime-history/committedemojinavigationandcaretareexact-failure.png", + "public_sha256": "f471354b059d9657237344880b8b53c0bfc1942e5690cbc23de7b4785b5e983c", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-contracts-v1/captures/committedemojinavigationandcaretareexact-failure.xml", + "original_sha256": "b1ca718225e73832ad5555b96c7f7c9aaa5bfe4d8226d2ad84d25ff2d4fd98c6", + "public": "docs/validation/native-input/frames/system-ime-history/committedemojinavigationandcaretareexact-failure.xml", + "public_sha256": "b1ca718225e73832ad5555b96c7f7c9aaa5bfe4d8226d2ad84d25ff2d4fd98c6", + "transform": "identity" + }, + { + "original": "artifacts/native-input/legacy-contracts-v1/captures/committedemojinavigationandcaretareexact-failure-frame.json", + "original_sha256": "76aa121bca272092ed45f240ad07e9db23af0ddaf7bb7ca203338a672147560f", + "public": "docs/validation/native-input/frames/system-ime-history/committedemojinavigationandcaretareexact-failure-frame.json", + "public_sha256": "76aa121bca272092ed45f240ad07e9db23af0ddaf7bb7ca203338a672147560f", + "transform": "identity" + }, + { + "original": "artifacts/native-input/before-v1/identity.json", + "original_sha256": "e18d6d2e97eb01fb91738aa73b79319bc52de3168dba15c04991967e8796fe9a", + "public": "docs/validation/native-input/identities/before-v1.json", + "public_sha256": "e18d6d2e97eb01fb91738aa73b79319bc52de3168dba15c04991967e8796fe9a", + "transform": "identity" + }, + { + "original": "artifacts/native-input/before-v2/identity.json", + "original_sha256": "f0d26163ebce291664991dbace22234958ae2a84bfdf2eacf872ee30b1fd3fbb", + "public": "docs/validation/native-input/identities/before-v2.json", + "public_sha256": "f0d26163ebce291664991dbace22234958ae2a84bfdf2eacf872ee30b1fd3fbb", + "transform": "identity" + }, + { + "original": "artifacts/native-input/contracts-v1/identity.json", + "original_sha256": "1dd77638255b32093f3f01974b72facee05228dd6bea770876ae30f7c03145cc", + "public": "docs/validation/native-input/identities/contracts-v1.json", + "public_sha256": "1dd77638255b32093f3f01974b72facee05228dd6bea770876ae30f7c03145cc", + "transform": "identity" + }, + { + "original": "artifacts/native-input/strict-control-v1/identity.json", + "original_sha256": "4e5f0c547a5064b6a216a35796c5312de2dbf42ac242f8a32c0c8cd89e37dd6b", + "public": "docs/validation/native-input/identities/strict-control-v1.json", + "public_sha256": "4e5f0c547a5064b6a216a35796c5312de2dbf42ac242f8a32c0c8cd89e37dd6b", + "transform": "identity" + }, + { + "original": "artifacts/native-input/strict-control-v1/NativeEditableAssertions.kt", + "original_sha256": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "public": "docs/validation/native-input/identities/strict-control-v1-helper.kt", + "public_sha256": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "transform": "identity" + }, + { + "original": "artifacts/native-input/final-v2/identity.json", + "original_sha256": "cacf6a6dd2dff7acf0b5ec29aebcc8b7eb539e10857e3324c39f4d2cb32ac437", + "public": "docs/validation/native-input/identities/final-v2.json", + "public_sha256": "cacf6a6dd2dff7acf0b5ec29aebcc8b7eb539e10857e3324c39f4d2cb32ac437", + "transform": "identity" + }, + { + "original": "artifacts/native-input/owned-v3/identity.json", + "original_sha256": "76396abb075ae837718e92045cd9540acebba339c96797f0319d9ed521baa47a", + "public": "docs/validation/native-input/identities/owned-v3.json", + "public_sha256": "76396abb075ae837718e92045cd9540acebba339c96797f0319d9ed521baa47a", + "transform": "identity" + }, + { + "original": "artifacts/native-input/owned-v4/identity.json", + "original_sha256": "662f0c70fd772d26c61de08264cedd99cedfa6025cad2818a3ce3809578c0b1e", + "public": "docs/validation/native-input/identities/owned-v4.json", + "public_sha256": "662f0c70fd772d26c61de08264cedd99cedfa6025cad2818a3ce3809578c0b1e", + "transform": "identity" + }, + { + "original": "artifacts/native-input/strict-control-v2/identity.json", + "original_sha256": "484b60fdae5a86e4cb4b8c5cacc9dc87c3c066530f03f1c52a17be9d80915a0f", + "public": "docs/validation/native-input/identities/strict-control-v2.json", + "public_sha256": "484b60fdae5a86e4cb4b8c5cacc9dc87c3c066530f03f1c52a17be9d80915a0f", + "transform": "identity" + }, + { + "original": "artifacts/native-input/strict-control-v2/NativeEditableAssertions.kt", + "original_sha256": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "public": "docs/validation/native-input/identities/strict-control-v2-helper.kt", + "public_sha256": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "transform": "identity" + }, + { + "original": "artifacts/native-input/owned-v5/identity.json", + "original_sha256": "1b5e5dab8e4732d10086ef6c349648683e73545db78bb16af6a4e73c2eae2a22", + "public": "docs/validation/native-input/identities/owned-v5.json", + "public_sha256": "1b5e5dab8e4732d10086ef6c349648683e73545db78bb16af6a4e73c2eae2a22", + "transform": "identity" + }, + { + "original": "artifacts/native-input/strict-control-v3/identity.json", + "original_sha256": "c5bd80606fe9e1383da1a113c0a00f2e432c9c124f80afd48947c4434479049a", + "public": "docs/validation/native-input/identities/strict-control-v3.json", + "public_sha256": "c5bd80606fe9e1383da1a113c0a00f2e432c9c124f80afd48947c4434479049a", + "transform": "identity" + }, + { + "original": "artifacts/native-input/strict-control-v2/NativeEditableAssertions.kt", + "original_sha256": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "public": "docs/validation/native-input/identities/strict-control-v3-helper.kt", + "public_sha256": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "transform": "identity" + }, + { + "original": "artifacts/native-input/same-length-v6/identity.json", + "original_sha256": "2be292a702b226c11c8aed8f8a1f70cb8cd1606a47af71d3d915beb63da3077f", + "public": "docs/validation/native-input/identities/same-length-v6.json", + "public_sha256": "2be292a702b226c11c8aed8f8a1f70cb8cd1606a47af71d3d915beb63da3077f", + "transform": "identity" + }, + { + "original": "artifacts/native-input/diagnostic-harness-build-v1.log", + "original_sha256": "debb2f992f9711a0f54ee956c3fe5d7408545fe368d2e2dc107d7068eb91cfbf", + "public": "docs/validation/native-input/checks/diagnostic-harness-build-v1.log", + "public_sha256": "4daf49c3edeba45c93ce894f6013049097057690351086b084beb4689a1f4864", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/diagnostic-harness-build-v2.log", + "original_sha256": "bbd8fd6895a77892be5a7a88a6e5e030d1ebc3efda17ed7c0cc5fb3c1fb22556", + "public": "docs/validation/native-input/checks/diagnostic-harness-build-v2.log", + "public_sha256": "2a93dceff3af66c38cac18fdfab761cb30eb6f39440d5f93f4c706b09ea1f050", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/diagnostic-harness-build-v3.log", + "original_sha256": "c5d227e9b2c53afdc527b0591a20b2e0be128c62bd9f5b837e921b99a95cf1e1", + "public": "docs/validation/native-input/checks/diagnostic-harness-build-v3.log", + "public_sha256": "c5d227e9b2c53afdc527b0591a20b2e0be128c62bd9f5b837e921b99a95cf1e1", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/contracts-harness-build-v1.log", + "original_sha256": "1b50c90be1886b23f6b17dc4bada58a2ccb9ad5dc612d9c8f48a766bc1cddebf", + "public": "docs/validation/native-input/checks/contracts-harness-build-v1.log", + "public_sha256": "1b50c90be1886b23f6b17dc4bada58a2ccb9ad5dc612d9c8f48a766bc1cddebf", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/contracts-harness-build-v2.log", + "original_sha256": "c5d227e9b2c53afdc527b0591a20b2e0be128c62bd9f5b837e921b99a95cf1e1", + "public": "docs/validation/native-input/checks/contracts-harness-build-v2.log", + "public_sha256": "c5d227e9b2c53afdc527b0591a20b2e0be128c62bd9f5b837e921b99a95cf1e1", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/final-build-checks-v1.log", + "original_sha256": "148cf82c15f40d3bcfd0d6b8306c5be6870725e52c667d721af0c0f3d9274e0a", + "public": "docs/validation/native-input/checks/final-build-checks-v1.log", + "public_sha256": "7fa0621a8824fa96ce578488c95cdf529f04cd8c4b50291af10f929e20e2212d", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/final-build-checks-v2.log", + "original_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "public": "docs/validation/native-input/checks/final-build-checks-v2.log", + "public_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/final-build-checks-v3.log", + "original_sha256": "4e1fd2d5bc3e4a9d4ca3e10f6b16033449659578ee4d3f403ea3afed672439fc", + "public": "docs/validation/native-input/checks/final-build-checks-v3.log", + "public_sha256": "57ec2fafb3a607697fe98e6e96ab241f5bab0108fbd7fbd7b02fba8770fe9dce", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/final-owned-build-v1.log", + "original_sha256": "d685045695b56068a38c67448cf07ef7854f367db3fe382736ff7bdcf59ee20d", + "public": "docs/validation/native-input/checks/final-owned-build-v1.log", + "public_sha256": "116973da72fa77036bd51da63f054fea12d423a1b8be476d662f8fd95e161afc", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/final-benchmark-build-v2.log", + "original_sha256": "d935cdad2143bafa5b92238ea4faf80ffe205a443284287dc98c4e56ca9624ed", + "public": "docs/validation/native-input/checks/final-benchmark-build-v2.log", + "public_sha256": "373b2de29efbda036c0ac9976a126e6258a01f3a7a5e46e151e0d38c994f8a14", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/python-v1.log", + "original_sha256": "4b19c202bf575fc88ea9a761dcbab0bf71708d8b383716c31d06797d1f14a58e", + "public": "docs/validation/native-input/checks/python-v1.log", + "public_sha256": "4b19c202bf575fc88ea9a761dcbab0bf71708d8b383716c31d06797d1f14a58e", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/python-optimized-v1.log", + "original_sha256": "3eb8a69b003e01fdf5d5ab1a58f4f9a0886c311cbb8cf4be98b4d400f79b8e47", + "public": "docs/validation/native-input/checks/python-optimized-v1.log", + "public_sha256": "3eb8a69b003e01fdf5d5ab1a58f4f9a0886c311cbb8cf4be98b4d400f79b8e47", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/python-final-v2.log", + "original_sha256": "52ef40e4da616373407b9b2ae72b584a8a126b04f892ffb94cd72f480af812aa", + "public": "docs/validation/native-input/checks/python-final-v2.log", + "public_sha256": "52ef40e4da616373407b9b2ae72b584a8a126b04f892ffb94cd72f480af812aa", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/python-optimized-final-v2.log", + "original_sha256": "284eda9b95a30be71f0e011950130e3b687bc1f54e5ff582eb465b2179e3a7e9", + "public": "docs/validation/native-input/checks/python-optimized-final-v2.log", + "public_sha256": "284eda9b95a30be71f0e011950130e3b687bc1f54e5ff582eb465b2179e3a7e9", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/python-final-v4.log", + "original_sha256": "ef65977950cd18b6294f68569afa1bdaa4c7363ee4f3a32ec0b8fc3421bf4f58", + "public": "docs/validation/native-input/checks/python-final-v4.log", + "public_sha256": "ef65977950cd18b6294f68569afa1bdaa4c7363ee4f3a32ec0b8fc3421bf4f58", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/python-optimized-final-v4.log", + "original_sha256": "e0140fed9d5e7687bb50b031ba80f4e081e645759f37a08a8fa7b5af4676857c", + "public": "docs/validation/native-input/checks/python-optimized-final-v4.log", + "public_sha256": "e0140fed9d5e7687bb50b031ba80f4e081e645759f37a08a8fa7b5af4676857c", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/same-length-debug-build-v1.log", + "original_sha256": "e8cc2949a387acc3a469dcd263700f81168e33b9c112bdeeceb94910e39e2772", + "public": "docs/validation/native-input/checks/same-length-debug-build-v1.log", + "public_sha256": "8e38e387da425b21f152fc5ce5b2c5a10538312b2ef2edc5992e4872af44d777", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/same-length-benchmark-build-v1.log", + "original_sha256": "e367f3a00709068f763ee73d35ea4bcda714d41b57e731aaa55f4f69a7f8a748", + "public": "docs/validation/native-input/checks/same-length-benchmark-build-v1.log", + "public_sha256": "3b4479466ff75c5e04ebd0a07bfc7c7fea7f795f6f003070be1ae8a7fbbf84a8", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/strict-control-v1/build.log", + "original_sha256": "598feb7b68210ac06d5af9f27b1a11962f7f8bdc1ac7325ff1e277ed585fd483", + "public": "docs/validation/native-input/checks/strict-control-v1-build.log", + "public_sha256": "598feb7b68210ac06d5af9f27b1a11962f7f8bdc1ac7325ff1e277ed585fd483", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/strict-control-v2/build.log", + "original_sha256": "cdbf5acb4a637f386177f891c10cdde6ce22198f958b6d79872b38ab48f89fa6", + "public": "docs/validation/native-input/checks/strict-control-v2-build.log", + "public_sha256": "a016de39a25721f921bca868fd7204642e11661c337aebd467bf00be40ef40a7", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/final-v2/debug-assembly-completed-prefix.log", + "original_sha256": "b982c061939d162860dea3e84526d697b4c3384003e629d798fe10f7e15af176", + "public": "docs/validation/native-input/checks/final-v2-debug-assembly-prefix.log", + "public_sha256": "b982c061939d162860dea3e84526d697b4c3384003e629d798fe10f7e15af176", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/owned-v3/debug-assembly-completed-prefix.log", + "original_sha256": "307fcce04991e7d1f7089ece28000fa55ff9705eac2c32f62323d87281162214", + "public": "docs/validation/native-input/checks/owned-v3-debug-assembly-prefix.log", + "public_sha256": "96efe1b67e1d44e1d07294d1e79cf29bea34551423b72af773de02c733c02a82", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.PaletteScrollHistoryTest.xml", + "original_sha256": "b24e62c84505a56550e3af1df6099421a2b5a36418fc5cf45a1d110c8e1af39c", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.PaletteScrollHistoryTest.xml", + "public_sha256": "b24e62c84505a56550e3af1df6099421a2b5a36418fc5cf45a1d110c8e1af39c", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionFormFileImportTest.xml", + "original_sha256": "d45f5bc23fc6c45b728fd6c0eeb7b6257ea5aee048d50f56dd18d190b2347d51", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormFileImportTest.xml", + "public_sha256": "d45f5bc23fc6c45b728fd6c0eeb7b6257ea5aee048d50f56dd18d190b2347d51", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionPayloadIdentityTest.xml", + "original_sha256": "fdbebbd2356dd1e0e46b963f19f6d14f295cf87b3989fe0ccc21e6b3ff824b6d", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionPayloadIdentityTest.xml", + "public_sha256": "fdbebbd2356dd1e0e46b963f19f6d14f295cf87b3989fe0ccc21e6b3ff824b6d", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionSelectionDeliveryTest.xml", + "original_sha256": "b7fe24dd317a3e0e367478733caf3950e5aacac1db1ae24d053f2edd7fe12c07", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionSelectionDeliveryTest.xml", + "public_sha256": "b7fe24dd317a3e0e367478733caf3950e5aacac1db1ae24d053f2edd7fe12c07", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionFormTypedValuesTest.xml", + "original_sha256": "919cfec3fa7e7c6210b9d4eb9e029dbb7e1db18cdad088c2655add9d525fed22", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormTypedValuesTest.xml", + "public_sha256": "919cfec3fa7e7c6210b9d4eb9e029dbb7e1db18cdad088c2655add9d525fed22", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionMarkdownModelTest.xml", + "original_sha256": "1799962fe7015d75f7da767e4bd75f57ace64d66b8e6d6d76aad1bf627054c2a", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionMarkdownModelTest.xml", + "public_sha256": "1799962fe7015d75f7da767e4bd75f57ace64d66b8e6d6d76aad1bf627054c2a", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionPasteCopyTest.xml", + "original_sha256": "050de233f55e12bdab58755a391ac9875d04cfa25de9bddea2d09a9a4e949b6d", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionPasteCopyTest.xml", + "public_sha256": "050de233f55e12bdab58755a391ac9875d04cfa25de9bddea2d09a9a4e949b6d", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ShortcutReadinessTest.xml", + "original_sha256": "edc4ff7306ca2751589d7bff8e45cfdf548a2b2829c6b015af6c63d1d379bc52", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ShortcutReadinessTest.xml", + "public_sha256": "edc4ff7306ca2751589d7bff8e45cfdf548a2b2829c6b015af6c63d1d379bc52", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionDetailImageTimeoutTest.xml", + "original_sha256": "e679cb190d9177ca252656cdca5c20fcf28a4fabeffe1efc45099c618e59e996", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionDetailImageTimeoutTest.xml", + "public_sha256": "e679cb190d9177ca252656cdca5c20fcf28a4fabeffe1efc45099c618e59e996", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionWorkflowEvidenceTest.xml", + "original_sha256": "a251c5fa648259430542d388318f650f8b50472de9d6f57796cb4be2c4b830ee", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionWorkflowEvidenceTest.xml", + "public_sha256": "a251c5fa648259430542d388318f650f8b50472de9d6f57796cb4be2c4b830ee", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.extensions.CommonMarkPrimaryConformanceTest.xml", + "original_sha256": "543eb2efdaf850bc699bb86531fca406759b64c05f73a2cbae3cd9f545b55638", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.CommonMarkPrimaryConformanceTest.xml", + "public_sha256": "543eb2efdaf850bc699bb86531fca406759b64c05f73a2cbae3cd9f545b55638", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.EmojiCatalogTest.xml", + "original_sha256": "0aa5915167ef2f6e82dd59a31a0fc61b5856d7fd4a95b6891e15a4a53ad31ff1", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.EmojiCatalogTest.xml", + "public_sha256": "0aa5915167ef2f6e82dd59a31a0fc61b5856d7fd4a95b6891e15a4a53ad31ff1", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.SystemSettingsTest.xml", + "original_sha256": "9f9959a60cb933b7435f79bad795fe96e1b486fdcf82fdd938132d6f6f056579", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.SystemSettingsTest.xml", + "public_sha256": "9f9959a60cb933b7435f79bad795fe96e1b486fdcf82fdd938132d6f6f056579", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionGridContractTest.xml", + "original_sha256": "4fa21dfb69c724d1e98a455727c6ba2366dda18073628730258dcbd78b502ab9", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionGridContractTest.xml", + "public_sha256": "4fa21dfb69c724d1e98a455727c6ba2366dda18073628730258dcbd78b502ab9", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionCommandLaunchTest.xml", + "original_sha256": "d0b4adb70e01d4ab19e9528099061dbdc827035965376669bca4993b55a78d33", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionCommandLaunchTest.xml", + "public_sha256": "d0b4adb70e01d4ab19e9528099061dbdc827035965376669bca4993b55a78d33", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionFormValuesTest.xml", + "original_sha256": "031fe0ae4baa6bebafd6a3d25edfbf47a685fa50af5127b86dd504ae97dd30cf", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormValuesTest.xml", + "public_sha256": "031fe0ae4baa6bebafd6a3d25edfbf47a685fa50af5127b86dd504ae97dd30cf", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ReviewedTextInputTest.xml", + "original_sha256": "55079e486c196e56b8e67dfb7c7de15c80991bae714c86fec704fb626bafeb80", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ReviewedTextInputTest.xml", + "public_sha256": "55079e486c196e56b8e67dfb7c7de15c80991bae714c86fec704fb626bafeb80", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ModifierTapTest.xml", + "original_sha256": "da88e67ebd5039df3978f00a7118a5bb449ed100c000bb42006007586f4f47e2", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ModifierTapTest.xml", + "public_sha256": "da88e67ebd5039df3978f00a7118a5bb449ed100c000bb42006007586f4f47e2", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionFormContractTest.xml", + "original_sha256": "52c864d061692fb47f24acc257bdd1b1620898bf23a0db1504c07aed072ebd85", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormContractTest.xml", + "public_sha256": "52c864d061692fb47f24acc257bdd1b1620898bf23a0db1504c07aed072ebd85", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ShortcutTest.xml", + "original_sha256": "9798a3f434aa48e664e8250547e719569beb5b857850f62eba6dc5c1c834c8e7", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ShortcutTest.xml", + "public_sha256": "9798a3f434aa48e664e8250547e719569beb5b857850f62eba6dc5c1c834c8e7", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionWorkflowInspectionTest.xml", + "original_sha256": "880f01acaca0fcc61955aeeeb015d383f415eb1739292980be16a5ffe9bab242", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionWorkflowInspectionTest.xml", + "public_sha256": "880f01acaca0fcc61955aeeeb015d383f415eb1739292980be16a5ffe9bab242", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.PaletteMenuOwnershipTest.xml", + "original_sha256": "9213cea79ef813c21915808ff4f409c2b18e2505c1d5dd97b1a166aa99b04b09", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.PaletteMenuOwnershipTest.xml", + "public_sha256": "9213cea79ef813c21915808ff4f409c2b18e2505c1d5dd97b1a166aa99b04b09", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.CalculatorActionsTest.xml", + "original_sha256": "8eff3994ee5067c88b753f149a73c277493ac59840ea6960e750cdaadc20fea4", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.CalculatorActionsTest.xml", + "public_sha256": "8eff3994ee5067c88b753f149a73c277493ac59840ea6960e750cdaadc20fea4", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.BackupPlannerTest.xml", + "original_sha256": "ba17dc207fc3e3388ef1dda921294648621b076b783441c433e4d0009bdf2fd4", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.BackupPlannerTest.xml", + "public_sha256": "ba17dc207fc3e3388ef1dda921294648621b076b783441c433e4d0009bdf2fd4", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionGridNavigationTest.xml", + "original_sha256": "33117173c8b05a79190cb440a6df6d130142bac5f9f5438b868c19858fe591f9", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionGridNavigationTest.xml", + "public_sha256": "33117173c8b05a79190cb440a6df6d130142bac5f9f5438b868c19858fe591f9", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.FolderGrantTransactionTest.xml", + "original_sha256": "48551cc6d1110993dd5707c508818a90452f4947a7e04556db841718a96b74b9", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.FolderGrantTransactionTest.xml", + "public_sha256": "48551cc6d1110993dd5707c508818a90452f4947a7e04556db841718a96b74b9", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionEngineCompatibilityTest.xml", + "original_sha256": "da675b3d1fdb149565a723ebf4ee8696fca374e8e96b3b38c13c89ec9a7b8e12", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionEngineCompatibilityTest.xml", + "public_sha256": "da675b3d1fdb149565a723ebf4ee8696fca374e8e96b3b38c13c89ec9a7b8e12", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionFormSubmissionTest.xml", + "original_sha256": "883b03358162a1a6ed1324a6783865c822b11702befd171cf0611d715a03b3d8", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormSubmissionTest.xml", + "public_sha256": "883b03358162a1a6ed1324a6783865c822b11702befd171cf0611d715a03b3d8", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.UpdatePolicyTest.xml", + "original_sha256": "017d34365baff8f31aaa58525e1c9055f456126a2039fab2711adec150851834", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.UpdatePolicyTest.xml", + "public_sha256": "017d34365baff8f31aaa58525e1c9055f456126a2039fab2711adec150851834", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.WeakValueTokensTest.xml", + "original_sha256": "a8ae90c1556495e26fa5810b280b77493961cf3ce297522d57357ab54890c2c0", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.WeakValueTokensTest.xml", + "public_sha256": "a8ae90c1556495e26fa5810b280b77493961cf3ce297522d57357ab54890c2c0", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionMetadataVisualsTest.xml", + "original_sha256": "f279d2e93505d8a8fffda0a093218d067cbefb0f5fe62a76cdec072874c12375", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionMetadataVisualsTest.xml", + "public_sha256": "f279d2e93505d8a8fffda0a093218d067cbefb0f5fe62a76cdec072874c12375", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.extensions.NodeCpuInfoTest.xml", + "original_sha256": "bd33332ba12aea92ce8c89238a7912a7569a79401a599dea302c8f1bbcc8a47d", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.NodeCpuInfoTest.xml", + "public_sha256": "bd33332ba12aea92ce8c89238a7912a7569a79401a599dea302c8f1bbcc8a47d", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.CommandEngineTest.xml", + "original_sha256": "b9bffc77512a34ee0e6b9bfc6b87dbbbe2c5f98341b35aa8cd4f6a48b57a6643", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.CommandEngineTest.xml", + "public_sha256": "b9bffc77512a34ee0e6b9bfc6b87dbbbe2c5f98341b35aa8cd4f6a48b57a6643", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.ExtensionHttpTest.xml", + "original_sha256": "074e1b06c38f791e1e8a461e713e9994251356af2f106ae6c506b94b675701ed", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionHttpTest.xml", + "public_sha256": "074e1b06c38f791e1e8a461e713e9994251356af2f106ae6c506b94b675701ed", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.FolderIndexTest.xml", + "original_sha256": "385eb497858199df97affff80198b29bcfa93b44856cbbe1581b2ac90dca462d", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.FolderIndexTest.xml", + "public_sha256": "385eb497858199df97affff80198b29bcfa93b44856cbbe1581b2ac90dca462d", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.TinycastGridParityTest.xml", + "original_sha256": "256d0cbd3903d9712a91014bfc637965f4e268c552c71d7e6dedf572a038cf3c", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.TinycastGridParityTest.xml", + "public_sha256": "256d0cbd3903d9712a91014bfc637965f4e268c552c71d7e6dedf572a038cf3c", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/test-results/testDebugUnitTest/TEST-dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest.xml", + "original_sha256": "1b6248013c82aa0f197ad7bd4820f950010d15c312271df357d5c43f675fd13b", + "public": "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest.xml", + "public_sha256": "1b6248013c82aa0f197ad7bd4820f950010d15c312271df357d5c43f675fd13b", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/reports/lint-results-debug.xml", + "original_sha256": "8f4a435fc6c0e7b637879c9564925ce5ff90d8d364b68c7cbc07b60ba8223884", + "public": "docs/validation/native-input/checks/lint-results-debug.xml", + "public_sha256": "1beb4077ae2dbb1852acab60801c1d7a06f2f346f32ff56f5246bbb9148d672c", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "app/build/reports/lint-results-benchmark.xml", + "original_sha256": "8f4a435fc6c0e7b637879c9564925ce5ff90d8d364b68c7cbc07b60ba8223884", + "public": "docs/validation/native-input/checks/lint-results-benchmark.xml", + "public_sha256": "1beb4077ae2dbb1852acab60801c1d7a06f2f346f32ff56f5246bbb9148d672c", + "transform": "replace checkout/home with XML-escaped placeholders" + }, + { + "original": "artifacts/native-input/binary-metadata/summary.json", + "original_sha256": "357025fcab1dc80b0dcf73ac053ca4f2f1e83530a39a0b012bdc0ef24e9d1c46", + "public": "docs/validation/native-input/binary-metadata/summary.json", + "public_sha256": "357025fcab1dc80b0dcf73ac053ca4f2f1e83530a39a0b012bdc0ef24e9d1c46", + "transform": "identity" + }, + { + "original": "artifacts/native-input/binary-metadata/candidate-test-manifest.xml", + "original_sha256": "b467cd75f67ae0336c000708f82d24b5be57bd28f9add3fe3dfedad05d51da7a", + "public": "docs/validation/native-input/binary-metadata/candidate-test-manifest.xml", + "public_sha256": "b467cd75f67ae0336c000708f82d24b5be57bd28f9add3fe3dfedad05d51da7a", + "transform": "identity" + }, + { + "original": "artifacts/native-input/binary-metadata/strict-test-manifest.xml", + "original_sha256": "b467cd75f67ae0336c000708f82d24b5be57bd28f9add3fe3dfedad05d51da7a", + "public": "docs/validation/native-input/binary-metadata/strict-test-manifest.xml", + "public_sha256": "b467cd75f67ae0336c000708f82d24b5be57bd28f9add3fe3dfedad05d51da7a", + "transform": "identity" + }, + { + "original": "artifacts/native-input/binary-metadata/app-manifest.xml", + "original_sha256": "bef57566a61bac45a02f12c1f2233cd578a3ad2d87346a92f1020f4a564f62fb", + "public": "docs/validation/native-input/binary-metadata/app-manifest.xml", + "public_sha256": "bef57566a61bac45a02f12c1f2233cd578a3ad2d87346a92f1020f4a564f62fb", + "transform": "identity" + }, + { + "original": "artifacts/native-input/profiles.json", + "original_sha256": "e75a71e1365b5a69322a6c96d2624a5e259517ef67d956b7149ead17819a775e", + "public": "docs/validation/native-input/profiles.json", + "public_sha256": "e75a71e1365b5a69322a6c96d2624a5e259517ef67d956b7149ead17819a775e", + "transform": "identity" + }, + { + "original": "artifacts/native-input/strict-calibration-v1.json", + "original_sha256": "76ca9739e426a97707b868b5de9bd754bcb49f5ed5b70f065547fe5a99b0673d", + "public": "docs/validation/native-input/strict-calibration-v1.json", + "public_sha256": "76ca9739e426a97707b868b5de9bd754bcb49f5ed5b70f065547fe5a99b0673d", + "transform": "identity" + }, + { + "original": "artifacts/native-input/post-probe-ime-history-cleanup.json", + "original_sha256": "0b7930a01c95b370ee3bfcb50b511ac7e92b7f30bc2db0ea5c30c1d5a71644d3", + "public": "docs/validation/native-input/post-probe-ime-history-cleanup.json", + "public_sha256": "0b7930a01c95b370ee3bfcb50b511ac7e92b7f30bc2db0ea5c30c1d5a71644d3", + "transform": "identity" + }, + { + "original": "artifacts/native-input/control-source-reference-clarification.json", + "original_sha256": "67279795f2c832ad1592f0d3aad818622d15ad456195bb2046de1783a1844109", + "public": "docs/validation/native-input/control-source-reference-clarification.json", + "public_sha256": "67279795f2c832ad1592f0d3aad818622d15ad456195bb2046de1783a1844109", + "transform": "identity" + }, + { + "original": "artifacts/native-input/final-preservation.json", + "original_sha256": "eecbe30fe7cff5854ac30c5f94195836575dd4ac8caaf27fff64ea5324c116b3", + "public": "docs/validation/native-input/final-preservation.json", + "public_sha256": "eecbe30fe7cff5854ac30c5f94195836575dd4ac8caaf27fff64ea5324c116b3", + "transform": "identity" + }, + { + "original": "artifacts/native-input/verify-final-preservation.py", + "original_sha256": "3eaf6b09091cb5a25327b8d5094821be19283c1505aa599e63f056f8cbdf26d2", + "public": "docs/validation/native-input/collectors/verify-final-preservation.py", + "public_sha256": "0e39cfb75a7ef5ec5f06326833376a1f2a4cebc3066393ecfcd86494e4c60675", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/modern-strict-control-v2/recovery.json", + "original_sha256": "22855df8b4b4bccd44a3cb00ec057bbce5c7d2deb80ae843f312bc251f2c633f", + "public": "docs/validation/native-input/history/modern-control-recovery.json", + "public_sha256": "22855df8b4b4bccd44a3cb00ec057bbce5c7d2deb80ae843f312bc251f2c633f", + "transform": "identity" + }, + { + "original": "artifacts/native-input/recover-modern-control-v2.py", + "original_sha256": "0c681081ce7c7028f932c226e917627330fdbae6affca6bc222e66f0583ff581", + "public": "docs/validation/native-input/collectors/recover-modern-control-v2.py", + "public_sha256": "944f7cccfeb4444be629add3255defac6a0e08ab9646dcd1b80afebba886a143", + "transform": "replace checkout/home with placeholders" + }, + { + "original": "artifacts/native-input/dependencies/source.json", + "original_sha256": "9c15f00364640374dfae3605f1e79c99a418044c36834667b5438914e61d8a78", + "public": "docs/validation/native-input/dependencies/source.json", + "public_sha256": "9c15f00364640374dfae3605f1e79c99a418044c36834667b5438914e61d8a78", + "transform": "identity" + }, + { + "original": "artifacts/native-input/dependencies/api26-ime-source.json", + "original_sha256": "fbdbf76cf1a6f5dbf530c6a32ce56585185dff6488e2a7b08a4161cad74b9c03", + "public": "docs/validation/native-input/dependencies/api26-ime-source.json", + "public_sha256": "fbdbf76cf1a6f5dbf530c6a32ce56585185dff6488e2a7b08a4161cad74b9c03", + "transform": "identity" + }, + { + "original": "scripts/test-webview-engine.py", + "original_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "public": "docs/validation/native-input/collectors/test-webview-engine.py", + "public_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "transform": "identity" + }, + { + "original": "artifacts/native-input/publish-validation.py", + "original_sha256": "92344df9b2af30a44013f90cdbbcb733cc5f110e05e92190590804cb4a5de5c7", + "public": "docs/validation/native-input/collectors/publish-validation.py", + "public_sha256": "92344df9b2af30a44013f90cdbbcb733cc5f110e05e92190590804cb4a5de5c7", + "transform": "identity" + } +] diff --git a/docs/validation/native-input/calibration.json b/docs/validation/native-input/calibration.json new file mode 100644 index 00000000..3dcc9919 --- /dev/null +++ b/docs/validation/native-input/calibration.json @@ -0,0 +1,12 @@ +{ + "completed": true, + "scope": "Two intended strict-annotation failures, zero JUnit passes; both positive-only runner receipts remain failed; all restoration checks succeed", + "cohorts": { + "legacy-strict": "legacy-strict-control-v3", + "tablet-strict": "modern-strict-control-v3" + }, + "test_payload_delta": [ + "classes3.dex" + ], + "production_app_unchanged": true +} diff --git a/docs/validation/native-input/capture-original-hashes.json b/docs/validation/native-input/capture-original-hashes.json new file mode 100644 index 00000000..8f82a437 --- /dev/null +++ b/docs/validation/native-input/capture-original-hashes.json @@ -0,0 +1,527 @@ +{ + "artifacts/native-input/legacy-before-v1/captures/case-recordcallerselectionacrossnativeroutes.json": "653dc76283ebf65b25f8238c44f28eb796f1ffa73093d373a43310fa38d60ac9", + "artifacts/native-input/legacy-before-v1/captures/case-recorddefaultimeandcontrolledcompositionnavigation.json": "1b09847e7d1dca575713aa64e4e5c8f7a38fe0430c4b8feb0b7558b1253fc506", + "artifacts/native-input/legacy-before-v1/captures/case-recordlargedrafttextandannotationsafterrecreation.json": "0225616b8ac82c2ab8ead5b013c1a18ccfadca035a492242d99bc82e03627613", + "artifacts/native-input/legacy-before-v1/captures/recordcallerselectionacrossnativeroutes-note-caller-frame.json": "c2f54ae74a7d02f34242c7ba4296df14aa964308bbc866513f03ee10cdc1fcee", + "artifacts/native-input/legacy-before-v1/captures/recordcallerselectionacrossnativeroutes-note-caller.png": "6ba61502b3f74628b590e4099b0f1a0e63c4be8e254edf705ac8d55f23dbcc39", + "artifacts/native-input/legacy-before-v1/captures/recordcallerselectionacrossnativeroutes-note-caller.xml": "310539c3dec47d338cc7e8e6297576449545e85665b9017e6e8daddae063071d", + "artifacts/native-input/legacy-before-v1/captures/recordcallerselectionacrossnativeroutes-note-route-frame.json": "9cc1886b91e4beb6cbb872e7f8754ca0422899b351cb32df91788b57e60f6860", + "artifacts/native-input/legacy-before-v1/captures/recordcallerselectionacrossnativeroutes-note-route.png": "46a930ac0eaa326570c343ec5b0e6d5a776265fe4d5333a3744d7e7ed03bbdcf", + "artifacts/native-input/legacy-before-v1/captures/recordcallerselectionacrossnativeroutes-note-route.xml": "d8bafb9cae4c149e5b590216dda93882f22bb3a87b3da91ba880580f78753062", + "artifacts/native-input/legacy-before-v1/captures/recordcallerselectionacrossnativeroutes-updates-caller-frame.json": "082100103f93bcfbe35f8652832489d2983241e5916aafbc1beb3aaab2191114", + "artifacts/native-input/legacy-before-v1/captures/recordcallerselectionacrossnativeroutes-updates-caller.png": "2667247dab09b201960da273b3526212c4bad2607cfbb01b88b41158ce1167cc", + "artifacts/native-input/legacy-before-v1/captures/recordcallerselectionacrossnativeroutes-updates-caller.xml": "39b40a60abc191da366451e90c299582850ef8e30424f4efff64b504fe5a5382", + "artifacts/native-input/legacy-before-v1/captures/recordcallerselectionacrossnativeroutes-updates-route-idle-frame.json": "a07f9f3ce3e04de50feb13ef85692698d337b3e433f5b08e564ea8eeefcfc0eb", + "artifacts/native-input/legacy-before-v1/captures/recordcallerselectionacrossnativeroutes-updates-route-idle.png": "a4c4cae88913bb36e23032d4c19d07bd67c7114f6e412d34190e4894c350712d", + "artifacts/native-input/legacy-before-v1/captures/recordcallerselectionacrossnativeroutes-updates-route-idle.xml": "3187dfbc042cb6d42a96e2293ce13fbe21731efac2dc3f08fa48e0b007e2680b", + "artifacts/native-input/legacy-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-committed-navigation-frame.json": "befca622911c412de8524ecf1cb6c145e21f58aa900e7510ff6874b1fd1b04ab", + "artifacts/native-input/legacy-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-committed-navigation.png": "43d25bb63eabf2e71bd6858e4dbdeb7afb33c2f3588265eb97f4fa54feff4137", + "artifacts/native-input/legacy-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-committed-navigation.xml": "170e210461b23c19fe090578bba3a69839fff47f95236bf7175c3374d8f013ec", + "artifacts/native-input/legacy-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before-frame.json": "4f68850bb0e35342dd1993bf56079ef44c6e740f6852dc17a1e44639f99cc726", + "artifacts/native-input/legacy-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before.png": "085ad4576df2c25f28f6e37f3261a17559b1a57c5e42975aa9698ab55979f7e6", + "artifacts/native-input/legacy-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before.xml": "36f9cb76a9b7e6603efe2110252539140af535737eecf3570a066144802fb878", + "artifacts/native-input/legacy-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-japanese-composition-frame.json": "d294ef81b8c0a4f1507d925a371ffd6777267a3f14579cbb589f074514004066", + "artifacts/native-input/legacy-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-japanese-composition.png": "7e57ff8f8f7560232d88636de2bcb7fb78b388e7b9872d67fc6271206fedd615", + "artifacts/native-input/legacy-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-japanese-composition.xml": "1f7da476ded25058d31ae29208b576e0b8c0d665b338d1cb908be4e5e71c2652", + "artifacts/native-input/legacy-before-v1/captures/recordlargedrafttextandannotationsafterrecreation-large-draft-recreated-frame.json": "eefa05fee9662100ce3aadaad8ea807ea20949e48bbc7faac3680f4611b1b3ba", + "artifacts/native-input/legacy-before-v1/captures/recordlargedrafttextandannotationsafterrecreation-large-draft-recreated.png": "ff8dcf302cb4daf2e7eae64bef70a6a388726d6c4d61e2984cba8e2a31640d9a", + "artifacts/native-input/legacy-before-v1/captures/recordlargedrafttextandannotationsafterrecreation-large-draft-recreated.xml": "52134b7a4af5295a2588d4ed758da3f55f9d040edebfad24f5a8fec9d3ac0902", + "artifacts/native-input/legacy-before-v2/captures/case-recordcallerselectionacrossnativeroutes.json": "666df1d4e3f650ea1f220a5f89da3764f87b138c7e50a53f1f359ed7dd1954b0", + "artifacts/native-input/legacy-before-v2/captures/case-recorddefaultimeandcontrolledcompositionnavigation.json": "828692f5fc5ddccb877380c0aee92e4cdd4ef51758f3a0f99de53ca38c57c723", + "artifacts/native-input/legacy-before-v2/captures/case-recordinjectedtypingandcommittedquerynavigation.json": "a54d00ef2be767225108a7a58c8d1095196abf852c4a552ea31ee1abb1a740cc", + "artifacts/native-input/legacy-before-v2/captures/case-recordlargedrafttextandannotationsafterrecreation.json": "c08a76b19560e95fa5117e23e288e6aa145144ffbc8a36d9474e477142203bf4", + "artifacts/native-input/legacy-before-v2/captures/case-recordsameturnlauncheractivationtextandannotations.json": "5adefdf43f637264b88612f7b789d408cad3c838b9b995951cff8f412faeca64", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-note-caller-frame.json": "c2f54ae74a7d02f34242c7ba4296df14aa964308bbc866513f03ee10cdc1fcee", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-note-caller.png": "518d5046b6308aeb429265feccbbecc97351b27c8cbb846f77e039ae6e387f4c", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-note-caller.xml": "8acd5945e03522303bf4c377030d2daef382441108621e41d75ddc89863fda82", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-note-route-frame.json": "9cc1886b91e4beb6cbb872e7f8754ca0422899b351cb32df91788b57e60f6860", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-note-route.png": "a29d35e793974140b3124dca6641cfdd89f607d13fab76e1cb44604954993007", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-note-route.xml": "e36cf8a08cd55e08d298cdd8367f4b562f3bddbb075a6349305b7bdbb9371bd2", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-caller-frame.json": "082100103f93bcfbe35f8652832489d2983241e5916aafbc1beb3aaab2191114", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-caller.png": "40a269b5cd0c897739510ce6909edc54dd81c37a6ee7407ad9a789e25f665e99", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-caller.xml": "05eabe4c9599c426a14e5aa727470cab7209f1c9955cae851e43de270738e21a", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-route-focused-frame.json": "ea88cb5463bdd611dc81613df7957b89d29f48912980a93199ae5fd1fbbceb4a", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-route-focused.png": "8e44f5269dd94ef0dd7d4773c6b4257a7fe9d720bd59a6f58e756709f0cdab87", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-route-focused.xml": "3187dfbc042cb6d42a96e2293ce13fbe21731efac2dc3f08fa48e0b007e2680b", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-route-idle-frame.json": "a07f9f3ce3e04de50feb13ef85692698d337b3e433f5b08e564ea8eeefcfc0eb", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-route-idle.png": "7de84ec1b62a737fa7dea45db1773e377820461e3ae43cab2a469940e312c4f4", + "artifacts/native-input/legacy-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-route-idle.xml": "1aaa11850f57ca317910fe587ffcd98f7f70d1f88ea6769953c92cd8db6c5916", + "artifacts/native-input/legacy-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-committed-navigation-frame.json": "befca622911c412de8524ecf1cb6c145e21f58aa900e7510ff6874b1fd1b04ab", + "artifacts/native-input/legacy-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-committed-navigation.png": "ce9c9ff9b0c316ac147bab25373dbfade2943dbcc329433d8b1f62a41c8ef4ce", + "artifacts/native-input/legacy-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-committed-navigation.xml": "21d09037199863258bb765302bc354ba2070a07275986ce172bd069f04ef9fcd", + "artifacts/native-input/legacy-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before-frame.json": "4f68850bb0e35342dd1993bf56079ef44c6e740f6852dc17a1e44639f99cc726", + "artifacts/native-input/legacy-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before.png": "07ed9cdf078ef674771f49c4e06e1ab448258a996306ba53c7c5fe3452bfc938", + "artifacts/native-input/legacy-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before.xml": "0d397a67e069da369984ee457ace0a1795e2bbbd35a58e02e552063f302bdfe4", + "artifacts/native-input/legacy-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-japanese-composition-frame.json": "d294ef81b8c0a4f1507d925a371ffd6777267a3f14579cbb589f074514004066", + "artifacts/native-input/legacy-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-japanese-composition.png": "8f08766041ba9422a950763ed9c245059082e2e30e2a3d1e72572a8fa3306d5e", + "artifacts/native-input/legacy-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-japanese-composition.xml": "cee79ae51d78c5232d26d926f9b2e39f7167f25587eeb793fce45ba2953140c9", + "artifacts/native-input/legacy-before-v2/captures/recordinjectedtypingandcommittedquerynavigation-failure-frame.json": "76951a6ee3538959135a5a07a4ab142b22dfe4171d107dd0cbd88ee495435ecb", + "artifacts/native-input/legacy-before-v2/captures/recordinjectedtypingandcommittedquerynavigation-failure.png": "a55ae4d6a92b5dac126025371097007b4feb25b9e2715a962a906b6b249dacf0", + "artifacts/native-input/legacy-before-v2/captures/recordinjectedtypingandcommittedquerynavigation-failure.xml": "f4817b8e49e10cde95162c94a2f7c5194d40ddbf81c27a61cd0d004f49842ad5", + "artifacts/native-input/legacy-before-v2/captures/recordlargedrafttextandannotationsafterrecreation-large-draft-recreated-frame.json": "eefa05fee9662100ce3aadaad8ea807ea20949e48bbc7faac3680f4611b1b3ba", + "artifacts/native-input/legacy-before-v2/captures/recordlargedrafttextandannotationsafterrecreation-large-draft-recreated.png": "d00a95525fb704335b5bf7fbe6c0353a6219a7602bbd6bcc4ea9b1f8eca8eebe", + "artifacts/native-input/legacy-before-v2/captures/recordlargedrafttextandannotationsafterrecreation-large-draft-recreated.xml": "7c9c6cef9d41a8c5c51fe0633b5b6ed71ef87415dc2df5b8853542c64680c96b", + "artifacts/native-input/legacy-before-v2/captures/recordsameturnlauncheractivationtextandannotations-failure-frame.json": "76951a6ee3538959135a5a07a4ab142b22dfe4171d107dd0cbd88ee495435ecb", + "artifacts/native-input/legacy-before-v2/captures/recordsameturnlauncheractivationtextandannotations-failure.png": "5d323b0502837358c2beec518518173f850af74472f677eb723e8373784f0a69", + "artifacts/native-input/legacy-before-v2/captures/recordsameturnlauncheractivationtextandannotations-failure.xml": "e2648d020fce493089c626bbcde6fc53015d2eea4a6d2fafafffcf63aabde6bd", + "artifacts/native-input/legacy-contracts-v1/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "artifacts/native-input/legacy-contracts-v1/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png": "a2c8a674040b91184df734a9db431d61a9c206833fe1f8109b0479edfbd28ca1", + "artifacts/native-input/legacy-contracts-v1/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml": "e1bc1aee32b130667c0b8812c6e5e5250cdae81363443ada7e0f91a2c1924444", + "artifacts/native-input/legacy-contracts-v1/captures/case-activemultilingualcompositionkeepsresultselection.json": "190cf5bea6a528f4ff5f787c0d5349e6d03230e2538954abb3fdacc8d144a1ee", + "artifacts/native-input/legacy-contracts-v1/captures/case-committedcallerselectionsurvivesidlenativeroutes.json": "62fe9b45de917e400a95be402e526fc7edfaf464159402f61f0fb21f994ae027", + "artifacts/native-input/legacy-contracts-v1/captures/case-committedemojinavigationandcaretareexact.json": "45ed1a3202e63db93f702c0460551920cf5a0a3899c5806aad4f4b6e5b83bde7", + "artifacts/native-input/legacy-contracts-v1/captures/case-committedsameturnlauncheractivationusescurrentnote.json": "9912688457cda5b811b095fab0bb3391eac2e4930dddbb7064783a8305e9839a", + "artifacts/native-input/legacy-contracts-v1/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "d365f8892a6687e94ca1b17d9efcee4d001661df6f33543218ab3654e3cda8a6", + "artifacts/native-input/legacy-contracts-v1/captures/case-largedraftrestoresexactcharactersafterrecreation.json": "1ba1acb58b52b100699a3f332c7951a3c9f695e7bf1800a7d3216a4d5203ac39", + "artifacts/native-input/legacy-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return-frame.json": "dda274840d17dd27ec4b666afc0b928ea20621fd56f95b6dda8a48155f6ed7e8", + "artifacts/native-input/legacy-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.png": "fcc4cce37fc079f03e90849cfcafd13fa0cb56c58f353784e62c4b0f58e65f5c", + "artifacts/native-input/legacy-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.xml": "fde8b480bfdda82e0279cdec9d10a66374f0017319490b3a3be703e70b04ba6a", + "artifacts/native-input/legacy-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination-frame.json": "1b363d7e96202c3c44e48f88ed686419b062f49d2d34258a70f7863530e94083", + "artifacts/native-input/legacy-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.png": "f21e9ea1ea49eddf8afddd4ca568a5a6b4f2a30b4e951829de8678673ee82595", + "artifacts/native-input/legacy-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.xml": "fc779d7760a8b798c92a07c5ca855934274147f516cd58d61e49fdc9eeef194f", + "artifacts/native-input/legacy-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "artifacts/native-input/legacy-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "bb46bf189ea72013e602036a143b5841032f5a899849c24d189c297c6cb21dbf", + "artifacts/native-input/legacy-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "0d38fdf8ad9ae5dcde4dab007fa87dd37602ba8c85eaba417845059620657653", + "artifacts/native-input/legacy-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "artifacts/native-input/legacy-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png": "c09336d36a9d4f7a22aadfbeb6d54758c12bb800ab215ecd19167e5fc2de8ffb", + "artifacts/native-input/legacy-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml": "19b728acb4ba045999fa46ebca11da01be6245d0778694d8d0e550e6d2ef7a61", + "artifacts/native-input/legacy-contracts-v1/captures/committedemojinavigationandcaretareexact-failure-frame.json": "76aa121bca272092ed45f240ad07e9db23af0ddaf7bb7ca203338a672147560f", + "artifacts/native-input/legacy-contracts-v1/captures/committedemojinavigationandcaretareexact-failure.png": "f471354b059d9657237344880b8b53c0bfc1942e5690cbc23de7b4785b5e983c", + "artifacts/native-input/legacy-contracts-v1/captures/committedemojinavigationandcaretareexact-failure.xml": "b1ca718225e73832ad5555b96c7f7c9aaa5bfe4d8226d2ad84d25ff2d4fd98c6", + "artifacts/native-input/legacy-contracts-v1/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note-frame.json": "a0b766aa6e15b5dd964b3597047d36abb1e5d87cc5ca8fccc4a96907f6567ee0", + "artifacts/native-input/legacy-contracts-v1/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.png": "d14a1beff7b6b196b701f78328518a29f8696fbba3fc8db69a337cf66f4247aa", + "artifacts/native-input/legacy-contracts-v1/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.xml": "e20aa67fb0a57c30c03dc03d46dc0a9228fd398a79982e8a1dc932a392007d37", + "artifacts/native-input/legacy-contracts-v1/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-before-assertion-frame.json": "aa7e606ae58dbeec9d6f91ddb8f4332b62df31e289c200a0a4bc65a441ca10e4", + "artifacts/native-input/legacy-contracts-v1/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-before-assertion.png": "a05233fbb415dcfd64099dd747fb3ec6c817228e379ff37a17bffb7edbcab00e", + "artifacts/native-input/legacy-contracts-v1/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-before-assertion.xml": "8f11428696b32007002a3d749da949839d71f75d28434751586023ad8bdf1307", + "artifacts/native-input/legacy-contracts-v1/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json": "e7ad5338a6a0b194e5e018a964525f0622c46f4255115f26ac95af3c5112fa2b", + "artifacts/native-input/legacy-contracts-v1/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png": "01aa7128b87862d5e4fe4c73532143b4ee75f473b5286e152ba62fabd223c9b2", + "artifacts/native-input/legacy-contracts-v1/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml": "0e84e5bdbd40c8e3d83cd136958ea18c4496cce268e6acc36d54632b36a2122b", + "artifacts/native-input/legacy-contracts-v2/captures/activemultilingualcompositionkeepsresultselection-failure-frame.json": "303d800aec72272247aa55277dbbd9ee4dd976bbb076c64169f926131a3c6c94", + "artifacts/native-input/legacy-contracts-v2/captures/activemultilingualcompositionkeepsresultselection-failure.png": "29e2368a8d8df2edad61a7a8580147857ff9a9e3c2e092d21479177b9c6102d3", + "artifacts/native-input/legacy-contracts-v2/captures/activemultilingualcompositionkeepsresultselection-failure.xml": "2624f9ae7744ef042c52af3df7d4892f9ae84a979a4370864adf9df614d39f9e", + "artifacts/native-input/legacy-contracts-v2/captures/case-activemultilingualcompositionkeepsresultselection.json": "a6635ac6f3525c001db0ec6ae8487214a8cca2fcfe0fbf15ec5a1ceba22fd612", + "artifacts/native-input/legacy-contracts-v2/captures/case-committedcallerselectionsurvivesidlenativeroutes.json": "8bea3e573c61ff795493ce3e0ddf757b8b25ad005bc86bb1a1952f896675d3e4", + "artifacts/native-input/legacy-contracts-v2/captures/case-committedsameturnlauncheractivationusescurrentnote.json": "bc9b675f411a919d4f9ba342e43e30d713c9c13ab82300a24de12868c7086e99", + "artifacts/native-input/legacy-contracts-v2/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "e96589ef1d2436adb599ff247175f8746857ba7a41a9590c263a6e242778d97d", + "artifacts/native-input/legacy-contracts-v2/captures/case-largedraftrestoresexactcharactersafterrecreation.json": "df660a9c81231c03bc057717a3fa5c4c1a4117cb37aa81ea58dd690b575e0d38", + "artifacts/native-input/legacy-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return-frame.json": "dda274840d17dd27ec4b666afc0b928ea20621fd56f95b6dda8a48155f6ed7e8", + "artifacts/native-input/legacy-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.png": "6e2998f73647a52ab6b1d2a9be3a212e0f07139f7c1bd145e3e49b23d3c9b9c0", + "artifacts/native-input/legacy-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.xml": "66bd6376edcc9e4f9049054e310572b5c7df0bc34e0a3517cc8f232e4f9b07f4", + "artifacts/native-input/legacy-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination-frame.json": "1b363d7e96202c3c44e48f88ed686419b062f49d2d34258a70f7863530e94083", + "artifacts/native-input/legacy-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.png": "cbd89216f0095825b0861edd5c82e7ff1fdf682022b5a650481cb833453f51e3", + "artifacts/native-input/legacy-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.xml": "d1a6ba3040c10810521670a8d3eff966da31b81381abfc129f794eea1ab9a173", + "artifacts/native-input/legacy-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "artifacts/native-input/legacy-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "867b185c64af07b35bb20e0babbc42809a49435669a2403d4c0e48acd5c320f6", + "artifacts/native-input/legacy-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "c52c7eeee66ad2a5800049a52d22068427444d30db1f55b35c8bcc3b90e6611e", + "artifacts/native-input/legacy-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "artifacts/native-input/legacy-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png": "478a23028d08dbf9dd18d131db99421cac0f1f403831701345a8ccde9e62a73e", + "artifacts/native-input/legacy-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml": "25e4c8980d5dfd595fa474498dd22b874cafe1b2048caf69a5541e5d84e1fe61", + "artifacts/native-input/legacy-contracts-v2/captures/committedsameturnlauncheractivationusescurrentnote-failure-frame.json": "cfe5f60b6893ea32f662b5d22894c661e30abc48e5295e40957c41b2a4cf9145", + "artifacts/native-input/legacy-contracts-v2/captures/committedsameturnlauncheractivationusescurrentnote-failure.png": "48972d1a20570636bdc586f7c7b8a137e075f8a507bed989891d57fd6e036636", + "artifacts/native-input/legacy-contracts-v2/captures/committedsameturnlauncheractivationusescurrentnote-failure.xml": "f159cfdf06308c314cbe9bc7b056aad36a211b9258856547cf41998ca4728f6d", + "artifacts/native-input/legacy-contracts-v2/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json": "a208dfc8c7111bf13cbbd0237f5826ae11254dbf9e5a7276a05258833885e6b5", + "artifacts/native-input/legacy-contracts-v2/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png": "c63f8052f37a9bda3992182620b33bcbdbabdd4d7757a82a5b0bbc57893a0776", + "artifacts/native-input/legacy-contracts-v2/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml": "1c522d42f99732a4f84f9c5114cda13a70d2fa2eb320e7b6f8874dd2abd2bc95", + "artifacts/native-input/legacy-contracts-v2/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json": "e7ad5338a6a0b194e5e018a964525f0622c46f4255115f26ac95af3c5112fa2b", + "artifacts/native-input/legacy-contracts-v2/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png": "52ebae33ef59b20be004a8400b71ad339c11a571e5b4f9124ef82a4171328437", + "artifacts/native-input/legacy-contracts-v2/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml": "14de81978ecf7db691cb43f9d5e165b439ae95ae54506bde23af15331e34ae92", + "artifacts/native-input/legacy-owned-200-v4/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "artifacts/native-input/legacy-owned-200-v4/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png": "4d4ff80b30bc455900b63439b8907e7676238bf3af6036b86926645ed7d7c3d8", + "artifacts/native-input/legacy-owned-200-v4/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml": "214e640840a5fe4207215577a4fa759e8f4d5f72daae72892510faa4e6bb4e01", + "artifacts/native-input/legacy-owned-200-v4/captures/case-activemultilingualcompositionkeepsresultselection.json": "0df30471e64aff419adf4cba8c9e6d98fc1434725ac130bf756b5d20a8c65897", + "artifacts/native-input/legacy-owned-200-v4/captures/case-committedcallerselectionsurvivesidlenativeroutes.json": "5dcb92c949254da63786755a922e50d2e9e7df37fafd51d57c1a0fb9cbca559f", + "artifacts/native-input/legacy-owned-200-v4/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "c8835e815f93290a6b6f4bd94166fe38389e4f9c224f692fdfb78f67a6063a3a", + "artifacts/native-input/legacy-owned-200-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return-frame.json": "dda274840d17dd27ec4b666afc0b928ea20621fd56f95b6dda8a48155f6ed7e8", + "artifacts/native-input/legacy-owned-200-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.png": "643c57c229e145ac410c78b31efa48f37a594c88a197ee190b8615871a767714", + "artifacts/native-input/legacy-owned-200-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.xml": "0889a87fe7145225ebdb2726134afd0757817c84540bcd15b389ef54e751bd0c", + "artifacts/native-input/legacy-owned-200-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination-frame.json": "1b363d7e96202c3c44e48f88ed686419b062f49d2d34258a70f7863530e94083", + "artifacts/native-input/legacy-owned-200-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.png": "643c57c229e145ac410c78b31efa48f37a594c88a197ee190b8615871a767714", + "artifacts/native-input/legacy-owned-200-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.xml": "431582870780fe51068580e39bac1a8d3730bd39a7a6e771dbf339a281297824", + "artifacts/native-input/legacy-owned-200-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "artifacts/native-input/legacy-owned-200-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "643c57c229e145ac410c78b31efa48f37a594c88a197ee190b8615871a767714", + "artifacts/native-input/legacy-owned-200-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "0889a87fe7145225ebdb2726134afd0757817c84540bcd15b389ef54e751bd0c", + "artifacts/native-input/legacy-owned-200-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "artifacts/native-input/legacy-owned-200-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png": "ba24419bd073b6eae308836d4ee59d315f8bbd3d2d6bec21a674058b8fb5942e", + "artifacts/native-input/legacy-owned-200-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml": "ce2417c4fd09ff56eda735702208dd2bd048060d870f973f496bf50d3471f37d", + "artifacts/native-input/legacy-owned-200-v4/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "artifacts/native-input/legacy-owned-200-v4/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "b60ba0eb5b4e51f8597532c675a817a1c02204da9fafb3762ae9e85c27b7c52a", + "artifacts/native-input/legacy-owned-200-v4/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "73dab06593c17a2355852af814f097fea54eb5342ba1ab2a1913a3cf1e19691a", + "artifacts/native-input/legacy-owned-200-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "artifacts/native-input/legacy-owned-200-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png": "e84835d752af5b9b65212f3794d8be4cb30e65369fd2e0e3fec7ea33b6b22b54", + "artifacts/native-input/legacy-owned-200-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml": "d015014c0fd4ac5f0b39bc73567165e5b6aabda850d8ecd067627f5d81d99b97", + "artifacts/native-input/legacy-owned-200-v5/captures/case-activemultilingualcompositionkeepsresultselection.json": "b25420dbefbbadc73664cc331c63ba614ea8aa56c67de21c145e1f7f6c89b0c6", + "artifacts/native-input/legacy-owned-200-v5/captures/case-committedcallerselectionsurvivesidlenativeroutes.json": "67b93a0a1e7f215b5b5848db08ccb74a05352f77d3998ca1d782cb4ee1efe768", + "artifacts/native-input/legacy-owned-200-v5/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "c12afaaa46875b593b658ca2cb17b399de93205d04de35d952d4e10efe55be56", + "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return-frame.json": "dda274840d17dd27ec4b666afc0b928ea20621fd56f95b6dda8a48155f6ed7e8", + "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.png": "c9aa1e791e9a90a4a694c53733733f58a5d48409c75df25b6b53e5ac7476163f", + "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.xml": "0889a87fe7145225ebdb2726134afd0757817c84540bcd15b389ef54e751bd0c", + "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination-frame.json": "1b363d7e96202c3c44e48f88ed686419b062f49d2d34258a70f7863530e94083", + "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.png": "47464d55faed08a26351a8e0b5fa7eb312a7a28887a254d07b7712b8f0b78d90", + "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.xml": "431582870780fe51068580e39bac1a8d3730bd39a7a6e771dbf339a281297824", + "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "88dc9bc6d6158b5b9ade91e29627c84f30c8f4df057e8f164508d309f9239c6f", + "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "0889a87fe7145225ebdb2726134afd0757817c84540bcd15b389ef54e751bd0c", + "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png": "28969de7e73bc040cb541c2a7366c85af91e780bf9d00cbf7837a4c0092a2d90", + "artifacts/native-input/legacy-owned-200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml": "ce2417c4fd09ff56eda735702208dd2bd048060d870f973f496bf50d3471f37d", + "artifacts/native-input/legacy-owned-200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "artifacts/native-input/legacy-owned-200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "8d8cb7b94e5f150822299bc5807501bca61ddfbd08abdb57956bf910c3bd5b1a", + "artifacts/native-input/legacy-owned-200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "f28fc50fd6bb638aaf63c0d846d979a18c884bd249dfe006a67a096b6d41ddab", + "artifacts/native-input/legacy-owned-full-v4/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "artifacts/native-input/legacy-owned-full-v4/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png": "27a8318d8a09b34672e5d69eadfe0885f149b66c9bc947d98e4b76507739d74f", + "artifacts/native-input/legacy-owned-full-v4/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml": "2b38dd211ced679329dcad666e3a2d8ffcedc0be71d875c352e82c77728262d5", + "artifacts/native-input/legacy-owned-full-v4/captures/case-activemultilingualcompositionkeepsresultselection.json": "34d1ac35be274e52728128b36f17febdae6d6a8325d24537c45f2b13c6f9a3b8", + "artifacts/native-input/legacy-owned-full-v4/captures/case-committedcallerselectionsurvivesidlenativeroutes.json": "1ccf0e62f750187f68a9dfa88b8e444b5b2e109af680c1c884c468db0613c772", + "artifacts/native-input/legacy-owned-full-v4/captures/case-committedemojinavigationandcaretareexact.json": "04257222995b3214c8da7b67269ea49364eb5fa413ad6353c5d7f31887c7437e", + "artifacts/native-input/legacy-owned-full-v4/captures/case-committedsameturnlauncheractivationusescurrentnote.json": "7dabfb257d9bff4423bccbc066f49e4112032343fd09dc281b509b847926e18d", + "artifacts/native-input/legacy-owned-full-v4/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "3283c9f8bbe62d5b83baca508a86c7b7f0578a26733861294cf88188b02d9412", + "artifacts/native-input/legacy-owned-full-v4/captures/case-largedraftrestoresexactcharactersafterrecreation.json": "3a1ec9c2b9daabdc87edb016c40cdbffdc0b17a6fcd6ff42ab55a704b5d9c364", + "artifacts/native-input/legacy-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return-frame.json": "dda274840d17dd27ec4b666afc0b928ea20621fd56f95b6dda8a48155f6ed7e8", + "artifacts/native-input/legacy-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.png": "4609a2d025f09d28b2639f8963c92161972182fda47ab5aea5d17710082233f6", + "artifacts/native-input/legacy-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.xml": "ef61a7d51d999f922e4f957747084b357db24d315a5790fc19a96efd59afd1ef", + "artifacts/native-input/legacy-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination-frame.json": "1b363d7e96202c3c44e48f88ed686419b062f49d2d34258a70f7863530e94083", + "artifacts/native-input/legacy-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.png": "0c1c650918a3f281cd77993cd254617b3aa794eb42c7504ab0e851dbdb8af42f", + "artifacts/native-input/legacy-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.xml": "bd3fb3ba2bd8fea127175a9d407670787ff934e0ebabdefbd8ca185ef00e3c63", + "artifacts/native-input/legacy-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "artifacts/native-input/legacy-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "4609a2d025f09d28b2639f8963c92161972182fda47ab5aea5d17710082233f6", + "artifacts/native-input/legacy-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "ef61a7d51d999f922e4f957747084b357db24d315a5790fc19a96efd59afd1ef", + "artifacts/native-input/legacy-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "artifacts/native-input/legacy-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png": "f7c4136cf0d7557a2378d9c859306446f791a69a7edc28ffe40445b9d408d518", + "artifacts/native-input/legacy-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml": "25e4c8980d5dfd595fa474498dd22b874cafe1b2048caf69a5541e5d84e1fe61", + "artifacts/native-input/legacy-owned-full-v4/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation-frame.json": "c89fda5acb65f03ec6fae122d1ec0270fb5d70fca467d361bdcc039cdaebc11a", + "artifacts/native-input/legacy-owned-full-v4/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation.png": "009facd3866448c09456a9ed9ca336dcf8bbb15a68338ce92cccee09f2916d14", + "artifacts/native-input/legacy-owned-full-v4/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation.xml": "193664078c703cc238aee926b8e49dc21434de9e4e70f03f0b0db2a4fd157b70", + "artifacts/native-input/legacy-owned-full-v4/captures/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json": "90fb582ae52bd82daa7dc747e0bd4cf17c64024807d8ef632f303464e1f2fade", + "artifacts/native-input/legacy-owned-full-v4/captures/committedemojinavigationandcaretareexact-committed-query-selected-range.png": "7e60e48f02c6c5d38c927eb4d656bfd34267c06e9e7bd04833a5d4c944d7c053", + "artifacts/native-input/legacy-owned-full-v4/captures/committedemojinavigationandcaretareexact-committed-query-selected-range.xml": "193664078c703cc238aee926b8e49dc21434de9e4e70f03f0b0db2a4fd157b70", + "artifacts/native-input/legacy-owned-full-v4/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note-frame.json": "a0b766aa6e15b5dd964b3597047d36abb1e5d87cc5ca8fccc4a96907f6567ee0", + "artifacts/native-input/legacy-owned-full-v4/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.png": "b695be33b5727e8d1b593b61859dbb6479e07cd27804e5f518e56ec985545cf3", + "artifacts/native-input/legacy-owned-full-v4/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.xml": "659d9ab6e111898330f21d853ecdb17e174da6bf19bd7fc07f5ddf3948d969bb", + "artifacts/native-input/legacy-owned-full-v4/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "artifacts/native-input/legacy-owned-full-v4/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "0736c7df4396f0a0643c14c92b3b63280074628cd908d644f9216cf63143fa6c", + "artifacts/native-input/legacy-owned-full-v4/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "9a6eb16508b3eb72829db465ac1dcee0f5e9ef2bb4ad12c614951696150579ba", + "artifacts/native-input/legacy-owned-full-v4/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json": "e7ad5338a6a0b194e5e018a964525f0622c46f4255115f26ac95af3c5112fa2b", + "artifacts/native-input/legacy-owned-full-v4/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png": "ecbe2a08f4034e59b303dbd9ff60436563d8a048dea68b0e97ea3b4ead7e2830", + "artifacts/native-input/legacy-owned-full-v4/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml": "c05c19873c0166e83527782cf5a65537ce7cbe5d4202cd26dfcf22b5ebc40e0e", + "artifacts/native-input/legacy-owned-full-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "artifacts/native-input/legacy-owned-full-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png": "39591aef3ceeb77bc03a5cbb59f343e231f039376997b73e3bebc31e4417b61c", + "artifacts/native-input/legacy-owned-full-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml": "0fca2d7f87d649bf8d4e4542a82e3d281370572dc537dcaa1a26605f13170875", + "artifacts/native-input/legacy-owned-full-v5/captures/case-activemultilingualcompositionkeepsresultselection.json": "90d8f717c49ba48c82e0d6f4ebae2cc8c3fc48756fb2ed77b5f8e589305eddab", + "artifacts/native-input/legacy-owned-full-v5/captures/case-committedcallerselectionsurvivesidlenativeroutes.json": "c9d0d0cc9170ed8df1fccfaa007596342a3d0260ab928422d73fd4bedcad6655", + "artifacts/native-input/legacy-owned-full-v5/captures/case-committedemojinavigationandcaretareexact.json": "9708bbc9a867e507dc3fc6decc41a3203a6dde7f21d15c0474ac5c727ecb7b36", + "artifacts/native-input/legacy-owned-full-v5/captures/case-committedsameturnlauncheractivationusescurrentnote.json": "cb544250539d8c9710a4d5dd6ab2a7ff27eea6d0c19d99d656816a6e64c7848d", + "artifacts/native-input/legacy-owned-full-v5/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "e7e2356e34796bb775287c781c2c1c8996f724aa2a3056a64b21af8c33668db8", + "artifacts/native-input/legacy-owned-full-v5/captures/case-largedraftrestoresexactcharactersafterrecreation.json": "5f0872745d24387d3c1acff9624ecfc0cd10c1574959bf3a3f1c6e886e513940", + "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return-frame.json": "dda274840d17dd27ec4b666afc0b928ea20621fd56f95b6dda8a48155f6ed7e8", + "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.png": "4cfde992a2c06a70eb98bf75764a6462afd75139fcb9d1347bc2b7cbe90ecc3b", + "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.xml": "1635acc103c448ee48e405a4d03f0fde6a072d59118985f67dca705e36b357b9", + "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination-frame.json": "1b363d7e96202c3c44e48f88ed686419b062f49d2d34258a70f7863530e94083", + "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.png": "2de17cc0ada7492ecddbd36f66d1ff26e00935808aad826736794fc2ba89867b", + "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.xml": "8cdfac50e60d80cd52aa998347493716c7cd1bbfe8a74e098c63d875a333628f", + "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "38477c43884c551e13ec03f5d0b0354b92318ba75310822ebba3449e7d11aa4a", + "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "1bab548c238c1c9e493ea4b9adcb780b167b87e94c794a3a055f17bbcb759860", + "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png": "13f16ed3f06029794ee66c70142c5b0867ec0615e2ac95430201815858fde715", + "artifacts/native-input/legacy-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml": "b2e1be1fb808383cd07e1f9b36aa17fb3667e48890cd8b7d8c9d67f58a58061c", + "artifacts/native-input/legacy-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation-frame.json": "c89fda5acb65f03ec6fae122d1ec0270fb5d70fca467d361bdcc039cdaebc11a", + "artifacts/native-input/legacy-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation.png": "48c0ac377f36a319c34026a2507c6b9a2e553642d944bc5cc7d6af8e5fad67f2", + "artifacts/native-input/legacy-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation.xml": "617a5fb087c779f82c3e5847ad1125b501aa3893b212f494848300ee229919cc", + "artifacts/native-input/legacy-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json": "90fb582ae52bd82daa7dc747e0bd4cf17c64024807d8ef632f303464e1f2fade", + "artifacts/native-input/legacy-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-query-selected-range.png": "0bc79b177925583aa5924c475dd5a5ba2402f9511dcea2b436a1158d51cb034c", + "artifacts/native-input/legacy-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-query-selected-range.xml": "617a5fb087c779f82c3e5847ad1125b501aa3893b212f494848300ee229919cc", + "artifacts/native-input/legacy-owned-full-v5/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note-frame.json": "a0b766aa6e15b5dd964b3597047d36abb1e5d87cc5ca8fccc4a96907f6567ee0", + "artifacts/native-input/legacy-owned-full-v5/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.png": "0ae49a4e1ab28e5fd968d92fc2ed37b1261c8d538f3f9808721e76c20e363ddc", + "artifacts/native-input/legacy-owned-full-v5/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.xml": "7c0fd9f341338b76e1fe52b7fa23986b93e8d1d3b25aa3dbcf1dcaa7db01ef73", + "artifacts/native-input/legacy-owned-full-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "artifacts/native-input/legacy-owned-full-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "13c00f13cdb637fe5c323a0d7fedd562ae764cf104870207be02dbdc7049ba6b", + "artifacts/native-input/legacy-owned-full-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "83b997c137d5b0621276f4a216a65443863c3243737d7178351ad51474a2a024", + "artifacts/native-input/legacy-owned-full-v5/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json": "e7ad5338a6a0b194e5e018a964525f0622c46f4255115f26ac95af3c5112fa2b", + "artifacts/native-input/legacy-owned-full-v5/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png": "de7aa13ee001bafef456c5f6e86dcde31f93b4a9fb70d173b4fb5e5e64a0e05c", + "artifacts/native-input/legacy-owned-full-v5/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml": "5a6a78b367da5d656658edb4746f698e19140c8bf38b7b0d9a34b11fe9164656", + "artifacts/native-input/legacy-owned-probe-v3/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "00322d0177e4c10035a1d174b3d5b114691414c3c9aa054aed39b6494d017e14", + "artifacts/native-input/legacy-owned-probe-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "artifacts/native-input/legacy-owned-probe-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "6fdd813c6567db808603c085a0596b7dd7262c695315c4c896d52ce920b702cf", + "artifacts/native-input/legacy-owned-probe-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "7fb9e8b0d8e50435ef38ed22e26ee3f5346759d3baf8b8572c16b3eb55e52d93", + "artifacts/native-input/legacy-same-length-v6/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "e760426cde7aca03b613ef27d79611e8672228dd8eeb0614cc8993db7cada71c", + "artifacts/native-input/legacy-same-length-v6/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "artifacts/native-input/legacy-same-length-v6/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "4ecb9d33473aaa9109b6925503383b2401f49c791ee289f8a55e5f1f46a1f104", + "artifacts/native-input/legacy-same-length-v6/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "b50cc91fa7b516db04168966eea66ead5920bc0298f3f877638ec8f57002f3a0", + "artifacts/native-input/legacy-strict-control-v1/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "c07695874b5cce241e04f964dbbb70f993de5410c56dfb8dd7aef999767bf8c6", + "artifacts/native-input/legacy-strict-control-v1/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-before-assertion-frame.json": "aa7e606ae58dbeec9d6f91ddb8f4332b62df31e289c200a0a4bc65a441ca10e4", + "artifacts/native-input/legacy-strict-control-v1/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-before-assertion.png": "117f3773328d34bd98a19ecaff0ed1404ea4dcafc9e27d637515b54ac84cb4a6", + "artifacts/native-input/legacy-strict-control-v1/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-before-assertion.xml": "2856a3b4387258de3cca276c54f8971ab6a7f7fca834247cd342f35e9444c8fb", + "artifacts/native-input/legacy-strict-control-v2/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "6e14784e1a26e7cb07ef1680032e947a35ad2f8a75044e3b000923e5b7d2667b", + "artifacts/native-input/legacy-strict-control-v2/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json": "a208dfc8c7111bf13cbbd0237f5826ae11254dbf9e5a7276a05258833885e6b5", + "artifacts/native-input/legacy-strict-control-v2/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png": "17f5b9dcecfa77e007e5750f89af56fd50dce8e410ed442736c17d639acdbb0a", + "artifacts/native-input/legacy-strict-control-v2/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml": "1fabcbe3d216e43ca099a354523d9bfc534c837e011e5cc6e89647ed48630282", + "artifacts/native-input/legacy-strict-control-v3/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "6e14784e1a26e7cb07ef1680032e947a35ad2f8a75044e3b000923e5b7d2667b", + "artifacts/native-input/legacy-strict-control-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json": "a208dfc8c7111bf13cbbd0237f5826ae11254dbf9e5a7276a05258833885e6b5", + "artifacts/native-input/legacy-strict-control-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png": "1f17202594d3a5be15fe28a71ce45f7293c8aafbf94793078359bbfbcc46ab1e", + "artifacts/native-input/legacy-strict-control-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml": "0143cdc0b3bc14aa75db7d74c034369eadcdf3c531361762a1da730d76714b8f", + "artifacts/native-input/modern-before-v1/captures/case-recordcallerselectionacrossnativeroutes.json": "6f74fc19a1888be46dfe1e3d78fa5a45e786ecdb513e60bd04cbb8d91f0defb3", + "artifacts/native-input/modern-before-v1/captures/case-recorddefaultimeandcontrolledcompositionnavigation.json": "596a15cc58c245a1164a4dd37a0622f43e9264ada8266a174ceb72e961c718a9", + "artifacts/native-input/modern-before-v1/captures/case-recordlargedrafttextandannotationsafterrecreation.json": "89f4e5bfba3e54499764a2528caafb3018cbd7acd892cdc82a4eca0b80030deb", + "artifacts/native-input/modern-before-v1/captures/recordcallerselectionacrossnativeroutes-note-caller-frame.json": "c2f54ae74a7d02f34242c7ba4296df14aa964308bbc866513f03ee10cdc1fcee", + "artifacts/native-input/modern-before-v1/captures/recordcallerselectionacrossnativeroutes-note-caller.png": "acc5a1ddd521a2741b4f3befc4200f192f72689b61d8921bad4c42e9beb84634", + "artifacts/native-input/modern-before-v1/captures/recordcallerselectionacrossnativeroutes-note-caller.xml": "3197caa6fccf1a2b0ad6a88c18596db5a238d248f649bfacbbdbb7eebbbfb201", + "artifacts/native-input/modern-before-v1/captures/recordcallerselectionacrossnativeroutes-note-route-frame.json": "9cc1886b91e4beb6cbb872e7f8754ca0422899b351cb32df91788b57e60f6860", + "artifacts/native-input/modern-before-v1/captures/recordcallerselectionacrossnativeroutes-note-route.png": "9666493086e962a4441dedbcca8104c8223694ba2f011a248935a3a70ff5ca01", + "artifacts/native-input/modern-before-v1/captures/recordcallerselectionacrossnativeroutes-note-route.xml": "6807f1e0e85266777841cd12cc02e345aaa90384c6166f54f77acbe26c4f15d4", + "artifacts/native-input/modern-before-v1/captures/recordcallerselectionacrossnativeroutes-updates-caller-frame.json": "082100103f93bcfbe35f8652832489d2983241e5916aafbc1beb3aaab2191114", + "artifacts/native-input/modern-before-v1/captures/recordcallerselectionacrossnativeroutes-updates-caller.png": "9b7d8f302d008e7c672eb8f3edd897c6b5fbbfbd94b9b79c924856379460dd0b", + "artifacts/native-input/modern-before-v1/captures/recordcallerselectionacrossnativeroutes-updates-caller.xml": "3197caa6fccf1a2b0ad6a88c18596db5a238d248f649bfacbbdbb7eebbbfb201", + "artifacts/native-input/modern-before-v1/captures/recordcallerselectionacrossnativeroutes-updates-route-idle-frame.json": "a07f9f3ce3e04de50feb13ef85692698d337b3e433f5b08e564ea8eeefcfc0eb", + "artifacts/native-input/modern-before-v1/captures/recordcallerselectionacrossnativeroutes-updates-route-idle.png": "a7ee58541c864e26eeabbe44a887bcfcf3dba0f53c1d431f3d15ed7b73d10dd5", + "artifacts/native-input/modern-before-v1/captures/recordcallerselectionacrossnativeroutes-updates-route-idle.xml": "dd0266de422df6173f94ba174f12e3f71ac57a3113e898873fbf7a1b55a801fb", + "artifacts/native-input/modern-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-committed-navigation-frame.json": "befca622911c412de8524ecf1cb6c145e21f58aa900e7510ff6874b1fd1b04ab", + "artifacts/native-input/modern-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-committed-navigation.png": "6f0db51357c4f01cc0b5590328948beea17816604c9ddd2746a161a5656a03bb", + "artifacts/native-input/modern-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-committed-navigation.xml": "8634c4d581b39ffc30681f87d9b29812cf5fe2f146f6efab44dba69af6fd7e0b", + "artifacts/native-input/modern-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before-frame.json": "4f68850bb0e35342dd1993bf56079ef44c6e740f6852dc17a1e44639f99cc726", + "artifacts/native-input/modern-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before.png": "c318ab012d9c63d8a0b2902aa592e3c439bdcae076895ab7aa44d291c220486b", + "artifacts/native-input/modern-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before.xml": "0b9bc86c6cb92bd2c2ca468edbdc63dee12d0a6881977335296e54ac1aa605cb", + "artifacts/native-input/modern-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-japanese-composition-frame.json": "d294ef81b8c0a4f1507d925a371ffd6777267a3f14579cbb589f074514004066", + "artifacts/native-input/modern-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-japanese-composition.png": "4e22b73bbed778ce113952799ca2a42de2a2e3aa09b5b4a80f1031d4704cb3c3", + "artifacts/native-input/modern-before-v1/captures/recorddefaultimeandcontrolledcompositionnavigation-japanese-composition.xml": "cce950ebfcae4daf8aa68e72ca6bb129d2c5125e733a502ea344cbacb5676cca", + "artifacts/native-input/modern-before-v1/captures/recordlargedrafttextandannotationsafterrecreation-large-draft-recreated-frame.json": "eefa05fee9662100ce3aadaad8ea807ea20949e48bbc7faac3680f4611b1b3ba", + "artifacts/native-input/modern-before-v1/captures/recordlargedrafttextandannotationsafterrecreation-large-draft-recreated.png": "1ff6c0c0112a7b583043e296a7acbc9c496c8e5925e865a991dc861432a17520", + "artifacts/native-input/modern-before-v1/captures/recordlargedrafttextandannotationsafterrecreation-large-draft-recreated.xml": "bb4cc14df0a87eb1d04716f083e59de400ccda2d9ec5405f71809e5b30511d50", + "artifacts/native-input/modern-before-v2/captures/case-recordcallerselectionacrossnativeroutes.json": "ad2ddf8ceae751ca4f74cb7849abe4e447d4e5a341d7ee3f082c8a747d801b37", + "artifacts/native-input/modern-before-v2/captures/case-recorddefaultimeandcontrolledcompositionnavigation.json": "bfe69cc28c48a1d0567c2cd78b4f6dcd4c029df13ddc4b50494ecfd1eb95d66a", + "artifacts/native-input/modern-before-v2/captures/case-recordinjectedtypingandcommittedquerynavigation.json": "2e0528881ee0ce0e14e614150d94cf3448cdbad4950e2176eec71a55c2df3a04", + "artifacts/native-input/modern-before-v2/captures/case-recordlargedrafttextandannotationsafterrecreation.json": "6c3b94a739bbada3f5a75f4fde0b6cea0299ed29a7bf2976165e607d86c2535e", + "artifacts/native-input/modern-before-v2/captures/case-recordsameturnlauncheractivationtextandannotations.json": "98d1b87079f0a0a8effa1acc683f7a35a36071a93346b28a3cf941852ff2bbcb", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-note-caller-frame.json": "c2f54ae74a7d02f34242c7ba4296df14aa964308bbc866513f03ee10cdc1fcee", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-note-caller.png": "7b51b97ff8f1de33a0a476f8682a50f18d318d357a1260358c28c59903c7e8c1", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-note-caller.xml": "b97f44b8375495047571d1eb78ff33f8a027585298dc8a4b667b0dfc765f8253", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-note-route-frame.json": "9cc1886b91e4beb6cbb872e7f8754ca0422899b351cb32df91788b57e60f6860", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-note-route.png": "3ae82edf455ba1434c8e64f7873e93b089966ef4278b4ac1674824450dc0af0e", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-note-route.xml": "269acfa5b148bbe1b3fb64766bad3407b4415dc3f5b4f996b244f237ac085f85", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-caller-frame.json": "082100103f93bcfbe35f8652832489d2983241e5916aafbc1beb3aaab2191114", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-caller.png": "f2ad815c8869a49e85f022213d1a3619180aca30e503db57679ff775e5fc028e", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-caller.xml": "b97f44b8375495047571d1eb78ff33f8a027585298dc8a4b667b0dfc765f8253", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-route-focused-frame.json": "ea88cb5463bdd611dc81613df7957b89d29f48912980a93199ae5fd1fbbceb4a", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-route-focused.png": "19eb3ec189224a39f5d58c77a50102656081c7198ddde45553d5375fd9ed3cad", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-route-focused.xml": "a25bedb500c264a3b7935e0824d7d6db2bac983de176c5d32a3e030a323923f6", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-route-idle-frame.json": "a07f9f3ce3e04de50feb13ef85692698d337b3e433f5b08e564ea8eeefcfc0eb", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-route-idle.png": "19eb3ec189224a39f5d58c77a50102656081c7198ddde45553d5375fd9ed3cad", + "artifacts/native-input/modern-before-v2/captures/recordcallerselectionacrossnativeroutes-updates-route-idle.xml": "a25bedb500c264a3b7935e0824d7d6db2bac983de176c5d32a3e030a323923f6", + "artifacts/native-input/modern-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-committed-navigation-frame.json": "befca622911c412de8524ecf1cb6c145e21f58aa900e7510ff6874b1fd1b04ab", + "artifacts/native-input/modern-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-committed-navigation.png": "75a81e8f27e9074786439d1da1ca301a717e6bbdc7840befd019f058a0180d55", + "artifacts/native-input/modern-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-committed-navigation.xml": "ddcfbbc705ed97d5ef3ceef6dc4e3ed0e90da286288977a46b0d4f780c5bdc7a", + "artifacts/native-input/modern-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before-frame.json": "4f68850bb0e35342dd1993bf56079ef44c6e740f6852dc17a1e44639f99cc726", + "artifacts/native-input/modern-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before.png": "40460ac3f963aaefd73d3055d3f94cca8f0b35be9013a218d66dbff56994c692", + "artifacts/native-input/modern-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-default-before.xml": "24bb84b98a6e668f7fd4333055b6027c8c0cac025aad1e1441a57eeaf327c33c", + "artifacts/native-input/modern-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-japanese-composition-frame.json": "d294ef81b8c0a4f1507d925a371ffd6777267a3f14579cbb589f074514004066", + "artifacts/native-input/modern-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-japanese-composition.png": "1cda4378216078c9ca0755c8581adaaef83bd8cbf3d80c2280e991badf5b6308", + "artifacts/native-input/modern-before-v2/captures/recorddefaultimeandcontrolledcompositionnavigation-japanese-composition.xml": "8a23cd1df82192fcd861433e25460aeb306b3b742b303af58e028badece47e80", + "artifacts/native-input/modern-before-v2/captures/recordinjectedtypingandcommittedquerynavigation-failure-frame.json": "76951a6ee3538959135a5a07a4ab142b22dfe4171d107dd0cbd88ee495435ecb", + "artifacts/native-input/modern-before-v2/captures/recordinjectedtypingandcommittedquerynavigation-failure.png": "d5b2525c592c77912d4698e8f14f7ab27353b8d29bfb0645fd73b5a05d22d2b7", + "artifacts/native-input/modern-before-v2/captures/recordinjectedtypingandcommittedquerynavigation-failure.xml": "4616079250930209a598f7872b1fd80c853fbe542da923cfdb15b161d26d5ddb", + "artifacts/native-input/modern-before-v2/captures/recordlargedrafttextandannotationsafterrecreation-large-draft-recreated-frame.json": "eefa05fee9662100ce3aadaad8ea807ea20949e48bbc7faac3680f4611b1b3ba", + "artifacts/native-input/modern-before-v2/captures/recordlargedrafttextandannotationsafterrecreation-large-draft-recreated.png": "d7497089e2e92f3b436f41046119cf7de5b3edcd17e0a7e2d7a8a2842c6acaab", + "artifacts/native-input/modern-before-v2/captures/recordlargedrafttextandannotationsafterrecreation-large-draft-recreated.xml": "f11abb007ddeedb3ccf97ea1d4ce4e3399f62899fc31519f4d49508cffbaf4e5", + "artifacts/native-input/modern-before-v2/captures/recordsameturnlauncheractivationtextandannotations-same-turn-destination-frame.json": "24b8c3d775e95a3a6670e3f89dd641d4b7a34af0f5aea1aa11de90e0c89d5312", + "artifacts/native-input/modern-before-v2/captures/recordsameturnlauncheractivationtextandannotations-same-turn-destination.png": "7e2c33475aa2c9832d160383e1cc1acba3c85bdf4710e20e0c8a38caee7f9f02", + "artifacts/native-input/modern-before-v2/captures/recordsameturnlauncheractivationtextandannotations-same-turn-destination.xml": "f39919d3f9a102e95de11fc75c6804b754c7e10bad129a9ba2cbffaa7441a941", + "artifacts/native-input/modern-contracts-v1/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "artifacts/native-input/modern-contracts-v1/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png": "eaeccf9e1f89e4c35c9973dc6be6e9df684331d7230190f7f2ad81df16a684de", + "artifacts/native-input/modern-contracts-v1/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml": "8d5df1cedd6e76f26f542c900ab853e1686d85de3a6005be7ab7edb24d234020", + "artifacts/native-input/modern-contracts-v1/captures/case-activemultilingualcompositionkeepsresultselection.json": "5feced3736271ed3ddd7b74d48086e6e1a7759149a5e49edca1123f4b64021fd", + "artifacts/native-input/modern-contracts-v1/captures/case-committedcallerselectionsurvivesidlenativeroutes.json": "fe4a1bbc681d978594694a1a7d1de1ad2f2a01f0795af2c168a03fdbce594c44", + "artifacts/native-input/modern-contracts-v1/captures/case-committedemojinavigationandcaretareexact.json": "82bb882e55d74eb8ec5565338295439fe9ff2cf2477b961a537dd429003f6021", + "artifacts/native-input/modern-contracts-v1/captures/case-committedsameturnlauncheractivationusescurrentnote.json": "b151ab6b9522152bc86e7923f1be4dd800df54708044785c260a3811265d3dc3", + "artifacts/native-input/modern-contracts-v1/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "ab11cb95c4df03d8a83658ed1bb4cc3a4cee5e8cd1bb560e55ff3be69bfb4a8a", + "artifacts/native-input/modern-contracts-v1/captures/case-largedraftrestoresexactcharactersafterrecreation.json": "c1d6a4945830eb528c1ee67a91a19d703ae10fd495e788a9175f51f96e49e9d0", + "artifacts/native-input/modern-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return-frame.json": "dda274840d17dd27ec4b666afc0b928ea20621fd56f95b6dda8a48155f6ed7e8", + "artifacts/native-input/modern-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.png": "7a3ef18ed85e0c4945ca1e373047a72c1079227ff11e6271c0a25eeb081f933c", + "artifacts/native-input/modern-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.xml": "a9245d339d639603981ce9afae6041f751e790e7546cbb19ecdff6b4cdd11f0b", + "artifacts/native-input/modern-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination-frame.json": "1b363d7e96202c3c44e48f88ed686419b062f49d2d34258a70f7863530e94083", + "artifacts/native-input/modern-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.png": "e1f3d4f4c317023442f1a0d07892a334e108fa858d8188d351c2f1b540f0325b", + "artifacts/native-input/modern-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.xml": "e6babfd66659e1d038823c07881c86cb4d8301783db569a8224ce1686103ce89", + "artifacts/native-input/modern-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "artifacts/native-input/modern-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "441530576ed7b8888a7ad3cdae0d840c71fc0a14804fa5db678f53447b09f108", + "artifacts/native-input/modern-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "c43fb0a30c8ae79f04603604d87ad9ece51da6427b53af2c621d6c84cca18454", + "artifacts/native-input/modern-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "artifacts/native-input/modern-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png": "2f59265c5d95c410da949a73b29c5d145fe278ea2dd585d146f704358d620b66", + "artifacts/native-input/modern-contracts-v1/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml": "cb736148e72842059a868c9e686d61bfb799f6b006e3c82fe2e89a102a0a2dd8", + "artifacts/native-input/modern-contracts-v1/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation-frame.json": "c89fda5acb65f03ec6fae122d1ec0270fb5d70fca467d361bdcc039cdaebc11a", + "artifacts/native-input/modern-contracts-v1/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation.png": "63765f65ce7c5f7435b5447c9799b8758a9a7d0d858f80f155f56b411be096e8", + "artifacts/native-input/modern-contracts-v1/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation.xml": "5b4603e63bd6a6a6c2ef335f1618c948f1b26f122b771764b58b9b6979c11d4e", + "artifacts/native-input/modern-contracts-v1/captures/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json": "90fb582ae52bd82daa7dc747e0bd4cf17c64024807d8ef632f303464e1f2fade", + "artifacts/native-input/modern-contracts-v1/captures/committedemojinavigationandcaretareexact-committed-query-selected-range.png": "44dd2815ece16df9b15ea574ed55dc6d5db29f7f88d0ed9db279aec21c850789", + "artifacts/native-input/modern-contracts-v1/captures/committedemojinavigationandcaretareexact-committed-query-selected-range.xml": "34433676a99c170596d33f925cdd18dd1a3bb513d0b31d9316a5285fa58fa9bf", + "artifacts/native-input/modern-contracts-v1/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note-frame.json": "a0b766aa6e15b5dd964b3597047d36abb1e5d87cc5ca8fccc4a96907f6567ee0", + "artifacts/native-input/modern-contracts-v1/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.png": "860ff9426582131d148dc5af86b4978744f01991cd78bb5c40cfde8dccf00b12", + "artifacts/native-input/modern-contracts-v1/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.xml": "513ae699d66e4290721a9bddfe6d7a721f82263eb409f59245d68c85d2c31c96", + "artifacts/native-input/modern-contracts-v1/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-before-assertion-frame.json": "aa7e606ae58dbeec9d6f91ddb8f4332b62df31e289c200a0a4bc65a441ca10e4", + "artifacts/native-input/modern-contracts-v1/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-before-assertion.png": "a077e10af164f536946507058606280c9694988df02c67475ed0c6755f241466", + "artifacts/native-input/modern-contracts-v1/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-before-assertion.xml": "cf826996f0e4eca4341ba7b6dc5da0d49db5b94d819eaf321870b504f3327e45", + "artifacts/native-input/modern-contracts-v1/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json": "e7ad5338a6a0b194e5e018a964525f0622c46f4255115f26ac95af3c5112fa2b", + "artifacts/native-input/modern-contracts-v1/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png": "c5187f31814ea7a1d1c3571d753a4a5429efe10de95a334b42fac53736ceb28f", + "artifacts/native-input/modern-contracts-v1/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml": "732e14f9abcdd4cc801e52c3158b26002fdf20c14872a78d796e1715ee2616f9", + "artifacts/native-input/modern-contracts-v2/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "artifacts/native-input/modern-contracts-v2/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png": "032fdaf5232ae1a9262a74304db71d6771d4b33f7af6db1f627f3233375e9888", + "artifacts/native-input/modern-contracts-v2/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml": "6dc3fb715a8f90a6f76c08e0e0616581c5d9e4ff860e300e2879706e4b9f236d", + "artifacts/native-input/modern-contracts-v2/captures/case-activemultilingualcompositionkeepsresultselection.json": "7620ac420a2e7d1d136d256062e24079fbef2c3aded53517c6c9d3e09be39498", + "artifacts/native-input/modern-contracts-v2/captures/case-committedcallerselectionsurvivesidlenativeroutes.json": "72056adb988b6dd6b3ae332e9a20ddb2bf38dead9eaebad78dbfee665a5767bd", + "artifacts/native-input/modern-contracts-v2/captures/case-committedsameturnlauncheractivationusescurrentnote.json": "7f40c6fd5f1b174023483915c71d97fa212ce6e01841476de266c66b102af0f6", + "artifacts/native-input/modern-contracts-v2/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "7f0b4660306aef14eff252940e9dd73ce1991d1b317dfcff9394cf2d3825db68", + "artifacts/native-input/modern-contracts-v2/captures/case-largedraftrestoresexactcharactersafterrecreation.json": "bbc9ff6319ec832760064aab0f23cb0c9827a83014f2a68e7641dc96b87deb61", + "artifacts/native-input/modern-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return-frame.json": "dda274840d17dd27ec4b666afc0b928ea20621fd56f95b6dda8a48155f6ed7e8", + "artifacts/native-input/modern-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.png": "da1b50e90790d469f34788b193014da414d87282c530fb5c85f64c5aef5aec11", + "artifacts/native-input/modern-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.xml": "e3c216681b78d49a1a64a3672d82ef198ae19a77e182b97b913f500c33f3b76a", + "artifacts/native-input/modern-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination-frame.json": "1b363d7e96202c3c44e48f88ed686419b062f49d2d34258a70f7863530e94083", + "artifacts/native-input/modern-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.png": "216120865b38fd8fbe8e7aba27b8ff8871b92cb6a01cd180c43a04e57ff3d00b", + "artifacts/native-input/modern-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.xml": "ecfaee3c1db740c7d1b74dfa19d14636ec31b7145d9062597f79a647a93b670e", + "artifacts/native-input/modern-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "artifacts/native-input/modern-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "c425474ed4ee0edf216681773b505de7c4cfc438d87cbf26b319a2cb96394a48", + "artifacts/native-input/modern-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "9c21ec01b3d8c9e11bb306374d3ca8a00b3659e3e87bee78a67c75159ad9a5f5", + "artifacts/native-input/modern-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "artifacts/native-input/modern-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png": "33564ddb3e38f2ab661e490c18df4ed22a67e00ec56e26e805a9f506fa9624ea", + "artifacts/native-input/modern-contracts-v2/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml": "695629c452792448bb3caa57665846de1af5acd6f5e6327a408d9b1baa10f9a0", + "artifacts/native-input/modern-contracts-v2/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note-frame.json": "a0b766aa6e15b5dd964b3597047d36abb1e5d87cc5ca8fccc4a96907f6567ee0", + "artifacts/native-input/modern-contracts-v2/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.png": "d944caf43a8e343f9b1a4d99b56768704d3bfde0e1446baf3bd451253f66b743", + "artifacts/native-input/modern-contracts-v2/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.xml": "1beae093ec3802e096ce481904b52b14fe3bf91cf4cca0c794e64f96783229ce", + "artifacts/native-input/modern-contracts-v2/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "artifacts/native-input/modern-contracts-v2/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "d80e8d7f0ef7004b9729edfbc4fe9da7679f8acf94c9f832e52c375b1104fa4b", + "artifacts/native-input/modern-contracts-v2/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "473b67ac10fc03bce6d466aebc233ae5ff6a74d046998ce10eb04e06d48194d8", + "artifacts/native-input/modern-contracts-v2/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json": "e7ad5338a6a0b194e5e018a964525f0622c46f4255115f26ac95af3c5112fa2b", + "artifacts/native-input/modern-contracts-v2/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png": "1dc733753e86ad96185e52ee17be971656b6a69a406cf10ec04ab3bf9f5e0a63", + "artifacts/native-input/modern-contracts-v2/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml": "ced31f80a92ac04b6f729654f3da9909f1a5414c8b9b0c3b6b648c6886016eb7", + "artifacts/native-input/modern-owned-full-v4/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "artifacts/native-input/modern-owned-full-v4/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png": "b5c8bea7c81fab99bae4242a0d45bbbd14f1e2336641303a736da819d5919be6", + "artifacts/native-input/modern-owned-full-v4/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml": "a3044fc59eea1be3c62b7b4e3457fd7518836ad1d85a7f41f96e180dbeaa8dfd", + "artifacts/native-input/modern-owned-full-v4/captures/case-activemultilingualcompositionkeepsresultselection.json": "be862baabc8679c538599479f967c983ce92c84872100407942d503569e52878", + "artifacts/native-input/modern-owned-full-v4/captures/case-committedcallerselectionsurvivesidlenativeroutes.json": "80fae1dc1fca1a6e0cad251223935dadfdba4c1b9b3d607e6953d89c01da7790", + "artifacts/native-input/modern-owned-full-v4/captures/case-committedemojinavigationandcaretareexact.json": "fae04b6afea1fe19fe592b27ceaa52ccb5c2c71f48fc1eabaae80a77d0ab6c38", + "artifacts/native-input/modern-owned-full-v4/captures/case-committedsameturnlauncheractivationusescurrentnote.json": "8ea15bb21f854bc7da47f3d7194f3ddb23c862c7ff2a12fabafcfb2108a2dfa5", + "artifacts/native-input/modern-owned-full-v4/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "aae445c4db6286cc424b2597246516af2e63f358377cd19bd8279ac0b08df06c", + "artifacts/native-input/modern-owned-full-v4/captures/case-largedraftrestoresexactcharactersafterrecreation.json": "c6a0243c91738995582897752ebe433ba6bb66a619fd2cfafc4dddf0ef3dc9f7", + "artifacts/native-input/modern-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return-frame.json": "dda274840d17dd27ec4b666afc0b928ea20621fd56f95b6dda8a48155f6ed7e8", + "artifacts/native-input/modern-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.png": "849c018582be22e8593d7732a0bb58fa5e9fd941578a9e0acfa7478395c1c0d8", + "artifacts/native-input/modern-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.xml": "6f4c9b70c20af8303e7b3624a43f0edd2002118e107cba46d0d7c2dcec77fab3", + "artifacts/native-input/modern-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination-frame.json": "1b363d7e96202c3c44e48f88ed686419b062f49d2d34258a70f7863530e94083", + "artifacts/native-input/modern-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.png": "89765911f69ed1f8d157560c0d7ea087b8e285f0268463f5348e87265f049886", + "artifacts/native-input/modern-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.xml": "91bb8052422110ac2ed400b28a02f33abd2dbcfc2d71b7854f6eb76d18e2df57", + "artifacts/native-input/modern-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "artifacts/native-input/modern-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "d57c9cebc7ae54c79d1fe5d7d799334f181419a3122cbae49beac29367f6e504", + "artifacts/native-input/modern-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "fcae24d7276703574a8a930a3c58d23bdd7023b63f306c7fb5c8de8496acdb42", + "artifacts/native-input/modern-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "artifacts/native-input/modern-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png": "d2d3214958f5491ad36f5a9d68025d395541d1cf87094316d85c07ffd7a7b263", + "artifacts/native-input/modern-owned-full-v4/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml": "e019f9d3e4cef292e5e2d3f711429a5a36d33ec40ace94aa7642f300fe511b9e", + "artifacts/native-input/modern-owned-full-v4/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation-frame.json": "c89fda5acb65f03ec6fae122d1ec0270fb5d70fca467d361bdcc039cdaebc11a", + "artifacts/native-input/modern-owned-full-v4/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation.png": "69ab49a3485cd3156042b20ac76eeaff0dc297b46ad7e08643a7bd89dff4e1ec", + "artifacts/native-input/modern-owned-full-v4/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation.xml": "5a866b671979bc0ccada0eb05faeded72e1905fc9a837db9e1272277f1a4140d", + "artifacts/native-input/modern-owned-full-v4/captures/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json": "90fb582ae52bd82daa7dc747e0bd4cf17c64024807d8ef632f303464e1f2fade", + "artifacts/native-input/modern-owned-full-v4/captures/committedemojinavigationandcaretareexact-committed-query-selected-range.png": "18f91847243f91c56a413b0f662e8d6232346556cfcad0259f5475ef2eb091ed", + "artifacts/native-input/modern-owned-full-v4/captures/committedemojinavigationandcaretareexact-committed-query-selected-range.xml": "813d4de287f68214eb6832ad15f1a9c5cb709230420c6176e865bf7f0f125265", + "artifacts/native-input/modern-owned-full-v4/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note-frame.json": "a0b766aa6e15b5dd964b3597047d36abb1e5d87cc5ca8fccc4a96907f6567ee0", + "artifacts/native-input/modern-owned-full-v4/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.png": "40aee42f8ca42b061c3f3fb164a5c6af713823518939affd9abf1909b57f5e7a", + "artifacts/native-input/modern-owned-full-v4/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.xml": "72294adbdc7f83c4c87e6d121eb7363c3feb0d36c34509074e0423a166ab4e60", + "artifacts/native-input/modern-owned-full-v4/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "artifacts/native-input/modern-owned-full-v4/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "d17af0025e2346790812cd8a28e75b7e7a36a5a550ff63f39506ea328e72e351", + "artifacts/native-input/modern-owned-full-v4/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "5115871427294c4147d1b9ccd878928e9e447165445ade6ed3c300973b749743", + "artifacts/native-input/modern-owned-full-v4/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json": "e7ad5338a6a0b194e5e018a964525f0622c46f4255115f26ac95af3c5112fa2b", + "artifacts/native-input/modern-owned-full-v4/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png": "ac9e78273eb0baafcec11b2431ba0545e5468503992120cb12c84224c94c610a", + "artifacts/native-input/modern-owned-full-v4/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml": "62fcbf1ddd93c073f0adf72555f8c98e04555d47d9ae824dc01b88865d019440", + "artifacts/native-input/modern-owned-full-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "artifacts/native-input/modern-owned-full-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png": "04186041525ce27546a614a01d5712c119e64af02e60a5b9011f622b85b6eb0a", + "artifacts/native-input/modern-owned-full-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml": "a948b2358beb18bcee328b68c14e091f572c64363ebfab83f990eee07a703d41", + "artifacts/native-input/modern-owned-full-v5/captures/case-activemultilingualcompositionkeepsresultselection.json": "e7a117ff17652aeb1a72289d591cc710eb30a05ac5e56dc20f8df0839c6e5332", + "artifacts/native-input/modern-owned-full-v5/captures/case-committedcallerselectionsurvivesidlenativeroutes.json": "b9749fcbfb1afadb9d4f68f9649adce7e7d76cdf71f160bd0f5cdb9f4051298a", + "artifacts/native-input/modern-owned-full-v5/captures/case-committedemojinavigationandcaretareexact.json": "6434e7b1b8617d2708d1b9133143ad96d251a9f758fdfd74463ab8a3bc9fed76", + "artifacts/native-input/modern-owned-full-v5/captures/case-committedsameturnlauncheractivationusescurrentnote.json": "b913069361653ed55c9bc3ad46fe32c6adaf53d4ac39c28098531c3c9b566b89", + "artifacts/native-input/modern-owned-full-v5/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "c3b9097904aef3b73db70bdc00cca9b0ed87d9b0a87d475d211ccafb0fc21024", + "artifacts/native-input/modern-owned-full-v5/captures/case-largedraftrestoresexactcharactersafterrecreation.json": "41a382929afa76f93ce47de96b20556be69a28b59b8980780c62d7dcc8d5524f", + "artifacts/native-input/modern-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return-frame.json": "dda274840d17dd27ec4b666afc0b928ea20621fd56f95b6dda8a48155f6ed7e8", + "artifacts/native-input/modern-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.png": "ed2b4e8f85f776396a0032b775f0564f0ee6f70a9492acc5e0faaffcd30a64b7", + "artifacts/native-input/modern-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.xml": "f9f81eeff298112ccdbbebff6f48a77ba24e16a64e61266c0a974e1c44aa89d8", + "artifacts/native-input/modern-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination-frame.json": "1b363d7e96202c3c44e48f88ed686419b062f49d2d34258a70f7863530e94083", + "artifacts/native-input/modern-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.png": "5e4b37d84ff6b3d3d52b50592d58bbcb8df7ed6e6ffb2c71a788c17789cc0d85", + "artifacts/native-input/modern-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.xml": "2f3e01db1cb412fb4efb8a46cc99154045e75cc4bbd3da6a6461fc01cd6bcf17", + "artifacts/native-input/modern-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "artifacts/native-input/modern-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "7a11fc3ba67db6be2739b9aa21cef5c832b3c7d8dac99f81f10ce17f31f78a2a", + "artifacts/native-input/modern-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "f9f81eeff298112ccdbbebff6f48a77ba24e16a64e61266c0a974e1c44aa89d8", + "artifacts/native-input/modern-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "artifacts/native-input/modern-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png": "f01084674dd7471cd5e1e19218ee3c9a31468137eac879477e09f6bd40f4b863", + "artifacts/native-input/modern-owned-full-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml": "e5b071b1910778c2e5a7326c280cfae96d8f84e54d35dc28827f1dd8faab71dd", + "artifacts/native-input/modern-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation-frame.json": "c89fda5acb65f03ec6fae122d1ec0270fb5d70fca467d361bdcc039cdaebc11a", + "artifacts/native-input/modern-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation.png": "e0d9ce9241f1dc21604b8f8373c576accf24f2bdd779795c070aba9a8d9aadad", + "artifacts/native-input/modern-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-four-way-navigation.xml": "406e1b9b9de983f355af9f12c47b1b0df02745aa4dea38176290bc2a1dc129ac", + "artifacts/native-input/modern-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json": "90fb582ae52bd82daa7dc747e0bd4cf17c64024807d8ef632f303464e1f2fade", + "artifacts/native-input/modern-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-query-selected-range.png": "18b74da7526c2b4f0932f69f71208ee95381cf6504daf217a9684e10247a978d", + "artifacts/native-input/modern-owned-full-v5/captures/committedemojinavigationandcaretareexact-committed-query-selected-range.xml": "fe675fb5eae40d15f6117e5ae7e2549ce673f0dcbd4043713495757d3ff198aa", + "artifacts/native-input/modern-owned-full-v5/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note-frame.json": "a0b766aa6e15b5dd964b3597047d36abb1e5d87cc5ca8fccc4a96907f6567ee0", + "artifacts/native-input/modern-owned-full-v5/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.png": "20e65067b84832e5ec9621f4a737fc0063a6c3940c53a16817489ae745723bb2", + "artifacts/native-input/modern-owned-full-v5/captures/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.xml": "725d43531aa943aa9883d606cbdbc13dcdbceaa17fc1a2dbcdb32bcda1ef7bff", + "artifacts/native-input/modern-owned-full-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "artifacts/native-input/modern-owned-full-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "c66c2c31c22aa162459f55fd72269a31bcf88a5de063f2ff4fa2f7db1661c2cc", + "artifacts/native-input/modern-owned-full-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "63aaab0d980517bd38d354d73e2d2f3dda8c5771f622ebf4b799f880fd62d579", + "artifacts/native-input/modern-owned-full-v5/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json": "e7ad5338a6a0b194e5e018a964525f0622c46f4255115f26ac95af3c5112fa2b", + "artifacts/native-input/modern-owned-full-v5/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png": "a9e4881d69898e14a76bddabab1284c842b5a1896d6ea7e15fd67e234d2fdb38", + "artifacts/native-input/modern-owned-full-v5/captures/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml": "46631a1072a6929a6249325904392f1e90c94e49063a92ae019475a9b2afa5c8", + "artifacts/native-input/modern-owned-landscape200-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "artifacts/native-input/modern-owned-landscape200-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png": "c8746b73f6a88ffd82cb04a52f8ce6ccb08b22bafc1e21a3942fbf798a448278", + "artifacts/native-input/modern-owned-landscape200-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml": "2ea6e5e46ca10d9d354b241caac83a896aa8a8f5855dc1e22c3b6480894c3893", + "artifacts/native-input/modern-owned-landscape200-v5/captures/case-activemultilingualcompositionkeepsresultselection.json": "b7bea71a6cfd4d6e9869f3686a23ae7533e7bfb275b082e1e7d7fc97e40bea1e", + "artifacts/native-input/modern-owned-landscape200-v5/captures/case-committedcallerselectionsurvivesidlenativeroutes.json": "64e035a3c15ce1808eee11e101b6ac59e2d2c930af3be8f0343b96666909688c", + "artifacts/native-input/modern-owned-landscape200-v5/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "09af8daee9cc5dd2804fa83a9149eb3f1382e8026ca54a9ec12ddb81ebd1f2c5", + "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return-frame.json": "dda274840d17dd27ec4b666afc0b928ea20621fd56f95b6dda8a48155f6ed7e8", + "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.png": "d94b574c8e358492f73f04fb85efe7f4378b2763c6d5c25ccd139e97bbf84681", + "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.xml": "a969762b14269602a40331d5768605057fa15a2e8425e84dc1f241777ee57c9b", + "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination-frame.json": "1b363d7e96202c3c44e48f88ed686419b062f49d2d34258a70f7863530e94083", + "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.png": "c514417a3c0826eb664cca9208ac40d57a179c301fcf9460fbf6105872598126", + "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.xml": "f3d0ab578642d9ed21e88e2de77a890afc05ff19a932b1d26888b182542457da", + "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "2f5ba4758138369d5e81292b65880b29b8f51ad38f7af839533e41a28ba095ad", + "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "a450adf1ff9f7737e53b1787a75d7a3307b79691d4fdacbb0d9233ce1ba685dd", + "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png": "a7b872a7c0f5954c04752a29ec8c9d6d536342ed7e5ece334cd5771e0405748d", + "artifacts/native-input/modern-owned-landscape200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml": "237bb5af957f5cfa62ad54ec10489ff260b8aac28ac21e4762e9b17deedb18ea", + "artifacts/native-input/modern-owned-landscape200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "artifacts/native-input/modern-owned-landscape200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "4b4b104e7274510a10c3dcd69bca2655de6f18f0d255e496d51a752285268268", + "artifacts/native-input/modern-owned-landscape200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "e66b1d175c0d523f7acd8e9fe68f0d3833a18235c1c29f975d33f5920be1800c", + "artifacts/native-input/modern-owned-phone200-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "artifacts/native-input/modern-owned-phone200-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png": "b9340b4568e07657828bc881405cf1b932630fc7111e15f883bb683b77f680d2", + "artifacts/native-input/modern-owned-phone200-v5/captures/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml": "86e1fee196ae2424854ec4feaa136ef220517756c0eaef47debe4f67cc71250a", + "artifacts/native-input/modern-owned-phone200-v5/captures/case-activemultilingualcompositionkeepsresultselection.json": "fb1f74f45d64e7cabe51904f3229c9506209f6af5e0b67204d567fb631ac1427", + "artifacts/native-input/modern-owned-phone200-v5/captures/case-committedcallerselectionsurvivesidlenativeroutes.json": "7a7f2be8667121f3a0785975322b74b8a485602e01c790d5189a277fe6d68956", + "artifacts/native-input/modern-owned-phone200-v5/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "a9516144b074ff5e3a1dc3d0d23794e790bf20db7bc1df7d0ffe8f475df36f87", + "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return-frame.json": "dda274840d17dd27ec4b666afc0b928ea20621fd56f95b6dda8a48155f6ed7e8", + "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.png": "a90fa38ad0d5a40637d529cf08ef0b2c5a0ecff8b672fa94d04de3810c03d1b3", + "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-caller-return.xml": "031a612dbb5f16674f87be8c03d1586055cdf7c01c195bb97e5c201030657ddc", + "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination-frame.json": "1b363d7e96202c3c44e48f88ed686419b062f49d2d34258a70f7863530e94083", + "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.png": "1c23a446adb504b45b632189d29ffe3b7c4aa30b0ffcbfed332f0eaa065391a1", + "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-note-destination.xml": "715a4a99a3e7264e88386b946ce85b8d11f110185648d7944155b4f25044417a", + "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "a90fa38ad0d5a40637d529cf08ef0b2c5a0ecff8b672fa94d04de3810c03d1b3", + "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "031a612dbb5f16674f87be8c03d1586055cdf7c01c195bb97e5c201030657ddc", + "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png": "474939abd40505ce7efc468adc34f1d90145de734681065a89230b7287fdb29b", + "artifacts/native-input/modern-owned-phone200-v5/captures/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml": "4251feb8042153d619e03baa3e7e109af795255b6ac59f97c21fdfc6e60ec91c", + "artifacts/native-input/modern-owned-phone200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "artifacts/native-input/modern-owned-phone200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "12306fdcf26614240466281b83da762c3e4dc12a60ad57a9600be2c55fcea7ae", + "artifacts/native-input/modern-owned-phone200-v5/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "57493905327139f0212f6e7b024020367fe73291db99d8eb89e866e3419d2d6d", + "artifacts/native-input/modern-owned-probe-v3/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "05e568499c54532f4f48344778c16a1dbec70f00a92388308f8b6abaa48278fb", + "artifacts/native-input/modern-owned-probe-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "artifacts/native-input/modern-owned-probe-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "0dc375a2d289922fcda317a74fc94e3c4e66b75c0057af3461bbbeee75f322a0", + "artifacts/native-input/modern-owned-probe-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "b3c49bf7514aa137c456e270f475b94b4664cf15bc8eb8b6f3ac7592b070e1d4", + "artifacts/native-input/modern-same-length-v6/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "d97dd268b10ed0d46c8d3d3aaf59b80ef31de184759b83748a55025eaf29b112", + "artifacts/native-input/modern-same-length-v6/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "artifacts/native-input/modern-same-length-v6/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "75fce55f28a1709e892e48d799a56208e3bbcd5b0e70e2e071d1787a4e7510b6", + "artifacts/native-input/modern-same-length-v6/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "5868971622788be375d9fe942aae7e69cd1b7c98757fa2fe0d1345e866988f4b", + "artifacts/native-input/modern-strict-control-v1/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "37f580a1beda7134d984c079f19d96042fdb861b41e27449d4f57274f95876ad", + "artifacts/native-input/modern-strict-control-v1/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-before-assertion-frame.json": "aa7e606ae58dbeec9d6f91ddb8f4332b62df31e289c200a0a4bc65a441ca10e4", + "artifacts/native-input/modern-strict-control-v1/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-before-assertion.png": "0ec567e20e9288be32493d9b44859b4a35005626ef17b76231d8846ee488733a", + "artifacts/native-input/modern-strict-control-v1/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-before-assertion.xml": "400d62d6062ab0ec64ad1e8b07cae8abb0a1cd6eaa85c36af5ce26ce9e6efe38", + "artifacts/native-input/modern-strict-control-v2/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "7a6c5e74b9c84dd5d1ecc2de70c5d86fe3c5c88e22332746de88350fa91e5f94", + "artifacts/native-input/modern-strict-control-v2/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json": "a208dfc8c7111bf13cbbd0237f5826ae11254dbf9e5a7276a05258833885e6b5", + "artifacts/native-input/modern-strict-control-v2/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png": "2d377a0a477897708b31ee61a127fa593766d65ece2fb43d7499ed8e7d1de135", + "artifacts/native-input/modern-strict-control-v2/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml": "edae49358dda23850b6d8207f847d2748dd8be5187daea5b27ab5da5bbb07217", + "artifacts/native-input/modern-strict-control-v3/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "7a6c5e74b9c84dd5d1ecc2de70c5d86fe3c5c88e22332746de88350fa91e5f94", + "artifacts/native-input/modern-strict-control-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json": "a208dfc8c7111bf13cbbd0237f5826ae11254dbf9e5a7276a05258833885e6b5", + "artifacts/native-input/modern-strict-control-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png": "f22a3d05aa35a1b37086a552184d49bb9c52a8e8e8a958f54278e1865bfbe299", + "artifacts/native-input/modern-strict-control-v3/captures/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml": "17a24d302a48b252bd1e76a4b23341ee106ebe3fb33a08ea97f29ced646102a2" +} diff --git a/docs/validation/native-input/checkpoint.json b/docs/validation/native-input/checkpoint.json new file mode 100644 index 00000000..27c2d542 --- /dev/null +++ b/docs/validation/native-input/checkpoint.json @@ -0,0 +1,311 @@ +{ + "scope": "Exact character assertions and explicitly controlled native-input fixtures; system-IME/original API26 gaps remain open", + "source_head": "c8dbbe026761a279abc1ac33aaf4605a4e245a43", + "positive_executions": 23, + "positive_cohorts": 7, + "intended_negatives": 2, + "current_restoration_checks": 137, + "all_retained_executions": 84, + "all_retained_passes": 73, + "all_retained_failures": 11, + "capture_hashes": 525, + "published_frames": 21, + "public_files": { + "docs/validation/native-input/bindings.json": "ac3e67082ccc347c381e5692116879a8615174951a1fdd95109c8e5de96a51e3", + "docs/validation/native-input/capture-original-hashes.json": "733227632f442a637866d4500d599a91628be2b73eef54ab43f011fab6e2cd59", + "docs/validation/native-input/calibration.json": "889a58d5a092a3e037b5dbf4695552e3fe39e6cabad060c16252477b62d2865f", + "docs/validation/native-input/profiles.json": "e75a71e1365b5a69322a6c96d2624a5e259517ef67d956b7149ead17819a775e", + "docs/validation/native-input/cohorts.json": "a0ae1bfadd0a4b92ba8ea0f4a35cb0b062606c5548c1f0904491a4eeb67c3488", + "docs/validation/native-input/strict-calibration-v1.json": "76ca9739e426a97707b868b5de9bd754bcb49f5ed5b70f065547fe5a99b0673d", + "docs/validation/native-input/post-probe-ime-history-cleanup.json": "0b7930a01c95b370ee3bfcb50b511ac7e92b7f30bc2db0ea5c30c1d5a71644d3", + "docs/validation/native-input/frames.json": "bc7f67fb019c137fc992db10f7724e37d367c1cc6113a8ead1c472a341395ec4", + "docs/validation/native-input/final-preservation.json": "eecbe30fe7cff5854ac30c5f94195836575dd4ac8caaf27fff64ea5324c116b3", + "docs/validation/native-input/control-source-reference-clarification.json": "67279795f2c832ad1592f0d3aad818622d15ad456195bb2046de1783a1844109", + "docs/validation/native-input/projections.json": "525a0b5018447b1ce743116627e3246c2d73703bb2d39592a56c6b6225914f64", + "docs/validation/native-input/collectors/recover-modern-control-v2.py": "944f7cccfeb4444be629add3255defac6a0e08ab9646dcd1b80afebba886a143", + "docs/validation/native-input/collectors/publish-validation.py": "92344df9b2af30a44013f90cdbbcb733cc5f110e05e92190590804cb4a5de5c7", + "docs/validation/native-input/collectors/verify-final-preservation.py": "0e39cfb75a7ef5ec5f06326833376a1f2a4cebc3066393ecfcd86494e4c60675", + "docs/validation/native-input/collectors/test-webview-engine.py": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "docs/validation/native-input/checks/python-optimized-final-v4.log": "e0140fed9d5e7687bb50b031ba80f4e081e645759f37a08a8fa7b5af4676857c", + "docs/validation/native-input/checks/python-final-v2.log": "52ef40e4da616373407b9b2ae72b584a8a126b04f892ffb94cd72f480af812aa", + "docs/validation/native-input/checks/final-build-checks-v1.log": "7fa0621a8824fa96ce578488c95cdf529f04cd8c4b50291af10f929e20e2212d", + "docs/validation/native-input/checks/lint-results-benchmark.xml": "1beb4077ae2dbb1852acab60801c1d7a06f2f346f32ff56f5246bbb9148d672c", + "docs/validation/native-input/checks/final-build-checks-v2.log": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "docs/validation/native-input/checks/final-build-checks-v3.log": "57ec2fafb3a607697fe98e6e96ab241f5bab0108fbd7fbd7b02fba8770fe9dce", + "docs/validation/native-input/checks/python-optimized-final-v2.log": "284eda9b95a30be71f0e011950130e3b687bc1f54e5ff582eb465b2179e3a7e9", + "docs/validation/native-input/checks/python-final-v4.log": "ef65977950cd18b6294f68569afa1bdaa4c7363ee4f3a32ec0b8fc3421bf4f58", + "docs/validation/native-input/checks/contracts-harness-build-v1.log": "1b50c90be1886b23f6b17dc4bada58a2ccb9ad5dc612d9c8f48a766bc1cddebf", + "docs/validation/native-input/checks/owned-v3-debug-assembly-prefix.log": "96efe1b67e1d44e1d07294d1e79cf29bea34551423b72af773de02c733c02a82", + "docs/validation/native-input/checks/contracts-harness-build-v2.log": "c5d227e9b2c53afdc527b0591a20b2e0be128c62bd9f5b837e921b99a95cf1e1", + "docs/validation/native-input/checks/strict-control-v1-build.log": "598feb7b68210ac06d5af9f27b1a11962f7f8bdc1ac7325ff1e277ed585fd483", + "docs/validation/native-input/checks/same-length-debug-build-v1.log": "8e38e387da425b21f152fc5ce5b2c5a10538312b2ef2edc5992e4872af44d777", + "docs/validation/native-input/checks/final-owned-build-v1.log": "116973da72fa77036bd51da63f054fea12d423a1b8be476d662f8fd95e161afc", + "docs/validation/native-input/checks/same-length-benchmark-build-v1.log": "3b4479466ff75c5e04ebd0a07bfc7c7fea7f795f6f003070be1ae8a7fbbf84a8", + "docs/validation/native-input/checks/strict-control-v2-build.log": "a016de39a25721f921bca868fd7204642e11661c337aebd467bf00be40ef40a7", + "docs/validation/native-input/checks/python-v1.log": "4b19c202bf575fc88ea9a761dcbab0bf71708d8b383716c31d06797d1f14a58e", + "docs/validation/native-input/checks/lint-results-debug.xml": "1beb4077ae2dbb1852acab60801c1d7a06f2f346f32ff56f5246bbb9148d672c", + "docs/validation/native-input/checks/diagnostic-harness-build-v3.log": "c5d227e9b2c53afdc527b0591a20b2e0be128c62bd9f5b837e921b99a95cf1e1", + "docs/validation/native-input/checks/final-v2-debug-assembly-prefix.log": "b982c061939d162860dea3e84526d697b4c3384003e629d798fe10f7e15af176", + "docs/validation/native-input/checks/diagnostic-harness-build-v2.log": "2a93dceff3af66c38cac18fdfab761cb30eb6f39440d5f93f4c706b09ea1f050", + "docs/validation/native-input/checks/python-optimized-v1.log": "3eb8a69b003e01fdf5d5ab1a58f4f9a0886c311cbb8cf4be98b4d400f79b8e47", + "docs/validation/native-input/checks/final-benchmark-build-v2.log": "373b2de29efbda036c0ac9976a126e6258a01f3a7a5e46e151e0d38c994f8a14", + "docs/validation/native-input/checks/diagnostic-harness-build-v1.log": "4daf49c3edeba45c93ce894f6013049097057690351086b084beb4689a1f4864", + "docs/validation/native-input/binary-metadata/summary.json": "357025fcab1dc80b0dcf73ac053ca4f2f1e83530a39a0b012bdc0ef24e9d1c46", + "docs/validation/native-input/binary-metadata/candidate-test-manifest.xml": "b467cd75f67ae0336c000708f82d24b5be57bd28f9add3fe3dfedad05d51da7a", + "docs/validation/native-input/binary-metadata/strict-test-manifest.xml": "b467cd75f67ae0336c000708f82d24b5be57bd28f9add3fe3dfedad05d51da7a", + "docs/validation/native-input/binary-metadata/app-manifest.xml": "bef57566a61bac45a02f12c1f2233cd578a3ad2d87346a92f1020f4a564f62fb", + "docs/validation/native-input/dependencies/source.json": "9c15f00364640374dfae3605f1e79c99a418044c36834667b5438914e61d8a78", + "docs/validation/native-input/dependencies/api26-ime-source.json": "fbdbf76cf1a6f5dbf530c6a32ce56585185dff6488e2a7b08a4161cad74b9c03", + "docs/validation/native-input/history/modern-control-recovery.json": "22855df8b4b4bccd44a3cb00ec057bbce5c7d2deb80ae843f312bc251f2c633f", + "docs/validation/native-input/identities/strict-control-v3-helper.kt": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "docs/validation/native-input/identities/strict-control-v3.json": "c5bd80606fe9e1383da1a113c0a00f2e432c9c124f80afd48947c4434479049a", + "docs/validation/native-input/identities/strict-control-v2-helper.kt": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "docs/validation/native-input/identities/before-v2.json": "f0d26163ebce291664991dbace22234958ae2a84bfdf2eacf872ee30b1fd3fbb", + "docs/validation/native-input/identities/final-v2.json": "cacf6a6dd2dff7acf0b5ec29aebcc8b7eb539e10857e3324c39f4d2cb32ac437", + "docs/validation/native-input/identities/strict-control-v2.json": "484b60fdae5a86e4cb4b8c5cacc9dc87c3c066530f03f1c52a17be9d80915a0f", + "docs/validation/native-input/identities/same-length-v6.json": "2be292a702b226c11c8aed8f8a1f70cb8cd1606a47af71d3d915beb63da3077f", + "docs/validation/native-input/identities/before-v1.json": "e18d6d2e97eb01fb91738aa73b79319bc52de3168dba15c04991967e8796fe9a", + "docs/validation/native-input/identities/strict-control-v1-helper.kt": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "docs/validation/native-input/identities/strict-control-v1.json": "4e5f0c547a5064b6a216a35796c5312de2dbf42ac242f8a32c0c8cd89e37dd6b", + "docs/validation/native-input/identities/owned-v3.json": "76396abb075ae837718e92045cd9540acebba339c96797f0319d9ed521baa47a", + "docs/validation/native-input/identities/owned-v4.json": "662f0c70fd772d26c61de08264cedd99cedfa6025cad2818a3ce3809578c0b1e", + "docs/validation/native-input/identities/owned-v5.json": "1b5e5dab8e4732d10086ef6c349648683e73545db78bb16af6a4e73c2eae2a22", + "docs/validation/native-input/identities/contracts-v1.json": "1dd77638255b32093f3f01974b72facee05228dd6bea770876ae30f7c03145cc", + "docs/validation/native-input/cohorts/legacy-before-v2/record.json": "04e75bd6f2a95fcb0f14ed713cdc533425f0cdbfbc25883fe0b00f0acbce4ca3", + "docs/validation/native-input/cohorts/legacy-before-v2/tests.log": "6b9181513ed7782cbb880d15780c1c6e10f46c70ba81205d4bc8cc5856090138", + "docs/validation/native-input/cohorts/legacy-contracts-v2/record.json": "f8e89735d515a8a6c7cd613d1fe3e9333de13c076a92b1d00525b99fbbb19c72", + "docs/validation/native-input/cohorts/legacy-contracts-v2/tests.log": "f0a7b4b7cb6cf808cc0de2c2fccbab8c871f0e0ee5197e9e2c68466f753bc5b7", + "docs/validation/native-input/cohorts/modern-owned-phone200-v5/record.json": "af4c5b519814035a3c53578901ddbc4d349e3d1a64ebd6c1583b60f703e7f1ba", + "docs/validation/native-input/cohorts/modern-owned-phone200-v5/tests.log": "b9e80904fdeb7362e658fcb66002561cb747443f3ada9d00346ec5876ddfdae7", + "docs/validation/native-input/cohorts/modern-contracts-v2/record.json": "9c7ef01d4118e008a8bf1a090a7580be944a3045190aee36dc4ce8025f7a814b", + "docs/validation/native-input/cohorts/modern-contracts-v2/tests.log": "7486ccdb7f9d1c808579e3579c33d0da90ec7f1745c6a18f9dd692512f0b1716", + "docs/validation/native-input/cohorts/legacy-owned-probe-v3/record.json": "b3f9150999a0dc03913e5e288eb6b1093affd7b98aa1646896df75bbe7620a60", + "docs/validation/native-input/cohorts/legacy-owned-probe-v3/tests.log": "5aff141d72a4e108f5d962186e3512e0e78ed655337fc24504dfef3576da8636", + "docs/validation/native-input/cohorts/modern-strict-control-v2/record.json": "6d960e9a7184e6beabcf507105ef949e787ec757f844cdc80721b8639a955da5", + "docs/validation/native-input/cohorts/modern-strict-control-v2/tests.log": "040570d314a2142804a7534898c5b644b54ebfb7ac8ebdeb993b5774550eb251", + "docs/validation/native-input/cohorts/legacy-owned-200-v5/record.json": "b9a2534e6e7fe4b0f5e63224feb3632969d6367758a9e9b740c1aa1cc4ba432b", + "docs/validation/native-input/cohorts/legacy-owned-200-v5/tests.log": "b9b8e0ffe231620ff309894251c1dc96ca73f7bbafa193919f408e3e66f23cb0", + "docs/validation/native-input/cohorts/legacy-strict-control-v3/record.json": "245f092a17b7ae9096c1300e09a47650537bcff04499fd01b05c6af7a6c73558", + "docs/validation/native-input/cohorts/legacy-strict-control-v3/tests.log": "0f03293a4bf0371e72f5111d4c994b7ff44403de9d381f8bde62a938d37a6cfb", + "docs/validation/native-input/cohorts/modern-strict-control-v3/record.json": "8e7b2706cebdb4fd0da94ad7fd1dc61a0810a07cb3926d9474d1a1fe77b95d83", + "docs/validation/native-input/cohorts/modern-strict-control-v3/tests.log": "8420eaf4d6dee5f87e70504b9cd3682f8967b19f5d424bc406f116e6a1dfc24d", + "docs/validation/native-input/cohorts/legacy-strict-control-v2/record.json": "025a4c5107de83281c79f31afce050dd2c5bafa265958a124b663b373936b4f8", + "docs/validation/native-input/cohorts/legacy-strict-control-v2/tests.log": "38dd4909f81b975ac53d1e38ac78f90d0dcbf5ff31ee44ed40794be33c598eb5", + "docs/validation/native-input/cohorts/legacy-owned-200-v4/record.json": "9a66bb2b1b96ee0e6264487b851351cdf4fc9189278167c557b3e48721188efb", + "docs/validation/native-input/cohorts/legacy-owned-200-v4/tests.log": "42804fdc8d4a4b92432e673e1a534d827275d715f2a9099655b415d00825e271", + "docs/validation/native-input/cohorts/legacy-same-length-v6/record.json": "09c0cc9e22a4345f141f63a33ed312fe88acc8b01d66dc40304345efc38191a3", + "docs/validation/native-input/cohorts/legacy-same-length-v6/tests.log": "2be942790ebece04940714af7a2882574d8d759c4217f30193026ef90b632f87", + "docs/validation/native-input/cohorts/modern-before-v1/record.json": "9eaae307edbc2bb92344760f5dfe63ca6899be0f22a0aa80b7e51e5ef6e1b67d", + "docs/validation/native-input/cohorts/modern-before-v1/tests.log": "31a8ce050aa6de91acf14aa46ef0b5fd7342d3144ceb5cd404db3a666b64836c", + "docs/validation/native-input/cohorts/modern-same-length-v6/record.json": "e44e7d00bd4d7d4465c4e28262883987e32619e7b881856c0ae55efd33106b58", + "docs/validation/native-input/cohorts/modern-same-length-v6/tests.log": "d74693370aad53046a9471e8cb0f12c055c0930758586a0ca07304b539925453", + "docs/validation/native-input/cohorts/legacy-contracts-v1/record.json": "a79ecc8a5629bdf4d8117f418f41578014e3c043e0be40972a6a78afdf7f8d6e", + "docs/validation/native-input/cohorts/legacy-contracts-v1/tests.log": "3764326285a29eaeeca843fe09711ff876ee4ef551b4a46e2fced25fc2c4ec46", + "docs/validation/native-input/cohorts/modern-owned-full-v4/record.json": "c8f08172e4b63f8ca4fbe089bcf048ce87910f8a0f844e17b2739bd72b15cafc", + "docs/validation/native-input/cohorts/modern-owned-full-v4/tests.log": "26be89c2f70d0ca3832b9d22db8a5c02d30e45902b1067c43fdd125921e04601", + "docs/validation/native-input/cohorts/legacy-before-v1/record.json": "01f4958a127a1084a59d85c830138dc9bfa1ea7fb10354c409db5c80aba8ec21", + "docs/validation/native-input/cohorts/legacy-before-v1/tests.log": "b688faceacd0478aea95de6ae369533713d8d0b87d392489c7d79e26752d46f8", + "docs/validation/native-input/cohorts/modern-owned-probe-v3/record.json": "263eff8396e9ca4b00314c49cd04f1d639d9aaa0b1bee3cda5c1e385e490e180", + "docs/validation/native-input/cohorts/modern-owned-probe-v3/tests.log": "7a2c99f91bbf227baef8a314bd1657c907cb329543fc3afd34371798ae82ea2e", + "docs/validation/native-input/cohorts/modern-contracts-v1/record.json": "4ee6cbaab6250f250df49ade496106c14dba025664b4a7392f66702c8a12662b", + "docs/validation/native-input/cohorts/modern-contracts-v1/tests.log": "3a99fa503ba07db10587e8d47d5e0f968ee8baa20dcb9fbf19f2d214ff0d2705", + "docs/validation/native-input/cohorts/modern-owned-full-v5/record.json": "cc99a4b0a39b392dcd0051a7f2e4f4d36fb978b289bba069b1101e935eee75d3", + "docs/validation/native-input/cohorts/modern-owned-full-v5/tests.log": "c8767e9be2a5dffb2b2f021d6cb1adf15172fb4e3e747ac41a6dc14588f4d645", + "docs/validation/native-input/cohorts/modern-owned-landscape200-v5/record.json": "c973fca8239d52ca201cbf216b4e5e4ab0b9efd5c67ab08ee3f6c88aa43696b5", + "docs/validation/native-input/cohorts/modern-owned-landscape200-v5/tests.log": "304964ab65f41555c2658a3f96d1c8fbe6889c4fade4b61aa7bf1405bc2fe684", + "docs/validation/native-input/cohorts/legacy-owned-full-v4/record.json": "7f67c2cf2473f23947500a754feda0217cbe54c9e6cd8d133df6d40c43021b03", + "docs/validation/native-input/cohorts/legacy-owned-full-v4/tests.log": "64cf658174120372874e36a7515ba146dcca8be3ab6faedf3b9226d80cfcdd2b", + "docs/validation/native-input/cohorts/modern-strict-control-v1/record.json": "d56214ef2fb2781698ad436a06b7bfa0dadae55f1f16c34d05116302dc986090", + "docs/validation/native-input/cohorts/modern-strict-control-v1/tests.log": "f27881c27eea7277f830f9c731d4953561d091bf953f020d210728bebd191ec5", + "docs/validation/native-input/cohorts/legacy-owned-full-v5/record.json": "b04031a7ad4a4c94300d047a613f4a1e7facfc7a4dd42126dbd433af72a98d3c", + "docs/validation/native-input/cohorts/legacy-owned-full-v5/tests.log": "6e4e68da21c526abd2e7c2135c08f91a4ea9d9011dbd52c8e74b196b1988405c", + "docs/validation/native-input/cohorts/legacy-strict-control-v1/record.json": "92490388bd62c734c08e71e141e4936fa9251c2012f91949016240d2a4c33fc0", + "docs/validation/native-input/cohorts/legacy-strict-control-v1/tests.log": "be6e8c66ba9e440f453a1e338456c13f95985a74943d23f0c03c8056fd50882f", + "docs/validation/native-input/cohorts/modern-before-v2/record.json": "f63938666633e5235c931858b473ba17fb4f948c350d5cfe54bd4b3ccdd40959", + "docs/validation/native-input/cohorts/modern-before-v2/tests.log": "39737ff68948c3415f35c2ef32ae773fe6dbca22176d2e7c452d917f89f7b5de", + "docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordinjectedtypingandcommittedquerynavigation.json": "427fedc1f372f45d3189c39011380e7a4ca4c43f49874017a91af4d642244027", + "docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordsameturnlauncheractivationtextandannotations.json": "1d82643c2c3dbf1d9e217098b91c93bc1ee05c3c6be56b6131fb548099e1e05e", + "docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordlargedrafttextandannotationsafterrecreation.json": "7a8cc8b3736d6f5170704e1473e905c04f6eb653e9886e70812bf1070709e878", + "docs/validation/native-input/cohorts/modern-before-v2/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json": "42ff249e79b5d5815d404637bb656781052c1294f18e53bb47755731e13580a9", + "docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordcallerselectionacrossnativeroutes.json": "dcb4d2078938bd1ca71bdf2f913e4ecbe1e7411d1939f8f69a373cde585211f4", + "docs/validation/native-input/cohorts/legacy-strict-control-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "ee596d440050952f4c707ec0bd2ab756a40162e919dbb0c53347be07bed30145", + "docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedsameturnlauncheractivationusescurrentnote.json": "7af73f8bda7df1452df42a7d02815122b7c94ded0678fc034d421ba7b356ef6e", + "docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedemojinavigationandcaretareexact.json": "ebd9ea7087fe3d54fce129c0c7bd44dfae46e0bbe4bb9edb3cad695705dc97b3", + "docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json": "ca07f1a6fb793ef1a1e7947666c8d684abd9d7bc0730d4782088542aad49af4b", + "docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "bbdbf1d7a22282fbcc5530ebcb36aa5c37d78e5bb91f80af160781ff9dc72aab", + "docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-activemultilingualcompositionkeepsresultselection.json": "1c7417c2aba2f32a986b310d05aa080e6325b1965b5fdf248115a76afe261260", + "docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-largedraftrestoresexactcharactersafterrecreation.json": "c6c3ac64ce36d1eead58879cc6c85000a378b70d74853a13c730a88b603c8e94", + "docs/validation/native-input/cohorts/modern-strict-control-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "b08ad0d64003ff4d1c5a064f7c28b11bedf5ca7d4c17041a3b74ca498c939c37", + "docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedsameturnlauncheractivationusescurrentnote.json": "05ff21fdf701b8a896ad2f16bc49235184c3d4dafc70227d5a6eb2e3648cb515", + "docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedemojinavigationandcaretareexact.json": "41a147e2106cebf1170714bf5773b1b221cfd4d618dd44d3a8c1da741a87eeb6", + "docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json": "5ee2a27b859f593d99f7fd4899364446741717af5260c9308705a6ff3bf4a0b4", + "docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "01068da3fc8b2a97082c0a52b5d7c82a22a95355462e50d12968ad5a8b3caa0c", + "docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-activemultilingualcompositionkeepsresultselection.json": "35bc11e3a79110c6cea1516d1d2c64f4f69248d898c21f7f20c20ad88c7394a1", + "docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-largedraftrestoresexactcharactersafterrecreation.json": "001e066d281197364af87cb75876ee5e50a4c3bf50469af487b3061ac8175a11", + "docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json": "91aa0e20de5a25d812223ca8c142e998bc5867cdce6c10289eca237813be9785", + "docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "1e4fede6c14ef8e52cd40abe6ee982cd36739df419e5cbfc0e6ec1c636668ddf", + "docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json": "eafcdcca6ec3e7dc4bc44ce3b63a00cd1bef22b1ca97ba65e488ad39a8efbd37", + "docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedsameturnlauncheractivationusescurrentnote.json": "bd11e05fe06e46504be46a6c414b28fcf7b8a0077522ed518db662666f81233a", + "docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedemojinavigationandcaretareexact.json": "1c468214735f39e2ba619e2fa904ed0fbe43b9b2ae01cf176d34ff4c4ffcaaf8", + "docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json": "41c43eb796412d1a418f1eccaede00bed902daa4c00feaef7a45a844acd734ac", + "docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "9f7e5c169814d9604a0e0ef78cab37e18bcd1e5a1961d8247ee6bf4c44bdaac5", + "docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-activemultilingualcompositionkeepsresultselection.json": "0114904b38b0a1b5cc710bfe58672750752354292ffd421fb28c28253345abd6", + "docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-largedraftrestoresexactcharactersafterrecreation.json": "c590316f650aafbb7ee90f59622f86a858c8dd35653fabe378855649c5506686", + "docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedsameturnlauncheractivationusescurrentnote.json": "e503772c80b15209241be804a976e114f826832ac8dfe4c098a731fcad79708a", + "docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedemojinavigationandcaretareexact.json": "ff87084c36f4c50a89d2b6fd0f08b6a135c7d65b69349ae88627586c503157e6", + "docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedcallerselectionsurvivesidlenativeroutes.json": "0483b11ec587da8ded710324b8a51aa0b46bb61c94144e4ba4654b21ecdcb329", + "docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "f2df30c2fccbc925b601262e7ab30affcee15a3705815a117cd6be5ea19b6b42", + "docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-activemultilingualcompositionkeepsresultselection.json": "66a1be5ae09728f12518fbb7b9d4d3c50104084f729aa5c62eaf6a97fa2447ac", + "docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-largedraftrestoresexactcharactersafterrecreation.json": "fe05ad95904d4eebad0ef269001a2a73c8257d2aae75fb38baf337e7907147c8", + "docs/validation/native-input/cohorts/modern-owned-probe-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "5e803512db3e49a198276af54126a085a6f50c1a4bf798bfc7b133b4d3159482", + "docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recordlargedrafttextandannotationsafterrecreation.json": "0de61be85fc49a500defdb55621ff5290fa00a051a214e2bff133ce8223caf0d", + "docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json": "c1c3487dadae11cfedf2762e6174524578d771af65d2db492f9e82a6150dde7b", + "docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recordcallerselectionacrossnativeroutes.json": "724b1e18b72968f6a7218d784c634508777249a178fa3030f778cea833f17514", + "docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedsameturnlauncheractivationusescurrentnote.json": "1fe427c46aa0c2826ab53f46ec2e5156b85bc443295fea266f31ba6572e09ad8", + "docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedemojinavigationandcaretareexact.json": "0d1da0ae4af928e725fa86775f11fd43355f622a68edd6192efd34ad70d107d0", + "docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json": "789dcccf0f3fb5898e36734d43a6f886d688595a014d5c3edeb58032f16bd83c", + "docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "5253be9dc881b270a06fc0e3ef6369086e247c25d6e2ba8c6eb84538e1f1e598", + "docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-activemultilingualcompositionkeepsresultselection.json": "a6e22d4f6f53389e7c55c398361044a903659c61bed32a4c6b4bf1c21aa0ee70", + "docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-largedraftrestoresexactcharactersafterrecreation.json": "abb007b9a0bd64a109667deb2af0934e28b2251c0e64b5b37cc9800368e64592", + "docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedsameturnlauncheractivationusescurrentnote.json": "4f180e417ebfa413d1fa8cd4ddfe82e5c35226d8bfde329ebd719563445ad322", + "docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedemojinavigationandcaretareexact.json": "1c70523b96f1a54a5a7f3a0f09b030bb457e923969003e7e145c1a6084cf544b", + "docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedcallerselectionsurvivesidlenativeroutes.json": "bd770fb86939f064e5bd869dc6d9e1292a53e0c960f786b202e8bbfd7ce58146", + "docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "37c51eea0a8044db115958ad0f7698db63265ede88addc19d678be39bf5925bb", + "docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-activemultilingualcompositionkeepsresultselection.json": "2b8ef1f584881ef2d759618671070209644428787778ca605915040067674eda", + "docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-largedraftrestoresexactcharactersafterrecreation.json": "3fb49cca5378bce8b7e8a85fbf6b44d2bae5a6812cfcc6508e0d7618b93e12e3", + "docs/validation/native-input/cohorts/modern-same-length-v6/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "3423fe3a26f707da612836b429d9528620de5f9f8f3184a49bbf3c336974a651", + "docs/validation/native-input/cohorts/modern-before-v1/cases/case-recordlargedrafttextandannotationsafterrecreation.json": "06b19ff27671477cbb8c0f63e8c44f1ef9fba7d62f6e41caf17ab81be52b997d", + "docs/validation/native-input/cohorts/modern-before-v1/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json": "37e7464176bc804983dd50bf8f4e5ecfb3d480f2cb417a1fc26a6f8c507077cf", + "docs/validation/native-input/cohorts/modern-before-v1/cases/case-recordcallerselectionacrossnativeroutes.json": "bdbb5ac7931b7fa9e2cbb57c59e981656d881a5b0627e6d40a3889c39fb8d80f", + "docs/validation/native-input/cohorts/legacy-same-length-v6/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "a4ed25ee44b672e3fd1db462f73b7d42fb68115f3a7b1381936a870fbdba1085", + "docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json": "77117f9e5ec2f28cb4c880204ab810fc42cafef7abfdf707000c8f1859b7db99", + "docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "36f94eaad2d58eef9626578d9d0e47aa11c57fec9539eebaa14ec54d3e92a111", + "docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-activemultilingualcompositionkeepsresultselection.json": "2bbc81d1dd3dec8407bd595b0ec6368007f969b35efd44a6707c8102897e7999", + "docs/validation/native-input/cohorts/legacy-strict-control-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "dbf5daf1485695fa120ef8051d532c6a9e239ec58a940d43ceaf966a10489f9f", + "docs/validation/native-input/cohorts/modern-strict-control-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "f3912dad0723d41758a25c31cf0e3a3dd24b7c41d5ccccd0c7bf9e246abc8cce", + "docs/validation/native-input/cohorts/legacy-strict-control-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "dbf5daf1485695fa120ef8051d532c6a9e239ec58a940d43ceaf966a10489f9f", + "docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json": "139796cc26a045cea45be423b902488bb5dda91a74385f41aa541e74d40a8b0b", + "docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "de70d7da0850dc12ad04eb77e7ac048f28f1d0459856d2a9ec8e039da7309314", + "docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json": "f8808ee95045adc6a4b9c47783a52fca71fb11a129e69d1549d75654dda14a25", + "docs/validation/native-input/cohorts/modern-strict-control-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "f3912dad0723d41758a25c31cf0e3a3dd24b7c41d5ccccd0c7bf9e246abc8cce", + "docs/validation/native-input/cohorts/legacy-owned-probe-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "a695845713c360fa82b611fb4dd6c1be68912d8427185b0d3b3cdef30da4ecb7", + "docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-committedsameturnlauncheractivationusescurrentnote.json": "7c0bd58f7627f64d67d9bcc284d425723b0c5d2511eef06c3f405ca4033f23aa", + "docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-committedcallerselectionsurvivesidlenativeroutes.json": "84ac40592358e0c7230d5bc46fe002cd6e742878a29e4828154cf3be4c6f21ba", + "docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "4bf7e77e33b8f342ac2f8333277c251d67c51f15d314820adfa2cae5bd0f83dd", + "docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-activemultilingualcompositionkeepsresultselection.json": "15dc3e1e665e12db0529911e0b9dd7e72330c318029ca66e325f7143b75838f6", + "docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-largedraftrestoresexactcharactersafterrecreation.json": "ba2c72a6236a0a89c4ed9050674200f466f6dd4814a2ad8504dafe273714d7ff", + "docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json": "f209da4bc959a882951a2a3e1d0fc89cba12cf67d8c765fdac5019da5f5b8361", + "docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "63a8c99571f2c9bcaab42c2c5456e31be1af89404cddfaba6a06c6cdeb874ea9", + "docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json": "c977a2533d0d1d376e028b0adf4a9ac1e18e476a4483ed0925eb22500053659a", + "docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-committedsameturnlauncheractivationusescurrentnote.json": "7c8b5a249b55cbe9741382850260bbaeca5132039aeda7c8228506e9f5b5ddb6", + "docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-committedcallerselectionsurvivesidlenativeroutes.json": "9cab543dbd64cd1f08f51f03b917830032176373a939ccbf5a5f779d77afa700", + "docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json": "6cdfb6b4dc828885ecdb1e3d03eebd5b179fb7b6d9c5896589bfd22a1e340584", + "docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-activemultilingualcompositionkeepsresultselection.json": "35b8a8d2cdb8533624423de4e75e1343d063a266693be07c1a17216da956ccb5", + "docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-largedraftrestoresexactcharactersafterrecreation.json": "9668c4e299f6646ca5a3b189e24f8843033e4b93a25c916599ea64348818efc2", + "docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordinjectedtypingandcommittedquerynavigation.json": "e8533dfefc78d85f6d1e23fabb3ae54c297e819d8bca12518041cc31b5f206f9", + "docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordsameturnlauncheractivationtextandannotations.json": "9d28beb6c6636812fd3826946224c6ef067bb5b2905187f5da39e8cc3362c4d6", + "docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordlargedrafttextandannotationsafterrecreation.json": "3e63a2888b6131f819fd9ef615342dba22b69e2fa9bf4948a81eda31815fb638", + "docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json": "6164dae141ed4944c696e75cd8a8a5f631b81c107579905a39b0f9046b8c66fd", + "docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordcallerselectionacrossnativeroutes.json": "b5e1520fd100f85e3ccde75a0454dbcc8a03c333c7aab3edb89342f93efd2860", + "docs/validation/native-input/frames/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json": "a208dfc8c7111bf13cbbd0237f5826ae11254dbf9e5a7276a05258833885e6b5", + "docs/validation/native-input/frames/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml": "17a24d302a48b252bd1e76a4b23341ee106ebe3fb33a08ea97f29ced646102a2", + "docs/validation/native-input/frames/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "docs/validation/native-input/frames/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "a450adf1ff9f7737e53b1787a75d7a3307b79691d4fdacbb0d9233ce1ba685dd", + "docs/validation/native-input/frames/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "docs/validation/native-input/frames/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "e66b1d175c0d523f7acd8e9fe68f0d3833a18235c1c29f975d33f5920be1800c", + "docs/validation/native-input/frames/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before.xml": "0d397a67e069da369984ee457ace0a1795e2bbbd35a58e02e552063f302bdfe4", + "docs/validation/native-input/frames/system-ime-history/committedemojinavigationandcaretareexact-failure.xml": "b1ca718225e73832ad5555b96c7f7c9aaa5bfe4d8226d2ad84d25ff2d4fd98c6", + "docs/validation/native-input/frames/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before-frame.json": "4f68850bb0e35342dd1993bf56079ef44c6e740f6852dc17a1e44639f99cc726", + "docs/validation/native-input/frames/system-ime-history/committedemojinavigationandcaretareexact-failure-frame.json": "76aa121bca272092ed45f240ad07e9db23af0ddaf7bb7ca203338a672147560f", + "docs/validation/native-input/frames/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "docs/validation/native-input/frames/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "b50cc91fa7b516db04168966eea66ead5920bc0298f3f877638ec8f57002f3a0", + "docs/validation/native-input/frames/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "docs/validation/native-input/frames/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "0889a87fe7145225ebdb2726134afd0757817c84540bcd15b389ef54e751bd0c", + "docs/validation/native-input/frames/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "docs/validation/native-input/frames/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "f28fc50fd6bb638aaf63c0d846d979a18c884bd249dfe006a67a096b6d41ddab", + "docs/validation/native-input/frames/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "docs/validation/native-input/frames/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "5868971622788be375d9fe942aae7e69cd1b7c98757fa2fe0d1345e866988f4b", + "docs/validation/native-input/frames/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "docs/validation/native-input/frames/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "031a612dbb5f16674f87be8c03d1586055cdf7c01c195bb97e5c201030657ddc", + "docs/validation/native-input/frames/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "docs/validation/native-input/frames/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml": "86e1fee196ae2424854ec4feaa136ef220517756c0eaef47debe4f67cc71250a", + "docs/validation/native-input/frames/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "docs/validation/native-input/frames/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range.xml": "fe675fb5eae40d15f6117e5ae7e2549ce673f0dcbd4043713495757d3ff198aa", + "docs/validation/native-input/frames/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "63aaab0d980517bd38d354d73e2d2f3dda8c5771f622ebf4b799f880fd62d579", + "docs/validation/native-input/frames/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json": "90fb582ae52bd82daa7dc747e0bd4cf17c64024807d8ef632f303464e1f2fade", + "docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json": "f12bb1a4ee4c206cf50674645cb391c3f94d8ccb7ba55e1b10dfcd7fec26d787", + "docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml": "1bab548c238c1c9e493ea4b9adcb780b167b87e94c794a3a055f17bbcb759860", + "docs/validation/native-input/frames/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml": "5a6a78b367da5d656658edb4746f698e19140c8bf38b7b0d9a34b11fe9164656", + "docs/validation/native-input/frames/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json": "23563471349cf821a3e415667a913387c8d8d6454546a2890e21d3ea0adef1ad", + "docs/validation/native-input/frames/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.xml": "7c0fd9f341338b76e1fe52b7fa23986b93e8d1d3b25aa3dbcf1dcaa7db01ef73", + "docs/validation/native-input/frames/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range.xml": "617a5fb087c779f82c3e5847ad1125b501aa3893b212f494848300ee229919cc", + "docs/validation/native-input/frames/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note-frame.json": "a0b766aa6e15b5dd964b3597047d36abb1e5d87cc5ca8fccc4a96907f6567ee0", + "docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml": "b2e1be1fb808383cd07e1f9b36aa17fb3667e48890cd8b7d8c9d67f58a58061c", + "docs/validation/native-input/frames/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json": "386677aeb164b77096876bdad86dffc22a44a3cc7fe72b674be113e87e5280b3", + "docs/validation/native-input/frames/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml": "0fca2d7f87d649bf8d4e4542a82e3d281370572dc537dcaa1a26605f13170875", + "docs/validation/native-input/frames/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json": "e7ad5338a6a0b194e5e018a964525f0622c46f4255115f26ac95af3c5112fa2b", + "docs/validation/native-input/frames/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml": "83b997c137d5b0621276f4a216a65443863c3243737d7178351ad51474a2a024", + "docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json": "5f0ea2591c31cc0771fd50d05db9b5ea0ad0a8ec20de8cd1c31f85b99ca218b1", + "docs/validation/native-input/frames/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json": "90fb582ae52bd82daa7dc747e0bd4cf17c64024807d8ef632f303464e1f2fade", + "docs/validation/native-input/frames/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json": "a208dfc8c7111bf13cbbd0237f5826ae11254dbf9e5a7276a05258833885e6b5", + "docs/validation/native-input/frames/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml": "0143cdc0b3bc14aa75db7d74c034369eadcdf3c531361762a1da730d76714b8f", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.PaletteScrollHistoryTest.xml": "b24e62c84505a56550e3af1df6099421a2b5a36418fc5cf45a1d110c8e1af39c", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormFileImportTest.xml": "d45f5bc23fc6c45b728fd6c0eeb7b6257ea5aee048d50f56dd18d190b2347d51", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionPayloadIdentityTest.xml": "fdbebbd2356dd1e0e46b963f19f6d14f295cf87b3989fe0ccc21e6b3ff824b6d", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionSelectionDeliveryTest.xml": "b7fe24dd317a3e0e367478733caf3950e5aacac1db1ae24d053f2edd7fe12c07", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormTypedValuesTest.xml": "919cfec3fa7e7c6210b9d4eb9e029dbb7e1db18cdad088c2655add9d525fed22", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionMarkdownModelTest.xml": "1799962fe7015d75f7da767e4bd75f57ace64d66b8e6d6d76aad1bf627054c2a", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionPasteCopyTest.xml": "050de233f55e12bdab58755a391ac9875d04cfa25de9bddea2d09a9a4e949b6d", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ShortcutReadinessTest.xml": "edc4ff7306ca2751589d7bff8e45cfdf548a2b2829c6b015af6c63d1d379bc52", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionDetailImageTimeoutTest.xml": "e679cb190d9177ca252656cdca5c20fcf28a4fabeffe1efc45099c618e59e996", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionWorkflowEvidenceTest.xml": "a251c5fa648259430542d388318f650f8b50472de9d6f57796cb4be2c4b830ee", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.CommonMarkPrimaryConformanceTest.xml": "543eb2efdaf850bc699bb86531fca406759b64c05f73a2cbae3cd9f545b55638", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.EmojiCatalogTest.xml": "0aa5915167ef2f6e82dd59a31a0fc61b5856d7fd4a95b6891e15a4a53ad31ff1", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.SystemSettingsTest.xml": "9f9959a60cb933b7435f79bad795fe96e1b486fdcf82fdd938132d6f6f056579", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionGridContractTest.xml": "4fa21dfb69c724d1e98a455727c6ba2366dda18073628730258dcbd78b502ab9", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionCommandLaunchTest.xml": "d0b4adb70e01d4ab19e9528099061dbdc827035965376669bca4993b55a78d33", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormValuesTest.xml": "031fe0ae4baa6bebafd6a3d25edfbf47a685fa50af5127b86dd504ae97dd30cf", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ReviewedTextInputTest.xml": "55079e486c196e56b8e67dfb7c7de15c80991bae714c86fec704fb626bafeb80", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ModifierTapTest.xml": "da88e67ebd5039df3978f00a7118a5bb449ed100c000bb42006007586f4f47e2", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormContractTest.xml": "52c864d061692fb47f24acc257bdd1b1620898bf23a0db1504c07aed072ebd85", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ShortcutTest.xml": "9798a3f434aa48e664e8250547e719569beb5b857850f62eba6dc5c1c834c8e7", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionWorkflowInspectionTest.xml": "880f01acaca0fcc61955aeeeb015d383f415eb1739292980be16a5ffe9bab242", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.PaletteMenuOwnershipTest.xml": "9213cea79ef813c21915808ff4f409c2b18e2505c1d5dd97b1a166aa99b04b09", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.CalculatorActionsTest.xml": "8eff3994ee5067c88b753f149a73c277493ac59840ea6960e750cdaadc20fea4", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.BackupPlannerTest.xml": "ba17dc207fc3e3388ef1dda921294648621b076b783441c433e4d0009bdf2fd4", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionGridNavigationTest.xml": "33117173c8b05a79190cb440a6df6d130142bac5f9f5438b868c19858fe591f9", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.FolderGrantTransactionTest.xml": "48551cc6d1110993dd5707c508818a90452f4947a7e04556db841718a96b74b9", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionEngineCompatibilityTest.xml": "da675b3d1fdb149565a723ebf4ee8696fca374e8e96b3b38c13c89ec9a7b8e12", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormSubmissionTest.xml": "883b03358162a1a6ed1324a6783865c822b11702befd171cf0611d715a03b3d8", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.UpdatePolicyTest.xml": "017d34365baff8f31aaa58525e1c9055f456126a2039fab2711adec150851834", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.WeakValueTokensTest.xml": "a8ae90c1556495e26fa5810b280b77493961cf3ce297522d57357ab54890c2c0", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionMetadataVisualsTest.xml": "f279d2e93505d8a8fffda0a093218d067cbefb0f5fe62a76cdec072874c12375", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.NodeCpuInfoTest.xml": "bd33332ba12aea92ce8c89238a7912a7569a79401a599dea302c8f1bbcc8a47d", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.CommandEngineTest.xml": "b9bffc77512a34ee0e6b9bfc6b87dbbbe2c5f98341b35aa8cd4f6a48b57a6643", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionHttpTest.xml": "074e1b06c38f791e1e8a461e713e9994251356af2f106ae6c506b94b675701ed", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.FolderIndexTest.xml": "385eb497858199df97affff80198b29bcfa93b44856cbbe1581b2ac90dca462d", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.TinycastGridParityTest.xml": "256d0cbd3903d9712a91014bfc637965f4e268c552c71d7e6dedf572a038cf3c", + "docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest.xml": "1b6248013c82aa0f197ad7bd4820f950010d15c312271df357d5c43f675fd13b", + "docs/screenshots/native-input/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png": "f22a3d05aa35a1b37086a552184d49bb9c52a8e8e8a958f54278e1865bfbe299", + "docs/screenshots/native-input/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "2f5ba4758138369d5e81292b65880b29b8f51ad38f7af839533e41a28ba095ad", + "docs/screenshots/native-input/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "4b4b104e7274510a10c3dcd69bca2655de6f18f0d255e496d51a752285268268", + "docs/screenshots/native-input/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before.png": "07ed9cdf078ef674771f49c4e06e1ab448258a996306ba53c7c5fe3452bfc938", + "docs/screenshots/native-input/system-ime-history/committedemojinavigationandcaretareexact-failure.png": "f471354b059d9657237344880b8b53c0bfc1942e5690cbc23de7b4785b5e983c", + "docs/screenshots/native-input/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "4ecb9d33473aaa9109b6925503383b2401f49c791ee289f8a55e5f1f46a1f104", + "docs/screenshots/native-input/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "88dc9bc6d6158b5b9ade91e29627c84f30c8f4df057e8f164508d309f9239c6f", + "docs/screenshots/native-input/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "8d8cb7b94e5f150822299bc5807501bca61ddfbd08abdb57956bf910c3bd5b1a", + "docs/screenshots/native-input/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "75fce55f28a1709e892e48d799a56208e3bbcd5b0e70e2e071d1787a4e7510b6", + "docs/screenshots/native-input/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "a90fa38ad0d5a40637d529cf08ef0b2c5a0ecff8b672fa94d04de3810c03d1b3", + "docs/screenshots/native-input/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png": "b9340b4568e07657828bc881405cf1b932630fc7111e15f883bb683b77f680d2", + "docs/screenshots/native-input/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range.png": "18b74da7526c2b4f0932f69f71208ee95381cf6504daf217a9684e10247a978d", + "docs/screenshots/native-input/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "c66c2c31c22aa162459f55fd72269a31bcf88a5de063f2ff4fa2f7db1661c2cc", + "docs/screenshots/native-input/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png": "38477c43884c551e13ec03f5d0b0354b92318ba75310822ebba3449e7d11aa4a", + "docs/screenshots/native-input/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png": "de7aa13ee001bafef456c5f6e86dcde31f93b4a9fb70d173b4fb5e5e64a0e05c", + "docs/screenshots/native-input/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.png": "0ae49a4e1ab28e5fd968d92fc2ed37b1261c8d538f3f9808721e76c20e363ddc", + "docs/screenshots/native-input/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range.png": "0bc79b177925583aa5924c475dd5a5ba2402f9511dcea2b436a1158d51cb034c", + "docs/screenshots/native-input/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png": "13f16ed3f06029794ee66c70142c5b0867ec0615e2ac95430201815858fde715", + "docs/screenshots/native-input/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png": "39591aef3ceeb77bc03a5cbb59f343e231f039376997b73e3bebc31e4417b61c", + "docs/screenshots/native-input/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png": "13c00f13cdb637fe5c323a0d7fedd562ae764cf104870207be02dbdc7049ba6b", + "docs/screenshots/native-input/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png": "1f17202594d3a5be15fe28a71ce45f7293c8aafbf94793078359bbfbcc46ab1e" + } +} diff --git a/docs/validation/native-input/checks/contracts-harness-build-v1.log b/docs/validation/native-input/checks/contracts-harness-build-v1.log new file mode 100644 index 00000000..4f02df42 --- /dev/null +++ b/docs/validation/native-input/checks/contracts-harness-build-v1.log @@ -0,0 +1,64 @@ +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:generateDebugBuildConfig UP-TO-DATE +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:packageDebugResources UP-TO-DATE +> Task :app:processDebugNavigationResources UP-TO-DATE +> Task :app:parseDebugLocalResources UP-TO-DATE +> Task :app:generateDebugRFile UP-TO-DATE +> Task :app:compileDebugKotlin UP-TO-DATE +> Task :app:javaPreCompileDebug UP-TO-DATE +> Task :app:compileDebugJavaWithJavac UP-TO-DATE +> Task :app:checkDebugAarMetadata UP-TO-DATE +> Task :app:mapDebugSourceSetPaths UP-TO-DATE +> Task :app:compileDebugNavigationResources UP-TO-DATE +> Task :app:mergeDebugResources UP-TO-DATE +> Task :app:createDebugCompatibleScreenManifests UP-TO-DATE +> Task :app:extractDeepLinksDebug UP-TO-DATE +> Task :app:processDebugMainManifest UP-TO-DATE +> Task :app:processDebugManifest UP-TO-DATE +> Task :app:processDebugManifestForPackage UP-TO-DATE +> Task :app:processDebugResources UP-TO-DATE +> Task :app:bundleDebugClassesToCompileJar UP-TO-DATE +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest UP-TO-DATE +> Task :app:generateDebugAndroidTestBuildConfig UP-TO-DATE +> Task :app:generateDebugAndroidTestResources UP-TO-DATE +> Task :app:packageDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:parseDebugAndroidTestLocalResources UP-TO-DATE +> Task :app:generateDebugAndroidTestRFile UP-TO-DATE +> Task :app:javaPreCompileDebugAndroidTest UP-TO-DATE +> Task :app:generateDebugAndroidTestAssets UP-TO-DATE +> Task :app:mergeDebugAndroidTestAssets UP-TO-DATE +> Task :app:compressDebugAndroidTestAssets UP-TO-DATE +> Task :app:generateDebugAndroidTestGlobalSynthetics UP-TO-DATE +> Task :app:checkDebugAndroidTestDuplicateClasses UP-TO-DATE +> Task :app:desugarDebugAndroidTestFileDependencies UP-TO-DATE +> Task :app:mergeExtDexDebugAndroidTest UP-TO-DATE +> Task :app:mergeLibDexDebugAndroidTest UP-TO-DATE +> Task :app:checkDebugAndroidTestAarMetadata UP-TO-DATE +> Task :app:mapDebugAndroidTestSourceSetPaths UP-TO-DATE +> Task :app:compileDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestJniLibFolders UP-TO-DATE +> Task :app:mergeDebugJniLibFolders UP-TO-DATE +> Task :app:mergeDebugNativeLibs UP-TO-DATE +> Task :app:mergeDebugAndroidTestNativeLibs NO-SOURCE +> Task :app:stripDebugAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningDebugAndroidTest UP-TO-DATE +> Task :app:writeDebugAndroidTestSigningConfigVersions UP-TO-DATE +> Task :app:compileDebugAndroidTestKotlin +> Task :app:compileDebugAndroidTestJavaWithJavac UP-TO-DATE +> Task :app:processDebugAndroidTestJavaRes +> Task :app:mergeDebugAndroidTestJavaResource +> Task :app:dexBuilderDebugAndroidTest +> Task :app:mergeProjectDexDebugAndroidTest +> Task :app:packageDebugAndroidTest +> Task :app:createDebugAndroidTestApkListingFileRedirect UP-TO-DATE +> Task :app:assembleDebugAndroidTest + +BUILD SUCCESSFUL in 7s +53 actionable tasks: 6 executed, 47 up-to-date +Consider enabling configuration cache to speed up this build: https://docs.gradle.org/9.4.1/userguide/configuration_cache_enabling.html diff --git a/docs/validation/native-input/checks/contracts-harness-build-v2.log b/docs/validation/native-input/checks/contracts-harness-build-v2.log new file mode 100644 index 00000000..5c21f915 --- /dev/null +++ b/docs/validation/native-input/checks/contracts-harness-build-v2.log @@ -0,0 +1,64 @@ +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:generateDebugBuildConfig UP-TO-DATE +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:packageDebugResources UP-TO-DATE +> Task :app:processDebugNavigationResources UP-TO-DATE +> Task :app:parseDebugLocalResources UP-TO-DATE +> Task :app:generateDebugRFile UP-TO-DATE +> Task :app:compileDebugKotlin UP-TO-DATE +> Task :app:javaPreCompileDebug UP-TO-DATE +> Task :app:compileDebugJavaWithJavac UP-TO-DATE +> Task :app:checkDebugAarMetadata UP-TO-DATE +> Task :app:mapDebugSourceSetPaths UP-TO-DATE +> Task :app:compileDebugNavigationResources UP-TO-DATE +> Task :app:mergeDebugResources UP-TO-DATE +> Task :app:createDebugCompatibleScreenManifests UP-TO-DATE +> Task :app:extractDeepLinksDebug UP-TO-DATE +> Task :app:processDebugMainManifest UP-TO-DATE +> Task :app:processDebugManifest UP-TO-DATE +> Task :app:processDebugManifestForPackage UP-TO-DATE +> Task :app:processDebugResources UP-TO-DATE +> Task :app:bundleDebugClassesToCompileJar UP-TO-DATE +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest UP-TO-DATE +> Task :app:generateDebugAndroidTestBuildConfig UP-TO-DATE +> Task :app:generateDebugAndroidTestResources UP-TO-DATE +> Task :app:packageDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:parseDebugAndroidTestLocalResources UP-TO-DATE +> Task :app:generateDebugAndroidTestRFile UP-TO-DATE +> Task :app:javaPreCompileDebugAndroidTest UP-TO-DATE +> Task :app:generateDebugAndroidTestAssets UP-TO-DATE +> Task :app:mergeDebugAndroidTestAssets UP-TO-DATE +> Task :app:compressDebugAndroidTestAssets UP-TO-DATE +> Task :app:generateDebugAndroidTestGlobalSynthetics UP-TO-DATE +> Task :app:checkDebugAndroidTestDuplicateClasses UP-TO-DATE +> Task :app:desugarDebugAndroidTestFileDependencies UP-TO-DATE +> Task :app:mergeExtDexDebugAndroidTest UP-TO-DATE +> Task :app:mergeLibDexDebugAndroidTest UP-TO-DATE +> Task :app:checkDebugAndroidTestAarMetadata UP-TO-DATE +> Task :app:mapDebugAndroidTestSourceSetPaths UP-TO-DATE +> Task :app:compileDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestJniLibFolders UP-TO-DATE +> Task :app:mergeDebugJniLibFolders UP-TO-DATE +> Task :app:mergeDebugNativeLibs UP-TO-DATE +> Task :app:mergeDebugAndroidTestNativeLibs NO-SOURCE +> Task :app:stripDebugAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningDebugAndroidTest UP-TO-DATE +> Task :app:writeDebugAndroidTestSigningConfigVersions UP-TO-DATE +> Task :app:compileDebugAndroidTestKotlin +> Task :app:compileDebugAndroidTestJavaWithJavac UP-TO-DATE +> Task :app:processDebugAndroidTestJavaRes UP-TO-DATE +> Task :app:mergeDebugAndroidTestJavaResource UP-TO-DATE +> Task :app:dexBuilderDebugAndroidTest +> Task :app:mergeProjectDexDebugAndroidTest +> Task :app:packageDebugAndroidTest +> Task :app:createDebugAndroidTestApkListingFileRedirect UP-TO-DATE +> Task :app:assembleDebugAndroidTest + +BUILD SUCCESSFUL in 6s +53 actionable tasks: 4 executed, 49 up-to-date +Consider enabling configuration cache to speed up this build: https://docs.gradle.org/9.4.1/userguide/configuration_cache_enabling.html diff --git a/docs/validation/native-input/checks/diagnostic-harness-build-v1.log b/docs/validation/native-input/checks/diagnostic-harness-build-v1.log new file mode 100644 index 00000000..a671061a --- /dev/null +++ b/docs/validation/native-input/checks/diagnostic-harness-build-v1.log @@ -0,0 +1,98 @@ +Starting a Gradle Daemon, 1 incompatible Daemon could not be reused, use --status for details +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:generateDebugBuildConfig +> Task :app:generateDebugResources +> Task :app:packageDebugResources +> Task :app:processDebugNavigationResources +> Task :app:javaPreCompileDebug +> Task :app:mapDebugSourceSetPaths +> Task :app:checkDebugAarMetadata +> Task :app:compileDebugNavigationResources +> Task :app:parseDebugLocalResources +> Task :app:createDebugCompatibleScreenManifests +> Task :app:extractDeepLinksDebug +> Task :app:generateDebugRFile +> Task :app:mergeDebugResources +> Task :app:processDebugMainManifest +> Task :app:processDebugManifest +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest +> Task :app:generateDebugAndroidTestBuildConfig +> Task :app:generateDebugAndroidTestResources +> Task :app:packageDebugAndroidTestResources +> Task :app:processDebugAndroidTestNavigationResources +> Task :app:parseDebugAndroidTestLocalResources +> Task :app:generateDebugAndroidTestAssets UP-TO-DATE +> Task :app:javaPreCompileDebugAndroidTest +> Task :app:generateDebugAndroidTestRFile +> Task :app:mergeDebugAndroidTestAssets +> Task :app:compressDebugAndroidTestAssets +> Task :app:generateDebugAndroidTestGlobalSynthetics +> Task :app:processDebugManifestForPackage +> Task :app:checkDebugAndroidTestDuplicateClasses +> Task :app:desugarDebugAndroidTestFileDependencies +> Task :app:mergeLibDexDebugAndroidTest +> Task :app:checkDebugAndroidTestAarMetadata +> Task :app:mapDebugAndroidTestSourceSetPaths +> Task :app:compileDebugAndroidTestNavigationResources +> Task :app:processDebugResources +> Task :app:mergeDebugAndroidTestJniLibFolders +> Task :app:mergeDebugJniLibFolders +> Task :app:mergeDebugNativeLibs +> Task :app:validateSigningDebugAndroidTest +> Task :app:mergeDebugAndroidTestNativeLibs NO-SOURCE +> Task :app:stripDebugAndroidTestDebugSymbols NO-SOURCE +> Task :app:writeDebugAndroidTestSigningConfigVersions +> Task :app:mergeDebugAndroidTestResources +> Task :app:processDebugAndroidTestResources +> Task :app:mergeExtDexDebugAndroidTest + +> Task :app:compileDebugKotlin +w: file:///app/src/main/java/dev/tinycast/android/CalculatorActions.kt:13:46 Non-public primary constructor is exposed via the generated 'copy()' method of the 'data' class. + +The generated 'copy()' will change its visibility in future releases. + +To suppress the warning do one of the following: +- Annotate the data class with the '@ConsistentCopyVisibility' annotation. +- Use the '-Xconsistent-data-class-copy-visibility' compiler flag. +- Annotate the data class with the '@ExposedCopyVisibility' annotation + (Discouraged, but can be used to keep binary compatibility). + +To learn more, see the documentation of the '@ConsistentCopyVisibility' and '@ExposedCopyVisibility' annotations. + +This will become an error in language version 2.3. +w: file:///app/src/main/java/dev/tinycast/android/EmojiUi.kt:98:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteMenus.kt:325:43 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteMenus.kt:389:63 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteUi.kt:180:51 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteUi.kt:257:51 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/SettingsActivity.kt:50:205 'static field SOFT_INPUT_ADJUST_RESIZE: Int' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt:25:128 'static field SOFT_INPUT_ADJUST_RESIZE: Int' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt:30:118 Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type 'Any?'. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt:215:43 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt:229:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. + +> Task :app:compileDebugJavaWithJavac +> Task :app:bundleDebugClassesToCompileJar + +> Task :app:compileDebugAndroidTestKotlin FAILED +e: file:///app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt:96:41 Unresolved reference 'getOrNull'. +e: file:///app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt:170:41 This testing API is experimental and is likely to be changed or removed entirely +e: file:///app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt:176:41 This testing API is experimental and is likely to be changed or removed entirely + +FAILURE: Build failed with an exception. + +* What went wrong: +Execution failed for task ':app:compileDebugAndroidTestKotlin'. +> A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction + > Compilation error. See log for more details + +* Try: +> Run with --stacktrace option to get the stack trace. +> Run with --info or --debug option to get more log output. +> Run with --scan to get full insights from a Build Scan (powered by Develocity). +> Get more help at https://help.gradle.org. + +BUILD FAILED in 52s +46 actionable tasks: 46 executed diff --git a/docs/validation/native-input/checks/diagnostic-harness-build-v2.log b/docs/validation/native-input/checks/diagnostic-harness-build-v2.log new file mode 100644 index 00000000..be3a16b7 --- /dev/null +++ b/docs/validation/native-input/checks/diagnostic-harness-build-v2.log @@ -0,0 +1,71 @@ +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:generateDebugBuildConfig UP-TO-DATE +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:packageDebugResources UP-TO-DATE +> Task :app:processDebugNavigationResources UP-TO-DATE +> Task :app:parseDebugLocalResources UP-TO-DATE +> Task :app:generateDebugRFile UP-TO-DATE +> Task :app:compileDebugKotlin UP-TO-DATE +> Task :app:javaPreCompileDebug UP-TO-DATE +> Task :app:compileDebugJavaWithJavac UP-TO-DATE +> Task :app:checkDebugAarMetadata UP-TO-DATE +> Task :app:mapDebugSourceSetPaths UP-TO-DATE +> Task :app:compileDebugNavigationResources UP-TO-DATE +> Task :app:mergeDebugResources UP-TO-DATE +> Task :app:createDebugCompatibleScreenManifests UP-TO-DATE +> Task :app:extractDeepLinksDebug UP-TO-DATE +> Task :app:processDebugMainManifest UP-TO-DATE +> Task :app:processDebugManifest UP-TO-DATE +> Task :app:processDebugManifestForPackage UP-TO-DATE +> Task :app:processDebugResources UP-TO-DATE +> Task :app:bundleDebugClassesToCompileJar UP-TO-DATE +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest UP-TO-DATE +> Task :app:generateDebugAndroidTestBuildConfig UP-TO-DATE +> Task :app:generateDebugAndroidTestResources UP-TO-DATE +> Task :app:packageDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:parseDebugAndroidTestLocalResources UP-TO-DATE +> Task :app:generateDebugAndroidTestRFile UP-TO-DATE +> Task :app:javaPreCompileDebugAndroidTest UP-TO-DATE +> Task :app:generateDebugAndroidTestAssets UP-TO-DATE +> Task :app:mergeDebugAndroidTestAssets UP-TO-DATE +> Task :app:compressDebugAndroidTestAssets UP-TO-DATE +> Task :app:generateDebugAndroidTestGlobalSynthetics UP-TO-DATE +> Task :app:checkDebugAndroidTestDuplicateClasses UP-TO-DATE +> Task :app:desugarDebugAndroidTestFileDependencies UP-TO-DATE +> Task :app:mergeExtDexDebugAndroidTest UP-TO-DATE +> Task :app:mergeLibDexDebugAndroidTest UP-TO-DATE +> Task :app:checkDebugAndroidTestAarMetadata UP-TO-DATE +> Task :app:mapDebugAndroidTestSourceSetPaths UP-TO-DATE +> Task :app:compileDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestJniLibFolders UP-TO-DATE +> Task :app:mergeDebugJniLibFolders UP-TO-DATE +> Task :app:mergeDebugNativeLibs UP-TO-DATE +> Task :app:mergeDebugAndroidTestNativeLibs NO-SOURCE +> Task :app:stripDebugAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningDebugAndroidTest UP-TO-DATE +> Task :app:writeDebugAndroidTestSigningConfigVersions UP-TO-DATE + +> Task :app:compileDebugAndroidTestKotlin +w: file:///app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt:171:41 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt:176:48 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt:544:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt:261:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt:629:60 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. + +> Task :app:compileDebugAndroidTestJavaWithJavac +> Task :app:processDebugAndroidTestJavaRes +> Task :app:mergeDebugAndroidTestJavaResource +> Task :app:dexBuilderDebugAndroidTest +> Task :app:mergeProjectDexDebugAndroidTest +> Task :app:packageDebugAndroidTest +> Task :app:createDebugAndroidTestApkListingFileRedirect +> Task :app:assembleDebugAndroidTest + +BUILD SUCCESSFUL in 24s +53 actionable tasks: 8 executed, 45 up-to-date +Consider enabling configuration cache to speed up this build: https://docs.gradle.org/9.4.1/userguide/configuration_cache_enabling.html diff --git a/docs/validation/native-input/checks/diagnostic-harness-build-v3.log b/docs/validation/native-input/checks/diagnostic-harness-build-v3.log new file mode 100644 index 00000000..5c21f915 --- /dev/null +++ b/docs/validation/native-input/checks/diagnostic-harness-build-v3.log @@ -0,0 +1,64 @@ +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:generateDebugBuildConfig UP-TO-DATE +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:packageDebugResources UP-TO-DATE +> Task :app:processDebugNavigationResources UP-TO-DATE +> Task :app:parseDebugLocalResources UP-TO-DATE +> Task :app:generateDebugRFile UP-TO-DATE +> Task :app:compileDebugKotlin UP-TO-DATE +> Task :app:javaPreCompileDebug UP-TO-DATE +> Task :app:compileDebugJavaWithJavac UP-TO-DATE +> Task :app:checkDebugAarMetadata UP-TO-DATE +> Task :app:mapDebugSourceSetPaths UP-TO-DATE +> Task :app:compileDebugNavigationResources UP-TO-DATE +> Task :app:mergeDebugResources UP-TO-DATE +> Task :app:createDebugCompatibleScreenManifests UP-TO-DATE +> Task :app:extractDeepLinksDebug UP-TO-DATE +> Task :app:processDebugMainManifest UP-TO-DATE +> Task :app:processDebugManifest UP-TO-DATE +> Task :app:processDebugManifestForPackage UP-TO-DATE +> Task :app:processDebugResources UP-TO-DATE +> Task :app:bundleDebugClassesToCompileJar UP-TO-DATE +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest UP-TO-DATE +> Task :app:generateDebugAndroidTestBuildConfig UP-TO-DATE +> Task :app:generateDebugAndroidTestResources UP-TO-DATE +> Task :app:packageDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:parseDebugAndroidTestLocalResources UP-TO-DATE +> Task :app:generateDebugAndroidTestRFile UP-TO-DATE +> Task :app:javaPreCompileDebugAndroidTest UP-TO-DATE +> Task :app:generateDebugAndroidTestAssets UP-TO-DATE +> Task :app:mergeDebugAndroidTestAssets UP-TO-DATE +> Task :app:compressDebugAndroidTestAssets UP-TO-DATE +> Task :app:generateDebugAndroidTestGlobalSynthetics UP-TO-DATE +> Task :app:checkDebugAndroidTestDuplicateClasses UP-TO-DATE +> Task :app:desugarDebugAndroidTestFileDependencies UP-TO-DATE +> Task :app:mergeExtDexDebugAndroidTest UP-TO-DATE +> Task :app:mergeLibDexDebugAndroidTest UP-TO-DATE +> Task :app:checkDebugAndroidTestAarMetadata UP-TO-DATE +> Task :app:mapDebugAndroidTestSourceSetPaths UP-TO-DATE +> Task :app:compileDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestJniLibFolders UP-TO-DATE +> Task :app:mergeDebugJniLibFolders UP-TO-DATE +> Task :app:mergeDebugNativeLibs UP-TO-DATE +> Task :app:mergeDebugAndroidTestNativeLibs NO-SOURCE +> Task :app:stripDebugAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningDebugAndroidTest UP-TO-DATE +> Task :app:writeDebugAndroidTestSigningConfigVersions UP-TO-DATE +> Task :app:compileDebugAndroidTestKotlin +> Task :app:compileDebugAndroidTestJavaWithJavac UP-TO-DATE +> Task :app:processDebugAndroidTestJavaRes UP-TO-DATE +> Task :app:mergeDebugAndroidTestJavaResource UP-TO-DATE +> Task :app:dexBuilderDebugAndroidTest +> Task :app:mergeProjectDexDebugAndroidTest +> Task :app:packageDebugAndroidTest +> Task :app:createDebugAndroidTestApkListingFileRedirect UP-TO-DATE +> Task :app:assembleDebugAndroidTest + +BUILD SUCCESSFUL in 6s +53 actionable tasks: 4 executed, 49 up-to-date +Consider enabling configuration cache to speed up this build: https://docs.gradle.org/9.4.1/userguide/configuration_cache_enabling.html diff --git a/docs/validation/native-input/checks/final-benchmark-build-v2.log b/docs/validation/native-input/checks/final-benchmark-build-v2.log new file mode 100644 index 00000000..51781295 --- /dev/null +++ b/docs/validation/native-input/checks/final-benchmark-build-v2.log @@ -0,0 +1,142 @@ +To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/9.4.1/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation. +Daemon will be stopped at the end of the build +> Task :app:preBuild UP-TO-DATE +> Task :app:preBenchmarkBuild UP-TO-DATE +> Task :app:mergeBenchmarkJniLibFolders +> Task :app:mergeBenchmarkNativeLibs + +> Task :app:stripBenchmarkDebugSymbols +Unable to strip the following libraries, packaging them as they are: libandroidx.graphics.path.so. Run with --info option to learn more. + +> Task :app:extractBenchmarkNativeSymbolTables +> Task :app:mergeBenchmarkNativeDebugMetadata NO-SOURCE +> Task :app:mergeBenchmarkArtProfile +> Task :app:desugarBenchmarkFileDependencies +> Task :app:generateBenchmarkBuildConfig +> Task :app:generateBenchmarkResources +> Task :app:packageBenchmarkResources +> Task :app:processBenchmarkNavigationResources +> Task :app:parseBenchmarkLocalResources +> Task :app:generateBenchmarkRFile +> Task :app:compileBenchmarkKotlin +w: file:///app/src/main/java/dev/tinycast/android/CalculatorActions.kt:13:46 Non-public primary constructor is exposed via the generated 'copy()' method of the 'data' class. + +The generated 'copy()' will change its visibility in future releases. + +To suppress the warning do one of the following: +- Annotate the data class with the '@ConsistentCopyVisibility' annotation. +- Use the '-Xconsistent-data-class-copy-visibility' compiler flag. +- Annotate the data class with the '@ExposedCopyVisibility' annotation + (Discouraged, but can be used to keep binary compatibility). + +To learn more, see the documentation of the '@ConsistentCopyVisibility' and '@ExposedCopyVisibility' annotations. + +This will become an error in language version 2.3. +w: file:///app/src/main/java/dev/tinycast/android/EmojiUi.kt:98:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteMenus.kt:325:43 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteMenus.kt:389:63 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteUi.kt:180:51 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteUi.kt:257:51 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/SettingsActivity.kt:50:205 'static field SOFT_INPUT_ADJUST_RESIZE: Int' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt:25:128 'static field SOFT_INPUT_ADJUST_RESIZE: Int' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt:30:118 Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type 'Any?'. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt:215:43 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt:229:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. + +> Task :app:javaPreCompileBenchmark +> Task :app:compileBenchmarkJavaWithJavac +> Task :app:checkBenchmarkAarMetadata +> Task :app:mapBenchmarkSourceSetPaths +> Task :app:compileBenchmarkNavigationResources +> Task :app:mergeBenchmarkResources +> Task :app:createBenchmarkCompatibleScreenManifests +> Task :app:extractDeepLinksBenchmark +> Task :app:processBenchmarkMainManifest +> Task :app:processBenchmarkManifest +> Task :app:processBenchmarkManifestForPackage +> Task :app:processBenchmarkResources +> Task :app:dexBuilderBenchmark +> Task :app:mergeBenchmarkGlobalSynthetics +> Task :app:checkBenchmarkDuplicateClasses +> Task :app:mergeBenchmarkStartupProfile +> Task :app:mergeExtDexBenchmark +> Task :app:mergeDexBenchmark +> Task :app:compileBenchmarkArtProfile +> Task :app:generateBenchmarkAssets UP-TO-DATE +> Task :app:mergeBenchmarkAssets +> Task :app:compressBenchmarkAssets +> Task :app:extractBenchmarkVersionControlInfo +> Task :app:extractProguardFiles UP-TO-DATE +> Task :app:generateBenchmarkLintVitalReportModel +> Task :app:lintVitalAnalyzeBenchmark +> Task :app:lintVitalReportBenchmark SKIPPED +> Task :app:lintVitalBenchmark SKIPPED +> Task :app:processBenchmarkJavaRes +> Task :app:mergeBenchmarkJavaResource +> Task :app:optimizeBenchmarkResources +> Task :app:collectBenchmarkDependencies +> Task :app:sdkBenchmarkDependencyData +> Task :app:validateSigningBenchmark +> Task :app:writeBenchmarkAppMetadata +> Task :app:writeBenchmarkSigningConfigVersions +> Task :app:packageBenchmark +> Task :app:createBenchmarkApkListingFileRedirect +> Task :app:assembleBenchmark +> Task :app:bundleBenchmarkClassesToCompileJar +> Task :app:preBenchmarkAndroidTestBuild SKIPPED +> Task :app:processBenchmarkAndroidTestManifest +> Task :app:generateBenchmarkAndroidTestBuildConfig +> Task :app:generateBenchmarkAndroidTestResources +> Task :app:packageBenchmarkAndroidTestResources +> Task :app:processBenchmarkAndroidTestNavigationResources +> Task :app:parseBenchmarkAndroidTestLocalResources +> Task :app:generateBenchmarkAndroidTestRFile +> Task :app:compileBenchmarkAndroidTestKotlin +w: file:///app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt:171:41 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt:176:48 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt:544:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt:261:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt:629:60 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. + +> Task :app:javaPreCompileBenchmarkAndroidTest +> Task :app:compileBenchmarkAndroidTestJavaWithJavac +> Task :app:generateBenchmarkAndroidTestAssets UP-TO-DATE +> Task :app:mergeBenchmarkAndroidTestAssets +> Task :app:compressBenchmarkAndroidTestAssets +> Task :app:desugarBenchmarkAndroidTestFileDependencies +> Task :app:checkBenchmarkAndroidTestAarMetadata +> Task :app:mapBenchmarkAndroidTestSourceSetPaths +> Task :app:compileBenchmarkAndroidTestNavigationResources +> Task :app:mergeBenchmarkAndroidTestResources +> Task :app:processBenchmarkAndroidTestResources +> Task :app:dexBuilderBenchmarkAndroidTest +> Task :app:mergeBenchmarkAndroidTestGlobalSynthetics +> Task :app:processBenchmarkAndroidTestJavaRes +> Task :app:mergeBenchmarkAndroidTestJavaResource +> Task :app:checkBenchmarkAndroidTestDuplicateClasses +> Task :app:mergeExtDexBenchmarkAndroidTest +> Task :app:mergeDexBenchmarkAndroidTest +> Task :app:mergeBenchmarkAndroidTestJniLibFolders +> Task :app:mergeBenchmarkAndroidTestNativeLibs NO-SOURCE +> Task :app:stripBenchmarkAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningBenchmarkAndroidTest +> Task :app:writeBenchmarkAndroidTestSigningConfigVersions +> Task :app:packageBenchmarkAndroidTest +> Task :app:createBenchmarkAndroidTestApkListingFileRedirect +> Task :app:assembleBenchmarkAndroidTest +> Task :app:generateBenchmarkAndroidTestLintModel +> Task :app:generateBenchmarkLintReportModel +> Task :app:preBenchmarkUnitTestBuild UP-TO-DATE +> Task :app:generateBenchmarkUnitTestLintModel +> Task :app:lintAnalyzeBenchmark +> Task :app:lintAnalyzeBenchmarkAndroidTest +> Task :app:lintAnalyzeBenchmarkUnitTest + +> Task :app:lintReportBenchmark +Wrote HTML report to file:///app/build/reports/lint-results-benchmark.html + +> Task :app:lintBenchmark + +BUILD SUCCESSFUL in 11m 23s +87 actionable tasks: 86 executed, 1 up-to-date +Consider enabling configuration cache to speed up this build: https://docs.gradle.org/9.4.1/userguide/configuration_cache_enabling.html diff --git a/docs/validation/native-input/checks/final-build-checks-v1.log b/docs/validation/native-input/checks/final-build-checks-v1.log new file mode 100644 index 00000000..2c6d801b --- /dev/null +++ b/docs/validation/native-input/checks/final-build-checks-v1.log @@ -0,0 +1,17 @@ + +[Incubating] Problems report is available at: file:///build/reports/problems/problems-report.html + +FAILURE: Build failed with an exception. + +* What went wrong: +Cannot locate tasks that match ':app:assembleBenchmarkAndroidTest' as task 'assembleBenchmarkAndroidTest' not found in project ':app'. + +* Try: +> Run gradlew tasks to get a list of available tasks. +> For more on name expansion, please refer to https://docs.gradle.org/9.4.1/userguide/command_line_interface.html#sec:name_abbreviation in the Gradle documentation. +> Run with --stacktrace option to get the stack trace. +> Run with --info or --debug option to get more log output. +> Run with --scan to get full insights from a Build Scan (powered by Develocity). +> Get more help at https://help.gradle.org. + +BUILD FAILED in 812ms diff --git a/docs/validation/native-input/checks/final-build-checks-v2.log b/docs/validation/native-input/checks/final-build-checks-v2.log new file mode 100644 index 00000000..e69de29b diff --git a/docs/validation/native-input/checks/final-build-checks-v3.log b/docs/validation/native-input/checks/final-build-checks-v3.log new file mode 100644 index 00000000..e0a5a7c1 --- /dev/null +++ b/docs/validation/native-input/checks/final-build-checks-v3.log @@ -0,0 +1,237 @@ +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:mergeDebugNativeDebugMetadata NO-SOURCE +> Task :app:generateDebugBuildConfig UP-TO-DATE +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:packageDebugResources UP-TO-DATE +> Task :app:processDebugNavigationResources UP-TO-DATE +> Task :app:parseDebugLocalResources UP-TO-DATE +> Task :app:generateDebugRFile UP-TO-DATE +> Task :app:compileDebugKotlin UP-TO-DATE +> Task :app:javaPreCompileDebug UP-TO-DATE +> Task :app:compileDebugJavaWithJavac UP-TO-DATE +> Task :app:generateDebugAssets UP-TO-DATE +> Task :app:mergeDebugAssets +> Task :app:compressDebugAssets +> Task :app:generateDebugGlobalSynthetics +> Task :app:processDebugJavaRes +> Task :app:desugarDebugFileDependencies +> Task :app:checkDebugAarMetadata UP-TO-DATE +> Task :app:mapDebugSourceSetPaths UP-TO-DATE +> Task :app:compileDebugNavigationResources UP-TO-DATE +> Task :app:mergeDebugResources UP-TO-DATE +> Task :app:createDebugCompatibleScreenManifests UP-TO-DATE +> Task :app:extractDeepLinksDebug UP-TO-DATE +> Task :app:processDebugMainManifest UP-TO-DATE +> Task :app:processDebugManifest UP-TO-DATE +> Task :app:processDebugManifestForPackage UP-TO-DATE +> Task :app:checkDebugDuplicateClasses +> Task :app:processDebugResources UP-TO-DATE +> Task :app:mergeLibDexDebug +> Task :app:mergeDebugJavaResource +> Task :app:mergeExtDexDebug +> Task :app:dexBuilderDebug +> Task :app:mergeDebugJniLibFolders UP-TO-DATE +> Task :app:mergeDebugNativeLibs UP-TO-DATE +> Task :app:validateSigningDebug +> Task :app:writeDebugAppMetadata +> Task :app:writeDebugSigningConfigVersions +> Task :app:bundleDebugClassesToCompileJar UP-TO-DATE +> Task :app:preDebugAndroidTestBuild SKIPPED + +> Task :app:stripDebugDebugSymbols +Unable to strip the following libraries, packaging them as they are: libandroidx.graphics.path.so. Run with --info option to learn more. + +> Task :app:processDebugAndroidTestManifest UP-TO-DATE +> Task :app:generateDebugAndroidTestBuildConfig UP-TO-DATE +> Task :app:generateDebugAndroidTestResources UP-TO-DATE +> Task :app:packageDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:parseDebugAndroidTestLocalResources UP-TO-DATE +> Task :app:generateDebugAndroidTestRFile UP-TO-DATE +> Task :app:mergeProjectDexDebug +> Task :app:javaPreCompileDebugAndroidTest UP-TO-DATE +> Task :app:generateDebugAndroidTestAssets UP-TO-DATE +> Task :app:mergeDebugAndroidTestAssets UP-TO-DATE +> Task :app:compressDebugAndroidTestAssets UP-TO-DATE +> Task :app:generateDebugAndroidTestGlobalSynthetics UP-TO-DATE +> Task :app:checkDebugAndroidTestDuplicateClasses UP-TO-DATE +> Task :app:desugarDebugAndroidTestFileDependencies UP-TO-DATE +> Task :app:mergeExtDexDebugAndroidTest UP-TO-DATE +> Task :app:mergeLibDexDebugAndroidTest UP-TO-DATE +> Task :app:checkDebugAndroidTestAarMetadata UP-TO-DATE +> Task :app:mapDebugAndroidTestSourceSetPaths UP-TO-DATE +> Task :app:compileDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestJniLibFolders UP-TO-DATE +> Task :app:mergeDebugAndroidTestNativeLibs NO-SOURCE +> Task :app:stripDebugAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningDebugAndroidTest UP-TO-DATE +> Task :app:writeDebugAndroidTestSigningConfigVersions UP-TO-DATE +> Task :app:preDebugUnitTestBuild UP-TO-DATE +> Task :app:bundleDebugClassesToRuntimeJar +> Task :app:javaPreCompileDebugUnitTest +> Task :app:generateDebugAndroidTestLintModel +> Task :app:extractProguardFiles +> Task :app:generateDebugLintReportModel +> Task :app:packageDebug +> Task :app:createDebugApkListingFileRedirect +> Task :app:assembleDebug +> Task :app:generateDebugUnitTestLintModel +> Task :app:compileDebugAndroidTestKotlin +> Task :app:compileDebugAndroidTestJavaWithJavac UP-TO-DATE +> Task :app:processDebugAndroidTestJavaRes UP-TO-DATE +> Task :app:mergeDebugAndroidTestJavaResource UP-TO-DATE +> Task :app:dexBuilderDebugAndroidTest +> Task :app:preBenchmarkBuild UP-TO-DATE +> Task :app:generateBenchmarkBuildConfig +> Task :app:generateBenchmarkResources +> Task :app:packageBenchmarkResources +> Task :app:processBenchmarkNavigationResources +> Task :app:extractDeepLinksBenchmark +> Task :app:javaPreCompileBenchmark +> Task :app:parseBenchmarkLocalResources +> Task :app:processBenchmarkMainManifest +> Task :app:generateBenchmarkRFile +> Task :app:mergeProjectDexDebugAndroidTest +> Task :app:packageDebugAndroidTest +> Task :app:createDebugAndroidTestApkListingFileRedirect UP-TO-DATE +> Task :app:assembleDebugAndroidTest +> Task :app:compileDebugUnitTestKotlin +> Task :app:compileDebugUnitTestJavaWithJavac NO-SOURCE +> Task :app:processDebugUnitTestJavaRes +> Task :app:testDebugUnitTest +> Task :app:lintAnalyzeDebug +> Task :app:lintAnalyzeDebugAndroidTest +> Task :app:lintAnalyzeDebugUnitTest +> Task :app:compileBenchmarkKotlin +e: Daemon compilation failed: null +java.lang.Exception + at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:69) + at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:65) + at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:240) + at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159) + at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111) + at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74) + at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61) + at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61) + at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44) + at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41) + at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210) + at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205) + at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67) + at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60) + at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167) + at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60) + at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54) + at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58) + at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169) + at org.gradle.internal.Factories$1.create(Factories.java:30) + at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:275) +Failed to compile with Kotlin daemon: java.lang.Exception + at org.gradle.internal.work.ResourceLockStatistics$1.measure(ResourceLockStatistics.java:43) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +FAILURE: Build failed with an exception. + +* What went wrong: +Execution failed for task ':app:compileBenchmarkKotlin'. +> A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction + > /app/build/20261105_10958443377919924357.compiler.options: No space left on device + +* Try: +> Run with --stacktrace option to get the stack trace. +> Run with --info or --debug option to get more log output. +> Run with --scan to get full insights from a Build Scan (powered by Develocity). +> Get more help at https://help.gradle.org. + +BUILD FAILED in 3m 13s + at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:69) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +92 actionable tasks: 43 executed, 49 up-to-date + +FAILURE: Build failed with an exception. + +* What went wrong: +Could not add entry ':app:compileBenchmarkKotlin' to cache executionHistory.bin (/.gradle/9.4.1/executionHistory/executionHistory.bin). +> Could not add entry ':app:compileBenchmarkKotlin' to cache executionHistory.bin (/.gradle/9.4.1/executionHistory/executionHistory.bin). + +* Try: +> Run with --stacktrace option to get the stack trace. +> Run with --info or --debug option to get more log output. +> Run with --scan to get full insights from a Build Scan (powered by Develocity). +> Get more help at https://help.gradle.org. + +BUILD FAILED in 3m 13s diff --git a/docs/validation/native-input/checks/final-owned-build-v1.log b/docs/validation/native-input/checks/final-owned-build-v1.log new file mode 100644 index 00000000..0bbaa4ed --- /dev/null +++ b/docs/validation/native-input/checks/final-owned-build-v1.log @@ -0,0 +1,139 @@ +To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/9.4.1/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation. +Daemon will be stopped at the end of the build +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:mergeDebugNativeDebugMetadata NO-SOURCE +> Task :app:generateDebugBuildConfig +> Task :app:generateDebugResources +> Task :app:packageDebugResources +> Task :app:processDebugNavigationResources +> Task :app:parseDebugLocalResources +> Task :app:generateDebugRFile +> Task :app:compileDebugKotlin +w: file:///app/src/main/java/dev/tinycast/android/CalculatorActions.kt:13:46 Non-public primary constructor is exposed via the generated 'copy()' method of the 'data' class. + +The generated 'copy()' will change its visibility in future releases. + +To suppress the warning do one of the following: +- Annotate the data class with the '@ConsistentCopyVisibility' annotation. +- Use the '-Xconsistent-data-class-copy-visibility' compiler flag. +- Annotate the data class with the '@ExposedCopyVisibility' annotation + (Discouraged, but can be used to keep binary compatibility). + +To learn more, see the documentation of the '@ConsistentCopyVisibility' and '@ExposedCopyVisibility' annotations. + +This will become an error in language version 2.3. +w: file:///app/src/main/java/dev/tinycast/android/EmojiUi.kt:98:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteMenus.kt:325:43 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteMenus.kt:389:63 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteUi.kt:180:51 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteUi.kt:257:51 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/SettingsActivity.kt:50:205 'static field SOFT_INPUT_ADJUST_RESIZE: Int' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt:25:128 'static field SOFT_INPUT_ADJUST_RESIZE: Int' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt:30:118 Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type 'Any?'. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt:215:43 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt:229:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. + +> Task :app:javaPreCompileDebug +> Task :app:compileDebugJavaWithJavac +> Task :app:generateDebugAssets UP-TO-DATE +> Task :app:mergeDebugAssets +> Task :app:compressDebugAssets +> Task :app:generateDebugGlobalSynthetics +> Task :app:processDebugJavaRes +> Task :app:mergeDebugJavaResource +> Task :app:checkDebugDuplicateClasses +> Task :app:desugarDebugFileDependencies +> Task :app:mergeExtDexDebug +> Task :app:mergeLibDexDebug +> Task :app:checkDebugAarMetadata +> Task :app:mapDebugSourceSetPaths +> Task :app:compileDebugNavigationResources +> Task :app:mergeDebugResources +> Task :app:createDebugCompatibleScreenManifests +> Task :app:extractDeepLinksDebug +> Task :app:processDebugMainManifest +> Task :app:processDebugManifest +> Task :app:processDebugManifestForPackage +> Task :app:processDebugResources +> Task :app:dexBuilderDebug +> Task :app:mergeProjectDexDebug +> Task :app:mergeDebugJniLibFolders +> Task :app:mergeDebugNativeLibs + +> Task :app:stripDebugDebugSymbols +Unable to strip the following libraries, packaging them as they are: libandroidx.graphics.path.so. Run with --info option to learn more. + +> Task :app:validateSigningDebug +> Task :app:writeDebugAppMetadata +> Task :app:writeDebugSigningConfigVersions +> Task :app:packageDebug +> Task :app:createDebugApkListingFileRedirect +> Task :app:assembleDebug +> Task :app:bundleDebugClassesToCompileJar +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest +> Task :app:generateDebugAndroidTestBuildConfig +> Task :app:generateDebugAndroidTestResources +> Task :app:packageDebugAndroidTestResources +> Task :app:processDebugAndroidTestNavigationResources +> Task :app:parseDebugAndroidTestLocalResources +> Task :app:generateDebugAndroidTestRFile + +> Task :app:compileDebugAndroidTestKotlin +w: file:///app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt:171:41 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt:176:48 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt:544:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt:261:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt:629:60 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. + +> Task :app:javaPreCompileDebugAndroidTest +> Task :app:compileDebugAndroidTestJavaWithJavac +> Task :app:generateDebugAndroidTestAssets UP-TO-DATE +> Task :app:mergeDebugAndroidTestAssets +> Task :app:compressDebugAndroidTestAssets +> Task :app:generateDebugAndroidTestGlobalSynthetics +> Task :app:processDebugAndroidTestJavaRes +> Task :app:mergeDebugAndroidTestJavaResource +> Task :app:checkDebugAndroidTestDuplicateClasses +> Task :app:desugarDebugAndroidTestFileDependencies +> Task :app:mergeExtDexDebugAndroidTest +> Task :app:mergeLibDexDebugAndroidTest +> Task :app:checkDebugAndroidTestAarMetadata +> Task :app:mapDebugAndroidTestSourceSetPaths +> Task :app:compileDebugAndroidTestNavigationResources +> Task :app:mergeDebugAndroidTestResources +> Task :app:processDebugAndroidTestResources +> Task :app:dexBuilderDebugAndroidTest +> Task :app:mergeProjectDexDebugAndroidTest +> Task :app:mergeDebugAndroidTestJniLibFolders +> Task :app:mergeDebugAndroidTestNativeLibs NO-SOURCE +> Task :app:stripDebugAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningDebugAndroidTest +> Task :app:writeDebugAndroidTestSigningConfigVersions +> Task :app:packageDebugAndroidTest +> Task :app:createDebugAndroidTestApkListingFileRedirect +> Task :app:assembleDebugAndroidTest +> Task :app:bundleDebugClassesToRuntimeJar +> Task :app:preDebugUnitTestBuild UP-TO-DATE +> Task :app:compileDebugUnitTestKotlin +> Task :app:javaPreCompileDebugUnitTest +> Task :app:compileDebugUnitTestJavaWithJavac NO-SOURCE +> Task :app:processDebugUnitTestJavaRes +> Task :app:testDebugUnitTest +> Task :app:generateDebugAndroidTestLintModel +> Task :app:extractProguardFiles +> Task :app:generateDebugLintReportModel +> Task :app:generateDebugUnitTestLintModel +> Task :app:lintAnalyzeDebug +> Task :app:lintAnalyzeDebugAndroidTest +> Task :app:lintAnalyzeDebugUnitTest + +> Task :app:lintReportDebug +Wrote HTML report to file:///app/build/reports/lint-results-debug.html + +> Task :app:lintDebug + +BUILD SUCCESSFUL in 6m 55s +84 actionable tasks: 84 executed +Consider enabling configuration cache to speed up this build: https://docs.gradle.org/9.4.1/userguide/configuration_cache_enabling.html diff --git a/docs/validation/native-input/checks/final-v2-debug-assembly-prefix.log b/docs/validation/native-input/checks/final-v2-debug-assembly-prefix.log new file mode 100644 index 00000000..6ae43b0d --- /dev/null +++ b/docs/validation/native-input/checks/final-v2-debug-assembly-prefix.log @@ -0,0 +1,140 @@ +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:mergeDebugNativeDebugMetadata NO-SOURCE +> Task :app:generateDebugBuildConfig UP-TO-DATE +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:packageDebugResources UP-TO-DATE +> Task :app:processDebugNavigationResources UP-TO-DATE +> Task :app:parseDebugLocalResources UP-TO-DATE +> Task :app:generateDebugRFile UP-TO-DATE +> Task :app:compileDebugKotlin UP-TO-DATE +> Task :app:javaPreCompileDebug UP-TO-DATE +> Task :app:compileDebugJavaWithJavac UP-TO-DATE +> Task :app:generateDebugAssets UP-TO-DATE +> Task :app:mergeDebugAssets +> Task :app:compressDebugAssets +> Task :app:generateDebugGlobalSynthetics +> Task :app:processDebugJavaRes +> Task :app:desugarDebugFileDependencies +> Task :app:checkDebugAarMetadata UP-TO-DATE +> Task :app:mapDebugSourceSetPaths UP-TO-DATE +> Task :app:compileDebugNavigationResources UP-TO-DATE +> Task :app:mergeDebugResources UP-TO-DATE +> Task :app:createDebugCompatibleScreenManifests UP-TO-DATE +> Task :app:extractDeepLinksDebug UP-TO-DATE +> Task :app:processDebugMainManifest UP-TO-DATE +> Task :app:processDebugManifest UP-TO-DATE +> Task :app:processDebugManifestForPackage UP-TO-DATE +> Task :app:checkDebugDuplicateClasses +> Task :app:processDebugResources UP-TO-DATE +> Task :app:mergeLibDexDebug +> Task :app:mergeDebugJavaResource +> Task :app:mergeExtDexDebug +> Task :app:dexBuilderDebug +> Task :app:mergeDebugJniLibFolders UP-TO-DATE +> Task :app:mergeDebugNativeLibs UP-TO-DATE +> Task :app:validateSigningDebug +> Task :app:writeDebugAppMetadata +> Task :app:writeDebugSigningConfigVersions +> Task :app:bundleDebugClassesToCompileJar UP-TO-DATE +> Task :app:preDebugAndroidTestBuild SKIPPED + +> Task :app:stripDebugDebugSymbols +Unable to strip the following libraries, packaging them as they are: libandroidx.graphics.path.so. Run with --info option to learn more. + +> Task :app:processDebugAndroidTestManifest UP-TO-DATE +> Task :app:generateDebugAndroidTestBuildConfig UP-TO-DATE +> Task :app:generateDebugAndroidTestResources UP-TO-DATE +> Task :app:packageDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:parseDebugAndroidTestLocalResources UP-TO-DATE +> Task :app:generateDebugAndroidTestRFile UP-TO-DATE +> Task :app:mergeProjectDexDebug +> Task :app:javaPreCompileDebugAndroidTest UP-TO-DATE +> Task :app:generateDebugAndroidTestAssets UP-TO-DATE +> Task :app:mergeDebugAndroidTestAssets UP-TO-DATE +> Task :app:compressDebugAndroidTestAssets UP-TO-DATE +> Task :app:generateDebugAndroidTestGlobalSynthetics UP-TO-DATE +> Task :app:checkDebugAndroidTestDuplicateClasses UP-TO-DATE +> Task :app:desugarDebugAndroidTestFileDependencies UP-TO-DATE +> Task :app:mergeExtDexDebugAndroidTest UP-TO-DATE +> Task :app:mergeLibDexDebugAndroidTest UP-TO-DATE +> Task :app:checkDebugAndroidTestAarMetadata UP-TO-DATE +> Task :app:mapDebugAndroidTestSourceSetPaths UP-TO-DATE +> Task :app:compileDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestJniLibFolders UP-TO-DATE +> Task :app:mergeDebugAndroidTestNativeLibs NO-SOURCE +> Task :app:stripDebugAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningDebugAndroidTest UP-TO-DATE +> Task :app:writeDebugAndroidTestSigningConfigVersions UP-TO-DATE +> Task :app:preDebugUnitTestBuild UP-TO-DATE +> Task :app:bundleDebugClassesToRuntimeJar +> Task :app:javaPreCompileDebugUnitTest +> Task :app:generateDebugAndroidTestLintModel +> Task :app:extractProguardFiles +> Task :app:generateDebugLintReportModel +> Task :app:packageDebug +> Task :app:createDebugApkListingFileRedirect +> Task :app:assembleDebug +> Task :app:generateDebugUnitTestLintModel +> Task :app:compileDebugAndroidTestKotlin +> Task :app:compileDebugAndroidTestJavaWithJavac UP-TO-DATE +> Task :app:processDebugAndroidTestJavaRes UP-TO-DATE +> Task :app:mergeDebugAndroidTestJavaResource UP-TO-DATE +> Task :app:dexBuilderDebugAndroidTest +> Task :app:preBenchmarkBuild UP-TO-DATE +> Task :app:generateBenchmarkBuildConfig +> Task :app:generateBenchmarkResources +> Task :app:packageBenchmarkResources +> Task :app:processBenchmarkNavigationResources +> Task :app:extractDeepLinksBenchmark +> Task :app:javaPreCompileBenchmark +> Task :app:parseBenchmarkLocalResources +> Task :app:processBenchmarkMainManifest +> Task :app:generateBenchmarkRFile +> Task :app:mergeProjectDexDebugAndroidTest +> Task :app:packageDebugAndroidTest +> Task :app:createDebugAndroidTestApkListingFileRedirect UP-TO-DATE +> Task :app:assembleDebugAndroidTest +> Task :app:compileDebugUnitTestKotlin +> Task :app:compileDebugUnitTestJavaWithJavac NO-SOURCE +> Task :app:processDebugUnitTestJavaRes +> Task :app:testDebugUnitTest +> Task :app:lintAnalyzeDebug +> Task :app:lintAnalyzeDebugAndroidTest +> Task :app:lintAnalyzeDebugUnitTest +> Task :app:compileBenchmarkKotlin +e: Daemon compilation failed: null +java.lang.Exception + at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:69) + at org.jetbrains.kotlin.daemon.common.CompileService$CallResult$Error.get(CompileService.kt:65) + at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemon(GradleKotlinCompilerWork.kt:240) + at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.compileWithDaemonOrFallbackImpl(GradleKotlinCompilerWork.kt:159) + at org.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.run(GradleKotlinCompilerWork.kt:111) + at org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction.execute(GradleCompilerRunnerWithWorkers.kt:74) + at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:68) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:64) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:61) + at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:102) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:61) + at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44) + at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41) + at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:210) + at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:205) + at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:67) + at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:60) + at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:167) + at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:60) + at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:54) + at org.gradle.workers.internal.AbstractWorker.executeWrappedInBuildOperation(AbstractWorker.java:41) + at org.gradle.workers.internal.NoIsolationWorkerFactory$1.execute(NoIsolationWorkerFactory.java:58) + at org.gradle.workers.internal.DefaultWorkerExecutor.lambda$submitWork$0(DefaultWorkerExecutor.java:176) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.runExecution(DefaultConditionalExecutionQueue.java:194) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner.access$700(DefaultConditionalExecutionQueue.java:127) + at org.gradle.internal.work.DefaultConditionalExecutionQueue$ExecutionRunner$1.run(DefaultConditionalExecutionQueue.java:169) + at org.gradle.internal.Factories$1.create(Factories.java:30) + at org.gradle.internal.work.DefaultWorkerLeaseService.lambda$withLocksAcquired$0(DefaultWorkerLeaseService.java:275) +Failed to compile with Kotlin daemon: java.lang.Exception diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.BackupPlannerTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.BackupPlannerTest.xml new file mode 100644 index 00000000..2db41448 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.BackupPlannerTest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.CalculatorActionsTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.CalculatorActionsTest.xml new file mode 100644 index 00000000..fb8c1a7c --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.CalculatorActionsTest.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.CommandEngineTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.CommandEngineTest.xml new file mode 100644 index 00000000..e5ac3d8f --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.CommandEngineTest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.EmojiCatalogTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.EmojiCatalogTest.xml new file mode 100644 index 00000000..509dda32 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.EmojiCatalogTest.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionCommandLaunchTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionCommandLaunchTest.xml new file mode 100644 index 00000000..cf7e5e85 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionCommandLaunchTest.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionDetailImageTimeoutTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionDetailImageTimeoutTest.xml new file mode 100644 index 00000000..06ac2fee --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionDetailImageTimeoutTest.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionEngineCompatibilityTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionEngineCompatibilityTest.xml new file mode 100644 index 00000000..6bfdf363 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionEngineCompatibilityTest.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormContractTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormContractTest.xml new file mode 100644 index 00000000..3f096b69 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormContractTest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormFileImportTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormFileImportTest.xml new file mode 100644 index 00000000..c6ce9d68 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormFileImportTest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormSubmissionTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormSubmissionTest.xml new file mode 100644 index 00000000..b32a0912 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormSubmissionTest.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormTypedValuesTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormTypedValuesTest.xml new file mode 100644 index 00000000..9cd81e83 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormTypedValuesTest.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormValuesTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormValuesTest.xml new file mode 100644 index 00000000..54fe0616 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionFormValuesTest.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionGridContractTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionGridContractTest.xml new file mode 100644 index 00000000..8180aad4 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionGridContractTest.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionGridNavigationTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionGridNavigationTest.xml new file mode 100644 index 00000000..75f6790e --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionGridNavigationTest.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionHttpTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionHttpTest.xml new file mode 100644 index 00000000..9c51d074 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionHttpTest.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionMarkdownModelTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionMarkdownModelTest.xml new file mode 100644 index 00000000..b73a1608 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionMarkdownModelTest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionMetadataVisualsTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionMetadataVisualsTest.xml new file mode 100644 index 00000000..e84a73c4 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionMetadataVisualsTest.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionPasteCopyTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionPasteCopyTest.xml new file mode 100644 index 00000000..d2ae685f --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionPasteCopyTest.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionPayloadIdentityTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionPayloadIdentityTest.xml new file mode 100644 index 00000000..f3b9d990 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionPayloadIdentityTest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionSelectionDeliveryTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionSelectionDeliveryTest.xml new file mode 100644 index 00000000..95ff270e --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionSelectionDeliveryTest.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionWorkflowEvidenceTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionWorkflowEvidenceTest.xml new file mode 100644 index 00000000..0af4d570 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionWorkflowEvidenceTest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionWorkflowInspectionTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionWorkflowInspectionTest.xml new file mode 100644 index 00000000..033baf02 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ExtensionWorkflowInspectionTest.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.FolderGrantTransactionTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.FolderGrantTransactionTest.xml new file mode 100644 index 00000000..7b86d114 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.FolderGrantTransactionTest.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.FolderIndexTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.FolderIndexTest.xml new file mode 100644 index 00000000..0b8a489c --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.FolderIndexTest.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ModifierTapTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ModifierTapTest.xml new file mode 100644 index 00000000..20c7eafa --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ModifierTapTest.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.PaletteMenuOwnershipTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.PaletteMenuOwnershipTest.xml new file mode 100644 index 00000000..b3b5acb7 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.PaletteMenuOwnershipTest.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.PaletteScrollHistoryTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.PaletteScrollHistoryTest.xml new file mode 100644 index 00000000..d949c272 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.PaletteScrollHistoryTest.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ReviewedTextInputTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ReviewedTextInputTest.xml new file mode 100644 index 00000000..b3055987 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ReviewedTextInputTest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ShortcutReadinessTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ShortcutReadinessTest.xml new file mode 100644 index 00000000..989c27aa --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ShortcutReadinessTest.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ShortcutTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ShortcutTest.xml new file mode 100644 index 00000000..57e659d7 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.ShortcutTest.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.SystemSettingsTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.SystemSettingsTest.xml new file mode 100644 index 00000000..3b33a7af --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.SystemSettingsTest.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.TinycastGridParityTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.TinycastGridParityTest.xml new file mode 100644 index 00000000..bb67bf3f --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.TinycastGridParityTest.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.UpdatePolicyTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.UpdatePolicyTest.xml new file mode 100644 index 00000000..796fef72 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.UpdatePolicyTest.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.WeakValueTokensTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.WeakValueTokensTest.xml new file mode 100644 index 00000000..b8379b3f --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.WeakValueTokensTest.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.CommonMarkPrimaryConformanceTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.CommonMarkPrimaryConformanceTest.xml new file mode 100644 index 00000000..9756885f --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.CommonMarkPrimaryConformanceTest.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest.xml new file mode 100644 index 00000000..9f00b4af --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.ExtensionDetailImagePolicyTest.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.NodeCpuInfoTest.xml b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.NodeCpuInfoTest.xml new file mode 100644 index 00000000..5a767951 --- /dev/null +++ b/docs/validation/native-input/checks/jvm/TEST-dev.tinycast.android.extensions.NodeCpuInfoTest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/lint-results-benchmark.xml b/docs/validation/native-input/checks/lint-results-benchmark.xml new file mode 100644 index 00000000..fa4f5121 --- /dev/null +++ b/docs/validation/native-input/checks/lint-results-benchmark.xml @@ -0,0 +1,902 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/lint-results-debug.xml b/docs/validation/native-input/checks/lint-results-debug.xml new file mode 100644 index 00000000..fa4f5121 --- /dev/null +++ b/docs/validation/native-input/checks/lint-results-debug.xml @@ -0,0 +1,902 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/validation/native-input/checks/owned-v3-debug-assembly-prefix.log b/docs/validation/native-input/checks/owned-v3-debug-assembly-prefix.log new file mode 100644 index 00000000..eab31e11 --- /dev/null +++ b/docs/validation/native-input/checks/owned-v3-debug-assembly-prefix.log @@ -0,0 +1,128 @@ +To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/9.4.1/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation. +Daemon will be stopped at the end of the build +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:mergeDebugNativeDebugMetadata NO-SOURCE +> Task :app:generateDebugBuildConfig +> Task :app:generateDebugResources +> Task :app:packageDebugResources +> Task :app:processDebugNavigationResources +> Task :app:parseDebugLocalResources +> Task :app:generateDebugRFile +> Task :app:compileDebugKotlin +w: file:///app/src/main/java/dev/tinycast/android/CalculatorActions.kt:13:46 Non-public primary constructor is exposed via the generated 'copy()' method of the 'data' class. + +The generated 'copy()' will change its visibility in future releases. + +To suppress the warning do one of the following: +- Annotate the data class with the '@ConsistentCopyVisibility' annotation. +- Use the '-Xconsistent-data-class-copy-visibility' compiler flag. +- Annotate the data class with the '@ExposedCopyVisibility' annotation + (Discouraged, but can be used to keep binary compatibility). + +To learn more, see the documentation of the '@ConsistentCopyVisibility' and '@ExposedCopyVisibility' annotations. + +This will become an error in language version 2.3. +w: file:///app/src/main/java/dev/tinycast/android/EmojiUi.kt:98:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteMenus.kt:325:43 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteMenus.kt:389:63 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteUi.kt:180:51 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/PaletteUi.kt:257:51 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/SettingsActivity.kt:50:205 'static field SOFT_INPUT_ADJUST_RESIZE: Int' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt:25:128 'static field SOFT_INPUT_ADJUST_RESIZE: Int' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt:30:118 Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type 'Any?'. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt:215:43 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt:229:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. + +> Task :app:javaPreCompileDebug +> Task :app:compileDebugJavaWithJavac +> Task :app:generateDebugAssets UP-TO-DATE +> Task :app:mergeDebugAssets +> Task :app:compressDebugAssets +> Task :app:generateDebugGlobalSynthetics +> Task :app:processDebugJavaRes +> Task :app:mergeDebugJavaResource +> Task :app:checkDebugDuplicateClasses +> Task :app:desugarDebugFileDependencies +> Task :app:mergeExtDexDebug +> Task :app:mergeLibDexDebug +> Task :app:checkDebugAarMetadata +> Task :app:mapDebugSourceSetPaths +> Task :app:compileDebugNavigationResources +> Task :app:mergeDebugResources +> Task :app:createDebugCompatibleScreenManifests +> Task :app:extractDeepLinksDebug +> Task :app:processDebugMainManifest +> Task :app:processDebugManifest +> Task :app:processDebugManifestForPackage +> Task :app:processDebugResources +> Task :app:dexBuilderDebug +> Task :app:mergeProjectDexDebug +> Task :app:mergeDebugJniLibFolders +> Task :app:mergeDebugNativeLibs + +> Task :app:stripDebugDebugSymbols +Unable to strip the following libraries, packaging them as they are: libandroidx.graphics.path.so. Run with --info option to learn more. + +> Task :app:validateSigningDebug +> Task :app:writeDebugAppMetadata +> Task :app:writeDebugSigningConfigVersions +> Task :app:packageDebug +> Task :app:createDebugApkListingFileRedirect +> Task :app:assembleDebug +> Task :app:bundleDebugClassesToCompileJar +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest +> Task :app:generateDebugAndroidTestBuildConfig +> Task :app:generateDebugAndroidTestResources +> Task :app:packageDebugAndroidTestResources +> Task :app:processDebugAndroidTestNavigationResources +> Task :app:parseDebugAndroidTestLocalResources +> Task :app:generateDebugAndroidTestRFile + +> Task :app:compileDebugAndroidTestKotlin +w: file:///app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt:171:41 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt:176:48 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt:544:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt:261:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt:629:60 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. + +> Task :app:javaPreCompileDebugAndroidTest +> Task :app:compileDebugAndroidTestJavaWithJavac +> Task :app:generateDebugAndroidTestAssets UP-TO-DATE +> Task :app:mergeDebugAndroidTestAssets +> Task :app:compressDebugAndroidTestAssets +> Task :app:generateDebugAndroidTestGlobalSynthetics +> Task :app:processDebugAndroidTestJavaRes +> Task :app:mergeDebugAndroidTestJavaResource +> Task :app:checkDebugAndroidTestDuplicateClasses +> Task :app:desugarDebugAndroidTestFileDependencies +> Task :app:mergeExtDexDebugAndroidTest +> Task :app:mergeLibDexDebugAndroidTest +> Task :app:checkDebugAndroidTestAarMetadata +> Task :app:mapDebugAndroidTestSourceSetPaths +> Task :app:compileDebugAndroidTestNavigationResources +> Task :app:mergeDebugAndroidTestResources +> Task :app:processDebugAndroidTestResources +> Task :app:dexBuilderDebugAndroidTest +> Task :app:mergeProjectDexDebugAndroidTest +> Task :app:mergeDebugAndroidTestJniLibFolders +> Task :app:mergeDebugAndroidTestNativeLibs NO-SOURCE +> Task :app:stripDebugAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningDebugAndroidTest +> Task :app:writeDebugAndroidTestSigningConfigVersions +> Task :app:packageDebugAndroidTest +> Task :app:createDebugAndroidTestApkListingFileRedirect +> Task :app:assembleDebugAndroidTest +> Task :app:bundleDebugClassesToRuntimeJar +> Task :app:preDebugUnitTestBuild UP-TO-DATE +> Task :app:compileDebugUnitTestKotlin +> Task :app:javaPreCompileDebugUnitTest +> Task :app:compileDebugUnitTestJavaWithJavac NO-SOURCE +> Task :app:processDebugUnitTestJavaRes +> Task :app:testDebugUnitTest +> Task :app:generateDebugAndroidTestLintModel +> Task :app:extractProguardFiles +> Task :app:generateDebugLintReportModel +> Task :app:generateDebugUnitTestLintModel +> Task :app:lintAnalyzeDebug diff --git a/docs/validation/native-input/checks/python-final-v2.log b/docs/validation/native-input/checks/python-final-v2.log new file mode 100644 index 00000000..0609fe8b --- /dev/null +++ b/docs/validation/native-input/checks/python-final-v2.log @@ -0,0 +1,6 @@ +.................................................................................................................................. +---------------------------------------------------------------------- +Ran 130 tests in 36.713s + +OK +{"all_directories_attempted": false, "declared_commands": 0, "directory_count": 2, "independently_anchored_manifests": 0, "manifest_discovery_complete": false, "manifests_read": 0, "not_yet_inspected": 2, "retrieval_or_manifest_errors": 0, "runtime_tested_commands": 0, "runtime_untested_commands": 0} diff --git a/docs/validation/native-input/checks/python-final-v4.log b/docs/validation/native-input/checks/python-final-v4.log new file mode 100644 index 00000000..8e786d01 --- /dev/null +++ b/docs/validation/native-input/checks/python-final-v4.log @@ -0,0 +1,6 @@ +.................................................................................................................................. +---------------------------------------------------------------------- +Ran 130 tests in 22.781s + +OK +{"all_directories_attempted": false, "declared_commands": 0, "directory_count": 2, "independently_anchored_manifests": 0, "manifest_discovery_complete": false, "manifests_read": 0, "not_yet_inspected": 2, "retrieval_or_manifest_errors": 0, "runtime_tested_commands": 0, "runtime_untested_commands": 0} diff --git a/docs/validation/native-input/checks/python-optimized-final-v2.log b/docs/validation/native-input/checks/python-optimized-final-v2.log new file mode 100644 index 00000000..5eeaf8e2 --- /dev/null +++ b/docs/validation/native-input/checks/python-optimized-final-v2.log @@ -0,0 +1,6 @@ +.................................................................................................................................. +---------------------------------------------------------------------- +Ran 130 tests in 31.452s + +OK +{"all_directories_attempted": false, "declared_commands": 0, "directory_count": 2, "independently_anchored_manifests": 0, "manifest_discovery_complete": false, "manifests_read": 0, "not_yet_inspected": 2, "retrieval_or_manifest_errors": 0, "runtime_tested_commands": 0, "runtime_untested_commands": 0} diff --git a/docs/validation/native-input/checks/python-optimized-final-v4.log b/docs/validation/native-input/checks/python-optimized-final-v4.log new file mode 100644 index 00000000..4d423db0 --- /dev/null +++ b/docs/validation/native-input/checks/python-optimized-final-v4.log @@ -0,0 +1,6 @@ +.................................................................................................................................. +---------------------------------------------------------------------- +Ran 130 tests in 27.986s + +OK +{"all_directories_attempted": false, "declared_commands": 0, "directory_count": 2, "independently_anchored_manifests": 0, "manifest_discovery_complete": false, "manifests_read": 0, "not_yet_inspected": 2, "retrieval_or_manifest_errors": 0, "runtime_tested_commands": 0, "runtime_untested_commands": 0} diff --git a/docs/validation/native-input/checks/python-optimized-v1.log b/docs/validation/native-input/checks/python-optimized-v1.log new file mode 100644 index 00000000..d55fe166 --- /dev/null +++ b/docs/validation/native-input/checks/python-optimized-v1.log @@ -0,0 +1,6 @@ +............................................................................................................................... +---------------------------------------------------------------------- +Ran 127 tests in 31.631s + +OK +{"all_directories_attempted": false, "declared_commands": 0, "directory_count": 2, "independently_anchored_manifests": 0, "manifest_discovery_complete": false, "manifests_read": 0, "not_yet_inspected": 2, "retrieval_or_manifest_errors": 0, "runtime_tested_commands": 0, "runtime_untested_commands": 0} diff --git a/docs/validation/native-input/checks/python-v1.log b/docs/validation/native-input/checks/python-v1.log new file mode 100644 index 00000000..0d9fb40e --- /dev/null +++ b/docs/validation/native-input/checks/python-v1.log @@ -0,0 +1,6 @@ +............................................................................................................................... +---------------------------------------------------------------------- +Ran 127 tests in 32.220s + +OK +{"all_directories_attempted": false, "declared_commands": 0, "directory_count": 2, "independently_anchored_manifests": 0, "manifest_discovery_complete": false, "manifests_read": 0, "not_yet_inspected": 2, "retrieval_or_manifest_errors": 0, "runtime_tested_commands": 0, "runtime_untested_commands": 0} diff --git a/docs/validation/native-input/checks/same-length-benchmark-build-v1.log b/docs/validation/native-input/checks/same-length-benchmark-build-v1.log new file mode 100644 index 00000000..3776bdcd --- /dev/null +++ b/docs/validation/native-input/checks/same-length-benchmark-build-v1.log @@ -0,0 +1,82 @@ +To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/9.4.1/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation. +Daemon will be stopped at the end of the build +> Task :app:preBuild UP-TO-DATE +> Task :app:preBenchmarkBuild UP-TO-DATE +> Task :app:generateBenchmarkBuildConfig UP-TO-DATE +> Task :app:generateBenchmarkResources UP-TO-DATE +> Task :app:packageBenchmarkResources UP-TO-DATE +> Task :app:processBenchmarkNavigationResources UP-TO-DATE +> Task :app:parseBenchmarkLocalResources UP-TO-DATE +> Task :app:generateBenchmarkRFile UP-TO-DATE +> Task :app:compileBenchmarkKotlin UP-TO-DATE +> Task :app:javaPreCompileBenchmark UP-TO-DATE +> Task :app:compileBenchmarkJavaWithJavac UP-TO-DATE +> Task :app:checkBenchmarkAarMetadata UP-TO-DATE +> Task :app:mapBenchmarkSourceSetPaths UP-TO-DATE +> Task :app:compileBenchmarkNavigationResources UP-TO-DATE +> Task :app:mergeBenchmarkResources UP-TO-DATE +> Task :app:createBenchmarkCompatibleScreenManifests UP-TO-DATE +> Task :app:extractDeepLinksBenchmark UP-TO-DATE +> Task :app:processBenchmarkMainManifest UP-TO-DATE +> Task :app:processBenchmarkManifest UP-TO-DATE +> Task :app:processBenchmarkManifestForPackage UP-TO-DATE +> Task :app:processBenchmarkResources UP-TO-DATE +> Task :app:bundleBenchmarkClassesToCompileJar UP-TO-DATE +> Task :app:preBenchmarkAndroidTestBuild SKIPPED +> Task :app:processBenchmarkAndroidTestManifest UP-TO-DATE +> Task :app:generateBenchmarkAndroidTestBuildConfig UP-TO-DATE +> Task :app:generateBenchmarkAndroidTestResources UP-TO-DATE +> Task :app:packageBenchmarkAndroidTestResources UP-TO-DATE +> Task :app:processBenchmarkAndroidTestNavigationResources UP-TO-DATE +> Task :app:parseBenchmarkAndroidTestLocalResources UP-TO-DATE +> Task :app:generateBenchmarkAndroidTestRFile UP-TO-DATE + +> Task :app:compileBenchmarkAndroidTestKotlin +w: file:///app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt:171:41 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt:176:48 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt:544:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt:261:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt:629:60 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. + +> Task :app:javaPreCompileBenchmarkAndroidTest UP-TO-DATE +> Task :app:compileBenchmarkAndroidTestJavaWithJavac UP-TO-DATE +> Task :app:generateBenchmarkAndroidTestAssets UP-TO-DATE +> Task :app:mergeBenchmarkAndroidTestAssets UP-TO-DATE +> Task :app:compressBenchmarkAndroidTestAssets UP-TO-DATE +> Task :app:desugarBenchmarkAndroidTestFileDependencies UP-TO-DATE +> Task :app:checkBenchmarkAndroidTestAarMetadata UP-TO-DATE +> Task :app:mapBenchmarkAndroidTestSourceSetPaths UP-TO-DATE +> Task :app:compileBenchmarkAndroidTestNavigationResources UP-TO-DATE +> Task :app:mergeBenchmarkAndroidTestResources UP-TO-DATE +> Task :app:processBenchmarkAndroidTestResources UP-TO-DATE +> Task :app:dexBuilderBenchmarkAndroidTest +> Task :app:mergeBenchmarkAndroidTestGlobalSynthetics UP-TO-DATE +> Task :app:processBenchmarkAndroidTestJavaRes UP-TO-DATE +> Task :app:mergeBenchmarkAndroidTestJavaResource UP-TO-DATE +> Task :app:checkBenchmarkAndroidTestDuplicateClasses UP-TO-DATE +> Task :app:mergeExtDexBenchmarkAndroidTest UP-TO-DATE +> Task :app:mergeDexBenchmarkAndroidTest +> Task :app:mergeBenchmarkAndroidTestJniLibFolders UP-TO-DATE +> Task :app:mergeBenchmarkJniLibFolders UP-TO-DATE +> Task :app:mergeBenchmarkNativeLibs UP-TO-DATE +> Task :app:mergeBenchmarkAndroidTestNativeLibs NO-SOURCE +> Task :app:stripBenchmarkAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningBenchmarkAndroidTest UP-TO-DATE +> Task :app:writeBenchmarkAndroidTestSigningConfigVersions UP-TO-DATE +> Task :app:packageBenchmarkAndroidTest +> Task :app:createBenchmarkAndroidTestApkListingFileRedirect UP-TO-DATE +> Task :app:assembleBenchmarkAndroidTest +> Task :app:generateBenchmarkAndroidTestLintModel +> Task :app:extractProguardFiles UP-TO-DATE +> Task :app:generateBenchmarkLintReportModel UP-TO-DATE +> Task :app:preBenchmarkUnitTestBuild UP-TO-DATE +> Task :app:generateBenchmarkUnitTestLintModel UP-TO-DATE +> Task :app:lintAnalyzeBenchmark UP-TO-DATE +> Task :app:lintAnalyzeBenchmarkAndroidTest +> Task :app:lintAnalyzeBenchmarkUnitTest UP-TO-DATE +> Task :app:lintReportBenchmark UP-TO-DATE +> Task :app:lintBenchmark + +BUILD SUCCESSFUL in 1m 15s +61 actionable tasks: 7 executed, 54 up-to-date +Consider enabling configuration cache to speed up this build: https://docs.gradle.org/9.4.1/userguide/configuration_cache_enabling.html diff --git a/docs/validation/native-input/checks/same-length-debug-build-v1.log b/docs/validation/native-input/checks/same-length-debug-build-v1.log new file mode 100644 index 00000000..b1f215e7 --- /dev/null +++ b/docs/validation/native-input/checks/same-length-debug-build-v1.log @@ -0,0 +1,82 @@ +To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/9.4.1/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation. +Daemon will be stopped at the end of the build +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:generateDebugBuildConfig UP-TO-DATE +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:packageDebugResources UP-TO-DATE +> Task :app:processDebugNavigationResources UP-TO-DATE +> Task :app:parseDebugLocalResources UP-TO-DATE +> Task :app:generateDebugRFile UP-TO-DATE +> Task :app:compileDebugKotlin UP-TO-DATE +> Task :app:javaPreCompileDebug UP-TO-DATE +> Task :app:compileDebugJavaWithJavac UP-TO-DATE +> Task :app:checkDebugAarMetadata UP-TO-DATE +> Task :app:mapDebugSourceSetPaths UP-TO-DATE +> Task :app:compileDebugNavigationResources UP-TO-DATE +> Task :app:mergeDebugResources UP-TO-DATE +> Task :app:createDebugCompatibleScreenManifests UP-TO-DATE +> Task :app:extractDeepLinksDebug UP-TO-DATE +> Task :app:processDebugMainManifest UP-TO-DATE +> Task :app:processDebugManifest UP-TO-DATE +> Task :app:processDebugManifestForPackage UP-TO-DATE +> Task :app:processDebugResources UP-TO-DATE +> Task :app:bundleDebugClassesToCompileJar UP-TO-DATE +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest UP-TO-DATE +> Task :app:generateDebugAndroidTestBuildConfig UP-TO-DATE +> Task :app:generateDebugAndroidTestResources UP-TO-DATE +> Task :app:packageDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:parseDebugAndroidTestLocalResources UP-TO-DATE +> Task :app:generateDebugAndroidTestRFile UP-TO-DATE +> Task :app:compileDebugAndroidTestKotlin +w: file:///app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt:171:41 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt:176:48 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt:544:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt:261:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt:629:60 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. + +> Task :app:javaPreCompileDebugAndroidTest UP-TO-DATE +> Task :app:compileDebugAndroidTestJavaWithJavac UP-TO-DATE +> Task :app:generateDebugAndroidTestAssets UP-TO-DATE +> Task :app:mergeDebugAndroidTestAssets UP-TO-DATE +> Task :app:compressDebugAndroidTestAssets UP-TO-DATE +> Task :app:generateDebugAndroidTestGlobalSynthetics UP-TO-DATE +> Task :app:processDebugAndroidTestJavaRes UP-TO-DATE +> Task :app:mergeDebugAndroidTestJavaResource UP-TO-DATE +> Task :app:checkDebugAndroidTestDuplicateClasses UP-TO-DATE +> Task :app:desugarDebugAndroidTestFileDependencies UP-TO-DATE +> Task :app:mergeExtDexDebugAndroidTest UP-TO-DATE +> Task :app:mergeLibDexDebugAndroidTest UP-TO-DATE +> Task :app:checkDebugAndroidTestAarMetadata UP-TO-DATE +> Task :app:mapDebugAndroidTestSourceSetPaths UP-TO-DATE +> Task :app:compileDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestResources UP-TO-DATE +> Task :app:dexBuilderDebugAndroidTest +> Task :app:mergeProjectDexDebugAndroidTest +> Task :app:mergeDebugAndroidTestJniLibFolders UP-TO-DATE +> Task :app:mergeDebugJniLibFolders UP-TO-DATE +> Task :app:mergeDebugNativeLibs UP-TO-DATE +> Task :app:mergeDebugAndroidTestNativeLibs NO-SOURCE +> Task :app:stripDebugAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningDebugAndroidTest UP-TO-DATE +> Task :app:writeDebugAndroidTestSigningConfigVersions UP-TO-DATE +> Task :app:packageDebugAndroidTest +> Task :app:createDebugAndroidTestApkListingFileRedirect UP-TO-DATE +> Task :app:assembleDebugAndroidTest +> Task :app:generateDebugAndroidTestLintModel +> Task :app:extractProguardFiles UP-TO-DATE +> Task :app:generateDebugLintReportModel UP-TO-DATE +> Task :app:preDebugUnitTestBuild UP-TO-DATE +> Task :app:generateDebugUnitTestLintModel UP-TO-DATE +> Task :app:lintAnalyzeDebug UP-TO-DATE +> Task :app:lintAnalyzeDebugAndroidTest +> Task :app:lintAnalyzeDebugUnitTest UP-TO-DATE +> Task :app:lintReportDebug UP-TO-DATE +> Task :app:lintDebug + +BUILD SUCCESSFUL in 1m 57s +62 actionable tasks: 7 executed, 55 up-to-date +Consider enabling configuration cache to speed up this build: https://docs.gradle.org/9.4.1/userguide/configuration_cache_enabling.html diff --git a/docs/validation/native-input/checks/strict-control-v1-build.log b/docs/validation/native-input/checks/strict-control-v1-build.log new file mode 100644 index 00000000..a32f3209 --- /dev/null +++ b/docs/validation/native-input/checks/strict-control-v1-build.log @@ -0,0 +1,64 @@ +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:generateDebugBuildConfig UP-TO-DATE +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:packageDebugResources UP-TO-DATE +> Task :app:processDebugNavigationResources UP-TO-DATE +> Task :app:parseDebugLocalResources UP-TO-DATE +> Task :app:generateDebugRFile UP-TO-DATE +> Task :app:compileDebugKotlin UP-TO-DATE +> Task :app:javaPreCompileDebug UP-TO-DATE +> Task :app:compileDebugJavaWithJavac UP-TO-DATE +> Task :app:checkDebugAarMetadata UP-TO-DATE +> Task :app:mapDebugSourceSetPaths UP-TO-DATE +> Task :app:compileDebugNavigationResources UP-TO-DATE +> Task :app:mergeDebugResources UP-TO-DATE +> Task :app:createDebugCompatibleScreenManifests UP-TO-DATE +> Task :app:extractDeepLinksDebug UP-TO-DATE +> Task :app:processDebugMainManifest UP-TO-DATE +> Task :app:processDebugManifest UP-TO-DATE +> Task :app:processDebugManifestForPackage UP-TO-DATE +> Task :app:processDebugResources UP-TO-DATE +> Task :app:bundleDebugClassesToCompileJar UP-TO-DATE +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest UP-TO-DATE +> Task :app:generateDebugAndroidTestBuildConfig UP-TO-DATE +> Task :app:generateDebugAndroidTestResources UP-TO-DATE +> Task :app:packageDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:parseDebugAndroidTestLocalResources UP-TO-DATE +> Task :app:generateDebugAndroidTestRFile UP-TO-DATE +> Task :app:javaPreCompileDebugAndroidTest UP-TO-DATE +> Task :app:generateDebugAndroidTestAssets UP-TO-DATE +> Task :app:mergeDebugAndroidTestAssets UP-TO-DATE +> Task :app:compressDebugAndroidTestAssets UP-TO-DATE +> Task :app:generateDebugAndroidTestGlobalSynthetics UP-TO-DATE +> Task :app:checkDebugAndroidTestDuplicateClasses UP-TO-DATE +> Task :app:desugarDebugAndroidTestFileDependencies UP-TO-DATE +> Task :app:mergeExtDexDebugAndroidTest UP-TO-DATE +> Task :app:mergeLibDexDebugAndroidTest UP-TO-DATE +> Task :app:checkDebugAndroidTestAarMetadata UP-TO-DATE +> Task :app:mapDebugAndroidTestSourceSetPaths UP-TO-DATE +> Task :app:compileDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestJniLibFolders UP-TO-DATE +> Task :app:mergeDebugJniLibFolders UP-TO-DATE +> Task :app:mergeDebugNativeLibs UP-TO-DATE +> Task :app:mergeDebugAndroidTestNativeLibs NO-SOURCE +> Task :app:stripDebugAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningDebugAndroidTest UP-TO-DATE +> Task :app:writeDebugAndroidTestSigningConfigVersions UP-TO-DATE +> Task :app:compileDebugAndroidTestKotlin +> Task :app:compileDebugAndroidTestJavaWithJavac UP-TO-DATE +> Task :app:processDebugAndroidTestJavaRes UP-TO-DATE +> Task :app:mergeDebugAndroidTestJavaResource UP-TO-DATE +> Task :app:dexBuilderDebugAndroidTest +> Task :app:mergeProjectDexDebugAndroidTest +> Task :app:packageDebugAndroidTest +> Task :app:createDebugAndroidTestApkListingFileRedirect UP-TO-DATE +> Task :app:assembleDebugAndroidTest + +BUILD SUCCESSFUL in 2s +53 actionable tasks: 4 executed, 49 up-to-date +Consider enabling configuration cache to speed up this build: https://docs.gradle.org/9.4.1/userguide/configuration_cache_enabling.html diff --git a/docs/validation/native-input/checks/strict-control-v2-build.log b/docs/validation/native-input/checks/strict-control-v2-build.log new file mode 100644 index 00000000..98f41443 --- /dev/null +++ b/docs/validation/native-input/checks/strict-control-v2-build.log @@ -0,0 +1,72 @@ +To honour the JVM settings for this build a single-use Daemon process will be forked. For more on this, please refer to https://docs.gradle.org/9.4.1/userguide/gradle_daemon.html#sec:disabling_the_daemon in the Gradle documentation. +Daemon will be stopped at the end of the build +> Task :app:preBuild UP-TO-DATE +> Task :app:preDebugBuild UP-TO-DATE +> Task :app:generateDebugBuildConfig UP-TO-DATE +> Task :app:generateDebugResources UP-TO-DATE +> Task :app:packageDebugResources UP-TO-DATE +> Task :app:processDebugNavigationResources UP-TO-DATE +> Task :app:parseDebugLocalResources UP-TO-DATE +> Task :app:generateDebugRFile UP-TO-DATE +> Task :app:compileDebugKotlin UP-TO-DATE +> Task :app:javaPreCompileDebug UP-TO-DATE +> Task :app:compileDebugJavaWithJavac UP-TO-DATE +> Task :app:checkDebugAarMetadata UP-TO-DATE +> Task :app:mapDebugSourceSetPaths UP-TO-DATE +> Task :app:compileDebugNavigationResources UP-TO-DATE +> Task :app:mergeDebugResources UP-TO-DATE +> Task :app:createDebugCompatibleScreenManifests UP-TO-DATE +> Task :app:extractDeepLinksDebug UP-TO-DATE +> Task :app:processDebugMainManifest UP-TO-DATE +> Task :app:processDebugManifest UP-TO-DATE +> Task :app:processDebugManifestForPackage UP-TO-DATE +> Task :app:processDebugResources UP-TO-DATE +> Task :app:bundleDebugClassesToCompileJar UP-TO-DATE +> Task :app:preDebugAndroidTestBuild SKIPPED +> Task :app:processDebugAndroidTestManifest UP-TO-DATE +> Task :app:generateDebugAndroidTestBuildConfig UP-TO-DATE +> Task :app:generateDebugAndroidTestResources UP-TO-DATE +> Task :app:packageDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:parseDebugAndroidTestLocalResources UP-TO-DATE +> Task :app:generateDebugAndroidTestRFile UP-TO-DATE +> Task :app:compileDebugAndroidTestKotlin +w: file:///app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt:171:41 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt:176:48 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt:544:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt:261:47 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. +w: file:///app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt:629:60 'static fun getWindowInsetsController(p0: View): WindowInsetsControllerCompat?' is deprecated. Deprecated in Java. + +> Task :app:javaPreCompileDebugAndroidTest UP-TO-DATE +> Task :app:compileDebugAndroidTestJavaWithJavac UP-TO-DATE +> Task :app:generateDebugAndroidTestAssets UP-TO-DATE +> Task :app:mergeDebugAndroidTestAssets UP-TO-DATE +> Task :app:compressDebugAndroidTestAssets UP-TO-DATE +> Task :app:generateDebugAndroidTestGlobalSynthetics UP-TO-DATE +> Task :app:processDebugAndroidTestJavaRes UP-TO-DATE +> Task :app:mergeDebugAndroidTestJavaResource UP-TO-DATE +> Task :app:checkDebugAndroidTestDuplicateClasses UP-TO-DATE +> Task :app:desugarDebugAndroidTestFileDependencies UP-TO-DATE +> Task :app:mergeExtDexDebugAndroidTest UP-TO-DATE +> Task :app:mergeLibDexDebugAndroidTest UP-TO-DATE +> Task :app:checkDebugAndroidTestAarMetadata UP-TO-DATE +> Task :app:mapDebugAndroidTestSourceSetPaths UP-TO-DATE +> Task :app:compileDebugAndroidTestNavigationResources UP-TO-DATE +> Task :app:mergeDebugAndroidTestResources UP-TO-DATE +> Task :app:processDebugAndroidTestResources UP-TO-DATE +> Task :app:dexBuilderDebugAndroidTest +> Task :app:mergeProjectDexDebugAndroidTest +> Task :app:mergeDebugAndroidTestJniLibFolders UP-TO-DATE +> Task :app:mergeDebugJniLibFolders UP-TO-DATE +> Task :app:mergeDebugNativeLibs UP-TO-DATE +> Task :app:mergeDebugAndroidTestNativeLibs NO-SOURCE +> Task :app:stripDebugAndroidTestDebugSymbols NO-SOURCE +> Task :app:validateSigningDebugAndroidTest UP-TO-DATE +> Task :app:writeDebugAndroidTestSigningConfigVersions UP-TO-DATE +> Task :app:packageDebugAndroidTest +> Task :app:createDebugAndroidTestApkListingFileRedirect UP-TO-DATE +> Task :app:assembleDebugAndroidTest + +BUILD SUCCESSFUL in 3m 48s +53 actionable tasks: 4 executed, 49 up-to-date +Consider enabling configuration cache to speed up this build: https://docs.gradle.org/9.4.1/userguide/configuration_cache_enabling.html diff --git a/docs/validation/native-input/cohorts.json b/docs/validation/native-input/cohorts.json new file mode 100644 index 00000000..fc389404 --- /dev/null +++ b/docs/validation/native-input/cohorts.json @@ -0,0 +1,314 @@ +[ + { + "cohort": "legacy-before-v1", + "junit_passes": 3, + "junit_failures": 0, + "completed": true, + "restoration_checks": 10, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "95dff20e67a68a07b6da3f62e116272d9b8c30ae06d9f602909d124c8c4405d3", + "collector_sha256": "6d2d61bd4fe43b6e906b26d233c5cb65bb605f4f9ae8296d1b2f79e55a68cce0", + "final_credit": "retained-only" + }, + { + "cohort": "legacy-before-v2", + "junit_passes": 3, + "junit_failures": 2, + "completed": false, + "restoration_checks": 10, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "be1d64e7f6874911b8a57459f7970f04a38bdb5c04ba9a3151481f6dbd664df8", + "collector_sha256": "a9e45755143efc91340a8bd0a9d8b75d0fd54d5a51cb06f50446c5e7c5378ba0", + "final_credit": "retained-only" + }, + { + "cohort": "legacy-contracts-v1", + "junit_passes": 5, + "junit_failures": 1, + "completed": false, + "restoration_checks": 10, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "ff67b0ca5fc5f231dfacc934a8189583ee140e8a209277559315160bd4012711", + "collector_sha256": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "final_credit": "retained-only" + }, + { + "cohort": "legacy-contracts-v2", + "junit_passes": 2, + "junit_failures": 3, + "completed": false, + "restoration_checks": 10, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "6effc19e36580834dc6a05e6022fb4c6d29dfc03771651aad2e9dc91859d8be0", + "collector_sha256": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "final_credit": "retained-only" + }, + { + "cohort": "legacy-owned-200-v4", + "junit_passes": 3, + "junit_failures": 0, + "completed": true, + "restoration_checks": 12, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443", + "collector_sha256": "0f08cc33955a073e0fd19d40cfeb08aa241254bbe1a257acdb8791080cac19a7", + "final_credit": "retained-only" + }, + { + "cohort": "legacy-owned-200-v5", + "junit_passes": 3, + "junit_failures": 0, + "completed": true, + "restoration_checks": 12, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443", + "collector_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "final_credit": "positive" + }, + { + "cohort": "legacy-owned-full-v4", + "junit_passes": 6, + "junit_failures": 0, + "completed": true, + "restoration_checks": 12, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443", + "collector_sha256": "0f08cc33955a073e0fd19d40cfeb08aa241254bbe1a257acdb8791080cac19a7", + "final_credit": "retained-only" + }, + { + "cohort": "legacy-owned-full-v5", + "junit_passes": 6, + "junit_failures": 0, + "completed": true, + "restoration_checks": 12, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443", + "collector_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "final_credit": "positive" + }, + { + "cohort": "legacy-owned-probe-v3", + "junit_passes": 1, + "junit_failures": 0, + "completed": true, + "restoration_checks": 11, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443", + "collector_sha256": "97b130618a6edcdbabee5f1f4e1f8320e30b6a6f3eaa794b37e961919e02dcad", + "final_credit": "retained-only" + }, + { + "cohort": "legacy-same-length-v6", + "junit_passes": 1, + "junit_failures": 0, + "completed": true, + "restoration_checks": 12, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "60598e18bab4968030c3fe627a54ee2c0f018ce801b4b13f34112cdd011ddabc", + "collector_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "final_credit": "positive" + }, + { + "cohort": "legacy-strict-control-v1", + "junit_passes": 1, + "junit_failures": 0, + "completed": true, + "restoration_checks": 10, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "c52f3e04917a94a7e7cf3cbb2a259c469a5e6e860cbb45691b52f2995acd7196", + "collector_sha256": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "final_credit": "retained-only" + }, + { + "cohort": "legacy-strict-control-v2", + "junit_passes": 0, + "junit_failures": 1, + "completed": false, + "restoration_checks": 12, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "663557f37ad94b33e9db71fc5628a2098198e8e28b7eae12c2dbcf7cef60d1b3", + "collector_sha256": "0f08cc33955a073e0fd19d40cfeb08aa241254bbe1a257acdb8791080cac19a7", + "final_credit": "retained-only" + }, + { + "cohort": "legacy-strict-control-v3", + "junit_passes": 0, + "junit_failures": 1, + "completed": false, + "restoration_checks": 12, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "663557f37ad94b33e9db71fc5628a2098198e8e28b7eae12c2dbcf7cef60d1b3", + "collector_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "final_credit": "intended-negative" + }, + { + "cohort": "modern-before-v1", + "junit_passes": 3, + "junit_failures": 0, + "completed": true, + "restoration_checks": 15, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "95dff20e67a68a07b6da3f62e116272d9b8c30ae06d9f602909d124c8c4405d3", + "collector_sha256": "6d2d61bd4fe43b6e906b26d233c5cb65bb605f4f9ae8296d1b2f79e55a68cce0", + "final_credit": "retained-only" + }, + { + "cohort": "modern-before-v2", + "junit_passes": 4, + "junit_failures": 1, + "completed": false, + "restoration_checks": 15, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "be1d64e7f6874911b8a57459f7970f04a38bdb5c04ba9a3151481f6dbd664df8", + "collector_sha256": "a9e45755143efc91340a8bd0a9d8b75d0fd54d5a51cb06f50446c5e7c5378ba0", + "final_credit": "retained-only" + }, + { + "cohort": "modern-contracts-v1", + "junit_passes": 6, + "junit_failures": 0, + "completed": true, + "restoration_checks": 15, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "ff67b0ca5fc5f231dfacc934a8189583ee140e8a209277559315160bd4012711", + "collector_sha256": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "final_credit": "retained-only" + }, + { + "cohort": "modern-contracts-v2", + "junit_passes": 5, + "junit_failures": 0, + "completed": true, + "restoration_checks": 15, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "6effc19e36580834dc6a05e6022fb4c6d29dfc03771651aad2e9dc91859d8be0", + "collector_sha256": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "final_credit": "retained-only" + }, + { + "cohort": "modern-owned-full-v4", + "junit_passes": 6, + "junit_failures": 0, + "completed": true, + "restoration_checks": 17, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443", + "collector_sha256": "0f08cc33955a073e0fd19d40cfeb08aa241254bbe1a257acdb8791080cac19a7", + "final_credit": "retained-only" + }, + { + "cohort": "modern-owned-full-v5", + "junit_passes": 6, + "junit_failures": 0, + "completed": true, + "restoration_checks": 17, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443", + "collector_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "final_credit": "positive" + }, + { + "cohort": "modern-owned-landscape200-v5", + "junit_passes": 3, + "junit_failures": 0, + "completed": true, + "restoration_checks": 19, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443", + "collector_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "final_credit": "positive" + }, + { + "cohort": "modern-owned-phone200-v5", + "junit_passes": 3, + "junit_failures": 0, + "completed": true, + "restoration_checks": 19, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443", + "collector_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "final_credit": "positive" + }, + { + "cohort": "modern-owned-probe-v3", + "junit_passes": 1, + "junit_failures": 0, + "completed": true, + "restoration_checks": 16, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443", + "collector_sha256": "97b130618a6edcdbabee5f1f4e1f8320e30b6a6f3eaa794b37e961919e02dcad", + "final_credit": "retained-only" + }, + { + "cohort": "modern-same-length-v6", + "junit_passes": 1, + "junit_failures": 0, + "completed": true, + "restoration_checks": 17, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "60598e18bab4968030c3fe627a54ee2c0f018ce801b4b13f34112cdd011ddabc", + "collector_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "final_credit": "positive" + }, + { + "cohort": "modern-strict-control-v1", + "junit_passes": 1, + "junit_failures": 0, + "completed": true, + "restoration_checks": 15, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "c52f3e04917a94a7e7cf3cbb2a259c469a5e6e860cbb45691b52f2995acd7196", + "collector_sha256": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "final_credit": "retained-only" + }, + { + "cohort": "modern-strict-control-v2", + "junit_passes": 0, + "junit_failures": 1, + "completed": false, + "restoration_checks": 2, + "failed_restoration_checks": 1, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "663557f37ad94b33e9db71fc5628a2098198e8e28b7eae12c2dbcf7cef60d1b3", + "collector_sha256": "0f08cc33955a073e0fd19d40cfeb08aa241254bbe1a257acdb8791080cac19a7", + "final_credit": "retained-only" + }, + { + "cohort": "modern-strict-control-v3", + "junit_passes": 0, + "junit_failures": 1, + "completed": false, + "restoration_checks": 17, + "failed_restoration_checks": 0, + "app_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "test_apk_sha256": "663557f37ad94b33e9db71fc5628a2098198e8e28b7eae12c2dbcf7cef60d1b3", + "collector_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "final_credit": "intended-negative" + } +] diff --git a/docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recordcallerselectionacrossnativeroutes.json b/docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recordcallerselectionacrossnativeroutes.json new file mode 100644 index 00000000..348679bb --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recordcallerselectionacrossnativeroutes.json @@ -0,0 +1,203 @@ +{ + "api": 26, + "case": "recordCallerSelectionAcrossNativeRoutes", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_completed": true, + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "observations": [ + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31270732 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31273041 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31274383 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31280498 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution", + "selection_setup": "Semantic selection action; not physical selection", + "updates_scope": "Idle native Updates route, no public check/download/install requested" +} diff --git a/docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json b/docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json new file mode 100644 index 00000000..9f3e900b --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json @@ -0,0 +1,376 @@ +{ + "api": 26, + "case": "recordDefaultImeAndControlledCompositionNavigation", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_completed": true, + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "observations": [ + { + "kind": "observation", + "stage": "default-ime-after-semantic-replacement", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31286622 + }, + { + "kind": "window-key", + "code": 22, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 31287334 + }, + { + "kind": "injected-key", + "code": 22, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 22, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 31287336 + }, + { + "kind": "injected-key", + "code": 22, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "default-after-injected-right", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 4, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31287367 + }, + { + "kind": "injected-key", + "code": 111, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 111, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 31287377 + }, + { + "kind": "injected-key", + "code": 111, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "default-after-injected-escape", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31287436 + }, + { + "kind": "direct-key", + "code": 111, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 111, + "action": 1, + "handled": false + }, + { + "kind": "controlled-input-connection-created", + "input_type": 32769, + "ime_options": 33554435, + "initial_selection_start": 4, + "initial_selection_end": 4 + }, + { + "kind": "observation", + "stage": "controlled-finish-composition", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31288049 + }, + { + "kind": "injected-key", + "code": 22, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 22, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "controlled-after-injected-right", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 1, + "ime_accepting_text": true, + "uptime_ms": 31288097 + }, + { + "kind": "injected-key", + "code": 20, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "controlled-after-injected-down", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 6, + "ime_accepting_text": true, + "uptime_ms": 31288149 + }, + { + "kind": "observation", + "stage": "controlled-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31288650 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "japanese-after-direct-right", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31288652 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution" +} diff --git a/docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recordlargedrafttextandannotationsafterrecreation.json b/docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recordlargedrafttextandannotationsafterrecreation.json new file mode 100644 index 00000000..6c5144c0 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recordlargedrafttextandannotationsafterrecreation.json @@ -0,0 +1,87 @@ +{ + "api": 26, + "body_annotated_exact": true, + "body_plain_exact": true, + "case": "recordLargeDraftTextAndAnnotationsAfterRecreation", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_completed": true, + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "expected_body_length": 540000, + "expected_body_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "font_scale": 1, + "observations": [ + { + "kind": "observation", + "stage": "recreated-title", + "tag": "editor-title", + "text_length": 20, + "text_sha256": "62ec1d895e4027d007ab9e35dc918f7eb37a6d8c0770ad0a7afaca4781df4414", + "text_prefix": "Owned large draft \u65e5\u672c", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 108, + 97, + 114, + 103, + 101, + 32, + 100, + 114, + 97, + 102, + 116, + 32, + 26085, + 26412 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31291681 + }, + { + "kind": "observation", + "stage": "recreated-body", + "tag": "editor-body", + "text_length": 540000, + "text_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "text_prefix": "Owned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": false, + "no_input_connection_created_for_this_observation": true, + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31291689 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution", + "title_annotated_exact": true, + "title_plain_exact": true +} diff --git a/docs/validation/native-input/cohorts/legacy-before-v1/record.json b/docs/validation/native-input/cohorts/legacy-before-v1/record.json new file mode 100644 index 00000000..76447809 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-before-v1/record.json @@ -0,0 +1,62 @@ +{ + "api": 26, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-absence-dev.tinycast.android.test": { + "passed": true + }, + "restore-absence-dev.tinycast.android": { + "passed": true + }, + "verify-initial-package-absence": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 1.0, + "initialization_error": false, + "instrumentation_exit_code": 0, + "layout": "phone", + "methods": [ + "recordDefaultImeAndControlledCompositionNavigation", + "recordCallerSelectionAcrossNativeRoutes", + "recordLargeDraftTextAndAnnotationsAfterRecreation" + ], + "native_expected_outcome": true, + "original_font_scale": "null", + "original_geometry": { + "size": "Physical size: 1080x1920", + "density": "Physical density: 420" + }, + "passes": 3, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 58.0.3029.125)" + ], + "runner_sha256": "6d2d61bd4fe43b6e906b26d233c5cb65bb605f4f9ae8296d1b2f79e55a68cce0", + "suite": "native-input", + "test_apk_sha256": "95dff20e67a68a07b6da3f62e116272d9b8c30ae06d9f602909d124c8c4405d3" +} diff --git a/docs/validation/native-input/cohorts/legacy-before-v1/tests.log b/docs/validation/native-input/cohorts/legacy-before-v1/tests.log new file mode 100644 index 00000000..1702dac6 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-before-v1/tests.log @@ -0,0 +1,51 @@ +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordCallerSelectionAcrossNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordCallerSelectionAcrossNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordDefaultImeAndControlledCompositionNavigation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordDefaultImeAndControlledCompositionNavigation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordLargeDraftTextAndAnnotationsAfterRecreation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordLargeDraftTextAndAnnotationsAfterRecreation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 23.993 + +OK (3 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordcallerselectionacrossnativeroutes.json b/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordcallerselectionacrossnativeroutes.json new file mode 100644 index 00000000..5497409f --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordcallerselectionacrossnativeroutes.json @@ -0,0 +1,204 @@ +{ + "api": 26, + "case": "recordCallerSelectionAcrossNativeRoutes", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_completed": true, + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "observations": [ + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31575593 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31577597 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31578986 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31585435 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution", + "selection_setup": "Semantic selection action; not physical selection", + "updates_root_focus_requested_before_return": true, + "updates_scope": "Idle native Updates route, no public check/download/install requested" +} diff --git a/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json b/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json new file mode 100644 index 00000000..4647275f --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json @@ -0,0 +1,383 @@ +{ + "api": 26, + "case": "recordDefaultImeAndControlledCompositionNavigation", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_completed": true, + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "observations": [ + { + "kind": "observation", + "stage": "default-ime-after-semantic-replacement", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 4, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31595488 + }, + { + "kind": "window-key", + "code": 22, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 31596708 + }, + { + "kind": "injected-key", + "code": 22, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 22, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 31596711 + }, + { + "kind": "injected-key", + "code": 22, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "default-after-injected-right", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 4, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31596713 + }, + { + "kind": "injected-key", + "code": 111, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 111, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 31596760 + }, + { + "kind": "injected-key", + "code": 111, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "default-after-injected-escape", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31596835 + }, + { + "kind": "direct-key", + "code": 111, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 111, + "action": 1, + "handled": false + }, + { + "kind": "controlled-input-connection-created", + "input_type": 32769, + "ime_options": 33554435, + "initial_selection_start": 4, + "initial_selection_end": 4 + }, + { + "kind": "observation", + "stage": "controlled-finish-composition", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31597598 + }, + { + "kind": "injected-key", + "code": 22, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 22, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "controlled-after-injected-right", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 1, + "ime_accepting_text": true, + "uptime_ms": 31597637 + }, + { + "kind": "injected-key", + "code": 20, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "controlled-after-injected-down", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 6, + "ime_accepting_text": true, + "uptime_ms": 31597676 + }, + { + "kind": "observation", + "stage": "controlled-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31598358 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "japanese-after-direct-right", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31598366 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution" +} diff --git a/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordinjectedtypingandcommittedquerynavigation.json b/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordinjectedtypingandcommittedquerynavigation.json new file mode 100644 index 00000000..5de51fc7 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordinjectedtypingandcommittedquerynavigation.json @@ -0,0 +1,104 @@ +{ + "api": 26, + "case": "recordInjectedTypingAndCommittedQueryNavigation", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "observations": [ + { + "kind": "injected-key", + "code": 34, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 34, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 31587066 + }, + { + "kind": "injected-key", + "code": 34, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 29, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 29, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 31587737 + }, + { + "kind": "injected-key", + "code": 29, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 31, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 31, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 31587847 + }, + { + "kind": "injected-key", + "code": 31, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 33, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 33, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 31588054 + }, + { + "kind": "injected-key", + "code": 33, + "action": 1, + "accepted": true + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution" +} diff --git a/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordlargedrafttextandannotationsafterrecreation.json b/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordlargedrafttextandannotationsafterrecreation.json new file mode 100644 index 00000000..64b2609e --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordlargedrafttextandannotationsafterrecreation.json @@ -0,0 +1,87 @@ +{ + "api": 26, + "body_annotated_exact": true, + "body_plain_exact": true, + "case": "recordLargeDraftTextAndAnnotationsAfterRecreation", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_completed": true, + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "expected_body_length": 540000, + "expected_body_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "font_scale": 1, + "observations": [ + { + "kind": "observation", + "stage": "recreated-title", + "tag": "editor-title", + "text_length": 20, + "text_sha256": "62ec1d895e4027d007ab9e35dc918f7eb37a6d8c0770ad0a7afaca4781df4414", + "text_prefix": "Owned large draft \u65e5\u672c", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 108, + 97, + 114, + 103, + 101, + 32, + 100, + 114, + 97, + 102, + 116, + 32, + 26085, + 26412 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31605855 + }, + { + "kind": "observation", + "stage": "recreated-body", + "tag": "editor-body", + "text_length": 540000, + "text_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "text_prefix": "Owned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": false, + "no_input_connection_created_for_this_observation": true, + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31605875 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution", + "title_annotated_exact": false, + "title_plain_exact": true +} diff --git a/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordsameturnlauncheractivationtextandannotations.json b/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordsameturnlauncheractivationtextandannotations.json new file mode 100644 index 00000000..d29a589d --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordsameturnlauncheractivationtextandannotations.json @@ -0,0 +1,56 @@ +{ + "api": 26, + "case": "recordSameTurnLauncherActivationTextAndAnnotations", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "expected_note_id": "notes:e36a926f-309a-4694-b29b-5f42ee284731", + "font_scale": 1, + "observations": [ + { + "kind": "observation", + "stage": "before-same-turn-navigation", + "tag": "search", + "text_length": 11, + "text_sha256": "abae325470b759339986262e173907c559743e8c35f5771d8de64a42b3c07ebc", + "text_prefix": "Owned rapid", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 6, + "end": 11, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 11, + "selection_end": 11, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100 + ], + "route": null, + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 31599676 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution" +} diff --git a/docs/validation/native-input/cohorts/legacy-before-v2/record.json b/docs/validation/native-input/cohorts/legacy-before-v2/record.json new file mode 100644 index 00000000..ed18fe7b --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-before-v2/record.json @@ -0,0 +1,64 @@ +{ + "api": 26, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-absence-dev.tinycast.android.test": { + "passed": true + }, + "restore-absence-dev.tinycast.android": { + "passed": true + }, + "verify-initial-package-absence": { + "passed": true + } + }, + "completed": false, + "expected_negative": false, + "failures": 2, + "fixture_sha256": {}, + "font_scale": 1.0, + "initialization_error": false, + "instrumentation_exit_code": 0, + "layout": "phone", + "methods": [ + "recordDefaultImeAndControlledCompositionNavigation", + "recordCallerSelectionAcrossNativeRoutes", + "recordLargeDraftTextAndAnnotationsAfterRecreation", + "recordSameTurnLauncherActivationTextAndAnnotations", + "recordInjectedTypingAndCommittedQueryNavigation" + ], + "native_expected_outcome": false, + "original_font_scale": "null", + "original_geometry": { + "size": "Physical size: 1080x1920", + "density": "Physical density: 420" + }, + "passes": 3, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 58.0.3029.125)" + ], + "runner_sha256": "a9e45755143efc91340a8bd0a9d8b75d0fd54d5a51cb06f50446c5e7c5378ba0", + "suite": "native-input", + "test_apk_sha256": "be1d64e7f6874911b8a57459f7970f04a38bdb5c04ba9a3151481f6dbd664df8" +} diff --git a/docs/validation/native-input/cohorts/legacy-before-v2/tests.log b/docs/validation/native-input/cohorts/legacy-before-v2/tests.log new file mode 100644 index 00000000..3e4dda5f --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-before-v2/tests.log @@ -0,0 +1,128 @@ +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordCallerSelectionAcrossNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordCallerSelectionAcrossNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordInjectedTypingAndCommittedQueryNavigation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +Error in recordInjectedTypingAndCommittedQueryNavigation(dev.tinycast.android.NativeInputCompatibilityDeviceTest): +androidx.compose.ui.test.ComposeTimeoutException: Condition still not satisfied after 5000 ms + at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitUntil(ComposeUiTest.android.kt:441) + at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitUntil(AndroidComposeTestRule.android.kt:306) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.recordInjectedTypingAndCommittedQueryNavigation(NativeInputCompatibilityDeviceTest.kt:227) + +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordInjectedTypingAndCommittedQueryNavigation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: stack=androidx.compose.ui.test.ComposeTimeoutException: Condition still not satisfied after 5000 ms + at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitUntil(ComposeUiTest.android.kt:441) + at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitUntil(AndroidComposeTestRule.android.kt:306) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.recordInjectedTypingAndCommittedQueryNavigation(NativeInputCompatibilityDeviceTest.kt:227) + +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordDefaultImeAndControlledCompositionNavigation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordDefaultImeAndControlledCompositionNavigation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordSameTurnLauncherActivationTextAndAnnotations +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +Error in recordSameTurnLauncherActivationTextAndAnnotations(dev.tinycast.android.NativeInputCompatibilityDeviceTest): +java.lang.AssertionError: Failed: assertExists. +Reason: Expected exactly '1' node but could not find any node that satisfies: (TestTag = 'editor-title') + + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchOneOrThrow(SemanticsNodeInteraction.kt:178) + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchOneOrThrow$default(SemanticsNodeInteraction.kt:150) + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchSemanticsNode(SemanticsNodeInteraction.kt:84) + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchSemanticsNode$default(SemanticsNodeInteraction.kt:83) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.observe(NativeInputCompatibilityDeviceTest.kt:89) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.recordSameTurnLauncherActivationTextAndAnnotations(NativeInputCompatibilityDeviceTest.kt:214) + +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordSameTurnLauncherActivationTextAndAnnotations +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: stack=java.lang.AssertionError: Failed: assertExists. +Reason: Expected exactly '1' node but could not find any node that satisfies: (TestTag = 'editor-title') + + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchOneOrThrow(SemanticsNodeInteraction.kt:178) + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchOneOrThrow$default(SemanticsNodeInteraction.kt:150) + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchSemanticsNode(SemanticsNodeInteraction.kt:84) + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchSemanticsNode$default(SemanticsNodeInteraction.kt:83) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.observe(NativeInputCompatibilityDeviceTest.kt:89) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.recordSameTurnLauncherActivationTextAndAnnotations(NativeInputCompatibilityDeviceTest.kt:214) + +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordLargeDraftTextAndAnnotationsAfterRecreation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=recordLargeDraftTextAndAnnotationsAfterRecreation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 33.86 +There were 2 failures: +1) recordInjectedTypingAndCommittedQueryNavigation(dev.tinycast.android.NativeInputCompatibilityDeviceTest) +androidx.compose.ui.test.ComposeTimeoutException: Condition still not satisfied after 5000 ms + at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitUntil(ComposeUiTest.android.kt:441) + at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitUntil(AndroidComposeTestRule.android.kt:306) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.recordInjectedTypingAndCommittedQueryNavigation(NativeInputCompatibilityDeviceTest.kt:227) +2) recordSameTurnLauncherActivationTextAndAnnotations(dev.tinycast.android.NativeInputCompatibilityDeviceTest) +java.lang.AssertionError: Failed: assertExists. +Reason: Expected exactly '1' node but could not find any node that satisfies: (TestTag = 'editor-title') + + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchOneOrThrow(SemanticsNodeInteraction.kt:178) + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchOneOrThrow$default(SemanticsNodeInteraction.kt:150) + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchSemanticsNode(SemanticsNodeInteraction.kt:84) + at androidx.compose.ui.test.SemanticsNodeInteraction.fetchSemanticsNode$default(SemanticsNodeInteraction.kt:83) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.observe(NativeInputCompatibilityDeviceTest.kt:89) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.recordSameTurnLauncherActivationTextAndAnnotations(NativeInputCompatibilityDeviceTest.kt:214) + +FAILURES!!! +Tests run: 5, Failures: 2 + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-activemultilingualcompositionkeepsresultselection.json b/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-activemultilingualcompositionkeepsresultselection.json new file mode 100644 index 00000000..f200aadc --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-activemultilingualcompositionkeepsresultselection.json @@ -0,0 +1,124 @@ +{ + "api": 26, + "case": "activeMultilingualCompositionKeepsResultSelection", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32120912 + }, + { + "kind": "observation", + "stage": "active-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32121390 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "active-japanese-after-direct-navigation", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32121577 + } + ], + "palette_preferences_restored": true, + "scope": "Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication" +} diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedcallerselectionsurvivesidlenativeroutes.json b/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedcallerselectionsurvivesidlenativeroutes.json new file mode 100644 index 00000000..a4989d48 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedcallerselectionsurvivesidlenativeroutes.json @@ -0,0 +1,255 @@ +{ + "api": 26, + "case": "committedCallerSelectionSurvivesIdleNativeRoutes", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 22, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 22, + "selection_end": 22, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32097418 + }, + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32097492 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32098907 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32100373 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32106894 + } + ], + "palette_preferences_restored": true, + "scope": "Committed caller query/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedemojinavigationandcaretareexact.json b/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedemojinavigationandcaretareexact.json new file mode 100644 index 00000000..80297c99 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedemojinavigationandcaretareexact.json @@ -0,0 +1,153 @@ +{ + "api": 26, + "case": "committedEmojiNavigationAndCaretAreExact", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32117721 + }, + { + "kind": "injected-key", + "code": 22, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 22, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 21, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 21, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 19, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 19, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 123, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 123, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 32117957 + }, + { + "kind": "injected-key", + "code": 123, + "action": 1, + "accepted": true + }, + { + "kind": "window-key", + "code": 122, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 32118106 + }, + { + "kind": "injected-key", + "code": 122, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 122, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 32118113 + }, + { + "kind": "injected-key", + "code": 122, + "action": 1, + "accepted": true + } + ], + "palette_preferences_restored": true, + "scope": "Explicitly committed Emoji query supports injected grid navigation, exact caret and selected range" +} diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedsameturnlauncheractivationusescurrentnote.json b/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedsameturnlauncheractivationusescurrentnote.json new file mode 100644 index 00000000..91fe6604 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedsameturnlauncheractivationusescurrentnote.json @@ -0,0 +1,98 @@ +{ + "api": 26, + "case": "committedSameTurnLauncherActivationUsesCurrentNote", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 11, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 11, + "text_sha256": "abae325470b759339986262e173907c559743e8c35f5771d8de64a42b3c07ebc", + "text_prefix": "Owned rapid", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 11, + "selection_end": 11, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100 + ], + "route": null, + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32124085 + }, + { + "kind": "observation", + "stage": "same-turn-exact-title", + "tag": "editor-title", + "text_length": 17, + "text_sha256": "bd027c4f9180a20a5fea195d5dd78db21c8d33918bec844bf88cd9c1ae1c57fe", + "text_prefix": "Owned rapid Alpha", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100, + 32, + 65, + 108, + 112, + 104, + 97 + ], + "route": "note", + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32125167 + } + ], + "palette_preferences_restored": true, + "scope": "Explicitly committed owned launcher query opens the second note on Down/Enter within one main-thread turn" +} diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..15dc0bb6 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,92 @@ +{ + "api": 26, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-before-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32109085 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": true, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-largedraftrestoresexactcharactersafterrecreation.json b/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-largedraftrestoresexactcharactersafterrecreation.json new file mode 100644 index 00000000..3d351499 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-largedraftrestoresexactcharactersafterrecreation.json @@ -0,0 +1,84 @@ +{ + "api": 26, + "case": "largeDraftRestoresExactCharactersAfterRecreation", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "expected_body_length": 540000, + "expected_body_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "observation", + "stage": "exact-recreated-title", + "tag": "editor-title", + "text_length": 20, + "text_sha256": "62ec1d895e4027d007ab9e35dc918f7eb37a6d8c0770ad0a7afaca4781df4414", + "text_prefix": "Owned large draft \u65e5\u672c", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 108, + 97, + 114, + 103, + 101, + 32, + 100, + 114, + 97, + 102, + 116, + 32, + 26085, + 26412 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32113635 + }, + { + "kind": "observation", + "stage": "exact-recreated-body", + "tag": "editor-body", + "text_length": 540000, + "text_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "text_prefix": "Owned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": false, + "no_input_connection_created_for_this_observation": true, + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32113689 + } + ], + "palette_preferences_restored": true, + "scope": "Owned unsaved 540000-unit multilingual draft survives recreation with exact title/body characters" +} diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v1/record.json b/docs/validation/native-input/cohorts/legacy-contracts-v1/record.json new file mode 100644 index 00000000..b064e72c --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v1/record.json @@ -0,0 +1,65 @@ +{ + "api": 26, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-absence-dev.tinycast.android.test": { + "passed": true + }, + "restore-absence-dev.tinycast.android": { + "passed": true + }, + "verify-initial-package-absence": { + "passed": true + } + }, + "completed": false, + "expected_negative": false, + "failures": 1, + "fixture_sha256": {}, + "font_scale": 1.0, + "initialization_error": false, + "instrumentation_exit_code": 0, + "layout": "phone", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "committedEmojiNavigationAndCaretAreExact", + "activeMultilingualCompositionKeepsResultSelection", + "committedCallerSelectionSurvivesIdleNativeRoutes", + "committedSameTurnLauncherActivationUsesCurrentNote", + "largeDraftRestoresExactCharactersAfterRecreation" + ], + "native_expected_outcome": false, + "original_font_scale": "null", + "original_geometry": { + "size": "Physical size: 1080x1920", + "density": "Physical density: 420" + }, + "passes": 5, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 58.0.3029.125)" + ], + "runner_sha256": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "suite": "native-input", + "test_apk_sha256": "ff67b0ca5fc5f231dfacc934a8189583ee140e8a209277559315160bd4012711" +} diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v1/tests.log b/docs/validation/native-input/cohorts/legacy-contracts-v1/tests.log new file mode 100644 index 00000000..0ab03a37 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v1/tests.log @@ -0,0 +1,126 @@ +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedEmojiNavigationAndCaretAreExact +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +Error in committedEmojiNavigationAndCaretAreExact(dev.tinycast.android.NativeInputCompatibilityDeviceTest): +java.lang.AssertionError: expected:<0> but was:<126> + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.failNotEquals(Assert.java:835) + at org.junit.Assert.assertEquals(Assert.java:120) + at org.junit.Assert.assertEquals(Assert.java:146) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.committedEmojiNavigationAndCaretAreExact$lambda$39(NativeInputCompatibilityDeviceTest.kt:345) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda34.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.withControlledInput(NativeInputCompatibilityDeviceTest.kt:270) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.committedEmojiNavigationAndCaretAreExact(NativeInputCompatibilityDeviceTest.kt:332) + +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedEmojiNavigationAndCaretAreExact +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: stack=java.lang.AssertionError: expected:<0> but was:<126> + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.failNotEquals(Assert.java:835) + at org.junit.Assert.assertEquals(Assert.java:120) + at org.junit.Assert.assertEquals(Assert.java:146) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.committedEmojiNavigationAndCaretAreExact$lambda$39(NativeInputCompatibilityDeviceTest.kt:345) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda34.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.withControlledInput(NativeInputCompatibilityDeviceTest.kt:270) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.committedEmojiNavigationAndCaretAreExact(NativeInputCompatibilityDeviceTest.kt:332) + +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 30.764 +There was 1 failure: +1) committedEmojiNavigationAndCaretAreExact(dev.tinycast.android.NativeInputCompatibilityDeviceTest) +java.lang.AssertionError: expected:<0> but was:<126> + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.failNotEquals(Assert.java:835) + at org.junit.Assert.assertEquals(Assert.java:120) + at org.junit.Assert.assertEquals(Assert.java:146) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.committedEmojiNavigationAndCaretAreExact$lambda$39(NativeInputCompatibilityDeviceTest.kt:345) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda34.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.withControlledInput(NativeInputCompatibilityDeviceTest.kt:270) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.committedEmojiNavigationAndCaretAreExact(NativeInputCompatibilityDeviceTest.kt:332) + +FAILURES!!! +Tests run: 6, Failures: 1 + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-activemultilingualcompositionkeepsresultselection.json b/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-activemultilingualcompositionkeepsresultselection.json new file mode 100644 index 00000000..b173965b --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-activemultilingualcompositionkeepsresultselection.json @@ -0,0 +1,48 @@ +{ + "api": 26, + "case": "activeMultilingualCompositionKeepsResultSelection", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32760491 + } + ], + "palette_preferences_restored": true, + "scope": "Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication" +} diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-committedcallerselectionsurvivesidlenativeroutes.json b/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-committedcallerselectionsurvivesidlenativeroutes.json new file mode 100644 index 00000000..a988220e --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-committedcallerselectionsurvivesidlenativeroutes.json @@ -0,0 +1,255 @@ +{ + "api": 26, + "case": "committedCallerSelectionSurvivesIdleNativeRoutes", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 22, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 22, + "selection_end": 22, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32736988 + }, + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32737122 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32739441 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32741127 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32744911 + } + ], + "palette_preferences_restored": true, + "scope": "Committed caller query/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-committedsameturnlauncheractivationusescurrentnote.json b/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-committedsameturnlauncheractivationusescurrentnote.json new file mode 100644 index 00000000..0539fd13 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-committedsameturnlauncheractivationusescurrentnote.json @@ -0,0 +1,62 @@ +{ + "api": 26, + "case": "committedSameTurnLauncherActivationUsesCurrentNote", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 11, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 11, + "text_sha256": "abae325470b759339986262e173907c559743e8c35f5771d8de64a42b3c07ebc", + "text_prefix": "Owned rapid", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 6, + "end": 11, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 11, + "selection_end": 11, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100 + ], + "route": null, + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32769153 + } + ], + "palette_preferences_restored": true, + "scope": "Explicitly committed owned launcher query opens the second note on Down/Enter within one main-thread turn" +} diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..f29a979b --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,19 @@ +{ + "api": 26, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected" +} diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-largedraftrestoresexactcharactersafterrecreation.json b/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-largedraftrestoresexactcharactersafterrecreation.json new file mode 100644 index 00000000..fe1f8e9f --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-largedraftrestoresexactcharactersafterrecreation.json @@ -0,0 +1,84 @@ +{ + "api": 26, + "case": "largeDraftRestoresExactCharactersAfterRecreation", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "expected_body_length": 540000, + "expected_body_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "observation", + "stage": "exact-recreated-title", + "tag": "editor-title", + "text_length": 20, + "text_sha256": "62ec1d895e4027d007ab9e35dc918f7eb37a6d8c0770ad0a7afaca4781df4414", + "text_prefix": "Owned large draft \u65e5\u672c", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 108, + 97, + 114, + 103, + 101, + 32, + 100, + 114, + 97, + 102, + 116, + 32, + 26085, + 26412 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32755609 + }, + { + "kind": "observation", + "stage": "exact-recreated-body", + "tag": "editor-body", + "text_length": 540000, + "text_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "text_prefix": "Owned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": false, + "no_input_connection_created_for_this_observation": true, + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32755635 + } + ], + "palette_preferences_restored": true, + "scope": "Owned unsaved 540000-unit multilingual draft survives recreation with exact title/body characters" +} diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v2/record.json b/docs/validation/native-input/cohorts/legacy-contracts-v2/record.json new file mode 100644 index 00000000..176868e3 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v2/record.json @@ -0,0 +1,64 @@ +{ + "api": 26, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-absence-dev.tinycast.android.test": { + "passed": true + }, + "restore-absence-dev.tinycast.android": { + "passed": true + }, + "verify-initial-package-absence": { + "passed": true + } + }, + "completed": false, + "expected_negative": false, + "failures": 3, + "fixture_sha256": {}, + "font_scale": 1.0, + "initialization_error": false, + "instrumentation_exit_code": 0, + "layout": "phone", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "activeMultilingualCompositionKeepsResultSelection", + "committedCallerSelectionSurvivesIdleNativeRoutes", + "committedSameTurnLauncherActivationUsesCurrentNote", + "largeDraftRestoresExactCharactersAfterRecreation" + ], + "native_expected_outcome": false, + "original_font_scale": "null", + "original_geometry": { + "size": "Physical size: 1080x1920", + "density": "Physical density: 420" + }, + "passes": 2, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 58.0.3029.125)" + ], + "runner_sha256": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "suite": "native-input", + "test_apk_sha256": "6effc19e36580834dc6a05e6022fb4c6d29dfc03771651aad2e9dc91859d8be0" +} diff --git a/docs/validation/native-input/cohorts/legacy-contracts-v2/tests.log b/docs/validation/native-input/cohorts/legacy-contracts-v2/tests.log new file mode 100644 index 00000000..84e75bcf --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-contracts-v2/tests.log @@ -0,0 +1,198 @@ +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +Error in exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters(dev.tinycast.android.NativeInputCompatibilityDeviceTest): +androidx.compose.ui.test.ComposeTimeoutException: Condition still not satisfied after 5000 ms + at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitUntil(ComposeUiTest.android.kt:441) + at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitUntil(AndroidComposeTestRule.android.kt:306) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38(NativeInputCompatibilityDeviceTest.kt:302) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda29.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.withControlledInput(NativeInputCompatibilityDeviceTest.kt:270) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters(NativeInputCompatibilityDeviceTest.kt:299) + +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: stack=androidx.compose.ui.test.ComposeTimeoutException: Condition still not satisfied after 5000 ms + at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitUntil(ComposeUiTest.android.kt:441) + at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitUntil(AndroidComposeTestRule.android.kt:306) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38(NativeInputCompatibilityDeviceTest.kt:302) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda29.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.withControlledInput(NativeInputCompatibilityDeviceTest.kt:270) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters(NativeInputCompatibilityDeviceTest.kt:299) + +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +Error in activeMultilingualCompositionKeepsResultSelection(dev.tinycast.android.NativeInputCompatibilityDeviceTest): +androidx.compose.ui.test.ComposeTimeoutException: Condition still not satisfied after 5000 ms + at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitUntil(ComposeUiTest.android.kt:441) + at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitUntil(AndroidComposeTestRule.android.kt:306) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.activeMultilingualCompositionKeepsResultSelection$lambda$46(NativeInputCompatibilityDeviceTest.kt:389) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda26.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.withControlledInput(NativeInputCompatibilityDeviceTest.kt:270) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.activeMultilingualCompositionKeepsResultSelection(NativeInputCompatibilityDeviceTest.kt:377) + +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: stack=androidx.compose.ui.test.ComposeTimeoutException: Condition still not satisfied after 5000 ms + at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitUntil(ComposeUiTest.android.kt:441) + at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitUntil(AndroidComposeTestRule.android.kt:306) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.activeMultilingualCompositionKeepsResultSelection$lambda$46(NativeInputCompatibilityDeviceTest.kt:389) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda26.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.withControlledInput(NativeInputCompatibilityDeviceTest.kt:270) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.activeMultilingualCompositionKeepsResultSelection(NativeInputCompatibilityDeviceTest.kt:377) + +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +Error in committedSameTurnLauncherActivationUsesCurrentNote(dev.tinycast.android.NativeInputCompatibilityDeviceTest): +java.lang.AssertionError: expected: but was: + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.failNotEquals(Assert.java:835) + at org.junit.Assert.assertEquals(Assert.java:120) + at org.junit.Assert.assertEquals(Assert.java:146) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.committedSameTurnLauncherActivationUsesCurrentNote$lambda$52$lambda$51(NativeInputCompatibilityDeviceTest.kt:442) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda10.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457) + at java.util.concurrent.FutureTask.run(FutureTask.java:266) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2092) + at android.os.Handler.handleCallback(Handler.java:789) + at android.os.Handler.dispatchMessage(Handler.java:98) + at android.os.Looper.loop(Looper.java:164) + at android.app.ActivityThread.main(ActivityThread.java:6541) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) + +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: stack=java.lang.AssertionError: expected: but was: + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.failNotEquals(Assert.java:835) + at org.junit.Assert.assertEquals(Assert.java:120) + at org.junit.Assert.assertEquals(Assert.java:146) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.committedSameTurnLauncherActivationUsesCurrentNote$lambda$52$lambda$51(NativeInputCompatibilityDeviceTest.kt:442) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda10.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457) + at java.util.concurrent.FutureTask.run(FutureTask.java:266) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2092) + at android.os.Handler.handleCallback(Handler.java:789) + at android.os.Handler.dispatchMessage(Handler.java:98) + at android.os.Looper.loop(Looper.java:164) + at android.app.ActivityThread.main(ActivityThread.java:6541) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) + +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_RESULT: stream= + +Time: 38.034 +There were 3 failures: +1) exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters(dev.tinycast.android.NativeInputCompatibilityDeviceTest) +androidx.compose.ui.test.ComposeTimeoutException: Condition still not satisfied after 5000 ms + at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitUntil(ComposeUiTest.android.kt:441) + at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitUntil(AndroidComposeTestRule.android.kt:306) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38(NativeInputCompatibilityDeviceTest.kt:302) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda29.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.withControlledInput(NativeInputCompatibilityDeviceTest.kt:270) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters(NativeInputCompatibilityDeviceTest.kt:299) +2) activeMultilingualCompositionKeepsResultSelection(dev.tinycast.android.NativeInputCompatibilityDeviceTest) +androidx.compose.ui.test.ComposeTimeoutException: Condition still not satisfied after 5000 ms + at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitUntil(ComposeUiTest.android.kt:441) + at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitUntil(AndroidComposeTestRule.android.kt:306) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.activeMultilingualCompositionKeepsResultSelection$lambda$46(NativeInputCompatibilityDeviceTest.kt:389) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda26.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.withControlledInput(NativeInputCompatibilityDeviceTest.kt:270) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.activeMultilingualCompositionKeepsResultSelection(NativeInputCompatibilityDeviceTest.kt:377) +3) committedSameTurnLauncherActivationUsesCurrentNote(dev.tinycast.android.NativeInputCompatibilityDeviceTest) +java.lang.AssertionError: expected: but was: + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.failNotEquals(Assert.java:835) + at org.junit.Assert.assertEquals(Assert.java:120) + at org.junit.Assert.assertEquals(Assert.java:146) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.committedSameTurnLauncherActivationUsesCurrentNote$lambda$52$lambda$51(NativeInputCompatibilityDeviceTest.kt:442) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda10.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457) + at java.util.concurrent.FutureTask.run(FutureTask.java:266) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2092) + at android.os.Handler.handleCallback(Handler.java:789) + at android.os.Handler.dispatchMessage(Handler.java:98) + at android.os.Looper.loop(Looper.java:164) + at android.app.ActivityThread.main(ActivityThread.java:6541) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) + +FAILURES!!! +Tests run: 5, Failures: 3 + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-activemultilingualcompositionkeepsresultselection.json b/docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-activemultilingualcompositionkeepsresultselection.json new file mode 100644 index 00000000..26e39c1e --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-activemultilingualcompositionkeepsresultselection.json @@ -0,0 +1,131 @@ +{ + "api": 26, + "case": "activeMultilingualCompositionKeepsResultSelection", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 2, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 34383371 + }, + { + "kind": "observation", + "stage": "active-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 34383513 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "active-japanese-after-direct-navigation", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 34383531 + } + ], + "palette_preferences_restored": true, + "scope": "Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json b/docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json new file mode 100644 index 00000000..76eb52d9 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json @@ -0,0 +1,255 @@ +{ + "api": 26, + "case": "committedCallerSelectionSurvivesIdleNativeRoutes", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 2, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 22, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 22, + "selection_end": 22, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 34365576 + }, + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 34365963 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 34372026 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 34373902 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 34376350 + } + ], + "palette_preferences_restored": true, + "scope": "Committed caller query/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..5f09a239 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,99 @@ +{ + "api": 26, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 2, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-after-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 34379600 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-200-v4/record.json b/docs/validation/native-input/cohorts/legacy-owned-200-v4/record.json new file mode 100644 index 00000000..c97636a9 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-200-v4/record.json @@ -0,0 +1,70 @@ +{ + "api": 26, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-absence-dev.tinycast.android.test": { + "passed": true + }, + "verify-input-method-after-test-apk-removal": { + "passed": true + }, + "restore-absence-dev.tinycast.android": { + "passed": true + }, + "verify-initial-package-absence": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 2.0, + "ime_restoration_scope": "Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement", + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "phone", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "activeMultilingualCompositionKeepsResultSelection", + "committedCallerSelectionSurvivesIdleNativeRoutes" + ], + "native_expected_outcome": true, + "original_font_scale": "null", + "original_geometry": { + "size": "Physical size: 1080x1920", + "density": "Physical density: 420" + }, + "passes": 3, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 58.0.3029.125)" + ], + "runner_sha256": "0f08cc33955a073e0fd19d40cfeb08aa241254bbe1a257acdb8791080cac19a7", + "suite": "native-input", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-200-v4/tests.log b/docs/validation/native-input/cohorts/legacy-owned-200-v4/tests.log new file mode 100644 index 00000000..dd060bc3 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-200-v4/tests.log @@ -0,0 +1,51 @@ +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 23.638 + +OK (3 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json b/docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json new file mode 100644 index 00000000..637eadaa --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json @@ -0,0 +1,131 @@ +{ + "api": 26, + "case": "activeMultilingualCompositionKeepsResultSelection", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 2, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35450781 + }, + { + "kind": "observation", + "stage": "active-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35450853 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "active-japanese-after-direct-navigation", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35450856 + } + ], + "palette_preferences_restored": true, + "scope": "Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json b/docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json new file mode 100644 index 00000000..ec0bc165 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json @@ -0,0 +1,255 @@ +{ + "api": 26, + "case": "committedCallerSelectionSurvivesIdleNativeRoutes", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 2, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 22, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 22, + "selection_end": 22, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35442437 + }, + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35442498 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35443702 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35444672 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35445710 + } + ], + "palette_preferences_restored": true, + "scope": "Committed caller query/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..40a81b91 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,99 @@ +{ + "api": 26, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 2, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-after-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35448324 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-200-v5/record.json b/docs/validation/native-input/cohorts/legacy-owned-200-v5/record.json new file mode 100644 index 00000000..df4021c2 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-200-v5/record.json @@ -0,0 +1,92 @@ +{ + "api": 26, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-absence-dev.tinycast.android.test": { + "passed": true + }, + "verify-input-method-after-test-apk-removal": { + "passed": true + }, + "restore-absence-dev.tinycast.android": { + "passed": true + }, + "verify-initial-package-absence": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 2.0, + "ime_restoration_scope": "Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement", + "ime_restore_observations": [ + { + "query_ms": 127, + "all_raw_fields_equal": false + }, + { + "query_ms": 76, + "all_raw_fields_equal": true + }, + { + "query_ms": 58, + "all_raw_fields_equal": true + }, + { + "query_ms": 154, + "all_raw_fields_equal": true + }, + { + "query_ms": 100, + "all_raw_fields_equal": true + } + ], + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "phone", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "activeMultilingualCompositionKeepsResultSelection", + "committedCallerSelectionSurvivesIdleNativeRoutes" + ], + "native_expected_outcome": true, + "original_font_scale": "null", + "original_geometry": { + "size": "Physical size: 1080x1920", + "density": "Physical density: 420" + }, + "passes": 3, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 58.0.3029.125)" + ], + "runner_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "suite": "native-input", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-200-v5/tests.log b/docs/validation/native-input/cohorts/legacy-owned-200-v5/tests.log new file mode 100644 index 00000000..88a97fa7 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-200-v5/tests.log @@ -0,0 +1,51 @@ +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 10.347 + +OK (3 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-activemultilingualcompositionkeepsresultselection.json b/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-activemultilingualcompositionkeepsresultselection.json new file mode 100644 index 00000000..fb172e89 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-activemultilingualcompositionkeepsresultselection.json @@ -0,0 +1,131 @@ +{ + "api": 26, + "case": "activeMultilingualCompositionKeepsResultSelection", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33851729 + }, + { + "kind": "observation", + "stage": "active-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33852178 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "active-japanese-after-direct-navigation", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33852260 + } + ], + "palette_preferences_restored": true, + "scope": "Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json b/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json new file mode 100644 index 00000000..9b23cebb --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json @@ -0,0 +1,255 @@ +{ + "api": 26, + "case": "committedCallerSelectionSurvivesIdleNativeRoutes", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 22, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 22, + "selection_end": 22, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33805807 + }, + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33806057 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33809235 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33812167 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33817702 + } + ], + "palette_preferences_restored": true, + "scope": "Committed caller query/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedemojinavigationandcaretareexact.json b/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedemojinavigationandcaretareexact.json new file mode 100644 index 00000000..c5edf819 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedemojinavigationandcaretareexact.json @@ -0,0 +1,218 @@ +{ + "api": 26, + "case": "committedEmojiNavigationAndCaretAreExact", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33841541 + }, + { + "kind": "injected-key", + "code": 22, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 22, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 21, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 21, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 19, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 19, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 123, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 123, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 122, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 122, + "action": 1, + "accepted": true + }, + { + "kind": "window-key", + "code": 40, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 33844630 + }, + { + "kind": "injected-key", + "code": 40, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 40, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 33844634 + }, + { + "kind": "injected-key", + "code": 40, + "action": 1, + "accepted": true + }, + { + "kind": "window-key", + "code": 21, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 33844658 + }, + { + "kind": "injected-key", + "code": 21, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 21, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 33844661 + }, + { + "kind": "injected-key", + "code": 21, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "committed-query-selected-range", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 2, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33844858 + } + ], + "palette_preferences_restored": true, + "scope": "Explicitly committed Emoji query supports injected grid navigation, exact caret and selected range" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedsameturnlauncheractivationusescurrentnote.json b/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedsameturnlauncheractivationusescurrentnote.json new file mode 100644 index 00000000..20a20913 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedsameturnlauncheractivationusescurrentnote.json @@ -0,0 +1,98 @@ +{ + "api": 26, + "case": "committedSameTurnLauncherActivationUsesCurrentNote", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 11, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 11, + "text_sha256": "abae325470b759339986262e173907c559743e8c35f5771d8de64a42b3c07ebc", + "text_prefix": "Owned rapid", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 11, + "selection_end": 11, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100 + ], + "route": null, + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33859570 + }, + { + "kind": "observation", + "stage": "same-turn-exact-title", + "tag": "editor-title", + "text_length": 17, + "text_sha256": "bd027c4f9180a20a5fea195d5dd78db21c8d33918bec844bf88cd9c1ae1c57fe", + "text_prefix": "Owned rapid Alpha", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100, + 32, + 65, + 108, + 112, + 104, + 97 + ], + "route": "note", + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33860389 + } + ], + "palette_preferences_restored": true, + "scope": "Explicitly committed owned launcher query opens the second note on Down/Enter within one main-thread turn" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..39bf3fed --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,99 @@ +{ + "api": 26, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-after-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33825247 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-largedraftrestoresexactcharactersafterrecreation.json b/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-largedraftrestoresexactcharactersafterrecreation.json new file mode 100644 index 00000000..38975fc4 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-largedraftrestoresexactcharactersafterrecreation.json @@ -0,0 +1,84 @@ +{ + "api": 26, + "case": "largeDraftRestoresExactCharactersAfterRecreation", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "expected_body_length": 540000, + "expected_body_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "observation", + "stage": "exact-recreated-title", + "tag": "editor-title", + "text_length": 20, + "text_sha256": "62ec1d895e4027d007ab9e35dc918f7eb37a6d8c0770ad0a7afaca4781df4414", + "text_prefix": "Owned large draft \u65e5\u672c", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 108, + 97, + 114, + 103, + 101, + 32, + 100, + 114, + 97, + 102, + 116, + 32, + 26085, + 26412 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33834836 + }, + { + "kind": "observation", + "stage": "exact-recreated-body", + "tag": "editor-body", + "text_length": 540000, + "text_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "text_prefix": "Owned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": false, + "no_input_connection_created_for_this_observation": true, + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33834988 + } + ], + "palette_preferences_restored": true, + "scope": "Owned unsaved 540000-unit multilingual draft survives recreation with exact title/body characters" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v4/record.json b/docs/validation/native-input/cohorts/legacy-owned-full-v4/record.json new file mode 100644 index 00000000..1aeba319 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v4/record.json @@ -0,0 +1,73 @@ +{ + "api": 26, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-absence-dev.tinycast.android.test": { + "passed": true + }, + "verify-input-method-after-test-apk-removal": { + "passed": true + }, + "restore-absence-dev.tinycast.android": { + "passed": true + }, + "verify-initial-package-absence": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 1.0, + "ime_restoration_scope": "Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement", + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "phone", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "committedEmojiNavigationAndCaretAreExact", + "activeMultilingualCompositionKeepsResultSelection", + "committedCallerSelectionSurvivesIdleNativeRoutes", + "committedSameTurnLauncherActivationUsesCurrentNote", + "largeDraftRestoresExactCharactersAfterRecreation" + ], + "native_expected_outcome": true, + "original_font_scale": "null", + "original_geometry": { + "size": "Physical size: 1080x1920", + "density": "Physical density: 420" + }, + "passes": 6, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 58.0.3029.125)" + ], + "runner_sha256": "0f08cc33955a073e0fd19d40cfeb08aa241254bbe1a257acdb8791080cac19a7", + "suite": "native-input", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v4/tests.log b/docs/validation/native-input/cohorts/legacy-owned-full-v4/tests.log new file mode 100644 index 00000000..10f76936 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v4/tests.log @@ -0,0 +1,93 @@ +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedEmojiNavigationAndCaretAreExact +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedEmojiNavigationAndCaretAreExact +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 63.111 + +OK (6 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-activemultilingualcompositionkeepsresultselection.json b/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-activemultilingualcompositionkeepsresultselection.json new file mode 100644 index 00000000..a42383eb --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-activemultilingualcompositionkeepsresultselection.json @@ -0,0 +1,131 @@ +{ + "api": 26, + "case": "activeMultilingualCompositionKeepsResultSelection", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35187544 + }, + { + "kind": "observation", + "stage": "active-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35187715 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "active-japanese-after-direct-navigation", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35187729 + } + ], + "palette_preferences_restored": true, + "scope": "Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json b/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json new file mode 100644 index 00000000..6e6a6de7 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json @@ -0,0 +1,255 @@ +{ + "api": 26, + "case": "committedCallerSelectionSurvivesIdleNativeRoutes", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 22, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 22, + "selection_end": 22, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35168042 + }, + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35168162 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35170927 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35172433 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35173869 + } + ], + "palette_preferences_restored": true, + "scope": "Committed caller query/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedemojinavigationandcaretareexact.json b/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedemojinavigationandcaretareexact.json new file mode 100644 index 00000000..2e087c57 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedemojinavigationandcaretareexact.json @@ -0,0 +1,218 @@ +{ + "api": 26, + "case": "committedEmojiNavigationAndCaretAreExact", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35183955 + }, + { + "kind": "injected-key", + "code": 22, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 22, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 21, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 21, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 19, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 19, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 123, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 123, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 122, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 122, + "action": 1, + "accepted": true + }, + { + "kind": "window-key", + "code": 40, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 35185011 + }, + { + "kind": "injected-key", + "code": 40, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 40, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 35185019 + }, + { + "kind": "injected-key", + "code": 40, + "action": 1, + "accepted": true + }, + { + "kind": "window-key", + "code": 21, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 35185026 + }, + { + "kind": "injected-key", + "code": 21, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 21, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 35185035 + }, + { + "kind": "injected-key", + "code": 21, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "committed-query-selected-range", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 2, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35185160 + } + ], + "palette_preferences_restored": true, + "scope": "Explicitly committed Emoji query supports injected grid navigation, exact caret and selected range" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedsameturnlauncheractivationusescurrentnote.json b/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedsameturnlauncheractivationusescurrentnote.json new file mode 100644 index 00000000..82bf5f91 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedsameturnlauncheractivationusescurrentnote.json @@ -0,0 +1,98 @@ +{ + "api": 26, + "case": "committedSameTurnLauncherActivationUsesCurrentNote", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 11, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 11, + "text_sha256": "abae325470b759339986262e173907c559743e8c35f5771d8de64a42b3c07ebc", + "text_prefix": "Owned rapid", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 11, + "selection_end": 11, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100 + ], + "route": null, + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35189478 + }, + { + "kind": "observation", + "stage": "same-turn-exact-title", + "tag": "editor-title", + "text_length": 17, + "text_sha256": "bd027c4f9180a20a5fea195d5dd78db21c8d33918bec844bf88cd9c1ae1c57fe", + "text_prefix": "Owned rapid Alpha", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100, + 32, + 65, + 108, + 112, + 104, + 97 + ], + "route": "note", + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35189699 + } + ], + "palette_preferences_restored": true, + "scope": "Explicitly committed owned launcher query opens the second note on Down/Enter within one main-thread turn" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..6dbbcecd --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,99 @@ +{ + "api": 26, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-after-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35176946 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-largedraftrestoresexactcharactersafterrecreation.json b/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-largedraftrestoresexactcharactersafterrecreation.json new file mode 100644 index 00000000..2c581029 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-largedraftrestoresexactcharactersafterrecreation.json @@ -0,0 +1,84 @@ +{ + "api": 26, + "case": "largeDraftRestoresExactCharactersAfterRecreation", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "expected_body_length": 540000, + "expected_body_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "observation", + "stage": "exact-recreated-title", + "tag": "editor-title", + "text_length": 20, + "text_sha256": "62ec1d895e4027d007ab9e35dc918f7eb37a6d8c0770ad0a7afaca4781df4414", + "text_prefix": "Owned large draft \u65e5\u672c", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 108, + 97, + 114, + 103, + 101, + 32, + 100, + 114, + 97, + 102, + 116, + 32, + 26085, + 26412 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35180699 + }, + { + "kind": "observation", + "stage": "exact-recreated-body", + "tag": "editor-body", + "text_length": 540000, + "text_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "text_prefix": "Owned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": false, + "no_input_connection_created_for_this_observation": true, + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 35180772 + } + ], + "palette_preferences_restored": true, + "scope": "Owned unsaved 540000-unit multilingual draft survives recreation with exact title/body characters" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v5/record.json b/docs/validation/native-input/cohorts/legacy-owned-full-v5/record.json new file mode 100644 index 00000000..c351a787 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v5/record.json @@ -0,0 +1,95 @@ +{ + "api": 26, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-absence-dev.tinycast.android.test": { + "passed": true + }, + "verify-input-method-after-test-apk-removal": { + "passed": true + }, + "restore-absence-dev.tinycast.android": { + "passed": true + }, + "verify-initial-package-absence": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 1.0, + "ime_restoration_scope": "Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement", + "ime_restore_observations": [ + { + "query_ms": 73, + "all_raw_fields_equal": false + }, + { + "query_ms": 102, + "all_raw_fields_equal": true + }, + { + "query_ms": 93, + "all_raw_fields_equal": true + }, + { + "query_ms": 116, + "all_raw_fields_equal": true + }, + { + "query_ms": 72, + "all_raw_fields_equal": true + } + ], + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "phone", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "committedEmojiNavigationAndCaretAreExact", + "activeMultilingualCompositionKeepsResultSelection", + "committedCallerSelectionSurvivesIdleNativeRoutes", + "committedSameTurnLauncherActivationUsesCurrentNote", + "largeDraftRestoresExactCharactersAfterRecreation" + ], + "native_expected_outcome": true, + "original_font_scale": "null", + "original_geometry": { + "size": "Physical size: 1080x1920", + "density": "Physical density: 420" + }, + "passes": 6, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 58.0.3029.125)" + ], + "runner_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "suite": "native-input", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-full-v5/tests.log b/docs/validation/native-input/cohorts/legacy-owned-full-v5/tests.log new file mode 100644 index 00000000..1d7583fb --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-full-v5/tests.log @@ -0,0 +1,93 @@ +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedEmojiNavigationAndCaretAreExact +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedEmojiNavigationAndCaretAreExact +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 26.891 + +OK (6 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/legacy-owned-probe-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/legacy-owned-probe-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..c40a7adb --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-probe-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,99 @@ +{ + "api": 26, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-after-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 33442249 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-probe-v3/record.json b/docs/validation/native-input/cohorts/legacy-owned-probe-v3/record.json new file mode 100644 index 00000000..9eeb2959 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-probe-v3/record.json @@ -0,0 +1,64 @@ +{ + "api": 26, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-absence-dev.tinycast.android.test": { + "passed": true + }, + "restore-absence-dev.tinycast.android": { + "passed": true + }, + "verify-initial-package-absence": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 1.0, + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "phone", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters" + ], + "native_expected_outcome": true, + "original_font_scale": "null", + "original_geometry": { + "size": "Physical size: 1080x1920", + "density": "Physical density: 420" + }, + "passes": 1, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 58.0.3029.125)" + ], + "runner_sha256": "97b130618a6edcdbabee5f1f4e1f8320e30b6a6f3eaa794b37e961919e02dcad", + "suite": "native-input", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443" +} diff --git a/docs/validation/native-input/cohorts/legacy-owned-probe-v3/tests.log b/docs/validation/native-input/cohorts/legacy-owned-probe-v3/tests.log new file mode 100644 index 00000000..85c8ca85 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-owned-probe-v3/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 9.546 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/legacy-same-length-v6/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/legacy-same-length-v6/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..9abdd03c --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-same-length-v6/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,100 @@ +{ + "api": 26, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-after-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 37568042 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false, + "wrong_content_rejected": [ + "changed-character", + "same-length-substitution", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/legacy-same-length-v6/record.json b/docs/validation/native-input/cohorts/legacy-same-length-v6/record.json new file mode 100644 index 00000000..1e22fcf1 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-same-length-v6/record.json @@ -0,0 +1,94 @@ +{ + "api": 26, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-absence-dev.tinycast.android.test": { + "passed": true + }, + "verify-input-method-after-test-apk-removal": { + "passed": true + }, + "restore-absence-dev.tinycast.android": { + "passed": true + }, + "verify-initial-package-absence": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 1.0, + "ime_restoration_scope": "Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement", + "ime_restore_observations": [ + { + "query_ms": 56, + "all_raw_fields_equal": false + }, + { + "query_ms": 50, + "all_raw_fields_equal": true + }, + { + "query_ms": 57, + "all_raw_fields_equal": true + }, + { + "query_ms": 49, + "all_raw_fields_equal": true + }, + { + "query_ms": 52, + "all_raw_fields_equal": true + }, + { + "query_ms": 78, + "all_raw_fields_equal": true + } + ], + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "phone", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters" + ], + "native_expected_outcome": true, + "original_font_scale": "null", + "original_geometry": { + "size": "Physical size: 1080x1920", + "density": "Physical density: 420" + }, + "passes": 1, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 58.0.3029.125)" + ], + "runner_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "suite": "native-input", + "test_apk_sha256": "60598e18bab4968030c3fe627a54ee2c0f018ce801b4b13f34112cdd011ddabc" +} diff --git a/docs/validation/native-input/cohorts/legacy-same-length-v6/tests.log b/docs/validation/native-input/cohorts/legacy-same-length-v6/tests.log new file mode 100644 index 00000000..f1b866d6 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-same-length-v6/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 2.37 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/legacy-strict-control-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/legacy-strict-control-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..f94dfd2c --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-strict-control-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,92 @@ +{ + "api": 26, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-before-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 32229297 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": true, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/legacy-strict-control-v1/record.json b/docs/validation/native-input/cohorts/legacy-strict-control-v1/record.json new file mode 100644 index 00000000..c40ed432 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-strict-control-v1/record.json @@ -0,0 +1,60 @@ +{ + "api": 26, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-absence-dev.tinycast.android.test": { + "passed": true + }, + "restore-absence-dev.tinycast.android": { + "passed": true + }, + "verify-initial-package-absence": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 1.0, + "initialization_error": false, + "instrumentation_exit_code": 0, + "layout": "phone", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters" + ], + "native_expected_outcome": true, + "original_font_scale": "null", + "original_geometry": { + "size": "Physical size: 1080x1920", + "density": "Physical density: 420" + }, + "passes": 1, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 58.0.3029.125)" + ], + "runner_sha256": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "suite": "native-input", + "test_apk_sha256": "c52f3e04917a94a7e7cf3cbb2a259c469a5e6e860cbb45691b52f2995acd7196" +} diff --git a/docs/validation/native-input/cohorts/legacy-strict-control-v1/tests.log b/docs/validation/native-input/cohorts/legacy-strict-control-v1/tests.log new file mode 100644 index 00000000..769a2482 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-strict-control-v1/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 2.844 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/legacy-strict-control-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/legacy-strict-control-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..ea44e59f --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-strict-control-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,27 @@ +{ + "api": 26, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false +} diff --git a/docs/validation/native-input/cohorts/legacy-strict-control-v2/record.json b/docs/validation/native-input/cohorts/legacy-strict-control-v2/record.json new file mode 100644 index 00000000..cf4e5738 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-strict-control-v2/record.json @@ -0,0 +1,68 @@ +{ + "api": 26, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-absence-dev.tinycast.android.test": { + "passed": true + }, + "verify-input-method-after-test-apk-removal": { + "passed": true + }, + "restore-absence-dev.tinycast.android": { + "passed": true + }, + "verify-initial-package-absence": { + "passed": true + } + }, + "completed": false, + "expected_negative": false, + "failures": 1, + "fixture_sha256": {}, + "font_scale": 1.0, + "ime_restoration_scope": "Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement", + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "phone", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters" + ], + "native_expected_outcome": false, + "original_font_scale": "null", + "original_geometry": { + "size": "Physical size: 1080x1920", + "density": "Physical density: 420" + }, + "passes": 0, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 58.0.3029.125)" + ], + "runner_sha256": "0f08cc33955a073e0fd19d40cfeb08aa241254bbe1a257acdb8791080cac19a7", + "suite": "native-input", + "test_apk_sha256": "663557f37ad94b33e9db71fc5628a2098198e8e28b7eae12c2dbcf7cef60d1b3" +} diff --git a/docs/validation/native-input/cohorts/legacy-strict-control-v2/tests.log b/docs/validation/native-input/cohorts/legacy-strict-control-v2/tests.log new file mode 100644 index 00000000..71d7c8c1 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-strict-control-v2/tests.log @@ -0,0 +1,86 @@ +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +Error in exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters(dev.tinycast.android.NativeInputCompatibilityDeviceTest): +java.lang.AssertionError: Exact character matcher must accept the composing title + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.assertTrue(Assert.java:42) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38$lambda$36$lambda$35(NativeInputCompatibilityDeviceTest.kt:320) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda27.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457) + at java.util.concurrent.FutureTask.run(FutureTask.java:266) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2092) + at android.os.Handler.handleCallback(Handler.java:789) + at android.os.Handler.dispatchMessage(Handler.java:98) + at android.os.Looper.loop(Looper.java:164) + at android.app.ActivityThread.main(ActivityThread.java:6541) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) + +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: stack=java.lang.AssertionError: Exact character matcher must accept the composing title + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.assertTrue(Assert.java:42) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38$lambda$36$lambda$35(NativeInputCompatibilityDeviceTest.kt:320) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda27.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457) + at java.util.concurrent.FutureTask.run(FutureTask.java:266) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2092) + at android.os.Handler.handleCallback(Handler.java:789) + at android.os.Handler.dispatchMessage(Handler.java:98) + at android.os.Looper.loop(Looper.java:164) + at android.app.ActivityThread.main(ActivityThread.java:6541) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) + +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_RESULT: stream= + +Time: 4.058 +There was 1 failure: +1) exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters(dev.tinycast.android.NativeInputCompatibilityDeviceTest) +java.lang.AssertionError: Exact character matcher must accept the composing title + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.assertTrue(Assert.java:42) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38$lambda$36$lambda$35(NativeInputCompatibilityDeviceTest.kt:320) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda27.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457) + at java.util.concurrent.FutureTask.run(FutureTask.java:266) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2092) + at android.os.Handler.handleCallback(Handler.java:789) + at android.os.Handler.dispatchMessage(Handler.java:98) + at android.os.Looper.loop(Looper.java:164) + at android.app.ActivityThread.main(ActivityThread.java:6541) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) + +FAILURES!!! +Tests run: 1, Failures: 1 + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/legacy-strict-control-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/legacy-strict-control-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..ea44e59f --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-strict-control-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,27 @@ +{ + "api": 26, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false +} diff --git a/docs/validation/native-input/cohorts/legacy-strict-control-v3/record.json b/docs/validation/native-input/cohorts/legacy-strict-control-v3/record.json new file mode 100644 index 00000000..e36be3e2 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-strict-control-v3/record.json @@ -0,0 +1,90 @@ +{ + "api": 26, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-absence-dev.tinycast.android.test": { + "passed": true + }, + "verify-input-method-after-test-apk-removal": { + "passed": true + }, + "restore-absence-dev.tinycast.android": { + "passed": true + }, + "verify-initial-package-absence": { + "passed": true + } + }, + "completed": false, + "expected_negative": false, + "failures": 1, + "fixture_sha256": {}, + "font_scale": 1.0, + "ime_restoration_scope": "Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement", + "ime_restore_observations": [ + { + "query_ms": 70, + "all_raw_fields_equal": false + }, + { + "query_ms": 127, + "all_raw_fields_equal": true + }, + { + "query_ms": 63, + "all_raw_fields_equal": true + }, + { + "query_ms": 84, + "all_raw_fields_equal": true + }, + { + "query_ms": 134, + "all_raw_fields_equal": true + } + ], + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "phone", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters" + ], + "native_expected_outcome": false, + "original_font_scale": "null", + "original_geometry": { + "size": "Physical size: 1080x1920", + "density": "Physical density: 420" + }, + "passes": 0, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 58.0.3029.125)" + ], + "runner_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "suite": "native-input", + "test_apk_sha256": "663557f37ad94b33e9db71fc5628a2098198e8e28b7eae12c2dbcf7cef60d1b3" +} diff --git a/docs/validation/native-input/cohorts/legacy-strict-control-v3/tests.log b/docs/validation/native-input/cohorts/legacy-strict-control-v3/tests.log new file mode 100644 index 00000000..04b3ba78 --- /dev/null +++ b/docs/validation/native-input/cohorts/legacy-strict-control-v3/tests.log @@ -0,0 +1,86 @@ +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +Error in exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters(dev.tinycast.android.NativeInputCompatibilityDeviceTest): +java.lang.AssertionError: Exact character matcher must accept the composing title + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.assertTrue(Assert.java:42) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38$lambda$36$lambda$35(NativeInputCompatibilityDeviceTest.kt:320) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda27.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457) + at java.util.concurrent.FutureTask.run(FutureTask.java:266) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2092) + at android.os.Handler.handleCallback(Handler.java:789) + at android.os.Handler.dispatchMessage(Handler.java:98) + at android.os.Looper.loop(Looper.java:164) + at android.app.ActivityThread.main(ActivityThread.java:6541) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) + +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: stack=java.lang.AssertionError: Exact character matcher must accept the composing title + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.assertTrue(Assert.java:42) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38$lambda$36$lambda$35(NativeInputCompatibilityDeviceTest.kt:320) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda27.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457) + at java.util.concurrent.FutureTask.run(FutureTask.java:266) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2092) + at android.os.Handler.handleCallback(Handler.java:789) + at android.os.Handler.dispatchMessage(Handler.java:98) + at android.os.Looper.loop(Looper.java:164) + at android.app.ActivityThread.main(ActivityThread.java:6541) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) + +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_RESULT: stream= + +Time: 2.554 +There was 1 failure: +1) exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters(dev.tinycast.android.NativeInputCompatibilityDeviceTest) +java.lang.AssertionError: Exact character matcher must accept the composing title + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.assertTrue(Assert.java:42) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38$lambda$36$lambda$35(NativeInputCompatibilityDeviceTest.kt:320) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda27.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457) + at java.util.concurrent.FutureTask.run(FutureTask.java:266) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2092) + at android.os.Handler.handleCallback(Handler.java:789) + at android.os.Handler.dispatchMessage(Handler.java:98) + at android.os.Looper.loop(Looper.java:164) + at android.app.ActivityThread.main(ActivityThread.java:6541) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) + +FAILURES!!! +Tests run: 1, Failures: 1 + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/modern-before-v1/cases/case-recordcallerselectionacrossnativeroutes.json b/docs/validation/native-input/cohorts/modern-before-v1/cases/case-recordcallerselectionacrossnativeroutes.json new file mode 100644 index 00000000..804afa2e --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-before-v1/cases/case-recordcallerselectionacrossnativeroutes.json @@ -0,0 +1,203 @@ +{ + "api": 36, + "case": "recordCallerSelectionAcrossNativeRoutes", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_completed": true, + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "observations": [ + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 127916737 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 127919083 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 127920196 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 127922622 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution", + "selection_setup": "Semantic selection action; not physical selection", + "updates_scope": "Idle native Updates route, no public check/download/install requested" +} diff --git a/docs/validation/native-input/cohorts/modern-before-v1/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json b/docs/validation/native-input/cohorts/modern-before-v1/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json new file mode 100644 index 00000000..78278924 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-before-v1/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json @@ -0,0 +1,353 @@ +{ + "api": 36, + "case": "recordDefaultImeAndControlledCompositionNavigation", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_completed": true, + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "observations": [ + { + "kind": "observation", + "stage": "default-ime-after-semantic-replacement", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 127928161 + }, + { + "kind": "injected-key", + "code": 22, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 22, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "default-after-injected-right", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 1, + "ime_accepting_text": true, + "uptime_ms": 127929204 + }, + { + "kind": "window-key", + "code": 111, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 127929275 + }, + { + "kind": "injected-key", + "code": 111, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 111, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 127929451 + }, + { + "kind": "injected-key", + "code": 111, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "default-after-injected-escape", + "tag": "emoji-search", + "text_length": 0, + "text_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "text_prefix": "", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 127929829 + }, + { + "kind": "direct-key", + "code": 111, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 111, + "action": 1, + "handled": false + }, + { + "kind": "controlled-input-connection-created", + "input_type": 32769, + "ime_options": 33554435, + "initial_selection_start": 4, + "initial_selection_end": 4 + }, + { + "kind": "observation", + "stage": "controlled-finish-composition", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 127930738 + }, + { + "kind": "injected-key", + "code": 22, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 22, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "controlled-after-injected-right", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 1, + "ime_accepting_text": true, + "uptime_ms": 127930871 + }, + { + "kind": "injected-key", + "code": 20, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "controlled-after-injected-down", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 11, + "ime_accepting_text": true, + "uptime_ms": 127930984 + }, + { + "kind": "observation", + "stage": "controlled-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 127931683 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "japanese-after-direct-right", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 127931693 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution" +} diff --git a/docs/validation/native-input/cohorts/modern-before-v1/cases/case-recordlargedrafttextandannotationsafterrecreation.json b/docs/validation/native-input/cohorts/modern-before-v1/cases/case-recordlargedrafttextandannotationsafterrecreation.json new file mode 100644 index 00000000..2ff4bc74 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-before-v1/cases/case-recordlargedrafttextandannotationsafterrecreation.json @@ -0,0 +1,87 @@ +{ + "api": 36, + "body_annotated_exact": true, + "body_plain_exact": true, + "case": "recordLargeDraftTextAndAnnotationsAfterRecreation", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_completed": true, + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "expected_body_length": 540000, + "expected_body_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "font_scale": 1, + "observations": [ + { + "kind": "observation", + "stage": "recreated-title", + "tag": "editor-title", + "text_length": 20, + "text_sha256": "62ec1d895e4027d007ab9e35dc918f7eb37a6d8c0770ad0a7afaca4781df4414", + "text_prefix": "Owned large draft \u65e5\u672c", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 108, + 97, + 114, + 103, + 101, + 32, + 100, + 114, + 97, + 102, + 116, + 32, + 26085, + 26412 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 127939981 + }, + { + "kind": "observation", + "stage": "recreated-body", + "tag": "editor-body", + "text_length": 540000, + "text_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "text_prefix": "Owned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": false, + "no_input_connection_created_for_this_observation": true, + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 127939992 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution", + "title_annotated_exact": true, + "title_plain_exact": true +} diff --git a/docs/validation/native-input/cohorts/modern-before-v1/record.json b/docs/validation/native-input/cohorts/modern-before-v1/record.json new file mode 100644 index 00000000..8452d8c5 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-before-v1/record.json @@ -0,0 +1,78 @@ +{ + "api": 36, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "palette-bytes": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "profile-installer-marker": { + "passed": true + }, + "installed-data-and-evidence": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-binary-dev.tinycast.android": { + "passed": true + }, + "verify-binary-dev.tinycast.android": { + "passed": true + }, + "restore-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-binary-dev.tinycast.android.test": { + "passed": true + }, + "release-owner-last": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 1.0, + "initialization_error": false, + "instrumentation_exit_code": 0, + "layout": "tablet", + "methods": [ + "recordDefaultImeAndControlledCompositionNavigation", + "recordCallerSelectionAcrossNativeRoutes", + "recordLargeDraftTextAndAnnotationsAfterRecreation" + ], + "native_expected_outcome": true, + "original_font_scale": "1.0", + "original_geometry": { + "size": "Physical size: 1920x1200", + "density": "Physical density: 240" + }, + "passes": 3, + "preserved_file_count": 573, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 133.0.6943.137)" + ], + "runner_sha256": "6d2d61bd4fe43b6e906b26d233c5cb65bb605f4f9ae8296d1b2f79e55a68cce0", + "suite": "native-input", + "test_apk_sha256": "95dff20e67a68a07b6da3f62e116272d9b8c30ae06d9f602909d124c8c4405d3" +} diff --git a/docs/validation/native-input/cohorts/modern-before-v1/tests.log b/docs/validation/native-input/cohorts/modern-before-v1/tests.log new file mode 100644 index 00000000..5a0f0861 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-before-v1/tests.log @@ -0,0 +1,51 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: test=recordCallerSelectionAcrossNativeRoutes +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=recordCallerSelectionAcrossNativeRoutes +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=recordDefaultImeAndControlledCompositionNavigation +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=recordDefaultImeAndControlledCompositionNavigation +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=recordLargeDraftTextAndAnnotationsAfterRecreation +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=recordLargeDraftTextAndAnnotationsAfterRecreation +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 31.291 + +OK (3 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordcallerselectionacrossnativeroutes.json b/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordcallerselectionacrossnativeroutes.json new file mode 100644 index 00000000..18d96553 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordcallerselectionacrossnativeroutes.json @@ -0,0 +1,204 @@ +{ + "api": 36, + "case": "recordCallerSelectionAcrossNativeRoutes", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_completed": true, + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "observations": [ + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128222778 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128225567 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128226928 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128229916 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution", + "selection_setup": "Semantic selection action; not physical selection", + "updates_root_focus_requested_before_return": true, + "updates_scope": "Idle native Updates route, no public check/download/install requested" +} diff --git a/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json b/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json new file mode 100644 index 00000000..0a1c44c9 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json @@ -0,0 +1,353 @@ +{ + "api": 36, + "case": "recordDefaultImeAndControlledCompositionNavigation", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_completed": true, + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "observations": [ + { + "kind": "observation", + "stage": "default-ime-after-semantic-replacement", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128253594 + }, + { + "kind": "injected-key", + "code": 22, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 22, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "default-after-injected-right", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 1, + "ime_accepting_text": true, + "uptime_ms": 128254817 + }, + { + "kind": "window-key", + "code": 111, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 128254875 + }, + { + "kind": "injected-key", + "code": 111, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 111, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 128254995 + }, + { + "kind": "injected-key", + "code": 111, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "default-after-injected-escape", + "tag": "emoji-search", + "text_length": 0, + "text_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "text_prefix": "", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128255190 + }, + { + "kind": "direct-key", + "code": 111, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 111, + "action": 1, + "handled": false + }, + { + "kind": "controlled-input-connection-created", + "input_type": 32769, + "ime_options": 33554435, + "initial_selection_start": 4, + "initial_selection_end": 4 + }, + { + "kind": "observation", + "stage": "controlled-finish-composition", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128255846 + }, + { + "kind": "injected-key", + "code": 22, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 22, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "controlled-after-injected-right", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 1, + "ime_accepting_text": true, + "uptime_ms": 128255997 + }, + { + "kind": "injected-key", + "code": 20, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "controlled-after-injected-down", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 11, + "ime_accepting_text": true, + "uptime_ms": 128256265 + }, + { + "kind": "observation", + "stage": "controlled-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128257187 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "japanese-after-direct-right", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128257218 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution" +} diff --git a/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordinjectedtypingandcommittedquerynavigation.json b/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordinjectedtypingandcommittedquerynavigation.json new file mode 100644 index 00000000..e9177ad1 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordinjectedtypingandcommittedquerynavigation.json @@ -0,0 +1,104 @@ +{ + "api": 36, + "case": "recordInjectedTypingAndCommittedQueryNavigation", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "observations": [ + { + "kind": "injected-key", + "code": 34, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 34, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 128236550 + }, + { + "kind": "injected-key", + "code": 34, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 29, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 29, + "action": 1, + "accepted": true + }, + { + "kind": "window-key", + "code": 29, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 128240213 + }, + { + "kind": "injected-key", + "code": 31, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 31, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 128241026 + }, + { + "kind": "injected-key", + "code": 31, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 33, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 33, + "action": 1, + "accepted": true + }, + { + "kind": "window-key", + "code": 33, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 128243265 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution" +} diff --git a/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordlargedrafttextandannotationsafterrecreation.json b/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordlargedrafttextandannotationsafterrecreation.json new file mode 100644 index 00000000..9186cd42 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordlargedrafttextandannotationsafterrecreation.json @@ -0,0 +1,87 @@ +{ + "api": 36, + "body_annotated_exact": true, + "body_plain_exact": true, + "case": "recordLargeDraftTextAndAnnotationsAfterRecreation", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_completed": true, + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "expected_body_length": 540000, + "expected_body_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "font_scale": 1, + "observations": [ + { + "kind": "observation", + "stage": "recreated-title", + "tag": "editor-title", + "text_length": 20, + "text_sha256": "62ec1d895e4027d007ab9e35dc918f7eb37a6d8c0770ad0a7afaca4781df4414", + "text_prefix": "Owned large draft \u65e5\u672c", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 108, + 97, + 114, + 103, + 101, + 32, + 100, + 114, + 97, + 102, + 116, + 32, + 26085, + 26412 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128271334 + }, + { + "kind": "observation", + "stage": "recreated-body", + "tag": "editor-body", + "text_length": 540000, + "text_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "text_prefix": "Owned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": false, + "no_input_connection_created_for_this_observation": true, + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128271337 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution", + "title_annotated_exact": true, + "title_plain_exact": true +} diff --git a/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordsameturnlauncheractivationtextandannotations.json b/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordsameturnlauncheractivationtextandannotations.json new file mode 100644 index 00000000..4d0156a1 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordsameturnlauncheractivationtextandannotations.json @@ -0,0 +1,95 @@ +{ + "actual_note_id": "notes:b5f176b8-6f90-44f3-94a3-1c2249c50267", + "api": 36, + "case": "recordSameTurnLauncherActivationTextAndAnnotations", + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_completed": true, + "diagnostic_only": true, + "emoji_preferences_unchanged": true, + "expected_note_id": "notes:b5f176b8-6f90-44f3-94a3-1c2249c50267", + "font_scale": 1, + "observations": [ + { + "kind": "observation", + "stage": "before-same-turn-navigation", + "tag": "search", + "text_length": 11, + "text_sha256": "abae325470b759339986262e173907c559743e8c35f5771d8de64a42b3c07ebc", + "text_prefix": "Owned rapid", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 11, + "selection_end": 11, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100 + ], + "route": null, + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128260380 + }, + { + "kind": "observation", + "stage": "same-turn-destination-title", + "tag": "editor-title", + "text_length": 17, + "text_sha256": "bd027c4f9180a20a5fea195d5dd78db21c8d33918bec844bf88cd9c1ae1c57fe", + "text_prefix": "Owned rapid Alpha", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100, + 32, + 65, + 108, + 112, + 104, + 97 + ], + "route": "note", + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128261263 + } + ], + "palette_preferences_restored": true, + "scope": "Owned native input observations; semantic/model setup and injected keys are not physical typing; no clipboard or extension execution", + "title_annotated_exact": true, + "title_plain_exact": true +} diff --git a/docs/validation/native-input/cohorts/modern-before-v2/record.json b/docs/validation/native-input/cohorts/modern-before-v2/record.json new file mode 100644 index 00000000..68059273 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-before-v2/record.json @@ -0,0 +1,80 @@ +{ + "api": 36, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "palette-bytes": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "profile-installer-marker": { + "passed": true + }, + "installed-data-and-evidence": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-binary-dev.tinycast.android": { + "passed": true + }, + "verify-binary-dev.tinycast.android": { + "passed": true + }, + "restore-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-binary-dev.tinycast.android.test": { + "passed": true + }, + "release-owner-last": { + "passed": true + } + }, + "completed": false, + "expected_negative": false, + "failures": 1, + "fixture_sha256": {}, + "font_scale": 1.0, + "initialization_error": false, + "instrumentation_exit_code": 0, + "layout": "tablet", + "methods": [ + "recordDefaultImeAndControlledCompositionNavigation", + "recordCallerSelectionAcrossNativeRoutes", + "recordLargeDraftTextAndAnnotationsAfterRecreation", + "recordSameTurnLauncherActivationTextAndAnnotations", + "recordInjectedTypingAndCommittedQueryNavigation" + ], + "native_expected_outcome": false, + "original_font_scale": "1.0", + "original_geometry": { + "size": "Physical size: 1920x1200", + "density": "Physical density: 240" + }, + "passes": 4, + "preserved_file_count": 573, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 133.0.6943.137)" + ], + "runner_sha256": "a9e45755143efc91340a8bd0a9d8b75d0fd54d5a51cb06f50446c5e7c5378ba0", + "suite": "native-input", + "test_apk_sha256": "be1d64e7f6874911b8a57459f7970f04a38bdb5c04ba9a3151481f6dbd664df8" +} diff --git a/docs/validation/native-input/cohorts/modern-before-v2/tests.log b/docs/validation/native-input/cohorts/modern-before-v2/tests.log new file mode 100644 index 00000000..cadc0c34 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-before-v2/tests.log @@ -0,0 +1,97 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: test=recordCallerSelectionAcrossNativeRoutes +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=recordCallerSelectionAcrossNativeRoutes +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=recordInjectedTypingAndCommittedQueryNavigation +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stack=androidx.compose.ui.test.ComposeTimeoutException: Condition still not satisfied after 5000 ms + at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitUntil(ComposeUiTest.android.kt:441) + at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitUntil(AndroidComposeTestRule.android.kt:306) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.recordInjectedTypingAndCommittedQueryNavigation(NativeInputCompatibilityDeviceTest.kt:227) + +INSTRUMENTATION_STATUS: stream= +Error in recordInjectedTypingAndCommittedQueryNavigation(dev.tinycast.android.NativeInputCompatibilityDeviceTest): +androidx.compose.ui.test.ComposeTimeoutException: Condition still not satisfied after 5000 ms + at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitUntil(ComposeUiTest.android.kt:441) + at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitUntil(AndroidComposeTestRule.android.kt:306) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.recordInjectedTypingAndCommittedQueryNavigation(NativeInputCompatibilityDeviceTest.kt:227) + +INSTRUMENTATION_STATUS: test=recordInjectedTypingAndCommittedQueryNavigation +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=recordDefaultImeAndControlledCompositionNavigation +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=recordDefaultImeAndControlledCompositionNavigation +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=recordSameTurnLauncherActivationTextAndAnnotations +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=recordSameTurnLauncherActivationTextAndAnnotations +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=recordLargeDraftTextAndAnnotationsAfterRecreation +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=recordLargeDraftTextAndAnnotationsAfterRecreation +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 54.749 +There was 1 failure: +1) recordInjectedTypingAndCommittedQueryNavigation(dev.tinycast.android.NativeInputCompatibilityDeviceTest) +androidx.compose.ui.test.ComposeTimeoutException: Condition still not satisfied after 5000 ms + at androidx.compose.ui.test.AndroidComposeUiTestEnvironment$AndroidComposeUiTestImpl.waitUntil(ComposeUiTest.android.kt:441) + at androidx.compose.ui.test.junit4.AndroidComposeTestRule.waitUntil(AndroidComposeTestRule.android.kt:306) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.recordInjectedTypingAndCommittedQueryNavigation(NativeInputCompatibilityDeviceTest.kt:227) + +FAILURES!!! +Tests run: 5, Failures: 1 + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-activemultilingualcompositionkeepsresultselection.json b/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-activemultilingualcompositionkeepsresultselection.json new file mode 100644 index 00000000..dd5ba550 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-activemultilingualcompositionkeepsresultselection.json @@ -0,0 +1,131 @@ +{ + "api": 36, + "case": "activeMultilingualCompositionKeepsResultSelection", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128781962 + }, + { + "kind": "observation", + "stage": "active-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128782227 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "active-japanese-after-direct-navigation", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128782247 + } + ], + "palette_preferences_restored": true, + "scope": "Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication" +} diff --git a/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedcallerselectionsurvivesidlenativeroutes.json b/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedcallerselectionsurvivesidlenativeroutes.json new file mode 100644 index 00000000..8660ad32 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedcallerselectionsurvivesidlenativeroutes.json @@ -0,0 +1,255 @@ +{ + "api": 36, + "case": "committedCallerSelectionSurvivesIdleNativeRoutes", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 22, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 22, + "selection_end": 22, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128738144 + }, + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128738267 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128740567 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128741588 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128744792 + } + ], + "palette_preferences_restored": true, + "scope": "Committed caller query/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} diff --git a/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedemojinavigationandcaretareexact.json b/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedemojinavigationandcaretareexact.json new file mode 100644 index 00000000..2f4abcd3 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedemojinavigationandcaretareexact.json @@ -0,0 +1,218 @@ +{ + "api": 36, + "case": "committedEmojiNavigationAndCaretAreExact", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128771962 + }, + { + "kind": "injected-key", + "code": 22, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 22, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 21, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 21, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 19, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 19, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 123, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 123, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 122, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 122, + "action": 1, + "accepted": true + }, + { + "kind": "window-key", + "code": 40, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 128774373 + }, + { + "kind": "injected-key", + "code": 40, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 40, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 128774377 + }, + { + "kind": "injected-key", + "code": 40, + "action": 1, + "accepted": true + }, + { + "kind": "window-key", + "code": 21, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 128774486 + }, + { + "kind": "injected-key", + "code": 21, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 21, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 128774491 + }, + { + "kind": "injected-key", + "code": 21, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "committed-query-selected-range", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 2, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128774723 + } + ], + "palette_preferences_restored": true, + "scope": "Explicitly committed Emoji query supports injected grid navigation, exact caret and selected range" +} diff --git a/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedsameturnlauncheractivationusescurrentnote.json b/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedsameturnlauncheractivationusescurrentnote.json new file mode 100644 index 00000000..99ff7130 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedsameturnlauncheractivationusescurrentnote.json @@ -0,0 +1,98 @@ +{ + "api": 36, + "case": "committedSameTurnLauncherActivationUsesCurrentNote", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 11, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 11, + "text_sha256": "abae325470b759339986262e173907c559743e8c35f5771d8de64a42b3c07ebc", + "text_prefix": "Owned rapid", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 11, + "selection_end": 11, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100 + ], + "route": null, + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128787959 + }, + { + "kind": "observation", + "stage": "same-turn-exact-title", + "tag": "editor-title", + "text_length": 17, + "text_sha256": "bd027c4f9180a20a5fea195d5dd78db21c8d33918bec844bf88cd9c1ae1c57fe", + "text_prefix": "Owned rapid Alpha", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100, + 32, + 65, + 108, + 112, + 104, + 97 + ], + "route": "note", + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128789935 + } + ], + "palette_preferences_restored": true, + "scope": "Explicitly committed owned launcher query opens the second note on Down/Enter within one main-thread turn" +} diff --git a/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..554b0b00 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,92 @@ +{ + "api": 36, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-before-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128750167 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": true, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-largedraftrestoresexactcharactersafterrecreation.json b/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-largedraftrestoresexactcharactersafterrecreation.json new file mode 100644 index 00000000..c4d8cc7f --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-largedraftrestoresexactcharactersafterrecreation.json @@ -0,0 +1,84 @@ +{ + "api": 36, + "case": "largeDraftRestoresExactCharactersAfterRecreation", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "expected_body_length": 540000, + "expected_body_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "observation", + "stage": "exact-recreated-title", + "tag": "editor-title", + "text_length": 20, + "text_sha256": "62ec1d895e4027d007ab9e35dc918f7eb37a6d8c0770ad0a7afaca4781df4414", + "text_prefix": "Owned large draft \u65e5\u672c", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 108, + 97, + 114, + 103, + 101, + 32, + 100, + 114, + 97, + 102, + 116, + 32, + 26085, + 26412 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128766435 + }, + { + "kind": "observation", + "stage": "exact-recreated-body", + "tag": "editor-body", + "text_length": 540000, + "text_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "text_prefix": "Owned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": false, + "no_input_connection_created_for_this_observation": true, + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128766445 + } + ], + "palette_preferences_restored": true, + "scope": "Owned unsaved 540000-unit multilingual draft survives recreation with exact title/body characters" +} diff --git a/docs/validation/native-input/cohorts/modern-contracts-v1/record.json b/docs/validation/native-input/cohorts/modern-contracts-v1/record.json new file mode 100644 index 00000000..6515a029 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v1/record.json @@ -0,0 +1,81 @@ +{ + "api": 36, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "palette-bytes": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "profile-installer-marker": { + "passed": true + }, + "installed-data-and-evidence": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-binary-dev.tinycast.android": { + "passed": true + }, + "verify-binary-dev.tinycast.android": { + "passed": true + }, + "restore-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-binary-dev.tinycast.android.test": { + "passed": true + }, + "release-owner-last": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 1.0, + "initialization_error": false, + "instrumentation_exit_code": 0, + "layout": "tablet", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "committedEmojiNavigationAndCaretAreExact", + "activeMultilingualCompositionKeepsResultSelection", + "committedCallerSelectionSurvivesIdleNativeRoutes", + "committedSameTurnLauncherActivationUsesCurrentNote", + "largeDraftRestoresExactCharactersAfterRecreation" + ], + "native_expected_outcome": true, + "original_font_scale": "1.0", + "original_geometry": { + "size": "Physical size: 1920x1200", + "density": "Physical density: 240" + }, + "passes": 6, + "preserved_file_count": 573, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 133.0.6943.137)" + ], + "runner_sha256": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "suite": "native-input", + "test_apk_sha256": "ff67b0ca5fc5f231dfacc934a8189583ee140e8a209277559315160bd4012711" +} diff --git a/docs/validation/native-input/cohorts/modern-contracts-v1/tests.log b/docs/validation/native-input/cohorts/modern-contracts-v1/tests.log new file mode 100644 index 00000000..df992049 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v1/tests.log @@ -0,0 +1,93 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=committedEmojiNavigationAndCaretAreExact +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=committedEmojiNavigationAndCaretAreExact +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 57.34 + +OK (6 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-activemultilingualcompositionkeepsresultselection.json b/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-activemultilingualcompositionkeepsresultselection.json new file mode 100644 index 00000000..d6578f38 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-activemultilingualcompositionkeepsresultselection.json @@ -0,0 +1,131 @@ +{ + "api": 36, + "case": "activeMultilingualCompositionKeepsResultSelection", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 129431921 + }, + { + "kind": "observation", + "stage": "active-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 129432087 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "active-japanese-after-direct-navigation", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 129432099 + } + ], + "palette_preferences_restored": true, + "scope": "Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication" +} diff --git a/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-committedcallerselectionsurvivesidlenativeroutes.json b/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-committedcallerselectionsurvivesidlenativeroutes.json new file mode 100644 index 00000000..b1045e95 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-committedcallerselectionsurvivesidlenativeroutes.json @@ -0,0 +1,255 @@ +{ + "api": 36, + "case": "committedCallerSelectionSurvivesIdleNativeRoutes", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 22, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 22, + "selection_end": 22, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 129394404 + }, + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 129394987 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 129398554 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 129400348 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 129406154 + } + ], + "palette_preferences_restored": true, + "scope": "Committed caller query/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} diff --git a/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-committedsameturnlauncheractivationusescurrentnote.json b/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-committedsameturnlauncheractivationusescurrentnote.json new file mode 100644 index 00000000..8b7bb285 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-committedsameturnlauncheractivationusescurrentnote.json @@ -0,0 +1,98 @@ +{ + "api": 36, + "case": "committedSameTurnLauncherActivationUsesCurrentNote", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 11, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 11, + "text_sha256": "abae325470b759339986262e173907c559743e8c35f5771d8de64a42b3c07ebc", + "text_prefix": "Owned rapid", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 11, + "selection_end": 11, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100 + ], + "route": null, + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 129436162 + }, + { + "kind": "observation", + "stage": "same-turn-exact-title", + "tag": "editor-title", + "text_length": 17, + "text_sha256": "bd027c4f9180a20a5fea195d5dd78db21c8d33918bec844bf88cd9c1ae1c57fe", + "text_prefix": "Owned rapid Alpha", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100, + 32, + 65, + 108, + 112, + 104, + 97 + ], + "route": "note", + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 129437241 + } + ], + "palette_preferences_restored": true, + "scope": "Explicitly committed owned launcher query opens the second note on Down/Enter within one main-thread turn" +} diff --git a/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..571ccdde --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,99 @@ +{ + "api": 36, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-after-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 129413323 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-largedraftrestoresexactcharactersafterrecreation.json b/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-largedraftrestoresexactcharactersafterrecreation.json new file mode 100644 index 00000000..fd0d3cf8 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-largedraftrestoresexactcharactersafterrecreation.json @@ -0,0 +1,84 @@ +{ + "api": 36, + "case": "largeDraftRestoresExactCharactersAfterRecreation", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "expected_body_length": 540000, + "expected_body_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "observation", + "stage": "exact-recreated-title", + "tag": "editor-title", + "text_length": 20, + "text_sha256": "62ec1d895e4027d007ab9e35dc918f7eb37a6d8c0770ad0a7afaca4781df4414", + "text_prefix": "Owned large draft \u65e5\u672c", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 108, + 97, + 114, + 103, + 101, + 32, + 100, + 114, + 97, + 102, + 116, + 32, + 26085, + 26412 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 129425305 + }, + { + "kind": "observation", + "stage": "exact-recreated-body", + "tag": "editor-body", + "text_length": 540000, + "text_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "text_prefix": "Owned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": false, + "no_input_connection_created_for_this_observation": true, + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 129425375 + } + ], + "palette_preferences_restored": true, + "scope": "Owned unsaved 540000-unit multilingual draft survives recreation with exact title/body characters" +} diff --git a/docs/validation/native-input/cohorts/modern-contracts-v2/record.json b/docs/validation/native-input/cohorts/modern-contracts-v2/record.json new file mode 100644 index 00000000..9680c9a8 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v2/record.json @@ -0,0 +1,80 @@ +{ + "api": 36, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "palette-bytes": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "profile-installer-marker": { + "passed": true + }, + "installed-data-and-evidence": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-binary-dev.tinycast.android": { + "passed": true + }, + "verify-binary-dev.tinycast.android": { + "passed": true + }, + "restore-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-binary-dev.tinycast.android.test": { + "passed": true + }, + "release-owner-last": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 1.0, + "initialization_error": false, + "instrumentation_exit_code": 0, + "layout": "tablet", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "activeMultilingualCompositionKeepsResultSelection", + "committedCallerSelectionSurvivesIdleNativeRoutes", + "committedSameTurnLauncherActivationUsesCurrentNote", + "largeDraftRestoresExactCharactersAfterRecreation" + ], + "native_expected_outcome": true, + "original_font_scale": "1.0", + "original_geometry": { + "size": "Physical size: 1920x1200", + "density": "Physical density: 240" + }, + "passes": 5, + "preserved_file_count": 573, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 133.0.6943.137)" + ], + "runner_sha256": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "suite": "native-input", + "test_apk_sha256": "6effc19e36580834dc6a05e6022fb4c6d29dfc03771651aad2e9dc91859d8be0" +} diff --git a/docs/validation/native-input/cohorts/modern-contracts-v2/tests.log b/docs/validation/native-input/cohorts/modern-contracts-v2/tests.log new file mode 100644 index 00000000..6b3dfa2a --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-contracts-v2/tests.log @@ -0,0 +1,79 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=5 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 53.185 + +OK (5 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-activemultilingualcompositionkeepsresultselection.json b/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-activemultilingualcompositionkeepsresultselection.json new file mode 100644 index 00000000..3c944f63 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-activemultilingualcompositionkeepsresultselection.json @@ -0,0 +1,131 @@ +{ + "api": 36, + "case": "activeMultilingualCompositionKeepsResultSelection", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130623057 + }, + { + "kind": "observation", + "stage": "active-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130623553 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "active-japanese-after-direct-navigation", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130623573 + } + ], + "palette_preferences_restored": true, + "scope": "Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json b/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json new file mode 100644 index 00000000..9681c554 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json @@ -0,0 +1,255 @@ +{ + "api": 36, + "case": "committedCallerSelectionSurvivesIdleNativeRoutes", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 22, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 22, + "selection_end": 22, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130475619 + }, + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130475739 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130482200 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130488689 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130495240 + } + ], + "palette_preferences_restored": true, + "scope": "Committed caller query/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedemojinavigationandcaretareexact.json b/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedemojinavigationandcaretareexact.json new file mode 100644 index 00000000..d8de766e --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedemojinavigationandcaretareexact.json @@ -0,0 +1,218 @@ +{ + "api": 36, + "case": "committedEmojiNavigationAndCaretAreExact", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130592824 + }, + { + "kind": "injected-key", + "code": 22, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 22, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 21, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 21, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 19, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 19, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 123, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 123, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 122, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 122, + "action": 1, + "accepted": true + }, + { + "kind": "window-key", + "code": 40, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 130604081 + }, + { + "kind": "injected-key", + "code": 40, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 40, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 130604178 + }, + { + "kind": "injected-key", + "code": 40, + "action": 1, + "accepted": true + }, + { + "kind": "window-key", + "code": 21, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 130604655 + }, + { + "kind": "injected-key", + "code": 21, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 21, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 130604758 + }, + { + "kind": "injected-key", + "code": 21, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "committed-query-selected-range", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 2, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130605823 + } + ], + "palette_preferences_restored": true, + "scope": "Explicitly committed Emoji query supports injected grid navigation, exact caret and selected range" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedsameturnlauncheractivationusescurrentnote.json b/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedsameturnlauncheractivationusescurrentnote.json new file mode 100644 index 00000000..73ca2a8c --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedsameturnlauncheractivationusescurrentnote.json @@ -0,0 +1,98 @@ +{ + "api": 36, + "case": "committedSameTurnLauncherActivationUsesCurrentNote", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 11, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 11, + "text_sha256": "abae325470b759339986262e173907c559743e8c35f5771d8de64a42b3c07ebc", + "text_prefix": "Owned rapid", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 11, + "selection_end": 11, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100 + ], + "route": null, + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130632208 + }, + { + "kind": "observation", + "stage": "same-turn-exact-title", + "tag": "editor-title", + "text_length": 17, + "text_sha256": "bd027c4f9180a20a5fea195d5dd78db21c8d33918bec844bf88cd9c1ae1c57fe", + "text_prefix": "Owned rapid Alpha", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100, + 32, + 65, + 108, + 112, + 104, + 97 + ], + "route": "note", + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130633337 + } + ], + "palette_preferences_restored": true, + "scope": "Explicitly committed owned launcher query opens the second note on Down/Enter within one main-thread turn" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..458917ec --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,99 @@ +{ + "api": 36, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-after-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130515694 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-largedraftrestoresexactcharactersafterrecreation.json b/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-largedraftrestoresexactcharactersafterrecreation.json new file mode 100644 index 00000000..d12a3c2f --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-largedraftrestoresexactcharactersafterrecreation.json @@ -0,0 +1,84 @@ +{ + "api": 36, + "case": "largeDraftRestoresExactCharactersAfterRecreation", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "expected_body_length": 540000, + "expected_body_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "observation", + "stage": "exact-recreated-title", + "tag": "editor-title", + "text_length": 20, + "text_sha256": "62ec1d895e4027d007ab9e35dc918f7eb37a6d8c0770ad0a7afaca4781df4414", + "text_prefix": "Owned large draft \u65e5\u672c", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 108, + 97, + 114, + 103, + 101, + 32, + 100, + 114, + 97, + 102, + 116, + 32, + 26085, + 26412 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130575247 + }, + { + "kind": "observation", + "stage": "exact-recreated-body", + "tag": "editor-body", + "text_length": 540000, + "text_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "text_prefix": "Owned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": false, + "no_input_connection_created_for_this_observation": true, + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130575310 + } + ], + "palette_preferences_restored": true, + "scope": "Owned unsaved 540000-unit multilingual draft survives recreation with exact title/body characters" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v4/record.json b/docs/validation/native-input/cohorts/modern-owned-full-v4/record.json new file mode 100644 index 00000000..83aaba96 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v4/record.json @@ -0,0 +1,89 @@ +{ + "api": 36, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "palette-bytes": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "profile-installer-marker": { + "passed": true + }, + "installed-data-and-evidence": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-binary-dev.tinycast.android": { + "passed": true + }, + "verify-binary-dev.tinycast.android": { + "passed": true + }, + "restore-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-input-method-after-original-apks": { + "passed": true + }, + "release-owner-last": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 1.0, + "ime_restoration_scope": "Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement", + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "tablet", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "committedEmojiNavigationAndCaretAreExact", + "activeMultilingualCompositionKeepsResultSelection", + "committedCallerSelectionSurvivesIdleNativeRoutes", + "committedSameTurnLauncherActivationUsesCurrentNote", + "largeDraftRestoresExactCharactersAfterRecreation" + ], + "native_expected_outcome": true, + "original_font_scale": "1.0", + "original_geometry": { + "size": "Physical size: 1920x1200", + "density": "Physical density: 240" + }, + "passes": 6, + "preserved_file_count": 573, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 133.0.6943.137)" + ], + "runner_sha256": "0f08cc33955a073e0fd19d40cfeb08aa241254bbe1a257acdb8791080cac19a7", + "suite": "native-input", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v4/tests.log b/docs/validation/native-input/cohorts/modern-owned-full-v4/tests.log new file mode 100644 index 00000000..0f0f1967 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v4/tests.log @@ -0,0 +1,93 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=committedEmojiNavigationAndCaretAreExact +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=committedEmojiNavigationAndCaretAreExact +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 172.556 + +OK (6 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-activemultilingualcompositionkeepsresultselection.json b/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-activemultilingualcompositionkeepsresultselection.json new file mode 100644 index 00000000..129af870 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-activemultilingualcompositionkeepsresultselection.json @@ -0,0 +1,131 @@ +{ + "api": 36, + "case": "activeMultilingualCompositionKeepsResultSelection", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132118754 + }, + { + "kind": "observation", + "stage": "active-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132118956 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "active-japanese-after-direct-navigation", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132118966 + } + ], + "palette_preferences_restored": true, + "scope": "Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json b/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json new file mode 100644 index 00000000..3e8b6d44 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json @@ -0,0 +1,255 @@ +{ + "api": 36, + "case": "committedCallerSelectionSurvivesIdleNativeRoutes", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 22, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 22, + "selection_end": 22, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132085850 + }, + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132086021 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132088103 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132090052 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132091543 + } + ], + "palette_preferences_restored": true, + "scope": "Committed caller query/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedemojinavigationandcaretareexact.json b/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedemojinavigationandcaretareexact.json new file mode 100644 index 00000000..0d73617f --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedemojinavigationandcaretareexact.json @@ -0,0 +1,218 @@ +{ + "api": 36, + "case": "committedEmojiNavigationAndCaretAreExact", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132111247 + }, + { + "kind": "injected-key", + "code": 22, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 22, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 20, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 21, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 21, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 19, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 19, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 123, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 123, + "action": 1, + "accepted": true + }, + { + "kind": "injected-key", + "code": 122, + "action": 0, + "accepted": true + }, + { + "kind": "injected-key", + "code": 122, + "action": 1, + "accepted": true + }, + { + "kind": "window-key", + "code": 40, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 132114124 + }, + { + "kind": "injected-key", + "code": 40, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 40, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 132114127 + }, + { + "kind": "injected-key", + "code": 40, + "action": 1, + "accepted": true + }, + { + "kind": "window-key", + "code": 21, + "action": 0, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": true, + "uptime_ms": 132114234 + }, + { + "kind": "injected-key", + "code": 21, + "action": 0, + "accepted": true + }, + { + "kind": "window-key", + "code": 21, + "action": 1, + "flags": 0, + "source": 257, + "device": -1, + "repeat": 0, + "handled": false, + "uptime_ms": 132114240 + }, + { + "kind": "injected-key", + "code": 21, + "action": 1, + "accepted": true + }, + { + "kind": "observation", + "stage": "committed-query-selected-range", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 2, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132114438 + } + ], + "palette_preferences_restored": true, + "scope": "Explicitly committed Emoji query supports injected grid navigation, exact caret and selected range" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedsameturnlauncheractivationusescurrentnote.json b/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedsameturnlauncheractivationusescurrentnote.json new file mode 100644 index 00000000..e9e1a7dd --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedsameturnlauncheractivationusescurrentnote.json @@ -0,0 +1,98 @@ +{ + "api": 36, + "case": "committedSameTurnLauncherActivationUsesCurrentNote", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 11, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 11, + "text_sha256": "abae325470b759339986262e173907c559743e8c35f5771d8de64a42b3c07ebc", + "text_prefix": "Owned rapid", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 11, + "selection_end": 11, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100 + ], + "route": null, + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132122210 + }, + { + "kind": "observation", + "stage": "same-turn-exact-title", + "tag": "editor-title", + "text_length": 17, + "text_sha256": "bd027c4f9180a20a5fea195d5dd78db21c8d33918bec844bf88cd9c1ae1c57fe", + "text_prefix": "Owned rapid Alpha", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 114, + 97, + 112, + 105, + 100, + 32, + 65, + 108, + 112, + 104, + 97 + ], + "route": "note", + "window_focus": true, + "query": "Owned rapid", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132122790 + } + ], + "palette_preferences_restored": true, + "scope": "Explicitly committed owned launcher query opens the second note on Down/Enter within one main-thread turn" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..9427d529 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,99 @@ +{ + "api": 36, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-after-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132094844 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-largedraftrestoresexactcharactersafterrecreation.json b/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-largedraftrestoresexactcharactersafterrecreation.json new file mode 100644 index 00000000..a0115b8a --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-largedraftrestoresexactcharactersafterrecreation.json @@ -0,0 +1,84 @@ +{ + "api": 36, + "case": "largeDraftRestoresExactCharactersAfterRecreation", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "expected_body_length": 540000, + "expected_body_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "observation", + "stage": "exact-recreated-title", + "tag": "editor-title", + "text_length": 20, + "text_sha256": "62ec1d895e4027d007ab9e35dc918f7eb37a6d8c0770ad0a7afaca4781df4414", + "text_prefix": "Owned large draft \u65e5\u672c", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 108, + 97, + 114, + 103, + 101, + 32, + 100, + 114, + 97, + 102, + 116, + 32, + 26085, + 26412 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132107294 + }, + { + "kind": "observation", + "stage": "exact-recreated-body", + "tag": "editor-body", + "text_length": 540000, + "text_sha256": "dbd75b0fbdaa4d3a44313db3626e90d0a2f66b9a8783a5af9c711a23d48a36e3", + "text_prefix": "Owned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf\u00e9 \u65e5\u672c \ud83c\udf31 314159.\nOwned draft line caf", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": false, + "no_input_connection_created_for_this_observation": true, + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132107308 + } + ], + "palette_preferences_restored": true, + "scope": "Owned unsaved 540000-unit multilingual draft survives recreation with exact title/body characters" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v5/record.json b/docs/validation/native-input/cohorts/modern-owned-full-v5/record.json new file mode 100644 index 00000000..a80d5aa2 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v5/record.json @@ -0,0 +1,111 @@ +{ + "api": 36, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "palette-bytes": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "profile-installer-marker": { + "passed": true + }, + "installed-data-and-evidence": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-binary-dev.tinycast.android": { + "passed": true + }, + "verify-binary-dev.tinycast.android": { + "passed": true + }, + "restore-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-input-method-after-original-apks": { + "passed": true + }, + "release-owner-last": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 1.0, + "ime_restoration_scope": "Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement", + "ime_restore_observations": [ + { + "query_ms": 190, + "all_raw_fields_equal": false + }, + { + "query_ms": 104, + "all_raw_fields_equal": true + }, + { + "query_ms": 160, + "all_raw_fields_equal": true + }, + { + "query_ms": 83, + "all_raw_fields_equal": true + }, + { + "query_ms": 99, + "all_raw_fields_equal": true + } + ], + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "tablet", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "committedEmojiNavigationAndCaretAreExact", + "activeMultilingualCompositionKeepsResultSelection", + "committedCallerSelectionSurvivesIdleNativeRoutes", + "committedSameTurnLauncherActivationUsesCurrentNote", + "largeDraftRestoresExactCharactersAfterRecreation" + ], + "native_expected_outcome": true, + "original_font_scale": "1.0", + "original_geometry": { + "size": "Physical size: 1920x1200", + "density": "Physical density: 240" + }, + "passes": 6, + "preserved_file_count": 573, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 133.0.6943.137)" + ], + "runner_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "suite": "native-input", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-full-v5/tests.log b/docs/validation/native-input/cohorts/modern-owned-full-v5/tests.log new file mode 100644 index 00000000..f56b6be0 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-full-v5/tests.log @@ -0,0 +1,93 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=largeDraftRestoresExactCharactersAfterRecreation +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=committedEmojiNavigationAndCaretAreExact +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=4 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=committedEmojiNavigationAndCaretAreExact +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=5 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=6 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=6 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=committedSameTurnLauncherActivationUsesCurrentNote +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 42.032 + +OK (6 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json b/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json new file mode 100644 index 00000000..ff755897 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json @@ -0,0 +1,131 @@ +{ + "api": 36, + "case": "activeMultilingualCompositionKeepsResultSelection", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 2, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132880279 + }, + { + "kind": "observation", + "stage": "active-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132880515 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "active-japanese-after-direct-navigation", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132880522 + } + ], + "palette_preferences_restored": true, + "scope": "Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json b/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json new file mode 100644 index 00000000..4df85976 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json @@ -0,0 +1,255 @@ +{ + "api": 36, + "case": "committedCallerSelectionSurvivesIdleNativeRoutes", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 2, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 22, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 22, + "selection_end": 22, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132871828 + }, + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132871918 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132873169 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132873948 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132875047 + } + ], + "palette_preferences_restored": true, + "scope": "Committed caller query/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..7b6c6172 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,99 @@ +{ + "api": 36, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 2, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-after-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132877619 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/record.json b/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/record.json new file mode 100644 index 00000000..cfcc9c0f --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/record.json @@ -0,0 +1,114 @@ +{ + "api": 36, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "palette-bytes": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "restore-size": { + "passed": true + }, + "restore-density": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "profile-installer-marker": { + "passed": true + }, + "installed-data-and-evidence": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-binary-dev.tinycast.android": { + "passed": true + }, + "verify-binary-dev.tinycast.android": { + "passed": true + }, + "restore-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-input-method-after-original-apks": { + "passed": true + }, + "release-owner-last": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 2.0, + "ime_restoration_scope": "Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement", + "ime_restore_observations": [ + { + "query_ms": 395, + "all_raw_fields_equal": false + }, + { + "query_ms": 261, + "all_raw_fields_equal": true + }, + { + "query_ms": 94, + "all_raw_fields_equal": true + }, + { + "query_ms": 84, + "all_raw_fields_equal": true + }, + { + "query_ms": 90, + "all_raw_fields_equal": true + } + ], + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "landscape", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "activeMultilingualCompositionKeepsResultSelection", + "committedCallerSelectionSurvivesIdleNativeRoutes" + ], + "native_expected_outcome": true, + "original_font_scale": "1.0", + "original_geometry": { + "size": "Physical size: 1920x1200", + "density": "Physical density: 240" + }, + "passes": 3, + "preserved_file_count": 573, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 133.0.6943.137)" + ], + "runner_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "suite": "native-input", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/tests.log b/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/tests.log new file mode 100644 index 00000000..df65a881 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-landscape200-v5/tests.log @@ -0,0 +1,51 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 11.704 + +OK (3 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json b/docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json new file mode 100644 index 00000000..43c18a2d --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json @@ -0,0 +1,131 @@ +{ + "api": 36, + "case": "activeMultilingualCompositionKeepsResultSelection", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 2, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "emoji-search", + "expected_text_length": 4, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-emoji-search", + "tag": "emoji-search", + "text_length": 4, + "text_sha256": "0282d9b79f42c74c1550b20ff2dd16aafc3fe5d8ae9a00b2f66996d0ae882775", + "text_prefix": "face", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 4, + "selection_end": 4, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 102, + 97, + 99, + 101 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "face", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132397912 + }, + { + "kind": "observation", + "stage": "active-japanese-composition", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132398058 + }, + { + "kind": "direct-key", + "code": 22, + "action": 0, + "handled": true + }, + { + "kind": "direct-key", + "code": 22, + "action": 1, + "handled": false + }, + { + "kind": "observation", + "stage": "active-japanese-after-direct-navigation", + "tag": "emoji-search", + "text_length": 3, + "text_sha256": "f22e589664a7450ca0686710eb046f65eff8b26741c1fb1a581ffdebe1edcaa7", + "text_prefix": "\u306b\u307b\u3093", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 3, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 3, + "selection_end": 3, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 12395, + 12411, + 12435 + ], + "route": "emoji", + "window_focus": true, + "query": "", + "emoji_query": "\u306b\u307b\u3093", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132398064 + } + ], + "palette_preferences_restored": true, + "scope": "Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json b/docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json new file mode 100644 index 00000000..0326d90d --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json @@ -0,0 +1,255 @@ +{ + "api": 36, + "case": "committedCallerSelectionSurvivesIdleNativeRoutes", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 2, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "search", + "expected_text_length": 22, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "explicitly-committed-search", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 22, + "selection_end": 22, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132389883 + }, + { + "kind": "observation", + "stage": "before-updates-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132389960 + }, + { + "kind": "observation", + "stage": "after-updates-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132391302 + }, + { + "kind": "observation", + "stage": "before-note-route", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132392048 + }, + { + "kind": "observation", + "stage": "after-note-return", + "tag": "search", + "text_length": 22, + "text_sha256": "25d528563fd140587add28075c920ac84d94d6b80f8b2680f217ffc8b489ccfa", + "text_prefix": "Owned caller \u65e5\u672c 012345", + "plain_annotated_equal": true, + "span_styles": [], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 2, + "selection_end": 8, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 108, + 108, + 101, + 114, + 32, + 26085, + 26412, + 32, + 48, + 49, + 50, + 51, + 52, + 53 + ], + "route": null, + "window_focus": true, + "query": "Owned caller \u65e5\u672c 012345", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132393077 + } + ], + "palette_preferences_restored": true, + "scope": "Committed caller query/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..b024c9da --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,99 @@ +{ + "api": 36, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 2, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-after-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 132395610 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/modern-owned-phone200-v5/record.json b/docs/validation/native-input/cohorts/modern-owned-phone200-v5/record.json new file mode 100644 index 00000000..0fceabb7 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-phone200-v5/record.json @@ -0,0 +1,114 @@ +{ + "api": 36, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "palette-bytes": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "restore-size": { + "passed": true + }, + "restore-density": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "profile-installer-marker": { + "passed": true + }, + "installed-data-and-evidence": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-binary-dev.tinycast.android": { + "passed": true + }, + "verify-binary-dev.tinycast.android": { + "passed": true + }, + "restore-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-input-method-after-original-apks": { + "passed": true + }, + "release-owner-last": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 2.0, + "ime_restoration_scope": "Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement", + "ime_restore_observations": [ + { + "query_ms": 175, + "all_raw_fields_equal": false + }, + { + "query_ms": 133, + "all_raw_fields_equal": true + }, + { + "query_ms": 161, + "all_raw_fields_equal": true + }, + { + "query_ms": 94, + "all_raw_fields_equal": true + }, + { + "query_ms": 73, + "all_raw_fields_equal": true + } + ], + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "phone", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "activeMultilingualCompositionKeepsResultSelection", + "committedCallerSelectionSurvivesIdleNativeRoutes" + ], + "native_expected_outcome": true, + "original_font_scale": "1.0", + "original_geometry": { + "size": "Physical size: 1920x1200", + "density": "Physical density: 240" + }, + "passes": 3, + "preserved_file_count": 573, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 133.0.6943.137)" + ], + "runner_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "suite": "native-input", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-phone200-v5/tests.log b/docs/validation/native-input/cohorts/modern-owned-phone200-v5/tests.log new file mode 100644 index 00000000..84d21985 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-phone200-v5/tests.log @@ -0,0 +1,51 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=committedCallerSelectionSurvivesIdleNativeRoutes +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=2 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream= +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=3 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=3 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=activeMultilingualCompositionKeepsResultSelection +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 11.982 + +OK (3 tests) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/modern-owned-probe-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/modern-owned-probe-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..47cb1b38 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-probe-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,99 @@ +{ + "api": 36, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-after-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 130117195 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/modern-owned-probe-v3/record.json b/docs/validation/native-input/cohorts/modern-owned-probe-v3/record.json new file mode 100644 index 00000000..717850ef --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-probe-v3/record.json @@ -0,0 +1,80 @@ +{ + "api": 36, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "palette-bytes": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "profile-installer-marker": { + "passed": true + }, + "installed-data-and-evidence": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-binary-dev.tinycast.android": { + "passed": true + }, + "verify-binary-dev.tinycast.android": { + "passed": true + }, + "restore-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-binary-dev.tinycast.android.test": { + "passed": true + }, + "release-owner-last": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 1.0, + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "tablet", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters" + ], + "native_expected_outcome": true, + "original_font_scale": "1.0", + "original_geometry": { + "size": "Physical size: 1920x1200", + "density": "Physical density: 240" + }, + "passes": 1, + "preserved_file_count": 573, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 133.0.6943.137)" + ], + "runner_sha256": "97b130618a6edcdbabee5f1f4e1f8320e30b6a6f3eaa794b37e961919e02dcad", + "suite": "native-input", + "test_apk_sha256": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443" +} diff --git a/docs/validation/native-input/cohorts/modern-owned-probe-v3/tests.log b/docs/validation/native-input/cohorts/modern-owned-probe-v3/tests.log new file mode 100644 index 00000000..3d303c3b --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-owned-probe-v3/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 25.946 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/modern-same-length-v6/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/modern-same-length-v6/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..6ab881e3 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-same-length-v6/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,100 @@ +{ + "api": 36, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-after-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 134211226 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false, + "wrong_content_rejected": [ + "changed-character", + "same-length-substitution", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/modern-same-length-v6/record.json b/docs/validation/native-input/cohorts/modern-same-length-v6/record.json new file mode 100644 index 00000000..cb912ee2 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-same-length-v6/record.json @@ -0,0 +1,106 @@ +{ + "api": 36, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "palette-bytes": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "profile-installer-marker": { + "passed": true + }, + "installed-data-and-evidence": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-binary-dev.tinycast.android": { + "passed": true + }, + "verify-binary-dev.tinycast.android": { + "passed": true + }, + "restore-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-input-method-after-original-apks": { + "passed": true + }, + "release-owner-last": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 1.0, + "ime_restoration_scope": "Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement", + "ime_restore_observations": [ + { + "query_ms": 294, + "all_raw_fields_equal": false + }, + { + "query_ms": 105, + "all_raw_fields_equal": true + }, + { + "query_ms": 122, + "all_raw_fields_equal": true + }, + { + "query_ms": 127, + "all_raw_fields_equal": true + }, + { + "query_ms": 174, + "all_raw_fields_equal": true + } + ], + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "tablet", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters" + ], + "native_expected_outcome": true, + "original_font_scale": "1.0", + "original_geometry": { + "size": "Physical size: 1920x1200", + "density": "Physical density: 240" + }, + "passes": 1, + "preserved_file_count": 573, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 133.0.6943.137)" + ], + "runner_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "suite": "native-input", + "test_apk_sha256": "60598e18bab4968030c3fe627a54ee2c0f018ce801b4b13f34112cdd011ddabc" +} diff --git a/docs/validation/native-input/cohorts/modern-same-length-v6/tests.log b/docs/validation/native-input/cohorts/modern-same-length-v6/tests.log new file mode 100644 index 00000000..64c4a891 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-same-length-v6/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 5.577 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/modern-strict-control-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/modern-strict-control-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..5857b073 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-strict-control-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,92 @@ +{ + "api": 36, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "contract_completed": true, + "default_ime": "com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Explicit owned native InputConnection readiness/commit; no physical-typing claim", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + }, + { + "kind": "observation", + "stage": "composed-title-before-content-assertion", + "tag": "editor-title", + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "text_prefix": " Owned caf\u00e9 \u65e5\u672c \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d\udc66 \u2764\ufe0f 1\ufe0f\u20e3 ", + "plain_annotated_equal": false, + "span_styles": [ + { + "start": 0, + "end": 36, + "decoration": "TextDecoration.Underline", + "style": "SpanStyle(color=Color(0.0, 0.0, 0.0, 0.0, None), brush=null, alpha=NaN, fontSize=Unspecified, fontWeight=null, fontStyle=null, fontSynthesis=null, fontFamily=null, fontFeatureSettings=null, letterSpacing=Unspecified, baselineShift=null, textGeometricTransform=null, localeList=null, background=Color(0.0, 0.0, 0.0, 0.0, None), textDecoration=TextDecoration.Underline, shadow=null, platformStyle=null, drawStyle=null)" + } + ], + "paragraph_styles": "[]", + "string_annotations": "[]", + "selection_start": 0, + "selection_end": 0, + "focused": true, + "no_input_connection_created_for_this_observation": true, + "codepoints": [ + 32, + 32, + 79, + 119, + 110, + 101, + 100, + 32, + 99, + 97, + 102, + 233, + 32, + 26085, + 26412, + 32, + 128104, + 8205, + 128105, + 8205, + 128103, + 8205, + 128102, + 32, + 10084, + 65039, + 32, + 49, + 65039, + 8419, + 32, + 32 + ], + "route": "note", + "window_focus": true, + "query": "", + "emoji_query": "", + "emoji_selected": 0, + "ime_accepting_text": true, + "uptime_ms": 128929349 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": true, + "wrong_content_rejected": [ + "changed-character", + "trimmed-whitespace", + "removed-joiner", + "removed-variation-selector", + "normalized-combining-sequence" + ] +} diff --git a/docs/validation/native-input/cohorts/modern-strict-control-v1/record.json b/docs/validation/native-input/cohorts/modern-strict-control-v1/record.json new file mode 100644 index 00000000..ed3fd81a --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-strict-control-v1/record.json @@ -0,0 +1,76 @@ +{ + "api": 36, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "palette-bytes": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "profile-installer-marker": { + "passed": true + }, + "installed-data-and-evidence": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-binary-dev.tinycast.android": { + "passed": true + }, + "verify-binary-dev.tinycast.android": { + "passed": true + }, + "restore-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-binary-dev.tinycast.android.test": { + "passed": true + }, + "release-owner-last": { + "passed": true + } + }, + "completed": true, + "expected_negative": false, + "failures": 0, + "fixture_sha256": {}, + "font_scale": 1.0, + "initialization_error": false, + "instrumentation_exit_code": 0, + "layout": "tablet", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters" + ], + "native_expected_outcome": true, + "original_font_scale": "1.0", + "original_geometry": { + "size": "Physical size: 1920x1200", + "density": "Physical density: 240" + }, + "passes": 1, + "preserved_file_count": 573, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 133.0.6943.137)" + ], + "runner_sha256": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "suite": "native-input", + "test_apk_sha256": "c52f3e04917a94a7e7cf3cbb2a259c469a5e6e860cbb45691b52f2995acd7196" +} diff --git a/docs/validation/native-input/cohorts/modern-strict-control-v1/tests.log b/docs/validation/native-input/cohorts/modern-strict-control-v1/tests.log new file mode 100644 index 00000000..a442c212 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-strict-control-v1/tests.log @@ -0,0 +1,23 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream=. +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 0 +INSTRUMENTATION_RESULT: stream= + +Time: 5.39 + +OK (1 test) + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/modern-strict-control-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/modern-strict-control-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..a3bf46d5 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-strict-control-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,27 @@ +{ + "api": 36, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false +} diff --git a/docs/validation/native-input/cohorts/modern-strict-control-v2/record.json b/docs/validation/native-input/cohorts/modern-strict-control-v2/record.json new file mode 100644 index 00000000..96bf7006 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-strict-control-v2/record.json @@ -0,0 +1,39 @@ +{ + "api": 36, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": false, + "error_type": "ValueError" + } + }, + "completed": false, + "expected_negative": false, + "failures": 1, + "fixture_sha256": {}, + "font_scale": 1.0, + "ime_restoration_scope": "Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement", + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "tablet", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters" + ], + "native_expected_outcome": false, + "original_font_scale": "1.0", + "original_geometry": { + "size": "Physical size: 1920x1200", + "density": "Physical density: 240" + }, + "passes": 0, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 133.0.6943.137)" + ], + "runner_sha256": "0f08cc33955a073e0fd19d40cfeb08aa241254bbe1a257acdb8791080cac19a7", + "suite": "native-input", + "test_apk_sha256": "663557f37ad94b33e9db71fc5628a2098198e8e28b7eae12c2dbcf7cef60d1b3" +} diff --git a/docs/validation/native-input/cohorts/modern-strict-control-v2/tests.log b/docs/validation/native-input/cohorts/modern-strict-control-v2/tests.log new file mode 100644 index 00000000..0fe02317 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-strict-control-v2/tests.log @@ -0,0 +1,89 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stack=java.lang.AssertionError: Exact character matcher must accept the composing title + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.assertTrue(Assert.java:42) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38$lambda$36$lambda$35(NativeInputCompatibilityDeviceTest.kt:320) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda27.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:524) + at java.util.concurrent.FutureTask.run(FutureTask.java:317) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2616) + at android.os.Handler.handleCallback(Handler.java:995) + at android.os.Handler.dispatchMessage(Handler.java:103) + at android.os.Looper.loopOnce(Looper.java:248) + at android.os.Looper.loop(Looper.java:338) + at android.app.ActivityThread.main(ActivityThread.java:9067) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932) + +INSTRUMENTATION_STATUS: stream= +Error in exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters(dev.tinycast.android.NativeInputCompatibilityDeviceTest): +java.lang.AssertionError: Exact character matcher must accept the composing title + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.assertTrue(Assert.java:42) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38$lambda$36$lambda$35(NativeInputCompatibilityDeviceTest.kt:320) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda27.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:524) + at java.util.concurrent.FutureTask.run(FutureTask.java:317) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2616) + at android.os.Handler.handleCallback(Handler.java:995) + at android.os.Handler.dispatchMessage(Handler.java:103) + at android.os.Looper.loopOnce(Looper.java:248) + at android.os.Looper.loop(Looper.java:338) + at android.app.ActivityThread.main(ActivityThread.java:9067) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932) + +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_RESULT: stream= + +Time: 15.733 +There was 1 failure: +1) exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters(dev.tinycast.android.NativeInputCompatibilityDeviceTest) +java.lang.AssertionError: Exact character matcher must accept the composing title + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.assertTrue(Assert.java:42) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38$lambda$36$lambda$35(NativeInputCompatibilityDeviceTest.kt:320) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda27.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:524) + at java.util.concurrent.FutureTask.run(FutureTask.java:317) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2616) + at android.os.Handler.handleCallback(Handler.java:995) + at android.os.Handler.dispatchMessage(Handler.java:103) + at android.os.Looper.loopOnce(Looper.java:248) + at android.os.Looper.loop(Looper.java:338) + at android.app.ActivityThread.main(ActivityThread.java:9067) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932) + +FAILURES!!! +Tests run: 1, Failures: 1 + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/cohorts/modern-strict-control-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json b/docs/validation/native-input/cohorts/modern-strict-control-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json new file mode 100644 index 00000000..a3bf46d5 --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-strict-control-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json @@ -0,0 +1,27 @@ +{ + "api": 36, + "assertion_witness": { + "single_ui_turn": true, + "text_length": 36, + "text_sha256": "c080759ec92298a9520b3aeb7c4cf0f5e1be73f601871ad70ec9feb94cd48a0f", + "composition_underline_start": 0, + "composition_underline_end": 36 + }, + "case": "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters", + "default_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "diagnostic_only": false, + "emoji_preferences_unchanged": true, + "font_scale": 1, + "input_setup": "Owned silent test IME plus explicit native InputConnection readiness/commit; no system-keyboard or physical-typing credit", + "observations": [ + { + "kind": "controlled-input-ready", + "tag": "editor-title", + "expected_text_length": 36, + "readiness_attempts": 1 + } + ], + "palette_preferences_restored": true, + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode/whitespace remains rejected", + "strict_annotation_equal": false +} diff --git a/docs/validation/native-input/cohorts/modern-strict-control-v3/record.json b/docs/validation/native-input/cohorts/modern-strict-control-v3/record.json new file mode 100644 index 00000000..54396def --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-strict-control-v3/record.json @@ -0,0 +1,106 @@ +{ + "api": 36, + "apk_sha256": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71", + "cleanup": { + "idle-owned-instrumentation": { + "passed": true + }, + "restore-input-method-before-test-apk-stop": { + "passed": true + }, + "stop-dev.tinycast.android.test": { + "passed": true + }, + "stop-dev.tinycast.android": { + "passed": true + }, + "owned-paths": { + "passed": true + }, + "palette-bytes": { + "passed": true + }, + "restore-font": { + "passed": true + }, + "verify-settings": { + "passed": true + }, + "profile-installer-marker": { + "passed": true + }, + "installed-data-and-evidence": { + "passed": true + }, + "verify-unprivileged": { + "passed": true + }, + "restore-binary-dev.tinycast.android": { + "passed": true + }, + "verify-binary-dev.tinycast.android": { + "passed": true + }, + "restore-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-binary-dev.tinycast.android.test": { + "passed": true + }, + "verify-input-method-after-original-apks": { + "passed": true + }, + "release-owner-last": { + "passed": true + } + }, + "completed": false, + "expected_negative": false, + "failures": 1, + "fixture_sha256": {}, + "font_scale": 1.0, + "ime_restoration_scope": "Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement", + "ime_restore_observations": [ + { + "query_ms": 164, + "all_raw_fields_equal": false + }, + { + "query_ms": 71, + "all_raw_fields_equal": true + }, + { + "query_ms": 91, + "all_raw_fields_equal": true + }, + { + "query_ms": 85, + "all_raw_fields_equal": true + }, + { + "query_ms": 82, + "all_raw_fields_equal": true + } + ], + "initialization_error": false, + "input_mode": "owned", + "instrumentation_exit_code": 0, + "layout": "tablet", + "methods": [ + "exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters" + ], + "native_expected_outcome": false, + "original_font_scale": "1.0", + "original_geometry": { + "size": "Physical size: 1920x1200", + "density": "Physical density: 240" + }, + "passes": 0, + "preserved_file_count": 573, + "provider_before": [ + "Current WebView package (name, version): (com.google.android.webview, 133.0.6943.137)" + ], + "runner_sha256": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "suite": "native-input", + "test_apk_sha256": "663557f37ad94b33e9db71fc5628a2098198e8e28b7eae12c2dbcf7cef60d1b3" +} diff --git a/docs/validation/native-input/cohorts/modern-strict-control-v3/tests.log b/docs/validation/native-input/cohorts/modern-strict-control-v3/tests.log new file mode 100644 index 00000000..705afa0e --- /dev/null +++ b/docs/validation/native-input/cohorts/modern-strict-control-v3/tests.log @@ -0,0 +1,89 @@ +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stream= +dev.tinycast.android.NativeInputCompatibilityDeviceTest: +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: 1 +INSTRUMENTATION_STATUS: class=dev.tinycast.android.NativeInputCompatibilityDeviceTest +INSTRUMENTATION_STATUS: current=1 +INSTRUMENTATION_STATUS: id=AndroidJUnitRunner +INSTRUMENTATION_STATUS: numtests=1 +INSTRUMENTATION_STATUS: stack=java.lang.AssertionError: Exact character matcher must accept the composing title + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.assertTrue(Assert.java:42) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38$lambda$36$lambda$35(NativeInputCompatibilityDeviceTest.kt:320) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda27.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:524) + at java.util.concurrent.FutureTask.run(FutureTask.java:317) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2616) + at android.os.Handler.handleCallback(Handler.java:995) + at android.os.Handler.dispatchMessage(Handler.java:103) + at android.os.Looper.loopOnce(Looper.java:248) + at android.os.Looper.loop(Looper.java:338) + at android.app.ActivityThread.main(ActivityThread.java:9067) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932) + +INSTRUMENTATION_STATUS: stream= +Error in exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters(dev.tinycast.android.NativeInputCompatibilityDeviceTest): +java.lang.AssertionError: Exact character matcher must accept the composing title + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.assertTrue(Assert.java:42) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38$lambda$36$lambda$35(NativeInputCompatibilityDeviceTest.kt:320) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda27.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:524) + at java.util.concurrent.FutureTask.run(FutureTask.java:317) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2616) + at android.os.Handler.handleCallback(Handler.java:995) + at android.os.Handler.dispatchMessage(Handler.java:103) + at android.os.Looper.loopOnce(Looper.java:248) + at android.os.Looper.loop(Looper.java:338) + at android.app.ActivityThread.main(ActivityThread.java:9067) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932) + +INSTRUMENTATION_STATUS: test=exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters +INSTRUMENTATION_STATUS_CODE: -2 +INSTRUMENTATION_RESULT: stream= + +Time: 4.039 +There was 1 failure: +1) exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters(dev.tinycast.android.NativeInputCompatibilityDeviceTest) +java.lang.AssertionError: Exact character matcher must accept the composing title + at org.junit.Assert.fail(Assert.java:89) + at org.junit.Assert.assertTrue(Assert.java:42) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters$lambda$38$lambda$36$lambda$35(NativeInputCompatibilityDeviceTest.kt:320) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda27.invoke(D8$$SyntheticClass:0) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest.ui$lambda$1(NativeInputCompatibilityDeviceTest.kt:53) + at dev.tinycast.android.NativeInputCompatibilityDeviceTest$$ExternalSyntheticLambda41.perform(D8$$SyntheticClass:0) + at androidx.test.core.app.ActivityScenario.lambda$onActivity$2$androidx-test-core-app-ActivityScenario(ActivityScenario.java:794) + at androidx.test.core.app.ActivityScenario$$ExternalSyntheticLambda2.run(D8$$SyntheticClass:0) + at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:524) + at java.util.concurrent.FutureTask.run(FutureTask.java:317) + at android.app.Instrumentation$SyncRunnable.run(Instrumentation.java:2616) + at android.os.Handler.handleCallback(Handler.java:995) + at android.os.Handler.dispatchMessage(Handler.java:103) + at android.os.Looper.loopOnce(Looper.java:248) + at android.os.Looper.loop(Looper.java:338) + at android.app.ActivityThread.main(ActivityThread.java:9067) + at java.lang.reflect.Method.invoke(Native Method) + at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593) + at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:932) + +FAILURES!!! +Tests run: 1, Failures: 1 + + +INSTRUMENTATION_CODE: -1 diff --git a/docs/validation/native-input/collectors/publish-validation.py b/docs/validation/native-input/collectors/publish-validation.py new file mode 100644 index 00000000..abe65dd1 --- /dev/null +++ b/docs/validation/native-input/collectors/publish-validation.py @@ -0,0 +1,120 @@ +from pathlib import Path +import hashlib,json,re,subprocess +from xml.etree import ElementTree as ET +B=Path('artifacts/native-input');D=Path('docs/validation/native-input');S=Path('docs/screenshots/native-input') +sha=lambda value:hashlib.sha256(value).hexdigest() +read=lambda p:json.loads(Path(p).read_text()) +def require(value,message): + if not value:raise ValueError(message) +positive={'legacy100':'legacy-owned-full-v5','tablet100':'modern-owned-full-v5','legacy200':'legacy-owned-200-v5','phone200':'modern-owned-phone200-v5','landscape200':'modern-owned-landscape200-v5','legacy-same-length':'legacy-same-length-v6','tablet-same-length':'modern-same-length-v6'} +negative={'legacy-strict':'legacy-strict-control-v3','tablet-strict':'modern-strict-control-v3'} +for label,name in positive.items(): + r=read(B/name/'record.json');require(r['completed'] and r['failures']==0,label+' incomplete') + require(all(v['passed'] for v in r['cleanup'].values()),label+' restoration failed') + cases=[read(p) for p in (B/name/'captures').glob('case-*.json')] + require(len(cases)==len(r['methods']) and {q['case'] for q in cases}==set(r['methods']),label+' case IDs mismatch') + require(all(q['contract_completed'] and not q['diagnostic_only'] and q['font_scale']==r['font_scale'] for q in cases),label+' contract/profile mismatch') + require(r['runner_sha256']==sha(Path('scripts/test-webview-engine.py').read_bytes()),label+' collector mismatch') +for label,name in negative.items(): + r=read(B/name/'record.json');log=(B/name/'tests.log').read_text();q=read(B/name/'captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json') + require(not r['completed'] and r['passes']==0 and r['failures']==1,label+' is not the intended negative') + require('Exact character matcher must accept the composing title' in log and q['strict_annotation_equal'] is False and q['assertion_witness']['single_ui_turn'],label+' lacks coherent intended assertion') + require(all(v['passed'] for v in r['cleanup'].values()),label+' restoration failed') +require(not D.exists() and not S.exists(),'Publication already exists; inspect before replacing') +D.mkdir(parents=True);S.mkdir(parents=True);bindings=[];projections=[];all_captures={} +def put(source,destination,xml=False,redact=False): + require(not any(part.startswith('private') for part in source.parts),'Do not publish private recovery inputs') + original=source.read_bytes();value=original + if redact: + for old,new in [(str(Path.cwd()),''),(str(Path.home()),'')]: + if xml:new=new.replace('<','<').replace('>','>') + value=value.replace(old.encode(),new.encode()) + destination.parent.mkdir(parents=True,exist_ok=True);destination.write_bytes(value) + if xml:ET.fromstring(value) + bindings.append({'original':str(source.relative_to(Path.cwd()) if source.is_absolute() else source),'original_sha256':sha(original),'public':str(destination),'public_sha256':sha(value),'transform':'replace checkout/home with XML-escaped placeholders' if xml and redact else 'replace checkout/home with placeholders' if redact else 'identity'}) + return destination +record_keys=set('completed expected_negative runner_sha256 apk_sha256 test_apk_sha256 methods api font_scale layout cleanup provider_before original_geometry original_font_scale fixture_sha256 instrumentation_exit_code passes failures initialization_error native_expected_outcome preserved_file_count suite input_mode ime_restoration_scope ime_restore_observations'.split()) +case_keys=set('diagnostic_only scope case api font_scale default_ime updates_scope selection_setup diagnostic_completed palette_preferences_restored emoji_preferences_unchanged title_plain_exact title_annotated_exact body_plain_exact body_annotated_exact expected_body_length expected_body_sha256 updates_root_focus_requested_before_return expected_note_id actual_note_id destination_present strict_annotation_equal assertion_witness wrong_content_rejected input_setup contract_completed observations'.split()) +def project(source,destination,keys): + original=read(source);payload={k:original[k] for k in sorted(keys) if k in original} + destination.parent.mkdir(parents=True,exist_ok=True);destination.write_text(json.dumps(payload,indent=2)+'\n') + projections.append({'original':str(source.relative_to(Path.cwd()) if source.is_absolute() else source),'original_sha256':sha(source.read_bytes()),'public':str(destination),'public_sha256':sha(destination.read_bytes()),'keys':sorted(payload)}) + return payload +cohorts=[];current_names=set(positive.values())|set(negative.values()) +for file in sorted(B.glob('*/record.json')): + name=file.parent.name;r=project(file,D/'cohorts'/name/'record.json',record_keys);logfile=file.parent/'tests.log';log=logfile.read_text() if logfile.exists() else '' + if log:put(logfile,D/'cohorts'/name/'tests.log',redact=True) + passes=len(re.findall(r'^INSTRUMENTATION_STATUS_CODE: 0$',log,re.M));failures=len(re.findall(r'^INSTRUMENTATION_STATUS_CODE: -2$',log,re.M)) + require(r.get('passes',passes)==passes and r.get('failures',failures)==failures,'Native count mismatch '+name) + cohort={'cohort':name,'junit_passes':passes,'junit_failures':failures,'completed':r['completed'],'restoration_checks':len(r['cleanup']),'failed_restoration_checks':sum(not v['passed'] for v in r['cleanup'].values()),'app_sha256':r['apk_sha256'],'test_apk_sha256':r['test_apk_sha256'],'collector_sha256':r['runner_sha256'],'final_credit':'positive' if name in positive.values() else 'intended-negative' if name in negative.values() else 'retained-only'} + cohorts.append(cohort) + for p in sorted((file.parent/'captures').glob('*')): + require(p.is_file() and p.suffix in ('.png','.xml','.json'),'Unexpected capture') + all_captures[str(p)]=sha(p.read_bytes()) + if p.name.startswith('case-'):project(p,D/'cohorts'/name/'cases'/p.name,case_keys) +# Publish a deliberately small visual set. All remaining raw capture hashes and +# native case/log records remain bound without claiming unseen frame visibility. +selected=[ + ('legacy100',positive['legacy100'],'exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion'), + ('tablet100',positive['tablet100'],'exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion'), + ('legacy-strict',negative['legacy-strict'],'exactcontentassertionacceptscompositionandrejectschangedcharacters-failure'), + ('tablet-strict',negative['tablet-strict'],'exactcontentassertionacceptscompositionandrejectschangedcharacters-failure'), + ('legacy100',positive['legacy100'],'committedemojinavigationandcaretareexact-committed-query-selected-range'), + ('legacy100',positive['legacy100'],'activemultilingualcompositionkeepsresultselection-active-japanese-composition'), + ('legacy100',positive['legacy100'],'committedcallerselectionsurvivesidlenativeroutes-updates-destination'), + ('legacy100',positive['legacy100'],'committedcallerselectionsurvivesidlenativeroutes-updates-caller-return'), + ('legacy100',positive['legacy100'],'committedsameturnlauncheractivationusescurrentnote-same-turn-current-note'), + ('legacy100',positive['legacy100'],'largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters'), + ('tablet100',positive['tablet100'],'committedemojinavigationandcaretareexact-committed-query-selected-range'), + ('legacy200',positive['legacy200'],'exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion'), + ('legacy200',positive['legacy200'],'committedcallerselectionsurvivesidlenativeroutes-updates-caller-return'), + ('phone200',positive['phone200'],'activemultilingualcompositionkeepsresultselection-active-japanese-composition'), + ('phone200',positive['phone200'],'committedcallerselectionsurvivesidlenativeroutes-updates-caller-return'), + ('landscape200',positive['landscape200'],'exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion'), + ('landscape200',positive['landscape200'],'committedcallerselectionsurvivesidlenativeroutes-updates-caller-return'), + ('legacy-same-length',positive['legacy-same-length'],'exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion'), + ('tablet-same-length',positive['tablet-same-length'],'exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion'), + ('system-ime-history','legacy-before-v2','recorddefaultimeandcontrolledcompositionnavigation-default-before'), + ('system-ime-history','legacy-contracts-v1','committedemojinavigationandcaretareexact-failure')] +frames=[] +for label,name,stem in selected: + root=B/name/'captures';target=S/label/(stem+'.png');put(root/(stem+'.png'),target) + put(root/(stem+'.xml'),D/'frames'/label/(stem+'.xml'),xml=True) + put(root/(stem+'-frame.json'),D/'frames'/label/(stem+'-frame.json')) + frames.append({'cohort':name,'stem':stem,'png':str(target),'xml':str(D/'frames'/label/(stem+'.xml')),'frame':str(D/'frames'/label/(stem+'-frame.json'))}) +identity_names=['before-v1','before-v2','contracts-v1','strict-control-v1','final-v2','owned-v3','owned-v4','strict-control-v2','owned-v5','strict-control-v3','same-length-v6'] +for name in identity_names: + source=B/name/'identity.json';x=read(source);put(source,D/'identities'/(name+'.json')) + if 'source_override' in x: + override=x['source_override'];path=B/('strict-control-v1' if name=='strict-control-v1' else 'strict-control-v2')/'NativeEditableAssertions.kt' + require(sha(path.read_bytes())==override['sha256'],'Override source mismatch');put(path,D/'identities'/(name+'-helper.kt')) + for field,revision in [('sources',x['collector_source']),('apk_build_sources',x['test_source'])]: + for path,digest in x.get(field,{}).items(): + if x.get('source_override',{}).get('path')==path:require(digest==x['source_override']['sha256'],'Override binding mismatch') + else:require(sha(subprocess.check_output(['git','show',revision+':'+path]))==digest,'Source mismatch '+name+' '+path) + for filename,digest in x['apks'].items():require(sha((B/name/filename).read_bytes())==digest,'APK mismatch '+name) +for name in ['diagnostic-harness-build-v1.log','diagnostic-harness-build-v2.log','diagnostic-harness-build-v3.log','contracts-harness-build-v1.log','contracts-harness-build-v2.log','final-build-checks-v1.log','final-build-checks-v2.log','final-build-checks-v3.log','final-owned-build-v1.log','final-benchmark-build-v2.log','python-v1.log','python-optimized-v1.log','python-final-v2.log','python-optimized-final-v2.log','python-final-v4.log','python-optimized-final-v4.log','same-length-debug-build-v1.log','same-length-benchmark-build-v1.log']: + put(B/name,D/'checks'/name,redact=True) +for name in ['strict-control-v1','strict-control-v2']:put(B/name/'build.log',D/'checks'/(name+'-build.log'),redact=True) +for name in ['final-v2','owned-v3']:put(B/name/'debug-assembly-completed-prefix.log',D/'checks'/(name+'-debug-assembly-prefix.log'),redact=True) +for p in Path('app/build/test-results/testDebugUnitTest').glob('TEST-*.xml'):put(p,D/'checks/jvm'/p.name,xml=True,redact=True) +for v in ['debug','benchmark']:put(Path('app/build/reports/lint-results-'+v+'.xml'),D/'checks'/('lint-results-'+v+'.xml'),xml=True,redact=True) +for p in (B/'binary-metadata').glob('*'):put(p,D/'binary-metadata'/p.name,xml=p.suffix=='.xml') +for name in ['profiles.json','strict-calibration-v1.json','post-probe-ime-history-cleanup.json','control-source-reference-clarification.json']:put(B/name,D/name) +put(B/'final-preservation.json',D/'final-preservation.json') +put(B/'verify-final-preservation.py',D/'collectors/verify-final-preservation.py',redact=True) +put(B/'modern-strict-control-v2/recovery.json',D/'history/modern-control-recovery.json') +put(B/'recover-modern-control-v2.py',D/'collectors/recover-modern-control-v2.py',redact=True) +for name in ['source.json','api26-ime-source.json']:put(B/'dependencies'/name,D/'dependencies'/name) +put(Path('scripts/test-webview-engine.py'),D/'collectors/test-webview-engine.py') +put(Path(__file__),D/'collectors/publish-validation.py') +(D/'cohorts.json').write_text(json.dumps(cohorts,indent=2)+'\n');(D/'frames.json').write_text(json.dumps(frames,indent=2)+'\n');(D/'capture-original-hashes.json').write_text(json.dumps(all_captures,indent=2)+'\n') +(D/'calibration.json').write_text(json.dumps({'completed':True,'scope':'Two intended strict-annotation failures, zero JUnit passes; both positive-only runner receipts remain failed; all restoration checks succeed','cohorts':negative,'test_payload_delta':['classes3.dex'],'production_app_unchanged':True},indent=2)+'\n') +(D/'bindings.json').write_text(json.dumps(bindings,indent=2)+'\n');(D/'projections.json').write_text(json.dumps(projections,indent=2)+'\n') +for p in D.rglob('*.xml'):ET.parse(p) +for root in [D,S]: + for p in root.rglob('*'): + if p.is_file():require(str(Path.home()).encode() not in p.read_bytes(),'Unredacted host path') +files={str(p):sha(p.read_bytes()) for root in [D,S] for p in root.rglob('*') if p.is_file()} +summary={'scope':'Exact character assertions and explicitly controlled native-input fixtures; system-IME/original API26 gaps remain open','source_head':subprocess.check_output(['git','rev-parse','HEAD'],text=True).strip(),'positive_executions':sum(c['junit_passes'] for c in cohorts if c['final_credit']=='positive'),'positive_cohorts':len(positive),'intended_negatives':sum(c['junit_failures'] for c in cohorts if c['final_credit']=='intended-negative'),'current_restoration_checks':sum(c['restoration_checks'] for c in cohorts if c['cohort'] in current_names),'all_retained_executions':sum(c['junit_passes']+c['junit_failures'] for c in cohorts),'all_retained_passes':sum(c['junit_passes'] for c in cohorts),'all_retained_failures':sum(c['junit_failures'] for c in cohorts),'capture_hashes':len(all_captures),'published_frames':len(frames),'public_files':files} +(D/'checkpoint.json').write_text(json.dumps(summary,indent=2)+'\n');print(json.dumps({k:v for k,v in summary.items() if k!='public_files'}));print('public_files',len(files)) diff --git a/docs/validation/native-input/collectors/recover-modern-control-v2.py b/docs/validation/native-input/collectors/recover-modern-control-v2.py new file mode 100644 index 00000000..3354c7b6 --- /dev/null +++ b/docs/validation/native-input/collectors/recover-modern-control-v2.py @@ -0,0 +1,60 @@ +from pathlib import Path +import hashlib,importlib.util,json,shlex,subprocess,sys +sys.path.insert(0,'scripts') +from android_test_cleanup import Cleanup +spec=importlib.util.spec_from_file_location('engine_runner','scripts/test-webview-engine.py');m=importlib.util.module_from_spec(spec);spec.loader.exec_module(m) +p=Path('artifacts/native-input/modern-strict-control-v2');original_record=(p/'record.json').read_bytes();prior=json.loads(original_record) +require=m.require;sha=lambda b:hashlib.sha256(b).hexdigest();app=m.APP;test=m.TEST +adb=['/Library/Android/sdk/platform-tools/adb','-s','emulator-5580'] +def raw(*args,data=None):return subprocess.check_output(adb+list(args),input=data,stderr=subprocess.STDOUT,timeout=120) +def text(*args):return raw(*args).decode().strip() +owner=json.loads((p/'private-owner.json').read_text());lease='files/native-input-lease';identity=owner['extension_id'] +require(owner['kind']=='native-input-v1' and owner['input_mode']=='owned' and identity=='native-input-'+owner['nonce'] and len(owner['nonce'])==32,'Invalid recovery owner') +require(text('emu','avd','name').splitlines()[0]=='Tinycast_Tablet_API_36' and text('shell','getprop','ro.build.version.sdk')=='36','Wrong emulator') +require(not prior['completed'] and prior['passes']==0 and prior['failures']==1,'Unexpected original control result') +def owned(): + require('ActiveInstrumentation{' not in text('shell','dumpsys','activity','processes'),'Instrumentation active') + require(json.loads(raw('exec-out','run-as',app,'cat',lease+'/owner.json'))==owner,'Recovery ownership changed') +def ime(): + values=raw('shell','for key in '+' '.join(m.IME_SETTING_KEYS)+'; do settings get secure "$key"; done').decode().splitlines() + require(len(values)==len(m.IME_SETTING_KEYS),'Invalid settings response');return dict(zip(m.IME_SETTING_KEYS,values)) +saved_ime=json.loads((p/'private-ime-settings.json').read_text()) +archive=m.archive_files((p/'private-data-before.tar').read_bytes());expected={name:sha(value) for name,value in archive.items() if not name.startswith(lease+'/')} +palette=(p/'private-palette.xml').read_bytes() +result={'completed':False,'original_control_still_failed':True,'original_native_passes':0,'original_native_failures':1,'original_record_sha256':sha(original_record),'collector_sha256':sha(Path(__file__).read_bytes()),'checks':{}} +c=Cleanup({'cleanup':result['checks']}) +def check_ime():require(ime()==saved_ime,'Original four-field IME snapshot differs') +def settings(): + require(text('shell','wm','size')==prior['original_geometry']['size'] and text('shell','wm','density')==prior['original_geometry']['density'] and text('shell','settings','get','system','font_scale')==prior['original_font_scale'],'Original geometry/font differs') +def uid():require(text('shell','id').startswith('uid=2000(') and not text('shell','run-as',app,'id').startswith(('uid=0(','uid=1000(','uid=2000(')),'Privilege differs') +def remove_owned(): + owned();paths=['files/extensions/'+identity,'cache/'+identity,'files/extension-data/'+identity,'shared_prefs/extension-'+identity+'.xml','shared_prefs/extension-'+identity+'.xml.bak','files/native-input-evidence'] + raw('shell','run-as',app,'rm','-rf',*paths) + for path in paths: + command='run-as '+shlex.quote(app)+' /system/bin/sh -c '+shlex.quote('test -e "$1"')+' x '+shlex.quote(path) + require(m.private_path_absent(subprocess.run(adb+['shell',command],capture_output=True,timeout=30)),'Owned path remains') +def restore_palette(): + raw('shell','run-as',app,'rm','-f','shared_prefs/palette.xml.bak');raw('shell','run-as',app,'tee','shared_prefs/palette.xml',data=palette) + require(raw('exec-out','run-as',app,'cat','shared_prefs/palette.xml')==palette,'Original palette differs') +def profile(): + value=archive.get('files/profileInstalled') + if value is None:raw('shell','run-as',app,'rm','-f','files/profileInstalled') + else:raw('shell','run-as',app,'tee','files/profileInstalled',data=value) +def data(): + actual=m.archive_files(raw('exec-out','run-as',app,'tar','-cf','-','files','shared_prefs')) + require({name:sha(value) for name,value in actual.items() if not name.startswith(lease+'/')}==expected,'Original installed data differs') + result['preserved_file_count']=len(expected) +def restore_binary(package): + original=p/('private-original-'+package+'.apk');expected_hash=sha(original.read_bytes()) + raw('install','-r','-t',str(original));path=text('shell','pm','path',package);require(path.count('package:')==1,'Unexpected package layout') + require(sha(raw('exec-out','cat',path.removeprefix('package:')))==expected_hash,'Original installed APK differs') +try: + for label,action in [('idle-and-exact-owner',owned),('four-original-ime-settings',check_ime),('stop-test',lambda:raw('shell','am','force-stop',test)),('stop-app',lambda:raw('shell','am','force-stop',app)),('remove-owned-only',remove_owned),('restore-palette-bytes',restore_palette),('restore-profile-marker',profile),('original-settings',settings),('original-data-before-apks',data),('restore-original-app',lambda:restore_binary(app)),('restore-original-test',lambda:restore_binary(test)),('original-ime-after-apks',check_ime),('original-data-after-apks',data),('original-privilege',uid),('revalidate-owner-last',owned)]: + if c.errors:break + c.attempt(label,action) + if not c.errors:c.attempt('release-owner-last',lambda:raw('shell','run-as',app,'rm','-rf',lease)) + result['completed']=not c.errors +finally: + require((p/'record.json').read_bytes()==original_record,'Original failed receipt changed') + (p/'recovery.json').write_text(json.dumps(result,indent=2)+'\n') +c.finish();print(json.dumps({'completed':result['completed'],'checks':len(result['checks']),'preserved_file_count':result.get('preserved_file_count')})) diff --git a/docs/validation/native-input/collectors/test-webview-engine.py b/docs/validation/native-input/collectors/test-webview-engine.py new file mode 100644 index 00000000..217b0c95 --- /dev/null +++ b/docs/validation/native-input/collectors/test-webview-engine.py @@ -0,0 +1,389 @@ +#!/usr/bin/env python3 +"""Owned API26/API36 engine or native-input probes; retain ownership on restoration failure.""" +from pathlib import Path, PurePosixPath +import argparse +import hashlib +import io +import json +import os +import re +import shlex +import subprocess +import tarfile +import time +import uuid +from android_test_cleanup import Cleanup, private_path_absent + +APP = 'dev.tinycast.android' +TEST = APP + '.test' +CLASS = 'dev.tinycast.android.WebViewRecoveryDeviceTest' +CASES = { + 'legacy': ['incompatibleEngineShowsNativeRecoveryWithoutDispatch', + 'incompatibleEngineOpensOnlyActualProviderSettingsAndReturns', + 'replacedRecoveryRejectsRetainedSettingsAndReturnCallbacks', + 'equivalentFailureGetsFreshRecoveryActionsBeforeRecomposition'], + 'modern': ['modernEnginePublishesListAndRunsLiveAction', 'modernEnginePublishesGridAndRunsLiveAction'], + 'shared': ['actualProviderParsesProbeWithoutRunningItsBodyAndRejectsSyntax', + 'closingBeforePreflightFinishesRejectsLatePublication', + 'bridgeCannotPublishOrReadHostApisBeforeApproval'], +} +INPUT_CASES = ['recordDefaultImeAndControlledCompositionNavigation', + 'recordCallerSelectionAcrossNativeRoutes', + 'recordLargeDraftTextAndAnnotationsAfterRecreation', + 'recordSameTurnLauncherActivationTextAndAnnotations', + 'recordInjectedTypingAndCommittedQueryNavigation', + 'exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters', + 'committedEmojiNavigationAndCaretAreExact', + 'activeMultilingualCompositionKeepsResultSelection', + 'committedCallerSelectionSurvivesIdleNativeRoutes', + 'committedSameTurnLauncherActivationUsesCurrentNote', + 'largeDraftRestoresExactCharactersAfterRecreation'] +CONTRACT_CASES = INPUT_CASES[5:] +OWNED_IME = TEST + '/dev.tinycast.android.NativeInputTestIme' +IME_SETTING_KEYS = ('default_input_method', 'enabled_input_methods', 'selected_input_method_subtype', + 'input_methods_subtype_history') + + +def require(value, message): + if not value: + raise ValueError(message) + + +def sha(data): + return hashlib.sha256(data).hexdigest() + + +def listed_package_presence(output, package): + lines = output.splitlines() + require(all(re.fullmatch(r'package:[A-Za-z0-9_.]+', line) for line in lines), 'Invalid PackageManager inventory') + return 'package:' + package in lines + + +def archive_files(data): + files = {} + with tarfile.open(fileobj=io.BytesIO(data)) as archive: + for item in archive: + if item.isdir(): + continue + path = PurePosixPath(item.name) + require(item.isfile() and not path.is_absolute() and '..' not in path.parts + and path.parts[0] in ('files', 'shared_prefs') and item.size <= 64 * 1024 * 1024, + 'Unexpected private archive entry') + require(str(path) not in files, 'Duplicate private archive path') + files[str(path)] = archive.extractfile(item).read() + return files + + +def fixture(id): + # ES5 source: a failure on API26 belongs to the unchanged shared bootstrap, + # not to modern syntax added by the command fixture. + sources = {} + for name, kind, row in [('index', 'List', 'Owned engine row one'), ('grid', 'Grid', 'Owned grid row one')]: + sources[name + '.js'] = ("var React=require('react'),api=require('@raycast/api');exports.default=function(){" + "var state=React.useState(false),done=state[0],setDone=state[1];return React.createElement(api." + kind + + ",{navigationTitle:'Owned WebView fixture'},React.createElement(api." + kind + ".Item,{id:'owned-one'," + "title:done?'Owned " + kind + " action published':'" + row + "',actions:React.createElement(api.ActionPanel,null," + "React.createElement(api.Action,{title:'Publish owned action',onAction:function(){setDone(true);}}))}));};\n").encode() + manifest = {'name': 'owned-webview-fixture', 'title': 'Owned engine fixture', 'commands': [ + {'name': name, 'title': 'Owned engine fixture', 'mode': 'view'} for name in ('index', 'grid')]} + listing = {'id': id, 'name': 'owned-webview-fixture', 'title': 'Owned engine fixture', + 'description': 'Owned engine fixture; local React state only', 'author': 'Droidcast tests', + 'handle': 'owned-webview-tests', 'download_url': '', 'source_url': '', 'commit_sha': '', 'command_count': 2} + return sources | {'package.json': json.dumps(manifest).encode(), '.tinycast-store.json': json.dumps(listing).encode()} + + +def main(): + p = argparse.ArgumentParser(description=__doc__) + p.add_argument('--serial', required=True) + p.add_argument('--avd', required=True) + p.add_argument('--apk', type=Path, required=True) + p.add_argument('--test-apk', type=Path, required=True) + p.add_argument('--output', type=Path, required=True) + p.add_argument('--cases', required=True, help='Comma-separated allowlisted methods from the selected suite') + p.add_argument('--suite', choices=['engine', 'native-input'], default='engine', + help='Native-input reuses the same emulator ownership/restoration protocol without executing an extension') + p.add_argument('--input-mode', choices=['system', 'owned'], default='system', + help='Controlled contracts require the silent test IME; system-IME diagnostics retain the current keyboard') + p.add_argument('--font-scale', type=float, choices=[1, 2], default=1) + p.add_argument('--layout', choices=['tablet', 'phone', 'landscape'], default='phone') + p.add_argument('--expected-negative', action='store_true', help='Only the missing recovery assertion on the old app') + a = p.parse_args() + legacy = a.avd == 'Droidcast_WebView_API26_27caf3' + native_input = a.suite == 'native-input' + suite_class = 'dev.tinycast.android.NativeInputCompatibilityDeviceTest' if native_input else CLASS + require(a.serial.startswith('emulator-') and a.avd in ('Droidcast_WebView_API26_27caf3', 'Tinycast_Tablet_API_36'), 'Use an explicitly owned AVD') + methods = a.cases.split(',') + require(len(methods) == len(set(methods)) and 1 <= len(methods) <= 7 and all( + name in (INPUT_CASES if native_input else CASES['shared'] + CASES['legacy' if legacy else 'modern']) for name in methods), 'Unsupported native cases') + require(not a.expected_negative or not native_input and legacy and methods == [CASES['legacy'][0]], 'Negative control is limited to the old missing-recovery assertion') + require(a.input_mode != 'owned' or native_input and all(name in CONTRACT_CASES for name in methods), 'Owned IME is limited to controlled native-input contracts') + require(not native_input or not any(name in CONTRACT_CASES for name in methods) or a.input_mode == 'owned', 'Controlled contracts require --input-mode owned') + require(not legacy or a.layout == 'phone', 'Keep the actual API26 geometry unchanged') + require(a.apk.is_file() and a.test_apk.is_file(), 'Both frozen APKs are required') + sdk = os.environ.get('ANDROID_HOME') or next(x.removeprefix('sdk.dir=') for x in Path('local.properties').read_text().splitlines() if x.startswith('sdk.dir=')) + adb = [str(Path(sdk) / 'platform-tools/adb'), '-s', a.serial] + + def raw(*args, data=None, timeout=60): + return subprocess.check_output(adb + list(args), input=data, stderr=subprocess.STDOUT, timeout=timeout) + + def text(*args): + return raw(*args).decode().strip() + + def read_input_method_settings(): + # One ADB round trip observes this settings group. Four separate remote + # sessions could exhaust the restoration deadline before confirmation. + values = raw('shell', 'for key in ' + ' '.join(IME_SETTING_KEYS) + + '; do settings get secure "$key"; done', timeout=10).decode().splitlines() + require(len(values) == len(IME_SETTING_KEYS), 'Invalid grouped input method settings response') + return dict(zip(IME_SETTING_KEYS, values)) + + def absent(path): + # API26 run-as cannot exec toybox's `test` symlink. The shell builtin + # preserves silent 0/1 semantics without treating transport errors as absence. + command = 'run-as ' + shlex.quote(APP) + ' /system/bin/sh -c ' + shlex.quote('test -e "$1"') + ' x ' + shlex.quote(path) + return private_path_absent(subprocess.run(adb + ['shell', command], capture_output=True, timeout=30)) + + def package_path(pkg): + # Old PackageManager returns exit 1 from `path` for an absent package. + # Establish absence from its successful exact inventory first. + return text('shell', 'pm', 'path', pkg) if listed_package_presence(text('shell', 'pm', 'list', 'packages', pkg), pkg) else '' + + def restore_font(wanted): + # Android26 may materialize its default row after processing deletion + # of a nondefault scale. Require the original raw value to settle; + # never relabel an effective default as exact restoration. + deadline = time.monotonic() + 5 + stable = None + while time.monotonic() < deadline: + value = text('shell', 'settings', 'get', 'system', 'font_scale') + if value == wanted: + if stable is None: + stable = time.monotonic() + if time.monotonic() - stable >= .5: + return + else: + stable = None + raw('shell', 'settings', 'delete', 'system', 'font_scale') if wanted == 'null' else raw('shell', 'settings', 'put', 'system', 'font_scale', wanted) + time.sleep(.1) + require(False, 'Original raw font setting did not settle') + + require(text('emu', 'avd', 'name').splitlines()[0] == a.avd and text('shell', 'getprop', 'ro.kernel.qemu') == '1', 'AVD identity changed') + require(text('shell', 'getprop', 'ro.build.version.sdk') == ('26' if legacy else '36'), 'Unexpected Android API') + require(text('shell', 'id').startswith('uid=2000('), 'adbd must remain unprivileged') + require('ActiveInstrumentation{' not in text('shell', 'dumpsys', 'activity', 'processes'), 'Another instrumentation is active') + initial_packages = {pkg: package_path(pkg) for pkg in (APP, TEST)} + require(all(not value for value in initial_packages.values()) if legacy else all(initial_packages.values()), 'Inspect existing packages before repeating an install') + size = text('shell', 'wm', 'size'); density = text('shell', 'wm', 'density') + require('Override' not in size + density, 'An existing geometry override has an owner') + font = text('shell', 'settings', 'get', 'system', 'font_scale') + ime_settings = read_input_method_settings() if a.input_mode == 'owned' else None + if ime_settings: + require(re.fullmatch(r'[A-Za-z0-9_.]+/[A-Za-z0-9_.$]+', ime_settings['default_input_method']), 'A restorable original input method is required') + require(not any(OWNED_IME in value for value in ime_settings.values()), 'An existing owned IME activation/history has a recovery owner') + nonce = uuid.uuid4().hex; id = ('native-input-' if native_input else 'webview-engine-') + nonce + lease = 'files/native-input-lease' if native_input else 'files/webview-compatibility-lease' + evidence = 'files/native-input-evidence' if native_input else 'files/webview-compatibility-evidence' + root = 'files/extensions/' + id + owner = {'kind': 'native-input-v1' if native_input else 'webview-compatibility-v1', 'nonce': nonce, 'extension_id': id, 'fresh_disposable_avd': legacy} + if native_input: + owner['input_mode'] = a.input_mode + owned = [root, 'cache/' + id, 'files/extension-data/' + id, 'shared_prefs/extension-' + id + '.xml', + 'shared_prefs/extension-' + id + '.xml.bak', evidence] + if not legacy: + require(not text('shell', 'run-as', APP, 'id').startswith(('uid=0(', 'uid=1000(', 'uid=2000(')), 'The app must remain unprivileged') + for path in [lease, evidence, 'files/webview-compatibility-lease', 'files/native-input-lease', 'files/reviewed-text-fixture-lease', 'files/empty-view-fixture-lease'] + owned[:5]: + require(absent(path), 'A prior recovery owner/path remains: ' + path) + a.output.mkdir(parents=True, exist_ok=False, mode=0o700) + (a.output / 'private-owner.json').write_text(json.dumps(owner)); (a.output / 'private-owner.json').chmod(0o600) + r = {'completed': False, 'expected_negative': a.expected_negative, 'runner_sha256': sha(Path(__file__).read_bytes()), + 'apk_sha256': sha(a.apk.read_bytes()), 'test_apk_sha256': sha(a.test_apk.read_bytes()), 'methods': methods, + 'api': 26 if legacy else 36, 'font_scale': a.font_scale, 'layout': a.layout, 'cleanup': {}, + 'provider_before': [line.strip() for line in text('shell', 'dumpsys', 'webviewupdate').splitlines() if 'Current WebView package' in line], + 'original_geometry': {'size': size, 'density': density}, 'original_font_scale': font} + r['suite'] = a.suite + r['input_mode'] = a.input_mode + if ime_settings: + path = a.output / 'private-ime-settings.json'; path.write_text(json.dumps(ime_settings)); path.chmod(0o600) + r['ime_restoration_scope'] = 'Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement' + def save(): + (a.output / 'record.json').write_text(json.dumps(r, indent=2) + '\n') + save() + before = {}; originals = {}; palette = None; original_profile = None + lease_claimed = False; installed = []; ime_activation_attempted = False + def claim(): + # A never-launched fresh installation has no files directory yet. + raw('shell', 'run-as', APP, 'mkdir', '-p', 'files') + raw('shell', 'run-as', APP, 'mkdir', lease) + raw('shell', 'run-as', APP, 'tee', lease + '/owner.json', data=json.dumps(owner).encode()) + def verify_owner(): + require(json.loads(raw('exec-out', 'run-as', APP, 'cat', lease + '/owner.json')) == owner, 'Recovery owner changed') + def verify_input_method(): + require(read_input_method_settings() == ime_settings, + 'Original input method settings changed after test APK restoration') + if not legacy: + claim(); lease_claimed = True + for pkg in (TEST, APP): + raw('shell', 'am', 'force-stop', pkg) + for pkg, value in initial_packages.items(): + require(value.count('package:') == 1, 'Split APK restoration is not supported by this runner') + data = raw('exec-out', 'cat', value.removeprefix('package:')) + path = a.output / ('private-original-' + pkg + '.apk'); path.write_bytes(data); path.chmod(0o600) + originals[pkg] = (path, sha(data)) + data = raw('exec-out', 'run-as', APP, 'tar', '-cf', '-', 'files', 'shared_prefs') + path = a.output / 'private-data-before.tar'; path.write_bytes(data); path.chmod(0o600) + original_files = archive_files(data) + original_profile = original_files.get('files/profileInstalled') + before = {path: sha(value) for path, value in original_files.items() if not path.startswith(lease + '/')} + palette = raw('exec-out', 'run-as', APP, 'cat', 'shared_prefs/palette.xml') + (a.output / 'private-palette.xml').write_bytes(palette); (a.output / 'private-palette.xml').chmod(0o600) + try: + for pkg, apk in [(APP, a.apk), (TEST, a.test_apk)]: + raw('install', '-r', '-t', str(apk), timeout=120); installed.append(pkg) + require(sha(raw('exec-out', 'cat', text('shell', 'pm', 'path', pkg).removeprefix('package:'))) == sha(apk.read_bytes()), 'Installed APK differs') + if legacy: + claim(); lease_claimed = True + if ime_settings: + ime_activation_attempted = True + raw('shell', 'ime', 'enable', OWNED_IME) + raw('shell', 'ime', 'set', OWNED_IME) + require(text('shell', 'settings', 'get', 'secure', 'default_input_method') == OWNED_IME, 'Owned IME was not selected') + if not native_input: + raw('shell', 'run-as', APP, 'mkdir', '-p', root) + r['fixture_sha256'] = {} + for name, data in ({} if native_input else fixture(id)).items(): + raw('shell', 'run-as', APP, 'tee', root + '/' + name, data=data); r['fixture_sha256'][name] = sha(data) + if not legacy and a.layout != 'tablet': + raw('shell', 'wm', 'size', '1080x2340' if a.layout == 'phone' else '2340x1080'); raw('shell', 'wm', 'density', '420') + raw('shell', 'settings', 'put', 'system', 'font_scale', str(a.font_scale)) + save() + command = ['shell', 'am', 'instrument', '-w', '-r', '-e', 'nativeInputFixture' if native_input else 'webViewFixture', 'true', + '-e', 'nativeInputOwner' if native_input else 'webViewOwner', nonce, + '-e', 'nativeInputMode', a.input_mode, + '-e', 'class', ','.join(suite_class + '#' + name for name in methods), TEST + '/androidx.test.runner.AndroidJUnitRunner'] + with (a.output / 'tests.log').open('xb') as log: + result = subprocess.run(adb + command, stdout=log, stderr=subprocess.STDOUT, timeout=90 * len(methods)) + r['instrumentation_exit_code'] = result.returncode + require('ActiveInstrumentation{' not in text('shell', 'dumpsys', 'activity', 'processes'), 'Instrumentation still active; retain recovery owner') + log = (a.output / 'tests.log').read_text() + r['passes'] = len(re.findall(r'^INSTRUMENTATION_STATUS_CODE: 0$', log, re.M)) + r['failures'] = len(re.findall(r'^INSTRUMENTATION_STATUS_CODE: -2$', log, re.M)) + r['initialization_error'] = 'INSTRUMENTATION_STATUS: test=initializationError' in log + r['native_expected_outcome'] = (r['passes'] == 0 and r['failures'] == 1 and 'extension-engine-problem' in log and 'NoClassDefFoundError' not in log + if a.expected_negative else r['passes'] == len(methods) and r['failures'] == 0 and f'OK ({len(methods)} test' in log) + save() # Keep the native outcome even when evidence collection fails. + data = raw('exec-out', 'run-as', APP, 'tar', '-cf', '-', evidence) + frames = archive_files(data) + captures = a.output / 'captures'; captures.mkdir() + for path, value in frames.items(): + name = PurePosixPath(path).name + require(PurePosixPath(path).parent == PurePosixPath(evidence) and re.fullmatch(r'[a-z0-9-]+\.(png|xml|json)', name), 'Unexpected evidence path') + (captures / name).write_bytes(value) + r['captures'] = {PurePosixPath(path).name: sha(value) for path, value in frames.items()} + save() + finally: + c = Cleanup(r) + if lease_claimed: + def idle_owner(): + require('ActiveInstrumentation{' not in text('shell', 'dumpsys', 'activity', 'processes'), 'Do not restore under active instrumentation') + verify_owner() + c.attempt('idle-owned-instrumentation', idle_owner) + if not c.errors and ime_activation_attempted: + def restore_input_method(): + verify_owner() + raw('shell', 'ime', 'set', shlex.quote(ime_settings['default_input_method'])) + raw('shell', 'ime', 'disable', OWNED_IME) + deadline = time.monotonic() + 5 + stable = None + samples = r.setdefault('ime_restore_observations', []) + while time.monotonic() < deadline: + started = time.monotonic() + current = read_input_method_settings() + observed = time.monotonic() + samples.append({'query_ms': round((observed - started) * 1000), + 'all_raw_fields_equal': current == ime_settings}) + if current == ime_settings: + if stable is None: + stable = observed + if observed - stable >= .5: + return + else: + stable = None + for key, value in ime_settings.items(): + if current[key] != value: + raw('shell', 'settings', 'delete', 'secure', key) if value == 'null' else raw('shell', 'settings', 'put', 'secure', key, shlex.quote(value)) + time.sleep(.1) + require(False, 'Original raw input method settings did not settle') + c.attempt('restore-input-method-before-test-apk-stop', restore_input_method) + if not c.errors: + for pkg in (TEST, APP): + c.attempt('stop-' + pkg, lambda pkg=pkg: raw('shell', 'am', 'force-stop', pkg)) + def remove_owned(): + verify_owner() + raw('shell', 'run-as', APP, 'rm', '-rf', *owned) + require(all(absent(path) for path in owned), 'Registered fixture path remains') + c.attempt('owned-paths', remove_owned) + if palette is not None: + def restore_palette(): + raw('shell', 'run-as', APP, 'rm', '-f', 'shared_prefs/palette.xml.bak') + raw('shell', 'run-as', APP, 'tee', 'shared_prefs/palette.xml', data=palette) + require(raw('exec-out', 'run-as', APP, 'cat', 'shared_prefs/palette.xml') == palette, 'Palette restoration differs') + c.attempt('palette-bytes', restore_palette) + c.attempt('restore-font', lambda: restore_font(font)) + if not legacy and a.layout != 'tablet': + c.attempt('restore-size', lambda: raw('shell', 'wm', 'size', 'reset')) + c.attempt('restore-density', lambda: raw('shell', 'wm', 'density', 'reset')) + def geometry(): + require(text('shell', 'wm', 'size') == size and text('shell', 'wm', 'density') == density + and text('shell', 'settings', 'get', 'system', 'font_scale') == font, 'Original settings differ') + c.attempt('verify-settings', geometry) + if not legacy: + def restore_profile_stamp(): + # AndroidX ProfileInstaller updates this build-derived + # marker after installing a different APK. It is not an + # extension/user-data restoration wildcard. + if original_profile is None: + raw('shell', 'run-as', APP, 'rm', '-f', 'files/profileInstalled') + require(absent('files/profileInstalled'), 'Profile marker remains') + else: + raw('shell', 'run-as', APP, 'tee', 'files/profileInstalled', data=original_profile) + require(raw('exec-out', 'run-as', APP, 'cat', 'files/profileInstalled') == original_profile, 'Profile marker differs') + c.attempt('profile-installer-marker', restore_profile_stamp) + def preserved_data(): + after = archive_files(raw('exec-out', 'run-as', APP, 'tar', '-cf', '-', 'files', 'shared_prefs')) + after = {path: sha(value) for path, value in after.items() if not path.startswith(lease + '/')} + require(after == before, 'Installed data/evidence changed; retain private recovery inputs') + r['preserved_file_count'] = len(before) + c.attempt('installed-data-and-evidence', preserved_data) + c.attempt('verify-unprivileged', lambda: require(text('shell', 'id').startswith('uid=2000(') + and not text('shell', 'run-as', APP, 'id').startswith(('uid=0(', 'uid=1000(', 'uid=2000(')), 'Unexpected UID')) + if not c.errors: + verify_owner() + if legacy: + # The app lease stays held until PackageManager removes + # the entire owned app. Host journal stays for verification. + c.attempt('restore-absence-' + TEST, lambda: raw('uninstall', TEST)) + if not c.errors and ime_activation_attempted: + c.attempt('verify-input-method-after-test-apk-removal', verify_input_method) + if not c.errors: + c.attempt('restore-absence-' + APP, lambda: raw('uninstall', APP)) + c.attempt('verify-initial-package-absence', lambda: require(all(not package_path(pkg) for pkg in (APP, TEST)), 'A package remains')) + else: + for pkg, (path, expected) in originals.items(): + c.attempt('restore-binary-' + pkg, lambda path=path: raw('install', '-r', '-t', str(path), timeout=120)) + c.attempt('verify-binary-' + pkg, lambda pkg=pkg, expected=expected: require(sha(raw('exec-out', 'cat', text('shell', 'pm', 'path', pkg).removeprefix('package:'))) == expected, 'Original binary differs')) + if not c.errors and ime_activation_attempted: + c.attempt('verify-input-method-after-original-apks', verify_input_method) + if not c.errors: + verify_owner() + # Final device operation: no restoration runs after release. + c.attempt('release-owner-last', lambda: raw('shell', 'run-as', APP, 'rm', '-rf', lease)) + else: + r['recovery_required'] = bool(installed) + r['completed'] = bool(r.get('native_expected_outcome')) and not c.errors and lease_claimed + save(); c.finish() + require(r['completed'], 'Native outcome failed; inspect retained receipts') + print(json.dumps({key: r.get(key) for key in ('completed', 'passes', 'failures', 'expected_negative', 'preserved_file_count')})) + + +if __name__ == '__main__': + main() diff --git a/docs/validation/native-input/collectors/verify-final-preservation.py b/docs/validation/native-input/collectors/verify-final-preservation.py new file mode 100644 index 00000000..3ada8289 --- /dev/null +++ b/docs/validation/native-input/collectors/verify-final-preservation.py @@ -0,0 +1,30 @@ +from pathlib import Path +import hashlib,importlib.util,json,subprocess,sys +sys.path.insert(0,'scripts');spec=importlib.util.spec_from_file_location('native_runner','scripts/test-webview-engine.py');m=importlib.util.module_from_spec(spec);spec.loader.exec_module(m) +b=Path('artifacts/native-input');sha=lambda d:hashlib.sha256(d).hexdigest();rows=[] +for kind,serial,avd,cohort in [('legacy','emulator-5598','Droidcast_WebView_API26_27caf3','legacy-owned-full-v5'),('modern','emulator-5580','Tinycast_Tablet_API_36','modern-owned-full-v5')]: + p=b/cohort;r=json.loads((p/'record.json').read_text());ime_before=json.loads((p/'private-ime-settings.json').read_text());m.require(set(ime_before)==set(m.IME_SETTING_KEYS),'Four-field baseline required') + adb=['/Library/Android/sdk/platform-tools/adb','-s',serial];checks={} + def raw(*args):return subprocess.check_output(adb+list(args),stderr=subprocess.STDOUT,timeout=60) + def text(*args):return raw(*args).decode().strip() + def check(name,condition): + checks[name]={'passed':bool(condition)} + m.require(condition,'Final preservation failed: '+kind+' '+name) + check('exact-emulator-and-api',text('emu','avd','name').splitlines()[0]==avd and text('shell','getprop','ro.build.version.sdk')==str(r['api'])) + check('idle-unprivileged-adbd',text('shell','id').startswith('uid=2000(') and 'ActiveInstrumentation{' not in text('shell','dumpsys','activity','processes')) + values=raw('shell','for key in '+' '.join(m.IME_SETTING_KEYS)+'; do settings get secure "$key"; done').decode().splitlines() + check('four-original-ime-settings',len(values)==len(m.IME_SETTING_KEYS) and dict(zip(m.IME_SETTING_KEYS,values))==ime_before) + check('original-geometry-and-raw-font',text('shell','wm','size')==r['original_geometry']['size'] and text('shell','wm','density')==r['original_geometry']['density'] and text('shell','settings','get','system','font_scale')==r['original_font_scale']) + if kind=='legacy': + check('original-package-absence',all(not text('shell','pm','list','packages',pkg) for pkg in [m.APP,m.TEST])) + else: + original=m.archive_files((p/'private-data-before.tar').read_bytes());expected={name:sha(value) for name,value in original.items() if not name.startswith('files/native-input-lease/')} + current=m.archive_files(raw('exec-out','run-as',m.APP,'tar','-cf','-','files','shared_prefs')) + check('all-original-files-after-original-apks', {name:sha(value) for name,value in current.items()}==expected) + check('application-unprivileged',not text('shell','run-as',m.APP,'id').startswith(('uid=0(','uid=1000(','uid=2000('))) + for pkg in [m.APP,m.TEST]: + path=text('shell','pm','path',pkg);m.require(path.count('package:')==1,'Unexpected package layout') + check('original-apk-'+pkg,sha(raw('exec-out','cat',path.removeprefix('package:')))==sha((p/('private-original-'+pkg+'.apk')).read_bytes())) + rows.append({'device':kind,'checks':checks,'preserved_file_count':len(expected) if kind=='modern' else None}) +result={'completed':True,'scope':'Read-only final state after all current installs/replacements, relative to the four-setting baselines after initial probe-history cleanup; original pre-probe IME-history identity remains unverified','collector_sha256':sha(Path(__file__).read_bytes()),'rows':rows} +(b/'final-preservation.json').write_text(json.dumps(result,indent=2)+'\n');print(json.dumps({'completed':True,'checks':sum(len(r['checks']) for r in rows),'modern_files':rows[1]['preserved_file_count']})) diff --git a/docs/validation/native-input/control-source-reference-clarification.json b/docs/validation/native-input/control-source-reference-clarification.json new file mode 100644 index 00000000..ba4cc760 --- /dev/null +++ b/docs/validation/native-input/control-source-reference-clarification.json @@ -0,0 +1,16 @@ +[ + { + "identity": "strict-control-v2", + "prior_reference_source": "b55a8f6fee1fafd8a6b8154fc21163b3c96dc9e7", + "actual_build_head": "8d2ca9768189a5d4ab61ed825e7d4ce9ed8ce65e", + "android_source_reference": "b55a8f6fee1fafd8a6b8154fc21163b3c96dc9e7", + "scope": "The actual control build had the later Python runner; all Android/build/test sources equal the reference except the explicit old-matcher override" + }, + { + "identity": "strict-control-v3", + "prior_reference_source": "b55a8f6fee1fafd8a6b8154fc21163b3c96dc9e7", + "actual_build_head": "8d2ca9768189a5d4ab61ed825e7d4ce9ed8ce65e", + "android_source_reference": "b55a8f6fee1fafd8a6b8154fc21163b3c96dc9e7", + "scope": "The actual control build had the later Python runner; all Android/build/test sources equal the reference except the explicit old-matcher override" + } +] diff --git a/docs/validation/native-input/dependencies/api26-ime-source.json b/docs/validation/native-input/dependencies/api26-ime-source.json new file mode 100644 index 00000000..5124de05 --- /dev/null +++ b/docs/validation/native-input/dependencies/api26-ime-source.json @@ -0,0 +1,4 @@ +{ + "url": "https://android.googlesource.com/platform/frameworks/base/+/android-8.0.0_r1/core/java/com/android/internal/inputmethod/InputMethodUtils.java", + "sha256": "95a4261823fc654809dfa8754ac2265d58f6f91b10cc8aaa3da785b69ffd1a43" +} diff --git a/docs/validation/native-input/dependencies/source.json b/docs/validation/native-input/dependencies/source.json new file mode 100644 index 00000000..73adf294 --- /dev/null +++ b/docs/validation/native-input/dependencies/source.json @@ -0,0 +1,4 @@ +{ + "url": "https://dl.google.com/dl/android/maven2/androidx/compose/foundation/foundation/1.7.6/foundation-1.7.6-sources.jar", + "sha256": "0bf091a6b6054ce0ff8b8b01a4d6ee6ba8a8b70edcfac77ff2ee5b91c9f37dec" +} diff --git a/docs/validation/native-input/final-preservation.json b/docs/validation/native-input/final-preservation.json new file mode 100644 index 00000000..fb3b792e --- /dev/null +++ b/docs/validation/native-input/final-preservation.json @@ -0,0 +1,58 @@ +{ + "completed": true, + "scope": "Read-only final state after all current installs/replacements, relative to the four-setting baselines after initial probe-history cleanup; original pre-probe IME-history identity remains unverified", + "collector_sha256": "3eaf6b09091cb5a25327b8d5094821be19283c1505aa599e63f056f8cbdf26d2", + "rows": [ + { + "device": "legacy", + "checks": { + "exact-emulator-and-api": { + "passed": true + }, + "idle-unprivileged-adbd": { + "passed": true + }, + "four-original-ime-settings": { + "passed": true + }, + "original-geometry-and-raw-font": { + "passed": true + }, + "original-package-absence": { + "passed": true + } + }, + "preserved_file_count": null + }, + { + "device": "modern", + "checks": { + "exact-emulator-and-api": { + "passed": true + }, + "idle-unprivileged-adbd": { + "passed": true + }, + "four-original-ime-settings": { + "passed": true + }, + "original-geometry-and-raw-font": { + "passed": true + }, + "all-original-files-after-original-apks": { + "passed": true + }, + "application-unprivileged": { + "passed": true + }, + "original-apk-dev.tinycast.android": { + "passed": true + }, + "original-apk-dev.tinycast.android.test": { + "passed": true + } + }, + "preserved_file_count": 573 + } + ] +} diff --git a/docs/validation/native-input/frames.json b/docs/validation/native-input/frames.json new file mode 100644 index 00000000..7ec40f25 --- /dev/null +++ b/docs/validation/native-input/frames.json @@ -0,0 +1,149 @@ +[ + { + "cohort": "legacy-owned-full-v5", + "stem": "exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion", + "png": "docs/screenshots/native-input/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "xml": "docs/validation/native-input/frames/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "frame": "docs/validation/native-input/frames/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json" + }, + { + "cohort": "modern-owned-full-v5", + "stem": "exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion", + "png": "docs/screenshots/native-input/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "xml": "docs/validation/native-input/frames/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "frame": "docs/validation/native-input/frames/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json" + }, + { + "cohort": "legacy-strict-control-v3", + "stem": "exactcontentassertionacceptscompositionandrejectschangedcharacters-failure", + "png": "docs/screenshots/native-input/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png", + "xml": "docs/validation/native-input/frames/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml", + "frame": "docs/validation/native-input/frames/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json" + }, + { + "cohort": "modern-strict-control-v3", + "stem": "exactcontentassertionacceptscompositionandrejectschangedcharacters-failure", + "png": "docs/screenshots/native-input/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.png", + "xml": "docs/validation/native-input/frames/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml", + "frame": "docs/validation/native-input/frames/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json" + }, + { + "cohort": "legacy-owned-full-v5", + "stem": "committedemojinavigationandcaretareexact-committed-query-selected-range", + "png": "docs/screenshots/native-input/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range.png", + "xml": "docs/validation/native-input/frames/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range.xml", + "frame": "docs/validation/native-input/frames/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json" + }, + { + "cohort": "legacy-owned-full-v5", + "stem": "activemultilingualcompositionkeepsresultselection-active-japanese-composition", + "png": "docs/screenshots/native-input/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png", + "xml": "docs/validation/native-input/frames/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml", + "frame": "docs/validation/native-input/frames/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json" + }, + { + "cohort": "legacy-owned-full-v5", + "stem": "committedcallerselectionsurvivesidlenativeroutes-updates-destination", + "png": "docs/screenshots/native-input/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination.png", + "xml": "docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml", + "frame": "docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json" + }, + { + "cohort": "legacy-owned-full-v5", + "stem": "committedcallerselectionsurvivesidlenativeroutes-updates-caller-return", + "png": "docs/screenshots/native-input/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png", + "xml": "docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml", + "frame": "docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json" + }, + { + "cohort": "legacy-owned-full-v5", + "stem": "committedsameturnlauncheractivationusescurrentnote-same-turn-current-note", + "png": "docs/screenshots/native-input/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.png", + "xml": "docs/validation/native-input/frames/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.xml", + "frame": "docs/validation/native-input/frames/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note-frame.json" + }, + { + "cohort": "legacy-owned-full-v5", + "stem": "largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters", + "png": "docs/screenshots/native-input/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.png", + "xml": "docs/validation/native-input/frames/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml", + "frame": "docs/validation/native-input/frames/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json" + }, + { + "cohort": "modern-owned-full-v5", + "stem": "committedemojinavigationandcaretareexact-committed-query-selected-range", + "png": "docs/screenshots/native-input/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range.png", + "xml": "docs/validation/native-input/frames/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range.xml", + "frame": "docs/validation/native-input/frames/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json" + }, + { + "cohort": "legacy-owned-200-v5", + "stem": "exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion", + "png": "docs/screenshots/native-input/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "xml": "docs/validation/native-input/frames/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "frame": "docs/validation/native-input/frames/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json" + }, + { + "cohort": "legacy-owned-200-v5", + "stem": "committedcallerselectionsurvivesidlenativeroutes-updates-caller-return", + "png": "docs/screenshots/native-input/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png", + "xml": "docs/validation/native-input/frames/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml", + "frame": "docs/validation/native-input/frames/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json" + }, + { + "cohort": "modern-owned-phone200-v5", + "stem": "activemultilingualcompositionkeepsresultselection-active-japanese-composition", + "png": "docs/screenshots/native-input/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition.png", + "xml": "docs/validation/native-input/frames/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml", + "frame": "docs/validation/native-input/frames/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json" + }, + { + "cohort": "modern-owned-phone200-v5", + "stem": "committedcallerselectionsurvivesidlenativeroutes-updates-caller-return", + "png": "docs/screenshots/native-input/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png", + "xml": "docs/validation/native-input/frames/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml", + "frame": "docs/validation/native-input/frames/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json" + }, + { + "cohort": "modern-owned-landscape200-v5", + "stem": "exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion", + "png": "docs/screenshots/native-input/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "xml": "docs/validation/native-input/frames/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "frame": "docs/validation/native-input/frames/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json" + }, + { + "cohort": "modern-owned-landscape200-v5", + "stem": "committedcallerselectionsurvivesidlenativeroutes-updates-caller-return", + "png": "docs/screenshots/native-input/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.png", + "xml": "docs/validation/native-input/frames/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml", + "frame": "docs/validation/native-input/frames/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json" + }, + { + "cohort": "legacy-same-length-v6", + "stem": "exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion", + "png": "docs/screenshots/native-input/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "xml": "docs/validation/native-input/frames/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "frame": "docs/validation/native-input/frames/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json" + }, + { + "cohort": "modern-same-length-v6", + "stem": "exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion", + "png": "docs/screenshots/native-input/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.png", + "xml": "docs/validation/native-input/frames/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml", + "frame": "docs/validation/native-input/frames/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json" + }, + { + "cohort": "legacy-before-v2", + "stem": "recorddefaultimeandcontrolledcompositionnavigation-default-before", + "png": "docs/screenshots/native-input/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before.png", + "xml": "docs/validation/native-input/frames/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before.xml", + "frame": "docs/validation/native-input/frames/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before-frame.json" + }, + { + "cohort": "legacy-contracts-v1", + "stem": "committedemojinavigationandcaretareexact-failure", + "png": "docs/screenshots/native-input/system-ime-history/committedemojinavigationandcaretareexact-failure.png", + "xml": "docs/validation/native-input/frames/system-ime-history/committedemojinavigationandcaretareexact-failure.xml", + "frame": "docs/validation/native-input/frames/system-ime-history/committedemojinavigationandcaretareexact-failure-frame.json" + } +] diff --git a/docs/validation/native-input/frames/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json b/docs/validation/native-input/frames/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json new file mode 100644 index 00000000..a56deeea --- /dev/null +++ b/docs/validation/native-input/frames/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "updates-caller-return", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Committed caller query\/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml b/docs/validation/native-input/frames/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml new file mode 100644 index 00000000..af2ef655 --- /dev/null +++ b/docs/validation/native-input/frames/landscape200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json b/docs/validation/native-input/frames/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json new file mode 100644 index 00000000..4c650a34 --- /dev/null +++ b/docs/validation/native-input/frames/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "composed-title-after-assertion", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode\/whitespace remains rejected" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml b/docs/validation/native-input/frames/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml new file mode 100644 index 00000000..09e935fc --- /dev/null +++ b/docs/validation/native-input/frames/landscape200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json b/docs/validation/native-input/frames/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json new file mode 100644 index 00000000..4c650a34 --- /dev/null +++ b/docs/validation/native-input/frames/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "composed-title-after-assertion", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode\/whitespace remains rejected" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml b/docs/validation/native-input/frames/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml new file mode 100644 index 00000000..c1848f7f --- /dev/null +++ b/docs/validation/native-input/frames/legacy-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json b/docs/validation/native-input/frames/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json new file mode 100644 index 00000000..25e618b6 --- /dev/null +++ b/docs/validation/native-input/frames/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "failure", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode\/whitespace remains rejected" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml b/docs/validation/native-input/frames/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml new file mode 100644 index 00000000..aecc5d60 --- /dev/null +++ b/docs/validation/native-input/frames/legacy-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json b/docs/validation/native-input/frames/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json new file mode 100644 index 00000000..7b60633c --- /dev/null +++ b/docs/validation/native-input/frames/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "active-japanese-composition", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml b/docs/validation/native-input/frames/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml new file mode 100644 index 00000000..1d1e3a20 --- /dev/null +++ b/docs/validation/native-input/frames/legacy100/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json b/docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json new file mode 100644 index 00000000..a56deeea --- /dev/null +++ b/docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "updates-caller-return", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Committed caller query\/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml b/docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml new file mode 100644 index 00000000..de9a16c8 --- /dev/null +++ b/docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json b/docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json new file mode 100644 index 00000000..5dd8b538 --- /dev/null +++ b/docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "updates-destination", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Committed caller query\/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml b/docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml new file mode 100644 index 00000000..7a18abf4 --- /dev/null +++ b/docs/validation/native-input/frames/legacy100/committedcallerselectionsurvivesidlenativeroutes-updates-destination.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json b/docs/validation/native-input/frames/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json new file mode 100644 index 00000000..9d4ebfb4 --- /dev/null +++ b/docs/validation/native-input/frames/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "committed-query-selected-range", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Explicitly committed Emoji query supports injected grid navigation, exact caret and selected range" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range.xml b/docs/validation/native-input/frames/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range.xml new file mode 100644 index 00000000..fa986514 --- /dev/null +++ b/docs/validation/native-input/frames/legacy100/committedemojinavigationandcaretareexact-committed-query-selected-range.xml @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note-frame.json b/docs/validation/native-input/frames/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note-frame.json new file mode 100644 index 00000000..d9475696 --- /dev/null +++ b/docs/validation/native-input/frames/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "same-turn-current-note", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Explicitly committed owned launcher query opens the second note on Down\/Enter within one main-thread turn" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.xml b/docs/validation/native-input/frames/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.xml new file mode 100644 index 00000000..f960e676 --- /dev/null +++ b/docs/validation/native-input/frames/legacy100/committedsameturnlauncheractivationusescurrentnote-same-turn-current-note.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json b/docs/validation/native-input/frames/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json new file mode 100644 index 00000000..4c650a34 --- /dev/null +++ b/docs/validation/native-input/frames/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "composed-title-after-assertion", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode\/whitespace remains rejected" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml b/docs/validation/native-input/frames/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml new file mode 100644 index 00000000..152e8b1f --- /dev/null +++ b/docs/validation/native-input/frames/legacy100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json b/docs/validation/native-input/frames/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json new file mode 100644 index 00000000..3771f50b --- /dev/null +++ b/docs/validation/native-input/frames/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "large-draft-exact-characters", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Owned unsaved 540000-unit multilingual draft survives recreation with exact title\/body characters" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml b/docs/validation/native-input/frames/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml new file mode 100644 index 00000000..2ba9d160 --- /dev/null +++ b/docs/validation/native-input/frames/legacy100/largedraftrestoresexactcharactersafterrecreation-large-draft-exact-characters.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json b/docs/validation/native-input/frames/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json new file mode 100644 index 00000000..a56deeea --- /dev/null +++ b/docs/validation/native-input/frames/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "updates-caller-return", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Committed caller query\/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml b/docs/validation/native-input/frames/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml new file mode 100644 index 00000000..1ad3ee3a --- /dev/null +++ b/docs/validation/native-input/frames/legacy200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json b/docs/validation/native-input/frames/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json new file mode 100644 index 00000000..4c650a34 --- /dev/null +++ b/docs/validation/native-input/frames/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "composed-title-after-assertion", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode\/whitespace remains rejected" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml b/docs/validation/native-input/frames/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml new file mode 100644 index 00000000..1200d228 --- /dev/null +++ b/docs/validation/native-input/frames/legacy200/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json b/docs/validation/native-input/frames/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json new file mode 100644 index 00000000..7b60633c --- /dev/null +++ b/docs/validation/native-input/frames/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "active-japanese-composition", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Controlled active Japanese composition keeps direct native navigation with the editor, before and after composition publication" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml b/docs/validation/native-input/frames/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml new file mode 100644 index 00000000..324fe459 --- /dev/null +++ b/docs/validation/native-input/frames/phone200/activemultilingualcompositionkeepsresultselection-active-japanese-composition.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json b/docs/validation/native-input/frames/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json new file mode 100644 index 00000000..a56deeea --- /dev/null +++ b/docs/validation/native-input/frames/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "updates-caller-return", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Committed caller query\/range survives pointer Back from focused idle Updates and unsaved Note routes; no live network check" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml b/docs/validation/native-input/frames/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml new file mode 100644 index 00000000..3ac35d41 --- /dev/null +++ b/docs/validation/native-input/frames/phone200/committedcallerselectionsurvivesidlenativeroutes-updates-caller-return.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/system-ime-history/committedemojinavigationandcaretareexact-failure-frame.json b/docs/validation/native-input/frames/system-ime-history/committedemojinavigationandcaretareexact-failure-frame.json new file mode 100644 index 00000000..35cab2f3 --- /dev/null +++ b/docs/validation/native-input/frames/system-ime-history/committedemojinavigationandcaretareexact-failure-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "failure", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Explicitly committed Emoji query supports injected grid navigation, exact caret and selected range" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/system-ime-history/committedemojinavigationandcaretareexact-failure.xml b/docs/validation/native-input/frames/system-ime-history/committedemojinavigationandcaretareexact-failure.xml new file mode 100644 index 00000000..cbeb7565 --- /dev/null +++ b/docs/validation/native-input/frames/system-ime-history/committedemojinavigationandcaretareexact-failure.xml @@ -0,0 +1,373 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before-frame.json b/docs/validation/native-input/frames/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before-frame.json new file mode 100644 index 00000000..3a91c05c --- /dev/null +++ b/docs/validation/native-input/frames/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "default-before", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Owned native input observations; semantic\/model setup and injected keys are not physical typing; no clipboard or extension execution" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before.xml b/docs/validation/native-input/frames/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before.xml new file mode 100644 index 00000000..98fcbeb0 --- /dev/null +++ b/docs/validation/native-input/frames/system-ime-history/recorddefaultimeandcontrolledcompositionnavigation-default-before.xml @@ -0,0 +1,368 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json b/docs/validation/native-input/frames/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json new file mode 100644 index 00000000..4c650a34 --- /dev/null +++ b/docs/validation/native-input/frames/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "composed-title-after-assertion", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode\/whitespace remains rejected" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml b/docs/validation/native-input/frames/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml new file mode 100644 index 00000000..f95be799 --- /dev/null +++ b/docs/validation/native-input/frames/tablet-same-length/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json b/docs/validation/native-input/frames/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json new file mode 100644 index 00000000..25e618b6 --- /dev/null +++ b/docs/validation/native-input/frames/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "failure", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode\/whitespace remains rejected" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml b/docs/validation/native-input/frames/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml new file mode 100644 index 00000000..f2c79ebd --- /dev/null +++ b/docs/validation/native-input/frames/tablet-strict/exactcontentassertionacceptscompositionandrejectschangedcharacters-failure.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json b/docs/validation/native-input/frames/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json new file mode 100644 index 00000000..9d4ebfb4 --- /dev/null +++ b/docs/validation/native-input/frames/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "committed-query-selected-range", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Explicitly committed Emoji query supports injected grid navigation, exact caret and selected range" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range.xml b/docs/validation/native-input/frames/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range.xml new file mode 100644 index 00000000..03600064 --- /dev/null +++ b/docs/validation/native-input/frames/tablet100/committedemojinavigationandcaretareexact-committed-query-selected-range.xml @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/frames/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json b/docs/validation/native-input/frames/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json new file mode 100644 index 00000000..4c650a34 --- /dev/null +++ b/docs/validation/native-input/frames/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion-frame.json @@ -0,0 +1,6 @@ +{ + "diagnostic_only": true, + "phase": "composed-title-after-assertion", + "synchronization": "Compose idle; hierarchy before PNG; XML geometry not an independent visibility witness", + "scope": "Exact characters survive legitimate IME decoration; wrong Unicode\/whitespace remains rejected" +} \ No newline at end of file diff --git a/docs/validation/native-input/frames/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml b/docs/validation/native-input/frames/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml new file mode 100644 index 00000000..5d51ac12 --- /dev/null +++ b/docs/validation/native-input/frames/tablet100/exactcontentassertionacceptscompositionandrejectschangedcharacters-composed-title-after-assertion.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/validation/native-input/history/modern-control-recovery.json b/docs/validation/native-input/history/modern-control-recovery.json new file mode 100644 index 00000000..dd47f20c --- /dev/null +++ b/docs/validation/native-input/history/modern-control-recovery.json @@ -0,0 +1,59 @@ +{ + "completed": true, + "original_control_still_failed": true, + "original_native_passes": 0, + "original_native_failures": 1, + "original_record_sha256": "5b54506609ab6cf4d649b0e4ab777f97dc44a4d3a378beb13b769af9d74c80bd", + "collector_sha256": "0c681081ce7c7028f932c226e917627330fdbae6affca6bc222e66f0583ff581", + "checks": { + "idle-and-exact-owner": { + "passed": true + }, + "four-original-ime-settings": { + "passed": true + }, + "stop-test": { + "passed": true + }, + "stop-app": { + "passed": true + }, + "remove-owned-only": { + "passed": true + }, + "restore-palette-bytes": { + "passed": true + }, + "restore-profile-marker": { + "passed": true + }, + "original-settings": { + "passed": true + }, + "original-data-before-apks": { + "passed": true + }, + "restore-original-app": { + "passed": true + }, + "restore-original-test": { + "passed": true + }, + "original-ime-after-apks": { + "passed": true + }, + "original-data-after-apks": { + "passed": true + }, + "original-privilege": { + "passed": true + }, + "revalidate-owner-last": { + "passed": true + }, + "release-owner-last": { + "passed": true + } + }, + "preserved_file_count": 573 +} diff --git a/docs/validation/native-input/identities/before-v1.json b/docs/validation/native-input/identities/before-v1.json new file mode 100644 index 00000000..de782c9f --- /dev/null +++ b/docs/validation/native-input/identities/before-v1.json @@ -0,0 +1,260 @@ +{ + "app_source": "fec0a4bf1155c08c141606f92ae8fb1feab4bba0", + "test_source": "3cc4a170cbe8186dc93dd0717dcaa4b4b8d54e48", + "collector_source": "3cc4a170cbe8186dc93dd0717dcaa4b4b8d54e48", + "app_scope": "Immutable PR107 production binary; all current production/build sources equal its frozen source", + "apks": { + "app-debug-androidTest.apk": "95dff20e67a68a07b6da3f62e116272d9b8c30ae06d9f602909d124c8c4405d3", + "app-debug.apk": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71" + }, + "sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "5d5a39153ed75d64af76674ab767709ee57017bdf39e6fe55ce7fd58ab8b3598", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "5a07e916e1aa38236ee91f4931cd01ccaef42b7ba03598fab69632ad4a30bcaf", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "17545e645708b0f9c38ec1b9c4ca27c9ab7d3ee54a11e92c2932553493561770", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "6d2d61bd4fe43b6e906b26d233c5cb65bb605f4f9ae8296d1b2f79e55a68cce0", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "75fc765ce6ac38535c3974af03d6e63e75dbf10a03440d86372ed08e1b905b03", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "build_log_sha256": "bbd8fd6895a77892be5a7a88a6e5e030d1ebc3efda17ed7c0cc5fb3c1fb22556", + "initial_build_failure": "diagnostic-harness-build-v1.log retained; import/opt-in compilation errors, no device execution" +} diff --git a/docs/validation/native-input/identities/before-v2.json b/docs/validation/native-input/identities/before-v2.json new file mode 100644 index 00000000..0ecc48b7 --- /dev/null +++ b/docs/validation/native-input/identities/before-v2.json @@ -0,0 +1,260 @@ +{ + "app_source": "fec0a4bf1155c08c141606f92ae8fb1feab4bba0", + "test_source": "79cb9ec0c7abb67792f4ed83e99c7d02a3ea2854", + "collector_source": "79cb9ec0c7abb67792f4ed83e99c7d02a3ea2854", + "app_scope": "Immutable PR107 production binary; all current production/build sources equal its frozen source", + "apks": { + "app-debug-androidTest.apk": "be1d64e7f6874911b8a57459f7970f04a38bdb5c04ba9a3151481f6dbd664df8", + "app-debug.apk": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71" + }, + "sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "5d5a39153ed75d64af76674ab767709ee57017bdf39e6fe55ce7fd58ab8b3598", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "157a50bb68e9f980635d0db7a4778d85df95e57f06dd30ad96fdc02ba4f173b1", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "17545e645708b0f9c38ec1b9c4ca27c9ab7d3ee54a11e92c2932553493561770", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "a9e45755143efc91340a8bd0a9d8b75d0fd54d5a51cb06f50446c5e7c5378ba0", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "75fc765ce6ac38535c3974af03d6e63e75dbf10a03440d86372ed08e1b905b03", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "build_log_sha256": "c5d227e9b2c53afdc527b0591a20b2e0be128c62bd9f5b837e921b99a95cf1e1", + "initial_build_failure": "diagnostic-harness-build-v1.log retained; import/opt-in compilation errors, no device execution" +} diff --git a/docs/validation/native-input/identities/contracts-v1.json b/docs/validation/native-input/identities/contracts-v1.json new file mode 100644 index 00000000..b00cea48 --- /dev/null +++ b/docs/validation/native-input/identities/contracts-v1.json @@ -0,0 +1,261 @@ +{ + "app_source": "fec0a4bf1155c08c141606f92ae8fb1feab4bba0", + "test_source": "9c3a7bfb767997e09ba31a8ecedfba4ff0401c3c", + "collector_source": "9c3a7bfb767997e09ba31a8ecedfba4ff0401c3c", + "app_scope": "Immutable PR107 production binary; all current production/build sources equal its frozen source", + "apks": { + "app-debug-androidTest.apk": "ff67b0ca5fc5f231dfacc934a8189583ee140e8a209277559315160bd4012711", + "app-debug.apk": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71" + }, + "sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "5d5a39153ed75d64af76674ab767709ee57017bdf39e6fe55ce7fd58ab8b3598", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt": "be979c8e0f3e78b8d0e4482c2653769d732d24871a822b3761f5708a1e6a230b", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "f223984254525556e42d1c68b0dab3b814eedfd9854ed2b54159a9446a87e86c", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "3815d7aef28c0943999782217eabe14dd80fdd464476798bd0bf12a1d0be3c4a", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "75fc765ce6ac38535c3974af03d6e63e75dbf10a03440d86372ed08e1b905b03", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "build_log_sha256": "c5d227e9b2c53afdc527b0591a20b2e0be128c62bd9f5b837e921b99a95cf1e1", + "initial_build_failure": "diagnostic-harness-build-v1.log retained; import/opt-in compilation errors, no device execution" +} diff --git a/docs/validation/native-input/identities/final-v2.json b/docs/validation/native-input/identities/final-v2.json new file mode 100644 index 00000000..21a79cf7 --- /dev/null +++ b/docs/validation/native-input/identities/final-v2.json @@ -0,0 +1,262 @@ +{ + "app_source": "fec0a4bf1155c08c141606f92ae8fb1feab4bba0", + "test_source": "df0d555de3da9f08a0c0e671c12d2359e3201cb5", + "collector_source": "df0d555de3da9f08a0c0e671c12d2359e3201cb5", + "app_scope": "Immutable PR107 production binary; all current production/build sources equal its frozen source", + "apks": { + "app-debug-androidTest.apk": "6effc19e36580834dc6a05e6022fb4c6d29dfc03771651aad2e9dc91859d8be0", + "app-debug.apk": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71" + }, + "sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "5d5a39153ed75d64af76674ab767709ee57017bdf39e6fe55ce7fd58ab8b3598", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt": "be979c8e0f3e78b8d0e4482c2653769d732d24871a822b3761f5708a1e6a230b", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "254e09a06c19f54ce0663508877ef794b4026f5704e190d9ceed6b5280356445", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "3815d7aef28c0943999782217eabe14dd80fdd464476798bd0bf12a1d0be3c4a", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "75fc765ce6ac38535c3974af03d6e63e75dbf10a03440d86372ed08e1b905b03", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "build_log_sha256": "b982c061939d162860dea3e84526d697b4c3384003e629d798fe10f7e15af176", + "initial_build_failure": "diagnostic-harness-build-v1.log retained; import/opt-in compilation errors, no device execution", + "build_log_scope": "Frozen prefix establishes completed debug app/test assembly; combined lint/benchmark outcome is recorded separately" +} diff --git a/docs/validation/native-input/identities/owned-v3.json b/docs/validation/native-input/identities/owned-v3.json new file mode 100644 index 00000000..9523d673 --- /dev/null +++ b/docs/validation/native-input/identities/owned-v3.json @@ -0,0 +1,265 @@ +{ + "app_source": "fec0a4bf1155c08c141606f92ae8fb1feab4bba0", + "test_source": "b55a8f6fee1fafd8a6b8154fc21163b3c96dc9e7", + "collector_source": "b55a8f6fee1fafd8a6b8154fc21163b3c96dc9e7", + "app_scope": "Immutable PR107 production binary; all current production/build sources equal its frozen source", + "apks": { + "app-debug-androidTest.apk": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443", + "app-debug.apk": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71" + }, + "sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "63c98a685e9dd67d8150af8981832d34271fb37a92e46444eec52728f559d609", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt": "be979c8e0f3e78b8d0e4482c2653769d732d24871a822b3761f5708a1e6a230b", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "9b5697bc97488a1940cd1eb57335c0e3f0d6fcf6b598e62ab48315b44fd38d03", + "app/src/androidTest/java/dev/tinycast/android/NativeInputTestIme.kt": "c3a766ae381e6e4a1b514b3890cdd220616df8e9b88208cdb9aa562ebd8f45ce", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "3815d7aef28c0943999782217eabe14dd80fdd464476798bd0bf12a1d0be3c4a", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/androidTest/res/xml/native_input_test_ime.xml": "4aafc899939ff4b8883a80c6e00f7ff7413a08a603d485a15f1035c07760b50c", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "97b130618a6edcdbabee5f1f4e1f8320e30b6a6f3eaa794b37e961919e02dcad", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "d8c2bf8a0113ddf73d7b5818597bc54a8bd2c5a46d9090071f20a783d41fbd2c", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "build_log_sha256": "307fcce04991e7d1f7089ece28000fa55ff9705eac2c32f62323d87281162214", + "initial_build_failure": "diagnostic-harness-build-v1.log retained; import/opt-in compilation errors, no device execution", + "build_log_scope": "Frozen prefix establishes completed debug app/test assembly; combined lint outcome is recorded separately", + "controlled_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme" +} diff --git a/docs/validation/native-input/identities/owned-v4.json b/docs/validation/native-input/identities/owned-v4.json new file mode 100644 index 00000000..cc832cb2 --- /dev/null +++ b/docs/validation/native-input/identities/owned-v4.json @@ -0,0 +1,519 @@ +{ + "app_source": "fec0a4bf1155c08c141606f92ae8fb1feab4bba0", + "test_source": "b55a8f6fee1fafd8a6b8154fc21163b3c96dc9e7", + "collector_source": "8d2ca9768189a5d4ab61ed825e7d4ce9ed8ce65e", + "app_scope": "Immutable PR107 production binary; all current production/build sources equal its frozen source", + "apks": { + "app-debug-androidTest.apk": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443", + "app-debug.apk": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71" + }, + "sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "63c98a685e9dd67d8150af8981832d34271fb37a92e46444eec52728f559d609", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt": "be979c8e0f3e78b8d0e4482c2653769d732d24871a822b3761f5708a1e6a230b", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "9b5697bc97488a1940cd1eb57335c0e3f0d6fcf6b598e62ab48315b44fd38d03", + "app/src/androidTest/java/dev/tinycast/android/NativeInputTestIme.kt": "c3a766ae381e6e4a1b514b3890cdd220616df8e9b88208cdb9aa562ebd8f45ce", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "3815d7aef28c0943999782217eabe14dd80fdd464476798bd0bf12a1d0be3c4a", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/androidTest/res/xml/native_input_test_ime.xml": "4aafc899939ff4b8883a80c6e00f7ff7413a08a603d485a15f1035c07760b50c", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "0f08cc33955a073e0fd19d40cfeb08aa241254bbe1a257acdb8791080cac19a7", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "d8c2bf8a0113ddf73d7b5818597bc54a8bd2c5a46d9090071f20a783d41fbd2c", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "build_log_sha256": "d685045695b56068a38c67448cf07ef7854f367db3fe382736ff7bdcf59ee20d", + "initial_build_failure": "diagnostic-harness-build-v1.log retained; import/opt-in compilation errors, no device execution", + "build_log_scope": "Successful complete debug app/test assembly, JVM and debug lint invocation; Android APK build source remains b55a8f6f", + "controlled_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "apk_build_sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "63c98a685e9dd67d8150af8981832d34271fb37a92e46444eec52728f559d609", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt": "be979c8e0f3e78b8d0e4482c2653769d732d24871a822b3761f5708a1e6a230b", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "9b5697bc97488a1940cd1eb57335c0e3f0d6fcf6b598e62ab48315b44fd38d03", + "app/src/androidTest/java/dev/tinycast/android/NativeInputTestIme.kt": "c3a766ae381e6e4a1b514b3890cdd220616df8e9b88208cdb9aa562ebd8f45ce", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "3815d7aef28c0943999782217eabe14dd80fdd464476798bd0bf12a1d0be3c4a", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/androidTest/res/xml/native_input_test_ime.xml": "4aafc899939ff4b8883a80c6e00f7ff7413a08a603d485a15f1035c07760b50c", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "97b130618a6edcdbabee5f1f4e1f8320e30b6a6f3eaa794b37e961919e02dcad", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "d8c2bf8a0113ddf73d7b5818597bc54a8bd2c5a46d9090071f20a783d41fbd2c", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "source_changes_since_apk_build": [ + "scripts/test-webview-engine.py" + ] +} diff --git a/docs/validation/native-input/identities/owned-v5.json b/docs/validation/native-input/identities/owned-v5.json new file mode 100644 index 00000000..cc23eda0 --- /dev/null +++ b/docs/validation/native-input/identities/owned-v5.json @@ -0,0 +1,519 @@ +{ + "app_source": "fec0a4bf1155c08c141606f92ae8fb1feab4bba0", + "test_source": "b55a8f6fee1fafd8a6b8154fc21163b3c96dc9e7", + "collector_source": "7e17712280d74b7d145c98b320e8a16bdab8ccb6", + "app_scope": "Immutable PR107 production binary; all current production/build sources equal its frozen source", + "apks": { + "app-debug-androidTest.apk": "91dcd927c8ad41574e2ed44f6a7a6b3b1e1442ed579a132b9c3939fa76c27443", + "app-debug.apk": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71" + }, + "sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "63c98a685e9dd67d8150af8981832d34271fb37a92e46444eec52728f559d609", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt": "be979c8e0f3e78b8d0e4482c2653769d732d24871a822b3761f5708a1e6a230b", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "9b5697bc97488a1940cd1eb57335c0e3f0d6fcf6b598e62ab48315b44fd38d03", + "app/src/androidTest/java/dev/tinycast/android/NativeInputTestIme.kt": "c3a766ae381e6e4a1b514b3890cdd220616df8e9b88208cdb9aa562ebd8f45ce", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "3815d7aef28c0943999782217eabe14dd80fdd464476798bd0bf12a1d0be3c4a", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/androidTest/res/xml/native_input_test_ime.xml": "4aafc899939ff4b8883a80c6e00f7ff7413a08a603d485a15f1035c07760b50c", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "d8c2bf8a0113ddf73d7b5818597bc54a8bd2c5a46d9090071f20a783d41fbd2c", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "build_log_sha256": "d685045695b56068a38c67448cf07ef7854f367db3fe382736ff7bdcf59ee20d", + "initial_build_failure": "diagnostic-harness-build-v1.log retained; import/opt-in compilation errors, no device execution", + "build_log_scope": "Successful complete debug app/test assembly, JVM and debug lint invocation; Android APK build source remains b55a8f6f", + "controlled_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "apk_build_sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "63c98a685e9dd67d8150af8981832d34271fb37a92e46444eec52728f559d609", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt": "be979c8e0f3e78b8d0e4482c2653769d732d24871a822b3761f5708a1e6a230b", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "9b5697bc97488a1940cd1eb57335c0e3f0d6fcf6b598e62ab48315b44fd38d03", + "app/src/androidTest/java/dev/tinycast/android/NativeInputTestIme.kt": "c3a766ae381e6e4a1b514b3890cdd220616df8e9b88208cdb9aa562ebd8f45ce", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "3815d7aef28c0943999782217eabe14dd80fdd464476798bd0bf12a1d0be3c4a", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/androidTest/res/xml/native_input_test_ime.xml": "4aafc899939ff4b8883a80c6e00f7ff7413a08a603d485a15f1035c07760b50c", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "97b130618a6edcdbabee5f1f4e1f8320e30b6a6f3eaa794b37e961919e02dcad", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "d8c2bf8a0113ddf73d7b5818597bc54a8bd2c5a46d9090071f20a783d41fbd2c", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "source_changes_since_apk_build": [ + "scripts/test-webview-engine.py" + ] +} diff --git a/docs/validation/native-input/identities/same-length-v6.json b/docs/validation/native-input/identities/same-length-v6.json new file mode 100644 index 00000000..0a2c4218 --- /dev/null +++ b/docs/validation/native-input/identities/same-length-v6.json @@ -0,0 +1,518 @@ +{ + "app_source": "fec0a4bf1155c08c141606f92ae8fb1feab4bba0", + "test_source": "c8dbbe026761a279abc1ac33aaf4605a4e245a43", + "collector_source": "c8dbbe026761a279abc1ac33aaf4605a4e245a43", + "app_scope": "Immutable PR107 production binary; all current production/build sources equal its frozen source", + "apks": { + "app-debug-androidTest.apk": "60598e18bab4968030c3fe627a54ee2c0f018ce801b4b13f34112cdd011ddabc", + "app-debug.apk": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71" + }, + "sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "63c98a685e9dd67d8150af8981832d34271fb37a92e46444eec52728f559d609", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt": "be979c8e0f3e78b8d0e4482c2653769d732d24871a822b3761f5708a1e6a230b", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "484dcb406a6b9fbc7851efd883029a43b303bdab799c9385e51a678ab91a51fc", + "app/src/androidTest/java/dev/tinycast/android/NativeInputTestIme.kt": "c3a766ae381e6e4a1b514b3890cdd220616df8e9b88208cdb9aa562ebd8f45ce", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "3815d7aef28c0943999782217eabe14dd80fdd464476798bd0bf12a1d0be3c4a", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/androidTest/res/xml/native_input_test_ime.xml": "4aafc899939ff4b8883a80c6e00f7ff7413a08a603d485a15f1035c07760b50c", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "d8c2bf8a0113ddf73d7b5818597bc54a8bd2c5a46d9090071f20a783d41fbd2c", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "build_log_sha256": "e8cc2949a387acc3a469dcd263700f81168e33b9c112bdeeceb94910e39e2772", + "initial_build_failure": "diagnostic-harness-build-v1.log retained; import/opt-in compilation errors, no device execution", + "build_log_scope": "Fresh debug instrumentation and debug lint for the strengthened same-length predicate; production app remains the immutable prior binary", + "controlled_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "apk_build_sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "63c98a685e9dd67d8150af8981832d34271fb37a92e46444eec52728f559d609", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt": "be979c8e0f3e78b8d0e4482c2653769d732d24871a822b3761f5708a1e6a230b", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "484dcb406a6b9fbc7851efd883029a43b303bdab799c9385e51a678ab91a51fc", + "app/src/androidTest/java/dev/tinycast/android/NativeInputTestIme.kt": "c3a766ae381e6e4a1b514b3890cdd220616df8e9b88208cdb9aa562ebd8f45ce", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "3815d7aef28c0943999782217eabe14dd80fdd464476798bd0bf12a1d0be3c4a", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/androidTest/res/xml/native_input_test_ime.xml": "4aafc899939ff4b8883a80c6e00f7ff7413a08a603d485a15f1035c07760b50c", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "d8c2bf8a0113ddf73d7b5818597bc54a8bd2c5a46d9090071f20a783d41fbd2c", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "source_changes_since_apk_build": [], + "supplement_scope": "Three added fixture lines in one contract; reversing them reconstructs the complete b55a8f6f NativeInputCompatibilityDeviceTest source exactly; no binary equivalence assumption" +} diff --git a/docs/validation/native-input/identities/strict-control-v1-helper.kt b/docs/validation/native-input/identities/strict-control-v1-helper.kt new file mode 100644 index 00000000..076aed57 --- /dev/null +++ b/docs/validation/native-input/identities/strict-control-v1-helper.kt @@ -0,0 +1,9 @@ +package dev.tinycast.android + +import androidx.compose.ui.semantics.SemanticsProperties +import androidx.compose.ui.test.SemanticsMatcher +import androidx.compose.ui.text.AnnotatedString + +/** Matched control: original strict annotation expectation. */ +internal fun editableCharactersExactly(expected: String) = + SemanticsMatcher.expectValue(SemanticsProperties.EditableText, AnnotatedString(expected)) diff --git a/docs/validation/native-input/identities/strict-control-v1.json b/docs/validation/native-input/identities/strict-control-v1.json new file mode 100644 index 00000000..9a2eb6a9 --- /dev/null +++ b/docs/validation/native-input/identities/strict-control-v1.json @@ -0,0 +1,266 @@ +{ + "app_source": "fec0a4bf1155c08c141606f92ae8fb1feab4bba0", + "test_source": "9c3a7bfb767997e09ba31a8ecedfba4ff0401c3c", + "collector_source": "9c3a7bfb767997e09ba31a8ecedfba4ff0401c3c", + "app_scope": "Immutable PR107 production binary; all current production/build sources equal its frozen source", + "apks": { + "app-debug-androidTest.apk": "c52f3e04917a94a7e7cf3cbb2a259c469a5e6e860cbb45691b52f2995acd7196", + "app-debug.apk": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71" + }, + "sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "5d5a39153ed75d64af76674ab767709ee57017bdf39e6fe55ce7fd58ab8b3598", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "f223984254525556e42d1c68b0dab3b814eedfd9854ed2b54159a9446a87e86c", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "3815d7aef28c0943999782217eabe14dd80fdd464476798bd0bf12a1d0be3c4a", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "92c573677402bf1ed33455f2bc49833c0bc9c924e9a85a0dfe8fa343e93e1bcb", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "75fc765ce6ac38535c3974af03d6e63e75dbf10a03440d86372ed08e1b905b03", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "build_log_sha256": "598feb7b68210ac06d5af9f27b1a11962f7f8bdc1ac7325ff1e277ed585fd483", + "initial_build_failure": "diagnostic-harness-build-v1.log retained; import/opt-in compilation errors, no device execution", + "source_override": { + "path": "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt", + "sha256": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "scope": "Only the content matcher is replaced by the original strict AnnotatedString expectation; all other test/production/runner sources equal the candidate source" + } +} diff --git a/docs/validation/native-input/identities/strict-control-v2-helper.kt b/docs/validation/native-input/identities/strict-control-v2-helper.kt new file mode 100644 index 00000000..076aed57 --- /dev/null +++ b/docs/validation/native-input/identities/strict-control-v2-helper.kt @@ -0,0 +1,9 @@ +package dev.tinycast.android + +import androidx.compose.ui.semantics.SemanticsProperties +import androidx.compose.ui.test.SemanticsMatcher +import androidx.compose.ui.text.AnnotatedString + +/** Matched control: original strict annotation expectation. */ +internal fun editableCharactersExactly(expected: String) = + SemanticsMatcher.expectValue(SemanticsProperties.EditableText, AnnotatedString(expected)) diff --git a/docs/validation/native-input/identities/strict-control-v2.json b/docs/validation/native-input/identities/strict-control-v2.json new file mode 100644 index 00000000..a95f34f9 --- /dev/null +++ b/docs/validation/native-input/identities/strict-control-v2.json @@ -0,0 +1,524 @@ +{ + "app_source": "fec0a4bf1155c08c141606f92ae8fb1feab4bba0", + "test_source": "8d2ca9768189a5d4ab61ed825e7d4ce9ed8ce65e", + "collector_source": "8d2ca9768189a5d4ab61ed825e7d4ce9ed8ce65e", + "app_scope": "Immutable PR107 production binary; all current production/build sources equal its frozen source", + "apks": { + "app-debug-androidTest.apk": "663557f37ad94b33e9db71fc5628a2098198e8e28b7eae12c2dbcf7cef60d1b3", + "app-debug.apk": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71" + }, + "sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "63c98a685e9dd67d8150af8981832d34271fb37a92e46444eec52728f559d609", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "9b5697bc97488a1940cd1eb57335c0e3f0d6fcf6b598e62ab48315b44fd38d03", + "app/src/androidTest/java/dev/tinycast/android/NativeInputTestIme.kt": "c3a766ae381e6e4a1b514b3890cdd220616df8e9b88208cdb9aa562ebd8f45ce", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "3815d7aef28c0943999782217eabe14dd80fdd464476798bd0bf12a1d0be3c4a", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/androidTest/res/xml/native_input_test_ime.xml": "4aafc899939ff4b8883a80c6e00f7ff7413a08a603d485a15f1035c07760b50c", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "0f08cc33955a073e0fd19d40cfeb08aa241254bbe1a257acdb8791080cac19a7", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "d8c2bf8a0113ddf73d7b5818597bc54a8bd2c5a46d9090071f20a783d41fbd2c", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "build_log_sha256": "cdbf5acb4a637f386177f891c10cdde6ce22198f958b6d79872b38ab48f89fa6", + "initial_build_failure": "diagnostic-harness-build-v1.log retained; import/opt-in compilation errors, no device execution", + "build_log_scope": "AndroidTest assembly of the matched old strict matcher only; unchanged production APK reused; no JVM/lint/runtime outcome is inferred from this build", + "controlled_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "apk_build_sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "63c98a685e9dd67d8150af8981832d34271fb37a92e46444eec52728f559d609", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "9b5697bc97488a1940cd1eb57335c0e3f0d6fcf6b598e62ab48315b44fd38d03", + "app/src/androidTest/java/dev/tinycast/android/NativeInputTestIme.kt": "c3a766ae381e6e4a1b514b3890cdd220616df8e9b88208cdb9aa562ebd8f45ce", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "3815d7aef28c0943999782217eabe14dd80fdd464476798bd0bf12a1d0be3c4a", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/androidTest/res/xml/native_input_test_ime.xml": "4aafc899939ff4b8883a80c6e00f7ff7413a08a603d485a15f1035c07760b50c", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "0f08cc33955a073e0fd19d40cfeb08aa241254bbe1a257acdb8791080cac19a7", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "d8c2bf8a0113ddf73d7b5818597bc54a8bd2c5a46d9090071f20a783d41fbd2c", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "source_changes_since_apk_build": [], + "source_override": { + "path": "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt", + "sha256": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "scope": "Only the content matcher is replaced by the original strict AnnotatedString expectation; all other test/production/runner sources equal the candidate source" + }, + "android_source_reference": "b55a8f6fee1fafd8a6b8154fc21163b3c96dc9e7", + "build_head": "8d2ca9768189a5d4ab61ed825e7d4ce9ed8ce65e" +} diff --git a/docs/validation/native-input/identities/strict-control-v3-helper.kt b/docs/validation/native-input/identities/strict-control-v3-helper.kt new file mode 100644 index 00000000..076aed57 --- /dev/null +++ b/docs/validation/native-input/identities/strict-control-v3-helper.kt @@ -0,0 +1,9 @@ +package dev.tinycast.android + +import androidx.compose.ui.semantics.SemanticsProperties +import androidx.compose.ui.test.SemanticsMatcher +import androidx.compose.ui.text.AnnotatedString + +/** Matched control: original strict annotation expectation. */ +internal fun editableCharactersExactly(expected: String) = + SemanticsMatcher.expectValue(SemanticsProperties.EditableText, AnnotatedString(expected)) diff --git a/docs/validation/native-input/identities/strict-control-v3.json b/docs/validation/native-input/identities/strict-control-v3.json new file mode 100644 index 00000000..ee046f90 --- /dev/null +++ b/docs/validation/native-input/identities/strict-control-v3.json @@ -0,0 +1,526 @@ +{ + "app_source": "fec0a4bf1155c08c141606f92ae8fb1feab4bba0", + "test_source": "8d2ca9768189a5d4ab61ed825e7d4ce9ed8ce65e", + "collector_source": "7e17712280d74b7d145c98b320e8a16bdab8ccb6", + "app_scope": "Immutable PR107 production binary; all current production/build sources equal its frozen source", + "apks": { + "app-debug-androidTest.apk": "663557f37ad94b33e9db71fc5628a2098198e8e28b7eae12c2dbcf7cef60d1b3", + "app-debug.apk": "ae03c859cbdb5177796b6ed559a8db20b210d2919b2f5c9e4bf5d4694ac4ec71" + }, + "sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "63c98a685e9dd67d8150af8981832d34271fb37a92e46444eec52728f559d609", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "9b5697bc97488a1940cd1eb57335c0e3f0d6fcf6b598e62ab48315b44fd38d03", + "app/src/androidTest/java/dev/tinycast/android/NativeInputTestIme.kt": "c3a766ae381e6e4a1b514b3890cdd220616df8e9b88208cdb9aa562ebd8f45ce", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "3815d7aef28c0943999782217eabe14dd80fdd464476798bd0bf12a1d0be3c4a", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/androidTest/res/xml/native_input_test_ime.xml": "4aafc899939ff4b8883a80c6e00f7ff7413a08a603d485a15f1035c07760b50c", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "4a43ad7c9878451d5e92fa37fb376dde3f4206fc2b2b78fc6c7c84af7763926a", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "d8c2bf8a0113ddf73d7b5818597bc54a8bd2c5a46d9090071f20a783d41fbd2c", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "build_log_sha256": "cdbf5acb4a637f386177f891c10cdde6ce22198f958b6d79872b38ab48f89fa6", + "initial_build_failure": "diagnostic-harness-build-v1.log retained; import/opt-in compilation errors, no device execution", + "build_log_scope": "AndroidTest assembly of the matched old strict matcher only; unchanged production APK reused; no JVM/lint/runtime outcome is inferred from this build", + "controlled_ime": "dev.tinycast.android.test/dev.tinycast.android.NativeInputTestIme", + "apk_build_sources": { + "app/build.gradle.kts": "28f41ac518c91f15c98221d0511870a5409b9f35ae008acfdd5f667db06bcadf", + "app/src/androidTest/AndroidManifest.xml": "63c98a685e9dd67d8150af8981832d34271fb37a92e46444eec52728f559d609", + "app/src/androidTest/assets/owned-detail-fixture.js": "873d3f25f95271029e31779b0920b5955a2908a820a07652b58efa21a2358cfd", + "app/src/androidTest/java/dev/tinycast/android/ActivationDeviceTest.kt": "2f2fe66a5c3628433feeb6db33e02be43ca3f267b39ec541f2e3330fc1142974", + "app/src/androidTest/java/dev/tinycast/android/AssistantDeviceTest.kt": "1ecebcf20fe9aa7aa63701c81500195eddd1ae88618d89f31105fecc58189b6b", + "app/src/androidTest/java/dev/tinycast/android/AssistantTouchDeviceTest.kt": "1f33a283e5b1f05a5a74dbb76bc3ff8920193cd761edd1cce1e61cb733cb9874", + "app/src/androidTest/java/dev/tinycast/android/BackupDeviceTest.kt": "56c56d6a652524f7fc7952b1478552314b1e465ace5c7216385d7f2ea3cf4b6c", + "app/src/androidTest/java/dev/tinycast/android/CalculatorActionsDeviceTest.kt": "e738e5b09aa6128343abe628ed7f93571b9a87c1eb95e78f00c617aadcf348b4", + "app/src/androidTest/java/dev/tinycast/android/CalculatorIntentDeviceTest.kt": "628ddcef4b50880170fba97cd925fefc5f463f632799d9e2686e7512b2bbc15f", + "app/src/androidTest/java/dev/tinycast/android/ClipboardApiDeviceTest.kt": "e53bbc080d17b59aae6280b7b817a3c81b4df684dcfd5ca787a993d89caf5de4", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidence.kt": "c882a7435cdca3bbdf68da66a6e8ef23bce932fb5746ba09c61bded5b9c98e9d", + "app/src/androidTest/java/dev/tinycast/android/ClipboardEvidenceDeviceTest.kt": "dfdb64344886b7e5d4b54f04fa4560f169e8cb8d7b7b238ba08358dcde73f854", + "app/src/androidTest/java/dev/tinycast/android/ClipboardRecoveryActivity.java": "48627f465b10c316cca7fdfa735928095328241b4fb98bf90e5c247add17345d", + "app/src/androidTest/java/dev/tinycast/android/DocumentProviderDeviceTest.kt": "13895d23b8758affd8889461ef660c442d3bfd1bb111fce08a064aa4b582aea2", + "app/src/androidTest/java/dev/tinycast/android/EmojiDeviceTest.kt": "ab9907d4e4acd7e52ed26f12ac14648271e5740784cdba678671ca8ad42fb415", + "app/src/androidTest/java/dev/tinycast/android/EnduranceDeviceTest.kt": "4802d3755ce6bc1cdf8e60c7cf9998a09ced8e0be6d9888f0b9d9a32ee332dc4", + "app/src/androidTest/java/dev/tinycast/android/ExtensionCommandHandoffDeviceTest.kt": "8c47f08b1d49a94dfd520840a0b0349199459da4ece8ff1adcacc46516b37f7b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDetailDeviceTest.kt": "d5bd83f6d174ca5d5c3c9d68551cc3a78bc90763060410bd5f3b67d9d9642025", + "app/src/androidTest/java/dev/tinycast/android/ExtensionDeviceTest.kt": "3087ff055f70cdf43d2565e22703b9c57445b5c3e1594126d60b0279c32b2640", + "app/src/androidTest/java/dev/tinycast/android/ExtensionEmptyViewDeviceTest.kt": "64e6b1e68c61cf67b24ba02d1e14a72d297b1bdeebbdf1008905d5619ce2558f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionFormDeviceTest.kt": "6418f6ab517ead50a102b4834bff9c40988849fb3a2a1ef20f575d162b32e11b", + "app/src/androidTest/java/dev/tinycast/android/ExtensionGridDeviceTest.kt": "952b4f2988379c1545575d1332f8358acc9053e257a382b7549a27f6b4b40de3", + "app/src/androidTest/java/dev/tinycast/android/ExtensionMarkdownDeviceTest.kt": "e4b7daa9fd914335f572ef41665595104cdae5434682977a2d806ff63ef36c4f", + "app/src/androidTest/java/dev/tinycast/android/ExtensionPasteCopyDeviceTest.kt": "7bdd8e876153d4d46357402eab58cf89c0e8885823d21894c70882ed55b1da8e", + "app/src/androidTest/java/dev/tinycast/android/ExtensionRecordedTestsDeviceTest.kt": "1aa11011270b01a235bb052c6063da7eb5f7f726a7bb19f79aa54e7b8aa4ca42", + "app/src/androidTest/java/dev/tinycast/android/ExtensionSandboxDiagnosticDeviceTest.kt": "3e192cb65d011e021d5b47b6bde765e1136c2ddf7e039b5c9dce6dedbf39da15", + "app/src/androidTest/java/dev/tinycast/android/FeedbackReadabilityDeviceTest.kt": "86096d428b6554bcb6b8c9d7bc39b981baf1fd53f9367a33c97ce03c89020a82", + "app/src/androidTest/java/dev/tinycast/android/FolderDeviceTest.kt": "f3d54b0d788459d34470d2d87c8882cdfe30e8956a8886cd324dd63160f5628d", + "app/src/androidTest/java/dev/tinycast/android/FormDocumentsFixtureActivity.java": "434e72d8a0c977a83cbe6524cc51638eaff9cca5581c570ea58d4068ad2156a9", + "app/src/androidTest/java/dev/tinycast/android/FrozenBundleWorkflowDeviceTest.kt": "9d31d56f739caa2509610cf4c07abf70dfd5ea0aead7ec5c5673bde1ca04bc45", + "app/src/androidTest/java/dev/tinycast/android/InlinePaletteDeviceTest.kt": "ed2cfb9dc3c5218adfe0ae7b3cc1c60a69e6cf8c83ad434c2fc6b87d23bb2727", + "app/src/androidTest/java/dev/tinycast/android/LegacyInputDiagnosticDeviceTest.kt": "4966fac20af96b8597fb38a278d8f3ef89b7e335f3d3b6e5df00fb349ebabc55", + "app/src/androidTest/java/dev/tinycast/android/ModifierHardwareClipboardTest.kt": "141499cea10d4c80b8ef690fd43e985c066d1b420afa23895c32e75de737ec8d", + "app/src/androidTest/java/dev/tinycast/android/ModifierTapDeviceTest.kt": "d33bafba795569c15bab709a9830ca06ecffda9feb754492ec437d55c1d1cae1", + "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "app/src/androidTest/java/dev/tinycast/android/NativeInputCompatibilityDeviceTest.kt": "9b5697bc97488a1940cd1eb57335c0e3f0d6fcf6b598e62ab48315b44fd38d03", + "app/src/androidTest/java/dev/tinycast/android/NativeInputTestIme.kt": "c3a766ae381e6e4a1b514b3890cdd220616df8e9b88208cdb9aa562ebd8f45ce", + "app/src/androidTest/java/dev/tinycast/android/OwnedFormDocumentsProvider.java": "67c22d543cb2136d81dc3544d8f63df94ce67f9524c7f19dc9c6b1b586713e89", + "app/src/androidTest/java/dev/tinycast/android/PaletteDeviceTest.kt": "7f5861ffec2e762c1e629519802c10d4b31e3bebd49a3c5867013c6aad77f3f4", + "app/src/androidTest/java/dev/tinycast/android/PaletteOverlayTest.kt": "0755f9aa38bdb5785d2cb8902157ce990b5b9825db0ae71847e11c8b1bd4b7aa", + "app/src/androidTest/java/dev/tinycast/android/PaletteStabilityDeviceTest.kt": "87896693541425799e7815d2fc1e3988e29afd9bba346da48183a91fa91be9c9", + "app/src/androidTest/java/dev/tinycast/android/ReadinessDeviceTest.kt": "c6f3ea767e9adc8384a3b662223ab57bef067fca8501509e0415111b711589f3", + "app/src/androidTest/java/dev/tinycast/android/ReadinessRegressionDeviceTest.kt": "3815d7aef28c0943999782217eabe14dd80fdd464476798bd0bf12a1d0be3c4a", + "app/src/androidTest/java/dev/tinycast/android/RecentDocumentDeviceTest.kt": "85af5ed0fd05c0716b8ac14b24e98397829ff8d241695999a0cfc68727923e40", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextCallerActivity.java": "640609575a0711566bf23f3028a5144e8aeae912604f9b7180912fd2c9b96200", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextClipboardCrashDeviceTest.kt": "6a1ebc4d90c8b5fa9a07f4b288c20b361297efbeaf7d4423eb211da47b4cf0c0", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextDeviceTest.kt": "31040a9d92e7e60d8026dda7119a9f7eedd2127ea6f50bfb308849f56b6fc0ac", + "app/src/androidTest/java/dev/tinycast/android/ReviewedTextLifecycleDeviceTest.kt": "2190f43dca4d7a7eca162a7e34f46d6091cfd114d83a5e4509946c1b912ce76f", + "app/src/androidTest/java/dev/tinycast/android/SettingsDeviceTest.kt": "dd9b9a2492c497a2a3ac3218d0833d2e8b536eb904975aa536b08361acc323a9", + "app/src/androidTest/java/dev/tinycast/android/SettingsRouteDeviceTest.kt": "8f6991670e740a07d3a6b30aea270b60e19f6d237c4b7b6afaf25200962ad736", + "app/src/androidTest/java/dev/tinycast/android/ShortcutDeviceTest.kt": "5376ede8474d5eaa4ec7ecb628d1056a5bfc963bd2a292d17d9b86eead8a5415", + "app/src/androidTest/java/dev/tinycast/android/ShortcutReadinessDeviceTest.kt": "41bdf7ab67a6899dc8a0b1b0f697135bc587dc401c9234eb56d25385eadf3dcf", + "app/src/androidTest/java/dev/tinycast/android/SystemSettingsDeviceTest.kt": "80e0c919fbf04916d2441aa3fbc4cccfac534f56c29dfd908e5ae2d917cfe13b", + "app/src/androidTest/java/dev/tinycast/android/TestAutomation.kt": "faad509cd41b06c4cc1087e5de8e0218abca78773603b2050bb2825c880588fb", + "app/src/androidTest/java/dev/tinycast/android/TouchReadabilityDeviceTest.kt": "6801d25bb0d9bc45899b04aeedba474e2ac8e5cc8cb168b6268e0305fb49345e", + "app/src/androidTest/java/dev/tinycast/android/UpdateDeviceTest.kt": "380e4d7702d2f8c68fd575581309113bc67abf3e5713bdb177cc3b920c4e2787", + "app/src/androidTest/java/dev/tinycast/android/UpdateSelfInstallDeviceTest.kt": "fc94ef400b54ee2cf8378d2b1632fff1521299f188a132f0330e930b40f80ed3", + "app/src/androidTest/java/dev/tinycast/android/UpdateSourceDeviceTest.kt": "76d91931dc044fdeb001a8325a321306011f2b0c54aa631bea25751c59f3ea50", + "app/src/androidTest/java/dev/tinycast/android/UpdateVerificationDeviceTest.kt": "cebe3033132db567affccc5419ec59a9639c87ceb88b20c38ffbba16c13b4592", + "app/src/androidTest/java/dev/tinycast/android/WebViewCompatibilityDeviceTest.kt": "ce5842cad291b9cb77aed19ecb9436dc80de24beb27e018797a7f84fb4a84895", + "app/src/androidTest/java/dev/tinycast/android/WebViewRecoveryDeviceTest.kt": "dd6ccf056187d184dd7fb6aa1eddeb76bd7037f4af21f749dbe379a7a2eeecde", + "app/src/androidTest/res/xml/native_input_test_ime.xml": "4aafc899939ff4b8883a80c6e00f7ff7413a08a603d485a15f1035c07760b50c", + "app/src/main/AndroidManifest.xml": "65fefcf86296b7103c2237f1e29bca7890bf33f6b5056f860c2e39ede371a55b", + "app/src/main/assets/ANDROIDSVG-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30", + "app/src/main/assets/ANDROIDSVG-NOTICE": "2e61b715e3553494f46f43e5a88e8d26c56201e0558c8d5ab02946edb4f7dedf", + "app/src/main/assets/COMMONMARK-LICENSE": "11cfcf6da0142fb1971c1f40f5924ddded14454e2793d7f1dd87c9f4abe42dfd", + "app/src/main/assets/COPYING": "14609801e0e520dac851e75d993ca4c75c3842a3be468f6f7f04a16c03c824db", + "app/src/main/assets/GEMOJI-LICENSE": "7ea1d1fd0602e6623b9a65e791499a0ea5a2f5f60f91bfad78cbaeee19da26e6", + "app/src/main/assets/NOTICE.md": "c263e44ea9a845c4e4ec564eeca46ae0fc343f63ffd10685afbf74586647e0f6", + "app/src/main/assets/REACT-LICENSE": "da6d3703ed11cbe42bd212c725957c98da23cbff1998c05fa4b3d976d1a58e93", + "app/src/main/assets/RaycastRuntime.generated.js": "b306b45453cc8507037ff2822066475aae17def757a8ef72d4a4fc64c6494bb7", + "app/src/main/assets/android-runtime.js": "1b5dfa3f5b512f55322f27703bbebf15d1a8c4569c4c1712a6dd64541dd552aa", + "app/src/main/assets/emoji-catalog.tsv": "e49f1cc09c6f487a6e7b55590ecc171dcff390f720a9ce3820fe2038810d5d66", + "app/src/main/assets/extension-workflow-evidence-v1.json": "4e8adc22b7887996140190a999f1c7272556f2dd379d219c88e276e48aea0fa5", + "app/src/main/java/dev/tinycast/android/AndroidShortcuts.kt": "1738bc2fe26a117f3d00edddf2639cd49d118f9d91bd5f6eff86d6ee6804b68c", + "app/src/main/java/dev/tinycast/android/AssistantActivation.kt": "b5855f87a029362bd06a63136dea7a1572fff716d0c302056f2a3647d9d95560", + "app/src/main/java/dev/tinycast/android/Backup.kt": "97f09aa4c2cf7ef42473be8728be28cadd3f3ab14930a6804590c0544a7c104b", + "app/src/main/java/dev/tinycast/android/BackupUi.kt": "d13aabc798d7fb19746b09d28a38593792792b67e916824776413d2fbe82870f", + "app/src/main/java/dev/tinycast/android/CalculatorActions.kt": "e03e5645069dafb156556efac7bd465f632938f8a5a24a78be72dff0ee5d3947", + "app/src/main/java/dev/tinycast/android/CommandEngine.kt": "b6be72c82b19fb09e1bf44cd4dd4148b3dbb0c39098eb42f89e80f9ffa034f78", + "app/src/main/java/dev/tinycast/android/EmojiCatalog.kt": "4dd39955ec38adea02d0c1974ace2b33d86ae738efea0e59d3e62b9072c10b81", + "app/src/main/java/dev/tinycast/android/EmojiStore.kt": "f7f5dd63af030b9d179c70336f4b52789d23a318020b6f19ac0c24d20ba8cd8e", + "app/src/main/java/dev/tinycast/android/EmojiUi.kt": "8c1be27aad2e952108cdc28c8d6c28c5039513baeaa23ec6d6069d967b8c9414", + "app/src/main/java/dev/tinycast/android/FolderGrantTransaction.kt": "11361d342e1e1598c85b5ea630f174c3a4590cbfaf9b430a30fbea2b9686a5c7", + "app/src/main/java/dev/tinycast/android/FolderIndex.kt": "6f1b1617a39c0c6e954a1b9b4da0d0d6af3ab7eeac25f2619e299621eec83a99", + "app/src/main/java/dev/tinycast/android/FolderSearch.kt": "4fcf90368ed70b49c192ab1b92b6e367d0a61643f928245f8447f542e745b60d", + "app/src/main/java/dev/tinycast/android/FolderSearchUi.kt": "dad0f473544f8e459aa301ad8eb91ec7380cebbe572e3e2be3f94443585a75c6", + "app/src/main/java/dev/tinycast/android/FolderStorageCoordinator.kt": "ff5491baf9d81ff19b04b35e33a503fc1656bfee9d8eb066453fdbe7e0f83bfb", + "app/src/main/java/dev/tinycast/android/MainActivity.kt": "2bc08e693d69ba4668a675c42dbcabb507755f8e3daf9ee01eaf62fd5744efe0", + "app/src/main/java/dev/tinycast/android/PaletteActionCapsule.kt": "f7228cdd6b6988fb049f0aaf1048d69cc8489e802b4cc42a2b4d6f9e7ceea3e0", + "app/src/main/java/dev/tinycast/android/PaletteColumn.kt": "cd6cdc348752bcc20bd631e2216abdd4ee0c91d9606aaab62ce0c01a145dd6aa", + "app/src/main/java/dev/tinycast/android/PaletteDialogs.kt": "99055192ab85f645a9d9c77d96064b06bba2f1435de503bc45be8f56b4de2dc5", + "app/src/main/java/dev/tinycast/android/PaletteFooter.kt": "5b62c907b46e5075975fc22d01771f5ab7c7f53e433692de55d92865231e967f", + "app/src/main/java/dev/tinycast/android/PaletteFrame.kt": "bfbc139e01a4276770644d5f4c1242016839fd98f5e2f21fa8afb31c886bc763", + "app/src/main/java/dev/tinycast/android/PaletteMenuOwnership.kt": "0be25f335246b8e47bf07ea057adf2045a20f9db5bee90a396109adfa7426174", + "app/src/main/java/dev/tinycast/android/PaletteMenus.kt": "43bc24a46a1ea0bac20f096a7d5d5256250c1c1069e0990bc958881830533dd3", + "app/src/main/java/dev/tinycast/android/PaletteScrollHistory.kt": "84e26b8544adc069c9f86e3273acd2254e2189f1680dec592570a261cdf87602", + "app/src/main/java/dev/tinycast/android/PaletteStore.kt": "7434fd21d100108a267e5790ecb705f4ca76c5dd0c86cc5b14bd9644ed58f57d", + "app/src/main/java/dev/tinycast/android/PaletteTheme.kt": "7afa29642b2bda9c9f669eaf6cdefcb977d14417d313547aff1ff807f4e37471", + "app/src/main/java/dev/tinycast/android/PaletteTileService.kt": "6f29825b3560944aae77935bc3abfb6a53e9577735dc622bf80e5ea1a1fbad00", + "app/src/main/java/dev/tinycast/android/PaletteUi.kt": "9863a9646617cb0024ccfe6758b8030ce528b15dfdd1f6073f96637257f6ab29", + "app/src/main/java/dev/tinycast/android/PaletteViewport.kt": "7008b8535ec3e754450ce446f34b6d8e50e9b2f5a9de64f436583144f8dd83dc", + "app/src/main/java/dev/tinycast/android/RecentDocumentQueries.kt": "b60f5f6ac3458eb3659dd41aef01bcd20be9d59f3841ff0fa77c3eb6ee82c92b", + "app/src/main/java/dev/tinycast/android/ReviewedTextFlow.kt": "7daf246a7b8a608fe61e06f078bf3167c17df8f784f8779977ba6e87914526ea", + "app/src/main/java/dev/tinycast/android/ReviewedTextInput.kt": "ca681bb2c4eb91188a1550650bf5fb5f83569bf8ac954ab22abc0ce05ed17e73", + "app/src/main/java/dev/tinycast/android/ReviewedTextUi.kt": "5ded41175e114968aa1994c93ade551b21121db15c4a4a7ea5ff87deaff00d86", + "app/src/main/java/dev/tinycast/android/SettingsActivity.kt": "6c8a09cf51abdfc1f61c305b17e613f7b40f9960168aad2fafebdc31155a3601", + "app/src/main/java/dev/tinycast/android/SettingsUi.kt": "55886d17261a019fcddac77f25e655896217dadd081db6da23a2e519a6bad35b", + "app/src/main/java/dev/tinycast/android/ShortcutReadiness.kt": "83a422a837edc657f1f3faf94c155019eae73f1abcc8761379dcb2051ceed505", + "app/src/main/java/dev/tinycast/android/ShortcutUi.kt": "394fadd7890bbb2dd5f851bd5a290ebf19ad4e05fae64c321e529eeccd35c632", + "app/src/main/java/dev/tinycast/android/Shortcuts.kt": "14e08d112e3cc5689a5717f68dce1334d3c2bf92f4a7cfbc2057fdc96418a9b2", + "app/src/main/java/dev/tinycast/android/SystemSettings.kt": "c5c1535d12627b975f8f582437e53d02b4110f4bfb185d5c8d1e9307debc319a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCatalog.kt": "4427ae6610fcf75bc8f7ddeec9b869ab5b6698c9042280f9f0efff7ea3422e1e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionCommandLaunch.kt": "2b253982bfcaa9c2b04178fcd38a04492e450352a459bdf375abc7948e6950c6", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageInformation.kt": "8a5d61b8f7d594933c6797d12c60f1888b4f4f4ad7de35a306c206406733b5e0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImagePolicy.kt": "f393349926cd371a67e3e59af0d0eb4db66d124e035259622c5558efb0035529", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageTimeout.kt": "16e0fb6b411c4cf30fcbcafc7df536f72da84c1a208f0ea47ba1a0b612d762a8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImageUi.kt": "6da7920fd357a8106015a8a6da6d085fd2b8ae2bf26269c4aee670c84f7b0af0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailImages.kt": "a87f8cf7d311baefd09c62f8a09e282764561bc2fe27b61abe0aec14d8c273f4", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionDetailUi.kt": "15be7bc728b4fa72841db59a6e72e9acece275a5a6315d4ba6b19af22fc06f21", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEmptyView.kt": "4ab1b0093364ad790235b666fc70ec2642bb40692f3ce7fdb830e6bc514c61dd", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineCompatibility.kt": "36a9b4b35d22bc364ecb1f46d2d9f029e3807315a2d35d2fd231b2a86e8b49c8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionEngineUi.kt": "6972248240f701edcc038ce70428dfd1a716e40894d616918469af3270aaa9cb", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormContract.kt": "6eba4aa3f33b19d4c452212b3bbb33c8ac0cbb8ae8e61963867e83094d6778ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDateUi.kt": "e052fc6c27a78ac0df119c954f7ef43f720ce8ab72462bb712832b6dfdeae18f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormDocuments.kt": "1071c99bd42ec6265991731022662729fd1ccc0269fee924b229f9ab8c2980fc", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileImport.kt": "c91ee69d460190918ee649a61a340429ac0478a59ab5e7ca824db8c17d1f5d00", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormFileUi.kt": "4241a498c65c255db94f833038a1f86a8cb06f27b4cecb3838cc20e953262b01", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormPickerBackdrop.kt": "dff8e4e37d38c1387bfd221f6c43c29272abfa144fff34ada0a0734a9c0f946d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormSubmission.kt": "7f89b0ef7216cafb22c72a636b3b2998e5d71c9933bcd87d7c65a25b9a2bd9d8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTagUi.kt": "509187d014c00ca027720e16d22934686d1c0491f10e5e151a27b574cde86a96", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormTypedValues.kt": "bd6b1c9b3e45101715916ee145ad41cfb1b74e206ae733f97d375c119f86af97", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionFormUi.kt": "bdb8f813a82e1e1860ebb08047b4a449a440ffe6d2a005d97c06debcbf4438c2", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridImages.kt": "777de62995b645310418d2f0da8adf87c450d8b7459d1c9abab0e9a02ce84258", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridModel.kt": "5b104c726a950f09a7cf890a14c0e4e654dfe8f5ea8b1b41468a0822f42a2f48", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionGridUi.kt": "c66cd6ee6d29cd2cc43d45ddbdc15f175ac5a5a39b332736b4cbddecdbf9e6bf", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionHttp.kt": "88ed57ca318c3e0c45e50f85e3157692d479bdae9636127869556cfb553abfe8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionLinks.kt": "cebfba7010fd2a20423527f8025413c21257ecd8e97ddc0dcb321b1c74db71f1", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionListUi.kt": "b02b632904d5d6be8f7b967cd10ccbc72d7e3d8fff3caf66c4fb444bce7de136", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownModel.kt": "723a518700e335179c296e8b9b05ae9a899c8aaf93b8ca02b76476a46879d6ea", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMarkdownUi.kt": "54d1b8dc6b09e55a7b0adf7d23903c9fb97551673a5695196e2e6f89259e304d", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionMetadataVisuals.kt": "882b7080d8f46cc9c9e2fd96fd1cc5cb0565cbb282bf3b04cad1c31b77a32290", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPasteCopy.kt": "3ee4dfbb356c6ec02f50d8d525ca805c0d21468f49529b002e054ff9c03c71b8", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionPayloadIdentity.kt": "66037b60818bc4941f58551e6c1401c18641a6da43f9f2477db9c9f7838e29f0", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionRuntime.kt": "8df6a1a357a7133ce451930cc174b7382d70db75906724358ae40db664f6402e", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSelectionDelivery.kt": "f13388787b615343c214a861a619bdba88b6327dc939365a130e9e799169c397", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionSvgPolicy.kt": "1bed94b2ea8e6d2475526a0ed83d85724e32893fafc8b27bd8f2b58a95cd868a", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionUi.kt": "009e3b23953be18ae09c76a849dd6ce3943dff6b4f2d4b40d846385044851b3f", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowEvidence.kt": "98f65f5dbe1578b11fbb20d80f477a63b03659f7b11b1a7a6f526a4d6fe94379", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowInspection.kt": "650fdb495d2e1e0ab5331fe8c517baaaffcfe7d15e7f56b5b3f6247a650d01ed", + "app/src/main/java/dev/tinycast/android/extensions/ExtensionWorkflowUi.kt": "93e9af8898ccce7fa1ab8169f08926b1d9fa95ba5657c517d7224f9356488c3d", + "app/src/main/java/dev/tinycast/android/extensions/NodeCpuInfo.kt": "eea176a7259e8f3736878886350610a84a23a6d2799f5337f5c8b07a8fefa398", + "app/src/main/java/dev/tinycast/android/extensions/WeakValueTokens.kt": "5c4d6f5c5b0d7170b554091e1b9cd9d551119ea60d7fe7f03946eb70f498c34d", + "app/src/main/java/dev/tinycast/android/updates/AppUpdates.kt": "63ace29d7dc29e005ffbbdde31cbac4e1d923732604b1e43e6a4db8a3285b508", + "app/src/main/java/dev/tinycast/android/updates/UpdatePolicy.kt": "350a9142ebfc663cd4a0c982ab220fb5f1e3399bfb3207c980ea20fd4c5c4e6e", + "app/src/main/java/dev/tinycast/android/updates/UpdateSource.kt": "aa860f14bd3a9f39e19899f1927fb7a790c54bb4f2704651253d8f867bb3c100", + "app/src/main/java/dev/tinycast/android/updates/UpdateUi.kt": "0bceb6a4221787a58dfb14ee1bcdcd266388720ca8862bd705cfeb10cfe52457", + "app/src/main/res/drawable/ic_launcher.xml": "104e38ffdf3214de23909b7896392f4a974e4fcbcc778c447d5d7a9ce56380af", + "app/src/main/res/drawable/ic_palette_tile.xml": "e063a6c4a1a25d6717a31bc355543d76c7d1babf8e9556e68b1b5e6a2b860748", + "app/src/main/res/values/styles.xml": "de4ad14f9ef41aaa4ffc824af155831579fa1194af5055edd112efee5042f5e1", + "app/src/main/res/xml/assistant_service.xml": "1e9e560563a7d0260fc83126d3a9bf027bf6357adfc811b43bc3224290c77ddf", + "app/src/main/res/xml/data_extraction_rules.xml": "cb4d1da1c1bd38761a9a08cc4d8d1b55839fcc14a6e19badb653f75b23c20eca", + "app/src/main/res/xml/keyboard_service.xml": "b1839c96988c03fea26ce4ed5932b1315013f3d2c16165993afc17368ab7bdd4", + "app/src/test/java/dev/tinycast/android/BackupPlannerTest.kt": "12a55d3644b5094b84cad2e88a5432738021fc8d7c59c232d4e5fc4c2c9a1454", + "app/src/test/java/dev/tinycast/android/CalculatorActionsTest.kt": "e803682a82b89c9703fcfbcbb82424eafef6bae6a13092953a3dc2c877816509", + "app/src/test/java/dev/tinycast/android/CommandEngineTest.kt": "65d9d198e8e1a188e4dcfd5551ced8f558f87a106f42b1d02a1432e8d6b7c234", + "app/src/test/java/dev/tinycast/android/CommonMarkPrimaryConformanceTest.kt": "ceb2ca14cc003385533bdd73b8beefffe92740887537b74c2146160621a23fcd", + "app/src/test/java/dev/tinycast/android/EmojiCatalogTest.kt": "9d70ef96696215e14e561d73f5a41f0b1a8272c3b58e5ad5a8438c31bc53aaa5", + "app/src/test/java/dev/tinycast/android/ExtensionCommandLaunchTest.kt": "f45df47e1740873ed7e771de72a650d9df88cd31bbcf2fd3abf67e3999700291", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImagePolicyTest.kt": "7ec37a8870b70e3df0e3110f8b60ccc94185fedeaf1c39c76a00485dd4ca37d5", + "app/src/test/java/dev/tinycast/android/ExtensionDetailImageTimeoutTest.kt": "839216fc2d395cbd171676f32bfe77b894730a29a12127ec916c1d88b18dfb3d", + "app/src/test/java/dev/tinycast/android/ExtensionEngineCompatibilityTest.kt": "af9e76d4f6e7a6f193603f2db0169c95c7aadaca842d430c6178874f62840b1f", + "app/src/test/java/dev/tinycast/android/ExtensionFormContractTest.kt": "432d658e2a177312105e2ec86db2c59d0625086e86464a7ff946acb61c07e283", + "app/src/test/java/dev/tinycast/android/ExtensionFormFileImportTest.kt": "784f5b78f1dfd0d23ca653b36fc59bd13cba42e68c708c499678ac1ce474b673", + "app/src/test/java/dev/tinycast/android/ExtensionFormSubmissionTest.kt": "4bbdd8068cd95c314f7cf7aa156c7928cd815c5da11ef5f2cab1b4c5d23dd7d5", + "app/src/test/java/dev/tinycast/android/ExtensionFormTypedValuesTest.kt": "3a485a387e1527163d4318c3f0863b743bff02fe4e485adfff490d95cd554395", + "app/src/test/java/dev/tinycast/android/ExtensionFormValuesTest.kt": "6bc5bc8caaa5763e12dc3136bbba1d99249db10387c163cb1efeb0ae03f09d2a", + "app/src/test/java/dev/tinycast/android/ExtensionGridContractTest.kt": "50681a34c624a01867f287c66523d653e1931cf759f5e2926dda60feb85fa2b3", + "app/src/test/java/dev/tinycast/android/ExtensionGridNavigationTest.kt": "94ffe218ed5f9411210c2599db2a10dcd20c1a94655ef53e8cac1c574318b68f", + "app/src/test/java/dev/tinycast/android/ExtensionHttpTest.kt": "76917bbbdcc33dcc90d9b152d5a3e478fd981139e1df1d9edc0916e4f81b8e76", + "app/src/test/java/dev/tinycast/android/ExtensionMarkdownModelTest.kt": "fbeee6a80280ec27b660cc53222ef42f0e9ff5f5ce7ec5e02dede9d6b1c9222b", + "app/src/test/java/dev/tinycast/android/ExtensionMetadataVisualsTest.kt": "6f8653f4ed71138ac4fb0353e427d5b6775f54ec3600177ec6eae49dbc81598e", + "app/src/test/java/dev/tinycast/android/ExtensionPasteCopyTest.kt": "582ebddff12c96a504dd12a502ca851fc5d037e92f1d3ce98240eb162002b3bc", + "app/src/test/java/dev/tinycast/android/ExtensionPayloadIdentityTest.kt": "f59183b3224aab2923d9eb1ae598d1fa5cd2598b9ba80fc9a0db135005ae4e04", + "app/src/test/java/dev/tinycast/android/ExtensionSelectionDeliveryTest.kt": "1ea1e17cf0ea43fa3418a61f71587dbee9ec341b288d17fdaba3c5d3d8da4cb7", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowEvidenceTest.kt": "cf1589d69a498166b5a5fddd45135cf5b8575ec1d42f13ed4e2927b062b966fd", + "app/src/test/java/dev/tinycast/android/ExtensionWorkflowInspectionTest.kt": "043617c0cb943d76ebcdb5d0cc5bcdcda300069827b9b87a7425a16d084c1255", + "app/src/test/java/dev/tinycast/android/FolderGrantTransactionTest.kt": "ef710edc4ed1eb45782f90c385bc73305217f26882b630cd3e79ee93c59ef118", + "app/src/test/java/dev/tinycast/android/FolderIndexTest.kt": "bd371b19d1678ea876889cfb25505d690a4296c37d042e4cabd38bc7c7e4eff4", + "app/src/test/java/dev/tinycast/android/ModifierTapTest.kt": "bc0f6191ef2837018ca33a71010c1582cd39d0b3713c55acec4f91406a74d4fd", + "app/src/test/java/dev/tinycast/android/PaletteMenuOwnershipTest.kt": "c3134a62d61b5cd7ed810b867a6b40219713f21b798fabf6e659129cfab55506", + "app/src/test/java/dev/tinycast/android/PaletteScrollHistoryTest.kt": "b1610e3c3818e5823f99ded35bc36325042da250cfd48d98c0d6381066cfad5f", + "app/src/test/java/dev/tinycast/android/ReviewedTextInputTest.kt": "4bff225dd9fc1963736ad1f992e3eda3ffff21554c3ebef63d25acfdb41a29f3", + "app/src/test/java/dev/tinycast/android/ShortcutReadinessTest.kt": "45d32b02d4f89f857867d2585f3f5968251e9580edd34d9312bbfc158adc12e1", + "app/src/test/java/dev/tinycast/android/ShortcutTest.kt": "ae8034901d8ca73d704d40992b85ed43a64a021a078ff4eb5b2b853c4f398610", + "app/src/test/java/dev/tinycast/android/SystemSettingsTest.kt": "cdfc38bed12779bb92b0ddaeb79d197733243b24da43ab89d8580ecfd1f1fb51", + "app/src/test/java/dev/tinycast/android/TinycastGridParityTest.kt": "df6ca13f0f0a1e4bfa1f0085e274ed87457a6aa1a69492afa1041128af99c5e3", + "app/src/test/java/dev/tinycast/android/UpdatePolicyTest.kt": "d87ee4f7d6aa7b39b998267bd4d042d0b494ec6a1280d18860f262355c25cbe3", + "app/src/test/java/dev/tinycast/android/WeakValueTokensTest.kt": "ced7bf72628d5dc18fc5fdd30a81e58bb4b4b7f40e4e8c7eb0e77500f7c73566", + "app/src/test/java/dev/tinycast/android/extensions/NodeCpuInfoTest.kt": "5f3a7aae9b24435a4dbca77f9132a4b203ea736b1c76fc9108a51251983c2797", + "app/src/test/js/android-fetch.test.cjs": "2842effb321a11a33816f176f3300cd27a61c1e2ac70c4ed32681d46a129e56e", + "app/src/test/js/android-form-focus.test.cjs": "dd065271386dfdb2552caef1ae6e0c6f30e32783571abd85be328b9864bff8b6", + "app/src/test/js/android-form-submit.test.cjs": "7cbbb553dc2e657951b9195593b11add03597adad2710b4daa3e2cb807f87334", + "app/src/test/resources/commonmark-0.31.2.NOTICE": "610241b963a1a958c9465d99ec3f5778e7c6ef7251f9e119fed4c306b51641de", + "app/src/test/resources/commonmark-0.31.2.tsv": "dc27be954caac0ed8961299ca581a62aa4c68312091e68e52ab1e2bfe6aa5f5f", + "app/src/test/resources/extension-payload-identities-v1.json": "e451cf6b8efa208708db43dcb3a0545db1e73c610b72f488203fb4f147a490ab", + "app/src/test/resources/tinycast-grid-navigation.tsv": "da620f314fc39300beb7a11436715809ac1a9fd230fa4640c7f4f9c34b69aaf7", + "build.gradle.kts": "780d597cbe0f80d0103221a566db7574d1e07b17adca5bdbe7d6c728d77df12a", + "gradle/wrapper/gradle-wrapper.jar": "55243ef57851f12b070ad14f7f5bb8302daceeebc5bce5ece5fa6edb23e1145c", + "gradle/wrapper/gradle-wrapper.properties": "13287ffad6cf3064056ddad80d95b855132348930b2dc6c91490588c55b3ac7d", + "scripts/android_clipboard_recovery.py": "4aa2d03a100791544d282de37a2f62b6f7bfd94c47cc5611b6b6448ed8a946c1", + "scripts/android_form_documents_fixture.py": "ef44f5a9af1397fc8e8ea1924e36c2dec18d5c56c02e22f4925752daf1034841", + "scripts/android_test_cleanup.py": "1f4a1d70d251ec0a8294932388ce881da144c9c7d1c05df54df2c5b246d46373", + "scripts/extension_bundle_snapshot.py": "08ae0408a22e4f4c3c8a8b22af31b6a6a16d304dc0d14d5e489596dd9731a950", + "scripts/extension_manifest_catalog.py": "18c6048a0690e68dba3da1e8d11c5abccac16c3c26aa8803ff80abfd1dabe7e4", + "scripts/generate-emoji.py": "98f43c9a5941b4e65533e31ff7d7eaa4e697d8fecd4c7424297e6957e07abd53", + "scripts/generate-tinycast-grid-oracle.py": "bd53975673883b624d2553cd47687c5a3a760b17181a8c0621715ed1599b3118", + "scripts/modifier-test-input.c": "859cd4f868c0739124384652eb05dcff09f67bd65933c6546ec828adaf4f8756", + "scripts/package-nightly-update.py": "2a650baee0c7c76eadd360171e19686aad7b960fe34ebc780638c6b231032420", + "scripts/summarize-readiness.py": "e63d9d2ec435d2c369ae0be126bafb0b0507e903b03674f11a77ee10b428fe64", + "scripts/test-api-compatibility.py": "1ba4bf24535130bfd59a5f1d9d4830ca075e7158fc2cbe316696fcadb6108065", + "scripts/test-assistant-touch.py": "fd5a4acfdd19ddc60eb467fea3c7d2e8ab7ac717bea35c76d007577c23235a54", + "scripts/test-calculator-intent.py": "93ef5653c4d0c153d8f216c9fd74557089a964eaab80c84c85ab5460ec58f1a1", + "scripts/test-configurable-shortcuts.py": "56f4581f78265ec2c28faa1da115ae10a8349cf47e10db60bfba3e88f0cc3e73", + "scripts/test-extension-grid.py": "26f15b12f40277cbd3b6b874c58e41ab7e26735ef8e70634e5b5eb53b5652560", + "scripts/test-extension-workflows.py": "c6cce4d533b45655a7763305379107840a93a1a953be0322a869c7505ffc0997", + "scripts/test-global-shortcut.py": "4a0f57d16dfccbd0c7b33d6b78a841ccad030c4bad6fb108ac80f15dc89f6d6a", + "scripts/test-modifier-taps-hardware.py": "b0d2da7fd2410095d65ef20e25cd9b8e90f9b480849dfd5e497f75d4d713139c", + "scripts/test-modifier-taps.py": "8cb08d228371c90f995ae2246ef0a92daf6c81724c11a1ac67374ed0dd347dab", + "scripts/test-readiness-benchmark.py": "1f92dc1989f1ff36c82433d6eaab1e2c896abf7541a24a9b215c109e49d1a7d9", + "scripts/test-restart-files.py": "65f1c311df77634f746cb155d831acf1fa4d8cf05d0e1dabc9d372bf1e842065", + "scripts/test-reviewed-text-input.py": "4e9ab25f0b1bce00277d0dde5a37a29ab8cbbdb9900699c5bdfd9cfa4b9bb248", + "scripts/test-reviewed-text-process-recreation.py": "eecd547c48ad2bbce2d8bae62bbed26a2484e0b5d97ebb7cb989ba98d4de2a23", + "scripts/test-search-header.py": "772cb70442bbf28086beb8087ebce94d02ba6cc10e6acf8c2cf91a0d8d5b39d0", + "scripts/test-self-updates.py": "4ff148ea90c3a148a1eacf74116db288e5e9c282f69e0c331caa6f22b1a40889", + "scripts/test-startup-performance.py": "9ac605bf3347fde625d279767bb8fc4de76ae82f099e7d8351416fa5bc9250ae", + "scripts/test-touch-readability.py": "d9ae59ab3db56d63cb5c959c200263b71acd0e04c305dce4e9ceb8a395933fb6", + "scripts/test-webview-engine.py": "0f08cc33955a073e0fd19d40cfeb08aa241254bbe1a257acdb8791080cac19a7", + "scripts/tests/test_android_clipboard_recovery.py": "b260d3adcfa33e2641affebee9bebb1676097b4a24bbdbeb89cef7f3fc889176", + "scripts/tests/test_android_form_documents_fixture.py": "c2b573793d6c5d48fe9dc8e75ffc554e11818e319507080a4b96aa4e24e1fc03", + "scripts/tests/test_android_test_cleanup.py": "49c8831c517f0777f46952376f5d3b783322eeb25f063d69a9b1bc2f8cde01cf", + "scripts/tests/test_extension_bundle_snapshot.py": "382561907129ac58b7e20b963c1afcbc9bc1a03b7e18da64e7d61927a8b15783", + "scripts/tests/test_extension_manifest_catalog.py": "57af21edf39e3e4084453830eed62d3c052ba8d8a4f942d3d69807e2cd4b69a6", + "scripts/tests/test_extension_workflow_guards.py": "1cea982b85cf759e691471cad72b8e2cbdccdf3c2ccc6c483b1ef01b49002a3f", + "scripts/tests/test_private_path_observation.py": "3c0fff3062ac9b43aab67ed4ab2d53b92fa39f9af9e0ada9d197856a1df94e95", + "scripts/tests/test_reviewed_text_archives.py": "0308a50c148c97ed50381e894eabd43ec6e374878f99b810244c24e25f1a626e", + "scripts/tests/test_reviewed_text_runner_guards.py": "a3d489fe141be669374ecd0b3a6231afc5efdf4abfc6a74f7d25efec4e67038c", + "scripts/tests/test_webview_engine_runner.py": "d8c2bf8a0113ddf73d7b5818597bc54a8bd2c5a46d9090071f20a783d41fbd2c", + "scripts/verify-recorded-workflow-catalog.py": "fc0ec3b595b3a892238a4e0cc19b79ca092e8dcbe3e4af1d261e4874f984c2d5" + }, + "source_changes_since_apk_build": [ + "scripts/test-webview-engine.py" + ], + "source_override": { + "path": "app/src/androidTest/java/dev/tinycast/android/NativeEditableAssertions.kt", + "sha256": "e82fcf8cb2d016b78f266b729f78fadc091c8590745c83bfa5b047cc1e54875d", + "scope": "Only the content matcher is replaced by the original strict AnnotatedString expectation; all other test/production/runner sources equal the candidate source" + }, + "android_source_reference": "b55a8f6fee1fafd8a6b8154fc21163b3c96dc9e7", + "build_head": "8d2ca9768189a5d4ab61ed825e7d4ce9ed8ce65e" +} diff --git a/docs/validation/native-input/post-probe-ime-history-cleanup.json b/docs/validation/native-input/post-probe-ime-history-cleanup.json new file mode 100644 index 00000000..92b6a693 --- /dev/null +++ b/docs/validation/native-input/post-probe-ime-history-cleanup.json @@ -0,0 +1,17 @@ +{ + "scope": "Remove only the newly created owned test-IME history component after the first probes; original pre-probe history was not snapshotted and is not certified", + "rows": [ + { + "device": "legacy", + "owned_entries_removed": 1, + "other_current_entries_preserved": true, + "original_pre_probe_history_identity_certified": false + }, + { + "device": "modern", + "owned_entries_removed": 1, + "other_current_entries_preserved": true, + "original_pre_probe_history_identity_certified": false + } + ] +} diff --git a/docs/validation/native-input/profiles.json b/docs/validation/native-input/profiles.json new file mode 100644 index 00000000..66d3a5ff --- /dev/null +++ b/docs/validation/native-input/profiles.json @@ -0,0 +1,34 @@ +{ + "legacy": { + "api": "26", + "release": "8.0.0", + "avd": "Droidcast_WebView_API26_27caf3", + "size": "Physical size: 1080x1920", + "density": "Physical density: 420", + "font_scale": "null", + "ime_package": "com.google.android.inputmethod.latin", + "ime_version": [ + "versionName=6.2.34.154174348-preload-arm64-v8a" + ], + "webview": [ + "Current WebView package (name, version): (com.google.android.webview, 58.0.3029.125)" + ], + "installed_image_revision": "1" + }, + "modern": { + "api": "36", + "release": "16", + "avd": "Tinycast_Tablet_API_36", + "size": "Physical size: 1920x1200", + "density": "Physical density: 240", + "font_scale": "1.0", + "ime_package": "com.google.android.inputmethod.latin", + "ime_version": [ + "versionName=15.1.08.726012951-preload-arm64-v8a" + ], + "webview": [ + "Current WebView package (name, version): (com.google.android.webview, 133.0.6943.137)" + ], + "installed_image_revision": "7" + } +} diff --git a/docs/validation/native-input/projections.json b/docs/validation/native-input/projections.json new file mode 100644 index 00000000..8f7bec74 --- /dev/null +++ b/docs/validation/native-input/projections.json @@ -0,0 +1,2460 @@ +[ + { + "original": "artifacts/native-input/legacy-before-v1/record.json", + "original_sha256": "a7990b722f20140cb59e33a2ee89b33499d2a0dcdc7bd183e770008e471fe606", + "public": "docs/validation/native-input/cohorts/legacy-before-v1/record.json", + "public_sha256": "01f4958a127a1084a59d85c830138dc9bfa1ea7fb10354c409db5c80aba8ec21", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "initialization_error", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/legacy-before-v1/captures/case-recordcallerselectionacrossnativeroutes.json", + "original_sha256": "653dc76283ebf65b25f8238c44f28eb796f1ffa73093d373a43310fa38d60ac9", + "public": "docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recordcallerselectionacrossnativeroutes.json", + "public_sha256": "724b1e18b72968f6a7218d784c634508777249a178fa3030f778cea833f17514", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_completed", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "observations", + "palette_preferences_restored", + "scope", + "selection_setup", + "updates_scope" + ] + }, + { + "original": "artifacts/native-input/legacy-before-v1/captures/case-recorddefaultimeandcontrolledcompositionnavigation.json", + "original_sha256": "1b09847e7d1dca575713aa64e4e5c8f7a38fe0430c4b8feb0b7558b1253fc506", + "public": "docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json", + "public_sha256": "c1c3487dadae11cfedf2762e6174524578d771af65d2db492f9e82a6150dde7b", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_completed", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-before-v1/captures/case-recordlargedrafttextandannotationsafterrecreation.json", + "original_sha256": "0225616b8ac82c2ab8ead5b013c1a18ccfadca035a492242d99bc82e03627613", + "public": "docs/validation/native-input/cohorts/legacy-before-v1/cases/case-recordlargedrafttextandannotationsafterrecreation.json", + "public_sha256": "0de61be85fc49a500defdb55621ff5290fa00a051a214e2bff133ce8223caf0d", + "keys": [ + "api", + "body_annotated_exact", + "body_plain_exact", + "case", + "default_ime", + "diagnostic_completed", + "diagnostic_only", + "emoji_preferences_unchanged", + "expected_body_length", + "expected_body_sha256", + "font_scale", + "observations", + "palette_preferences_restored", + "scope", + "title_annotated_exact", + "title_plain_exact" + ] + }, + { + "original": "artifacts/native-input/legacy-before-v2/record.json", + "original_sha256": "0d9c5ea7e6d0900e005da52878774d96a43a9deeb8b268a639a098a5d0518878", + "public": "docs/validation/native-input/cohorts/legacy-before-v2/record.json", + "public_sha256": "04e75bd6f2a95fcb0f14ed713cdc533425f0cdbfbc25883fe0b00f0acbce4ca3", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "initialization_error", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/legacy-before-v2/captures/case-recordcallerselectionacrossnativeroutes.json", + "original_sha256": "666df1d4e3f650ea1f220a5f89da3764f87b138c7e50a53f1f359ed7dd1954b0", + "public": "docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordcallerselectionacrossnativeroutes.json", + "public_sha256": "b5e1520fd100f85e3ccde75a0454dbcc8a03c333c7aab3edb89342f93efd2860", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_completed", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "observations", + "palette_preferences_restored", + "scope", + "selection_setup", + "updates_root_focus_requested_before_return", + "updates_scope" + ] + }, + { + "original": "artifacts/native-input/legacy-before-v2/captures/case-recorddefaultimeandcontrolledcompositionnavigation.json", + "original_sha256": "828692f5fc5ddccb877380c0aee92e4cdd4ef51758f3a0f99de53ca38c57c723", + "public": "docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json", + "public_sha256": "6164dae141ed4944c696e75cd8a8a5f631b81c107579905a39b0f9046b8c66fd", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_completed", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-before-v2/captures/case-recordinjectedtypingandcommittedquerynavigation.json", + "original_sha256": "a54d00ef2be767225108a7a58c8d1095196abf852c4a552ea31ee1abb1a740cc", + "public": "docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordinjectedtypingandcommittedquerynavigation.json", + "public_sha256": "e8533dfefc78d85f6d1e23fabb3ae54c297e819d8bca12518041cc31b5f206f9", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-before-v2/captures/case-recordlargedrafttextandannotationsafterrecreation.json", + "original_sha256": "c08a76b19560e95fa5117e23e288e6aa145144ffbc8a36d9474e477142203bf4", + "public": "docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordlargedrafttextandannotationsafterrecreation.json", + "public_sha256": "3e63a2888b6131f819fd9ef615342dba22b69e2fa9bf4948a81eda31815fb638", + "keys": [ + "api", + "body_annotated_exact", + "body_plain_exact", + "case", + "default_ime", + "diagnostic_completed", + "diagnostic_only", + "emoji_preferences_unchanged", + "expected_body_length", + "expected_body_sha256", + "font_scale", + "observations", + "palette_preferences_restored", + "scope", + "title_annotated_exact", + "title_plain_exact" + ] + }, + { + "original": "artifacts/native-input/legacy-before-v2/captures/case-recordsameturnlauncheractivationtextandannotations.json", + "original_sha256": "5adefdf43f637264b88612f7b789d408cad3c838b9b995951cff8f412faeca64", + "public": "docs/validation/native-input/cohorts/legacy-before-v2/cases/case-recordsameturnlauncheractivationtextandannotations.json", + "public_sha256": "9d28beb6c6636812fd3826946224c6ef067bb5b2905187f5da39e8cc3362c4d6", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "expected_note_id", + "font_scale", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-contracts-v1/record.json", + "original_sha256": "454b9d7dbee0b11151072a231ac3fede01b5e0b6a286b0894fcb5c1615b23bed", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v1/record.json", + "public_sha256": "a79ecc8a5629bdf4d8117f418f41578014e3c043e0be40972a6a78afdf7f8d6e", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "initialization_error", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/legacy-contracts-v1/captures/case-activemultilingualcompositionkeepsresultselection.json", + "original_sha256": "190cf5bea6a528f4ff5f787c0d5349e6d03230e2538954abb3fdacc8d144a1ee", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-activemultilingualcompositionkeepsresultselection.json", + "public_sha256": "2b8ef1f584881ef2d759618671070209644428787778ca605915040067674eda", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-contracts-v1/captures/case-committedcallerselectionsurvivesidlenativeroutes.json", + "original_sha256": "62fe9b45de917e400a95be402e526fc7edfaf464159402f61f0fb21f994ae027", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedcallerselectionsurvivesidlenativeroutes.json", + "public_sha256": "bd770fb86939f064e5bd869dc6d9e1292a53e0c960f786b202e8bbfd7ce58146", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-contracts-v1/captures/case-committedemojinavigationandcaretareexact.json", + "original_sha256": "45ed1a3202e63db93f702c0460551920cf5a0a3899c5806aad4f4b6e5b83bde7", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedemojinavigationandcaretareexact.json", + "public_sha256": "1c70523b96f1a54a5a7f3a0f09b030bb457e923969003e7e145c1a6084cf544b", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-contracts-v1/captures/case-committedsameturnlauncheractivationusescurrentnote.json", + "original_sha256": "9912688457cda5b811b095fab0bb3391eac2e4930dddbb7064783a8305e9839a", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-committedsameturnlauncheractivationusescurrentnote.json", + "public_sha256": "4f180e417ebfa413d1fa8cd4ddfe82e5c35226d8bfde329ebd719563445ad322", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-contracts-v1/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "d365f8892a6687e94ca1b17d9efcee4d001661df6f33543218ab3654e3cda8a6", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "37c51eea0a8044db115958ad0f7698db63265ede88addc19d678be39bf5925bb", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/legacy-contracts-v1/captures/case-largedraftrestoresexactcharactersafterrecreation.json", + "original_sha256": "1ba1acb58b52b100699a3f332c7951a3c9f695e7bf1800a7d3216a4d5203ac39", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v1/cases/case-largedraftrestoresexactcharactersafterrecreation.json", + "public_sha256": "3fb49cca5378bce8b7e8a85fbf6b44d2bae5a6812cfcc6508e0d7618b93e12e3", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "expected_body_length", + "expected_body_sha256", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-contracts-v2/record.json", + "original_sha256": "daddbbc32e2df1bceb0f350cde72a3432e41947b37e1e2babf11c24d3c0af0fe", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v2/record.json", + "public_sha256": "f8e89735d515a8a6c7cd613d1fe3e9333de13c076a92b1d00525b99fbbb19c72", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "initialization_error", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/legacy-contracts-v2/captures/case-activemultilingualcompositionkeepsresultselection.json", + "original_sha256": "a6635ac6f3525c001db0ec6ae8487214a8cca2fcfe0fbf15ec5a1ceba22fd612", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-activemultilingualcompositionkeepsresultselection.json", + "public_sha256": "35b8a8d2cdb8533624423de4e75e1343d063a266693be07c1a17216da956ccb5", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-contracts-v2/captures/case-committedcallerselectionsurvivesidlenativeroutes.json", + "original_sha256": "8bea3e573c61ff795493ce3e0ddf757b8b25ad005bc86bb1a1952f896675d3e4", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-committedcallerselectionsurvivesidlenativeroutes.json", + "public_sha256": "9cab543dbd64cd1f08f51f03b917830032176373a939ccbf5a5f779d77afa700", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-contracts-v2/captures/case-committedsameturnlauncheractivationusescurrentnote.json", + "original_sha256": "bc9b675f411a919d4f9ba342e43e30d713c9c13ab82300a24de12868c7086e99", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-committedsameturnlauncheractivationusescurrentnote.json", + "public_sha256": "7c8b5a249b55cbe9741382850260bbaeca5132039aeda7c8228506e9f5b5ddb6", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-contracts-v2/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "e96589ef1d2436adb599ff247175f8746857ba7a41a9590c263a6e242778d97d", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "6cdfb6b4dc828885ecdb1e3d03eebd5b179fb7b6d9c5896589bfd22a1e340584", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-contracts-v2/captures/case-largedraftrestoresexactcharactersafterrecreation.json", + "original_sha256": "df660a9c81231c03bc057717a3fa5c4c1a4117cb37aa81ea58dd690b575e0d38", + "public": "docs/validation/native-input/cohorts/legacy-contracts-v2/cases/case-largedraftrestoresexactcharactersafterrecreation.json", + "public_sha256": "9668c4e299f6646ca5a3b189e24f8843033e4b93a25c916599ea64348818efc2", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "expected_body_length", + "expected_body_sha256", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-200-v4/record.json", + "original_sha256": "e61d706170581de4c7777e88031ffab2b37b6cb9921072c2630b7d2f4d4df4ee", + "public": "docs/validation/native-input/cohorts/legacy-owned-200-v4/record.json", + "public_sha256": "9a66bb2b1b96ee0e6264487b851351cdf4fc9189278167c557b3e48721188efb", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "ime_restoration_scope", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-200-v4/captures/case-activemultilingualcompositionkeepsresultselection.json", + "original_sha256": "0df30471e64aff419adf4cba8c9e6d98fc1434725ac130bf756b5d20a8c65897", + "public": "docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-activemultilingualcompositionkeepsresultselection.json", + "public_sha256": "2bbc81d1dd3dec8407bd595b0ec6368007f969b35efd44a6707c8102897e7999", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-200-v4/captures/case-committedcallerselectionsurvivesidlenativeroutes.json", + "original_sha256": "5dcb92c949254da63786755a922e50d2e9e7df37fafd51d57c1a0fb9cbca559f", + "public": "docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json", + "public_sha256": "77117f9e5ec2f28cb4c880204ab810fc42cafef7abfdf707000c8f1859b7db99", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-200-v4/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "c8835e815f93290a6b6f4bd94166fe38389e4f9c224f692fdfb78f67a6063a3a", + "public": "docs/validation/native-input/cohorts/legacy-owned-200-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "36f94eaad2d58eef9626578d9d0e47aa11c57fec9539eebaa14ec54d3e92a111", + "keys": [ + "api", + "assertion_witness", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-200-v5/record.json", + "original_sha256": "6239cac611fb99d150be7fd0196ba9ec760be8b59f49e17d69ba233e13754872", + "public": "docs/validation/native-input/cohorts/legacy-owned-200-v5/record.json", + "public_sha256": "b9a2534e6e7fe4b0f5e63224feb3632969d6367758a9e9b740c1aa1cc4ba432b", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "ime_restoration_scope", + "ime_restore_observations", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-200-v5/captures/case-activemultilingualcompositionkeepsresultselection.json", + "original_sha256": "b25420dbefbbadc73664cc331c63ba614ea8aa56c67de21c145e1f7f6c89b0c6", + "public": "docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json", + "public_sha256": "f8808ee95045adc6a4b9c47783a52fca71fb11a129e69d1549d75654dda14a25", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-200-v5/captures/case-committedcallerselectionsurvivesidlenativeroutes.json", + "original_sha256": "67b93a0a1e7f215b5b5848db08ccb74a05352f77d3998ca1d782cb4ee1efe768", + "public": "docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json", + "public_sha256": "139796cc26a045cea45be423b902488bb5dda91a74385f41aa541e74d40a8b0b", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-200-v5/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "c12afaaa46875b593b658ca2cb17b399de93205d04de35d952d4e10efe55be56", + "public": "docs/validation/native-input/cohorts/legacy-owned-200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "de70d7da0850dc12ad04eb77e7ac048f28f1d0459856d2a9ec8e039da7309314", + "keys": [ + "api", + "assertion_witness", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-full-v4/record.json", + "original_sha256": "66e16035f108c3f4e2a12531d7984f2a8a471825f6884cfa1f0ea5ecf132dd72", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v4/record.json", + "public_sha256": "7f67c2cf2473f23947500a754feda0217cbe54c9e6cd8d133df6d40c43021b03", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "ime_restoration_scope", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-full-v4/captures/case-activemultilingualcompositionkeepsresultselection.json", + "original_sha256": "34d1ac35be274e52728128b36f17febdae6d6a8325d24537c45f2b13c6f9a3b8", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-activemultilingualcompositionkeepsresultselection.json", + "public_sha256": "35bc11e3a79110c6cea1516d1d2c64f4f69248d898c21f7f20c20ad88c7394a1", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-full-v4/captures/case-committedcallerselectionsurvivesidlenativeroutes.json", + "original_sha256": "1ccf0e62f750187f68a9dfa88b8e444b5b2e109af680c1c884c468db0613c772", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json", + "public_sha256": "5ee2a27b859f593d99f7fd4899364446741717af5260c9308705a6ff3bf4a0b4", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-full-v4/captures/case-committedemojinavigationandcaretareexact.json", + "original_sha256": "04257222995b3214c8da7b67269ea49364eb5fa413ad6353c5d7f31887c7437e", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedemojinavigationandcaretareexact.json", + "public_sha256": "41a147e2106cebf1170714bf5773b1b221cfd4d618dd44d3a8c1da741a87eeb6", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-full-v4/captures/case-committedsameturnlauncheractivationusescurrentnote.json", + "original_sha256": "7dabfb257d9bff4423bccbc066f49e4112032343fd09dc281b509b847926e18d", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-committedsameturnlauncheractivationusescurrentnote.json", + "public_sha256": "05ff21fdf701b8a896ad2f16bc49235184c3d4dafc70227d5a6eb2e3648cb515", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-full-v4/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "3283c9f8bbe62d5b83baca508a86c7b7f0578a26733861294cf88188b02d9412", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "01068da3fc8b2a97082c0a52b5d7c82a22a95355462e50d12968ad5a8b3caa0c", + "keys": [ + "api", + "assertion_witness", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-full-v4/captures/case-largedraftrestoresexactcharactersafterrecreation.json", + "original_sha256": "3a1ec9c2b9daabdc87edb016c40cdbffdc0b17a6fcd6ff42ab55a704b5d9c364", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v4/cases/case-largedraftrestoresexactcharactersafterrecreation.json", + "public_sha256": "001e066d281197364af87cb75876ee5e50a4c3bf50469af487b3061ac8175a11", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "expected_body_length", + "expected_body_sha256", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/record.json", + "original_sha256": "b9c3dcb25f1cc239c26c1d3020a3471dbc48ac711202e3c9a82652f52149dded", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v5/record.json", + "public_sha256": "b04031a7ad4a4c94300d047a613f4a1e7facfc7a4dd42126dbd433af72a98d3c", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "ime_restoration_scope", + "ime_restore_observations", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/case-activemultilingualcompositionkeepsresultselection.json", + "original_sha256": "90d8f717c49ba48c82e0d6f4ebae2cc8c3fc48756fb2ed77b5f8e589305eddab", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-activemultilingualcompositionkeepsresultselection.json", + "public_sha256": "1c7417c2aba2f32a986b310d05aa080e6325b1965b5fdf248115a76afe261260", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/case-committedcallerselectionsurvivesidlenativeroutes.json", + "original_sha256": "c9d0d0cc9170ed8df1fccfaa007596342a3d0260ab928422d73fd4bedcad6655", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json", + "public_sha256": "ca07f1a6fb793ef1a1e7947666c8d684abd9d7bc0730d4782088542aad49af4b", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/case-committedemojinavigationandcaretareexact.json", + "original_sha256": "9708bbc9a867e507dc3fc6decc41a3203a6dde7f21d15c0474ac5c727ecb7b36", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedemojinavigationandcaretareexact.json", + "public_sha256": "ebd9ea7087fe3d54fce129c0c7bd44dfae46e0bbe4bb9edb3cad695705dc97b3", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/case-committedsameturnlauncheractivationusescurrentnote.json", + "original_sha256": "cb544250539d8c9710a4d5dd6ab2a7ff27eea6d0c19d99d656816a6e64c7848d", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-committedsameturnlauncheractivationusescurrentnote.json", + "public_sha256": "7af73f8bda7df1452df42a7d02815122b7c94ded0678fc034d421ba7b356ef6e", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "e7e2356e34796bb775287c781c2c1c8996f724aa2a3056a64b21af8c33668db8", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "bbdbf1d7a22282fbcc5530ebcb36aa5c37d78e5bb91f80af160781ff9dc72aab", + "keys": [ + "api", + "assertion_witness", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-full-v5/captures/case-largedraftrestoresexactcharactersafterrecreation.json", + "original_sha256": "5f0872745d24387d3c1acff9624ecfc0cd10c1574959bf3a3f1c6e886e513940", + "public": "docs/validation/native-input/cohorts/legacy-owned-full-v5/cases/case-largedraftrestoresexactcharactersafterrecreation.json", + "public_sha256": "c6c3ac64ce36d1eead58879cc6c85000a378b70d74853a13c730a88b603c8e94", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "expected_body_length", + "expected_body_sha256", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-probe-v3/record.json", + "original_sha256": "9a4686b0aa18f14e1b9b53dac06dfe2b07af75e6bea74cff807886f1c6037a34", + "public": "docs/validation/native-input/cohorts/legacy-owned-probe-v3/record.json", + "public_sha256": "b3f9150999a0dc03913e5e288eb6b1093affd7b98aa1646896df75bbe7620a60", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/legacy-owned-probe-v3/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "00322d0177e4c10035a1d174b3d5b114691414c3c9aa054aed39b6494d017e14", + "public": "docs/validation/native-input/cohorts/legacy-owned-probe-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "a695845713c360fa82b611fb4dd6c1be68912d8427185b0d3b3cdef30da4ecb7", + "keys": [ + "api", + "assertion_witness", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/legacy-same-length-v6/record.json", + "original_sha256": "a3cfcaece01518cc93841aa3bac6055d6a9f155cdfe061839dfccb8a9febc3b8", + "public": "docs/validation/native-input/cohorts/legacy-same-length-v6/record.json", + "public_sha256": "09c0cc9e22a4345f141f63a33ed312fe88acc8b01d66dc40304345efc38191a3", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "ime_restoration_scope", + "ime_restore_observations", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/legacy-same-length-v6/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "e760426cde7aca03b613ef27d79611e8672228dd8eeb0614cc8993db7cada71c", + "public": "docs/validation/native-input/cohorts/legacy-same-length-v6/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "a4ed25ee44b672e3fd1db462f73b7d42fb68115f3a7b1381936a870fbdba1085", + "keys": [ + "api", + "assertion_witness", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/legacy-strict-control-v1/record.json", + "original_sha256": "b2d4ef46da5e26a1cd065917494e14192d8ee6e968adf15b2effd03980cab0da", + "public": "docs/validation/native-input/cohorts/legacy-strict-control-v1/record.json", + "public_sha256": "92490388bd62c734c08e71e141e4936fa9251c2012f91949016240d2a4c33fc0", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "initialization_error", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/legacy-strict-control-v1/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "c07695874b5cce241e04f964dbbb70f993de5410c56dfb8dd7aef999767bf8c6", + "public": "docs/validation/native-input/cohorts/legacy-strict-control-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "ee596d440050952f4c707ec0bd2ab756a40162e919dbb0c53347be07bed30145", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/legacy-strict-control-v2/record.json", + "original_sha256": "597abb5ecbe9f3dec1aeb78dfc35dfd13947f8f745ae25ecf136a43990e9ea00", + "public": "docs/validation/native-input/cohorts/legacy-strict-control-v2/record.json", + "public_sha256": "025a4c5107de83281c79f31afce050dd2c5bafa265958a124b663b373936b4f8", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "ime_restoration_scope", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/legacy-strict-control-v2/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "6e14784e1a26e7cb07ef1680032e947a35ad2f8a75044e3b000923e5b7d2667b", + "public": "docs/validation/native-input/cohorts/legacy-strict-control-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "dbf5daf1485695fa120ef8051d532c6a9e239ec58a940d43ceaf966a10489f9f", + "keys": [ + "api", + "assertion_witness", + "case", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal" + ] + }, + { + "original": "artifacts/native-input/legacy-strict-control-v3/record.json", + "original_sha256": "70e6c505f3d4c15921d41aff3ee96a3354e4218e51948a5558198646d271646b", + "public": "docs/validation/native-input/cohorts/legacy-strict-control-v3/record.json", + "public_sha256": "245f092a17b7ae9096c1300e09a47650537bcff04499fd01b05c6af7a6c73558", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "ime_restoration_scope", + "ime_restore_observations", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/legacy-strict-control-v3/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "6e14784e1a26e7cb07ef1680032e947a35ad2f8a75044e3b000923e5b7d2667b", + "public": "docs/validation/native-input/cohorts/legacy-strict-control-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "dbf5daf1485695fa120ef8051d532c6a9e239ec58a940d43ceaf966a10489f9f", + "keys": [ + "api", + "assertion_witness", + "case", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal" + ] + }, + { + "original": "artifacts/native-input/modern-before-v1/record.json", + "original_sha256": "beaf0be5ac06b968e5e1063cb87cbe631b39b109dfc0f5b328a9177f0b668590", + "public": "docs/validation/native-input/cohorts/modern-before-v1/record.json", + "public_sha256": "9eaae307edbc2bb92344760f5dfe63ca6899be0f22a0aa80b7e51e5ef6e1b67d", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "initialization_error", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "preserved_file_count", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/modern-before-v1/captures/case-recordcallerselectionacrossnativeroutes.json", + "original_sha256": "6f74fc19a1888be46dfe1e3d78fa5a45e786ecdb513e60bd04cbb8d91f0defb3", + "public": "docs/validation/native-input/cohorts/modern-before-v1/cases/case-recordcallerselectionacrossnativeroutes.json", + "public_sha256": "bdbb5ac7931b7fa9e2cbb57c59e981656d881a5b0627e6d40a3889c39fb8d80f", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_completed", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "observations", + "palette_preferences_restored", + "scope", + "selection_setup", + "updates_scope" + ] + }, + { + "original": "artifacts/native-input/modern-before-v1/captures/case-recorddefaultimeandcontrolledcompositionnavigation.json", + "original_sha256": "596a15cc58c245a1164a4dd37a0622f43e9264ada8266a174ceb72e961c718a9", + "public": "docs/validation/native-input/cohorts/modern-before-v1/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json", + "public_sha256": "37e7464176bc804983dd50bf8f4e5ecfb3d480f2cb417a1fc26a6f8c507077cf", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_completed", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-before-v1/captures/case-recordlargedrafttextandannotationsafterrecreation.json", + "original_sha256": "89f4e5bfba3e54499764a2528caafb3018cbd7acd892cdc82a4eca0b80030deb", + "public": "docs/validation/native-input/cohorts/modern-before-v1/cases/case-recordlargedrafttextandannotationsafterrecreation.json", + "public_sha256": "06b19ff27671477cbb8c0f63e8c44f1ef9fba7d62f6e41caf17ab81be52b997d", + "keys": [ + "api", + "body_annotated_exact", + "body_plain_exact", + "case", + "default_ime", + "diagnostic_completed", + "diagnostic_only", + "emoji_preferences_unchanged", + "expected_body_length", + "expected_body_sha256", + "font_scale", + "observations", + "palette_preferences_restored", + "scope", + "title_annotated_exact", + "title_plain_exact" + ] + }, + { + "original": "artifacts/native-input/modern-before-v2/record.json", + "original_sha256": "dcdd865d0801962fab5904693ee02a444ec6ef561691d6a0165ced22999eae59", + "public": "docs/validation/native-input/cohorts/modern-before-v2/record.json", + "public_sha256": "f63938666633e5235c931858b473ba17fb4f948c350d5cfe54bd4b3ccdd40959", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "initialization_error", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "preserved_file_count", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/modern-before-v2/captures/case-recordcallerselectionacrossnativeroutes.json", + "original_sha256": "ad2ddf8ceae751ca4f74cb7849abe4e447d4e5a341d7ee3f082c8a747d801b37", + "public": "docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordcallerselectionacrossnativeroutes.json", + "public_sha256": "dcb4d2078938bd1ca71bdf2f913e4ecbe1e7411d1939f8f69a373cde585211f4", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_completed", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "observations", + "palette_preferences_restored", + "scope", + "selection_setup", + "updates_root_focus_requested_before_return", + "updates_scope" + ] + }, + { + "original": "artifacts/native-input/modern-before-v2/captures/case-recorddefaultimeandcontrolledcompositionnavigation.json", + "original_sha256": "bfe69cc28c48a1d0567c2cd78b4f6dcd4c029df13ddc4b50494ecfd1eb95d66a", + "public": "docs/validation/native-input/cohorts/modern-before-v2/cases/case-recorddefaultimeandcontrolledcompositionnavigation.json", + "public_sha256": "42ff249e79b5d5815d404637bb656781052c1294f18e53bb47755731e13580a9", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_completed", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-before-v2/captures/case-recordinjectedtypingandcommittedquerynavigation.json", + "original_sha256": "2e0528881ee0ce0e14e614150d94cf3448cdbad4950e2176eec71a55c2df3a04", + "public": "docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordinjectedtypingandcommittedquerynavigation.json", + "public_sha256": "427fedc1f372f45d3189c39011380e7a4ca4c43f49874017a91af4d642244027", + "keys": [ + "api", + "case", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-before-v2/captures/case-recordlargedrafttextandannotationsafterrecreation.json", + "original_sha256": "6c3b94a739bbada3f5a75f4fde0b6cea0299ed29a7bf2976165e607d86c2535e", + "public": "docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordlargedrafttextandannotationsafterrecreation.json", + "public_sha256": "7a8cc8b3736d6f5170704e1473e905c04f6eb653e9886e70812bf1070709e878", + "keys": [ + "api", + "body_annotated_exact", + "body_plain_exact", + "case", + "default_ime", + "diagnostic_completed", + "diagnostic_only", + "emoji_preferences_unchanged", + "expected_body_length", + "expected_body_sha256", + "font_scale", + "observations", + "palette_preferences_restored", + "scope", + "title_annotated_exact", + "title_plain_exact" + ] + }, + { + "original": "artifacts/native-input/modern-before-v2/captures/case-recordsameturnlauncheractivationtextandannotations.json", + "original_sha256": "98d1b87079f0a0a8effa1acc683f7a35a36071a93346b28a3cf941852ff2bbcb", + "public": "docs/validation/native-input/cohorts/modern-before-v2/cases/case-recordsameturnlauncheractivationtextandannotations.json", + "public_sha256": "1d82643c2c3dbf1d9e217098b91c93bc1ee05c3c6be56b6131fb548099e1e05e", + "keys": [ + "actual_note_id", + "api", + "case", + "default_ime", + "diagnostic_completed", + "diagnostic_only", + "emoji_preferences_unchanged", + "expected_note_id", + "font_scale", + "observations", + "palette_preferences_restored", + "scope", + "title_annotated_exact", + "title_plain_exact" + ] + }, + { + "original": "artifacts/native-input/modern-contracts-v1/record.json", + "original_sha256": "6b6eb6d246e203adccf9aa24907bf7024fc12530497305ab8f17ff85b39e7ede", + "public": "docs/validation/native-input/cohorts/modern-contracts-v1/record.json", + "public_sha256": "4ee6cbaab6250f250df49ade496106c14dba025664b4a7392f66702c8a12662b", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "initialization_error", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "preserved_file_count", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/modern-contracts-v1/captures/case-activemultilingualcompositionkeepsresultselection.json", + "original_sha256": "5feced3736271ed3ddd7b74d48086e6e1a7759149a5e49edca1123f4b64021fd", + "public": "docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-activemultilingualcompositionkeepsresultselection.json", + "public_sha256": "66a1be5ae09728f12518fbb7b9d4d3c50104084f729aa5c62eaf6a97fa2447ac", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-contracts-v1/captures/case-committedcallerselectionsurvivesidlenativeroutes.json", + "original_sha256": "fe4a1bbc681d978594694a1a7d1de1ad2f2a01f0795af2c168a03fdbce594c44", + "public": "docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedcallerselectionsurvivesidlenativeroutes.json", + "public_sha256": "0483b11ec587da8ded710324b8a51aa0b46bb61c94144e4ba4654b21ecdcb329", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-contracts-v1/captures/case-committedemojinavigationandcaretareexact.json", + "original_sha256": "82bb882e55d74eb8ec5565338295439fe9ff2cf2477b961a537dd429003f6021", + "public": "docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedemojinavigationandcaretareexact.json", + "public_sha256": "ff87084c36f4c50a89d2b6fd0f08b6a135c7d65b69349ae88627586c503157e6", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-contracts-v1/captures/case-committedsameturnlauncheractivationusescurrentnote.json", + "original_sha256": "b151ab6b9522152bc86e7923f1be4dd800df54708044785c260a3811265d3dc3", + "public": "docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-committedsameturnlauncheractivationusescurrentnote.json", + "public_sha256": "e503772c80b15209241be804a976e114f826832ac8dfe4c098a731fcad79708a", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-contracts-v1/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "ab11cb95c4df03d8a83658ed1bb4cc3a4cee5e8cd1bb560e55ff3be69bfb4a8a", + "public": "docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "f2df30c2fccbc925b601262e7ab30affcee15a3705815a117cd6be5ea19b6b42", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/modern-contracts-v1/captures/case-largedraftrestoresexactcharactersafterrecreation.json", + "original_sha256": "c1d6a4945830eb528c1ee67a91a19d703ae10fd495e788a9175f51f96e49e9d0", + "public": "docs/validation/native-input/cohorts/modern-contracts-v1/cases/case-largedraftrestoresexactcharactersafterrecreation.json", + "public_sha256": "fe05ad95904d4eebad0ef269001a2a73c8257d2aae75fb38baf337e7907147c8", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "expected_body_length", + "expected_body_sha256", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-contracts-v2/record.json", + "original_sha256": "19aec78203134d791e86e9a967f662b9c559d79ac43a81eea26e22ee0a26c9d6", + "public": "docs/validation/native-input/cohorts/modern-contracts-v2/record.json", + "public_sha256": "9c7ef01d4118e008a8bf1a090a7580be944a3045190aee36dc4ce8025f7a814b", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "initialization_error", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "preserved_file_count", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/modern-contracts-v2/captures/case-activemultilingualcompositionkeepsresultselection.json", + "original_sha256": "7620ac420a2e7d1d136d256062e24079fbef2c3aded53517c6c9d3e09be39498", + "public": "docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-activemultilingualcompositionkeepsresultselection.json", + "public_sha256": "15dc3e1e665e12db0529911e0b9dd7e72330c318029ca66e325f7143b75838f6", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-contracts-v2/captures/case-committedcallerselectionsurvivesidlenativeroutes.json", + "original_sha256": "72056adb988b6dd6b3ae332e9a20ddb2bf38dead9eaebad78dbfee665a5767bd", + "public": "docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-committedcallerselectionsurvivesidlenativeroutes.json", + "public_sha256": "84ac40592358e0c7230d5bc46fe002cd6e742878a29e4828154cf3be4c6f21ba", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-contracts-v2/captures/case-committedsameturnlauncheractivationusescurrentnote.json", + "original_sha256": "7f40c6fd5f1b174023483915c71d97fa212ce6e01841476de266c66b102af0f6", + "public": "docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-committedsameturnlauncheractivationusescurrentnote.json", + "public_sha256": "7c0bd58f7627f64d67d9bcc284d425723b0c5d2511eef06c3f405ca4033f23aa", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-contracts-v2/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "7f0b4660306aef14eff252940e9dd73ce1991d1b317dfcff9394cf2d3825db68", + "public": "docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "4bf7e77e33b8f342ac2f8333277c251d67c51f15d314820adfa2cae5bd0f83dd", + "keys": [ + "api", + "assertion_witness", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/modern-contracts-v2/captures/case-largedraftrestoresexactcharactersafterrecreation.json", + "original_sha256": "bbc9ff6319ec832760064aab0f23cb0c9827a83014f2a68e7641dc96b87deb61", + "public": "docs/validation/native-input/cohorts/modern-contracts-v2/cases/case-largedraftrestoresexactcharactersafterrecreation.json", + "public_sha256": "ba2c72a6236a0a89c4ed9050674200f466f6dd4814a2ad8504dafe273714d7ff", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "expected_body_length", + "expected_body_sha256", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-full-v4/record.json", + "original_sha256": "eeefdfa0c706fb3eb29147e1a47709d410f6bbb076d2cee5ce3d8c41d6153e7b", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v4/record.json", + "public_sha256": "c8f08172e4b63f8ca4fbe089bcf048ce87910f8a0f844e17b2739bd72b15cafc", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "ime_restoration_scope", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "preserved_file_count", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/modern-owned-full-v4/captures/case-activemultilingualcompositionkeepsresultselection.json", + "original_sha256": "be862baabc8679c538599479f967c983ce92c84872100407942d503569e52878", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-activemultilingualcompositionkeepsresultselection.json", + "public_sha256": "a6e22d4f6f53389e7c55c398361044a903659c61bed32a4c6b4bf1c21aa0ee70", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-full-v4/captures/case-committedcallerselectionsurvivesidlenativeroutes.json", + "original_sha256": "80fae1dc1fca1a6e0cad251223935dadfdba4c1b9b3d607e6953d89c01da7790", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedcallerselectionsurvivesidlenativeroutes.json", + "public_sha256": "789dcccf0f3fb5898e36734d43a6f886d688595a014d5c3edeb58032f16bd83c", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-full-v4/captures/case-committedemojinavigationandcaretareexact.json", + "original_sha256": "fae04b6afea1fe19fe592b27ceaa52ccb5c2c71f48fc1eabaae80a77d0ab6c38", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedemojinavigationandcaretareexact.json", + "public_sha256": "0d1da0ae4af928e725fa86775f11fd43355f622a68edd6192efd34ad70d107d0", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-full-v4/captures/case-committedsameturnlauncheractivationusescurrentnote.json", + "original_sha256": "8ea15bb21f854bc7da47f3d7194f3ddb23c862c7ff2a12fabafcfb2108a2dfa5", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-committedsameturnlauncheractivationusescurrentnote.json", + "public_sha256": "1fe427c46aa0c2826ab53f46ec2e5156b85bc443295fea266f31ba6572e09ad8", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-full-v4/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "aae445c4db6286cc424b2597246516af2e63f358377cd19bd8279ac0b08df06c", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "5253be9dc881b270a06fc0e3ef6369086e247c25d6e2ba8c6eb84538e1f1e598", + "keys": [ + "api", + "assertion_witness", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/modern-owned-full-v4/captures/case-largedraftrestoresexactcharactersafterrecreation.json", + "original_sha256": "c6a0243c91738995582897752ebe433ba6bb66a619fd2cfafc4dddf0ef3dc9f7", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v4/cases/case-largedraftrestoresexactcharactersafterrecreation.json", + "public_sha256": "abb007b9a0bd64a109667deb2af0934e28b2251c0e64b5b37cc9800368e64592", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "expected_body_length", + "expected_body_sha256", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-full-v5/record.json", + "original_sha256": "b7626583b423ca5629b6226d066009c685e9946fa5d4bb35a9af9ff8cad1d44d", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v5/record.json", + "public_sha256": "cc99a4b0a39b392dcd0051a7f2e4f4d36fb978b289bba069b1101e935eee75d3", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "ime_restoration_scope", + "ime_restore_observations", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "preserved_file_count", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/modern-owned-full-v5/captures/case-activemultilingualcompositionkeepsresultselection.json", + "original_sha256": "e7a117ff17652aeb1a72289d591cc710eb30a05ac5e56dc20f8df0839c6e5332", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-activemultilingualcompositionkeepsresultselection.json", + "public_sha256": "0114904b38b0a1b5cc710bfe58672750752354292ffd421fb28c28253345abd6", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-full-v5/captures/case-committedcallerselectionsurvivesidlenativeroutes.json", + "original_sha256": "b9749fcbfb1afadb9d4f68f9649adce7e7d76cdf71f160bd0f5cdb9f4051298a", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json", + "public_sha256": "41c43eb796412d1a418f1eccaede00bed902daa4c00feaef7a45a844acd734ac", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-full-v5/captures/case-committedemojinavigationandcaretareexact.json", + "original_sha256": "6434e7b1b8617d2708d1b9133143ad96d251a9f758fdfd74463ab8a3bc9fed76", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedemojinavigationandcaretareexact.json", + "public_sha256": "1c468214735f39e2ba619e2fa904ed0fbe43b9b2ae01cf176d34ff4c4ffcaaf8", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-full-v5/captures/case-committedsameturnlauncheractivationusescurrentnote.json", + "original_sha256": "b913069361653ed55c9bc3ad46fe32c6adaf53d4ac39c28098531c3c9b566b89", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-committedsameturnlauncheractivationusescurrentnote.json", + "public_sha256": "bd11e05fe06e46504be46a6c414b28fcf7b8a0077522ed518db662666f81233a", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-full-v5/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "c3b9097904aef3b73db70bdc00cca9b0ed87d9b0a87d475d211ccafb0fc21024", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "9f7e5c169814d9604a0e0ef78cab37e18bcd1e5a1961d8247ee6bf4c44bdaac5", + "keys": [ + "api", + "assertion_witness", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/modern-owned-full-v5/captures/case-largedraftrestoresexactcharactersafterrecreation.json", + "original_sha256": "41a382929afa76f93ce47de96b20556be69a28b59b8980780c62d7dcc8d5524f", + "public": "docs/validation/native-input/cohorts/modern-owned-full-v5/cases/case-largedraftrestoresexactcharactersafterrecreation.json", + "public_sha256": "c590316f650aafbb7ee90f59622f86a858c8dd35653fabe378855649c5506686", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "expected_body_length", + "expected_body_sha256", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-landscape200-v5/record.json", + "original_sha256": "0b1651f7778a88881dda40827b621b2cb8a34203eb59238a62a4ff2e6339fe88", + "public": "docs/validation/native-input/cohorts/modern-owned-landscape200-v5/record.json", + "public_sha256": "c973fca8239d52ca201cbf216b4e5e4ab0b9efd5c67ab08ee3f6c88aa43696b5", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "ime_restoration_scope", + "ime_restore_observations", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "preserved_file_count", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/modern-owned-landscape200-v5/captures/case-activemultilingualcompositionkeepsresultselection.json", + "original_sha256": "b7bea71a6cfd4d6e9869f3686a23ae7533e7bfb275b082e1e7d7fc97e40bea1e", + "public": "docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json", + "public_sha256": "eafcdcca6ec3e7dc4bc44ce3b63a00cd1bef22b1ca97ba65e488ad39a8efbd37", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-landscape200-v5/captures/case-committedcallerselectionsurvivesidlenativeroutes.json", + "original_sha256": "64e035a3c15ce1808eee11e101b6ac59e2d2c930af3be8f0343b96666909688c", + "public": "docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json", + "public_sha256": "91aa0e20de5a25d812223ca8c142e998bc5867cdce6c10289eca237813be9785", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-landscape200-v5/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "09af8daee9cc5dd2804fa83a9149eb3f1382e8026ca54a9ec12ddb81ebd1f2c5", + "public": "docs/validation/native-input/cohorts/modern-owned-landscape200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "1e4fede6c14ef8e52cd40abe6ee982cd36739df419e5cbfc0e6ec1c636668ddf", + "keys": [ + "api", + "assertion_witness", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/modern-owned-phone200-v5/record.json", + "original_sha256": "75e63ae3de2180540c7bc49ab9bf4d7a715719d10149c62e269ceb068f65777b", + "public": "docs/validation/native-input/cohorts/modern-owned-phone200-v5/record.json", + "public_sha256": "af4c5b519814035a3c53578901ddbc4d349e3d1a64ebd6c1583b60f703e7f1ba", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "ime_restoration_scope", + "ime_restore_observations", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "preserved_file_count", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/modern-owned-phone200-v5/captures/case-activemultilingualcompositionkeepsresultselection.json", + "original_sha256": "fb1f74f45d64e7cabe51904f3229c9506209f6af5e0b67204d567fb631ac1427", + "public": "docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-activemultilingualcompositionkeepsresultselection.json", + "public_sha256": "c977a2533d0d1d376e028b0adf4a9ac1e18e476a4483ed0925eb22500053659a", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-phone200-v5/captures/case-committedcallerselectionsurvivesidlenativeroutes.json", + "original_sha256": "7a7f2be8667121f3a0785975322b74b8a485602e01c790d5189a277fe6d68956", + "public": "docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-committedcallerselectionsurvivesidlenativeroutes.json", + "public_sha256": "f209da4bc959a882951a2a3e1d0fc89cba12cf67d8c765fdac5019da5f5b8361", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope" + ] + }, + { + "original": "artifacts/native-input/modern-owned-phone200-v5/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "a9516144b074ff5e3a1dc3d0d23794e790bf20db7bc1df7d0ffe8f475df36f87", + "public": "docs/validation/native-input/cohorts/modern-owned-phone200-v5/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "63a8c99571f2c9bcaab42c2c5456e31be1af89404cddfaba6a06c6cdeb874ea9", + "keys": [ + "api", + "assertion_witness", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/modern-owned-probe-v3/record.json", + "original_sha256": "90aae50043ca3388aada5b7c93f9ad33b828fe6c55ee40db5a7f7035cbec6eed", + "public": "docs/validation/native-input/cohorts/modern-owned-probe-v3/record.json", + "public_sha256": "263eff8396e9ca4b00314c49cd04f1d639d9aaa0b1bee3cda5c1e385e490e180", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "preserved_file_count", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/modern-owned-probe-v3/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "05e568499c54532f4f48344778c16a1dbec70f00a92388308f8b6abaa48278fb", + "public": "docs/validation/native-input/cohorts/modern-owned-probe-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "5e803512db3e49a198276af54126a085a6f50c1a4bf798bfc7b133b4d3159482", + "keys": [ + "api", + "assertion_witness", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/modern-same-length-v6/record.json", + "original_sha256": "944b6a42f59b23adad036ac5a3818f25c8669cd01a068d9c403df5b350ee68e4", + "public": "docs/validation/native-input/cohorts/modern-same-length-v6/record.json", + "public_sha256": "e44e7d00bd4d7d4465c4e28262883987e32619e7b881856c0ae55efd33106b58", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "ime_restoration_scope", + "ime_restore_observations", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "preserved_file_count", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/modern-same-length-v6/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "d97dd268b10ed0d46c8d3d3aaf59b80ef31de184759b83748a55025eaf29b112", + "public": "docs/validation/native-input/cohorts/modern-same-length-v6/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "3423fe3a26f707da612836b429d9528620de5f9f8f3184a49bbf3c336974a651", + "keys": [ + "api", + "assertion_witness", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/modern-strict-control-v1/record.json", + "original_sha256": "d3ec83fb1bbb5da00e6a18899e0ea2469c070db95b809dd916091b14f9db7e1d", + "public": "docs/validation/native-input/cohorts/modern-strict-control-v1/record.json", + "public_sha256": "d56214ef2fb2781698ad436a06b7bfa0dadae55f1f16c34d05116302dc986090", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "initialization_error", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "preserved_file_count", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/modern-strict-control-v1/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "37f580a1beda7134d984c079f19d96042fdb861b41e27449d4f57274f95876ad", + "public": "docs/validation/native-input/cohorts/modern-strict-control-v1/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "b08ad0d64003ff4d1c5a064f7c28b11bedf5ca7d4c17041a3b74ca498c939c37", + "keys": [ + "api", + "case", + "contract_completed", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal", + "wrong_content_rejected" + ] + }, + { + "original": "artifacts/native-input/modern-strict-control-v2/record.json", + "original_sha256": "5b54506609ab6cf4d649b0e4ab777f97dc44a4d3a378beb13b769af9d74c80bd", + "public": "docs/validation/native-input/cohorts/modern-strict-control-v2/record.json", + "public_sha256": "6d960e9a7184e6beabcf507105ef949e787ec757f844cdc80721b8639a955da5", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "ime_restoration_scope", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/modern-strict-control-v2/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "7a6c5e74b9c84dd5d1ecc2de70c5d86fe3c5c88e22332746de88350fa91e5f94", + "public": "docs/validation/native-input/cohorts/modern-strict-control-v2/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "f3912dad0723d41758a25c31cf0e3a3dd24b7c41d5ccccd0c7bf9e246abc8cce", + "keys": [ + "api", + "assertion_witness", + "case", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal" + ] + }, + { + "original": "artifacts/native-input/modern-strict-control-v3/record.json", + "original_sha256": "325edd31aee9bdf56d5585707c0c5dfe381d0e04398637a45561d11af5e82a20", + "public": "docs/validation/native-input/cohorts/modern-strict-control-v3/record.json", + "public_sha256": "8e7b2706cebdb4fd0da94ad7fd1dc61a0810a07cb3926d9474d1a1fe77b95d83", + "keys": [ + "api", + "apk_sha256", + "cleanup", + "completed", + "expected_negative", + "failures", + "fixture_sha256", + "font_scale", + "ime_restoration_scope", + "ime_restore_observations", + "initialization_error", + "input_mode", + "instrumentation_exit_code", + "layout", + "methods", + "native_expected_outcome", + "original_font_scale", + "original_geometry", + "passes", + "preserved_file_count", + "provider_before", + "runner_sha256", + "suite", + "test_apk_sha256" + ] + }, + { + "original": "artifacts/native-input/modern-strict-control-v3/captures/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "original_sha256": "7a6c5e74b9c84dd5d1ecc2de70c5d86fe3c5c88e22332746de88350fa91e5f94", + "public": "docs/validation/native-input/cohorts/modern-strict-control-v3/cases/case-exactcontentassertionacceptscompositionandrejectschangedcharacters.json", + "public_sha256": "f3912dad0723d41758a25c31cf0e3a3dd24b7c41d5ccccd0c7bf9e246abc8cce", + "keys": [ + "api", + "assertion_witness", + "case", + "default_ime", + "diagnostic_only", + "emoji_preferences_unchanged", + "font_scale", + "input_setup", + "observations", + "palette_preferences_restored", + "scope", + "strict_annotation_equal" + ] + } +] diff --git a/docs/validation/native-input/strict-calibration-v1.json b/docs/validation/native-input/strict-calibration-v1.json new file mode 100644 index 00000000..91298f80 --- /dev/null +++ b/docs/validation/native-input/strict-calibration-v1.json @@ -0,0 +1,20 @@ +{ + "completed": false, + "classification": "Insensitive protocol: both old strict controls passed after composition expired during screenshot capture; zero intended-negative credit", + "rows": [ + { + "cohort": "legacy-strict-control-v1", + "passes": 1, + "failures": 0, + "strict_annotation_equal_at_late_assertion": true, + "restoration_checks": 10 + }, + { + "cohort": "modern-strict-control-v1", + "passes": 1, + "failures": 0, + "strict_annotation_equal_at_late_assertion": true, + "restoration_checks": 15 + } + ] +} diff --git a/scripts/test-webview-engine.py b/scripts/test-webview-engine.py index 38445a22..217b0c95 100644 --- a/scripts/test-webview-engine.py +++ b/scripts/test-webview-engine.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Owned API26 rejection or API36 execution probes; retain recovery ownership on any restoration failure.""" +"""Owned API26/API36 engine or native-input probes; retain ownership on restoration failure.""" from pathlib import Path, PurePosixPath import argparse import hashlib @@ -27,6 +27,21 @@ 'closingBeforePreflightFinishesRejectsLatePublication', 'bridgeCannotPublishOrReadHostApisBeforeApproval'], } +INPUT_CASES = ['recordDefaultImeAndControlledCompositionNavigation', + 'recordCallerSelectionAcrossNativeRoutes', + 'recordLargeDraftTextAndAnnotationsAfterRecreation', + 'recordSameTurnLauncherActivationTextAndAnnotations', + 'recordInjectedTypingAndCommittedQueryNavigation', + 'exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters', + 'committedEmojiNavigationAndCaretAreExact', + 'activeMultilingualCompositionKeepsResultSelection', + 'committedCallerSelectionSurvivesIdleNativeRoutes', + 'committedSameTurnLauncherActivationUsesCurrentNote', + 'largeDraftRestoresExactCharactersAfterRecreation'] +CONTRACT_CASES = INPUT_CASES[5:] +OWNED_IME = TEST + '/dev.tinycast.android.NativeInputTestIme' +IME_SETTING_KEYS = ('default_input_method', 'enabled_input_methods', 'selected_input_method_subtype', + 'input_methods_subtype_history') def require(value, message): @@ -84,17 +99,25 @@ def main(): p.add_argument('--apk', type=Path, required=True) p.add_argument('--test-apk', type=Path, required=True) p.add_argument('--output', type=Path, required=True) - p.add_argument('--cases', required=True, help='Comma-separated exact WebViewRecoveryDeviceTest methods') + p.add_argument('--cases', required=True, help='Comma-separated allowlisted methods from the selected suite') + p.add_argument('--suite', choices=['engine', 'native-input'], default='engine', + help='Native-input reuses the same emulator ownership/restoration protocol without executing an extension') + p.add_argument('--input-mode', choices=['system', 'owned'], default='system', + help='Controlled contracts require the silent test IME; system-IME diagnostics retain the current keyboard') p.add_argument('--font-scale', type=float, choices=[1, 2], default=1) p.add_argument('--layout', choices=['tablet', 'phone', 'landscape'], default='phone') p.add_argument('--expected-negative', action='store_true', help='Only the missing recovery assertion on the old app') a = p.parse_args() legacy = a.avd == 'Droidcast_WebView_API26_27caf3' + native_input = a.suite == 'native-input' + suite_class = 'dev.tinycast.android.NativeInputCompatibilityDeviceTest' if native_input else CLASS require(a.serial.startswith('emulator-') and a.avd in ('Droidcast_WebView_API26_27caf3', 'Tinycast_Tablet_API_36'), 'Use an explicitly owned AVD') methods = a.cases.split(',') require(len(methods) == len(set(methods)) and 1 <= len(methods) <= 7 and all( - name in CASES['shared'] + CASES['legacy' if legacy else 'modern'] for name in methods), 'Unsupported native cases') - require(not a.expected_negative or legacy and methods == [CASES['legacy'][0]], 'Negative control is limited to the old missing-recovery assertion') + name in (INPUT_CASES if native_input else CASES['shared'] + CASES['legacy' if legacy else 'modern']) for name in methods), 'Unsupported native cases') + require(not a.expected_negative or not native_input and legacy and methods == [CASES['legacy'][0]], 'Negative control is limited to the old missing-recovery assertion') + require(a.input_mode != 'owned' or native_input and all(name in CONTRACT_CASES for name in methods), 'Owned IME is limited to controlled native-input contracts') + require(not native_input or not any(name in CONTRACT_CASES for name in methods) or a.input_mode == 'owned', 'Controlled contracts require --input-mode owned') require(not legacy or a.layout == 'phone', 'Keep the actual API26 geometry unchanged') require(a.apk.is_file() and a.test_apk.is_file(), 'Both frozen APKs are required') sdk = os.environ.get('ANDROID_HOME') or next(x.removeprefix('sdk.dir=') for x in Path('local.properties').read_text().splitlines() if x.startswith('sdk.dir=')) @@ -106,6 +129,14 @@ def raw(*args, data=None, timeout=60): def text(*args): return raw(*args).decode().strip() + def read_input_method_settings(): + # One ADB round trip observes this settings group. Four separate remote + # sessions could exhaust the restoration deadline before confirmation. + values = raw('shell', 'for key in ' + ' '.join(IME_SETTING_KEYS) + + '; do settings get secure "$key"; done', timeout=10).decode().splitlines() + require(len(values) == len(IME_SETTING_KEYS), 'Invalid grouped input method settings response') + return dict(zip(IME_SETTING_KEYS, values)) + def absent(path): # API26 run-as cannot exec toybox's `test` symlink. The shell builtin # preserves silent 0/1 semantics without treating transport errors as absence. @@ -145,15 +176,22 @@ def restore_font(wanted): size = text('shell', 'wm', 'size'); density = text('shell', 'wm', 'density') require('Override' not in size + density, 'An existing geometry override has an owner') font = text('shell', 'settings', 'get', 'system', 'font_scale') - nonce = uuid.uuid4().hex; id = 'webview-engine-' + nonce - lease = 'files/webview-compatibility-lease'; evidence = 'files/webview-compatibility-evidence' + ime_settings = read_input_method_settings() if a.input_mode == 'owned' else None + if ime_settings: + require(re.fullmatch(r'[A-Za-z0-9_.]+/[A-Za-z0-9_.$]+', ime_settings['default_input_method']), 'A restorable original input method is required') + require(not any(OWNED_IME in value for value in ime_settings.values()), 'An existing owned IME activation/history has a recovery owner') + nonce = uuid.uuid4().hex; id = ('native-input-' if native_input else 'webview-engine-') + nonce + lease = 'files/native-input-lease' if native_input else 'files/webview-compatibility-lease' + evidence = 'files/native-input-evidence' if native_input else 'files/webview-compatibility-evidence' root = 'files/extensions/' + id - owner = {'kind': 'webview-compatibility-v1', 'nonce': nonce, 'extension_id': id, 'fresh_disposable_avd': legacy} + owner = {'kind': 'native-input-v1' if native_input else 'webview-compatibility-v1', 'nonce': nonce, 'extension_id': id, 'fresh_disposable_avd': legacy} + if native_input: + owner['input_mode'] = a.input_mode owned = [root, 'cache/' + id, 'files/extension-data/' + id, 'shared_prefs/extension-' + id + '.xml', 'shared_prefs/extension-' + id + '.xml.bak', evidence] if not legacy: require(not text('shell', 'run-as', APP, 'id').startswith(('uid=0(', 'uid=1000(', 'uid=2000(')), 'The app must remain unprivileged') - for path in [lease, evidence, 'files/reviewed-text-fixture-lease', 'files/empty-view-fixture-lease'] + owned[:5]: + for path in [lease, evidence, 'files/webview-compatibility-lease', 'files/native-input-lease', 'files/reviewed-text-fixture-lease', 'files/empty-view-fixture-lease'] + owned[:5]: require(absent(path), 'A prior recovery owner/path remains: ' + path) a.output.mkdir(parents=True, exist_ok=False, mode=0o700) (a.output / 'private-owner.json').write_text(json.dumps(owner)); (a.output / 'private-owner.json').chmod(0o600) @@ -162,11 +200,16 @@ def restore_font(wanted): 'api': 26 if legacy else 36, 'font_scale': a.font_scale, 'layout': a.layout, 'cleanup': {}, 'provider_before': [line.strip() for line in text('shell', 'dumpsys', 'webviewupdate').splitlines() if 'Current WebView package' in line], 'original_geometry': {'size': size, 'density': density}, 'original_font_scale': font} + r['suite'] = a.suite + r['input_mode'] = a.input_mode + if ime_settings: + path = a.output / 'private-ime-settings.json'; path.write_text(json.dumps(ime_settings)); path.chmod(0o600) + r['ime_restoration_scope'] = 'Four raw secure settings: default, enabled methods, selected subtype and subtype history; verified before test-APK stop and after its removal/replacement' def save(): (a.output / 'record.json').write_text(json.dumps(r, indent=2) + '\n') save() before = {}; originals = {}; palette = None; original_profile = None - lease_claimed = False; installed = [] + lease_claimed = False; installed = []; ime_activation_attempted = False def claim(): # A never-launched fresh installation has no files directory yet. raw('shell', 'run-as', APP, 'mkdir', '-p', 'files') @@ -174,6 +217,9 @@ def claim(): raw('shell', 'run-as', APP, 'tee', lease + '/owner.json', data=json.dumps(owner).encode()) def verify_owner(): require(json.loads(raw('exec-out', 'run-as', APP, 'cat', lease + '/owner.json')) == owner, 'Recovery owner changed') + def verify_input_method(): + require(read_input_method_settings() == ime_settings, + 'Original input method settings changed after test APK restoration') if not legacy: claim(); lease_claimed = True for pkg in (TEST, APP): @@ -196,16 +242,24 @@ def verify_owner(): require(sha(raw('exec-out', 'cat', text('shell', 'pm', 'path', pkg).removeprefix('package:'))) == sha(apk.read_bytes()), 'Installed APK differs') if legacy: claim(); lease_claimed = True - raw('shell', 'run-as', APP, 'mkdir', '-p', root) + if ime_settings: + ime_activation_attempted = True + raw('shell', 'ime', 'enable', OWNED_IME) + raw('shell', 'ime', 'set', OWNED_IME) + require(text('shell', 'settings', 'get', 'secure', 'default_input_method') == OWNED_IME, 'Owned IME was not selected') + if not native_input: + raw('shell', 'run-as', APP, 'mkdir', '-p', root) r['fixture_sha256'] = {} - for name, data in fixture(id).items(): + for name, data in ({} if native_input else fixture(id)).items(): raw('shell', 'run-as', APP, 'tee', root + '/' + name, data=data); r['fixture_sha256'][name] = sha(data) if not legacy and a.layout != 'tablet': raw('shell', 'wm', 'size', '1080x2340' if a.layout == 'phone' else '2340x1080'); raw('shell', 'wm', 'density', '420') raw('shell', 'settings', 'put', 'system', 'font_scale', str(a.font_scale)) save() - command = ['shell', 'am', 'instrument', '-w', '-r', '-e', 'webViewFixture', 'true', '-e', 'webViewOwner', nonce, - '-e', 'class', ','.join(CLASS + '#' + name for name in methods), TEST + '/androidx.test.runner.AndroidJUnitRunner'] + command = ['shell', 'am', 'instrument', '-w', '-r', '-e', 'nativeInputFixture' if native_input else 'webViewFixture', 'true', + '-e', 'nativeInputOwner' if native_input else 'webViewOwner', nonce, + '-e', 'nativeInputMode', a.input_mode, + '-e', 'class', ','.join(suite_class + '#' + name for name in methods), TEST + '/androidx.test.runner.AndroidJUnitRunner'] with (a.output / 'tests.log').open('xb') as log: result = subprocess.run(adb + command, stdout=log, stderr=subprocess.STDOUT, timeout=90 * len(methods)) r['instrumentation_exit_code'] = result.returncode @@ -233,6 +287,33 @@ def idle_owner(): require('ActiveInstrumentation{' not in text('shell', 'dumpsys', 'activity', 'processes'), 'Do not restore under active instrumentation') verify_owner() c.attempt('idle-owned-instrumentation', idle_owner) + if not c.errors and ime_activation_attempted: + def restore_input_method(): + verify_owner() + raw('shell', 'ime', 'set', shlex.quote(ime_settings['default_input_method'])) + raw('shell', 'ime', 'disable', OWNED_IME) + deadline = time.monotonic() + 5 + stable = None + samples = r.setdefault('ime_restore_observations', []) + while time.monotonic() < deadline: + started = time.monotonic() + current = read_input_method_settings() + observed = time.monotonic() + samples.append({'query_ms': round((observed - started) * 1000), + 'all_raw_fields_equal': current == ime_settings}) + if current == ime_settings: + if stable is None: + stable = observed + if observed - stable >= .5: + return + else: + stable = None + for key, value in ime_settings.items(): + if current[key] != value: + raw('shell', 'settings', 'delete', 'secure', key) if value == 'null' else raw('shell', 'settings', 'put', 'secure', key, shlex.quote(value)) + time.sleep(.1) + require(False, 'Original raw input method settings did not settle') + c.attempt('restore-input-method-before-test-apk-stop', restore_input_method) if not c.errors: for pkg in (TEST, APP): c.attempt('stop-' + pkg, lambda pkg=pkg: raw('shell', 'am', 'force-stop', pkg)) @@ -280,13 +361,18 @@ def preserved_data(): if legacy: # The app lease stays held until PackageManager removes # the entire owned app. Host journal stays for verification. - for pkg in (TEST, APP): - c.attempt('restore-absence-' + pkg, lambda pkg=pkg: raw('uninstall', pkg)) - c.attempt('verify-initial-package-absence', lambda: require(all(not package_path(pkg) for pkg in (APP, TEST)), 'A package remains')) + c.attempt('restore-absence-' + TEST, lambda: raw('uninstall', TEST)) + if not c.errors and ime_activation_attempted: + c.attempt('verify-input-method-after-test-apk-removal', verify_input_method) + if not c.errors: + c.attempt('restore-absence-' + APP, lambda: raw('uninstall', APP)) + c.attempt('verify-initial-package-absence', lambda: require(all(not package_path(pkg) for pkg in (APP, TEST)), 'A package remains')) else: for pkg, (path, expected) in originals.items(): c.attempt('restore-binary-' + pkg, lambda path=path: raw('install', '-r', '-t', str(path), timeout=120)) c.attempt('verify-binary-' + pkg, lambda pkg=pkg, expected=expected: require(sha(raw('exec-out', 'cat', text('shell', 'pm', 'path', pkg).removeprefix('package:'))) == expected, 'Original binary differs')) + if not c.errors and ime_activation_attempted: + c.attempt('verify-input-method-after-original-apks', verify_input_method) if not c.errors: verify_owner() # Final device operation: no restoration runs after release. diff --git a/scripts/tests/test_webview_engine_runner.py b/scripts/tests/test_webview_engine_runner.py index d0bc8d90..f6ea223a 100644 --- a/scripts/tests/test_webview_engine_runner.py +++ b/scripts/tests/test_webview_engine_runner.py @@ -2,6 +2,7 @@ import io from pathlib import Path import sys +import subprocess import tarfile import unittest @@ -13,6 +14,34 @@ class WebViewRunnerTests(unittest.TestCase): + def rejected_suite(self, suite, method, extra=()): + result = subprocess.run([sys.executable, str(ROOT / 'test-webview-engine.py'), + '--serial', 'emulator-5598', '--avd', 'Droidcast_WebView_API26_27caf3', + '--apk', '/unused-app.apk', '--test-apk', '/unused-test.apk', '--output', '/unused-output', + '--suite', suite, '--cases', method, *extra], capture_output=True, text=True) + self.assertNotEqual(0, result.returncode) + self.assertNotIn('Both frozen APKs are required', result.stderr) + self.assertNotIn('FileNotFoundError', result.stderr) + return result.stderr + + def test_native_suite_cannot_select_engine_cases(self): + self.assertIn('Unsupported native cases', self.rejected_suite('native-input', 'incompatibleEngineShowsNativeRecoveryWithoutDispatch')) + + def test_default_engine_suite_cannot_select_native_input_cases(self): + self.assertIn('Unsupported native cases', self.rejected_suite('engine', 'recordCallerSelectionAcrossNativeRoutes')) + + def test_engine_negative_classifier_cannot_certify_native_input_diagnostics(self): + self.assertIn('Negative control is limited', self.rejected_suite('native-input', 'recordDefaultImeAndControlledCompositionNavigation', ['--expected-negative'])) + + def test_controlled_contracts_require_owned_ime(self): + self.assertIn('Controlled contracts require', self.rejected_suite('native-input', 'exactContentAssertionAcceptsCompositionAndRejectsChangedCharacters')) + + def test_system_ime_diagnostics_cannot_use_owned_ime(self): + self.assertIn('Owned IME is limited', self.rejected_suite('native-input', 'recordCallerSelectionAcrossNativeRoutes', ['--input-mode', 'owned'])) + + def test_engine_suite_cannot_change_input_method(self): + self.assertIn('Owned IME is limited', self.rejected_suite('engine', 'incompatibleEngineShowsNativeRecoveryWithoutDispatch', ['--input-mode', 'owned'])) + def test_package_absence_uses_exact_successful_inventory(self): self.assertFalse(runner.listed_package_presence('', 'dev.tinycast.android')) self.assertFalse(runner.listed_package_presence('package:dev.tinycast.android.test\n', 'dev.tinycast.android'))